Pubblicato un nuovo aggiornamento per GB Interceptor, la soluzione open source per riprodurre in streaming il gameplay dal Game Boy attraverso un Raspberry Pi con circuito integrato rp2040.
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.
Just released v1.0.3 of the GB Interceptor with several game fixes and an on screen display to indicate frame blending mode after the mode button was pressed. pic.twitter.com/5dCFZBEQ4x
— Sebastian Staacks (@diconx) January 11, 2023
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
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.0.3.uf2
Download: gbinterceptor_pcb_bom.csv
Download: gbinterceptor_pcb_gerbers.zip
Download: gbinterceptor_pcb_position.csv
Download: Source code GB Interceptor v1.0.3
Fonte: twitter.com