Emulatore TMS9918A per Parallax Propeller-2

Scritto il 21 aprile 2021 da

Qualche settimana fa ho acquistato una scheda P2 Edge equipaggiata con il nuovo microcontrollore Propeller-2 di Parallax. Per fare un po’ di pratica e familiarizzare con le nuove caratteristiche ho effettuato un porting dell’emulatore per il chip TMS9918A di Texas Instruments che avevo realizzato per il Propeller-1.

Come il precedente P1, anche questo nuovo microcontrollore, siglato P2X8C4M64P, è dotato di 8 core indipendenti, ma le similitudini finiscono qui perchè le caratteristiche sono notevolmente differenti: abbiamo ben 512 KByte di memoria RAM, una frequenza di clock che può arrivare fino a 250 MHz e 64 pin GPIO “intelligenti” in grado cioè di compiere alcune funzioni avanzate in modo quasi completamente indipendente. Inoltre l’architettura interna è stata migliorata tanto da poter eseguire quasi ogni istruzione in 2 cicli di clock (anzichè 4 come il precedente) e accedere all’hub condiviso (memoria principale) molto più rapidamente.

P2-Edge Module (from Parallax web site)

P2-Edge Module (from Parallax web site)

Tutte queste caratteristiche avanzate mi hanno permesso di realizzare un completo emulatore del chip TMS9918A con pieno supporto delle modalità testo, grafica 1 e 2 e multicolore, compresi sprite, gestione delle collisioni e indicazione del quinto sprite. Inoltre integra il supporto per la visualizzazione su video composito o s-video e VGA. Il tutto usando un singolo COG (core). In pratica potrebbe essere utilizzato per realizzare un emulatore per computer MSX o console Colecovision.

Le schermate seguenti sono state ottenute mediante la nuova funzione debug dell’ambiente di sviluppo Propeller Tool.

TMS9918A Modo Testo

TMS9918A Modo Testo

TMS9918A Modo Grafico

TMS9918A Modo Grafico 2 con Sprite

E’ bene precisare che non si tratta di un’emulazione perfetta al 100%, in particolare le temporizzazioni potrebbero non corrispondere con quelle del chip originale e alcuni “trucchi” utilizzati per realizzare effetti speciali o aggirare le limitazioni potrebbero non funzionare correttamente.

Il sorgente è disponibile su GitHub con licenza MIT.

Collegamenti