Dumpare le cartucce con il Commodore 64

Autore: hiryu - Pubblicato il 15-10-2003.
(© https://ready64.org - Versione Stampabile. Riproduzione Vietata.)

Il software commerciale per il Commodore 64 è stato distribuito in tre tipi di formato: floppy disk da 5'1/4, cassette e cartucce.Mentre la conversione di vecchi floppy disk in un file .D64 è ormai molto comune, e il formato .TAP, per archiviare le suddette cassette, sta diventando sempre più popolare, i file .CRT, i dump delle classiche cartucce, sono più rari e dificili da reperire. Questo documento prova a dare alcune dritte su come dumpare il contenuto di una cartuccia, e trasferirlo in un file binario (DOS o UNIX) usando tool molto comuni come lo Star Commander e l'utility mcart (scaricabile direttamente da questa pagina), e infine, convertire la ROM standard contenuta nella cartuccia in un file .CRT usabile da un qualsiasi emulatore di C64.

Tutte le informazioni date in questo documento sono da prendersi "così com'è" e non mi riterrò responsabile per alcun tipo di danno arrecato alla tua macchina. La porta di espansione (quella dove si inseriscono le cartucce) è connessa direttamente al bus del C64 e si può seriamente danneggiare il computer manipolando la suddetta porta. Per ogni tipo di problema, o successo, che hai avuto leggendo questo testo, puoi scrivere direttamente all'autore, Markus@brenner.de oppure alle persone che si sono prese la briga di tradurre questo testo, hiryu@email.it

Troverai sempre l'ultima versione disponibile (in lingua inglese) all'indirizzo:

http://markus.brenner.de/cartridge/.

Per un dump efficace devi scaricare il tool MDUMP.

(Trovi il link per scaricare questo ed altri tools in fondo a questa pagina)

1. Un pò di teoria

Estratto da: "Commodore 64 Programmer's Reference Guide":

Caricamento automatico delle cartucce

Il sitema provvede al caricamento automatico del programma contenuto nella cartuccia. Il programma viene eseguito solo se i primi 9 bytes della ROM della cartuccia alla locazione di memoria 32768 ($8000) contengono dei dati ben specifici. I primi due bytes devono contenere il vettore per il "Cold Start" usato da qualsiasi programma in cartuccia. I due bytes successivi, alla locazione 32770 ($8002) devono essere il vettore per il "Warm start" usato dal programma. I successivi tre bytes devono contenere le lettere "CBM" con il bit 7 settato in ogni lettera. Gli ultimi due bytes devo invece contenere il numero "80" nello standard PET ASCII.

NOTA: Il caricamento automatico funziona differentemente nelle cartucce Ultimax poichè queste hanno il ROMH al di sopra di $E000-$FFFF, possono semplicemente sovrascrivere i vettori hardware a $FFFA-$FFFF per puntare al codice di inizializzazione.

Mappa della memoria del Commodore 64

La seguente tabella mostra le varie configurazioni di memoria disponibili sul Commodore 64, lo stato delle linee di controllo che selezionano ogni mappa, e l'uso di ognuna di esse. La colonna di estrema sinistra della tabella contiene gli indirizzi in notazione esadecimale. La prima riga invece indica tutte le configurazioni di memoria possibili. La configurazione di default è sulla sinistra, mentre la più rara configurazione usata nelle cartucce gioco Ultimax, è a destra. Ogni colonna delle configurazioni ha un numero binario di quattro cifre come titolo. I bits, da sinistra a destra, rappresentano rispettivamente gli stati delle linee /LORAM, /HIRAM, /GAME e /EXROM. I bits il cui stato non interessa sono segnati con una "X". Ad esempio, quando la configurazione Ultimax videogame è attiva (linea /GAME a 0, linea /EXROM a 1) le lineee /LORAM e /HIRAM non hanno nessun effetto.

Come si può vedere dalla tabella la configurazione con ROML o ROMH (o entrambe) abilitate insieme alle linee /GAME e /EXROM, può essere controllata dalla porta espansione. Si possono avere tre casi:

Cartuccia Normale 8kb a $8000 (ROML): GAME = 1, EXROM = 0
Cartuccia Normale 16kb a $8000/$A000 (ROML,ROMH): GAME = 0, EXROM = 0
Cartuccia Ultimax 16kb a $8000/$E000 (ROML,ROMH): GAME = 0, EXROM = 1

Per poter dumpare la prima cosa da fare è interrompere il ciclo di autocaricamento in cui entra il programma quando viene inserita la cartuccia. Normalmente un reset puo riavviare la cartuccia, ma non permette di entrare nella modalità Basic. Per disabilitare l'autocaricamento bisogna modificare la routine di reset del Kernal usando un Kernal patchato (come lo Speeddos), o disabilitando il piedino GAME e EXROM installando uno switch. L'operazione da fare è caricare un programma monitor che lavori con le aree della ROM $8000-$A000 e $A000-$C000 abilitate. Ora cercare quali aree di memoria usa la cartuccia e salvare il contenuto sul disco usando il comando apposito del programma monitor. 

NOTA IMPORTANTE: La configurazione Ultimax nasconde la maggior parte della RAM - Non si ha accesso al Kernal all'indirizzo $E000-$FFFF! Di conseguenza anche sostituendo il Kernal il dump tramite questo sitema non funzionerà con queste cartucce (cartucce recenti, freezer), per questo bisogna usare il metodo dello switch.

La modalità Ultimax presenta un altro problema se si usa lo switch per cambiare tra le modalità "cartuccia abilitata/disabilitata": per una frazione di secondo, quando lo switch cambia stato, non ci sono le linee /EXROM e /GAME definite. Questo porta ad avere la configurazione Ultimax abilitata per quel pò di tempo, che non è sicuro se il computer non è nello stato di salvataggio.

2. Switch della porta di espansione

Questo capitolo descrive come installare uno switch che permette di abilitare/disabilitare le linee /EXROM e /GAME della cartuccia, mappando l'area della ROM su quella della RAM in operazioni normali. Per una massima flessibilità usare uno switch a 3 vie e 2 poli (ON-OFF-ON).


Staccare il C64 dall'alimentatore, rimuovere il cover superiore svitando le viti da quello inferiore. L'interno del Commodore 64 si presenterà tipo questo:

Guardando il dietro del C64, la porta dove si inseriscono le cartucce apparirà tipo l'immagine qui sotto:

I piedini che ci interessano sono:

Lo switch deve essere installato tra scheda madre del C64 e i pins della porta di espansione. Apri il tuo C64 e rimuovi le viti che fissano la scheda madre al case inferiore. Diamo uno sguardo al connettore della porta espansione. I piedini sono nominati da A a Z e da 1 a 22. Dissaldare il piedini 8 e 9 e tirare fuori i piedini dalle piazzole (si possono anche tagliare nel centro con una tronchesi). Ora saldare due fili sulla scheda e altri due ai piedini, e saldare un terzo filo al piedino 22, la massa; ovviamente seguendo lo schema mostrato sopra.

Sulla scheda mostrata in foto i piedini sono attualmente denominati da 1 a 22 e da A a Z, quindi non ci si può sbagliare.

Ogni coppia di fili deve essere saldata dall'altra estremità all'interruttore:

- Posizione 1 (ON) dell'interruttore collega normalmente la porta e la scheda madre del computer. E' la modalità che si aveva prima dell'installazione dell'interruttore.

- Posizione 2 (OFF) lascia i piedini scollegati, come se nessuna cartuccia fosse inserita.

- Posizione 3 (ON) connette le linee /GAME e /EXROM a massa. Questa modalità viene usata per dumpare le cartucce Ultimax.

Se si vuole tenere lo switch installato permanentemente, bisogna creare un buco sul case (preferibilmente la parte inferiore) e montarci l'interruttore in modo che si fissi per bene. Ora rimontare il tutto e si è pronti per dumpare!

  1. 1) Spegnere il C64, inserire la cartuccia e riaccendere la macchina. La cartuccia dovrebbe autocaricarsi. Se non fosse così, ovvero se si presenta il normale schermo blu, cambiare posizione all'interruttore e resettare il computer. Se la cartuccia continua a non avviarsi, vuol dire che qualcosa è andato storto durante l'installazione dello switch.
  2. 2) Settare l'interruttore nella posizione "aperto" e accendere la maccina, si dovrebbe presentare il classico schermo blu.
  3. 3) Caricare il programma MDUMP dal disco su cui si desidera scrivere il dump della cartuccia. Lanciare il programma che chiederà di inserire il nome del file che dovrà contenere il dump della cartuccia. A questo punto verrà chiesto di chiudere l'interruttore e premere SPAZIO.
  4. 4) Chiudere l'interruttore e premere SPAZIO, lo schermo comincerà a lampeggiare. Un ciclo che disabilita gli interrupts eviterà che il computer vada in crash durante l'operazione.
  5. 5) Verrà chiesto di inserire il disco su cui salvare il dump; l'area di memoria $8000-$BFFF verrà salvata sul disco.

