====== Mario Kart 64 Memory Map ====== ===== Functions ===== ^ RAM Addr. ^ Description ^ | 800067C4 | Set places (1st, 2nd, etc) | | 800115F4 | Process path data on course load | | 8002F35C | Controls cpu movement along track while player is moving | | 800400D0 | MIO0 decoder | | 800404C0 | MIO0 encoder | | 800405D0 | TKMK00 decoder | | 80093134 | Print text | | 8009338C | Print text | | 80093788 | Print text | | 80099124 | Segmented to virtual address converter | | 80099154 | Segmented to virtual address converter (duplicate) | | 800C4148 | Play sound | | 800D0050 | s32 osEepromLongWrite(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes); | | 800D0190 | s32 osEepromLongRead(OSMesgQueue *mq, u8 address, u8 *buffer, int nbytes) | | 8029D584 | Place x with segment 06 offset | | 8029D60C | Place bushes with segment 06 offset (bowser's castle) | | 8029D830 | Place all item boxes using segment 06 offset | | 802A7B94 | Segment base setter | | 802A85CC | MIO0 '0F' list related | | 802A9AF4 | Display list unpacker (A0 = segmented address of packed dlist, A1 = length) | | 802AA918 | Course data main loader | ===== Data ===== ^ ROM ^ RAM Addr. ^ Description ^ | - | 800DC53C | Game mode selection | | - | 800DC598 | Course timer (float) | | - | 800DC5A0 | Course selection | | 0E3AD0 | 800E2ED0 | Kart unique settings table, 40 bytes per entry | | 0F0468 | 800EF868 | ASCII text bank | | 0F4BB0 | ? | "RSP Gfx ucode F3DEX 0.95 Yoshitaka Yasumoto Nintendo." | | 0F53B0 | ? | "RSP Gfx ucode F3DLX 0.95 Yoshitaka Yasumoto Nintendo." | | - | 80150258 | RAM Segments table | | - | 80165C18 | Course RAM objects array? (bowser whomps, luigi hot air balloon) | | - | 8018EDE4 | Character selections | | - | 8018EDF0 | Player count selection | | 122390 | 802B8D80 | Course data reference table | | 1232A4 | 802B9C94 | Jump table for segment 7 display list unpacking | | - | 802BA274 | Index for packed dlist commands | | 12A1F0 | ? | ASCII text bank (credits) | | 132B50 | - | First MIO0 block | | 145470 | - | Kart texture and palette bank (MIO0 8CI textures, raw RGBA5551 palettes) | | 641F70 | - | Course texture bank | | 712DC0 | - | An MIO0 bank (kart exhaust textures?) | | 729A30 | - | MIO0 Large character face textures | | 7FA3C0 | - | TKMK00 bank | | 820FC0 | - | Last TKMK block in ROM | | 821D10 | - | Two MIO0 blocks | | 8284D0 | - | Course assets MIO0 bank | | 88CD70 | - | Course texture/Seg06 dlist reference bank | | 88FA10 | - | Course MIO0 vertex data & special dlist bank | | 963EF0 | - | Last MIO0 block in ROM | | BC5F60 | ? | M64 music data | | BE9160 | - | End of ROM, 93856 padding bytes | ===== RAM Segments Table ===== The RAM Segments table contains the base virtual addresses for each segment and is located at 80150258. ^ Seg ^ Description ^ | 00 | General Purpose; contains the game code addressed as 0x80000000 ex 0x8029E158 | | 01 | gGfxPool | | 02 | Variety of fonts, UI textures, animations, vertices, and displaylists | | 03 | Common and Course Specific Textures loaded by func_8029E158. Sets data to segment F for extraction. | | 04 | Course geography vertex data. | | 05 | Course textures | | 06 | Startup logo & Course data consisting of displaylists, textures, models, actor spawn locations, and path data. | | 07 | Unpacked displaylists which reference course mesh data. | | 08 | Unused. | | 09 | Course offsets for texture lists and a jump table consisting of segment 06 display list. | | 0A | Unused. | | 0B | Trophy and podium data used during the awards ceremony. | | 0C | Unused. | | 0D | Common course data; textures, vertices, displaylists, etc. | | 0E | Unused. | | 0F | Temporary buffer for course mesh MIO0 and packed dlists / Course collisions table (44 byte entries) | ===== References ===== * http://origami64.net/showthread.php?tid=47 * https://github.com/n64decomp/mk64/wiki/Segments