這幾天在研究ESP32的nes模擬器,github版本是把rom放在flash,以memory mapping的方式來運作。
好處在於跳過記憶體讀取,不用對模擬器做太大的修改(主要刪去rom load對於檔案讀取的部分);但相對的就不能從microSD讀取rom來執行。
另一個問題是,如果rom太大的話,有可能放不下4-1=3MB的flash(可換flash晶片解決)。
如果希望從microSD來執行程式;我想最快的方法就是把rom從microSD轉存入flash,再依照上述的流程運作模擬器。但實際測試發現,這個手段雖然可行,但是對於較大的rom,轉存flash恐怕會花費數秒的時間。
順便一提,我在最新的idf雖然可以編譯github的nes模擬器,但卻未能順利執行,從顯示資料來看是記憶體不足。
=============================================
因此我回過頭用原本的nes模擬器nofrendo進行修改。重新調整來滿足mcu記憶體較小的情況。比起github版本,又刪去一個framebuffer,大概可省60KB的記憶體;要移轉到ESP32的話,還需要加上line buffer跟SPI dma。
另外為了直接從microSD讀取rom,而不透過flash轉存,我把先前改gameboy的cache架構轉移到nofrendo上,目前設定使用32(vrom)+32*4(rom)=160KB,可以順利執行"Kirby's Adventure"且不須頻繁IO存取。