A história de como uma instrução incorreta do 68030 possibilitou a inicialização do Mac Classic II
- A Apple cometeu um erro na ROM do Macintosh Classic II, e isso poderia impedir a inicialização. No entanto, a CPU Motorola MC68030 executou uma instrução não definida, evitando a falha e permitindo que o boot fosse concluído com sucesso.
MAME e emulação de Mac
- O MAME é um emulador que oferece suporte a diversos jogos de arcade e é considerado um dos emuladores mais completos dos modelos de Mac baseados em 68000.
- O autor tentou resolver o problema do Mac Classic II usando o MAME e constatou que ele inicializa normalmente no modo de endereçamento de 24 bits, mas falha no modo de endereçamento de 32 bits.
Modo de endereçamento de 24 bits vs 32 bits
- O processador Motorola 68000 tinha 24 linhas de endereço, e a Apple usava os 8 bits excedentes para armazenar flags.
- Máquinas e processadores mais novos suportavam espaço de endereçamento de 32 bits, e por isso dois modos eram oferecidos para resolver problemas de compatibilidade.
Análise da causa do problema
- Para descobrir por que o Classic II falhava ao inicializar em modo de 32 bits no MAME, o autor rastreou o código com um depurador.
- Segundo a documentação técnica da Apple,
0000000F significa que ocorreu uma exceção, e 00000001 indica um erro de barramento.
Análise do código da ROM
- No código da ROM, foi encontrada uma instrução que acessava um endereço incorreto.
- Essa instrução armazenava um endereço inválido no registrador A1, o que causava o erro Sad Mac.
Diferença em relação ao hardware
- No hardware real, a instrução incorreta alterava o valor de A1 e o transformava em um endereço válido.
- O emulador do MAME não conseguia tratar essa instrução corretamente, fazendo com que A1 mantivesse o endereço inválido.
Conclusão
- A Apple não percebeu o bug potencial na ROM do Classic II, e a instrução incorreta do 68030 estava escondendo esse problema.
- Para resolver isso, o MAME aplicou um patch no bug da ROM para permitir que o Classic II inicializasse.
- Este caso mostra que emuladores podem revelar novos fatos sobre o hardware.
1 comentários
Comentários do Hacker News
Compartilha a experiência de ter descoberto uma instrução não documentada do MC68030. Essa instrução altera o valor do registrador A1 e executa um ciclo de barramento de leitura-modificação-escrita
Menciona que havia muitos relatos de bugs na emulação da instrução CAS
Compartilha lembranças do Amiga 2000 e do processador 68000
A maioria das CPUs tem instruções não documentadas, e a 68k não é exceção
É necessário tentar entender o comportamento exato da instrução não documentada do MC68030
Admira a eficiência da interface do depurador do Mac
Pergunta se essa instrução foi usada para fins de proteção contra cópia e se ocorre em todos os 68030
Pergunta se o '040/060 também oferece suporte a essa "instrução não documentada"