The Nintendo Game Boy was a very popular handheld in its time, but its display technology has not aged gracefully. Ripping out the original screen and dropping in a modern IPS LCD is a popular mod, but that often comes with a weird flicker now and then. [makho] is here to explain why.
The problem was that the Game Boy didn’t have any way to do transparency in the original hardware. Instead, sprites that were supposed to be a little bit transparent were instead flickered on and off rapidly. The original LCD was so slow that this flicker would be largely hidden, with the sprites in question looking suitably transparent. However, switch to a modern IPS LCD with its faster refresh rate, and the flickering will be readily visible. So it’s not a bug — it’s something that was intentionally done by developers that were designing for the screen technology of the 1980s, not the 2020s.
IPS screens have become the must-have upgrade for modern Game Boy users. Most would tell you the improved image quality and rich color is worth a little flicker here and there.
Note that this isn’t the only “issue” with IPS screens on gameboy colors. It’s also that the colors are completely wrong. The saturation levels on the real gameboy color are much lower. Which is why the most amazing game ever (Links Awakening DX) looks much more vibrant then intended.
Another reason LADX flickers sprites is to reduce sprite limit issues. The chain you see on bowwow only shows even/odd bits every other frame, else it hits the 10 (8x16pixel) sprites per frame limit really fast.
(I’m pretty much the expert on this specific game, knowing how a lot of internals work and build the most amazing randomizer for it)
Both the oversaturation issue and the flickering issue could be solved by post-processing the video signal (in an FPGA, for example). This looks like a fun project.
#latency
A 1 or more line buffer would allow for some filtering and effects without introducing a frame latency. Some companies already make these sorts of inline image processing chips, such as SII.
Considering these techniques were originally possible due to the relatively slow refresh rate of the original screen, there’s definitely time to at least partially correct theses issues without noticeable latency.
leave it to someone to suggest latency as an issue in a gaming thread…..when the actual hardware physically had so much latency that it hid these effects.
You’re not gaining anything from those 120 Hz on you’re 1980’s handheld.
Typically the FPGA or CPLD used doesn’t have enough RAM to buffer a whole frame, so filtering sprite flicker is hard. Though that is of course just a matter of adding external RAM.
Averaging two consecutive frames together would probably be good for most games.
I was going to say at that point wouldn’t a ‘game shark’ FPGA work better to fix the problem by ‘hacking the rom’ to eliminate the problem totally?
No.
You suddenly need to know what to change in *every* game, and it’s going to be impossible to fix anyway. Some games did this because transparency is literally unrepresentable. Others do it because there’s only so much ram for the sprite palate and so they swap it on the fly.
An FPGA intercepting game code/data can’t do anything to fix either of those.
I love it when someone assumes the “intent” of the original developer decades later
Welcome to the US Supreme Court (-:
another obvious issue is the way large consumption of the screen… makes the use of better batterie mandatory…
Not the worst problem in the world. A lithium battery and charge curcuit cost less than 2 packs of AA these days.
Fun fact: this low-res screen was probably one of the main reason the Game Boy outfoxed most of its competitors. That low-res, non-backlit screen hardly used as much battery life as say, an Atari Lynx or Game Gear. Even against prettier games, that battery life was a secret weapon.
But you are correct. A modern screen will trash those AAs pretty quick.
Actually it was 10 sprites per _line_ not per frame. It’s normally 40 per frame (there are 40 sprite registers), though there are ways of updating the sprite registers mid frame to get more.
Oh, yes, “typo”, I know it is per line, no idea why I wrote frame…
This has the potential for a dad joke involving A.I or the Terminator story line involving Arnolds eye damage.
Or you could go a little lower on the chassis for a slightly crude one.