Le cartucce Ultimax richiedono un trattamento leggermente diverso.

Per capire se una cartuccia usa la modalità Ultimax settare l'interruttore in modalità "Ultimax" e resettale la macchina, se il gioco non si autoavvia allora è una cartuccia Ultimax!

Per dumpare questo tipo di cartucce si deve procedere normalmente fino al passo 3 di quelli descritti sopra, ma, al quearto punto, invece di settare l'interruttore nella modalità "normale", settarlo in quella "Ultimax".

Usando la configurazione "Ultimax" si collegano entrambe le linee /GAME e /EXROM a massa invece di ripristinare la configurazione originale. Con questo trucco si fa credere al computer di essere nella modalità standard 16 KB, ed è così possibile vedere il blocco ROMH (normalmente alla posizione $E000-$FFFF nelle cartucce Ultimax) alla posizione $A000-$BFFF.

3. Modulo di espansione Multi-Cartridge

Questo modulo di espansione generalmente ha un interruttore che abilita i differenti alloggiamenti senza dover rimuovere le cartucce per cambiare tra una e l'altra. Si può usare questo modulo per dumpare le cartucce nel seguente modo.

IMPORTANTE: Questo metodo non funziona con le cartucce Ultimax!

  1. 1) Spegnere il C64. Inserire una cartuccia nello primo alloggiamento. Lasciare il seocondo alloggiamento vuoto. Accendere la macchina e far avviare la cartuccia scegliendo il giusto alloggiamento.
  2. 2) Cambiare l'interruttore su un alloggiamento vuoto e resettare. Ci si trova davanti al normale schermo blu del C64.
  3. 3) Caricare il programma MDUMP dal disco su cui si desidera scrivere il dump della cartuccia. Lanciare il programma che chiederà di inserire il nome del file che dovrà contenere il dump della cartuccia. A questo punto verrà chiesto di chiudere l'interruttore e premere SPAZIO.
  4. 4) Cambiare l'interruttore sull'alloggiamento dove è inserita la cartuccia e premere SPAZIO, lo schermo comincerà a lampeggiare. Un ciclo che disabilita gli interrupts eviterà che il computer vada in crash durante l'operazione.
  5. 5) Verrà chiesto di inserire il disco su cui salvare il dump; l'area di memoria $8000-$BFFF verrà salvata sul disco.

