2 points par GN⁺ 2025-01-27 | 1 commentaires | Partager sur WhatsApp

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

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

    • Il est possible que cette instruction n’ait pas été créée intentionnellement par les concepteurs du CPU, mais soit plutôt une instruction illégale
    • En général, le CPU détecte les instructions illégales et déclenche une exception. Cependant, dans certaines situations, aucune exception ne peut être levée
    • Selon la documentation du MC68030, une instruction illégale contient un motif de bits qui ne correspond au motif d’aucune instruction valide
    • D’après le manuel, l’instruction se compose de 3 mots, avec un premier mot normal et des bits anormaux apparaissant dans le deuxième mot
  • Mentionne qu’il y a eu beaucoup de signalements de bugs concernant l’émulation de l’instruction CAS

    • Il se souvient d’un bug dans King of Fighters où l’indicateur de retenue de l’instruction SBCD était mal vérifié
    • SNK était comme un dieu de la puce 68000
  • Partage des souvenirs du passé autour de l’Amiga 2000 et du processeur 68000

    • Évoque l’enthousiasme suscité par les 68020, 68030 et l’architecture RISC
    • Souligne qu’on vit aujourd’hui à une époque où l’on peut parler aux ordinateurs en langage naturel
  • La plupart des CPU ont des instructions non documentées, et les 68k ne font pas exception

    • À l’époque, beaucoup de gens se concentraient sur le x86/PC, une architecture plus ouverte et plus stable
    • Le microcode des 8088 et 8086 a été désassemblé et étudié
  • Il faudrait tenter de comprendre le comportement exact de l’instruction non documentée du MC68030

    • La valeur résultante de A1 peut varier selon sa valeur d’origine, la valeur de A7 et le compteur ordinal
    • MAME corrige ce bug dans la ROM pour permettre au Classic II de démarrer
  • Se dit impressionné par l’efficacité de l’interface du débogueur Mac

    • Cela n’accélérera probablement pas les conversions sur Amiga
  • 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

    • Cela semble impossible sur les Mac modernes. La documentation technique d’Apple n’est plus très bonne de nos jours
  • Se demande si les '040/060 prennent aussi en charge cette « instruction non documentée »