In a Weird Step Backwards, This Game Boy Advance Got a Grayscale LCD
Many modders upgrade their GBAs with backlit LCDs, but Wenting went the opposite direction and downgraded his GBA with a grayscale LCD
The Game Boy Advance (GBA), released in 2001, was notable for many reasons. It was Nintendo’s first 32-bit handheld console, but still retained backwards compatibility with the Game Boy and Game Boy Color. While it had a higher resolution than the Game Boy color, Nintendo continued their mistake of using an LCD panel without backlighting. That makes it hard to play a GBA in the dark, which is why backlight mods are so common. But Wenting Zhang went a different route and “downgraded” his GBA with a grayscale LCD.
Wenting is no stranger in the world of hueless displays. He is one of the engineers working on the Modos E ink laptop project and has a great deal of experience with E Ink screens. But E Ink screens aren’t suitable for a project like this, because even the fastest models don’t have a refresh rate that can keep up with GBA game frame rates. Instead, Wenting chose to use a more conventional grayscale LCD panel. It isn’t backlit either and so it doesn’t really solve the original problem, but that’s why this is called a downgrade and not an upgrade.
For this to work, Wenting had to convert the GBA’s video output into a signal that the grayscale LCD panel could understand. The GBA outputs signals with three 5-bit color channels, but the grayscale LCD expects a single 6-bit luminance value for each pixel. Wenting used a Raspberry Pi RP2040 microcontroller to handle the translation, but actually calculating the conversion proved to be a challenge.
There are formulas to translate three color channels to one grayscale value, but such algorithms would require both multiplication and division—operations that require several processor cycles each. The total number of cycles for each pixel would be something like 100. When you multiply that by the total number of pixels (38,400 for the GBA) and the frame rate (59.727Hz), you get something like 230 millionrequired cycles per second just for the color conversion. That’s too much for the RP2040 to process and maintain the frame rate.
Wenting’s solution was to use a lookup table. Intuitively, one would think that that would be less efficient. There are a total of 32,768 possible color values, which results in a large table. But even sorting through that entire table is probably faster than performing the calculations if you have enough memory. Fortunately, that isn’t even necessary. The grayscale screen only supports 64 levels covering black to white, which means each shade covers approximately 512 unique colors (depending on how they’re distributed). So the lookup only needs to consider where the RGB values fall within particular ranges, since the display can’t handle all of the colors anyway.
The lookup table worked fast enough and Wenting was able to fit both the new grayscale display and his custom RP2040 board inside of the standard GBA case. As you can see, it works very well. The games seem to be completely playable in grayscale, though few people will have an interest in performing this downgrade mod.