This project consists of two parts:
- An open source Game Boy® compatible console Verilog RTL implementation (the VerilogBoy Core)
- An open source FPGA-based handheld game console hardware (the VerilogBoy Handheld, or vbh for short.)
Both are documented in this project.
Original Goals for the CMPEN 275 course project
This project aims to recreate the whole Game Boy gaming system on an FPGA development board, with the ability to play commercial game like The Legend of Zelda with no major glitches.
To be specific, it should be able to run the unmodified Game Boy machine code, produce gray-scale graphics and output to an external monitor, produce the sound and output to the 3.5mm jack on the FPGA board, and accept user input to control the game. Other functionalities like serial communication and IR communication are currently not part of this project.
Besides getting it running on a development board, I am designing a dedicated handheld console for this. The console is simply called, the VerilogBoy Handheld. GameBoy Color support and serial communication capbility is also in the long term plan.
main system architecture is designed as follows (outdated):
There are three major parts needs to be implemented: the Game Boy CPU (8-bit CISC Processor, Intel 8080 like), the PPU (or GPU), the Sound unit. Several interfacing modules are needed to support the IO capability provided by the FPGA development board. Game ROM would be stored in on-board NOR flash, and RAM would be implemented with on-chip Block RAM.
Specification of the Handheld
- XC6SLX16-FTG256 FPGA
- 8MB ISSI IS66WVE4M16 PSRAM
- Wolfson WM8960G Audio Codec
- XPowers AXP209 Integrated Power Management Unit
Able to run Is That a Demo in Your Pocket with sound. See demo video! (Please turn down the volume, I found the signal from the FPGA is too hot for my recording device).
Pokemon Yellow and The Legend of Zelda: Link's Awakening DX are also tested to work with DualShock 2 support ( I should have picked a Nintendo(R) controller instead of Sony(R) one... But that's what I have. ).
After finishing the presentation, I started refactoring the code, starting from the CPU. I also started working on the handheld as described before. They are all still working in progress as of the time I am writing this. You can follow the progress on this page and on the GitHub commit history.