quarta-feira, 28 de setembro de 2022

Bug da Multiface 1 (parte 2)

Dando sequência ao artigo sobre o bug recém descoberto da Multiface 1, aqui explicarei o motivo desse comportamento.

Quando se tenta salvar a memória do TK90X com a M1, se houver uma sequência de bytes (em hexadecimal) #37, #ED e #CB,  acaba ocasionando um crash. Em outras palavras, não é possível salvar um conteúdo de RAM contendo a referida sequência.

Para entender o motivo, é necessário saber que a M1 comprime a RAM nos endereços 16384-23295 (#4000-#5AFF em hex) e 25264-65535 (#62B0-#FFFF em hex) antes de salvar na fita (ou outra mídia suportada). Após salvar a RAM ou quando o programa salvo é carregado, esses blocos são descomprimidos. O esquema de compressão é rudimentar, se uma sequência do mesmo valor de byte é encontrada 8 ou mais vezes, é substituída por uma sequência de 6 bytes. Os 3 primeiros fazem parte do identificador de bloco comprimido #CB, #ED e #37. O 4º é o byte que se repete e o 5º e o 6º é o contador de 16 bits do número de vezes da repetição.

Entretanto na tela acima, a sequência aparece como sendo invertida: #FF, #FF, #FF, #37, #ED e #CB.  Na verdade a descompressão ocorre na ordem inversa, isto é, do endereço final em direção ao endereço inicial, portanto o programa vê primeiro #CB, depois #ED e assim por diante. Explicando o que aconteceu no vídeo,  após encontrar os bytes identificadores, a rotina de descompressão entende que deve repetir 255 (#FF) por 65535 (#FFFF) vezes que, na prática, é preencher toda a memória com 255. A RAM acaba sendo corrompida e o sistema entra em crash.

Portanto qualquer programa  contendo a sequência #37, #ED e #CB acaba corrompendo a RAM, que pode resultar em resultados catastróficos. Tal fato só não se verifica nos endereços 23296-25253 (#5B00-#62AF) porque esta região não é comprimida pela M1.

Daí, emerge uma questão. Será que os programas não contém essa famigerada sequência? Ou, se contém, a RAM não é corrompida o suficiente para não funcionar? Outra questão: será que existe algum programa não copiável com a M1? Pretendo especular um pouco mais no próximo artigo.

2 comentários:

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.