CrankBoy: Talking With the Devs Behind the Playdate Emulator

The Playdate is one of those consoles that doesn’t play by anybody’s rules but its own. It’s bright yellow, fits in your pocket, and comes with a built-in crank on the side that doubles as a quirky game controller. Panic designed it to be fun, weird, and experimental, and the community has taken that spirit to heart, building projects that push its tiny black-and-white screen in unexpected directions.
One of the most ambitious of those projects is CrankBoy, a Game Boy emulator made specifically for the Playdate. It’s the kind of thing that sounds almost impossible on paper: running classic Nintendo handheld games on a console that wasn’t designed for emulation at all, but thanks to the work of developers Stonerl and Sodium, it not only runs...it shines. CrankBoy takes the nostalgia of the Game Boy and filters it through the playful lens of the Playdate, giving old favorites a fresh spin (sometimes literally, thanks to the crank).
I had the chance to sit down with both developers and ask them about how CrankBoy came to be, what challenges they faced, and what it’s like to bring Game Boy classics to such an unusual little device. Here’s our full conversation.

Inspiration:
First things first: what made you two look at the Playdate and think, “Yep, we’re gonna make this tiny yellow console play Pokémon”?
Sodium: There are two things every device needs to be able to do: (1) run doom, and (2) emulate retro games. Game Boy just seems like an obvious fit for this thing, since people already call the Playdate a “Game Boy with a crank.”
Since even after years nobody was able to optimize a Game Boy emulator to run at full speed on Playdate, I figured it’d be a good opportunity for me to be able to introduce to everyone some of the features I felt like emulators should have as a standard in the year 2025, like good support for romhacks, custom scripting, and perhaps most importantly, sane default settings.
My hope is that emulator (and emulator frontend) developers will be inspired by this and implement things like a nice romhack softpatching UI, decide on a common standard for Lua scripts, and maybe make some strides on making controller input configuration more intuitive. The biggest thing holding emulation back in 2025 is poor UX.
Stonerl: The first time I saw the Playdate the first thing that crossed my mind was: “That think looks like a modern interpretation of a Game Boy”. I got my Playdate earlier this year and was looking for Game Boy emulators, but non of the ones available had decent performance. So, in my naivety I thought: “Yeah, lets see if we can improve things here…”
Do you both have other developer work? What kind of projects have you built or been involved in before this?
Sodium: I’ve worked in emulation professionally for 5 years or so. I also make ROM hacks for fun and I previously released Swap Machina as a launch title for Catalog on the Playdate.
Stonerl: I had no prior experience in emulator development, but had contributed to several open-source projects over the years.
How did you both first cross paths, and when did the CrankBoy idea start to take shape?
Sodium: I made some solid progress on improving emulator performance a few months ago after reviewing some research notes about Playdate’s CPU and cache speed from a user named StiNKz. I got emulation running at full speed on Rev A , but without audio. However, when I posted about it, nobody seemed very interested in it, so I shelved the project. Then in May, stonerl started making attempts at optimizing as well, and I suggested we team up.
Did it take long before you two knew Game Boy emulation on Playdate was actually possible?
Sodium: We knew it was possible early on, since I got it running at full speed without sound before stonerl joined in the effort. The question, then, was possible at what cost? I thought for sure that audio quality would need to be greatly sacrificed, then stonerl magically fixed it. It only took maybe 6 weeks of optimising before performance reached where it is today.
Since then, we’ve been implementing the kinds of bells and whistles a dream emulator on a cozy device like Playdate should have – automatic cover art downloading, custom ROM scripting, save states (naturally), various options for display and alternative control schemes, etc., alerting when an update is available, etc.
stonerl: Not much to add here, running into each other on the Playdate Discord was a match made in heaven. I would not have been able to pull this off, and thanks to Sodium’s ingenuity and skills we ended up with quite a nice little app.
On a scale from “just for fun” to “life-consuming obsession,” where did this project sit during development?
Sodium: life-consuming obsession for about 2 months straight.
Stonerl: life-consuming obsession, as well…

