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
80025C00801512B0Engine code, data, and BSS.
8016400080196C60Two display contexts used to build graphics tasks.
80197000801AA000Effect buffers and battle-entity workspace.
801AA00080200000 *Audio heap.
80200000802C3000Mode-dependent code, assets, and temporary memory.
802C3000802F4A60Event script interpreter, sprite, entity, message, and font code and data.
802FB8008034F800 *General heap. It is preserved during an ordinary battle transition and rebuilt when a map is loaded.
8034F8008038F800 *Sprite heap.
8038F80080400000Three framebuffer-sized regions.
803DA80080400000 *Battle heap, overlapping the third framebuffer.
8040000080800000Expansion 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 menus8020000080210000Background image or mode-specific scratch space.
World8021000080240000Map shape and model data.
World8024000080268000Map data overlay.
World8026800080280000 *Collision heap.
World802800008028E000World script API library.
World8028E000802AE000Map textures.
World802B6000802C3000Smaller world overlays loaded as needed.
Battle8021000080218000Stage shape data.
Battle8021800080238000Battle-section overlay data.
Battle802380008023E000Partner battle scripts.
Battle8023E0008029DA30Battle engine.
Battle802A1000802ACC60Battle menu and other load-on-demand battle code.
Battle802AE000802B6000Stage textures.
Pause and MainMenu8023E00080242BA0Menu graphics shared by the pause and file-select menus.
Pause80242BA0802700C0Pause menu.
MainMenu80242BA08024C080File-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.