6 min readGalencia su Magic Cart C64 con l’utilizzo di Linker e Crunchers

Un po’ di nozioni sui packer e cruncher su C64

Quando avevamo necessità di organizzare al meglio i nostri file sui floppy disk, era molto importante avere riguardo dello spazio utilizzato. Spesso però avevamo bisogno di utilizzare il minor ingombro possibile per ogni file così da salvare spazio su disco e poter inserire altri programmi.

Venivano in aiuto i Packer ed i Cruncher, tool di vasto utilizzo quasi un must per la creazione dei nostri floppy di utility ad esempio.

Ma quale è la differenza tra un Packer ed un Cruncher? Bhè, i primi, sono fondamentalmente programmi che comprimono altri programmi, considerando i dati scritti e i dati non scritti. Nello specifico, un packer verifica lo spazio sprecato con indirizzamento $00 e quindi riduce il programma alla minima grandezza possibile eliminando appunto ciò che non contiene dati significativi.

Esistono due tipologie di packer in realtà: quelli chiamati “double disk checkin packer”, che lavorano in due passate, la prima fa una scansione degli op-code, la seconda legge nuovamente e verifica gli zeri. Un esempio di packer che fanno questo è il byg compactor+ e l’ unipacker.

La seconda tipologia è quella relativa ai packer singola passata: il programma viene caricato ed il packer comprime al volo usando tecniche di base. Chiaramente questo tipo di tool non sono potenti come i predecessori, ma sono comunque utili. Un esempio è lo sledgehammer.

Le tecniche di compressione adottate dai packer, sono comunque piu’ deboli rispetto ai cruncher, ad esempio la tecnica RLE, run lenght compression, agisce su sequenze di caratteri rimpiazzando queste sequenze con un singolo byte ed il numero di volte che il carattere viene ripetuto. Ad esempio AAAAAA verrà sostituito da xA6 dove x è il carattere di controllo che dirà allo scompattatore che i prossimi due byte rappresentano una RUN.

Cosa è invece un Crucher? Non ci discostiamo molto dai packer in realtà, ma troviamo un ratio di compressione migliore. Confrontati ai primi, questi sono più lenti e possono comprimere un programma singolo fino ad un massimo di 242 blocchi.

Il funzionamento è simile, il cruncher analizzerà il vostro programma, verificherà lo spazio sprecato che il programma ha lasciato e ridurrà ulteriormente la misura del file. I cruncher possono essere di diversi tipi, vi sonno i singlefile che utilizzano la tecnica one-pass, i quali compattano in modo veloce e diretto il vostro file. Alcuni esempi sono : time cruncher, equal sequence, power cruncher ed altri. Poi ci sono i cruel cruncher, che usano un sistema two-pass e questo fornisce risultati di compressione migliore, ma il tempo necessario era allora il doppio al confronto del singlefile cruncher.

Un tipo Cruel scansiona prima il codice e poi lo compatta in modalità second-pass. Esempi di alcuni tool di questo tipo sono: cross crueller, crestcrueller, the cruncher ab, byteboiler e molti altri.

A questo punto abbiamo visto le basi dei packer/cruncher ma dobbiamo conoscere bene un pò di esadecimale in quanto comunque si fa sempre riferimento ad indirizzi esadecimali, start address di un prg, nozioni base per utilizzare al meglio i compattatori.

 

Inserire un’immagine prima del caricamento del gioco utlizzando la Magic Cart

 

Un’altra cosa che si puo’ fare con le nostre Magic Cart o Magic Desk, e’ quella di prendere un gioco in formato prg, quindi singolo file, e convertirlo in bin. Questa conversione ci permettera’  di programmare la nostra cartuccia Magic e, al primo lancio veder partire il nostro gioco preferito.

Ora, per questo procedimento abbiamo bisogno che del programma PRG2CRT, approfondiremo poi come fare. Ma se avessimo anche il desiderio di aggiungere un’immagine all’inizio del caricamento ? Ebbene si, possiamo farlo con alcune routine assembler.

Per facilitarci il compito pero’, un membro di lemon64, pugsy , ha fornito un linker particolare chiamato Koalalinker.

Con il Koalalinker e’ possibile unire un’immagine Koala in formato prg ottenuta con l’action replay (abbiamo usato l’AR MK4) ed il nostro gioco in formato prg compresso con il tool Exomizer. Il risultato finale offerto è quello di avere un file prg che una volta caricato mostrerà una’immagine, quella che noi abbiamo scelto e dopo la pressione di un tasto caricherà il gioco che abbiamo voluto associare.

Le specifiche di utilizzo prevedono esattamente questa procedura, quindi il tutto non funzionera’ usando un metodo diverso oppure un compattatore alternativo come PUcruncher, che seppur ottimo, non predispone il file compresso con gli indirizzi di caricamento che il linker si aspetta.

