2 pontos por GN⁺ 2025-01-27 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2025-01-27
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

    • É possível que essa instrução não tenha sido criada intencionalmente pelos projetistas da CPU, mas seja uma instrução ilegal
    • A CPU normalmente detecta instruções ilegais e gera uma exceção. Porém, em certas situações, a exceção pode não ocorrer
    • Segundo o manual do MC68030, instruções ilegais incluem padrões de bits que não correspondem ao padrão de bits de nenhuma instrução válida
    • De acordo com o manual, a instrução é composta por 3 palavras; a primeira é normal, e os bits estranhos aparecem na segunda palavra
  • Menciona que havia muitos relatos de bugs na emulação da instrução CAS

    • Lembra de um bug em King of Fighters que verificava incorretamente o carry flag da instrução SBCD
    • A SNK era como um deus dos chips 68000
  • Compartilha lembranças do Amiga 2000 e do processador 68000

    • Menciona a empolgação com o 68020, o 68030 e a arquitetura RISC
    • Destaca que agora vivemos em uma era em que é possível conversar com computadores em linguagem natural
  • A maioria das CPUs tem instruções não documentadas, e a 68k não é exceção

    • Na época, muita gente se concentrava em x86/PC, que era uma arquitetura mais aberta e estável
    • O microcódigo do 8088 e do 8086 foi desmontado e estudado
  • É necessário tentar entender o comportamento exato da instrução não documentada do MC68030

    • O valor resultante de A1 pode variar conforme o valor original de A1, o valor de A7 e o contador de programa
    • O MAME faz um patch desse bug na ROM para permitir que o Classic II inicialize
  • Admira a eficiência da interface do depurador do Mac

    • Isso não deve ajudar a acelerar a conversão no Amiga
  • Pergunta se essa instrução foi usada para fins de proteção contra cópia e se ocorre em todos os 68030

    • Parece impossível nos Macs modernos. A documentação técnica da Apple hoje em dia não é boa
  • Pergunta se o '040/060 também oferece suporte a essa "instrução não documentada"