Skip to content

WRAM Map

BrunoValads edited this page Feb 19, 2018 · 18 revisions
Address  Length  Type Description
$7E0000 48 bytes Misc. Scratch RAM, used like "registers" for various operations
$7E0030 2 bytes Timer Frame counter
$7E0032 3 bytes Pointer Pointer to level object data
$7E0035 1 byte Controller Controller 1 Data 1, mirror of $7E093C
$7E0036 1 byte Controller Controller 1 Data 2, mirror of $7E093D
$7E0037 1 byte Controller Controller 1 Data 1 on press/first frame, mirror of $7E093E
$7E0038 1 byte Controller Controller 1 Data 2 on press/first frame, mirror of $7E093F
$7E0039 2 bytes Misc. Layer 1 Camera X
$7E003B 2 bytes Misc. Layer 1 Camera Y
$7E003D 2 bytes Misc. Layer 2 Camera X
$7E003F 2 bytes Misc. Layer 2 Camera Y
$7E0041 2 bytes Misc. Layer 3 Camera X (also for World Map)
$7E0043 2 bytes Misc. Layer 3 Camera Y
$7E0045 2 bytes Misc. Layer 4 Camera X
$7E0047 2 bytes Misc. Layer 4 Camera Y
$7E0049 4 bytes Empty Unused RAM, cleared (with $00) during every loading screen
$7E004D 2 bytes Sound Effect Music track to be played - mirror of hardware register $2140 (APU I/O 0)
$7E004F 2 bytes Sound Effect Previous value of $7E004D (if previous == current value of hardware register $2140, do not write to register)
$7E0051 2 bytes Sound Effect Mirror of hardware register $2141 (APU I/O 1, pseudo-noise loop)
$7E0053 2 bytes Sound Effect Sound ID to be played instantly, bypasses the sound queue, directly written to hardware register $2143
$7E0055 2 bytes Sound Effect Previous value of $7E0053 (if previous == current value in hardware register $2143, do not write to register)
$7E0057 2 bytes Sound Effect Current size of sound queue (capacity 7)
$7E0059 16 bytes Sound Effect Sound effect queue, NOT all sounds currently playing, but instead all sound ID's (1 byte per) to be submitted for play at the current time; each frame the queue index decrements, meaning at most one sound submitted per frame
$7E0069 2 bytes Map World Map: Layer 1 scroll
Mirrored by $7E006D
$7E006B 2 bytes Misc. Yoshi's jump state, mirror of $7000C0
$7E006D 2 bytes Map World Map: Layer 2 scroll
$7E0072 2 bytes Map World Map: Current stage Yoshi sprite Y coordinate
$7E0073 2 bytes Misc. $0000: Camera is moving right
$0002: Camera is moving left
$7E0075 2 bytes Misc. $0000: Camera moving down
$0002: Camera moving up
$7E0076 2 bytes Map World Map: Current stage Yoshi sprite X coordinate
$7E0077 2 bytes Misc. Flag: A new column has been spawned in
$7E0079 2 bytes Map World Map: X Scroll destination
$7E0079 2 bytes Misc. Flag: A new row has been spawned in
$7E007B 2 bytes Layer 1 Tilemap VRAM foreground tilemap address of most recently loaded column
$7E007D 2 bytes Layer 1 Tilemap VRAM foreground tilemap address of most recently loaded row
$7E007F 2 bytes Layer 1 Tilemap 7E007B + 1 (right half of column)
$7E0081 2 bytes Layer 1 Tilemap 7E007D with $0400 bit flipped (even/odd counterpart of tilemap row)
$7E0083 2 bytes Misc. Negative camera X column of newly spawned row shifted to: 0000000000cccc00
$7E0085 2 bytes Layer 1 Tilemap 7E007D + $20 (bottom half of row)
$7E0087 2 bytes Misc. Camera X column + 1 of newly spawned row, shifted to: 0000000000cccc00
$7E0089 2 bytes Misc. Game Over screen state:
$0000: nothing
$0002: fading in
$0004: active
$0006: option chosen
$0008: load title screen
$7E0089 2 bytes Layer 1 Tilemap 7E0081 + $20 (second part of even/odd counterpart of tilemap row)
$7E008B 2 bytes Misc. Most recently spawned row's Y coordinate
$7E0091 8 bytes Misc. Game Over screen: Letter rotation values (Y axis), 1 byte per letter, from right to left ('R', 'E', ... 'A', 'G')
$7E0099 8 bytes Misc. Game Over screen: Letter rotation values (X axis), 1 byte per letter, letters from right to left ('R', 'E', ... 'A', 'G')
$7E00A1 16 bytes Misc. Game Over screen: Letter X coordinates, 1 word per letter, from left to right ('G', 'A', .. 'E', 'R')
$7E00B1 16 bytes Misc. Game Over screen: Letter Y coordinates, 1 word per letter, from left to right ('G', 'A', .. 'E', 'R')
$7E00C1 2 bytes Misc. Game Over screen: Scale value (size) of letters
$7E00C3 2 bytes Misc. Game Over screen: Current option selected ($00 = yes, $02 = no)
$7E00C5 2 bytes Misc. Game Over screen: Rotational velocity of letters (both X and Y axes)
$7E00C8 2 bytes Timer Game Over screen: Frame timer (counts down) of waiting before letter rotation restarts
$7E00CA 2 bytes Timer Game Over screen: Frame timer (counts up until $0200) for how long to wait until options appear
$7E00CC 53 bytes Empty Unused RAM, cleared (with $00) during every loading screen
$7E0100 1 byte Empty This area never gets initialized or emptied.
$7E0101 15 bytes ASM Interrupt jumps: NMI jumps to $7E0108, IRQ to $7E010C
Copy of $008140-$00814E
$7E0111 7 bytes Empty This area never gets initialized or emptied.
$7E0118 2 bytes Misc. Game Mode
$7E011B 1 byte Misc. Full Game Mode completion flag

