$3000 | 2 bytes | Misc. | Fixed at 0xFFFF. Used to identify code as running on the SA-1 chip, by reading via $0000 (from which the SNES returns 0x0000 instead). |
$3008 | 3 bytes | Pointer | Used as a 24-bit pointer by the SNES to give the SA-1 chip a routine to execute. Controlled by $300A. |
$300A | 1 bytes | Flag | Flag to tell the SNES to run the pointer written in $3008. If negative, the SA-1 will jump to the routine specified there (assuming it is not already busy with other things). Set to 0x00 when the SA-1 finishes execution. |
$300C | 3 bytes | Pointer | Used as a 24-bit pointer by the SA-1 chip to give the SNES a routine to execute. Controlled by $300E. |
$300F | 1 bytes | Flag | Flag to tell the SNES to run the pointer written in $300C. If negative, the SNES will jump to the routine specified there (assuming it is not already busy with other things). Set to 0x00 when the SNES finishes execution. |
$3010 | 1 bytes | Flag | Flag to wait for NMI. Cleared by the SA-1 chip at the end of the frame, then set to 1 by the SNES after it finishes NMI. |
$3012 | 3 bytes | Pointer | 24-bit pointer for where to next write decompressed data in $7E2000. |
$3015 | 2 bytes | Misc. | Starting index to the circular VRAM upload buffer at $7E0100. |
$3017 | 2 bytes | Misc. | Ending index to the circular VRAM upload buffer at $7E0100. |
$3019 | 2 bytes | Misc. | Current total NMI execution load. |
$301B | 2 bytes | Misc. | Maximum NMI execution load; seems to always be set to 0x11C8. |
$301D | 2 bytes | Misc. | Current NMI execution load for DMAs queued to $0900. After an injected lag frame, $3019 should be set to this value, as the $0900 buffer will not be emptied until a true end of frame. |
$301F | 1 bytes | Misc. | Current length of the VRAM DMA queue at $0900. |
$304F | 2 bytes | Hardware mirror | Layer 1 X position. Mirror of SNES register $210D. |
$3051 | 2 bytes | Hardware mirror | Layer 2 X position. Mirror of SNES register $210F. |
$3053 | 2 bytes | Hardware mirror | Layer 3 X position. Mirror of SNES register $2111. |
$3055 | 2 bytes | Hardware mirror | Layer 1 Y position. Mirror of SNES register $210E. |
$3057 | 2 bytes | Hardware mirror | Layer 2 Y position. Mirror of SNES register $2110. |
$3059 | 2 bytes | Hardware mirror | Layer 3 Y position. Mirror of SNES register $2112. |
$305F | 1 bytes | Hardware mirror | Handles screen brightness and force blank. Format: f---bbbb. |
$3060 | 1 bytes | Hardware mirror | Sprite tile size and graphical address in VRAM. Format: sssnnbbb |
$3061 | 1 bytes | Hardware mirror | Background mode. Format: 4321pmmm. |
$3062 | 1 bytes | Hardware mirror | Current mosaic pixel size. Mirror of SNES register $2106. |
$3063 | 1 bytes | Hardware mirror | Layer 1 tilemap VRAM address and size. Format: aaaaaayx |
$3064 | 1 bytes | Hardware mirror | Layer 2 tilemap VRAM address and size. Format: aaaaaayx |
$3065 | 1 bytes | Hardware mirror | Layer 3 tilemap VRAM address and size. Format: aaaaaayx |
$3066 | 1 bytes | Hardware mirror | Layer 4 tilemap VRAM address and size. Format: aaaaaayx |
$3067 | 1 bytes | Hardware mirror | Base VRAM address for Layer 1/2 GFX files. Format: bbbbaaaa |
$3068 | 1 bytes | Hardware mirror | Base VRAM address for Layer 3/4 GFX files. Format: ddddcccc |
$3069 | 1 bytes | Hardware mirror | Layer 1/2 window mask settings. Format: bbbbaaaa |
$306A | 1 bytes | Hardware mirror | Layer 3/4 window mask settings. Format: ddddcccc |
$306B | 1 bytes | Hardware mirror | Object and color window mask settings. Format: ffffeeee |
$306C | 1 bytes | Hardware mirror | Window 1 left position. Mirror of SNES register $2126. |
$306D | 1 bytes | Hardware mirror | Window 1 right position. Mirror of SNES register $2127. |
$306E | 1 bytes | Hardware mirror | Window 2 left position. Mirror of SNES register $2128. |
$306F | 1 bytes | Hardware mirror | Window 2 right position. Mirror of SNES register $2129. |
$3070 | 1 bytes | Hardware mirror | Window mask logic for Layer 1/2/3/4. Format: 44332211 |
$3071 | 1 bytes | Hardware mirror | Window mask logic for sprites/color. Format: ----ccoo |
$3072 | 1 bytes | Hardware mirror | Main screen designation. Format: ---o4321 |
$3073 | 1 bytes | Hardware mirror | Sub screen designation. Format: ---o4321 |
$3074 | 1 bytes | Hardware mirror | Window mask designation for the main screen. Format: ---o4321 |
$3075 | 1 bytes | Hardware mirror | Window mask designation for the sub screen. Format: ---o4321 |
$3076 | 1 bytes | Hardware mirror | Color addition settings. Format: ccmm--sd. |
$3077 | 1 bytes | Hardware mirror | CGADSUB settings. Format: shbo4321. |
$3078 | 3 bytes | Hardware mirror | Background color, as three mirrors of SNES register $2132. |
$307B | 1 bytes | Hardware mirror | Mode 7 settings. Format: rc----yx |
$3083 | 2 bytes | Hardware mirror | Mode 7 matrix parameter A. Mirror of SNES register $211B. |
$3085 | 2 bytes | Hardware mirror | Mode 7 matrix parameter B. Mirror of SNES register $211C. |
$3087 | 2 bytes | Hardware mirror | Mode 7 matrix parameter C. Mirror of SNES register $211D. |
$3089 | 2 bytes | Hardware mirror | Mode 7 matrix parameter D. Mirror of SNES register $211E. |
$308B | 2 bytes | Hardware mirror | Mode 7 center X position. Mirror of SNES register $211F. |
$308D | 2 bytes | Hardware mirror | Mode 7 center Y position. Mirror of SNES register $2120. |
$3091 | 1 bytes | Hardware mirror | Interrupt enable flags. Format: n-yx---a |
$3092 | 1 bytes | Hardware mirror | HDMA channel enable. Masked out by $3093, then stored to SNES register $420C every frame. |
$3093 | 1 bytes | Misc. | HDMA channel mask. Any bits set to 0 here will have the corresponding HDMA channel completely disabled. |
$309B | 3 bytes | Pointer | 24-bit pointer to the current IRQ routine to run. Known values are: |
$309F | 1 bytes | Misc. | Some sort of flag to deal with the timing of SA-1 and SNES's NMI execution (for handling lag?). SA-1 sets this value to 1, while the SNES clears it. |
$30A1 | 1 bytes | Hardware mirror | Mirror of $305F, next frame (which is in turn a hardware mirror of $2100, the screen brightness). This address seems to get copied there each frame. |
$30A2 | 1 bytes | RAM mirror | Mirror of $305F, current frame (which is in turn a hardware mirror of $2100, the screen brightness). |
$30A3 | 1 bytes | RAM mirror | Mirror of $3072, current frame (which is in turn a hardware mirror of $212C, the main screen designation). |
$30A4 | 544 bytes | I/O | OAM table; handles all sprite tiles on-screen. Each tile gets 4 bytes: xxxxxxxx yyyyyyyy tttttttt yxppccct |
$32C4 | 2 bytes | I/O | Controller 1 input, held. Format (16-bit): byetUDLR axlr---- |
$32C6 | 2 bytes | I/O | Controller 2 input, held. Format (16-bit): byetUDLR axlr---- |
$32CC | 2 bytes | I/O | Mirror of $32C4 (controller 1 input), on frames when $7E0036 is reset. On any other frame, this address is 0x0000. |
$32CE | 2 bytes | I/O | Mirror of $32C6 (controller 2 input), on frames when $7E0038 is reset. On any other frame, this address is 0x0000. |
$32D4 | 2 bytes | I/O | Controller 1 input, first frame only. Format (16-bit): byetUDLR axlr---- |
$32D6 | 2 bytes | I/O | Controller 2 input, first frame only. Format (16-bit): byetUDLR axlr---- |
$32DC | 1 bytes | Palette | Value to indicate which of the alternative palettes to use for the FG/BG/sprites. If negative (or 7), then the standard palette at $7E0500 is used; else, it uses the corresponding alternative palettes. Generally, the alternative palettes are used for darker versions of the sprite palettes, in order to perform pseudo-color math on them. As such, you can effectively consider this address to be the brightness of the sprites on a scale of 0 (darkest) to 7 (brightest). |
$32DE | 2 bytes | Misc. | If set to a positive value, used as an index to $0083E6, whose values are used to form an HDMA source address for channel 7. Only values 0 and 1 seem to be valid. Needs more research. |
$32E2 | 2 bytes | Misc. | Something related to HDMA channel 7; if non-zero, this value gets stored directly as its source address, and the HDMA channel is enabled. |
$32EA | 2 bytes | Misc. | Currently active subgame. |
$32EE | 2 bytes | Misc. | Planet ID for Milky Way Wishes. |
$33CE | 1 bytes | Misc. | Internal timer A underflow flag. When an underflow occurs, gets set to 0xFF. |
$33CF | 1 bytes | Misc. | Internal timer B underflow flag. When an underflow occurs, gets set to 0xFF. |
$33D0 | 1 bytes | Misc. | Internal timer C underflow flag. When an underflow occurs, gets set to 0xFF. |
$33D1 | 2 bytes | Timer | Internal timer A; decrements once per frame, looping from 0000 to FFFF. When it reaches 0000, 0xFF is stored to $33CE. |
$33D3 | 2 bytes | Timer | Internal timer B; decrements once per frame, looping from 0000 to FFFF. When it reaches 0000, 0xFF is stored to $33CF. |
$33D5 | 2 bytes | Timer | Internal timer C; decrements once per frame, looping from 0000 to FFFF. When it reaches 0000, 0xFF is stored to $33D0. |
$3600 | 32 bytes | Misc. | DEBUG: Temporary storage used for the "wrapped" palette when cycling palettes in the VRAM viewer. |
$3620 | 2 bytes | Misc. | DEBUG: Current page number for the VRAM viewer. |
$3628 | 2 bytes | Misc. | DEBUG: Current palette number for the VRAM viewer. |
$3731 | 8 bytes | Misc. | Used as temporary storage for data to be entered into the circular DMA buffer at $7E0100 or DMA queue at $7E0900. |
$3743 | 2 bytes | Misc. | Current RNG seed for the routine at $008AC1. |
$3745 | 10 bytes | Scratch | Scratch RAM. |
$3780 | 128 bytes | Stack | SA-1 program stack. Allocated space may be larger or smaller than currently specified; ends at $37FF. |
$6028 | 3 bytes | Pointer | Scratch RAM intended for 24-bit pointers. |
$6240 | 2 bytes | Misc. | Partner ID; 0xFFFF if no partner is active. Seems to be only used as a flag? |
$6EC4 | 1 bytes | Misc. | Currently selected song ID in the sound test. |
$6F3E | 1 bytes | Misc. | Currently selected sound effect ID in the sound test. |
$7384 | 1 bytes | Misc. | Kirby's powerup image, current frame. Valid images are 01-20; all other values will turn Kirby's image white instead. See this for a list of values. |
$7385 | 1 bytes | Misc. | Kirby's powerup image, previous frame. |
$7386 | 1 bytes | Misc. | Partner status bar icon, current frame. Valid values are 01-15; all other values will turn the icon white. See this for a list of values. |
$7387 | 1 bytes | Misc. | Partner status bar icon, previous frame. Used to determine whether to update the image. |
$7388 | 1 bytes | Misc. | Kirby's powerup image override, current frame. If non-zero, overrides the player's powerup image with a special icon (for e.g. taking damage). Valid values are 01-0D; all others will just result in a white box. See this for a list of values. |
$7389 | 1 bytes | Misc. | Kirby's powerup image override, previous frame. Used to determine whether to update the image. |
$738A | 2 bytes | Timer | Timer for how long to maintain the image override in $7388; when it hits 0, it will clear that address. If the timer is never set, however, $7388 will not be automatically cleared. |
$738C | 2 bytes | Misc. | Flag for the partner being kidnapped by T.A.C, which in turn causes the partner image at $7386 to be set to 0x15. |
$7390 | 1 bytes | Misc. | Game mode. Only actually used when explicitly switching game modes; writing to this value normally has no effect. The following values are valid: |
$749F | 2 bytes | Player | Kirby's powerup. Only values 00-18 are valid. |
$74A1 | 2 bytes | Player | Partner ID. Only values 01-13 are valid. |
$7A23 | 1 bytes | Misc. | Character image to use for the textboxes in Revenge of Meta-Knight. A value of 0xFF is also used to indicate no textbox is active. |
$7A24 | 1 bytes | Misc. | Mirror of $7A23, to detect when the character image needs to be updated. |
$7A27 | 1 bytes | Hardware mirror | Sub screen designation for the status bar. Format: ---o4321 |
$7A28 | 1 bytes | Hardware mirror | Main screen designation for the status bar. Format: ---o4321 |
$7A2D | 3 bytes | Misc. | Contains the timer used by Gourmet Race and Revenge of Meta-Knight. $7A2D counts milliseconds, $7A2E counts seconds, and $7A2F counts minutes. |
$7F04 | 79 bytes | Save Data | Save file 1 data. |
$7F53 | 79 bytes | Save Data | Save file 2 data. |
$7FA2 | 79 bytes | Save Data | Save file 3 data. |
$7E:0000 | 2 bytes | Misc. | Fixed at 0x0000. Used to identify code as running on the SNES, by reading via $0000 (from which the SA-1 returns 0xFFFF instead). |
$7E:000E | 24 bytes | Subroutine (JSL) | SA-1 command wait loop, copied from $00818C. When jumped to, waits until both a message is received from the chip (via $2300) and a negative value is stored to $300F, at which point it jumps to the routine pointed to by $300C (24-bit). This routine should be RTL-ended; after completing execution, it will return back to the start of this routine. |
$7E:0026 | 14 bytes | Subroutine (JSL) | SA-1 response wait loop, copied from $0081A3. When jumped to, waits until both a message is received from the chip (via $2300) and a positive 16-bit value is stored to $300A (note: $300A is not automatically initialized), at which point it simply returns back to the caller. |
$7E:0036 | 2 bytes | Timer | Timer tied to new inputs on controller 1. If the input this frame differs from the previous, this address gets set to 0x14. Else, it decrements by 1 per frame; if it reaches 0, it gets reset to 0x6. |
$7E:0038 | 2 bytes | Timer | Timer tied to new inputs on controller 2. If the input this frame differs from the previous, this address gets set to 0x14. Else, it decrements by 1 per frame; if it reaches 0, it gets reset to 0x6. |
$7E:003E | 12 bytes | Table | Table used as part of an indirect HDMA to the screen brightness register ($2100), starting at scanline 0x9B. Specifically, it's used for the "fade to black" effect at the bottom of the level. |
$7E:0063 | 2 bytes | Misc. | VWF text character width, in pixels. Setting to FFFF will have the characters use a dynamic width rather than monospace. |
$7E:0065 | 1 bytes | Misc. | VWF text colors for the current tile. Format: ----bbff |
$7E:006B | 1 bytes | Misc. | Flag for the VWF text to show the blinking cursor in the bottom right of the window. |
$7E:006D | 1 bytes | Misc. | Flag for the VWF text to include the secondary color of each character (i.e. the "shadow"). 00 = no secondary color, 01 = include secondary color. |
$7E:0083 | 2 bytes | Pointer | Current index to the VWF text pointer stack at $0085. |
$7E:0085 | 12 bytes | Table | Subtext pointer stack, with the current position in $0083. |
$7E:0091 | 3 bytes | Pointer | 24-bit pointer to VWF text data. Although this is a 24-bit pointer, the bank byte is always 0xCB (0x16). |
$7E:00AA | 1 bytes | Music | Currently loaded song. Valid values are 01-42. |
$7E:00AB | 1 bytes | Music | Currently loaded sample bank for the music. Valid values are 01-09. |
$7E:00B3 | 2 bytes | Misc. | Which status bar menu is currently active. Typically, values are: |
$7E:0100 | 1024 bytes | Misc. | Circular VRAM upload buffer, emptied every frame (except during force-blank). The index to the start of the buffer is in $3015, while the end is in $3017. If the first two bytes are 0000, then it is a single entry write. In this case, bytes 2/3 are used as the destination VRAM address and 4/5 as value to write (6/7 are unused). After writing either, update $3017. While writing the data, if it's about to overflow past $0500, just loop back to $0100. |
$7E:0500 | 200 bytes | Palette | Standard palette. All colors are stored in sequence and uploaded to CGRAM during NMI, unless one of the alternative palettes is being used, indicated by $32DC. Even if one of the alternative palettes is being used, the first 0x4 FG/BG colors ($0500-$0507) and the first 0x30 sprite colors ($0600-$065F) are still pulled from this table. |
$7E:0708 | 248 bytes | Palette | Alternative FG/BG palette 0. This is written to colors $04-$7F. |
$7E:0860 | 160 bytes | Palette | Alternative sprite palette 0. This is written to colors $B0-$FF. |
$7E:0900 | 160 bytes | Misc. | VRAM DMA queue; unlike $7E0100, this one is only emptied on non-lag frames, i.e. a true "end of frame". |
$7E:151F | 248 bytes | Palette | Palette for the status bar, written to colors $04-$7F (other colors are maintained from the level's actual palette). |
$7E:1617 | 224 bytes | Tilemap | Tile numbers for the entire Layer 2 tilemap of the status bar. |
$7E:16F7 | 224 bytes | Tilemap | YXPCCCTT for the entire Layer 2 tilemap of the status bar. |
$7E:1F00 | 256 bytes | Stack | SNES program stack. Allocated space may be larger or smaller than currently specified; ends at $1FFF. |
$7E:2000 | 24319 bytes | Misc. | Decompressed data buffer. Data gets decompressed to here as necessary for usage by DMAs. The index for where to write the next DMA can be obtained from $3012, which gets reset at the end of every frame. |
$7F:0000 | 4096 bytes | Tilemap | The entire (?) Layer 1 Map24 tilemap for the level. Two bytes per tile. Tiles appear to be laid on in full strips from the left edge of the level to the right edge. As such, the number of tiles per row varies depending on the size of the level. DEBUG: For the VRAM viewer, the first 0x1000 bytes of this are used as the raw tilemap to be uploaded into VRAM. |
$7F:6570 | 1024 bytes | Misc. | VWF text buffer, where each line of character data gets drawn into before being uploaded to VRAM. Consists of a 32x2 strip of 8x8 tiles. |
$7F:6970 | 131008 bytes | Unknown | Some sort of table/buffer used by routine at $01E7E7. Unclear on what it actually represents. Size is probably not accurate, but it is the maximum allowable index given by the game's code. |
$7F:7878 | 248 bytes | Palette | Alternative FG/BG palette 1. This is written to colors $04-$7F. |
$7F:79D0 | 160 bytes | Palette | Alternative sprite palette 1. This is written to colors $B0-$FF. |
$7F:7A78 | 248 bytes | Palette | Alternative FG/BG palette 2. This is written to colors $04-$7F. |
$7F:7BD0 | 160 bytes | Palette | Alternative sprite palette 2. This is written to colors $B0-$FF. |
$7F:7C78 | 248 bytes | Palette | Alternative FG/BG palette 3. This is written to colors $04-$7F. |
$7F:7DD0 | 160 bytes | Palette | Alternative sprite palette 3. This is written to colors $B0-$FF. |
$7F:7E78 | 248 bytes | Palette | Alternative FG/BG palette 4. This is written to colors $04-$7F. |
$7F:7FD0 | 160 bytes | Palette | Alternative sprite palette 4. This is written to colors $B0-$FF. |
$7F:8078 | 248 bytes | Palette | Alternative FG/BG palette 5. This is written to colors $04-$7F. |
$7F:81D0 | 160 bytes | Palette | Alternative sprite palette 5. This is written to colors $B0-$FF. |
$7F:8278 | 248 bytes | Palette | Alternative FG/BG palette 6. This is written to colors $04-$7F. |
$7F:83D0 | 160 bytes | Palette | Alternative sprite palette 6. This is written to colors $B0-$FF. |
There are currently 166833 bytes in the ram map