Skip to content

Memory Map

Paper Mario uses the Nintendo 64’s full 4 MB of RAM, mapped from 80000000 through 80400000. The addresses below are for the US 1.0 ROM. End addresses are exclusive, and small gaps between known regions are omitted. Star Rod requires the expansion pack because it uses the additional 4 MB from 80400000 to 80800000. The tables show the unaltered vanilla locations; Star Rod may relocate the heap regions denoted by *.

Address RangeContents
80025C00–801512B0Engine code, data, and BSS.
80164000–80196C60Two display contexts used to build graphics tasks.
80197000–801AA000Effect buffers and battle-entity workspace.
801AA000–80200000 *Audio heap.
80200000–802C3000Mode-dependent code, assets, and temporary memory.
802C3000–802F4A60Event script interpreter, sprite, entity, message, and font code and data.
802FB800–8034F800 *General heap. It is preserved during an ordinary battle transition and rebuilt when a map is loaded.
8034F800–8038F800 *Sprite heap.
8038F800–80400000Three framebuffer-sized regions.
803DA800–80400000 *Battle heap, overlapping the third framebuffer.
80400000–80800000Expansion pack memory used for Star Rod patches and relocated heaps.

The region from 80200000 through 802C3000 is reused according to the current game mode. Rows from different contexts therefore overlap intentionally. An overlay may occupy less than the full range reserved for it.

ContextAddress RangeContents
World, battle, and menus80200000–80210000Background image or mode-specific scratch space.
World80210000–80240000Map shape and model data.
World80240000–80268000Map data overlay.
World80268000–80280000 *Collision heap.
World80280000–8028E000World script API library.
World8028E000–802AE000Map textures.
World802B6000–802C3000Smaller world overlays loaded as needed.
Battle80210000–80218000Stage shape data.
Battle80218000–80238000Battle-section overlay data.
Battle80238000–8023E000Partner battle scripts.
Battle8023E000–8029DA30Battle engine.
Battle802A1000–802ACC60Battle menu and other load-on-demand battle code.
Battle802AE000–802B6000Stage textures.
Pause and MainMenu8023E000–80242BA0Menu graphics shared by the pause and file-select menus.
Pause80242BA0–802700C0Pause menu.
MainMenu80242BA0–8024C080File-select menu.

Pointers into mode-dependent memory are only meaningful while the corresponding code or data is loaded. This is why a function or structure from one Star Rod context cannot be used from another, even when both have valid names in the database.