SM64 Memory Map
Displaying 25 out of 85 addresses.
View: moderated | waiting (9)
RAM Address | Length | Type | Context | Description | Details |
---|---|---|---|---|---|
$80064F80 | Unknown | Misc. | Global | Segment 0x02 constant location - Contains image data for the hud symbols and other textures. The segment is allocated by a hardcoded routine on startup. | |
$8006C680 | Unknown | Misc. | Global | Table with segment-offset pointers to the HUD symbol textures. Since some of the HUD symbols were removed in the USA release, some of the slots are left empty: 8006C6CC 00000000 - J 8006C6E8 00000000 - Q 8006C6FC 00000000 - V 8006C704 00000000 - X 8006C70C 00000000 - Z You can restore the old symbols by patching in the images from the Japanese ROM, and modifying the pointers in this table. |
|
$8007E200 | Unknown | Misc. | Global | Segment 0x15 | |
$8007EC20 | Unknown | Misc. | Global | Segment 0x04 - Contains the data for Mario's model | |
$800EB180 | Unknown | Misc. | Global | Segment 0x13 - Behavior script segment | |
$800EC5F8 | 52 bytes | Behaviour | Global | Behavior script - Purple switch | |
$800ED3FC | 32 bytes | Behaviour | Global | Behavior script - Spinning exclamation point | |
$800EDBC8 | 12 bytes | Behaviour | Global | Behavior script - Misc level architecture (eg the castle tower) | |
$800EDC24 | 44 bytes | Behaviour | Global | Tree's behavior script | |
$800EE040 | 56 bytes | Behaviour | Global | Mario's behavior script 00000000 10050000 11010100 11030001 23000000 002500A0 08000000 0C000000 802CB1C0 0C000000 8029CA58 0C000000 802CB264 09000000 |
|
$800EE2F4 | 56 bytes | Behaviour | Global | Bob-omb's behavior script | |
$800F0860 | Unknown | Geometry Layout | Global | Mario's decompressed geo-layout script | |
$800F8C4C | Unknown | Geometry Layout | Global | Decompressed geo-layout script for signs | |
$8018D47C | 554 bytes | Geometry Layout | Global | Bob-omb's decompressed geo-layout | |
$80195C54 | Unknown | Geometry Layout | Overworld | Decompressed geo-layout script for the castle tower | |
$801C1000 | Unknown | Misc. | Global | Segment 0x09 constant location. All level mesh textures are loaded here by the 0x1A level script command. | |
$80207700 | 512 bytes | Misc. | Global | Start of EEPROM and goes up to 0x80207900 | |
$80277EE0 | Unknown | Routine | Global | Function that assigns ram segments Arguments: A0 = segment number, A1 = ram address Returns: V0 = 0x80-prefix-less ram address Essentially just: *(uint32*)(0x8033B400 + segment_number << 2) = ram_address & 0x00FFFFFF; |
|
$80277F50 | Unknown | Routine | Global | Segment-offset to true ram address converter Arguments: A0 = segmented address Returns: V0 = true ram address |
|
$80278120 | 118 bytes | Routine | Global | Function that seems to be a memory allocator. Basically finds a desired amount of free space in the heap and returns a pointer to the area. Arguments: A0 = block size Returns: V0 = ram address |
|
$80278504 | 264 bytes | Routine | Global | DmaCopy(u32 dst, u32 bottom, u32 top); dst being the RAM offset! bottom is the beginning ROM offset to copy the bytes and top is the end. Takes three arguments. Example: ADDIU SP, SP, $FFE8 ; -24 to stack. Aka, make space. SW RA, $0014 (SP) ; Push return address to stack. LUI A0, $8034 ; Upper half address. ORI A0, A0, $269D ; Lower half address. A0 = $8034269D LUI A1, $001C ; ROM offset start (bottom) ORI A1, $0D60 ; Lower part, A1 = $001C0D60 LUI A2, $0020 ; ROM offset end (top) JAL $80278504 ; Jump to subroutine DmaCopy ORI A2, $00D1 ; Is executed before JAL. Lower half. LW RA, $0014 (SP) ; Load back our lost return address. JR RA ; Jump to return address. ADDIU SP, SP, $0018 ; Restores stack. (+24) DmaCopy basically copies data from ROM to RAM. dst is the destination (as RAM offset), bottom is the start (as ROM offset) which is copied to RAM and top is the end. So, in our above example bytes from $001C0D60 (ROM) to $002000D1 (ROM) into $8034269D (RAM). |
|
$80278610 | 124 bytes | Routine | Global | Function that loads data from rom into the heap and returns a ram pointer to the data. Arguments: A0 = rom start address, A1 = rom end address, A2 = allocation size (seems mostly unused?) Returns: V0 = pointer to data after being loaded into ram |
|
$802787D8 | 216 bytes | Routine | Global | Function that loads MIO0 files into ram segments. Arguments: A0 = ram segment number, A1 = rom address start, A2 = rom address end |
|
$802792C0 | 84 bytes | Routine | Global | EEPROM Save file checksum calculation routine Arguments: A0 = address of buffer, A1 = buffer size, A2 = ? 00004441 Returns: 2 byte checksum to V0 |
|
$8027F4E0 | 164 bytes | Routine | Global | MIO0 decoder Arguments: A0 = pointer to mio0 file (in RAM), A1 = destination address for the decompressed file |
|