sysprog21 / gameboy-emu

An efficient and portable Game Boy emulator
MIT License
36 stars 6 forks source link

Galaga & Galaxian 顯示錯誤 #3

Open GGORZ10227216 opened 3 years ago

GGORZ10227216 commented 3 years ago

執行的ROM: Galaga & Galaxian (J) [S].gb 遇到的狀況: 在進入遊戲後,畫面遇到下述異常:

可能原因推測:

  1. 關於一片白:

透過觀察,可以得知顯示異常的皆為bg相關的圖形,因此可以將bug可能發生的範圍限縮

2.異常的READY字樣:

GGORZ10227216 commented 3 years ago

後來進一步對instruction做分析,空白畫面的主因是因為LCDC Status Interrupt(0x48)的行為異常

一般來說,在進入48h中斷之後,應該要跳轉到0x42a,此時的LCD Mode應為0b11,LY==LYC會被檢查 在正確將STAT_LYC_COINC bit設為1之後觸發0x44b的or,另gb->gb_reg.LCDC & LCDC_BG_ENABLE為true

但gameboy_emu在0x42a的時候LCD Mode為0b01,LY==LYC不會被檢查,LCDC Bit 0也就不會被設為1 最終造成bg沒有被繪製(強行取消gb->gb_reg.LCDC & LCDC_BG_ENABLE判斷可以緩解問題,但我想應該會導致其他錯誤)

目前只能推斷是時序問題,但依照過往經驗,這類型的Bug並不好處理......