The Tech:
Getting Game Boy emulation to run full-speed on both Rev A and Rev B Playdates sounds tricky, what was the biggest technical hurdle?
Sodium: The thing that holds people back from writing highly optimized code for the Playdate is misunderstanding the bottleneck. The Playdate is unusual in that it has a relatively fast CPU but a very small cache size. This means that if you can keep your code primarily accessing the same 4 kilobytes (on Rev A – Rev B has a bigger cache) of data (and a separate 4 kb for code), you’ll experience a massive performance improvement. A lot of developers come in thinking that branch prediction is important, and try to remove if statements and loops. But actually, if you can reduce the size of your code by adding loops and branches, that’s generally going to be worth it. Programmers usually aren’t used to thinking about the size of their code, so it’s a little unintuitive.
The emulator CrankBoy is based on, Peanut-GB, has bespoke code to handle every different Game Boy opcode. (There are around 500 different Game Boy opcodes.) I compressed this so that dozens and dozens of different Game Boy opcodes are all executed by the exact same code, which just behaves slightly differently depending on which opcode is being processed. This reduced the size of the core emulator code from around 20 kb (of Playdate machine code) to about 2 kb. (In terms of C code, it went from about 2200 lines of code to about 450 lines. C code doesn’t map 1:1 to machine code, so the ratio is a bit different.) It runs about 15 fps faster than before as a result.
Another advantage that came from shrinking the code this much is that we were able to move the most important parts of the code to fit into a special, tiny, speedy region of memory called TCM (Tightly-Coupled Memory). This region isn’t documented by Panic, but StiNKz also mentioned it in their research notes on cache performance. Most people assumed that it wouldn’t be able to store code, just data, but I tried putting code there and it gave another +5 fps boost on Rev A.
For anyone interested in applying these unusual optimization techniques themself, I have written some notes.
How did you handle audio? Was 44.1 kHz a target from the start, or something you just happened to pull off?
stonerl: TBH, we did not have a target as to what sound would end up being. What we knew was that sound had a big performance impact, depending on the channels used, up to 10fps. So the goal, if we even had one there, was to get audio computing time down as much as possible and if we could achieve “perfect” sound along the way that would be the cherry on top.
One of the first things we played around with was different sample rates, which would reduces the compute time, but also has some impact on sound quality, the lower it gets. Next, instead of computing the frequencies for the noise channel every time, we started using a LUT, this also brought the some major wins in performance. Although, computing time was down, it still was not enough to be satisfied, so we added the Fast Audio mode. This basically uses an approximation of the waveform for each audio sample which is much less compute intensive and depending on the audio signature of a game, one might not even hear a difference.
The last piece of the puzzle, we discovered very late in development. Up until then we created a stereo source for the Playdate to play back and the Playdate would mix it down to mono for the speaker. We figured out that, creating a mono source and down-mixing the Game Boy’s channels ourself would give us up to 2fps depending on the game.
What feature are you most proud of that you think people might overlook?
Sodium: Scripting support. I think there’s a lot to be gained from, erm, zhuzhing up emulation using custom scripts. It’s especially relevant to the Playdate since these kinds of scripts can be used to alter the game’s aspect ratio to fit the device, add custom crank controls – say, fishing in Zelda – and so on. On consoles other than Playdate, these kinds of scripts can be used to add rumble into retro games, or make them properly widescreen. The lack of a common standard between emulators for script support is unfortunate, as it has the potential to be huge, if only it were more convenient.
stonerl: Bundle Mode. Sodium add this mid-development and although it is not a feature users will knowingly interact with, it opens the door to so many opportunities for Game Boy developers to release their games on the Playdate.
The patch file support is pretty advanced, was that inspired by a personal workflow or user requests?
Sodium: Personal workflow. I like ROM hacks a lot. It’s convenient to not have numerous copies of a game cluttering up the library when it could just be one copy (plus a hack selection screen).
ROM hacks are a fun extension of “remix” culture, which is popular in music, but a lot more niche with video games and other media. In some senses, it’s surprising that we live in a world where remixing music is considered normal. You could easily imagine things working out differently, where record companies have more powerful IP laws backing them up, and then remixes would be really niche or even frowned upon. I’d like to see remixing, and derivative works in general, be taken more seriously by society outside of just music.
I’d like to add support for downloading popular ROM hacks from within the app itself, but all the popular ROM hack sites are using things like Cloudflare to block unusual traffic, which makes them harder to access from a Playdate. Easily facilitated ROM hack
For any readers unfamiliar with what patches, aka ROM hacks, are – they are small files, generally made by fans, which can alter a game in various ways. For instance, they can translate a game from Japanese into English, or change the main character, or introduce save files into a game that normally uses passwords, modernize the control scheme, or add in whole new levels. They’re essentially “mods”in the world of emulation.
What’s the nerdiest, most “only-a-dev-would-care” tweak in CrankBoy that you love?
Sodium: You can optionally have specific configurations for individual games in addition to your general configuration across games. This is because certain games look better using certain dither patterns, display options, and other tweaks. Most users likely won’t bother with this, so it’s not enabled by default – but I’m strangely content with the subtle animation that plays when toggling bespoke settings on a game. (In general, so long as it doesn’t complicate things for the average user, I like to make things that power users will appreciate; power users have been slighted by the Pareto principle for too long.)
What else… ah yes, the credits (⊙ > creditsfrom the library view) shuffle the order of the contributors randomly so as to make everyone equal. And there is music that plays when viewing the credits, and it’s randomly generated. Are these good things? I don’t know…
stonerl: Cover art conversion and how we handle cover art in the library. We had to find a way to convert the cover art into dithered black and white 240×240 images that the Playdate would be able to work with (it uses the pdi format). That took a lot of tinkering to get an automated process for converting the downloadable cover art into a presentable shape. Also instead of loading the image every time from disk when they are to be displayed, as we did in the beginning, we now cache them in memory and compress them with lz4 during startup. That is something nobody might notice (except for the message during startup) but when you fast scroll through a list 100 games and covert art, there will be no stutter what so ever.
That Crank:
Did the crank make things easier, harder, or just more fun to code for? Tell me a bit about how it’s been trying to implement it to games made decades before this crank existed!
Sodium: It’s been a special challenge to try to adapt games to the crank. Playdate users are generally going to expect that the crank can be used in menus to move your cursor, so I have experimentally added that feature specially for Pokémon Red/Blue/Yellow. You can also pop out the crank to open the menu from the overworld view, so you generally won’t miss the start and select buttons while playing the game. Even though I’m not a fan myself, I figured Pokémon would be the most popular game for emulation, so I wanted it to feel like a native Playdate game. It could still use some more work though.
To be honest, the crank is kind of challenging to get the feel just right. I thought it would be hilarious if Kirby’s flying could be controlled using the crank, and cranking at different rates would affect Kirby’s exact thrust. I did implement this, but it doesn’t feel as nice as I’d hoped. I think it needs to be tweaked some more, but I’m not sure I have the right intuition for it. (You can still use the original control scheme for Kirby, since the game is playable with just the Ⓐ and Ⓑ buttons plus d-pad.)
Did you have to make any big compromises to fit Game Boy visuals into the Playdate’s screen?
Sodium: The dithered black-and-white looks way better than I was expecting, and captures the original grayscale very nicely. Rather than being a compromise, it feels to me more like a whole new way to appreciate Game Boy graphics. However, there are a few scenarios, like if the game has very tiny text, or if the game was already dithering to begin with, where it comes across poorly.
The Playdate’s screen isn’t quite tall enough to fully fit a 2×-scaled Game Boy screen, so the screen is slightly squished (by a 5:6 ratio vertically). This is occasionally noticeable due to how it interferes with the dither pattern, but the altered aspect ratio itself (4:3 on the Playdate compared to 10:9 on the Game Boy) is really not that noticeable. In some games, like Kirby and Link’s Awakening (and hopefully more in the future), we’re able to move the HUD from the bottom of the screen to the side, allowing for perfect 2× integer scaling.
The biggest compromise is an unavoidable one so far as we know – the Playdate’s screen can’t fully refresh at 60 fps. By default, we only show every second frame, and this actually looks just fine for almost every game. I was surprised, but as with dithering, it really doesn’t make a noticeable difference. Games where the background doesn’t scroll (like Tetris, Pinball, and so on) can generally do the full 60 fps just fine, however, as not every scanline needs refreshing every frame. 60 FPS with interlacing is also an option. There is still more room to explore here.
If you could wave a magic crank and add any Playdate hardware feature to help emulation, what would it be?
- Improve the screen refresh rate to be able to do 60 fps. Please Panic – release a Rev C with a 20% faster screen refresh rate.
- At least one extra button would be nice. Even if it were just a Ⓒ button or something, then you could do Ⓒ+Ⓐ for start and Ⓒ+Ⓑ for select or something.
- This is technically a firmware feature, not a hardware feature – so it could actually come in a future update, though it’s not likely. There’s an ESP32 processor on the Playdate, but it’s only used for wi-fi currently, and there’s no API for programming it presently. The ESP32 is faster than the Playdate’s main CPU, so if it could be leveraged as a coprocessor, that’d be a big deal for performance.
Any dream ideas for crank-based Game Boy game hacks?
Sodium: In Mega Man (yes – there are Game Boy Mega Man games, and they’re different from the NES ones, particularly Mega Man V), it’d be handy to be able to quickly switch weapons using the crank. Plus, the health bar could be on the side like it is in most Mega Man games, instead of on the bottom. (Most Game Boy games put HUD information at the bottom of the screen since the so-called “Window” feature of the Game Boy makes it especially easy to do that.)
In Metroid II it might be neat to be able to toggle missiles by undocking/docking the crank as well. I’d of course be thrilled if other people who have ROM hacking expertise contributed some scripts of their own.

