You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When the program turns on rendering by changing bit 7 of LCDC ($FF40) from 0 to 1, the PPU goes straight to the start of rendering (scanline 0) without sending the vsync pulse to the LCD. This causes the LCD to display a white screen for one frame. (On monochrome systems, this is the same whiter-than-white shade displayed when rendering is off.) Some games, such as Pokémon Pinball, use this blank frame to prepare things before the first visible frame, such as the sprite display list to be DMA copied to OAM during the first vblank.
Though recent BGB emulates this quirk, mGBA, WasmBoy, and Peanut-GB do not. This causes 1 frame of corruption to appear in Pokémon Pinball and numerous other games after a screen transition. Many games on KiGB's compatibility list are there because of this quirk. Affected games may include A Boy and His Blob, Boxing by Tonkin House, Captain Knick-Knack, HyperDunk, Hyper Lode Runner, and Xiang Pu -- Dong Hai Dao Chang Suo.
I've attached a test ROM for this quirk, which repeatedly turns the LCD on for one frame before turning it off.
This is a partial fix for issue #33, whereby the Game Boy LCD must
display a white screen for one frame after the LCD is enabled. This
stops garbled graphics being displayed by some games when the LCD is
enabled.
This is only a "partial" fix because Peanut-GB will simply not update
the LCD when the LCD has been enabled by the game. This means that
instead of showing a white screen, it is possible that the last
previously rendered frame will remain on the screen. This is not
accurate.
Signed-off-by: Mahyar Koshkouei <mk@deltabeard.com>
Thanks for the bug report and for writing & providing the test ROM. As mentioned in the commit, I think this is a partial fix, so I will leave this issue open. I need to do more testing, especially with Pokemon Pinball to see if this commit actually fixes the problem. Below is a before and after test of the firstwhite.gb ROM.
When the program turns on rendering by changing bit 7 of LCDC ($FF40) from 0 to 1, the PPU goes straight to the start of rendering (scanline 0) without sending the vsync pulse to the LCD. This causes the LCD to display a white screen for one frame. (On monochrome systems, this is the same whiter-than-white shade displayed when rendering is off.) Some games, such as Pokémon Pinball, use this blank frame to prepare things before the first visible frame, such as the sprite display list to be DMA copied to OAM during the first vblank.
Though recent BGB emulates this quirk, mGBA, WasmBoy, and Peanut-GB do not. This causes 1 frame of corruption to appear in Pokémon Pinball and numerous other games after a screen transition. Many games on KiGB's compatibility list are there because of this quirk. Affected games may include A Boy and His Blob, Boxing by Tonkin House, Captain Knick-Knack, HyperDunk, Hyper Lode Runner, and Xiang Pu -- Dong Hai Dao Chang Suo.
I've attached a test ROM for this quirk, which repeatedly turns the LCD on for one frame before turning it off.
The text was updated successfully, but these errors were encountered: