Home Homebrew Pubblicata la versione 1.1.0 di GB Interceptor, la soluzione open source per...

Pubblicata la versione 1.1.0 di GB Interceptor, la soluzione open source per riprodurre in streaming le cartucce dal Game Boy

549
0

Pubblicato un nuovo aggiornamento hotfix per GB Interceptor, la soluzione open source per riprodurre in streaming il gameplay dal Game Boy attraverso un Raspberry Pi con circuito integrato rp2040.

Questa nuova versione introduce il rilevamento del gioco consentendo correzioni specifiche per ogni titolo. Introduce anche correzioni generiche che sicuramente miglioreranno e risolveranno molti giochi che non sono nemmeno elencati nel registro delle modifiche in basso.

GB Interceptor sfrutta l’unico connettore accessibile, ovvero lo slot della cartuccia, unica strada percorribile senza dover intervenire via hardware, l’idea alla base era quella di creare un adattatore capace di intercettare una copia dei dati trasferiti.

Non è possibile accedere in modo casuale ai dati di interesse e non è possibile vedere i dati nella RAM che la CPU del Game Boy ha messo insieme dalle istruzioni grezze della cartuccia.

In particolare, non è possibile vedere la Video RAM contenente tutto il necessario per disegnare l’immagine sullo schermo. Da qui nasce la necessita di creare una copia della VRAM.

Per fare ciò si è reso necessario un emulatore dove venivano forniti i dati dal bus di memoria della cartuccia untilizzando un rp2040 (il microcontrollore del Raspberry Pi Pico) dividendone i core nelle due parti di elaborazione principali del Game Boy.

Un core emula la CPU per ricreare una copia della VRAM e l’altro core emula l’unità grafica del Game Boy, la PPU 4.

La documentazione, completa di schemi e collegamenti a repository github, si rende disponibile all’indirizzo https://there.oughta.be/a/game-boy-capture-cartridge

Per aggiornare, tenere premuto il pulsante [Flash] (di solito all’interno della custodia) mentre si connette l’Interceptor tramite USB e trascinare il file uf2 sottostante nel suo file system.

Changelog v1.1.0

  • Rilevamento del gioco che include un database (per lo più generato automaticamente) di 1400 hash.
  • Correzioni specifiche del gioco:
    • Alien vs. Predator.
    • Batman the Animated Series.
    • Battletoad.
    • Battletoads in Ragnarok’s World.
    • Battletoads Double Dragon.
    • Bonk’s Adventure.
    • Fighting Simulator.
    • Kirby’s Dreamland 2.
    • Mole Mania.
    • Samurai Shodown.
    • Tetris 2.
    • Teenage Mutant Ninja Turtles – Fall of the Foot Clan.
  • Corretto il problema con il flag di trasporto per le istruzioni SBC (risolve un grosso problema in Battletoads ma potrebbe risolvere anche altri giochi).
  • Limitato il registro delle statistiche solo alla modalità di report 0 e 1 a causa della limitata precisione dell’emulazione PPU. Questo corregge Chase HQ e possibilmente altri.
  • Corretto il problema del mezzo riporto per diversi codici operativi. (Corregge Killer Instinct e possibilmente altri).
  • Corretto il rendering della finestra se è abilitata a metà frame. Corregge i banner di testo in Samurai Shodown e quasi certamente gli effetti delle finestre in altri giochi.
  • Modificato leggermente il rilevamento degli interrupt per non richiedere un salto del PC. Questo corregge il crash alla fine del livello 1 in Tiny Toons – Babs’ Big Break e, si spera, non introduce problemi in altri giochi.
  • Attende più a lungo ora per l’istruzione di ritorno dopo DMA prima di rinunciare. Corregge Dr. Franken.
  • Aggiunta un’opzione di fusione del fotogramma inferiore e la utilizza come impostazione predefinita come compromesso tra effetti fantasma ed effetti di trasparenza interrotta.
  • Il descrittore USB ottiene un numero di serie univoco dal chip flash. Ciò farà sì che più Interceptor diventino distinguibili dal sistema host. Ciò potrebbe anche significare che è necessario aggiungerlo e configurarlo nuovamente nel software host.

