Gameboy Advance

Memory Domains

  • IWRAM: Internal (on the same chip as the CPU) work ram. 32kb large on a 32 bit bus. Generally holds the most critical data (ARM code, time sensitive data, etc).

  • EWRAM: External (not on the same chip as the cpu) work ram. 256kb large on a 16 bit bus. Slower than the IWRAM. Holds anything that'd go in WRAM that isn't stored in the IWRAM. Can hold code, but since it's on a 16 bit bus it has to be ARM THUMB code.

  • BIOS: The BIOS, don't touch this.

  • PALRAM: Palette ram. 1KB Want to swap the colors? Have fun.

  • VRAM: Video ram. 96KB. Holds the actual data drawn to the screen.

  • OAM: Object Attribute Memory. 1KB. Contains the actual "object" of things such as sprites (the mode, the size, what palette to use, etc).

  • ROM: The ROM file.

  • SRAM: Saveram. Want to corrupt a save file? Corrupt this.

  • Combined WRAM: IWRAM and EXRAM combined into a single memory domain that contains both.

  • System Bus: Theoretically allows access to everything that's mapped as it facillitates the communication between pieces of hardware. In execution, not everything mapped will be visible through this domain. It's a matter of if it was properly exposed or not. Corrupt something here and it'll be reflected in the domains derived from it.

    • 0x00000000 - 0x00003FFF- 16 KB System ROM (executable, but not readable)

    • 0x02000000 - 0x02030000- 256 KB EWRAM (general purpose RAM external to the CPU)

    • 0x03000000 - 0x03007FFF- 32 KB IWRAM (general purpose RAM internal to the CPU)

    • 0x04000000 - 0x040003FF- I/O Registers

    • 0x05000000 - 0x050003FF- 1 KB Colour Palette RAM

    • 0x06000000 - 0x06017FFF- 96 KB VRAM (Video RAM)

    • 0x07000000 - 0x070003FF- 1 KB OAM RAM

    • 0x08000000 - 0x????????- Game Pak ROM (0 to 32 MB)

    • 0x0E000000 - 0x????????- Game Pak RAM