Exomizer v3 lo trovare su CSDb, mentre per l’Action replay avrete bisogno del bin specifico della cartridge facilmente scaricabile da Pokefinder. Per le prove abbiamo usato la Action Replay MK4 1988 PAL.

Una volta che abbiamo il nostro file compresso ed il nostro file immagine in formato PRG, procediamo ad assemblare il tutto con il comando successivo, sempre da CMD:

KOALALINK.exe FileCompressoConExomizer.prg FileKoalaFormatoPRG.prg NomeFinaledelPRG.prg

Il KoalaLinker e’ recuperabile dal thread di Lemon64 scene. Grazie a Pugsy per lo sviluppo.

Per un utilizzo diverso invece, allo scopo di comprimere i nostri prg per salvare spazio, ricordiamo anche una sintassi veloce del PUCrunch, altro packer molto noto e molto apprezzato. Potete trovarlo su CSDb  in versione Amiga e Win32.

pucrunch.exe ProgrammaDaComprimere.prg ProgrammaCompresso.prg

Qui una breve lista dei maggiori packer con le rispettive percentuali di ottimizzazione.

Packer Size Left Comment
bs.bin 41537
ByteBonker 1.5 27326 65.8% Mode 4
Cruelcrunch 2.2 27136 65.3% Mode 1
The AB Cruncher 27020 65.1%
ByteBoiler (REU) 26745 64.4%
RLE + ByteBoiler (REU) 26654 64.2%
PuCrunch 26300 63.3% -m5 -fdelta
delenn.bin 47105
The AB Cruncher N/A N/A Crashes
ByteBonker 1.5 21029 44.6% Mode 3
Cruelcrunch 2.2 20672 43.9% Mode 1
ByteBoiler (REU) 20371 43.2%
RLE + ByteBoiler (REU) 19838 42.1%
PuCrunch 19710 41.8% -p2 -fshort
sheridan.bin 47105
ByteBonker 1.5 13661 29.0% Mode 3
Cruelcrunch 2.2 13595 28.9% Mode H
The AB Cruncher 13534 28.7%
ByteBoiler (REU) 13308 28.3%
PuCrunch 12502 26.6% -p2 -fshort
RLE + ByteBoiler (REU) 12478 26.5%
ivanova.bin 47105
ByteBonker 1.5 11016 23.4% Mode 1
Cruelcrunch 2.2 10883 23.1% Mode H
The AB Cruncher 10743 22.8%
ByteBoiler (REU) 10550 22.4%
PuCrunch 9820 20.9% -p2 -fshort
RLE + ByteBoiler (REU) 9813 20.8%
LhA 9543 20.3% Decompressor not included
gzip -9 9474 20.1% Decompressor not included

 

Ultimo passo per la creazione del file da programmare su Eprom

L’ultimo passo che ci consentirà di costruire il nostro gioco su cartuccia è quello di convertire il PRG ottenuto in un file BIN. Ci viene in aiuto il programma PRG2CRT che potete trovare sul sito di DDI Project.

La sintassi di utilizzo è semplice, basta avere a disposizione il file prg assemblato ed un sistema Windows XP per poter usare anche cartconv. Nota: il nome file da convertire non deve avere l’estensione PRG.

prg2crt.bat NomePRGdaConvertire

Una volta effettuata l’operazione avrete in output due file, un bin ed un CRT. Quest’ultimo vi sarà utile per eseguire un test su Vice e verificare che il gioco parta correttamente, l’immagine si veda e la pressione della barra spaziatrice consenta il caricamento del secondo modulo ossia il gioco vero  e proprio.

 

Risultato finale delle nostre operazioni

Il risultato su Galencia versione personale, sulla base del software acquistato da Protovision. La produzione si intende per uso personale a fini didattici e non utile alla rivendita nè in toto nè in parte.

 

Galencia versione finale testata su Magic Cart
Galencia su Magic Cart – Test finale

 

Galencia immagine koalalinker
Galencia immagine di caricamento su C64 reale. Assemblaggio con koalalinker.

 

Fasi di caricamento  e decompattazione dei moduli che compongono la cartridge.

 

Caricamento immagine iniziale inserita dal linker

 

Galencia immagine caricata in attesa della pressione della barra spaziatrice

 

Cricamento gioco Galencia e suo decrunch in memoria

 

Seconda fase decrunch Galencia in memoria

 

Gioco Galencia caricato pronto a sparare agli alieni!

 

 

Licenza Creative Commons
Quest’opera è distribuita con Licenza Creative Commons Attribuzione – Non commerciale – Non opere derivate 4.0 Internazionale.

Redazione PicoE