GMu

GMu is a GameBoy emulator I made in C++. The project started back in September 2022. Prior to starting, my programming experience consisted of a few Python and Java classes that I took in high school. Though this was a huge undertaking for someone with so little experience, I was able struggle through and gained a lot of experience with low level computer concepts.

Resources

Unfortunately, there is not a lot of helpful information online about writing emulators. By far the most useful thing I could find was a NES emulator series made by Javidx9. Some concepts may be difficult to understand at first so if you find yourself struggling, I would recommend looking at the book "But how Do it Know?" by J Clark Scott.

This is the first episode of the NES emulator series made by javidx9. Definetly check this out as it is one of the only truly deep and complete series on the internet that covers every stage of emulation development.

You will need to do your own research into the system you are trying to emulate. Common advice I have found is to start with a system like the NES or GameBoy as they have the most information on the web.

In terms of finding the latest info on the GameBoy specifically, I would recommend looking at gbdev.io. This is the largest collection of information on the GameBoy, and has plenty of helpful guides to start your journey. If you don't know where to start, I would suggest making a game in assembly. The tutorial I followed can be found here.

The tutorial has matured a lot since I last looked. Definiately consider checking it out if you want to make a GameBoy emulator!

If you are interested in checking out the code for my emulator, you can find it here. Below, there is a demo that you can try for yourself. Though the code for the emulator is written in C++, there is a nifty project called Emscripten that uses WebAssembly to run C++ code in the browser. What is even cooler is the fact that it supports SDL, which is a library that I use for multi-platform support.

I have not published the specific source code that the demo is using, and there are quite a few differences and limitations at the moment with the demo version of the emulator, such as not being able to upload any ROM files. But the demo runs the game I developed in RGBDS, a popular assembler and linker package for GameBoy ASM. Though I would like to add support for more ROMs to the web version, I am currently looking into doing less web stuff and more games programming, so it will have to go on the back burner for now.

Emulator Demo

Controls:

un-pause = p

movement = wasd

reset = r