The ROMs:
The classic question: where do you personally draw the line between preserving retro games and piracy?
stonerl: The only thing I can say about this is that I signed the “Stop Killing Games” petition. That has nothing to do with retro gaming as of today. But today's hot games may become retro tomorrow.
How do you feel about the ongoing legal gray area of emulators, given CrankBoy’s potential reach?
Disclaimer: neither devs nor this writer are lawyers, none of the following is to be considered legal advice, and laws in your jurisdiction may differ.
Sodium: Game Boy emulation is not a legal gray area. Game Boy emulators are completely legal, and Nintendo has even directly stated that emulators which do not bypass DRM are legal.
Emulators for modern systems, such as Yuzu, are more of a gray area, if not outright illegal, seeing as they have the ability to bypass DRMs. Even when they don’t break the law, emulators for modern consoles will likely face challenges in the future since console developers have a strong incentive to take them down by any means necessary.
That’s a terrible shame, too – if I purchase a game, I should have the legal and moral right to play it on any machine I own which is up to the task. Furthermore, I believe the notion of legally-enforced console-exclusivity in titles goes against the spirit of the free market, as console developers should be forced to win users by making the best, most user-friendly console they can, rather than holding users hostage with a walled garden.
Stonerl: It is a pity that emulation has this notion of being in a gray area. As long as one does not circumvents any means of DRM (and that is another can of worms I don’t want to open) emulation is in it’s core what it says. A piece of software that tries to emulate the functionality of a specific piece of hardware. I really don’t see any difference between emulation and virtualisation in a broader sense, and the later one is a multi billion dollar business. The issue is that the word emulation is, in many cases, synonymously used for software piracy and IMHO that is quite dishonest. I still have some games from back in the day, when I owned an Amiga 1200. Without emulation I would not be able to actually play these games anymore, since my Amiga died a long time ago.
Do you think game companies are doing enough to keep older games accessible so fans don’t have to resort to emulation?
Sodium: The scene is definitely better now than it was 20 years ago. However, there are still many games that are likely to remain un-purchasable in the long term, particularly ones with fraught licensing restrictions – like sports games (featuring real people and teams); racing games (featuring real cars); and rhythm games (featuring… well, “real” music, whatever that means).
It’d be nice not to have to re-purchase your whole retro game collection on Steam, or pay for a Nintendo Online subscription. Modern consoles don’t have cartridge slots of course, but it’s still unfortunate that you can’t, say, pop a PS2 disc into a PS5 and just play it.
stonerl: There have been some re-releases of older games on the Nintendo Switch and some other platforms, and as Sodium said, Nintentdo has some available through their Nintendo Online service. But thats the catch, these companies either try to re-sell you the same game over and over again or try to lure you into a subscription, and as soon as you don’t pay for that service anymore you loose access to all these games. Regarding Game Boy games the only thing I see Nintendo doing is remaking these games for newer platforms, but making the original ones easily accessible does not seem to be in their interest.
How would you explain to a non-tech person why emulators themselves aren’t illegal, but sharing ROMs usually is?
Sodium: MP3 players, VCR players, DVD players, record players, eBook readers – these are not illegal, and you can buy them from hundreds of different vendors that all compete with each other. This does not make mean that it’s legal to copy and distribute your MP3 files, VCRs, DVDs, vinyl records, and eBooks (although in many jurisdictions it’s okay to make backups for personal use).
The Future:
What’s still on your wishlist for CrankBoy that you haven’t been able to add yet?
Sodium: a lot of people have asked for us to implement (opt-in) support for “Retro Achievements.” That’s is an online, fan-made way to get “achievements” in retro games. similar to the achievements on Steam, or trophies on PlayStation. (Playdate also has its own fan-run achievement system, and I wonder if it’s possible to get these to mesh...)
We’d also like to have a repository of good default settings on a per-game basis. Some games look best with certain dither styles, some work great at a full 60 fps, and so on. So it’d be nice if you could get a prompt like “There are community settings available for this title—would you like to apply them?”
Any chance of support for other classic handheld systems, or is it ‘Game Boy only’?
Sodium: Game Boy Color is just at the edge of plausibility. Not everyone knows this, but there’s more to the CGB than just what’s in the name. It has more features and a faster CPU. I’m not sure I have it in me to do the necessary optimizations to implement support for CGB-only games, especially since so many of them are backward-compatible with the Game Boy already and run just fine on CrankBoy. (Not to mention, you’d have to play them in black-and-white.)
Do you see CrankBoy becoming more of a “platform” for retro gaming on Playdate?
Sodium: as in, hosting more emulators than just Game Boy? Well, if somebody wants to contribute emulator cores for other systems, we’re open to it.
If Playdate ever evolves with a Playdate 2, what would you want to do differently with CrankBoy?
Sodium: Well for sure let’s take advantage of whatever new features the Playdate 2 comes with. Colour screen? Better refresh rate? More buttons? Fewer buttons? It wouldn’t be a Playdate if it didn’t have some zany, totally unexpected thing – I think original plans for the Playdate had a spring, like you use in pinball to insert a new ball.
Lastly: if someone’s first experience with Game Boy is through CrankBoy (sounds strange, but there’s a lot of us young-young gamers who haven’t tried them yet), which game would you tell them to play first?
Sodium: Kirby’s Dream Land is a short, easy, and fun little title, and we have special support for it. It holds up very nicely.
There are also many aftermarket titles (games released after the discontinuation of the Game Boy) available on itch.io – just check first that they don’t require Game Boy Color compatibility. It’s recently become very popular among indie developers to make Game Boy games, due to the release of Game Boy Studio.

And that wraps up my chat with Stonerl and Sodium, the duo behind CrankBoy. Their passion for both the Playdate and the Game Boy shines through in every answer, and it’s clear this project was built on equal parts technical skill and genuine love for the hardware. CrankBoy isn’t just an emulator; it’s a creative experiment that captures that pretty damned unique spirit of the Playdate itself.
A big thanks to both developers for taking the time to share their journey. Whether you’re dusting off an old favorite or just curious about what the Playdate is capable of, CrankBoy is proof that even a tiny, quirky handheld can deliver big surprises when the right people get their hands on it.
If you’d like to look further into the Playdate console itself:
- Here is their website https://play.date/
If you’d like to look further into CrankBoy:
- Here is their GitHub
- And their Patreon if you’re interested in supporting their work
- Here is a link to the playdate dev forum thread which Sodium made about optimization techniques: "these are some special / unusual techniques for writing really performant code on playdate, it's a very important read in case one of your readers feels like taking a crack at an emulator"