Orbiboy is a project about developing a Gameboy emulator that runs on modern web browsers. The emulator is written entirely in C++, and subsequently compiled into WebAssembly via Emscripten to be deployed on our website. This project is done together with tanyyhh as part of a school project under National University of Singapore called Orbital.
Check out our video demo.
Emulator.
- Choose a ROM file by pressing "Select ROM".
- Press "Load".
- Enjoy!
On the emulator side, we have emulated most of the components of the Gameboy architecture as shown below:
- CPU
- Memory Management Unit (including Memory Bank Controllers 1 & 2)
- Graphical Processing Unit
- Timer System
- Interrupt System
- Joypad Controls
Some notable exclusions are the less common Memory Bank Controllers (we have only implemented MBC 1 and 2), the serial port, and sound. The emulator is still buggy, based on testing with Blargg’s test ROMs, a suite of ROMs designed specifically to test Gameboy emulators. We managed to pass 8/11 of the CPU instructions test, but failed the rest of the tests. Nevertheless, our emulator still manages to run simple games such as Tetris and Super Mario Land.
List of games that run on our emulator:
- Tetris
- Super Mario Land (small bugs)
- Mario & Yoshi
- Klax
For the web app, we have included the following features:
- Uploading of Gameboy ROM files from the user’s local file system
- Saving & loading of the current game state: A snapshot of the current game can be saved, downloaded, and - re-loaded onto the webapp by the user
- Pausing of the game
A few people to thank in the process of making of this emulator:
- CodeSlinger for the awesome tutorial
- Pandocs for many things
- GameLad for comparing instructions and graphics accuracy
- Frameboy for the web interface
- Blargg's test ROMs for debugging
- Awesome Game Boy Developemnt for the curated list of resources provided