Un emulatore è un software che consente a un sistema informatico di comportarsi come un altro dispositivo, con una configurazione spesso completamente differente. L’emulatore riproduce le funzionalità, il comportamento e l’interfaccia di un sistema su una macchina dotata di caratteristiche spesso del tutto diverse. Un emulatore IBM PC/XT è progettato per replicare il funzionamento di un computer IBM PC/XT, introdotto sul mercato all’inizio degli anni ’80.
Proprio quest’anno ricorrono 40 anni dalla nascita del computer IBM PC/XT: in un altro articolo abbiamo voluto ricordare il sistema che dette il via all’era del personal computing, con tanti produttori che da allora iniziarono a presentare il loro PC IBM-compatibili.
Cos’è un emulatore IBM PC/XT e come funziona MartyPC
Un emulatore IBM PC/XT consente di eseguire programmi e giochi sviluppati per il sistema originale utilizzando le macchine moderne. Simulando l’hardware del PC/XT originale, compresi il processore, la memoria, la scheda madre, i controller di input/output e altre componenti, il software può funzionare come se fosse in esecuzione sulla macchina IBM dell’epoca.
L’accuratezza e le prestazioni di un emulatore possono variare a seconda dell’implementazione specifica e delle risorse del sistema ospitante. Proprio su questi aspetti ha lavorato l’ideatore del progetto MartyPC, da poco reso pubblico su GitHub. Si tratta di un emulatore in grado di riprodurre il funzionamento dei PC IBM 5150 e 5160 XT originali. Sviluppato nel linguaggio Rust a partire da aprile 2022, MartyPC è andato ben oltre gli obiettivi che aveva prefissato l’autore.
Il progetto, infatti, ambisce a diventare l’emulatore di riferimento: è scritto infatti in modo chiaro e leggibile, descrive con dovizia di particolari il funzionamento del sistema e dell’hardware, è ricco di strumenti di debug, integra la possibilità di registrare gli eventi a tutto vantaggio degli sviluppatori e dei software “vecchia scuola”.
In un altro articolo ci siamo concentrati sulle differenze tra emulazione e virtualizzazione, anche da livello di browser Web.
Perché MartyPC è un emulatore IBM PC/XT davvero accurato
Lo sviluppatore di MartyPC spiega di aver lavorato sodo per rendere il più accurata possibile l’emulazione della CPU Intel 8088. Per fare ciò, è stato fatto uso di una vera CPU 8088 collegata a un microcontrollore Arduino MEGA per convalidare il comportamento dell’emulatore.
Come spiegato nella pagina dedicata al progetto Arduino8088, l’autore di MartyPC ha così potuto eseguire un’istruzione contemporaneamente sull’emulatore e su una CPU reale paragonando poi i risultati ottenuti, ciclo per ciclo.
La famosa demo del 2015 8088 MPH si concentra sull’utilizzo creativo e ottimizzato delle risorse hardware disponibili sull’IBM PC/XT. Vuole mostrare capacità grafiche e sonore del sistema IBM originale utilizzando modalità che inizialmente sarebbero parse impossibili, date le limitatissime specifiche tecniche dell’epoca. La demo è diventata popolare per la sua abilità nell’esplorare le potenzialità dei computer vintage. Essa vuole rendere evidente che anche le piattaforme più limitate possono produrre risultati impressionanti quando si ha una conoscenza approfondita delle loro capacità.
Più di recente l’autore dell’emulatore ha anche implementato con successo l’esecuzione della demo nota con il nome di Area 5150. Grazie all’utilizzo di WebAssembly, essa può funzionare all’interno del normale browser Web.
Perfetta resa del comportamento della CPU e del monitor CGA utilizzato sugli IBM PC dell’epoca
MartyPC non solo garantisce un’implementazione della CPU 8088 esatta ciclo per ciclo (è aderente ai tempi fissati a livello di microcodice), ma fa lo stesso per il supporto CGA.
La grafica CGA (Color Graphics Adapter) è uno standard per i PC introdotto da IBM nel 1981 che supportava una risoluzione massima di 320 x 200 pixel con una palette di 16 colori, di cui potevano essere visualizzati simultaneamente solo 4 colori. La frequenza di refresh era di 60 Hz per i monitor a colori e 50 Hz per i monitor monocromatici.
Nonostante la sua bassa risoluzione e le capacità grafiche limitate, CGA è stato ampiamente utilizzato nei primi anni dei PC e ha aperto la strada per lo sviluppo di standard successivi come EGA (Enhanced Graphics Adapter) e VGA (Video Graphics Array).
L’emulatore MartyPC rappresenta correttamente il dot clock dell’IBM PC/XT che era tre volte la frequenza operativa della CPU. Il dot clock nel contesto di CGA si riferisce alla frequenza di clock utilizzata per generare i segnali video per l’output grafico. I punti o “dot” che compongono l’immagine sullo schermo erano generati alla velocità fissata dal dot clock.
Particolarmente apprezzabile è inoltre la resa corretta dell’output del monitor, overscan incluso, cosa che la maggior parte degli altri emulatori di PC non si è mai presa la briga di fare. L’overscan era un fenomeno comune a causa delle limitate capacità dei monitor CRT (Cathode Ray Tube) utilizzati all’epoca: si riferisce alla porzione dell’immagine generata dal computer che viene tagliata o nascosta al di fuori dell’area visibile dello schermo del monitor.
Come provare MartyPC
Senza installare nulla, è possibile provare l’emulatore MartyPC utilizzando le varie demo di implementazione del sistema IBM PC/XT disponibili in questa pagina.
Diversamente è possibile utilizzare la guida per l’utente di MartyPC per clonare il repository GitHub, scaricare le varie ROM messe a disposizione dall’autore e avviare l’emulatore utilizzando la sua interfaccia grafica.
MartyPC include FreeDOS 1.3 in modo da presentare una piattaforma immediatamente funzionante. Tale versione di DOS, tuttavia, è contraddistinta da un elevato utilizzo della memoria e alcuni programmi e giochi potrebbero non funzionare. Il consiglio è quello di usare una versione precedente di DOS (viene suggerita la release 3.3 per le macchine dell’epoca emulate tramite MartyPC).