2 puntos por GN⁺ 2025-01-27 | 1 comentarios | Compartir por WhatsApp

La historia de cómo una instrucción inválida del 68030 hizo posible el arranque de la Mac Classic II

  • Apple cometió un error en la ROM de la Macintosh Classic II, y eso podía impedir el arranque. Sin embargo, la CPU Motorola MC68030 ejecutó una instrucción no definida, evitó el fallo y permitió que iniciara correctamente.

MAME y la emulación de Mac

  • MAME es un emulador compatible con diversos juegos de arcade, y se le considera uno de los emuladores más completos para modelos Mac basados en 68000.
  • El autor intentó resolver el problema de la Mac Classic II usando MAME, y observó que arrancaba normalmente en modo de direccionamiento de 24 bits, pero fallaba en modo de 32 bits.

Modo de direccionamiento de 24 bits vs 32 bits

  • El procesador Motorola 68000 tenía 24 líneas de dirección, y Apple usaba los 8 bits sobrantes para almacenar banderas.
  • Las máquinas y procesadores más nuevos soportaban un espacio de direcciones de 32 bits, por lo que se ofrecieron dos modos para resolver los problemas de compatibilidad.

Análisis de la causa del problema

  • Para averiguar por qué la Classic II no arrancaba en modo de 32 bits en MAME, se siguió el código con el depurador.
  • Según la documentación técnica de Apple, 0000000F significa que ocurrió una excepción, y 00000001 indica un error de bus.

Análisis del código ROM

  • En el código de la ROM se encontró una instrucción que accedía a una dirección incorrecta.
  • Esa instrucción guardaba una dirección errónea en el registro A1, lo que provocaba el error Sad Mac.

Diferencias con el hardware

  • En el hardware real, la instrucción inválida cambiaba el valor de A1 y lo convertía en una dirección válida.
  • El emulador de MAME no procesaba correctamente esa instrucción, por lo que A1 conservaba la dirección incorrecta.

Conclusión

  • Apple no se dio cuenta del bug que podía existir en la ROM de la Classic II, y la instrucción inválida del 68030 lo estaba ocultando.
  • Para resolver este problema, MAME aplicó un parche al bug de la ROM para que la Classic II pudiera arrancar.
  • Este caso muestra que los emuladores pueden descubrir hechos nuevos sobre el hardware.

1 comentarios

 
GN⁺ 2025-01-27
Opiniones de Hacker News
  • Comparte la experiencia de haber descubierto una instrucción no documentada del MC68030. Esta instrucción modifica el valor del registro A1 y realiza un ciclo de bus de lectura-modificación-escritura

    • Es posible que esta instrucción no haya sido creada intencionalmente por el diseñador del CPU, sino que sea una instrucción ilegal
    • Normalmente, el CPU detecta las instrucciones ilegales y genera una excepción. Sin embargo, en ciertas situaciones puede que no se genere ninguna excepción
    • Según el manual del MC68030, una instrucción ilegal contiene un patrón de bits que no coincide con el patrón de bits de ninguna instrucción válida
    • Según el manual, la instrucción está compuesta por 3 palabras, donde la primera es normal y los bits extraños aparecen en la segunda palabra
  • Menciona que hubo muchos reportes de bugs sobre la emulación de la instrucción CAS

    • Recuerda un bug en King of Fighters donde se verificaba incorrectamente el carry flag de la instrucción SBCD
    • SNK era como un dios del chip 68000
  • Comparte recuerdos del Amiga 2000 y del procesador 68000

    • Menciona la emoción que generaban el 68020, el 68030 y la arquitectura RISC
    • Destaca que ahora vivimos en una época en la que podemos conversar con las computadoras en lenguaje natural
  • La mayoría de los CPU tienen instrucciones no documentadas, y la familia 68k no es la excepción

    • En esa época mucha gente estaba enfocada en x86/PC, ya que era una arquitectura más abierta y estable
    • El microcódigo del 8088 y del 8086 fue desensamblado y estudiado
  • Señala que hace falta intentar comprender el comportamiento exacto de la instrucción no documentada del MC68030

    • El valor resultante de A1 puede variar según el valor original de A1, el valor de A7 y el contador de programa
    • MAME parchea este bug en la ROM para permitir que el Classic II arranque
  • Expresa admiración por la eficiencia de la interfaz del depurador de Mac

    • Pero eso no hará que las conversiones de Amiga sean más rápidas
  • Se pregunta si esta instrucción fue usada con fines de protección anticopia y si ocurre en todos los 68030

    • Parece que en las Mac modernas sería imposible. La documentación técnica de Apple hoy en día no es buena
  • Se pregunta si los '040/060 también soportan esta "instrucción no documentada"