QNA > Q > Quali Passi Bisogna Seguire Per Creare Un Emulatore Stm32F4 Per Giochi 2D, Come Game Boy E Snes Nintendo?

Quali passi bisogna seguire per creare un emulatore STM32F4 per giochi 2D, come Game Boy e SNES Nintendo?

Inizierei sicuramente facendo il porting di un emulatore esistente.

Esiste quasi certamente un emulatore open-source scritto in C o C++ per qualsiasi console si voglia emulare. Compilare il nucleo dell'emulatore per l'STM32 dovrebbe essere banale, dato che è solo logica - nessun input/output. Il nucleo dell'emulatore consiste di componenti discreti come la CPU, il controller di memoria, ecc. Il porting dell'emulazione del controller, del display e del suono della console saranno gli aspetti più coinvolti nell'impresa.

Display

Il display è la parte più importante dell'emulatore. Vi permette di vedere la gloriosa grafica generata come risultato del duro lavoro della CPU. Per visualizzare questa grafica, avrete ovviamente bisogno di un display. Alcune varianti dell'STM32 hanno un controller di visualizzazione incorporato, altre no. Presumo che tu stia prendendo di mira uno senza il controller di visualizzazione incorporato per semplicità. Avrai bisogno di un display esterno che possa interfacciarsi con il micro controller tramite SPI. I display che si interfacciano tramite I2C sono troppo lenti, e i display con interfacce più complicate come MIPI sono fuori dalla portata di un semplice progetto STM32. Qualsiasi display che otterrete conterrà un frame buffer in cui è possibile DMA (accesso diretto alla memoria) le informazioni sui pixel grezzi per la visualizzazione. Per gli emulatori di console retrò che non fanno il rendering in 3D, l'emulatore avrà molto probabilmente un frame buffer al suo interno che usa per copiare le informazioni del display sulla scheda grafica del PC per la visualizzazione. È anche possibile che l'emulatore stia usando OpenGL o SDL per visualizzare la grafica, nel qual caso è necessario scrivere un wrapper per catturare le scritture su queste librerie e memorizzare le informazioni video grezze in un proprio framebuffer. Una volta fatto questo, ogni volta che l'emulatore ha prodotto un nuovo fotogramma, puoi usare il controller DMA nell'STM32 per trasferirlo al display esterno che hai collegato.

Controller

Aggancia alcuni pulsanti al GPIO dell'STM32. Trova la funzione nell'emulatore che richiede lo stato del controller (molto probabilmente dalla tastiera). Leggi i pin GPIO quando questa funzione viene chiamata, e imposta i bit appropriati nel valore di ritorno di questa funzione.

Audio

Purtroppo non so molto su come funziona l'audio negli emulatori di console. La mia ipotesi su come si potrebbe portare la funzionalità audio di un emulatore all'STM32 sarebbe quella di trovare una libreria scritta per l'STM32 che può emettere buffer audio su I2S (come I2C ma specificamente per il suono) a un DAC I2S e un amplificatore che può essere collegato direttamente a un altoparlante. Starebbe a voi tradurre le chiamate nel modulo audio dell'emulatore a questa libreria. Le vecchie console avevano solo alcuni canali che potevano produrre onde quadre, onde a dente di sega, ecc. Quindi se la libreria I2S ha un'implementazione per generare queste onde, inoltrare le chiamate per produrre le onde dal modulo sonoro dell'emulatore alla libreria non dovrebbe essere molto difficile.

Ovviamente questa è una panoramica estremamente di alto livello. Il diavolo è nei dettagli. C'è molto da imparare sugli emulatori, sui protocolli e sui sistemi embedded nel loro complesso coinvolti in questo progetto.

Di Semela

La PS2 è una console retrò? :: A cosa servono le cornici negli smartphone? Perché stanno scomparendo ora?
Link utili