4. Kernal alternativo

Un kernal modificato consente di bypassare la routine standard di reset e sopprimere così l'autocaricamento di una carduccia CBM80. Nel seguente paragrafo è spiegato come dumpare cartucce con Speeddos, ma il procedimento si può adattare ad altri kernal in base alle funzioni apposite.

IMPORTANTE: Questo metodo non funziona con le cartucce Ultimax!

Lo Speeddos è un kenal che sostituisce la rom standard con una contenente una versione alternativa delle routines $E000-$FFFF. Se si è in possesso di un programmatore di eprom, si può scaricare la rom dello Speeddos da internet e rimpiazzare il kernal originale con un adattatore.

Speeddos ha delle funzioni molto utili che possono essere usate per dumpare cartucce: se si tiene premuto il tasto C= e si resetta la macchina, il C64 si riavvia e appare un monitor (incluso nella rom). Tutto quello che va fatto ora è salvare la regione di memoria che usa la cartuccia ed è fatta!

  1. 1) Spegnere il C64. Inserire la cartuccia. Riaccendere la macchina. La cartuccia si autoavvierà.
  2. 2) Tenere premuto il tasto C= mentre si resetta la macchina. Il C64 si riavvierà in con un programma monitor e mostrerà la pagina di memoria $0801.
  3. 3) Cambiare la schermata in lettere minuscole e inserire il comando M8000. Alla posizione $8004 si può leggere CBM80 in ASCII. Ora inserire il comando MA000; se i primi bytes sono $94 $E3 $7B $E3 e si legge CBMBASIC nella visualizazione ASCII il raggio d'azione della cartuccia è $8000-$A000. Se l'area $A000 è differente i raggio d'azione sarà $8000-$C000.
  4. 4) Inserire il disco di salvataggio, e inserire il comando: S 8000 A000 per salvare il contenuto della cartuccia sul disco. Se invece il raggio d'azione è $8000-$C000 inserire il comando: S 8000 A000.

APPENDICE A: Installare un pulsante di reset

Si può installare un pulsante di reset sia sulla user port che sulla porta seriale (quest'ultima funziona solo sul modello "marrone" - n.d.T). Si possono saldare i fili da collegare al pulsante direttamente sulla scheda madre o su un connettore che verra collegato alla user port o alla porta seriale (anche sul drive 1541).

Per l'installazione sulla user port i fili dell'interruttore devono essere saldati sui piedini 1 e 3:

Piedinatura della user port vista da dietro, ovvero smontando il case superiore del C64 e guardare il computer dall'alto.
Per l'installazione sulla porta seriale invece bisogna usare i piedini 2 e 6:


Connettore seriale visto da dietro.

Appendice D: Tools

Appendice Z

(Questa appendice non fa parte del documento originale ma è stata realizzata da Gianluca)

Il seguente programma, kerndump.prg, permette di dumpare il kernel del Commodore 64. E' scritto in basic e non fa altro che scrivere su disco il contenuto del chip 901227, contenente il Kernel, e del chip 901226, contenente l'interprete Basic. Funziona anche con il C64c costruito con la motherboard di tipo E, quella più piccola che monta un unico chip contenente sia il Kernel che il Basic. Al momento non funziona con l'adattatore per tre tipi di Kernel diversi di Nicholas Choplin, o meglio può dumpare solo il primo kernel, per dumpare gli altri due basta modificare l'indirizzo in cui risiede la rom (in decimale nel listato del programma) e lanciarlo.

Kerndump - C64 Kernel Dumper - By Hiryu

Autore originale: Markus Brenner


Fonti:
- http://arnold.c64.org/~minstrel/
- http://markus.brenner.de/