$00: Game Mode still running (set by NMI/IRQ)
$FF: Game Mode complete (set by end of game loop)
$7E011C 1 byte Misc. NMI & IRQ Mode
$00: Nintendo Logo
$02: Normal Level Mode
$04: Offset-per-tile Level Modes (1-7/6-4)
$06: Island Scenes
$08: Story Cutscene / Credits
$0A: Mode 7 bosses (Hookbill/Raphael)
$0C: World Map
$0E: Bonus & Bandit Games
$7E011D 2 bytes Misc. Mirror of hardware register $210D (BG1 Horizontal Scroll); since this register is write-twice, this is the full 16-bit mirror, it will write $7E011D and then $7E011E
$7E011F 2 bytes Coordinate Mirror of hardware register $210E (BG1 Vertical Scroll); since this register is write-twice, this is the full 16-bit mirror, it will write $7E011F and then $7E0120
$7E0121 1 byte Misc. Flag for level loading with stage intro text ($02 if true)
$7E0125 1 byte Misc. IRQ Counter
Expected values are 0 to 2
$7E0126 1 byte ASM Main IRQ Mode
$00: Default
$02: Story Cutscene
$04: Credits
$06: Bonus/Bandit Games
$7E012D 1 byte Super FX SCBR (register $3038) mirror, used by GSU init
$7E012E 1 byte Super FX SCMR (register $303A) mirror, used by GSU init
$7E0131 2 bytes Timer Island: Frame counter
$7E0134 2 bytes Level Data Level header: Background color
$7E0136 2 bytes Level Data Level header: BG1 Tileset
$7E0138 2 bytes Level Data Level header: BG1 Palette
$7E013A 2 bytes Level Data Level header: BG2 Tileset
$7E013C 2 bytes Level Data Level header: BG2 Palette
$7E013E 2 bytes Level Data Level header: BG3 Tileset
$7E0140 2 bytes Level Data Level header: BG3 Palette
$7E0142 2 bytes Level Data Level header: Sprite Tileset
$7E0144 2 bytes Level Data Level header: Sprite Palette
$7E0146 2 bytes Level Data Level header: Level Mode
$7E0148 2 bytes Level Data Level header: Animation Tileset
$7E014A 2 bytes Level Data Level header: Animation Palette
$7E014C 2 bytes Level Data Level header: Background Scrolling
$7E014E 2 bytes Level Data Level header: Music
$7E0150 2 bytes Level Data Level header: Item Memory
$7E0152 2 bytes Level Data Level header: Unused
$7E015F 161 bytes ASM Reserved area for stack. This area never gets initialized or emptied (even upon reset / power on).
$7E0200 1 byte Misc. Screen brightness:
s000bbbb
s = black if set
b = brightness
$7E0201 1 byte Misc. Fade in/out mode
$01 = fade out
$00 = fade in
$7E0203 2 bytes Misc. Mirror of music level header + 1

