Adam Lenart
This was a personal interest project strictly for educational purposes and as a challenge to apply computer hardware/architecture concepts studied in the CS 251: Computer Organization and Design course during the winter of 2003. This project would not have been possible without the efforts of the individuals who layed the ground work for GameBoy emulation. See the Pan Docs for more information.

Playable/downloadable versions of the emulator will not be made available due to the patent granted to Nintendo for GB/GBC/GBA emulation.
  GameBoy Emulator  
  • GameBoy emulator written in Java (J2SE 1.4) for usability as applet or standalone application:
    • Applet works in Internet Explorer and Mozilla (Win32 and Linux).
  • Emulates all GameBoy Z80 (Zilog 80) CPU instructions/op-codes:
    • Virtually maintains SRAM, VRAM, and page RAM memory banks.
    • Tracks all 8/16-bit registers (accumulator, flag, hi/lo, program counter, stack pointer, auxilary).
    • Handles all interrupts including vertical blank, LCD control, timer overflow, and joypad input.
    • Uses timed delays to simulate real runtime of op codes.
    • Handles DMA requests allowing for GameBoy Color support.
    • Strict use of bit shifting and bitwise operations in all emulated instructions.
  • Video system replicates GameBoy LCD screen (160x144):
    • Renders single lines at a time in back buffer and flushes to screen on vertical blank.
    • Processes background, window (with scrolling), and sprite/character layers.
    • Draws at most 40 sprites on screen, 10 per line, in proper overlapping order (i.e. z-order).
    • Uses fast bit shifting to translate GameBoy color codes to standard RGB pixel format.
    • Fully supports GameBoy Color palettes and partially supports Super GameBoy palettes.
  • Sound system uses Java sound library (javax.sound.sampled.*):
    • Emulates all 4 audio channels including 2x square wave, voluntary wave, and the noise generator.
    • Sound is sampled at 44100 Hz in full stereo, sounding cleaner than original hardware.
  • Supports all Memory Bank Controller (MBC) types:
    • Provides memory read/write capabilities dependent on MBC type defined by ROM.
    • Enables flawless emulation of most game ROMs.
  • Ability to save/load battery backup RAMs (not available in applet).