Comment une instruction 68030 invalide a permis au Mac Classic II de démarrer
- Apple a commis une erreur dans la ROM du Macintosh Classic II, ce qui pouvait empêcher le démarrage. Cependant, le CPU Motorola MC68030 a exécuté une instruction non définie, évitant ainsi le plantage et permettant un démarrage réussi.
MAME et l’émulation Mac
- MAME est un émulateur prenant en charge divers jeux d’arcade, et il est considéré comme l’un des émulateurs les plus complets pour les modèles de Mac basés sur le 68000.
- L’auteur a voulu résoudre le problème du Mac Classic II à l’aide de MAME, et a constaté qu’il démarrait normalement en mode d’adressage 24 bits, mais échouait en mode d’adressage 32 bits.
Mode d’adressage 24 bits vs 32 bits
- Le processeur Motorola 68000 disposait de 24 lignes d’adresse, et Apple utilisait les 8 bits restants pour stocker des drapeaux.
- Les nouvelles machines et les nouveaux processeurs prenaient en charge un espace d’adressage 32 bits, ce qui a conduit à proposer deux modes afin de résoudre les problèmes de compatibilité.
Analyse de la cause du problème
- Pour comprendre pourquoi le Classic II échouait à démarrer en mode 32 bits dans MAME, l’auteur a utilisé le débogueur pour suivre l’exécution du code.
- D’après la documentation technique d’Apple,
0000000F signifie qu’une exception s’est produite, et 00000001 indique une erreur de bus.
Analyse du code de la ROM
- Une instruction accédant à une adresse incorrecte a été repérée dans le code de la ROM.
- Cette instruction stockait une adresse erronée dans le registre A1, ce qui provoquait une erreur Sad Mac.
Différences avec le matériel réel
- Sur le matériel réel, l’instruction invalide modifiait la valeur de A1 pour en faire une adresse valide.
- L’émulateur de MAME ne traitait pas correctement cette instruction, ce qui faisait que A1 conservait une adresse invalide.
Conclusion
- Apple n’avait pas conscience du bug potentiel dans la ROM du Classic II, et l’instruction invalide du 68030 le masquait.
- Pour corriger ce problème, MAME a patché le bug de la ROM afin de permettre le démarrage du Classic II.
- Ce cas montre qu’un émulateur peut révéler de nouveaux faits sur le fonctionnement du matériel.
1 commentaires
Commentaires sur Hacker News
Partage son expérience de découverte d’une instruction non documentée du MC68030. Cette instruction modifie la valeur du registre A1 et effectue un cycle de bus lecture-modification-écriture
Mentionne qu’il y a eu beaucoup de signalements de bugs concernant l’émulation de l’instruction CAS
Partage des souvenirs du passé autour de l’Amiga 2000 et du processeur 68000
La plupart des CPU ont des instructions non documentées, et les 68k ne font pas exception
Il faudrait tenter de comprendre le comportement exact de l’instruction non documentée du MC68030
Se dit impressionné par l’efficacité de l’interface du débogueur Mac
S’interroge sur le fait que cette instruction ait pu être utilisée comme mécanisme de protection contre la copie, et se demande si elle se produit sur tous les 68030
Se demande si les '040/060 prennent aussi en charge cette « instruction non documentée »