Galeotto fu il "CRC" e chi non lo corresse...

Creato il 03 aprile 2013 da Marte @CPiramidale

Talune volte, essere estremamente pignoli e precisi (probabilmente rasentando la maniacalità... ;) ) anche nell'ambito dei propri passatempi preferiti può portare un "blogger" del calibro del vostro Marte a fare delle interessanti scoperte che, quasi istantaneamente, si tramutano in un utile pretesto; una rivelazione a dir poco fondamentale per avviare la redazione di un "post" che ti spiega il "perché" delle cose e che ti da anche un paio di dritte per farle funzionare al meglio quando e se incappi nelle medesime problematiche... ;)
Ovvero mai!!! :D
Avete presente gli emulatori specifici per gli "handhelds" della famiglia del "GameBoy"? Programmi come il "Visual Boy Advance" e tutti i suoi derivati, da sempre svolgono in maniera impeccabile il loro lavoro. Inoltre, se adeguatamente vitaminizzati con un buon "dump" del "BIOS" delle "consoles" emulate, funzionano pure meglio, diventando in tutto e per tutto affini all'"hardware" originale. Certo, trovare il "dump" di un "BIOS" non è sempre un'impresa facile (soprattutto per quel che concerne il "GBA", ché prima di riuscire a reperire un "BIOS" con il "checksum" giusto, ho perso il sonno! :) )... Ma quando alla fine hai per le mani tutto quello che ti prefiggi di avere, se non altro la gratificazione personale c'è tutta... :P
«Vabbè. Con il "BIOS" hai in più il "logo" sbippante all'avvio... Sai che rivoluzione, Marte!».

Ok, però è bello... ;)


In effetti è poca cosa. C'avete ragione anche voi... Ma, ripeto, se non utilizzassi il "BIOS" anche nel contesto dell'emulazione, non avrei mai fatto la scoperta che ho fatto e, parimenti, non sarei qui a darvi tutte le inutili dritte che mi accingo a darvi! Quindi seguitemi, se volete perdere irrimediabilmente 15/20 minuti della vostra preziosissima esistenza!!! :D
Ma prima, facciamo un po' di storia... I più anzianotti tra i miei lettori senz'altro se ne ricorderanno. Vi rammentate del primo "Game Boy"? Si, proprio la mattonella grigia...

Ché se lo tiravi in testa a qualcuno, lo ammazzavi...


Vi ricordate che cosa accadeva quando lo accendevate SENZA inserire una cartuccia nell'apposito "slot"? Esatto! Il "logo" della "Nintendo" scendeva come di consueto dall'alto, ma si presentava come un rettangolo completamente nero... Vi siete mai domandati perché accadeva tutto questo? Io l'ho colpevolmente scoperto solamente ieri (per vie traverse, tra l'altro... :P ) e mo' ve lo spiego! :)
L'inghippo dipende da un banalissimo ma efficace sistema di protezione. Il "logo" della "Nintendo" era una volgarissima immagine "bitmap" soggetta al "copyright" del colosso giapponese. Un qualsiasi programmatore intenzionato a sviluppare per il "GameBoy" doveva richiederne ufficialmente una copia ed inserirla in una ben determinata porzione del codice della sua applicazione. All'accensione dell'"handheld", il "BIOS" del dispositivo caricava questa "bitmap" dalla cartuccia e la utilizzava per eseguire l'animazione d'avvio del sistema. Contemporaneamente, eseguiva un "check" di questa immagine (preciso fino all'ultimo "byte"...), confrontando il "logo" caricato dal supporto rimovibile con una sua versione "hardcoded" nella "ROM" della "console". Se le due immagini risultavano identiche, il "Gameboy" leggeva ed eseguiva il contenuto della cartuccia, altrimenti si bloccava irrimediabilmente.
Inutile dire che anche sul "Game Boy Advance", tutto questo ambaradan è rimasto perlopiù invariato...

Mettiti pure il cuore in pace. Così non funziona... :)


Ora, se tu sei un giovane e talentuoso sviluppatore indipendente che, nel tempo libero, si diletta a programmare "homebrew" per il "Game Boy", non puoi ignorare questa circostanza. Se vuoi che il tuo programma funzioni senza intoppi anche sull'"hardware" originale senza ricorrere ad artifici che bypassano il "logo check", o ti rivolgi alla "Nintendo" (certificandoti come "sviluppatore autorizzato"), oppure ti appropri del suo "logo", inserendolo indebitamente nel tuo codice, stracatafottendotene dei "copyrights" vari ed eventuali...
In tal senso, chi frequenta portali come il "Game Boy Advance Development" lo sa. I programmi artigianali resi disponibili attraverso questi canali si dividono fondamentalmente in due grandi categorie: applicazioni che funzionano impeccabilmente sull'"hardware" originale o sull'emulatore dotato di "BIOS" e programmi che si avviano solo se il "check" sul "logo" della "Nintendo" è disattivato oppure se viene superato procedendo per vie traverse...
«Ok. Ma se putacaso io non ho la possibilità di arginare il "check" del "logo" in nessun modo, devo rinunciare in senso assoluto agli "homebrew" perché i loro sviluppatori non sono in possesso delle credenziali "Nintendo"?!».
Claro che no! Che domande... :D
Vi ricordate quando accennavamo al "GBAta"? Rammentate che vi parlai di questo "tool" miracoloso, descrivendovelo come «il coltellino svizzero del "retrogamer" targato "Nintendo"»?

Un "homebrew" dato in pasto al suddetto programma.


Bene. Immaginate di avere per le mani un "homebrew" che non supera il "check" del "logo" precedentemente descritto. Se andate ad aprire il file ".GBA"/".BIN" incriminato con il "GBAta", vi ritroverete davanti ad un bel "BAD" nel campo del "Logo Code"... Fortunatamente, subito accanto a questo avvilente avviso, il pulsante "Fix Header" ci consentirà di rimediare a questo problema. Pigiatelo ed il "GBAta" vi offrirà l'opportunità di salvare una copia "patchata" del file "difettoso" che gli avete dato in pasto.
Inutile aggiungere che l'"homebrew" corretto a questo modo funzionerà impeccabilmente in qualsiasi situazione, con buona pace di "Nintendo" e dei suoi temibili sicari "ninja"! :D
Gran bel colpo, non trovate?! ;)

Potrebbero interessarti anche :

Possono interessarti anche questi articoli :