Used as index for SPC block uploads
$7E0207 4 bytes Music SPC block indices that are currently loaded in ARAM
$7E0212 1 byte Bonus Challenge Bonus game ID:
$00: FLIP CARDS
$02: SCRATCH AND MATCH
$04: DRAWING LOTS
$06: MATCH CARDS
$08: ROULETTE
$0A: SLOT MACHINE
$7E0216 2 bytes Cutscene Flag: Final world unlocked
$7E0218 2 bytes Misc. Current world number (0000 = world 1, 0002 = world 2, etc.) NOTE: 000C isn't a world, but it's used in the final cinema sequence
$7E021A 2 bytes Level Number Current level number, NOTE: not translevel #, just the first level # loaded in from map
$7E0222 72 bytes Map Available tiles on map screen, one byte per level tile:
$00: unavailable
$01: beaten
$80: current (grayed out)
$7E026A 78 bytes Empty Unused RAM, cleared (with $00) via DMA during reset as well as before and after Nintendo logo
$7E02B8 72 bytes Map Current level high scores to be displayed on world map (one byte per level tile)
$7E030E 1 byte Misc. Current save file loaded:
$00: file 1
$02: file 2
$04: file 3
$7E030F 72 bytes Map Map screen tile graphics, 1-byte indices (local to current world loaded)
$7E0357 27 bytes Pause Screen Items in pause menu, one byte per ID:
$00: free slot
$01: +10 star
$02: +20 star
$03: POW
$04: full egg
$05: magnifying glass
$06: star cloud
$07: green melon
$08: blue melon
$09: red melon
$7E0372 2 bytes Misc. Tutorial message bitflags for 1-1 & 1-2:
bfm00000 00000000, b=first loss of Baby Mario in 1-1, f=first Flower received in 1-1, m=first Middle Ring in 1-2
$7E0379 2 bytes Misc. Current number of lives, 999 maximum
$7E037B 2 bytes Misc. Current number of coins
$7E037D 2 bytes Misc. Number of deaths in the current level (not translevel), 999 maximum
$7E037F 2 bytes Misc. Number of 1up's collected in the current level (not translevel), 999 maximum
$7E0383 2 bytes Sprite Palette Current Yoshi color, set on level select (goal Yoshi reads this as well):
$0000: Green
$0001: Pink
$0002: Yellow
$0003: Light Blue
$0004: Purple
$0005: Brown
$0006: Red
$0007: Dark Blue
$7E0385 2 bytes Bonus Challenge Flag for bonus challenge for end of level.
$0001 for no bonus.
$FFFF for bonus.
$7E038C 2 bytes Misc. Flag: warp to a different screen rather than start of stage
$7E038E 2 bytes Misc. Current screen exit (index into screen exit data)
$7E0396 2 bytes Misc. Star count (*10) remaining to be auto-increased by (used by middle ring & items)
$7E0398 1 byte Pause Screen Item currently being used; same item indices as $7E0357
$7E039A 2 bytes Pause Screen Pause Item in continuous use.
Set by items such as star counter and egg fill to act as a pause until item finished use.

