A developer who goes by kuslota has released InkBoy, a custom display driver and firmware that runs a Game Boy emulator at around 30 frames per second on Waveshare’s ESP32-S3-ePaper-1.54 V2 board. Waveshare specifies about 300 ms for a partial refresh on the board’s 200x200 panel, and the stock driver managed barely 2 fps in the developer’s testing. The code is on GitHub under an MIT license.
The speedup came in stages. The developer first cut the panel’s drive waveform from about 17 steps to 2, which brought a full update to roughly 50 ms but caused ghosting and a gradual graying of the screen. The fix was per-pixel driving: the driver tracks each pixel’s state, drives only the pixels that change, and gives each a drive budget that counts down with every pulse. Six to eight drives proved enough for a full black to white transition, and updates now start about every 33 ms. Grayscale was the harder problem. The Game Boy’s 160x144 image gets one display pixel per game pixel on this panel, so dithering patterns were clearly visible. Instead, the driver stops driving pixels partway through a transition to land on intermediate grays. Four shades produce 12 possible transitions, each needing its own drive values, which were tuned using a test rig that captured photos and video. The firmware lets users choose fast dithered black and white or four-shade grayscale.
The emulator core is existing open-source code from CrankBoy and Peanut-GB, and the repository credits Zephray’s PaperBoy for inspiring the per-pixel approach, though no PaperBoy code is included. The limits are documented: only original Game Boy (DMG) games up to 2 MiB are supported, busy scenes can fall below 30 fps, grayscale can leave faint trails, and only the project’s custom ESP32-C3 gamepad works for now. The README also warns that the custom waveforms and high refresh rates may cause permanent image retention or panel damage, and that long-term panel life has not been validated.
Add a comment
No account needed. Your comment appears once a moderator has reviewed it.