e' stato programmato con cc65 ma completamente in assembler =)
cc65 l'ho scaricato... non è malaccio. In pratica, per chi non lo conoscesse, è un cross-compiler C. Di fatto si scrive codice C su un comune PC e quindi si compila il tutto. Il compilatore produce un .prg che può essere poi caricato proprio come se fosse un comune programma per C64. Il .prg contiene solo una sys che esegue materialmente la chiamata al programma in linguaggio macchina generato dal compilatore stesso.
Il compilatore in se risulta alquanto standard. L'unica pecca è che, almeno per la versione in mio possesso, manca del tutto il supporto alla virgola mobile, ma per il C64 in quanto tale non è una gran mancanza (chi scriverebbe funzioni in virgola mobile per il C64?). Poi ci sono delle limitazioni per quanto riguarda il passaggio delle strutture come parametri a funzione ed altre limitazioni non troppo restrittive.
Qualche tempo fa ho realizzato un programma di test che riguardava la risoluzione automatica di schemi di sudoku. L'ho realizzato completamente con Eclipse-cpp, quindi, una volta realizzato, testato debuggato e provato ho compilato con il cc65... inizialmente non ne voleva sapere perché in una funzione avevo dichiarato un array di appoggio troppo grande (in pratica un buffer per mantenere traccia delle soluzioni intermedie al problema stesso) e quindi il compilatore andava in out-of-memory. Quindi ho dovuto rivedere la parte algoritmica, in pratica invece di dichiarare un array statico l'ho dichiarato dinamico con malloc e free in modo opportuno... ebbene: tutto ha funzionato a dovere, ed è stato fantastico vedere un qualche cosa realizzato per PC funzionare anche per C64... FANTASTICO!!!!!!!!!
L'unica nota dolente sono stati i tempi di esecuzione dell'algoritmo... in pratica, per risolvere un sudoku di tipo HARD, il VICE ci ha impiegato quasi 45 minuti, mentre per il PC sono stati sufficienti poche frazioni di secondo (il tutto a parità di algortimo e di schema iniziale... per capirci: sul PC premo invio e la soluzione appare praticamente subito dopo la pressione del tasto stesso, mentre per il VICE sono stati necessari circa 45 minuti di elaborazione).
Il passo successivo è stato quello di produrre, sempre con il CC65, l'assemblato con l'opzione apposita (mi sembra che sia -s). In pratica l'assemblato prodotto rispetto al codice scritto non mi è sembrato proprio il massimo dell'ottimizzazione... ma non sono così esperto di assembler per poterlo dire con certezza...
Il terzo passo è stato quello di eliminare, a parità di algortimo, tutti i riferimenti a tipi di dato inutilmente grandi... di fatto tutti gli "unsigned int" li ho passati in "unsigned char" in modo da essere il più compatibili possibile con l'architettura ad 8bit del calcolatore. Quindi ho provato ad utilizzare le clausule REGISTER laddove possibile e così via (non è che con REGISTER si possa giocare più di tanto: il C64 ha solo 3 registri!)... ma sinceramente non sono riuscito ad abbattere i tempi di calcolo in modo così drastico: comunque per la risoluzione dello schema di test ci sono voluti più di 30-35 minuti.... comunque alla fine di tutto il giro, riproducendo un'altra volta l'assemblato con l'opzione apposita il codice prodotto mi è sembrato migliore del precedente.
In ogni caso il prodotto, cioè il compilatore, mi è sembrato ben fatto e alquanto conforme con lo standard ANSI...
Per terminare voglio aggiungere che recentemente ho scaricato il compilatore PowerC che lavora completamente su C64 e questo sembra supportare i tipi float e double... la compatibilità con lo standard ANSI è però meno accurata (Nel manuale del programmatore è dichiarata una compatibilità del tipo K&R... gli addetti ai lavori sanno bene cosa significa). Ma non ho avuto mai modo di provarlo effettivamente in quanto non è un cross-compiler e quindi ci si deve "abbassare" a compilare il codice direttemente sul C64... sinceramente la cosa non mi alletta più di tanto in quanto i tempi di sviluppo e test aumentano in modo drastico con probabilità 1.