Présentation
MartyPC est un émulateur open‑source des premiers PC IBM (Model 5150, XT, PCjr, Tandy 1000) écrit en Rust. Il fonctionne sous Windows, Linux et macOS, et propose même une version Web. La version stable la plus récente est la 0.4.1, tandis que la branche de développement propose la 0.5.0. L’objectif affiché est d’offrir un environnement de développement rétro où les programmeurs peuvent observer l’exécution instruction par instruction d’un processeur Intel 8088.
Architecture et précision du processeur
Le cœur de MartyPC repose sur une implémentation cycle‑accurate du CPU 8088, incluant le BIU asynchrone, la file d’instructions et la logique de prélecture. Cette granularité permet de reproduire les délais exacts de chaque micro‑opération, contrairement aux émulateurs qui se contentent de modèles temporels approximatifs. Le projet propose également une version préliminaire du NEC V20, basée sur le même moteur mais sans ajustement complet des timings.
Les périphériques sont modélisés à un niveau bas : le 8255 PPI gère le clavier et le « turbo bit », le 8259 PIC implémente la plupart des fonctions d’interruption, le 8253 PIT fournit un son PCM précis, le 8237 DMA simule les transferts (les rafraîchissements DRAM sont planifiés), et le 8250 UART supporte le passage série ou l’émulation de souris. Chaque composant a été étudié à l’aide d’appareils matériels (Arduino, analyseur logique) afin de coller aux spécifications originales.
Validation et performances
Pour garantir la fidélité, l’auteur a comparé l’émulateur à un vrai 8088 connecté à un Arduino MEGA. Le même flux d’instructions était exécuté simultanément sur le matériel et sur MartyPC, puis les cycles ont été comparés. Cette méthode a permis d’identifier et de corriger des écarts de timing, notamment dans la gestion de la file de prélecture. Depuis la mise à jour de juin 2024 du test‑suite 8088 V2, MartyPC atteint 99,9997 % de précision cycle‑par‑cycle.
Le niveau de précision a déjà permis d’exécuter des démos historiques qui exploitent des effets temporels très fins. En avril 2023, l’émulateur pouvait faire tourner la démo « 8088 MPH », et en mai 2023 il est devenu le premier à reproduire intégralement chaque effet de la célèbre démo « Area 5150 ». Ces succès démontrent que les marges d’erreur sont suffisamment faibles pour ne pas perturber les comportements dépendants du timing.
Perspectives et limites
Malgré ces avancées, certaines parties restent approximatives. Le contrôleur DMA 8237 ne réalise pas de transferts réels, ce qui peut affecter les programmes qui s’appuient sur des accès DMA précis. Le PIC 8259 ne supporte pas encore la rotation de priorité ni les modes imbriqués, limitant la simulation de scénarios d’interruption complexes. Le support du V20, bien que fonctionnel, n’est pas encore totalement synchronisé avec le 8088, ce qui peut entraîner des différences de performance.
Le projet continue d’évoluer grâce à la communauté GitHub (49 forks, 912 stars). Les contributeurs peuvent télécharger les builds officiels ou compiler la version de développement à partir du code source, en suivant les instructions du README. L’accent reste mis sur la précision scientifique plutôt que sur la facilité d’utilisation, ce qui en fait un outil de référence pour les développeurs rétro et les chercheurs en architecture de processeur.