CCS64: emulatore del Commodore 64
INTRODUZIONE
L'emulazione del Commodore64, al contrario di quello che molti potrebbero pensare, è ancora molto lontana dall'essere perfetta: la complessità del processore 6510 e, soprattutto, dei coprocessori VIC-II e SID, confrontati con altri "quasi contemporanei" di famiglia Z80, rendono la vita piuttosto complicata ai coders di emulatori, quali Frodo, Power64, il dimenticato C64S, il promettente VICE e, soprattutto, il CCS64, probabilmente il migliore in circolazione. Questo emulatore, forse non il migliore sulla precisione nell'emulazione, è però probabilmente il più avanzato in termini di opzioni di configurazione e sebbene basti scaricarlo e cliccare sul file EXE per far rivivere il 90% dei videogiochi per il piccolo 8bit, questa guida (per la versione 2.0beta per Win32), basata su esperienze personali e su di un minimo di conoscenza tecnica (per ora!), vorrebbe aiutarvi a configurarlo al meglio e a fornirvi il software applicativo necessario per consentirne un uso anche un po' più "serio". Cominciamo?
ALCUNE INFORMAZIONI SUL CCS64
Il ccs64 rappresenterebbe, secondo l'autore Hakan Sundell, l'emulatore definitivo per Commodore64, tale che in versione shareware (quindi fate attenzione e conservatevi anche una versione più vecchia…in futuro potrebbe pretendere dei soldi! -_-) dovrà essere in grado di far girare tutti i giochi e i demo possibili concepiti per tale macchina. L'emulazione del "core" 6510 è cycle exact e dovrebbe, sempre secondo l'autore, garantire il funzionamento di 99.9% degli opcode, siano essi documentati o meno. 99.9% anche per l'emulazione CIA e per il VIC-II, secondo il metodo innato dei chipset, un po' indietro l'emulazione SID: cycle exact, sampling a 8 e 16 bit, emulazione digitale a 99.9%, ma soltanto approssimati output analogici e filtri. Per quanto riguarda le periferiche, molto affidabile l'emulazione 1541 (rotazione del motore, led e r/w status) e c2n (play-button press e possibiltà di slavare su nastro "simulando" il tasto REC e registrando un file .TAP come fosse un file audio virtuale), un po' meno quella delle cartucce e delle espansioni di memoria.
TIPS SULLA CONFIGURAZIONE AL PRIMO UTILIZZO
Sebbene, come già detto, basti cliccare su ccs64.exe per godere nuovamente del cursore lampeggiante dell'interprete BASIC, ecco alcuni piccoli suggerimenti che, secondo me, rendono l'emulazione più veloce ed affidabile (se possibile spiegando anche PERCHE' questo avviene ^_-). Premettendo che gli effetti possono non essere i medesimi su tutte le macchine e che quindi il miglior modo per ottimizzare le prestazioni è comunque quello di provare e riprovare, premiamo F9 ed accediamo al pannello principale (non è elegante come quello del WinUAE, ma funziona): troveremo alcune serie di collegamenti per controllare le varie periferiche e lo stato della macchina:
I primi 4 elementi controllano le device dall'8 all'11, quattro 1541 virtuali dove per ognuno possiamo con F1 (oppure INVIO) controllare il disco inserito ed i comandi associabili (SELECT= disco inserito ma nessun comando, BOOT(normal)= esegue il primo programma su disco, BOOT(fast)= come il primo ma in modalità "tubo") e con F2 controllarne lo status, con alcune interessanti quanto poco utilizzate impostazioni: sotto alcune informazioni sulla posizione delle testine e lo stato del motore, infatti, ci sono alcuni flag che, modificabili con F1, ci permettono di rendere un disco protetto dalla copia, creare un disco vuoto (non formattato) in formato D64 o G41 (molto meglio il primo) e di definire il modo di emulazione in "normal" o "fast" (il mio consiglio è di lasciare su "normal" in quanto il "fast" rappresenta una modalità particolare del 1541 e potrebbe, seppur molto raramente, portare ad errori di I/O. Se necessiti di un minor tempo di caricamento, ci sono altri modi più sicuri che spiegherò in seguito).
Anche i comandi della scheda relativa all'emulazione del nastro sono molto intuitivi e anche in questo caso con F2 accediamo allo status. Le funzioni qui raggiungibili riguardano il controllo dei tasti premuti: Play-state e Rec-state. Con la pressione di F1 vengono attivati e con una nuova pressione dello stesso tasto (che simula, in un certo senso, lo "Stop") vengono disattivati. Molto particolare la funzione REC che avvia un flusso di dati scrivendoli su di un file .TAP proprio come se si stesse registrando su Datasette.
Printer Device: consente di emulare fino a quattro stampanti Centronics in modalità "normal" (non ancora provata…dovrebbe mandare i testi direttamente al Print Manager) e "file" per salvare l'output inviato alla stampante in un file di testo .TXT. Ideale per salvare dati e listati da utilizzare poi in seguito sotto MS-DOS (o Windows, naturalmente).
Cartridge: consente di emulare una cartuccia ROM e contemporaneamente una unità REU di espansione di memoria fino a 16MB. So che la tentazione è naturalmente quella di dotare il proprio piccolo mostro ad 8bit di ben 16MB di RAM, ma la cosa oltre che inutile è anche controproducente per vari motivi: solo pochissimi pacchetti software, come GEOS, sono studiati per usufruire della REU e probabilmente ancora meno per una quantità di memoria tanto vasta, tutti gli altri nemmeno vi possono accedere ed il risultato è semplicemente 16MB di memoria in meno per Windows (beh, non proprio così…considerate, in ogni caso, che il ccs64 è tutt'altro che leggero, anche per un PC discretamente potente). Due motivi per cui conviene abilitarla:
- a) si utilizza un pacchetto concepito per avvantaggiarsene
- b) si vuole programmare in maniera più facile potendo "sprecare" un po' di memoria in più (ma che lamer!) consci del fatto che poi il codice finito funzionerà solo sull'emulatore e non sulla macchina originale.
La scheda "Special" contiene funzioni poco utili che consentono di attivare alcuni indicatori sullo stato di dischi, cassette e core. Utili per il debug se qualcosa non va come deve, ma antiestetici e scomodi da tenere su schermi. Per default sono, infatti, disabilitati.
Vediamo in seguito la scheda "Options": State. Tramite questa fondamentale scheda è possibile salvare in file .c64 lo stato della macchina (memoria, processore e periferiche) e poi richiamarlo. Utilissimo per la programmazione, potendo velocemente salvare il codice inserito prima di mandarlo in esecuzione, ma ancora non perfettamente funzionante (usate con molta cautela e, ogni tanto, salvate anche su un .D64 i vs codici). Con F11 ed F12 durante l'emulazione si richiamano i Quickload e Quicksave.
Machine Code Monitor: monitor di linguagigio macchina integrato, comodo perché risiede "fuori" dai 64k di Ram J. Il problema è che funziona ancora decisamente male e i due miliardi e mezzo di monitor disponibili per il 64 sono ancora da preferirsi.
Sotto il Monitor di Linguaggio Macchina, con il pulsante Reset possiamo effettuare un Hard Reset (F1), spegnere e riaccendere il comp, o SoftReset (F2) , effettuare una chiamata al Kernel che rilascia la memoria e riparte dal bootstrap. Alcune volte si blocca il primo, altre volte il secondo J
Quit (ALT-F4) e Continue sono dal significato più che ovvio.
Diamo ora una occhiata alla scheda "Options": dal sottomenu "Video" possiamo impostare vari parametri sull'output su schermo. Poiché l'emulatore si avvantaggia delle DirectDraw tutte le risoluzione compatibili con la propria scheda video saranno disponibili ed è solo al vostro gusto scegliere quella più adatta. Idem per quel che riguarda "Update Mode": automatic ci solleva da ogni problema mentre frameskip:0 e Sync Rate:60 rappresenta il Commodore64 originale. Volendo divertirsi si può impostare il Refresh ad "Infinite" e sfruttare tutta la potenza della propria geForce 2 a 64MB, sebbene poi le chiamate all'interrupt raster vanno più o meno a pu**ane (censurariamoooo, la senti la scure tra capo e collo?? NdSpy) (almeno credo…non ho mai provato J) e i risultati possono essere imprevedibili. Le opzioni sottostanti, come evidente, salvano lo schermo a 16 o 256.
Il sottomenu "Audio" è meno complesso: possiamo impostare la frequenza di campionamento, la profondità di bit e l'oversampling, visto che all'output ci pensa il DirectSound. Le frequenze campionate arrivano fino a 44khz, ma editando il file di testo di configurazione c64.cfg è possibile inserire manualmente qualunque valore, purché siate sicuri che la vs scheda audio "regga" (per es. chi possiede una live! può provare ad impostare 48000). Una opzione, per ora disabilitata, dovrebbe (spero) in futuro permetterci di cambiare il tipo di Chip Audio da utilizzare, probabilmente permettendoci di aggiungerne uno (un "hack" abbastanza comune tra gli smanettoni era proprio quello di aggiungere un secondo chip SID a quello già presente, in modo da ottenere 6 voci stereo e 4+4=8 bit per i suoni digitalizzati). Impostare l'emulazione filtri su ON: non è granché come realismo, ma è già qualcosa.
Input: emula Joystick e Commodore Mouse. Le opzioni sono intuitive e non mi soffermerò ad elencarle. Un'occhio particolare all'ultima opzione "Joystick Special": la utilizzeremo poco, però ammiro il fatto che l'autore abbia inserito la possibilità di emulare il joystick direttamente dalla tastiera del Commodore64 (liberando, se necessario, alcuni tasti della tastiera PC).
Emulazione 1541. Innanzitutto non sbattere subito a 4 il numero di drive emulati! Il Commodore64 ne prevedeva un massimo di due e molti programmi (tipo Turbo Assembler) vanno a quel paese anche con soli due drive installati. Due ne sono più che sufficienti. Impostare "Saving" su "Continuosly" per praticità se salvate spesso sui vostri dischi virtuali e siete sicuri di quello che fate oppure su "Disable" se al contrario utilizzate il floppy solo per caricare.
Dal bottone "System" possiamo determinare la velocità di clock (PAL, NTSC64 e NTSC65). Lasciando su PAL non si dovrebbero avere mai problemi per quel che riguarda i giochi, sebbene molti demo che utilizzano gli effetti di raster "esatti" potrebbero non essere visualizzati correttamente. Se gli sprite su schermo risultano frastagliati, stirati o comunque si vedono uno schifo, provate a modificare il clock prima di bestemmiare in coreano J · Rom Set: credo che qui ci sia il primo (unico?) bug dell'emulatore. E' possibile scegliere tra "Unknow" e "Original" ma in entrambi i casi il sistema userà "Unknow". In futuro probabilmente grazie a questa opzione sarà possibile utilizzare le ROM "hacked" modificate (chiamate al kernel diverse, set di caratteri alternativi, BASIC modificato)…non appena qualcuno avrà la voglia di dumparle!
ALTRI PICCOLI ACCORGIMENTI
Innanzitutto una piccola chicca per gli smanettoni: con ALT-n dove n è un numero da uno ad otto è possibile accedere a ben 8 sessioni diverse dell'emulatore, senza particolari pretese hardware (ogni sessione esclude le altre). Se vi va di giocare a Mexico '86, Tracks and Fields, codare in asm e scrivere un programma BASIC contemporaneamente potete farlo.
La domanda a cui bisogna rispondere è sostanzialmente questa: come fare per aumentare affidabilità e velocità dell'emulatore? CCS64 ci mette a disposizione parecchi modi per sperimentare: è possibile infatti dal menù opzioni modificare (in percentuale) la velocità del sistema rispetto all'originale fino al 1000%, è possibile effettuare sì dei boot veloci da disco e cassetta, ma ogni successiva lettura/scrittura verrà invece effettuata alla velocità originale (provate a giocare a Summer Games: 3 secondi per caricare la presentazione e due ore per i giochi!), con la scorciatoria da tastiera ALT-F3 è possibile switchare la velocità da 100% a 500% e viceversa…ma tutto questo può andare a discapito dell'affidabilità! Ecco che quindi i miei consigli sono di lasciare le impostazioni "as is" come cioè se ci trovassimo su di un Commodore64 vero e di ricorrere a quei metodi che usavamo sul 64 stesso per aumentare le prestazioni: Action Replay, Fast Loader, Turbo Tape e via discorrendo… Il modo per me è un compromesso: avviare l'emulatore con Action Replay (lo trovate in allegato) inserita e caricare FastLoad con F7, quindi effettuare il boot veloce dal disco (l'affidabilità è comunque assicurata) o dalla cassetta e modificare la frequenza di clock SOLO per quelle rare volte che FastLoad non dà vantaggi, per le operazioni di scrittura sul disco molto lente (tipo il copia disco…ma in quel caso non conviene fare il duplicato del file .D64? J) e per le operazioni che richiedono tempo di processore (per esempio il dither di una immagine, la compressione di file, calcoli matematici, compilazioni…) e non di dispositivi di memorizzazione. Se utilizzate il CCS64 per programmare, ricordatevi di farvi una copia di riserva da DOS (o Windows) del file D64 con i vostri codici: il file system è affidabile, una copia di backup però lo è ancora di più. E per programmare seriamente? O tramite monitor di linguaggio macchina (Action Replay, che oltre tutto ha tantissime altre funzioni utili anche al semplice videogiocatore, va benissimo e si richiama con MON dal BASIC) o con un assembler su disco come Omikron Turbo Assembler 5.1, anche esso fornito a corredo. Ricordate che le funzioni "SaveState" e "LoadState" (in versione "quick" con F11 e F12) vi permettono in un certo senso di salvare molto rapidamente prima di ogni esecuzione, sollevandovi dal fastidio di dover salvare ogni volta su D64 utilizzando i comandi del programma via via utilizzato. Un ultima chicca per i programmatori non-assembler: sono disponibli numerosi compilatori C per processori 6502/6510 che girano su PC e che consentono, con poca fatica, di scrivere programmi in C con un ambiente di sviluppo MS-DOS che poi, compilati, convertiti ed "inseriti" con lo Star Commander in un D64 virtuale, possono essere eseguiti sull'emulatore.
REQUISITI HARDWARE DEL CCS64
Ricordando che è possibile giocare con le risoluzioni, il frame skip e con l'output sonoro, l'autore propone un processore Pentium 90/16 MB RAM/DirectX 2.0 per un minimo di giocabilità. Credo invece che per la versione Win32 sia più realistica questa configurazione, che in fondo rappresenta anche il "best-of":
- Processore Pentium II a 200Mhz (non esiste Gabrié, si parte dal 233, se ti sentisse Vifani! :D NdSpy)
- 32 MB di RAM
- Scheda Audio compatibile con Windows
- Scheda Video con almeno 4 MB di SDRAM
- Joystick e Mouse compatibili Windows
- Windows98 con DirectX 6.0 oppure Windows ME/Windows2000
A titolo di confronto, la mia copia del CCS64 gira perfettamente su Pentium II 350Mhz, 64MB di RAM, scheda video geForce con 32MB di SGRAM, Sound Blaster live! Gold, Pad Gravis e Windows2000.
FAQ E SUGGERIMENTI VARI
Questo documento non si arroga di essere una guida completa ed assoluta per il CCS64 (né tantomeno per la macchina che emula!), però qua e là posso almeno provare a dare una mano! Ecco una lista di più o meno probabili domande con alcune possibili risposte. E spiegarne, se mi basta quel poco di conoscenza tecnica che sto cercando di raccogliere, il motivo…
- "Il gioco X, il demo Y e l'applicativo Z non funzionano! Sono incazzato nero!" Purtoppo anche per il CCS64 vale lo stesso discorso valido per tutti gli altri emulatori: un applicativo software come il ccs64, per quanto perfetto, mai e poi mai può emulare al 99.999% dell'hardware. In un certo senso un emulatore è come un'opera d'arte: non è mai completa.
- "Dove trovo la rom X del gioco Y?" Dovrei prenderti a schiaffi! Il Commodore64, fatta eccezione per le immagini delle cartucce, non usa ROM, ma immagini di dischi e cassette! E comunque per chi mi hai preso, per un supermercato? (e qui spunta il vecchio lupo di mare.. NdSpy)
- "La tastiera del PC è diversa da quella del 64! Dove sono i tasti che mi servono?" Naturalmente, visto che il PETASCII è uno standard diverso dall'ASCII, alcuni tasti sono solo emulati. Ecco come: PETASCII Sul PC C= , Commodore CTRL SX RUN/STOP ESC RESTORE Pagina SU CLR/HOME Home Freccia SU CANC Sterlina INS Freccia SX \
- "Nel demo X i frame appaiono frastagliati, stirati e distorti" Probabilmente il demo in questione utilizza un clock diverso da quello impostato. Prova a cambiare da PAL a NTSC o viceversa.
- "Bene, ho cambiato la frequenza di clock da PAL a NTSC, ma gli sprite continuano ad apparire uno schifo nella parte inferiore dello schermo " Per quanto l'emulazione del chipset VIC sia notevole, da quanto ho potuto testare manca di alcuni "side-effect" ("bug" all'anagrafe J) molto utilizzati nei demo più complessi. Uno dei pochi su cui, per ora, mi sono documentato è la perdita da parte del chipset di alcuni cicli. E' un bug microscopico e alcuni coder lo utilizzano per ottenere alcuni interessanti effetti, ma è un bug talmente piccolo che l'autore del ccs64 si è probabilmente dimenticato di aggiungere J. (siamo giunti ad un punto in cui i bug si aggiungono, non si tolgono!)
- "Perché non riesco a salvare i miei codici/giochi/programmi su di un disco virtuale D64?" La funzione per il salvataggio induce facilmente in errore. Su "disabled" non è possibile scrivere sul disco (è diverso dal write protected status. Il primo infatti "finge" di scrivere su disco, ma in realtà non scrive nulla. Abilitando il secondo, invece, si otterrà un errore dal sistema operativo del 1541). Su "at disk change" il ccs64 aggiornerà il D64 quando si finirà di utilizzarlo dall'emu. Su "continuosly" stiamo tranquilli e possiamo utilizzare il ns disco virtuale come una normale device.
- "Quando con ALT-TAB passo temporaneamente ad un'altra applicazione, nel ritornare allo schermo dell'emulatore mi appare uno schermo nero" Piccolo quanto innocuo bug dovuto alle DirectX. Avviene solo quando, al momento di switchare ci troviamo nel menu dell'emu (quello che si ottiene premendo F9). Basta premere ESC dallo schermo buio per riavviare l'emulazione e lo schermo verrà aggiornato normalmente.
- "Perché il suono fa cilecca ogni tanto?" I motivi sono sicuramente tanti, e quasi tutti dipendenti dall'emulazione più o meno affidabile. Solo un piccolo problema può essere imputabile ad un bug dell'emulatore dovuto alle DirectSound: se un altro programma windows sta utilizzando il canale WAV, il ccs64 non sarà in grado di eseguire output e potrebbe anche crashare. Il bug è innocuo, ma scomodo, visto che non è possibile, chessò, sentire un MP3 mentre si lavora ad un codice…
- "Ok, funziona tutto benissimo, ma come comunico con il mondo esterno? Sono stufo di file D64!" Per il momento sono solo due i modi supportati per comunicare con il mondo esterno. Quello che "rulla" di più consente di collegare tramite il cavo XE1541 (non è difficile trovarne gli schemi su internet) per collegare un 1541 alla porta parallela ed accedervi diversamente. L'altro metodo è quello di utilizzare lo Star Commander, un file manager con supporto per XE1541 che in più consente di estrarre ed inserire dati dai file D64. Un altro progetto, per ora in stallo, sa di fantascienza: un cavo che colleghi la porta USB del PC alla user-port del Commodore64 e che consenta di utilizzare Hard Disk, RAM e Video del PC come periferiche del 64!
- "Bello! E se mi mettessi a programmare in assembler per il 64?" Grande! Mandami un messaggio di posta elettronica, allora: sto radunando tutti questi "pazzi" per codare qualcosa di bello. I programmi per farlo sono tutti qui e non c'è quindi bisogno nemmeno di possedere un vero 64, basta questo fantastico emulatore!
CONCLUSIONI
Penso di poter concludere qui la mia breve rassegna delle caratteristiche di questo emulatore. Spero che l'autore si decida a rilasciare presto una nuova versione (magari con supporto SuperCPU? Forse sto correndo troppo…), nel frattempo mi auguro che questa guida sia d'aiuto a qualcuno: sono in attesa di commenti, consigli e bug report!