Au cours de mes recherches sur les détails techniques du SE/30, j’ai découvert sur mac68k.info qu’il existait un « Diagnostic Mode » sur certains Macintosh 68k. Ce mode est utilisé par le TechStep, un appareil permettant de tester les divers composants d’un Macintosh.
Une manière simple d’accéder à ce mode est d’utiliser le bouton d’interruption du mac (le « Programmer’s Interrupt switch ») avant que l’ordinateur ne démarre l’OS.
Au delà des possibilités de tester le hardware de la machine, ce mode dispose de deux éléments très intéressants :
- la commande « *D » permettant de déposer des données, et donc aussi du code, dans la mémoire de l’ordinateur cible
- la commande « *G » permettant de lancer l’exécution du code sur l’ordinateur cible à une adresse donnée
Ces commandes sont d’ailleurs mises en évidence dans la section « TechStep Requests CPUID on IIsi », sur la page de mac68k.info, où le TechStep envoie un petit programme permettant de récupérer le CPUID de la cible.
J’avais également vu le travail de David Ludwig sur GitHub qui a réalisé une ROM pour Mac Plus en C++ servant à afficher une image à l’écran. J’ai donc pensé à utiliser le « Diagnostic Mode » plutôt que de devoir graver une ROM pour lancer le programme de David.
Bien évidemment il a fallu modifier son code, qui est spécifique à un Mac Plus, et j’ai du adapter la gestion de la pile pour pouvoir retourner au « Diagnostic Mode » après exécution ; il est ainsi possible de faire plusieurs tests sans devoir appuyer de nouveau sur le bouton d’interruption à chaque fois.
Le code source modifié est disponible sur GitHub, il nécessite la suite g++-m68k-linux-gnu
.
J’ai crée un outil, stm_send, également disponible sur GitHub, servant à uploader le code dans la mémoire du mac puis à l’exécuter. Le transfert se faisant en hexadécimal à 9600 bauds ce n’est pas très rapide. Les réglages effectués sur le port série sont spécifiques à linux.
Il serait possible d’accélérer les transferts en le faisant en deux temps : envoyer d’abord un programme qui passe le SCC à une vitesse plus élevée avant de rendre la main au « Service Mode », puis envoyer les données.
Pour uploader le binaire sur le mac, après compilation, la procédure est la suivante :
- connecter le port série du mac « Modem » à un ordinateur
- allumer le mac
- lorsque le curseur de la souris apparait appuyer sur le bouton d’interruption
- exécuter le programme stm_send
Et voici le résultat :
Au delà de la possibilité d’afficher une photo de Harry, mon chat, je vois deux choses intéressantes qui pourraient voir le jour grâce à cette méthode :
- créer des disquettes de démarrage en ne disposant que d’une machine sans OS
- installer un OS de base sur un disque SCSI sans disposer des disquettes d’installation
Pour peu qu’on réussisse à appeler correctement les routines qui sont dans la ROM du Macintosh cela ne devrait pas être trop complexe.
Mon problème pour l’instant est que routines utilisent la convention de passage de paramètres du langage Pascal, que je ne connait pas du tout, et pour l’instant je n’arrive pas à appeler la moindre routine sans faire crasher la machine 🙁
A suivre donc …