Cleared on item use.
$7E039C 1 byte Timer Frame counter during item use (after unpause)
$7E03A1 2 bytes Misc. first digit of star counter
$7E03A3 2 bytes Misc. second digit of star counter
$7E03A9 2 bytes Timer Frame counter for game modes $0D, $0E (during black cover sliding out), $0F, $10 (inside level, not score screen), and $11. Is paused during pause screen, and is reset upon entering stage and also upon star auto-increase (middle rings & +10 & +20 items).
$7E03AB 1 byte Misc. Flag: Star counter is below 9 (beeping/alarm sounds begin)
$7E03AC 2 bytes Misc. Flag: At least one middle ring has been used in current level (value will be number of middle rings used)
$7E03AE 2 bytes Misc. Flag: Boss has been visited before in current level, used to skip Kamek dialogue
$7E03B0 2 bytes Misc. Flag: Baby Bowser boss has been visited before in current level, used to skip Kamek introduction
$7E03B4 2 bytes Misc. Current number of red coins collected
$7E03B6 2 bytes Misc. Current star count * 10
$7E03B8 2 bytes Misc. Current number of flowers collected
$7E03BE 2 bytes Level Data Current Item Memory page (0-3)
$7E03C0 128 bytes Level Data Item Memory Page 0:
Vertical bitplane, each word represents a horizontal line (0 = not collected, 1 = collected)
$7E0440 128 bytes Level Data Item Memory Page 1:
Vertical bitplane, each word represents a horizontal line (0 = not collected, 1 = collected)
$7E04C0 128 bytes Level Data Item Memory Page 2:
Vertical bitplane, each word represents a horizontal line (0 = not collected, 1 = collected)
$7E0540 128 bytes Level Data Item Memory Page 3:
Vertical bitplane, each word represents a horizontal line (0 = not collected, 1 = collected)
$7E05C0 2 bytes Player Physics Current index into Yoshi delay buffers
$7E05C2 296 bytes Player Physics Yoshi X Coordinate delay buffer (2 bytes each): last 148 frames of where Yoshi's X was, used by egg inventory items to follow Yoshi
$7E06EA 296 bytes Player Physics Yoshi Y Coordinate delay buffer (2 bytes each): last 148 frames of where Yoshi's Y was, used by egg inventory items to follow Yoshi
$7E093C 1 byte Controller Controller 1 Data 1 (global):
AXLR----
A = A; X = X; L = L; R = R
$7E093D 1 byte Controller Controller 1 Data 2 (global):
byetUDLR
b = B; y = Y; e = Select; t = Start; U = up; D = down; L = left, R = right
$7E093E 1 byte Controller Controller 1 Data 1, on press/first frame (global):
AXLR----
A = A; X = X; L = L; R = R
$7E093F 1 byte Controller Controller 1 Data 2, on press/first frame (global):
byetUDLR
b = B; y = Y; e = Select; t = Start; U = up; D = down; L = left, R = right
$7E0940 1 byte Controller Controller 2 Data 1 (global):
AXLR----
A = A; X = X; L = L; R = R
$7E0941 1 byte Controller Controller 2 Data 2 (global):
byetUDLR
b = B; y = Y; e = Select; t = Start; U = up; D = down; L = left, R = right
$7E0942 1 byte Controller Controller 2 Data 1, on press/first frame (global):
AXLR----
A = A; X = X; L = L; R = R
$7E0943 1 byte Controller Controller 2 Data 2, on press/first frame (global):
byetUDLR
b = B; y = Y; e = Select; t = Start; U = up; D = down; L = left, R = right
$7E0944 1 byte Controller Previous frame controller 1 data 1 (what was previously in $7E093C), used for next frame's on press
$7E0945 1 byte Controller Previous frame controller 1 data 2 (what was previously in $7E093D), used for next frame's on press
$7E0946 1 byte Controller Previous frame controller 2 data 1 (what was previously in $7E0940), used for next frame's on press
$7E0947 1 byte Controller Previous frame controller 2 data 2 (what was previously in $7E0941), used for next frame's on press
$7E0948 2 bytes Misc. Word that stores each color channel's fixed color data intensity (mirror of $2132 for each channel):
0bbbbbgg gggrrrrr
b = blue channel intensity
g = green channel intensity
r = red channel intensity
$7E094A 1 byte Misc. Mirror of hardware register $420C
$7E094B 1 byte Misc. Mirror of hardware register $2101
$7E094C 1 byte Misc. Mirror of hardware register $212A
$7E094D 1 byte Misc. Mirror of hardware register $212B
$7E094E 1 byte Misc. Mirror of hardware register M7SEL ($211A)
$7E094F 2 bytes Misc. Mirror of hardware register M7A ($211B)
$7E0951 2 bytes Misc. Mirror of hardware register M7B ($211C)
$7E0953 2 bytes Misc. Mirror of hardware register M7C ($211D)
$7E0955 2 bytes Misc. Mirror of hardware register M7D ($211E)
$7E0957 2 bytes Misc. Mirror of hardware register M7X ($211F)
$7E0959 2 bytes Misc. Mirror of hardware register M7Y ($2120)
$7E095B 1 byte Misc. Mirror of hardware register $2106
$7E095E 1 byte Misc. Mirror of hardware register $2105
$7E095F 1 byte Misc. Mirror of hardware register $2107
$7E0960 1 byte Misc. Mirror of hardware register $2108
$7E0961 1 byte Misc. Mirror of hardware register $2109
$7E0962 1 byte Misc. Mirror of hardware register $210B
$7E0963 1 byte Misc. Mirror of hardware register $210C
$7E0964 1 byte Misc. Mirror of hardware register $2123
$7E0965 1 byte Misc. Mirror of hardware register $2124
$7E0966 1 byte Misc. Mirror of hardware register $2125
$7E0967 1 byte Misc. Mirror of hardware register $212C
$7E0968 1 byte Misc. Mirror of hardware register $212D
$7E0969 1 byte Misc. Mirror of hardware register $212E
$7E096A 1 byte Misc. Mirror of hardware register $212F
$7E096B 1 byte Misc. Mirror of hardware register $2130
$7E096C 1 byte Misc. Mirror of hardware register $2131
$7E0980 1 byte Timer Timer for updating Title Screen animation frames (title wavy effect, island rotating, sprite moving, etc). Each animation frame takes 4 frames to update.
$7E0B0F 1 byte Pause Screen Pause state:
$00: unpaused
$01-12: pause transition states
$13: in pause menu
$14: begin unpausing
$7E0B10 1 byte Pause Screen Flag for pause screen active - instantly turns on when pause pressed, instantly turns off when unpause pressed
$7E0B48 2 bytes Pause Screen Flag that indicates whether or not menu items are disabled.
$7E0B4C 2 bytes Misc. Screen X position of black curtain during player death scene; when it reaches $0400, it resets to $0000 and the Retry screen appears
$7E0B55 2 bytes Timer Mosaic Timer, and one of the many "game frozen" flags: gets set to $10 when touching a fuzzy and counts down once per frame. Controls the mosaic effect (mirrors $7E095B)
$7E0B67 2 bytes Timer Tileset Animation Timer
Different usage per mode
$7E0B7D 2 bytes Timer Idle frame counter; on >= $60 star counter is displayed
$7E0B7F 2 bytes Misc. Frame counter for how long to display the star counter (right after counter changes)
$7E0B81 1 byte Misc. Star counter position: $00 = left side, $01 = right side
$7E0B91 96 bytes Sprite Number 24 2-word entries, one sprite per:
Word 1: Sprite ID for sprite to turn into when sprite state is $0006
Word 2: Unused

