Rimuovere i files DUMMY dalle ROM Dreamcast (CDI) per recuperare lo spazio inutilizzato

Rimuovere i files DUMMY dalle ROM Dreamcast (CDI) per recuperare lo spazio inutilizzato


Smanettando con la mia stazione di retro gaming (RetroPie su un Raspberry Pi 4B), mi è capitato di metter mano su diverse ROM per la Sega Dreamcast.

Mi si è storto immediatamente il naso quando ho visto che una ROM del Dreamcast, se compressa, poteva pesare anche meno della metà rispetto al file originale!

Incuriosito, ho indagato sulla faccenda.

Parametri di compressione: livello 3/5, ZIP-Deflate

Da come si può vedere, un gioco famoso come Crazy Taxi (di cui posseggo copia originale obv, altrimenti mica potevo avere la ROM eh *meme di Yotobi che dice “a volte la vita di un pirata fa veramente schifo*) pesa circa 707 megabyte, per risultare in un archivio ZIP pesante poco meno di 80.

Come in-nome-di-Giove è possibile ciò?

La risposta è più semplice di quanto si possa immaginare:

Se si comprime un file enorme, ma composto da una sequenza di caratteri uguali, esso produrrà un archivio dalle dimensioni ridicole, poiché la compressione trasforma una sequenza di caratteri uguali, come gli “zeri”, in un “ripeti il carattere X per # volte“.

Ma perché questa cosa?

I giochi per Sega Dreamcast sono stati pensati, a differenza di molte console che l’hanno preceduta. per essere distribuiti su CD-ROM, supporto che penso tutti conosciate.
Come i vecchi floppy disk, accedere alle diverse sezioni di un CD-ROM impiega un diverso carico di lavoro da parte del lettore CD (parliamo di frazioni infinitesimali di secondo, ma comunque la somma fa il totale), perciò gli sviluppatori si sono avvalsi dei così detti dummy files, ossia files vuoti, con cui riempivano la differenza tra lo spazio rimanente sul CD-ROM (~700MB) e la dimensione effettiva del gioco.

Attenzione, però, perché questi dummies non venivano posizionati dove capitava, ma nella zona interna del CD-ROM, in modo da scrivere tutti i files di gioco nella parte esterna del disco. Tutto questo perché il lettore Dreamcast leggeva i cilindri esterni del CD più velocemente rispetto a quelli interni (pare che la lettura dei cilindri perimetrali fosse 12 volte più veloce rispetto a quelli centrali).

Tutto molto interessante, ma questi files pesano

Quando si parla di ROM appartenenti ad un titolo Dreamcast, ci si troverà con un file CHD, CDI, GDI, ISO e chi più ne ha più ne metta, di dimensioni molto vicine a quelle di un CD-ROM da 700MB.

Come si può fare per rimuovere questi files dummy e permettere di avere una ROM che occupa solo quanto davvero serve al gioco?

Dopo un intero pomeriggio a smanettare sui forum di modders e appassionati di Dreamcast, mi sono imbattuto in una repository di GitHub, che combina al suo interno diversi tool per la lettura delle immagini estratte dai CD e, in modo totalmente automatizzato, ne permette l’estrazione e la ri-scrittura.

Come procedere?

Ricordo che per far sì che la procedura venga eseguita correttamente, bisogna avere una immagine del CD di gioco in estensione CDI.

Si deve iniziare con l’aprire la repository DreamcastCdiTool.

Una volta scaricato lo ZIP della repo, lo si dovrà estrarre in una cartella a piacimento e assicurarsi che sia presente il file launcher.bat.

Non lo si dovrà aprire direttamente, ma bisognerà aprire un prompt dei comandi (CMD) e posizionarsi nella cartella dove questi file sono stati estratti.

Bisognerà far partire lo script BATCH con un parametro: -modify, il quale permetterà di modificare i file estratti dall’immagine prima di ricreare un file ROM.

Una volta eseguito, navigare nelle cartelle del sistema fino a raggiungere la ROM del gioco desiderato.

Iniziata l’analisi, lo script proseguirà con l’estrarre tutti i file trovati al suo interno, per renderli visibili e modificabili.

Arrivato alla fine dell’estrazione, comparirà un messaggio che ci avviserà che l’analisi e l’estrazione sono completati, e che è possibile modificare i file.

A questo punto recatevi nella cartella dove avete scompattato la repository di GitHub, entrando dentro la cartella chiamata GameFolderDreamcast. Al suo interno si troveranno tutti i files delle ROM selezionate, separate per nome della ROM.

Probabilmente avrete già notato che, all’inizio dell’elenco, c’è un file chiamato “0.0”, pesante ben 512 MB!

Quello è il tanto ricercato file dummy, verificabile con un visualizzatore esadecimale come xxd:

Soluzione definitiva: eliminare quel file.

Una volta rimosso, possiamo tornare sul prompt dei comandi che, nel frattempo, era rimasto in attesa, e premere INVIO.

Tutti i files trovati nella cartella verranno scritti in una immagine CDI molto più leggera di quella di partenza.

La ROM è pronta!

Da notare il distacco di dimensioni
Mostra i Commenti