- Comparés aux 128 KB de mémoire du Macintosh d’origine, les 264 KB de RAM du Raspberry Pi sont suffisants. En 1984, le Macintosh coûtait un tiers du prix d’une Volkswagen Golf.
- Émulation d’un Mac avec un RP2040 relié à une sortie VGA monochrome et à un USB/clavier pour exécuter les premières applications Mac
- Les informations publiées sur GitHub permettent à n’importe qui de le construire soi-même
Qu’est-ce que Pico-Mac ?
- Le microcontrôleur Raspberry Pi RP2040 (avec une carte Pico) pilote une vidéo VGA monochrome, reçoit les entrées d’un clavier/souris USB et émule un ordinateur Macintosh 128K ainsi qu’un périphérique de stockage sur disque
- Les 2 MB de flash du RP2040 suffisent pour une image disque contenant l’OS et les logiciels
- Il peut exécuter des applications Macintosh des débuts comme MacDraw, MacWrite et MacPaint
Le parcours
Trois règles
- Il faut que ce soit amusant.
- Je n’ai pas envie d’apprendre l’assembleur 68K.
- Je n’ai pas envie de plonger profondément dans les entrailles des premiers logiciels système du Mac.
Mac 128K
- CPU Motorola 68000, 8 MHz.
- Configuration matérielle de base : memory map, clavier/souris, scan vidéo, etc.
- Le Mac 128K et le Mac 512K ne diffèrent que par la RAM.
- Le Mac Plus ajoute le SCSI et un lecteur de disquette 800K.
Émulateur Mac : umac
- Construction d’un émulateur Mac 128K en utilisant l’interpréteur Musashi 68K.
- Chargement de l’image ROM, allocation de la RAM, configuration des messages de debug et du logging.
- Ajout du décodage d’adresses pour diriger les lectures/écritures CPU vers la RAM ou la ROM.
- Après l’accès à la puce IWM, obtention de l’icône "Unknown Disc".
- Enveloppé dans un frontend SDL2 pour vérifier le rafraîchissement de l’écran en temps réel.
Le matériel et le RP2040
- Sortie en VGA pour la vidéo 512x342x1 et intégration de l’exemple TinyUSB HID.
- Le travail VGA via PIO balaie les données vidéo et utilise le DMA pour sortir les données du framebuffer.
- Mise en place d’une sortie vidéo stable grâce à plusieurs reconfigurations des canaux DMA.
Retour à l’émulation
- Modification de Musashi pour stocker en flash sa grande table de saut de décodage des opcode.
- Suppression du désassembleur et du comptage des cycles d’exécution.
- Réduction au minimum de l’utilisation de la RAM pour permettre la compilation et l’exécution sur Pico.
Performances
- Overclocking du Pico à 250 MHz pour améliorer les performances.
- Stockage en RAM des 200 fonctions d’opcode les plus utilisées pour atteindre 1,4 MIPS.
Mot de la fin
- Le projet MicroMac a été une expérience amusante et enrichissante.
- Il est possible de le construire soi-même via le lien GitHub.
L’avis de GN⁺
- Projet intéressant : MicroMac est un projet intéressant qui émule un Macintosh classique avec un matériel bon marché. La combinaison du logiciel et du matériel permet de retrouver le plaisir de l’ingénierie.
- Opportunité d’apprentissage : ce projet offre aux ingénieurs logiciel débutants une excellente occasion de comprendre l’interaction entre matériel et logiciel. Il permet notamment d’apprendre des concepts comme l’émulation, le PIO et le DMA.
- Optimisation des performances : le processus d’optimisation permet d’apprendre différents défis techniques et leurs solutions. Il aide en particulier à comprendre l’importance de la gestion mémoire et de l’overclocking.
- Partage avec la communauté : le projet, partagé via GitHub, offre des possibilités de collaboration avec d’autres. Cela illustre bien les avantages de la communauté open source.
- Possibilités futures : ce projet peut être étendu en utilisant un MCU doté de plus de RAM. Cela ouvre la voie à l’exécution d’applications plus complexes.
1 commentaires
Réactions sur Hacker News
Difficulté à trouver un câble VGA : il lui fallait récemment un câble VGA pour une installation artistique, mais personne autour de lui n’en avait, donc il a fini par en acheter un neuf. Dommage quand on voit combien de câbles sont jetés.
Projet Amiga : il voulait construire un Amiga capable d’exécuter AmigaOS 3.2. L’idée de créer en impression 3D une petite coque reprenant la forme d’origine est adorable. L’absence d’un vieux lecteur de disquettes enlève un peu au réalisme, mais il aime l’idée d’utiliser une machine dédiée au lieu de lancer un émulateur sur un PC de bureau existant. L’approche bas niveau où le RP2040 joue le rôle du 68k est intéressante.
Première impression du Mac : il travaillait dans un magasin d’informatique quand le Mac est sorti pour la première fois. En voyant les coins arrondis de l’écran, il a admiré le génie du produit.
Éloges du projet : ce projet est très impressionnant. La lecture était plaisante et le style d’écriture lui a aussi plu. Il essaie d’utiliser des builds à double cible pour le prototypage/débogage rapide dans les projets embarqués, mais finit par utiliser plus souvent le build PC. Davantage de gens devraient faire cela.
Interface VGA : l’interface VGA est ce qui l’impressionne le plus.
Défi de bidouillage sur ESP32 : il a essayé de faire tourner vMac sur un ESP32, mais sans succès. Ce projet est d’un tout autre niveau. Respect.
Exploration des petits SBC : il se demande quel est le plus petit SBC capable d’émuler à pleine vitesse les derniers Mac 68k ou les Mac PPC du milieu à la fin des années 1990. Installé dans un châssis d’ordinateur portable moderne, cela pourrait devenir un portable utile en « mode zen » capable de faire tourner System 7.6.1 jusqu’à Mac OS 9.x.
Miroir du blog : il partage un lien miroir parce que le blog semble surchargé.
Mention de MacPaint : explication du fait de ne pas avoir mentionné MacPaint. Il pense que Bill Atkinson connaissait toutes les astuces et s’en serait servi pour faire fonctionner MacPaint dans les contraintes d’origine. Pour l’auteur, ce n’est pas un combat équitable.
Trouver un connecteur VGA : il lui fallait un connecteur VGA mais il n’arrivait pas à en trouver. En se promenant pendant la pause déjeuner, il a trouvé un câble VGA dans la rue. Parfois, ce genre de chose arrive.