Special Case:
Goal Ring uses Word 1 and 2 as a timer
$7E0C04 8 bytes Sprite Number Table of all current special sprites' ID's, 4 word-sized entries. $0000 is used as "none"; anything else is assumed to be an ID.
Special sprite ID is a relative ID computed by: (sprite ID) - $01B9
$7E0C1C 2 bytes Misc. Current autoscroll special sprite ID, 0 means no autoscroll active
$7E0C1E 2 bytes Misc. Flag: Autoscrolling currently active for camera X
$7E0C20 2 bytes Misc. Flag: Autoscrolling currently active for camera Y (1-E and 6-8 flag this off)
$7E0C22 4 bytes Misc. Current autoscroll camera X value
$7E0C26 4 bytes Misc. Current autoscroll camera Y value
$7E0C2A 2 bytes Misc. Current autoscroll X velocity
$7E0C2C 2 bytes Misc. Current autoscroll Y velocity
$7E0C2E 2 bytes Misc. Current autoscroll checkpoint (index into autoscroller_values table)
$7E0C30 2 bytes Misc. Next autoscroll checkpoint X value
$7E0C32 2 bytes Misc. Next autoscroll checkpoint Y value
$7E0C34 2 bytes Misc. Next autoscroll checkpoint speed value
$7E0C36 2 bytes Misc. Autoscroll: next checkpoint X - current camera X (how much is left to go)
$7E0C38 2 bytes Misc. Autoscroll: next checkpoint Y - current camera Y (how much is left to go)
$7E0C3A 2 bytes Misc. Flag: Currently active gusty generation
$7E0C3C 2 bytes Misc. Flag: Currently active Lakitu (at least 1)
$7E0C3E 2 bytes Misc. Flag: Currently active fuzzy generation
$7E0C44 2 bytes Misc. Previous camera X value used by fuzzy generator
$7E0C46 2 bytes Misc. Flag: Currently active Poochy
$7E0C48 2 bytes Misc. Flag: Currently active bat generation
$7E0C4A 2 bytes Misc. Current generated bat count
$7E0C4C 2 bytes Misc. Flag: Currently active unknown special sprite
$7E0C68 2 bytes Misc. Flag: Currently active Fire Lakitu (at least 1)
$7E0C6A 2 bytes Misc. Flag: Currently active Flutter generation
$7E0C6E 2 bytes Misc. Flag: Currently active Nipper Spore generation
$7E0C70 2 bytes Misc. Flag: Currently active balloon with pokey ball generation
$7E0C72 2 bytes Misc. Flag: Currently active balloon with missile generation
$7E0C74 2 bytes Misc. Flag: Currently active balloon generation
$7E0C76 2 bytes Misc. Flag: Currently active yellow platform generation
$7E0C78 2 bytes Misc. Flag: Currently active Slime Drop generation
$7E0C7C 2 bytes Misc. Flag: Currently active unknown special sprite 3
$7E0C7E 2 bytes Misc. Flag: Currently active unknown special sprite 4
$7E0C80 2 bytes Player Physics Tongue X position, relative to Yoshi
$7E0C82 2 bytes Player Physics Tongue Y position, relative to Yoshi
$7E0C98 24 bytes Sprite Number Sprite table, 24 entries, one byte per:
A copy of all sprites' states during camera events.
Used as flags to not despawn sprites during camera events (like stairs)
$7E0CB0 2 bytes Misc. Camera Y offset from shaking (either large or small)
$7E0CEC 2 bytes Timer ! switch timer, starts off at $0280, counts down
$7E0CFD 2 bytes Misc. Timer for offset-by-tile level modes
Controls for example moving platforms in 6-4
$7E0CFF 2 bytes Misc. Amplitude of fuzzy offset-per-tile sinewave
$7E0D01 2 bytes Misc. Positional offset of fuzzy offset-per-tile sinewave
$7E0D03 2 bytes Timer Current time value for fuzzy palette morphing effect
$7E0D09 2 bytes Misc. Background gradient Y scroll, lower part
$7E0D0B 2 bytes Misc. Background gradient Y scroll, upper part
$7E0D0F 1 byte Misc. Message box state:
$00: no message box
$01: init
$03: black box growing (opening)
$05: init message
$07: message fading in (from black)
$09: opened, player reading
$0B: message fading out (to black)
$0D: black box shrinking (closing)
$7E0D19 2 bytes Misc. Message Box: size of transitional black square as it grows
$7E0D21 6 bytes Misc. During stage clear transition/wipe, rectangle mask's screen coordinates:
Word 1: left X (low byte), right X (high byte);
Word 2: top Y
Word 3: bottom Y
$7E0D37 2 bytes Misc. Background wave effect (fuzzy): amplitude of horizontal wave
$7E0D39 2 bytes Misc. Background wave effect (fuzzy): amplitude of vertical wave
$7E0DAE 2 bytes Timer Frame counter for holding up while on ground, used for Baby Mario's animation frame, increments by 2 when holding but then on release decays by halving each frame
$7E0DB0 2 bytes Timer Frame counter for holding down while on ground, used for Baby Mario's animation frame, increments by 2 when holding but then on release decays by halving each frame
$7E0E2F 1 byte Misc. 4 Red Toadies: counter of how many have grabbed Baby Mario
$7E0E31 1 byte Misc. 4 Red Toadies: counter of how many are currently active/spawned
$7E0E33 1 byte Misc. 4 Red Toadies: Currently active (at least one)
$7E0E37 16 bytes Coordinate 4 Red Toadies: Each Toadie's X positions (4 total) relative to the 4 Toadies base sprite, one toadie per entry:
Byte 1: Subpixel
Byte 2: Position
Byte 3: Screen #
Byte 4: Spillage from carry add for screen
$7E0E49 16 bytes Coordinate 4 Red Toadies: Each Toadie's Y positions (4 total) relative to the 4 Toadies base sprite, one toadie per entry:
Byte 1: Subpixel
Byte 2: Position
Byte 3: Screen #
Byte 4: Spillage from carry add for screen
$7E0FBD 2 bytes Timer Mirror of $701974 (frame counter) only when Green spiked platform (sprites $15F) is active.
$7E0FBF 2 bytes Timer Mirror of $701974 (frame counter) only when Red spiked platform (sprite $160) is active.
$7E105C 1 byte Boss Raphael the Raven: Y coordinate (relative to moon surface)
$7E105D 1 byte Boss Raphael the Raven: X coordinate (relative to wrapping around moon)
$7E105E 2 bytes Boss Bigger Boo: scale
Raphael the Raven $7E105E: how far Yoshi is from Raphael (X coordinate around moon)
Raphael the Raven $7E105F: current AI state ($00 - $14)
$7E1060 1 byte Timer Raphael the Raven: timer value - used to control timings of AI events. Decrements each frame, gets reset to either random values or specific values on state changes.
$7E1062 1 byte Boss Raphael the Raven: Facing - $00 for counterclockwise, $02 for clockwise;
Baby Bowser: hit counter, fight ends when the low byte reaches $03 (or any value from $03 to $82).
$7E1066 1 byte Boss Bigger Boo: flag for taking damage (growing)
$7E1068 2 bytes Boss Big Bowser: Z coordinate (depth)
$7E106C 2 bytes Boss Big Bowser: horizontal position.
Raphael the Raven: Y velocity
$7E1070 2 bytes Boss Big Bowser: index for summoning boulders, increments by 2 each boulder, ending in $0008 in the first summon and $000E in the second.
$7E1074 2 bytes Boss Big Bowser: flag indicating he is being hit by an egg right now, instantly clears
$7E1076 2 bytes Boss Hookbill: graphics scaling value (X axis)
Bowser: damage counter, fight ends at $0007
$7E1078 2 bytes Boss Hookbill: graphics scaling value (Y axis)
$7E1082 2 bytes Boss Naval Piranha: health, starts with #$0003, dies on #$0000
$7E10DA 2 bytes Player Physics Debug flag for free Yoshi movement
$7E1109 1 byte Coordinate World Map: Cursor X-position
$7E110A 1 byte Coordinate World Map: Cursor Y-position
$7E110C 1 byte Coordinate World Map: Cursor next X-position to be reached
$7E110D 1 byte Coordinate World Map: Cursor next Y-position to be reached
$7E1112 1 byte Level Number World Map: current level/option slot. Sets the level index ($7E021A) if you select one.
$7E1117 1 byte Map World Map: Current World selected * 2. Sets the world number ($7E0218).
$7E11B6 2 bytes Timer Beginning story cutscene: Number of frames left (counts down) to display current text before fading out
$7E11B8 2 bytes Misc. Beginning story cutscene state:
$01 = load next text (into fade in)
$02 = fade in text
$03 = display text (normal)
$04 = load next text (into scroll)
$05 = scroll down to next text part
$06 = fade out text
$7E11BA 2 bytes Misc. Beginning story cutscene: Current text (index by 2's into $0FCD56)
$7E11BC 2 bytes Misc. Beginning story cutscene: BG4 tilemap VRAM destination (for DMA of text)
$7E11BE 576 bytes Layer 4 Tilemap Beginning story cutscene: All possible BG4 tilemap data (text), split into 64-byte chunks which are loaded into VRAM as new text comes in
$7E13FE 1 byte Misc. Beginning story cutscene: Current Y scroll destination (index by 2's into $0FCE90)
$7E1404 1 byte Misc. Beginning story cutscene: Frame timing for current scene/text shown (index into cutscene timer table $0FCEDB)
$7E1405 2 bytes Timer Frame timer (counts down) for beginning story cutscene and rotating island; upon 0, it will fade into the other one (endlessly switching until you load file select menu)
$7E1409 1488 bytes Empty Unused RAM, cleared (with $00) via DMA during reset as well as before and after Nintendo logo

NOTE: There's a bug in level loading of Burts Boss room (only room?) where it will do an unintentional read of $7E15A5 (word sized) and use it as a tile. But it's never written to.
$7E1E00 832 bytes Empty Unused RAM, cleared (with $00) via DMA during reset as well as before and after Nintendo logo
$7E2340 7360 bytes Empty Unused RAM, cleared (with $00) via DMA during reset as well as before and after Nintendo logo
$7E4000 2 bytes Misc. Tilemap Bytes until next free entry in tilemap DMA queue
$7E4002 2046 bytes Misc. Tilemap Reserved area for VRAM tilemap DMA queue, processed every frame, split into variable-sized entries, let e = one entry:
e[0:1]: xvvv vvvv vvvv vvvv
x = End of queue marker
v = VRAM destination/source address
e[2:3]: vidt tttt tttt tttt
t = transfer size - 1 (can also act as entry size)
v = column transfer (32 byte increase if set, otherwise 1)
i = Does a fixed transfer if set (init data)
d = Direction, does a read of VRAM if set (otherwise write)

if d == 1 (Read Tilemap):
Read from VRAM address and write to destination
e[4:6]: Long Destination address to write to

if d == 0 and i == 0 (Write Tilemap):
Write to VRAM address using data from entry
e[4:t]: Data to DMA, size same as t

if d == 0 and i == 1 (Init Tilemap):
Write to VRAM address floodfill using data from entry
e[4:5]: Word data to repeat t times

(Queue size doesn't go beyond 182 bytes in vanilla game so roughly 1864 bytes of this are "free")
$7E4800 2 bytes Pointer Address of last entry in general-purpose DMA queue
$7E4802 2110 bytes Misc. Reserved area for general-purpose DMA queue, split into 12-byte entries, let e = one entry:
e[0:1]: VRAM destination address
e[2]: video port control
e[3]: DMA control
e[4]: DMA destination register
e[5:7]: long source address
e[8:9]: DMA size
e[A:B]: address of next entry in queue
(Doesn't go beyond $4999 in vanilla gameplay, so roughly 1700 bytes of this are "free")
$7E5040 420 bytes Misc. HDMA Table for BG3 Vertical scroll (register $2112), OR when OPT is enabled, writes to BG2 Horizontal scroll (register $210F) instead:
1 word entries from top of actual screen to bottom (minus black bars), representing each scanline
$7E51E4 420 bytes Misc. HDMA Table for BG3 Horizontal scroll (register $2111), OR when OPT is enabled, writes to BG2 Vertical scroll (register $2110) instead:
1 word entries from top of actual screen to bottom (minus black bars), representing each scanline
$7E56D0 840 bytes Misc. HDMA Table for Window 1 & 2 ($2126-$2129)
4 bytes per entry, from top of actual screen to bottom (minus black bars), representing each scanline:
Byte 1: Window 1 Left Position
Byte 2: Window 1 Right Position
Byte 3: Window 2 Left Position
Byte 4: Window 2 Right Position
$7E5A18 128 bytes Misc. HDMA Indirect Table 0, native SNES HDMA Indirect format, 3-byte entries:
Byte: rccccccc r = repeat, c = scanline count
Word: Source pointer
$7E5A98 128 bytes Misc. HDMA Indirect Table 1 (format)
$7E5B18 128 bytes Misc. HDMA Indirect Table 2 (format)
$7E5B98 128 bytes Misc. HDMA Indirect Table 3 (format)
Default for Channel 4 (BG3 V-scroll (BG2 for OPT))
$7E5C18 128 bytes Misc. HDMA Indirect Table 4 (format)
Commonly used for Channel 3 (BG3 H-scroll (BG2 for OPT))
$7E5C98 128 bytes Misc. HDMA Indirect Table 5 (format)
Commonly used for Channel 2 (green & red channel of background gradient)
$7E5D18 128 bytes Misc. HDMA Indirect Table 6 (format)
Commonly used for Channel 1 (blue channel of background gradient)
$7E5D98 2 bytes Misc. Number of bytes Yoshi's in-between level egg inventory items take up (# of items * 2)
$7E5D9A 12 bytes Misc. Egg inventory items stored in between levels (not current eggs), 6 words, each one is a sprite ID
$7E65A6 2048 bytes Layer 1 Tilemap BG1 left tilemap mirror used for cross section graphical masking effect (free RAM if not using cross section BG3 header $0A)
$7E6DA6 1024 bytes Layer 1 Tilemap BG1 right tilemap mirror used for cross section graphical masking effect (free RAM if not using cross section BG3 header $0A)
$7E71A6 1024 bytes Layer 1 Tilemap Overlap between $7E6DA6 and $7E75A6, both tilemaps are actually 2048 bytes and this acts as either one depending on when (free RAM if not using cross section BG3 header $0A)
$7E75A6 1024 bytes Layer 3 Tilemap BG3 tilemap mirror (VRAM $3400) used for cross sections (free RAM if not using cross section BG3 header $0A)
$7EB8E2 1822 bytes Empty Unused RAM, cleared (with $00) via DMA during reset as well as before and after Nintendo logo
$7EC000 16384 bytes ASM Copy of $00C000-$00FFFF (Code is never executed with the data bank as $00 for this range; it's always $7E)
$7F0000 22238 bytes Empty Unused RAM, cleared (with $00) via DMA during reset as well as before and after Nintendo logo
$7F56DE 438 bytes Object Palette Blue channel of background gradient ($2132 COLDATA)
Covers entire sublevel (NOT just screen) from top to bottom, one byte per entry, representing every eighth X pixel row in sublevel
$7F5894 876 bytes Object Palette Green & Red channel of background gradient ($2132 COLDATA)
Covers entire sublevel (NOT just screen) from top to bottom, two bytes per entry, representing every eighth X pixel row in sublevel:
Byte 1: Green Channel
Byte 2: Red channel
$7F7E00 512 bytes Level Data All screen exit data for current level, in screen region order ($00-$7F), 4 bytes per exit:

LLLLLLLL XXXXXXXX YYYYYYYY EEEEEEEE
L = Destination Level (between 00 and DD)
X = Destination X-Coordinate
Y = Destination Y-Coordinate
E = Destination Entrance Type (this follows the same format as $7000AC, Yoshi state)
$7F8000 32768 bytes Layer 1 Tilemap Table that holds all foreground MAP16 tile data for the entire sublevel currently loaded. Split up by screen ID's then further into row-major tile #. Data is word-sized MAP16 indices.
Clone this wiki locally