gba-core

Emulation core for the Game Boy Advance.

This system contains the following components:

  • ARM7TDMI CPU clocked at ~16.77 MHz
    • Implements the 32-bit ARMv4T instruction set (ARMv4 + Thumb)
  • PPU (picture processing unit)
    • 240x160 LCD display
    • RGB555 color with up to 512 colors onscreen simultaneously (256 BG + 256 sprite)
    • 4 background layers, 2 of which support rotation/scaling
    • Up to 128 sprites per frame, with sprites ranging in size from 8x8 pixels to 64x64
    • Supports sprite rotation/scaling
    • Bitmap graphics modes that display pixels directly from a frame buffer in VRAM
    • Supports a mosaic filter for both backgrounds and sprites
    • Supports alpha blending between different layers
    • 96 KB of VRAM for storing tile data, tile maps, and bitmap mode frame buffers
    • 1 KB of palette RAM
    • 1 KB of OAM (object attribute memory) for storing the sprite table
  • APU (audio processing unit)
    • 1-bit PWM output at ~16.77 MHz
    • PWM sample resolution ranging from 9-bit samples at 32768 Hz to 6-bit samples at 262144 Hz (most games use 8-bit at 65536 Hz)
    • Two 8-bit PCM channels (Direct Sound)
    • Four PSG channels, which are slightly modified versions of the four Game Boy Color APU channels
      • Two pulse generators, one with frequency sweep support
      • Custom wave channel that plays 4-bit PCM samples in a loop of either 32 samples or 64 samples
      • Pseudorandom noise generator
  • 288 KB of working RAM, split into 32 KB of fast RAM (IWRAM) and 256 KB of slow RAM (EWRAM)
  • 4 hardware timers driven by the CPU clock, with configurable prescalers and intervals
    • 2 of these timers can be used to control the sample rate of the APU's Direct Sound channels
  • 4 DMA channels
  • Game Pak prefetch hardware to speed up code executing out of cartridge ROM
  • Support for cartridges with up to 32 MB of ROM
  • 16 KB builtin BIOS ROM