
Retro Game Development:
Making Games for the Nintendo Game Boy
this is a class running in IAP 2027, about programming for the Nintendo Game Boy handheld game console (the original one, from 1989). the focus of the class will be a mix of Game-Boy-specific stuff, and game design more generally. we'll explore these things by making a few small games from the ground up in SM83 assembly, which will be playable in Game Boy emulators or on the Game Boy itself.
everyone who finishes the class will leave with a cartridge containing one of their games, playable on original hardware.
prerequisites
this class is mainly aimed at students with a decent programming background but who have never programmed for the Game Boy before, though you're certainly welcome even if you do have prior retro game development experience.
- programming background: you'll probably need either 6.190 or 6.101, and i'd strongly recommend having both (or substantial other programming experience). the more programming background you have, the easier the process is going to be.
- 6.190 is good because we're going to be writing assembly. while the assembly we'll be writing here is a different flavor to what you saw in 6.190, some prior exposure to that kind of low-level thinking is going to be useful. i'm also not going to spend time on, like, binary/hex representations of numbers and stuff like that; i'll assume you've seen it before.
- 6.101 is good because without a fair amount of prior programming experience, i think you're likely to have a difficult time. even though writing assembly is quite different from writing Python, many of the ideas from 6.101 about organizing code, good style, etc, are just as relevant here.
- time: we're going to try to do a lot of stuff in a short amount of time, so you should plan on spending time in the lab. if you're also doing like a big competition class or something, maybe it isn't a good idea also to try to do this.
- hardware: you do not need to own a Game Boy (most of our testing will be done in an emulator, and i'll bring several consoles to lab for testing as well). that said, if you think it's cool to have your own, you
can find them on eBay or other second-hand stores (though they are
unfortunately quite pricey if they're in working order). the games
we make in class should work fine on any of these consoles:
- Game Boy (DMG-01)
- Game Boy Pocket
- Game Boy Light
- Game Boy Color
- Game Boy Advance
- Game Boy Advance SP
software
we're going to use the following tools, all of which are Free/Libre Software:
- a POSIX-compliant shell (e.g., Bash)
- RGBDS (version 1.0.x)
- Python (v3.15 recommended but probably anything v3.11+ will work)
- an accurate emulator with debugging support, such as Mesen
textbook / reference
we'll make heavy use of the following fantastic resources from the folks in the Game Boy Development Community:
- the RGBDS documentation will be our reference for the specific flavor of assembly we'll be writing.
- the Pan Docs will be our reference for details of the Game Boy's inner workings and quirks.
everything else you need will be provided in class or through this website.
ai policy
even if we were to ignore the ethical, legal, societal, environmental, economic, political, and humanitarian concerns raised by llm's, this is a class intended for humans. i don't care at all if claude can make a Game Boy game; i want to help you learn to make them. making a game is a fantastic outlet for creative expression, and i hope for you to be able to take pride in building something of your own design, essentially from scratch, in much the same way as it was done back in the day.
using llm's (or advanced code completion tools like copilot) would undercut these goals. as such, using them for any part of the class (including code, graphics, audio, documentation, debugging, optimization, ideation, etc.) is strictly forbidden.
contact
if you're interested in taking the class or have questions about it, feel free to drop me a line: hz@mit.edu.