-
Notifications
You must be signed in to change notification settings - Fork 20
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. |