Changelog v1.0.4

  • Correzione: misurazione irregolare della temporizzazione dell’orologio su Game Boy Pocket, causando problemi in molti giochi.
  • Correzione: Interceptor non si avvia dopo il ciclo di spegnimento su alcune schede. Se hai una scheda che sembra funzionare dopo aver caricato il firmware, ma smette di funzionare dopo averla scollegata e ricollegata, questo risolverà sicuramente il problema. Ciò si verifica su schede su cui l’oscillatore a cristallo impiega un po’ più tempo per stabilizzarsi. Questo può semplicemente essere la conseguenza delle tolleranze di produzione e sembra verificarsi in circa 1 Interceptor su 20. Questa correzione attende semplicemente qualche millisecondo in più, il che non dovrebbe avere alcun effetto collaterale negativo.

Changelog v1.0.3

Questa versione introduce una visualizzazione sullo schermo che tornerà utile anche per i prossimi aggiornamenti futuri. Naturalmente, ci sono anche alcune correzioni.

  • Aggiunta la visualizzazione sullo schermo per indicare se la fusione dei fotogrammi è attivata o disattivata e l’impostazione predefinita è disattivata all’avvio.
  • Correzione: Controlla solo la coerenza del puntatore dello stack rispetto agli indirizzi sul bus se non punta alla VRAM perché questi indirizzi non sono affidabili sul DMG (corregge Pokemon rosso/blu sul DMG e probabilmente molti altri giochi sul DMG).
  • Correzione: Il rilevamento duplicato dopo il ritorno immediato dall’arresto non riesce in alcuni casi (riparazione di Pokemon giallo e forse pochi altri giochi).
  • Limita i passaggi di framerate consentiti per risolvere i problemi con le app che si bloccano altrimenti.
  • Mostra la versione sullo schermo di standby.

Per aggiornare, tenere premuto il pulsante [Flash] (di solito all’interno della custodia) mentre si connette l’Interceptor tramite USB e si trascina il file uf2 sottostante nel suo file system.

Changelog v1.0.2

  • Corretto il crash per i giochi che reimpostavano il registro div. (vedere #7 per un esempio).

Changelog v1.0.1

Questa versione migliora la compatibilità su MacOS e corregge diversi problemi sul Game Boy originale (DMG).

  • Migliorato il supporto MacOS (vedere #1).
  • Corretti diversi problemi sul Game Boy (DMG) originale in quanto mostra un indirizzo diverso sul bus della cartuccia mentre accede alla VRAM (i glitch includono tessere immondizia in Zelda, punteggio illeggibile durante la pausa in Tetris e probabilmente molti altri).
  • Consentito il riavvio senza attendere lo spegnimento del Game Boy (correzione del supporto Everdrive).
  • Corretto il problema con la trasmissione di frame USB avviata al di fuori di hblank/vblank (dovrebbe correggere occasionalmente i frame persi e alcuni problemi grafici minori).
  • Rilevamento più robusto per risincronizzare dopo un trasferimento da DMA a OAM nei casi in cui il loop inattivo non è visibile sul bus (correzione di Donkey Kong Land su DMG).
  • Consentita l’impostazione di frame rate arbitrari inferiori a 29 fps.
  • Aggiunta la sincronizzazione PPU per loop stretti utilizzando il registro STAT per attendere vblank.
  • Aggiunto il supporto per DMA dalla cartuccia (non testato).
  • Stringa della versione di output durante la connessione tramite seriale.
  • Migliorati i descrittori USB: Nome del dispositivo e calcolo dei limiti di bitrate.
  • A causa di alcuni controlli aggiuntivi durante la lettura dalla memoria (vedere il problema DMA VRAM sopra) il clock rp2040 doveva essere aumentato ulteriormente a 250MHz. Spero di poterlo richiamare quando avrò del tempo per le ottimizzazioni.

Download: gbinterceptor_case.zip

Download: gbinterceptor_firmware_v1.1.0.uf2

Download: gbinterceptor_pcb_bom.csv

Download: gbinterceptor_pcb_gerbers.zip

Download: gbinterceptor_pcb_position.csv

Download: Source code GB Interceptor v1.1.0

Fonte: twitter.com