Un'emulatore C64, scritto in LabVIEW
La scorsa settimana ho seguito una serie di video di Salvatore Sanfilippo in cui programmava live in C su un emulatore di Commodore 64, cercando di aggiungere il supporto audio. L'obiettivo era fare girare la demo "A mind is Born" che in soli 256 byte di memoria (!!!) riesce fare la magia di generare musica ed effetti video.
Alla fine l'impresa è riuscita ed è stato molto interessante da seguire tanto che, ovviamente, mi è scattato un trigger.
Sarebbe possibile creare un emulatore C64 scritto interamente in LabVIEW?
Cercando in rete non ho trovato nulla di simile già realizzato, a parte un vecchio link rotto a cui, in teoria, era possibile trovare del codice LabVIEW che implementava un emulatore *base-base-base*. Il fatto che non ci fosse niente del genere già scritto da qualcun'altro, invece di farmi desistere, ha aggiunto 100 punti sfida.
Dunque mi sono messo a studiare come era possibile realizzarlo, e dopo qualche giorno di ricerche e consultazioni con Claude, sono arrivato alla conclusione che si poteva fare.
Ma calma, con le dovute eccezioni e limitazioni.
Implementare il VIC-II (il chip video) è praticamente impossibile, il che vuol dire che "Prince of Persia" non potrà mai essere giocato sull'emulatore. A mio parere però, anche senza il supporto della grafica, il progetto ha comunque un suo valore, e poi non è detto che invece alla fine il VIC-II si riesca a implementare.
Quello che invece è fattibile, almeno sulla carta, e che voglio implementare è:
- - la CPU6510, all'inizio le 52 istruzioni "legali" in futuro il resto (forse).
- - la gestione delle memorie (forse anche il PLA - Programmable Logic Array).
- - la CIA1 per l'input da tastiera e per gli interrupt.
- - il monitor.
- - il SID (chip audio, non sono sicuro che si possano emulare i filtri analogici originali del C64).
Come vedete ci sono vari "forse" e poche certezze ma è così che voglio affrontare il progetto. Voglio partire quasi senza meta e vedere come evolve e imparare strada facendo, posso metterci un mese come un anno per finirlo e posso anche decidere che è finito, in ogni momento.
E' anche una scusa per imparare qualcosa di nuovo. Nuovo per modo di dire visto che parliamo di emulare un computer di 42 anni fa' con un linguaggio di 35 anni fa', ma sono cose nuove per me quindi è OK.
Ma perchè in LabVIEW? Perchè è il linguaggio che conosco meglio e perchè pare non ci sia mai riuscito nessuno (o nessuno ci ha provato, saggiamente). Sicuramente LabVIEW non è il linguaggio più comodo per implementare un emulatore anche relativamente semplice come quello del C64, prevedo che ci saranno vari problemi di performance, però anche questo aspetto aggiunge interesse alla sfida.
Lo scopo del progetto è sunque questo - personale - ma ho comunque deciso di tenerne traccia su questo sito. Quindi man mano che raggiungerò qualche traguardo significativo, pubblicherò qui.
Magari alla fine pubblicherò anche il codice, dipenderà credo da quanto sarà decente piuttosto che un groviglio di fili.
Intanto qualcosa già si muove.
