14 min readMagic Desk e Multi Cart per C64
Introduzione
Tutto nasce dalla passione per le repro in generale, per i gadget che richiamano le nostre vecchie passioni, e per quello che accende la nostra nostalgia.
Oggi possiamo disporre delle multicart con i giochi caricati, soluzioni carine ma che richiedono il cambio gioco variando la combinazione dei Jumper presenti sopra. Altresi’ vi sono soluzioni piu’ complesse come LA nota Easyflash, per la quale sono state prodotte ROM ad hoc per giochi di dimensioni molto grandi.
La migliore soluzione cartridge di questo tipo culmina con la EasyFlash3, che oltre ad avere vari slot di tipo EasyFlash all’interno, ha anche otto slot dedicati per avere i propri Kernal a disposizione. Il tutto con la facilita’ d’uso di un menu’ scorrevole.
I costi rimangono pero’ elevati e parliamo comunque di multicart, tranne la easyflash forse, che non consentono di avere delle repro singole, non essendo progettate per queste finalita’.
Ci vengono in aiuto quindi le Magic Desk compatibili. Progetto migliorato rispetto alle Magic Desk originali, che offriva solamente un massimo di 128K di codice oppure sino a sedici banchi da 8KB l’uno. La Compatible Magic Desk , questo il suo nome sulla scena C64, continua ad evolversi con layout sempre piu’ accattivanti e capacita’ di memoria gestibile piu’ ampia.
Il Progetto
Il primo step e’ stato approcciare il Magic Desk Cart Generator 3. Un software basato su codice Python, cross platform su ambienti Linux o Windows, il quale, sulla base di una serie di eseguibili opportunamente posizionati (file formato PRG), produce in output un binario da programmare sulla nostra EPROM per avere una cart Multi Game con i giochi a cui tanto siamo affezionati.
Vi consiglio il classico TL866 II Plus come programmatore, potete trovarlo a poco e non avete bisogno in questo caso di adattatori particolari.
Inoltre, sempre utile qualora non ne foste in possesso, nel caso stiate usando EPROM cancellabili semplici (con finestra), e’ possibile prendere questo EPROM ERASER, economico ma efficace che vi permettera’ di usare nuovamente il vostro Chip per una nuova programmazione.
La musica non si puo’ scegliere, al massimo si puo’ decidere, tramite il proprio file di configurazione, se attivarla oppure no, cosi’ come l’effetto wave al menu’ che muove le varie voci con andamento sinusoidale.
Questo, insieme ad altre piccole variazioni sul tema, sono le personlizzazioni che si possono fare, ma la sostanza non cambia.
Aggiunge inoltre una funzionalita’ di ritorno al basic in modo forzato, che non e’ possibile togliere da configurazione, ma che molti potrebbero trovare utile od eventualmente rimuovere modificando e ricompilando il file menu.asm e modificando il file crtgen.py. L’autore suggerisce come asm SDE il Kick Assembler v5.5.
Alcune importanti migliorie lato codice sono state:
- riscrittura completa del codice di visualizzazione;
- supporto ad otto menu selezionabili tramite tasti funzione e ciclabili utilizzando il tasto return;
- ottimizzazione della memoria necessaria a gestire tutti i programmi caricati.
Vi e’ anche il Magic Desk Cart Generator 2 ma e’ stata una via di mezzo che ha segnato il passo alla gestione delle categorie, migliorato la gestione della memoria via lock hardware. Il progetto software e quello hardware infatti, sono frutto di una stretta collaborazione di due esponenti della scena quali: Mark Šolajić per l’ hardware e Zarko Zivanov per il software), i quali hanno fatto in modo che la cartridge, una volta finito di copiare il software in memoria, si potesse riabilitare soltanto con il bottone di reset e non sovrascrivendo le precedenti locazioni.
La realizzazione di un sogno
Da valutare invece a mio avviso, e magari piu’ funzionale nello scopo di una MultiGame, il CART Generator,di Dale E. Sebenste. Questo progetto, piu’ fedele alla Magic Desk originale, ma sempre un adattamento del grande lavoro dei predecessori sopra citati, propone un menù statico, su sfondo nero puntinato, con un numero di titoli gestibili limitato a dieci oppure venti. Per ognuna delle due casistiche va utilizzato il codice apposito fornito nel pacchetto. Ma niente paura, il file batch da lanciare porra’ le domande necessarie per facilitare la produzione della vostra cartridge.
Non possiede certo le dinamiche e le categorie dei software precedenti ma a molti potra’ risultare piu’ essenziale ed elegante nella sua semplicita’.
Ultimo software analizzato, testato e provato è stato invece Astercart Generator, sempre proveniente dal Progetto di Dale ma decisamente piu’ accattivante. Permette l’uso di uno splash screen e il link di un sid opportunamente elaborato.
Ed e’ su questo filone che ora vorrei soffermarmi prima di passare all’ultima evoluzione del genere sulla quale ho creato la seconda MultiGame cart.
Grazie a questo progetto, nella scena C64, ho avuto il piacere e la fortuna di conoscere alcuni coder e progettisti noti a molti di voi e ora anche a me :). Se pur non abbia conoscenze approfondite di assembler 6502, alcune reminiscenze mi hanno consentito di divertirmi un po’ con il materiale di studio reperito su Lemon64 nei vari thread di discussione ove molti sbattevamo la testa sugli stessi problemi. Spero quindi che possiate divertirvi anche voi come me ad assemblare e preparare le vostre EPROM.
A prodotto finito, potete utilizzare dei distanziatori per i case delle cartridge.
Implementazione della Compatible Magic Desk Cartridge
Per cominciare vedremo l’assemblaggio della scheda e l’utilizzo di due software: Magic Desk Cart Generator 3 e CART Generator .
Ma andiamo per ordine, partiamo dall’ Hardware ed andiamo ad assemblare la nostra PCB. I file di stampa (Gerber), sono pubblici. Potete prenderli dal Github degli autori e caricarli sui noti service cinesi come JLCPCB o PCBWay per nominarne due.
Vi consiglio l’uso di Windows XP poiche’ alcuni programmi come Mcart e choice non vanno su sistemi a 64bit. Potete usare Magic Cart Generator 3 senza creare il .crt, ma verificare prima di programmare l’ eprom e’ fondamentale.
Sotto trovatte una foto della PCB nuda stampata in colore rosso fronte e retro.
Come si puo’ vedere dalle scritte sovraimpresse, la componentistica e’ semplice, parliamo din un 74LS02, di un 74LS273 e di una EPROM, la cui capacità e’ a vostra discrezione a seconda della cartridge che volete realizzare.
L’hardware ed il software gestiscono da 64K a 512K di capacità, quindi da una 27c512 ad una 27c040 con le equivalenti EEPROM se volete lavorare con package DIP cancellabili e programmabili elettronicamente.
C’e’ anche un reset che potete mettere, che accoglie sia la tipologia tattile vericale che quella orizzontale a seconda del box a cui state pensando.
Dietro, fondamentale la configurazione della EPROM che avete scelto, per la quale fate pure riferimento al Github di Mark oppure seguite la tabella che ho estratto e riportato qui.
Sul retro del PCB vi e’ un altro pad, relativo al “Lock/No Lock“. Questo fa si che quando viene disabilitata la cartridge scivendo all’indirizzo $80 viene bloccato il sistema di banking e non vengono piu’ accettate scritture all’indirizzo $DE00. Alcuni programmi, nei vari test che Mark ha fatto, non intenzionalmente effettuavano scritture a questo indirizzo (nella magic desk originale), e mandavano il tutto in crash. Una spiegazione approfondita potete trovarla sul Github dell’autore. Per sperimentazione e test rispetto la vecchia Magic Desk potete spostare il collegamento del pad verso la scritta no lock.
Questa la tabella per configurare l’EPROM che andrete ad usare. Dove vedete il segno uguale vuol dire che i pad adiacenti vanno collegati:
27C512 | 27C010 | 29F010 | 27C020 | 29F020 | 27C040 | 29F040 |
JA17 [X X=X] | JA17 [X X X] | JA17 [X X X] | JA17 [X=X X] | JA17 [X=X X] | JA17 [X=X X] | JA17 [X=X X] |
JA18 [X X X] | JA18 [X X=X] | JA18 [X X X] | JA18 [X X=X] | JA18 [X X=X] | JA18 [X X=X] | JA18 [X=X X] |
JF [X X X] | JF [X X=X] | JF [X X=X] | JF [X X=X] | JF [X X=X] | JF [X=X X] | JF [X X=X] |
JA16 [X X X] | JA16 [X=X X] | JA16 [X=X X] | JA16 [X=X X] | JA16 [X=X X] | JA16 [X=X X] | JA16 [X=X X] |
La scheda parte frontale:
La scheda parte posteriore:
La scheda assemblata:
Realizzazione di un file MultiGame
Sopra, il link del pacchetto che trovate su CSDb, che contiene all’interno sia il software per la creazione che i file per la stampa del PCB.
Andiamo a vedere ora la parte software.
Come prima cosa, dopo aver scompattato l’ archivio preso da CSDb, sarà necessario avere a bordo il python versione 2 o 3.
Per Windows potete prendere questa distribuzione: Python 3.6.6
Il contenuto del pacchetto Magic Desk Generator 3 è questo sopra.
Come vedete, c’e’ una cartella prg ove vanno messi tutti gli eseguibili che volete mettere nella cartridge. All’interno della cartella ve ne sono gia’ alcuni, in modo da creare un file di esempio con programmi come “dir master”, “mood”, “sprite editor” ecc..
I file che ci interessano sono “compilation.cfg” per la configurazione e “crtgen.py“. Quest’ultimo si puo’ lanciare in una finestra dos oppure una shell su Linux, semplicemente con il comando:
python crtgen.py compilation |
dove python è l’interprete del codice, crtgen.py è il codice necessario alla generazione del file MultiGame e compilation è il parametro riferito al file di configurazione che riporta tutte le opzioni che desideriamo selezionare al fine di una produzione secondo i nostri desiderata. Chiaramente il nome del file di configurazione è arbitrario, importante che abbia nome eguale nella sintassi di creazione che nel nome stesso del file nella directory. Unica accortezza riportare l’estensione “.cfg” nel file su disco.
La configurazione di base è molto semplice, eccola per i prg nella directory, un po’ modificata per spiegarvi la funziona multimenu. Vediamo la prima sezione, le altre sono autoesplicative tutte modificabili.
Abbiamo i descrittori per la cartridge: nome del file binario che verra’ generato, compilation.bin, che rappresenta il nostro file da programmare nella EPROM, la capacita’, in questo caso 128K quindi stiamo pensando di usare una 27c010 o l’equivalente 27c1001. Wave è messo ad 1 quindi vedremo il menu’ muoversi come un’onda, cosi’ come il sound che sta ad 1 e sentiremo un motivetto molto simpatico in sottofondo.
Una voce help fa apparire una scritta di aiuto in fondo al menu, customizzabile anche questa (senza virgolette !)
Per cambiare la capacita’ della EPROM fate riferimento alla tabella sopra.
Una descrizione approfondita è presente sul Github dell’autore al link Cartridge Generator 3 Bucket page
[cartridge] |
bin=compilation.bin |
size=128 |
wave=1 |
sound=1 |
help=Shift(CRSR): Scroll – Fn/Ret:Menu Select |
[menu1] |
spacing=1 |
title=Magic Desk cartridge generator |
[menu2] |
spacing=1 |
title=Magic Desk Utils |
[prg101] |
file=basic_64 |
name=Basic 64 Compiler |
[prg102] |
file=pro_text |
name=Pro Text 2 |
[prg213] |
file=delux_di |
name=Deluxe Dir Master |
[prg220] |
file=mood25 |
name=Mood 2.5 +2 |
Ultima fase il lancio del comando di generazione, eseguiamo quindi quanto sopra il pyton con crtgen e cartconv per trasformare il tutto in crt.
A questo punto il nostro file .CRT e’ pronto per essere lanciato all’interno del VICE con un semplice drag & drop se volete.
Sotto una snapshot dal WinVice:
Ora non rimane che programmare l’ EPROM che abbiamo scelto con il file .bin generato e metterla sulla PCB.
Per ora Buon divertimento con il Magic Desk Generator 3!
Il MAGIC CART Generator
Per chi volesse provare un primo software alternativo, viene in aiuto un prodotto di Dale, adattamento dell’ottimo lavoro di Mark e Zarko, che consta di un set di programmi scritti in python ma presenta alcune differenze. E’ sicuramente piu’ semplice, non ha opzioni se non quelle relative alle scelte di numerosità programmi e capacità EPROM. Tuttavia risulta molto gradevole, essenziale e funzionale.
Un titolo “Magic Cart” lampeggia in cima facendo seguire una serie di puntini a cornice quadra, fino a racchiudere in sfondo nero i titoli dei giochi che abbiamo scelto apponendovi un numero accanto, quello che useremo per far partire ogni singolo programma.
Un motivetto di sottofondo ci intrattiene durante la scelta. Dale non ci lascia in silenzio 😀 .
Cosa molto gradita invece, il fatto di poter inserire come nome dei giochi anche titoli di una certa lunghezza e con spazi nel mezzo, ad esempio “Nemesis The Warlock“.
Ecco sotto una schermata della prima cartridge realizzata con cinque famosissimi giochi:
Andiamo a vedere come poterla realizzare..
La struttura sarà simile, avremo una directory principale con i vari programmi pyhton ed un fantastico file batch “Magic Cart.bat”.
Sono presenti poi due file relativi al numero di giochi che vogliamo inserire, se dieci o venti e sono rispettivamente “DDIMM10” e “DDIMM20”. Quindi il codice che elaborerara’ le rispettive capacita’ della EPROM scelta: “32K.py” per un massimo di 28K con la 27c256; “64k.py” per un massimo di 61K con la 27c512; “128K.py” per un massimo di 125K con la 27c010 e “256K.py” per un massimo di 253K con la 27c020.
Costruzione della compilation
Al fine di costruire rapidamente la nuova compilation, non faremo altro che inserire i programmi che ci interessano nella directory prg, quindi dalla directory principale eseguiremo il file “Magic Cart.bat“.
Appaiono subito a schermo dei menu a scelta multipla. Procediamo digitando 1 per 10 giochi e 2 per 20 giochi. Quindi secondo menu, la capacita’ della EPROM da gestire: 32K, 64K, 128K, 256K, scelta rispettivamente con i tasti 1,2,3,4.
Ora verra’ creato un file .bin con nome che rispecchia la capacita’ selezionata, ad esempio “256.bin” e, fino a 128K, anche il file .crt se lo si vuole. Questo avra’ nome “Magic Cart.crt”.
L’eseguibile “cartconv” utilizzato a tale scopo pero’ presente nel pacchetto non consente la generazione di un file immagine CRT superiore a 128K ma se al suo posto usiamo “mcart” il gioco e’ fatto, basta usare questa sintassi: “mcart -md -i <file .bin> “<nome cartuccia game>”.
Mcart e’ presente su CSDb al link Mcart CSDb .
Se tutto e’ andato bene verra’ chiesto se si vuole fare il pad a 512K. Questa funzionalita’ permette di usare lo stesso numero di giochi facendo uso di una EPROM piu’ grande se non ne abbiamo altre a disposizione. Con il pad a 512K utilizzeremo una 27c040.
La directory principale:
In ordine: prg e’ la cartella che contiene i file eseguibili, “0.bin” il nostro file pad a 512K. Seguono i file python 32, 64, 128 e 256 utilizzati a seconda della scelta della Eprom da costruire. Quindi Cartconv per la conversione da Bin a CRT per fare tutti i test del caso od usarla in emulazione. Choice invece e’ il vero menu’ di scelta con le opzioni all’interno mentre “Magic Cart prg” insieme a “DDIMM10” e “DDIMM20” intervengono nella costruzione del menu e nella corretta preparazione della cartuccia. “Magic Cart.bat” e’ l’unico eseguibile che andrete a lanciare per realizzare il tutto (ricordo sino a capacita’ di 128K). Infine troviamo un file txt con descrizione e il nostro “Magic Menu.prg”, programma che andra’ a comporre il menu vero e proprio della cartuccia.
La costruzione della cartuccia e’ conclusa. Nel prossimo paragrafo vedremo alcuni Tips & Tricks che possono aiutare durante i vari processi di creazione.
TIP & TRICKS ovvero cosa fare e non fare per evitare perdite di tempo
Il procedimento di creazione delle cartucce puo’ dare alcune noie, non in fase di assemblaggio della PCB in quanto si tratta di semplici componenti IC, quanto nell’ assemblaggio delle compilation vere e proprie.
Si possono riscontrare i seguenti problemi:
- giochi in formato prg troppo grandi , quindi da compattare;
- caricamento del .bin nella EPROM: nessun problema riscontrato mai.
Consigli:
- fate sempre la somma della dimensione dei giochi in Kilobyte per evitare che il programma non generi il file. Avrete comunque indicazione del residuo ripetto la EPROM che usate o dell’eccedente;
- quando compattate un gioco, verificate che funzioni il lancio su winvice o vice e arrivate a fare una partita;
- per compattare i giochi usate pucrunch oppure exomizer. Il primo e’ piu’ semplice da usare, entrambi reperibili su CSDb;
- a fine compilation testate sempre il CRT su vice 32bit (ha il supporto per immagini fino ad 1MB). Se tutto e’ OK mettete su EPROM;
- ricordatevi sempre la configurazione della EPROM che usate, altrimenti non andra’ nulla!
Vorrei ringraziare Faber Pixel per lo spunto iniziale in merito la pubblicazione del Multicart Generator 3. Da quella pubblicazione è nata una splendida avventura 🙂
.. To be Continued .. Linkers, Packers etc..
Coming soon: Astercart Generator
Thanks to : Mongooseman (Lemon64) ; Carletto Provetto (beta Test)(VCCI)
Enjoy!
Quest’opera è distribuita con Licenza Creative Commons Attribuzione – Non commerciale – Non opere derivate 4.0 Internazionale.