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
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
Menciona que hubo muchos reportes de bugs sobre la emulación de la instrucción CAS
Comparte recuerdos del Amiga 2000 y del procesador 68000
La mayoría de los CPU tienen instrucciones no documentadas, y la familia 68k no es la excepción
Señala que hace falta intentar comprender el comportamiento exacto de la instrucción no documentada del MC68030
Expresa admiración por la eficiencia de la interfaz del depurador de Mac
Se pregunta si esta instrucción fue usada con fines de protección anticopia y si ocurre en todos los 68030
Se pregunta si los '040/060 también soportan esta "instrucción no documentada"