YI Memory Map
Displaying 1427 out of 1427 addresses.
View: moderated | waiting (27)
- Pages:
- 1
RAM Address | Length | Type | Description | Details |
---|---|---|---|---|
$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. You can find the list of valid values here. | |
$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 | |
$7E012F | 1 byte | Debug | (Used by debug routine at $0080F8) Frame advance flag: #$00 = disable frame advance, #$01 = enable frame advance | |
$7E0130 | 1 byte | Debug | (Used by debug routine at $0080F8) Frame advance timer: When L or R is pressed on Controller 2 and frame advance flag at $012F is set, skips game mode code and decrements once per frame until it reaches 0, then next frame runs game mode code for one frame. Cleared when frame advance flag is set and neither L nor R is pressed on Controller 2. |
|
$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) | |
$7E0394 | 2 bytes | Timer | Counter between ticks for star increase when stars are under 10 | |
$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) | |
$7E0CB2 | 2 bytes | Misc. | Falling wall is on-screen flag. Because the game puts two walls five spaces apart (one for the left and another for the right side), this one prevents the game from having two walls being occupied in the same spot. In addition, they use HDMA to draw their graphics and so two separate walls can't co-exist at the same time due to this reason. | |
$7E0CCC | 2 bytes | Timer | Damage recoil timer, disables left and right if not zero. | |
$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 | |
$7E0D05 | 1 byte | Boss | Raphael Boss fight rotation value $00 to $FF (whole loop) |
|
$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 | |
$7E0DF9 | 2 bytes | Misc. | Amount of wooden planks (sprites 0x5E and 0x5F) running. | |
$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). | |
$7E1125 | 2 bytes | Map | Current Yoshi formation in world map. Values follow world number ($7E0218) format. | |
$7E112E | 2 bytes | Map | World Map: Current Yoshi selected (which one Baby Mario is mounted), changes when you move between normal levels, not special, bonus, nor options. | |
$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 | |
$7E5DA6 | 2048 bytes | Misc. | Cross sections: Full copy of cross section BG3 tile graphics, set only once upon loading cross section levels and then every frame stored to $706800 Chomp Shark: BG3 tilemap animations |
|
$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. | |
SRAM Address | Length | Type | Description | Details |
$700000 | 112 bytes | Super FX | Scratch RAM, used like "registers" for various operations on the Super FX, also used as additional parameters to Super FX routines | |
$700070 | 1 byte | Controller | Controller Data 1 (for gamemode 0F): AXLR---- A = A; X = X; L = L; R = R |
|
$700071 | 1 byte | Controller | Controller Data 2 (for gamemode 0F): byetUDLR b = B; y = Y; e = Select; t = Start; U = up; D = down; L = left, R = right |
|
$700072 | 1 byte | Controller | Controller Data 1, on press/first frame (for gamemode 0F): AXLR---- A = A; X = X; L = L; R = R |
|
$700073 | 1 byte | Controller | Controller Data 2, on press/first frame (for gamemode 0F): byetUDLR b = B; y = Y; e = select; t = Start; U = up; D = down; L = left, R = right |
|
$700076 | 2 bytes | Sound Effect | Mirror of $7E0051 (register $2141) for GSU player control routine, used for transformations | |
$70007A | 2 bytes | Sound Effect | Super FX sound ID, returned by GSU to push into sound queue (play a sound effect) | |
$700082 | 1 byte | Controller | Controller settings ($00 = patient; $02 = hasty) | |
$70008A | 2 bytes | Misc. | Yoshi's X subpixel position (high byte is spillage) | |
$70008C | 2 bytes | Misc. | Yoshi's X position | |
$70008E | 2 bytes | Misc. | Yoshi's Y subpixel position (high byte is spillage) | |
$700090 | 2 bytes | Misc. | Yoshi's Y position | |
$700092 | 2 bytes | Misc. | Pointer to next free slot in OAM buffer | |
$700094 | 2 bytes | Misc. | Layer 1 Camera X | |
$700096 | 2 bytes | Misc. | Layer 2 Camera X | |
$700098 | 2 bytes | Misc. | Layer 3 Camera X | |
$70009A | 2 bytes | Misc. | Layer 4 Camera X | |
$70009C | 2 bytes | Misc. | Layer 1 Camera Y | |
$70009E | 2 bytes | Misc. | Layer 2 Camera Y | |
$7000A0 | 2 bytes | Misc. | Layer 3 Camera Y | |
$7000A2 | 2 bytes | Misc. | Layer 4 Camera Y | |
$7000A4 | 2 bytes | Misc. | X position of the leftmost tiles on the screen | |
$7000A6 | 2 bytes | Misc. | Y position of the uppermost tiles on the screen | |
$7000A8 | 2 bytes | Misc. | Previous frame Yoshi's X velocity | |
$7000AA | 2 bytes | Misc. | Yoshi's Y velocity | |
$7000AC | 2 bytes | Misc. | Yoshi state: $0000: Regular (player control) $0002: Cutscenes; screen transition (pipe going right) $0003: In screen transition (pipe going left) $0004: In screen transition (pipe going down); in prologue cutscene (Baby Mario mounted) $0005: In screen transition (pipe going up) $0006: Entering/exiting pipe; in transition (pipe going right) $0007: In screen transition (pipe going left) $0008: In screen transition $0009: In screen transition $000A: Entering door $000E: Dying from spike $0010: Transforming $0012: Smashed by falling wall (sprite $036) $0014: Activating goal $0016: During level intro $0018: Being thrown toward baby mario at end of transformation $001A: Dying in pit / inside piranha plant / receiving boss key / shrinking during Prince Froggy $001C: During prologue cutscene $001E: Pushed away in Raphael Cutscene $0020: Entering Raphael Boss room (moon) $0022: Entering keyhole during boss key cutscene $0028: Dying from lava $002A: Being ejected vertically (after transition) |
|
$7000AE | 2 bytes | Misc. | Yoshi form: $0000: Yoshi $0002: Car Yoshi $0004: Mole Yoshi $0006: Helicopter Yoshi $0008: Train Yoshi $000A: Mushroom Yoshi (Beta) $000C: Sub Yoshi $000E: Ski Yoshi $0010: Super Baby Mario $0012: Plane Yoshi (Beta) |
|
$7000B0 | 2 bytes | Misc. | Yoshi's X position relative to camera | |
$7000B2 | 2 bytes | Misc. | Yoshi's Y position relative to camera | |
$7000B4 | 2 bytes | Misc. | Yoshi's X velocity | |
$7000B6 | 2 bytes | Misc. | Angle of ground Yoshi is on | |
$7000B8 | 2 bytes | Misc. | Angle of terrain slope that Yoshi's top is colliding with | |
$7000BA | 2 bytes | Misc. | Angle of terrain slope that Yoshi's middle part is colliding with | |
$7000BC | 2 bytes | Misc. | Angle of terrain slope that Yoshi's bottom part is colliding with | |
$7000BE | 2 bytes | Misc. | Yoshi's current animation frame | |
$7000C0 | 2 bytes | Player Physics | Yoshi's jump state: $0006: Jumping $0007: Peak of jump $0008: Falling |
|
$7000C2 | 2 bytes | Player Physics | Yoshi's ducking state: $0000: not ducking $0001-$0004: mid-duck / mid-duck release $0005: fully ducked |
|
$7000C4 | 2 bytes | Misc. | Yoshi facing direction ($0000: right, $0002: left) | |
$7000C6 | 2 bytes | Player Physics | Yoshi swimming state: $0000: not swimming $0001: landing in water, no player control $0002: feet up briefly after landing $0003: swimming |
|
$7000CC | 1 byte | Misc. | Direction player last accelerated from input: $00: not moving $01: right $02: left |
|
$7000CE | 2 bytes | Flag | $004C: Player is holding Up while on ground, $0000 not | |
$7000D2 | 1 byte | Misc. | Yoshi fluttering state: $00: After a flutter, midair $01: Not in a flutter chain: resets to this upon hitting ground or ceiling $02: Begin flutter $04, $06, $08: Mid-flutter states |
|
$7000D3 | 1 byte | Flag | $80: extended fluttering, $00 not | |
$7000D4 | 2 bytes | Misc. | Ground pound state: $0001~$0006: init states $0007: falling $0008~$000B: hitting the ground $000C: fully on ground, other actions enabled |
|
$7000D6 | 2 bytes | Misc. | Frame counter for holding Down button in air to ground pound. When it reaches $0007, ground pound will initiate. Set to $FFFF when pressing down on ground |
|
$7000DA | 2 bytes | Player Physics | Yoshi's stair state/counter, counts down/up in between steps on stairs (only high byte is used): $0800 to $0100 for left-facing stairs $F800 to $FF00 for right-facing stairs |
|
$7000DC | 2 bytes | Misc. | Frame counter for pushing yourself against a wall / a pushable sprite. The pushing animation starts at $10, and it loops at $23. NOTE: For pushable sprites, the entire range is +1 so starts at $01, $11 is animation, stops at $24. | |
$7000DE | 2 bytes | Misc. | Egg throwing state (decrements over time): $0007~$000A: init $0006: cursor out, ready to throw $0001~$0005: has been thrown $0000: not throwing |
|
$7000E0 | 2 bytes | Misc. | Egg cursor distance from Yoshi: Byte 1: Subpixels Byte 2: Pixels |
|
$7000E4 | 2 bytes | Misc. | Egg cursor X position When spitting an enemy this is used together with player speed to set enemy X-speed |
|
$7000E6 | 2 bytes | Misc. | Egg cursor Y position When spitting an enemy this is used subtracted with constant $0200 to set enemy y-speed |
|
$7000E8 | 2 bytes | Misc. | Frame counter for holding the Down button to cancel egg throw (up to $0007 then it cancels) | |
$7000EA | 2 bytes | Flag | $FFFF = Egg cursor locked with L/R, $0000 = not locked | |
$7000EC | 2 bytes | Flag | Egg aiming flag: $FFFF: Have eggs, can aim $0000: No eggs, can't aim $0002: In water, can't aim |
|
$7000EE | 2 bytes | Misc. | Egg cursor angle, ranges from $0000 = lowest, to $2E00 = highest | |
$7000F0 | 2 bytes | Misc. | Angular velocity of egg cursor (fixed point) | |
$7000F2 | 2 bytes | Misc. | How much Yoshi is stumbling during fuzzied state, starts at $00 and increments or decrements by $02 until threshold point, then begins stumbling: $001A: stumble forward threshold $FFE6: stumble backward threshold |
|
$7000F4 | 2 bytes | Misc. | Direction Yoshi is currently leaning during fuzzied state, relative to Yoshi's current facing: $0002: forward $FFFE: backwards |
|
$7000F6 | 2 bytes | Misc. | Yoshi idle animation state: $0000: Stepping in place $0002: Blinking $0004: Scratching nose $0006: Turning around |
|
$7000F8 | 2 bytes | Misc. | Running animation state: alternates between $0000 and $0002 while running pre/post-run: $0000 - $0012, increments by $02 |
|
$7000FA | 2 bytes | Misc. | Current ground type Yoshi is on: $0000: Ground $0001: Water $0002: ???? $0003: Ice $0004: Snow $0005: Mud |
|
$7000FC | 2 bytes | Misc. | Player collision with MAP16 terrain, format: 0000000L lRrTtBMb L = left, head l = left, body R = right, head r = right, body T = top, left half t = top, right half B = bottom, left third M = bottom, middle third b = bottom, right third |
|
$7000FE | 2 bytes | Misc. | Player collision with water, same format as $7000FC | |
$700100 | 2 bytes | Misc. | Player collision with cross section tiles, same format as $7000FC | |
$700102 | 2 bytes | Flag | $0001 when on a Spiky Stake ($0000 means not) | |
$700104 | 2 bytes | Misc. | Current door exit type: $0000: Regular door / boss door $0100: Sewer pipe hole (like in 4-E) $FFFF: Bandit mini-game door |
|
$700106 | 1 byte | Misc. | Pipe entrance/exit transition type: $02 = Going right $04 = Going left $06 = Going down $08 = Going up |
|
$700107 | 1 byte | Misc. | Pipe entrance/exit transition type: $00 = Vertical, going in pipe $40 = Vertical, coming out of pipe $80 = Horizontal, going in pipe $C0 = Horizontal, coming out of pipe |
|
$700108 | 2 bytes | Misc. | Distance Yoshi has travelled so far in vertical/horizontal pipe entrance transition, in pixels & subpixels ($ppss), fade & exit begins at $1F00 for both (NOTE: for horizontal it's basically a constant $0080 increase) | |
$70010A | 2 bytes | Misc. | Yoshi's vertical pipe entrance animation state: $0001-$0006: going down a pipe $0001-$0009: going up a pipe |
|
$70010C | 2 bytes | Misc. | Yoshi's vertical pipe entrance acceleration: $0100 = 1 subpixel, low byte is subsubpixels | |
$70010E | 2 bytes | Misc. | Before entering pipe: Yoshi's horizontal distance from vertical pipe entrance During pipe entrance transition: Current horizontal position of pipe entrance |
|
$700110 | 2 bytes | Misc. | While walking on mud/snow: Mirror of $7000F8, used for generating mud/snow particles While sliding on mud: Distance slid, wraps around at $1FFF, used to generate mud splashes |
|
$700112 | 2 bytes | Misc. | Car transformation wheel extension height, increments by 2, maxes at $0030 | |
$700114 | 2 bytes | Misc. | Address of ROM graphics (bank $52) to DMA into VRAM at $4200-$43FF: -Yoshi's tongue -Yoshi egg during Super Star Mario -Yoshi during bubble transformation |
|
$700118 | 2 bytes | Sprite Tilemap | Pointer to "above" layer's OAM in OAM buffer | |
$70011A | 2 bytes | Sprite Tilemap | Sprite priority # for "above" layer (sprites that show above Yoshi) | |
$70011C | 2 bytes | Misc. | Center of Yoshi X position (Yoshi X + Yoshi width / 2) | |
$70011E | 2 bytes | Misc. | Center of Yoshi Y position (Yoshi Y position + Yoshi height / 2) | |
$700120 | 2 bytes | Misc. | Yoshi's hitbox half width | |
$700122 | 2 bytes | Misc. | Yoshi's hitbox half height | |
$700124 | 2 bytes | Player Tilemap | Yoshi's OAM palette, ----ccc- part of yxppccct (OAM low table byte 4) | |
$700126 | 2 bytes | Player Tilemap | Yoshi's OAM priority, --pp---- part of yxppccct (OAM low table byte 4) | |
$700128 | 32 bytes | Player Tilemap | Yoshi & star counter graphics DMA queue, first 6 entries are Yoshi, last 2 are star counter number graphics, 4 bytes per: Bytes 1-3: Long source address to DMA from; aa aa bb (a = address, b = bank) for top row DMA Byte 4: high byte of address + 2, for bottom row DMA |
|
$70014E | 2 bytes | Misc. | Transformation state: $0000: Not transforming |
|
$700150 | 2 bytes | Misc. | Mouth state: $00: doing nothing $01: tongue horizontally growing or spitting $02: tongue horizontally retracting $03: tongue vertically growing or spitting $04: tongue vertically retracting $07, $0B, $0F, $13, $17, $1B, $1F, $23: States of swallowing non-egg sprites (star, nipper seed, coin, etc.) $2F, $33, $37, $3B, $3F, $43, $47, $4B: States of swallowing egg-forming sprites |
|
$700152 | 2 bytes | Player Physics | Tongue X length in pixels | |
$700154 | 2 bytes | Player Physics | Tongue Y height in pixels | |
$700156 | 2 bytes | Player Physics | Yoshi's X tongue position, relative to camera | |
$700158 | 2 bytes | Player Physics | Yoshi's Y tongue position, relative to camera | |
$70015A | 2 bytes | Misc. | Yoshi's X tongue position | |
$70015C | 2 bytes | Misc. | Yoshi's Y tongue position | |
$70015E | 2 bytes | Misc. | Blocked Tongue States (e.g. tonguing walls) Values $00 to $0F |
|
$700160 | 2 bytes | Misc. | Inedible Tongue state (e.g. tonguing sprites like piranhas / chomp rocks) Starts at $0014 and decrements until $0002. Zeroes out when tongue retracts. |
|
$700162 | 2 bytes | Misc. | When Yoshi catches an enemy or item (e.g. melon, egg) with his tongue, this is set to the sprite slot value. The value stays so until Yoshi either eats or spits out the enemy or has used the item. This SRAM gets cleared immediatley if the enemy or item in question is inedible. | |
$700168 | 2 bytes | Misc. | Current sprite slot index (+1) being tongued/in mouth - sign bit turns on when unable to swallow | |
$70016A | 2 bytes | Misc. | Type of ammunition in mouth: $0001: Fire melon $0002: Bubble $0003: Green watermelon $0004: Ice melon |
|
$70016C | 2 bytes | Misc. | Timer for duration of spitting a projectile, starts at $0000 and increments up to: Watermelon seed: $0008 Fire melon: $002A Ice melon: $0038 Bubble: $0018 |
|
$70016E | 2 bytes | Misc. | Timer for intentional game freeze while tonguing a watermelon | |
$700170 | 2 bytes | Misc. | Ammunition count in mouth: Bubble decrements 10 each spit, watermelon decrements 1 each spit, ice and fire melons decrement 10 each spit |
|
$700172 | 2 bytes | Misc. | For ice and fire melons: X position of where flame/ice was spat For watermelon seeds: # of seeds spat in succession during holding Y (loops from 0 to 6 then back to 0) |
|
$700174 | 2 bytes | Misc. | Ice and fire melons: Y position of where ice/flame was spat |
|
$70017A | 1 byte | Cutscene | The value in it is stored in Controller Data 1 during cutscenes. | |
$70017B | 1 byte | Cutscene | The value in it is stored in Controller Data 2 during cutscenes. | |
$70017C | 1 byte | Cutscene | The value in it is stored in Controller Data 1, one frame during cutscenes. | |
$70017D | 1 byte | Cutscene | The value in it is stored in Controller Data 2, one frame during cutscenes. | |
$70017E | 2 bytes | Player Physics | Car Yoshi: left wheel X position All other transformations: Rotation angle (mario low byte only) |
|
$700180 | 2 bytes | Player Physics | Transformation value: Helicopter: Rotation speed when hit. Starts at $1000, decreases by $20 each frame until $0700 Submarine: Rotation angle when hit. Starts at $0000, increments by $10 each frame until $0800 Train: Size counter when entering track. Starts at $00FF, decrements one per frame until $0070 Car: X-position in pixels Super Baby Mario: $0007 when running on ground allowing for vertical climb Mole: Orientation of vehicle: $0000: 0° $0001: 90° $0002: 180° $0003: 270° Ski Yoshi: Snowball State, starts at $0080 when hit and increases by 2 every frame on the ground until value reaches $0100 |
|
$700182 | 2 bytes | Player Physics | Car Yoshi: right wheel X position Helicopter: Animation frame (0-3) (turning around) |
|
$700184 | 2 bytes | Player Physics | Car Yoshi left wheel Y position | |
$700188 | 2 bytes | Player Physics | Car Yoshi right wheel Y position | |
$700198 | 2 bytes | Player Physics | Transformation value: Car: Y position of player / car Super Baby Mario: Y scale, normalized at $0100 |
|
$7001AE | 2 bytes | Flag | Disables control & animation of Yoshi | |
$7001B0 | 2 bytes | Flag | Disables updating & animation of sprites | |
$7001B2 | 2 bytes | Misc. | Baby Mario state info (set up like bit flags but never more than 1 on simultaneously): $0000: Off of Yoshi, floating & crying $2000: Super Baby Mario / Bonus challenge Mario $4000: Seized by toadies/bandits/frogs $8000: Riding Yoshi |
|
$7001B4 | 2 bytes | Flag | Currently on a platform sprite (Chomp rock, Hint block, rotating platforms, etc.) - also counts the total number currently standing on | |
$7001B6 | 2 bytes | Sprite Number | Slot of platform sprite that Yoshi is on. Does not apply to every platform sprite, for example it does for some moving sprites such as Pinwheels, Chomp Rock, Poochy, Flatbed Ferries, Lakitu clouds etc., but not for Hint Blocks, Donut Lifts etc. | |
$7001B8 | 2 bytes | Flag | Previous frame's value of $7001B4 | |
$7001BC | 2 bytes | Sprite Physics | Where the water line starts for sprite physics Only used for BG3 tilesets $13 (value $07B0) and $1D ($0700) Value is left at $4000 when disabled This doesn't affect regular water objects, only hardcoded water for certain BG3 tilesets. $ssyy ss = vertical screen number yy = Y-position of water line |
|
$7001C6 | 2 bytes | Misc. | Timer/index into camera Y offset table for small camera shaking (used by ground pounds, big egg ground impact, etc.) | |
$7001C8 | 2 bytes | Misc. | Timer/index into camera Y offset table for large camera shaking (used for falling chain chomps, chasing chain chomp hitting wall, etc.) | |
$7001CA | 2 bytes | Layer 1 Tilemap | Special Offset-By-Tile Modes $00: None (normal) $01: Level Mode 2 (1-7, 6-4, 6-3) $03: When Fuzzied $05: Unused |
|
$7001D0 | 2 bytes | Misc. | Timer for Yoshi's turning pose. Starts at #$0004 when you change direction while in movement (ground or air), remains with this value for a brief time if you keep holding this direction until it starts decrementing each frame. |
|
$7001D2 | 2 bytes | Misc. | Timer for each walking (not running) animation frame. | |
$7001D4 | 2 bytes | Misc. | Timer for each animation frame of the landing, start of falling and fluttering. | |
$7001D6 | 2 bytes | Misc. | Invincibility timer (starts at $00A0 on hit and decrements) | |
$7001D8 | 2 bytes | Misc. | Timer for each Yoshi idle animation state. | |
$7001DC | 2 bytes | Misc. | Timer for bopping head in solid blocks animation. It's the exact time with zero y speed during the bop. | |
$7001DE | 2 bytes | Misc. | Timer for ground pounding animation. | |
$7001E0 | 2 bytes | Misc. | Timer for mouth/tongue related animations. | |
$7001E2 | 2 bytes | Misc. | Egg throwing state timer | |
$7001EA | 2 bytes | Timer | Particle generation timer for mud & snowy trees, initially set to $08 and zero means spawn in (if conditions met) | |
$7001EE | 2 bytes | Misc. | Timer for sprite in Yoshi's mouth to be automatically swallowed. Starts off at $04B0 upon sprite entering mouth (even for inedible ones like the shell), counts down to $0000 | |
$7001F4 | 2 bytes | Misc. | Transformation timer, counts down | |
$700200 | 2048 bytes | Misc. | OAM buffer. Split into 256 4-word entries, each one representing a possible entry in OAM: Word 1: Screen-relative X coordinate (low byte copied into byte 1 of OAM low table mirror entry) Word 2: Screen-relative Y coordinate (low byte copied into byte 2 of OAM low table mirror entry) Word 3: Copied into OAM low table mirror entry bytes 3 & 4 (see OAM low table mirror $700A00 for details) Word 4: -p----sx------sx, p = priority (0=forward, 1=reverse), s = size, x = 9th x bit (low byte copied into high table buffer entry) NOTE: First 16 sprites are reserved for high priority items such as text and these are NOT handled by this buffer, thus copying begins at $700A40 for low table mirror and $700C30 for high table buffer. Copying will continue until either the last entry of the OAM low table mirror ($700BFC) or the last entry of this buffer ($7009F8). |
|
$700244 | 2 bytes | Player Physics | Yoshi's X subpixel position on a spinning wooden platform, unaffected by the rotation. | |
$700246 | 2 bytes | Player Physics | Yoshi's X position on a spinning wooden platform, unaffected by the rotation. | |
$700A00 | 512 bytes | Misc. | OAM low table mirror. 4-byte entries with format xxxxxxxx yyyyyyyy tttttttt yxppccct (x = X coordinate, y = Y coordinate, t = tile number, c = palette 0-7, p = priority, x&y = flip) | |
$700C00 | 32 bytes | Misc. | OAM high table mirror. 2 bits per entry, most significant X and size flag. | |
$700C20 | 128 bytes | Misc. | OAM high table buffer. Each entry is one byte which corresponds with one OAM entry. The 2 lowest bits of the byte get copied into the high table mirror ($700C00-$700C1F) and shifted into the correct spot for the entry. | |
$700CA0 | 2 bytes | Map | Island angle. Only low byte is used. | |
$700CAA | 128 bytes | Misc. | Screen ID table: maps raw screen # ($00-$7F) to screen ID ($00-$3F). The sign bit on indicates "empty" screen (has no object at all), or camera is unable to scroll into the screen due extended object $FE, or tiles are erased in that screen by extended object $FF. | |
$700DAA | 64 bytes | Misc. | BG1 - Left half of newest column spawned in, 32 SNES VRAM tilemap words, stored as a column but DMA'd to VRAM with increments of $40 to get to the next row each write and line up properly | |
$700DEA | 64 bytes | Misc. | BG1 - Right half of newest column spawned in, 32 SNES VRAM tilemap words, stored as a column but DMA'd to VRAM with increments of $40 to get to the next row each write and line up properly | |
$700E2A | 68 bytes | Misc. | BG1 - Top half of newest row spawned in, 34 SNES VRAM tilemap words, split into two separate DMA's - one for tilemap 1, one for tilemap 2 | |
$700E6E | 68 bytes | Misc. | BG1 - Bottom half of newest row spawned in, 34 SNES VRAM tilemap words, split into two separate DMA's - one for tilemap 1, one for tilemap 2 | |
$700EB6 | 1 byte | Misc. | Spriteset file # 1 ($F7 index) | |
$700EB7 | 1 byte | Misc. | Spriteset file # 2 ($F8 index) | |
$700EB8 | 1 byte | Misc. | Spriteset file # 3 ($F9 index) | |
$700EB9 | 1 byte | Misc. | Spriteset file # 4 ($FA index) | |
$700EBA | 1 byte | Misc. | Spriteset file # 5 ($FB index) | |
$700EBB | 1 byte | Misc. | Spriteset file # 6 ($FC index) | |
$700EBC | 2 bytes | Misc. | Previous frame X coordinate of sprite currently being processed | |
$700EBE | 2 bytes | Misc. | Previous frame Y coordinate of sprite currently being processed | |
$700EC0 | 64 bytes | Sprite Table | 16 4-byte entries, one ambient sprite per: Word 1: Flag for whether it exists currently or not (usually $000E for active) Word 2: $0000 |
|
$700F00 | 96 bytes | Sprite Table | 24 4-byte entries, one sprite per: Word 1: Sprite state $0000: nonexistent (used for skipping processing) $0002: newly spawned $0004: same as $02? $0006: pop sprite (turn into other sprite based on this table) $0008: in yoshi's tongue and/or mouth $000A: riding Yoshi $000C: colliding $000E: yoshi head bop $0010: active / alive $0012: burning to death from lava/fire melon Word 2: Angle of ground that the sprite is walking on |
|
$700F60 | 64 bytes | Sprite Table | 16 4-byte entries, one ambient sprite per: bitwise flags: Byte 1: ???????? Byte 2: ?? Byte 3: terrain collision flags Byte 4: ?? |
|
$700FA0 | 96 bytes | Sprite Table | 24 4-byte entries, one sprite per: Byte 1: tc?hhhhh t = Can be tongued (into mouth) c = Tongue collision is ignored h = hitbox setting (index into hitbox tables) Byte 2: ?? Byte 3: terrain collision flags Byte 4: ?? |
|
$701000 | 64 bytes | Sprite Table | 16 4-byte entries, one ambient sprite per: Byte 1: ????ddmm d = Index into despawning x,y threshold table (00 means no despawning) m = drawing method index Byte 2: Count/# of bytes taken up in OAM buffer Byte 3: Partial OAM low table mirror yx00ccc0 (c = palette 0-7, x&y = flip) Note: X-flip and Y-flip is conventionally set by facing direction Byte 4: ?? |
|
$701040 | 96 bytes | Sprite Table | 24 4-byte entries, one sprite per: Byte 1: sf?bddmm s = automatic swallow f = can be frozen b = can be burned by flame d = Index into despawning x,y threshold table (00 means no despawning) m = drawing method index Byte 2: Count/# of bytes taken up in OAM buffer Byte 3: Partial OAM low table mirror yx00ccc0 (c = palette 0-7, x&y = flip) Note: X-flip is conventionally set by facing direction Byte 4: ?? |
|
$7010A0 | 64 bytes | Sprite Table | 16 4-byte entries, one ambient sprite per: Ambient Sprite X coordinates, format: Byte 1: 00 Byte 2: X subpixel Byte 3: X pixel Byte 4: X screen |
|
$7010E0 | 96 bytes | Sprite Table | 24 4-byte entries, one sprite per: Sprite X coordinates, format: Byte 1: Sprite priority override flag (puts sprite farthest back if $40) Byte 2: X subpixel Byte 3: X pixel Byte 4: X screen |
|
$701140 | 64 bytes | Sprite Table | 16 4-byte entries, one ambient sprite per: Ambient Sprite Y coordinates, format: Byte 1: 00 Byte 2: Y subpixel Byte 3: Y pixel Byte 4: Y screen |
|
$701180 | 96 bytes | Sprite Table | 24 4-byte entries, one sprite per: Sprite Y coordinates, format: Byte 1: Index into OBJ Tiles (override) Byte 2: Y subpixel Byte 3: Y pixel Byte 4: Y screen |
|
$7011E0 | 64 bytes | Sprite Table | 16 2-word entries, one ambient sprite per: Word 1: X speed Word 2: Y speed |
|
$701220 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: X speed Word 2: Y speed |
|
$701280 | 64 bytes | Sprite Table | 16 2-word entries, one ambient sprite per: Word 1: X delta, or pixels moved since last frame (curr X - prev X) Word 2: Y delta, or pixels moved since last frame (curr Y - prev Y) |
|
$7012C0 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: X delta, or pixels moved since last frame (curr X - prev X) Word 2: Y delta, or pixels moved since last frame (curr Y - prev Y) |
|
$701320 | 64 bytes | Sprite Table | 16 2-word entries, one ambient sprite per: Word 1: Ambient sprite ID (list of valid values with their names) Word 2: Pointer to first entry within OAM buffer |
|
$701360 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: Sprite ID (list of valid values with their names) Word 2: Pointer to first entry within OAM buffer |
|
$7013C0 | 64 bytes | Sprite Table | 16 2-word entries, one ambient sprite per: Word 1: Facing/direction: 00000yx0 y = Y flip x = X flip Word 2: Current animation frame |
|
$701400 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: Facing/direction: 00000yx0 y = Y flip x = X flip Note: Y-flip conventionally set by OAM mirror Word 2: Current animation frame (High byte is used as a special flag for shyguys when spat upwards) |
|
$701460 | 64 bytes | Sprite Table | 16 4-byte entries, one ambient sprite per: Byte 1: Stage-wide ID (is always $FF as ambient sprites do not respawn) Byte 2: Background layer # of ambient sprite (unused?) Byte 3: Ambient Sprite Prioirty (0-7) - higher means further back - $FF used to disable drawing Byte 4: 00 (unused) |
|
$7014A0 | 96 bytes | Sprite Table | 24 4-byte entries, one sprite per: Byte 1: Stage-wide ID ($FF means no respawn) Byte 2: Background layer # of sprite Byte 3: Sprite Prioirty (0-7) - higher means further back - $FF used to disable drawing Byte 4: 00 (unused) |
|
$701500 | 64 bytes | Sprite Table | 16 2-word entries, one ambient sprite per: Word 1: X acceleration (e.g. gravity, friction) Word 2: Y acceleration |
|
$701540 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: X acceleration (e.g. gravity, friction) Word 2: Y acceleration |
|
$7015A0 | 64 bytes | Sprite Table | 16 2-word entries, one ambient sprite per: Word 1: X acceleration ceiling (max speed for acceleration to apply) Word 2: Y acceleration ceiling |
|
$7015E0 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: X acceleration ceiling (max speed for acceleration to apply) Word 2: Y acceleration ceiling |
|
$701640 | 64 bytes | Sprite Table | 16 2-word entries, one ambient sprite per: Word 1: X coordinate relative to camera Word 2: Y coordinate relative to camera |
|
$701680 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: X coordinate relative to camera Word 2: Y coordinate relative to camera |
|
$7016E0 | 64 bytes | Sprite Table | 16 2-word entries, one ambient sprite per: Word 1: vertical terrain collision offset in pixels (signed) Word 2: Index into reserved dynamic tiles table, often used for SuperFX graphics ($FFFF means disabled) (unused for ambient sprites?) |
|
$701720 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: vertical terrain collision offset in pixels (signed) Word 2: Index into reserved dynamic tiles table, often used for SuperFX graphics ($FFFF means disabled) |
|
$701780 | 64 bytes | Sprite Table | 16 2-byte and 1-word entries, one ambient sprite per: Byte 1: 00 Byte 2: Timer, used for whatever that sprite needs. (unused in game?) Word 2: Timer, zero removes ambient sprite (every sprite?). Often used for duration of each animation. |
|
$7017C0 | 96 bytes | Sprite Table | 24 4-byte entries, one sprite per: Yoshi collision information: Byte 1: ?? Byte 2: Timer, used for whatever that sprite needs. Only sprite timer active during pause flags. (unused in game?) Byte 3: $00: Yoshi is to the left of the sprite; $02: Yoshi is to the right of the sprite Byte 4: $00: Yoshi is above the sprite; $02: Yoshi is below the sprite |
|
$701820 | 64 bytes | ASM | 16 4-byte entries, one ambient sprite per: Byte 1: ???????G (on ground flag) Byte 2: ?? Byte 3: init $FF, ? Byte 4: init $1F, ? |
|
$701860 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: Terrain collision flags, ???????? ????LRUD, high byte is unused; L = Left R = Right U = Up D = Down Word 2: Lava and water collision flag ???????? ??LW??? L = Lava W = Water |
|
$7018C0 | 64 bytes | Sprite Table | Wildcard table; 4 bytes per ambient sprite to be used as each one pleases (never initialized or cleared on spawn) | |
$701900 | 96 bytes | Sprite Table | Wildcard table; 4 bytes per sprite to be used as each one pleases. | |
$701970 | 2 bytes | Misc. | Random number generator (RNG) address, adds horizontal & vertical scanlines per sprite per frame | |
$701972 | 2 bytes | Misc. | Sprite slot # of sprite being currently processed | |
$701974 | 2 bytes | Timer | Frame counter, only counts when sprites are being processed - includes gamemodes $07, $0C (only in level fade-in), $0E, $0F, $10 (inside level, not score screen), $15, $39 Controls tileset animation |
|
$701976 | 96 bytes | Sprite Table | Wildcard table; 4 bytes per sprite to be used as each one pleases. Commonly used for AI state, graphical state, or other purposes. | |
$7019D6 | 96 bytes | Sprite Table | Wildcard table; 4 bytes per sprite to be used as each one pleases. Common usages: Byte 1: AI state Byte 2: Index for which Super FX graphic/animation frame Byte 3: "Next" animation frame Byte 4: Custom per sprite |
|
$701A36 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Super FX morphing values to be used as each Super FX sprite needs, most common is scale then rotation. |
|
$701A96 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Each word is a timer, used for whatever that sprite needs. Common uses are AI and skeletal animations. |
|
$701AF6 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Each word is a timer, used for whatever that sprite needs. (Additional general purpose timers if needed) |
|
$701B56 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: X offset for hitbox center Word 2: Y offset for hitbox center |
|
$701BB6 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: Width of hitbox from center (both sides) Word 2: Height of hitbox from center (top & bottom) |
|
$701C16 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: X distance from Yoshi (+ means to the right of Yoshi) Word 2: Y distance from Yoshi (+ means below Yoshi) |
|
$701C76 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: On collision with another sprite, X delta from that sprite (this X - that X) Word 2: On collision with another sprite, Y delta from that sprite (this Y - that Y) |
|
$701CD6 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: Hitbox X center position (X + offset) Word 2: Hitbox Y center position (Y + offset) |
|
$701D36 | 96 bytes | Sprite Table | 24 4-byte entries, one sprite per: Byte 1: Slot # of sprite currently colliding with + 1, $FF for Yoshi Byte 2: ?? (something with most recent collision) Byte 3: Collision state: $00 = May collide with Yoshi's body/tongue/other sprites, $01 = May not collide with Yoshi's body/other sprites but can be tongued, beyond $01 = Cannot collide with Yoshi/sprites, counts down until $01 to enable tongue collision Byte 4: ?? (used only for special purposes) |
|
$701D96 | 96 bytes | Sprite Table | 24 2-word entries, one sprite per: Word 1: Timer of being frozen from ice melon, counts down Word 2: Unused (most likely) |
|
$701DF6 | 2 bytes | Misc. | Size of current egg inventory in bytes (eggs/keys * 2) | |
$701DF8 | 12 bytes | Misc. | Current egg inventory sprite indices, 2 bytes per | |
$701E04 | 2 bytes | Misc. | Super Baby Mario timer: counts down | |
$701E06 | 1 byte | Misc. | "Show hidden items" flag | |
$701E08 | 2 bytes | Layer 1 Tilemap | Dynamic block bitflags: $0008: !-switch blocks on $0010: Baby Mario blocks on |
|
$701E0A | 2 bytes | Flag | Camera Y centers on Yoshi | |
$701E0C | 1 byte | Misc. | Camera X subpixel | |
$701E0D | 1 byte | Misc. | Camera X pixels moved this frame | |
$701E0E | 1 byte | Misc. | Camera Y subpixel | |
$701E0F | 1 byte | Misc. | Camera Y pixels moved this frame | |
$701E10 | 2 bytes | Misc. | Previous frame value for Yoshi's X subpixel | |
$701E12 | 2 bytes | Misc. | Previous frame value for Yoshi's X position | |
$701E14 | 2 bytes | Misc. | Previous frame value for Yoshi's Y subpixel | |
$701E16 | 2 bytes | Misc. | Previous frame value for Yoshi's Y position | |
$701E18 | 2 bytes | Misc. | Minimum left side camera X boundary (screen stoppers and other things can change this) | |
$701E1A | 2 bytes | Misc. | Maximum right side camera X boundary (screen stoppers and other things can change this) | |
$701E1C | 2 bytes | Misc. | Minimum upper camera Y boundary | |
$701E1E | 2 bytes | Misc. | Maximum lower camera Y boundary | |
$701E20 | 2 bytes | Misc. | Camera X window minimum (+ 24 = maximum), set to $30 if Yoshi facing right (left side) and $A8 for facing left (right side) | |
$701E22 | 2 bytes | Misc. | Camera Y window minimum (+ 8 = maximum), set to $10 for top, $A0 for bottom | |
$701E24 | 2 bytes | Misc. | Frame counter for pressing up/down buttons to scroll the screen up or down, increments, starts scrolling at $10 | |
$701E26 | 2 bytes | Misc. | X distance traveled by autoscroller, subpixel (high byte is spillage) | |
$701E28 | 2 bytes | Misc. | Current autoscroll X velocity, in pixels & subpixels | |
$701E2A | 2 bytes | Flag | Indicates that a camera event is active & pausing the game (stairs, flower vine, etc.) | |
$701E38 | 2 bytes | Misc. | Camera Y speed during camera event (stairs, etc.) | |
$701E3E | 2 bytes | Sprite Number | Sprite slot # (+ 1) of spinning 3D plank sprite (sprite ID $039) that Yoshi is currently standing on, $0000 if not standing on these | |
$701E40 | 2 bytes | Misc. | Current "angle" of the pseudo-3D platforms (e.g. falling walls, rolling logs) currently being processed. | |
$701E42 | 2 bytes | Misc. | X position of the pseudo-3D platform (e.g. falling walls, rolling logs) currently being processed + 8. | |
$701E48 | 2 bytes | Misc. | $0000: Baby Mario is on Yoshi's back, $FFFF: not | |
$701E4A | 2 bytes | Sprite Number | Overwrite ambient sprite slot # ($0000~$003C) to use when spawning an ambient and the tables are full, spawn at this slot - 4 (if < 0, wraparound to $003C) | |
$701ECC | 2 bytes | Super FX | Dynamic Super FX graphics tiles ($5C00-$5D00 VRAM) currently used/reserved, each bit corresponds to a 16x16 chunk within the full space, 1 means currently used, 0 means free Each nibble of this word corresponds to a 32x32 piece, and then row-major starting at top left, so the full thing is %1234123412341234 where: 1 = top left 2 = top right 3 = bottom left 4 = bottom right |
|
$701ECE | 32 bytes | Super FX | Sprites' dynamic Super FX graphics reserved chunks, 16 word-sized entries, each one represents which 16x16 chunks of graphics that a particular sprite personally has reserved for it, follows same format as $701ECC, acts as a mask so all 0 bits means this sprite is not using that chunk, the dynamic tile index indexes into this | |
$701EEE | 2 bytes | Misc. | Camera X offset value during Offset-Per-Tile mode | |
$701EF0 | 2 bytes | Misc. | Camera Y offset value during Offset-Per-Tile mode | |
$701EF2 | 64 bytes | Misc. | Offset per tile mode X offsets: 32 word-sized X offsets, one per screen 8-pixel row, starting at top of screen | |
$701F32 | 64 bytes | Misc. | Offset per tile mode Y offsets: 32 word-sized Y offsets, one per screen 8-pixel column, starting at left side of screen | |
$701F72 | 80 bytes | Layer 1 Tilemap | Effects table for wavy BG1 (like in 6-4 log ride lava), 20 4-byte entries, each entry represents a rectangle in the map which triggers the wavy effect: Byte 1: Leftmost X tile (all coordinates and sizes are 16 pixel tile regions of the entire area) of rectangle Byte 2: Topmost Y tile Byte 3: Width of rectangle - 1 Byte 4: Height - 1 NOTE: when triggered, X will be per-column but Y will activate for the entire height of the screen |
|
$701FE8 | 2 bytes | Timer | Timer for fuzzy dizzy effect, starts at $400 | |
$701FEA | 2 bytes | Player Physics | Cross section state, in conjunction with cross section flag: Upon entering: $0001: overlay fade out $0002: does nothing $0003: does nothing $0004: palette fading (unused?) $0005: done $0006: unused $0007: unused Upon leaving: $0001: does nothing $0002: palette fading (unused?) $0003: copy BG1 left tilemap $0004: copy BG1 right tilemap $0005: dump to BG3 $0006: overlay fade in $0007: done |
|
$701FEC | 2 bytes | Flag | Inside cross section: $0000: not inside, $0002: inside | |
$702000 | 512 bytes | Misc. | CGRAM mirror table (palettes) | |
$702200 | 1024 bytes | Misc. | Lookup table for function y = 1/x, mirrors $00E552-$00E951 Used by GSU to divide. It does not have a hardware divide so this lookup table is used instead. |
|
$702600 | 3 bytes | Misc. | Pointer to sprite level data for current level | |
$702604 | 32 bytes | Misc. | Newly spawned column of BG3 cross section tiles, SNES VRAM tilemap format ($01CE = blank tile) | |
$702624 | 32 bytes | Misc. | Mirror of $702604 | |
$702644 | 64 bytes | Misc. | Newly spawned row of BG3 cross section tiles, SNES VRAM tilemap format ($01CE = blank tile) | |
$7027CE | 252 bytes | Misc. | Newly spawned sprites this frame, up to 31 8-byte entries, with 4 bytes extra for a possible "end marker" (first word being negative indicates to go no further in the table): Word 1: Sprite ID (gets put into $701360) Word 2: X coordinate Word 3: Y coordinate Word 4: Stage ID, background layer, sprite priority (gets put into $7014A0) |
|
$7028CA | 256 bytes | Misc. | Stage sprites' spawning flags, 1-byte entries indexed by their stage ID ($00-$FF, same as in $7014A0 table): $00: Not spawned in currently, ready to spawn when column/row is reached $FF: Do not spawn: this either means the sprite is currently spawned in or is destroyed like enemy swallowed |
|
$7029CA | 2 bytes | Misc. | Pointer into next free entry of $7029CC table | |
$7029CC | 928 bytes | Misc. | Sprite interactive terrain buffer - mostly used for sprites that break sand, each sprite has 5 entries representing left, right, center, top, and bottom; room for up to 23 sprites, plus one additional entry; 8-byte entries: Word 1: X coordinate Word 2: Y coordinate Word 3: ??? Word 4: ??? |
|
$703372 | 420 bytes | Misc. | HDMA BG Scroll Buffer, gets copied to $7E5040 | |
$703516 | 420 bytes | Misc. | HDMA BG Scroll Buffer, gets copied to $7E51E4 | |
$703A02 | 840 bytes | Misc. | Window 1 & 2 (registers $2126-$2129) Buffer, gets copied to $7E56D0 | |
$704070 | 2 bytes | Misc. | Current message box data index | |
$70409E | 1024 bytes | Misc. | Table of MAP16 indices that represents the currently loaded two BG1 foreground tiles (two screens side by side, even & odd x-wise), orientation is based on scroll values | |
$70449E | 120 bytes | Misc. | Offset per tile moving object table, 20 6-byte entries, each entry represents a rectangle in the map which triggers an OPT effect that oscillates up & down (like 6-4 moving platforms): Byte 1: Leftmost X tile of rectangle (all coordinates and sizes are 8 pixel tile coords) Byte 2: Topmost Y tile Byte 3: Width of rectangle - 1 Byte 4: Height - 1 Byte 5: Amplitude of oscillation: # of pixels the object travels both up and down from its normal position in stage, this value is signed which indicates initial movement direction Byte 6: Current offset of object NOTE: when triggered, X will be per-column but Y will activate for the entire height of the screen |
|
$705800 | 8192 bytes | Misc. | Buffer used for decompressed file destination/pixel plotting destination; varies in size but up to 8kb | |
$707800 | 1024 bytes | Misc. | Practically free SRAM Only cleared on boot and all scenes with Island graphics |
|
$707C00 | 2 bytes | Misc. | Save file 1: # of lives (from last save) | |
$707C02 | 1 byte | Misc. | Save file 1: Last level beaten | |
$707C03 | 72 bytes | Misc. | Save file 1: Level high scores, 1 byte per map tile, format: csssssss, c = level completed, s = high score | |
$707C4B | 27 bytes | Misc. | Save file 1: Pause menu items, 1 byte per item, same format as $7E0357 | |
$707C66 | 1 byte | Misc. | Save file 1: Controller settings, same format as $700082 | |
$707C67 | 1 byte | Misc. | Save file 1: Tutorial message box bitflags, same format as $7E0372 | |
$707C68 | 2 bytes | Misc. | Save file 2: # of lives (from last save) | |
$707C6A | 1 byte | Misc. | Save file 2: Last level beaten | |
$707C6B | 72 bytes | Misc. | Save file 2: Level high scores, 1 byte per map tile, format: csssssss, c = level completed, s = high score | |
$707CB3 | 27 bytes | Misc. | Save file 2: Pause menu items, 1 byte per item, same format as $7E0357 | |
$707CCE | 1 byte | Misc. | Save file 2: Controller settings, same format as $700082 | |
$707CCF | 1 byte | Misc. | Save file 2: Tutorial message box bitflags, same format as $7E0372 | |
$707CD0 | 2 bytes | Misc. | Save file 3: # of lives (from last save) | |
$707CD2 | 1 byte | Misc. | Save file 3: Last level beaten | |
$707CD3 | 72 bytes | Misc. | Save file 3: Level high scores, 1 byte per map tile, format: csssssss, c = level completed, s = high score | |
$707D1B | 27 bytes | Misc. | Save file 3: Pause menu items, 1 byte per item, same format as $7E0357 | |
$707D36 | 1 byte | Misc. | Save file 3: Controller settings, same format as $700082 | |
$707D37 | 1 byte | Misc. | Save file 3: Tutorial message box bitflags, same format as $7E0372 | |
$707D38 | 104 bytes | Misc. | Backup of save file 1 | |
$707DA0 | 104 bytes | Misc. | Backup of save file 2 | |
$707E08 | 104 bytes | Misc. | Backup of save file 3 | |
$707E70 | 6 bytes | Misc. | Save file checksums: 2-byte ($7777 - checksum) of save files 1, 2, then 3 | |
$707E76 | 6 bytes | Misc. | Backup save file checksums: 2-byte ($7777 - checksum) of backup save files 1, 2, then 3 | |
$707E7C | 2 bytes | Misc. | Current / most recent save file loaded in ($0000, $0001, $0002) | |
$707E7E | 386 bytes | Misc. | Unused battery backed up Save RAM Won't get cleared or changed |
|
ROM Address | Length | Type | Description | Details |
$008000 | 85 bytes | ASM | This is the starting address for YI. This takes care of basic initialization such as disabling IRQ, HDMA, DMA, clearing the SPC ports, enabling F-blank, disabling emulation mode, disabling decimal mode, initializing the direct page, and setting up the stack, among other things. | |
$0080F8 | 56 bytes | Debug | Routine used for frame advance debug code. Enabled by tweak at $0080F7. See details for controls. | Controls |
$00816A | 207 bytes | Pointer | Gamemode subroutine table, 3 bytes per entry. | |
$008275 | 2 bytes | Empty | Empty (filled with FF) | |
$008288 | 35 bytes | Subroutine | JSL to copy a block of memory into RAM. Input: A: Size of the block $20-$22: RAM Destination $23-$25: DMA Source |
|
$0082D0 | 19 bytes | ASM | Copies SPC program | |
$0083CD | 34 bytes | Subroutine | Subroutine that handles fading effects. | |
$00841F | 140 bytes | Subroutine | Music uploader subroutine | |
$00851C | 16 bytes | Music | Item-Denial table for each music track: $01-$7F: disable items, $00 and $80-$FF: enable items | |
$008543 | 142 bytes | ASM | Music uploader controller | |
$0085D2 | 10 bytes | Subroutine | Subroutine that plays sound effects | |
$00B039 | 768 bytes | Graphics | List of sprite GFX file numbers (1 byte each) that make up each sprite set (6 files per set). | |
$00BFF6 | 10 bytes | Empty | Empty (filled with FF) | |
$00DE44 | 35 bytes | Super FX | Calls a Super FX routine, Register X = Bank, Register A = Address | |
$00E101 | 37 bytes | Subroutine | Kill Yoshi Subroutine. This one kills Yoshi as he was killed by lava. Note that this routine is copied into RAM so jump to $7EE101 if GSU is active. $00E10F is Yoshi's initial Y speed in the death animation. $00E0FD (4 bytes) is the X speed Yoshi has got in the death animation, for facing right and left. |
|
$00E552 | 1024 bytes | Table | Lookup table for function y = 1/x, copied into $702200-$7025FF (Used by GSU to divide. It does not have a hardware divide so this lookup table is used instead) | |
$00F7A9 | 2039 bytes | Empty | Empty (filled with FF) | |
$00FFA0 | 5 bytes | Misc. | ROM build date and time. On a U 1.0 ROM, it's 11:19 am on July 31st, 1995 | |
$00FFA5 | 11 bytes | Empty | Empty (filled with FF) | |
$00FFB0 | 2 bytes | Misc. | ROM registration: Maker code (ASCII): "01" (Nintendo) | |
$00FFB2 | 4 bytes | Misc. | ROM registration: Game code (ASCII): "YI " | |
$00FFB6 | 6 bytes | Misc. | ROM registration: reserved (all $00) | |
$00FFBC | 1 byte | Misc. | ROM registration: Expansion FLASH Size ($00 = none) | |
$00FFBD | 1 byte | Misc. | ROM registration: Super FX RAM size ($05 = 32KB) | |
$00FFBE | 1 byte | Misc. | ROM registration: Special version ($00 = not special) | |
$00FFBF | 1 byte | Misc. | ROM registration: Chipset sub-type ($00) | |
$00FFC0 | 21 bytes | Misc. | ROM header: Cartridge title (ASCII): "YOSHI'S ISLAND " | |
$00FFD5 | 1 byte | Misc. | ROM header: ROM Makeup ($20 = LoROM) | |
$00FFD6 | 1 byte | Misc. | ROM header: Chipset ($15 = ROM + SuperFX + RAM + SRAM) | |
$00FFD7 | 1 byte | Misc. | ROM header: ROM size ($0B = 2MB) | |
$00FFD8 | 1 byte | Misc. | ROM header: SRAM size | |
$00FFD9 | 1 byte | Misc. | ROM header: Region ($01 = NTSC) | |
$00FFDA | 1 byte | Misc. | ROM header: $33 (fixed value) | |
$00FFDB | 1 byte | Misc. | ROM header: Version ($00 = 1.0) | |
$00FFDC | 2 bytes | Misc. | ROM header: Checksum complement (inverted bits) | |
$00FFDE | 2 bytes | Misc. | ROM header: Checksum | |
$00FFE0 | 4 bytes | Misc. | 2 unused native vectors | |
$00FFE4 | 2 bytes | Misc. | Native COP vector (unused) | |
$00FFE6 | 2 bytes | Misc. | Native BRK vector (unused) | |
$00FFE8 | 2 bytes | Misc. | Native ABORT vector (unused) | |
$00FFEA | 2 bytes | Misc. | Native NMI vector (vblank) | |
$00FFEC | 2 bytes | Misc. | Native RESET vector (unused) | |
$00FFEE | 2 bytes | Misc. | Native IRQ vector | |
$00FFF0 | 4 bytes | Misc. | 2 unused emulation vectors | |
$00FFF4 | 2 bytes | Misc. | Emulation COP vector (unused) | |
$00FFF6 | 2 bytes | Misc. | Emulation BRK vector (unused) | |
$00FFF8 | 2 bytes | Misc. | Emulation ABORT vector (unused) | |
$00FFFA | 2 bytes | Misc. | Emulation NMI vector (unused) | |
$00FFFC | 2 bytes | Misc. | Emulation RESET vector | |
$00FFFE | 2 bytes | Misc. | Emulation IRQ vector (unused) | |
$028000 | 72 bytes | Sprite Palette | Yoshi colors used in-level. Arranged by translevel number. | |
$0280BD | 108 bytes | Sprite Palette | Falling wall palettes. Palettes are stored in individual colours, in the order blue value, green value and red value. It is indexed by the table at $0280B7 which in turn is indexed by the sprite palette and is copied to $70404A. | |
$02FFD7 | 41 bytes | Empty | Empty (filled with FF) | |
$038000 | 1326 bytes | Pointer | Long pointers to sprite init routines in sprite ID order ($000 - $1B9) | |
$03852E | 1326 bytes | Pointer | Long pointers to sprite main routines in sprite ID order ($000 - $1B9) | |
$038A5C | 1326 bytes | Pointer | Long pointers to sprite head bop routines in sprite ID order ($000 - $1B9) | |
$038F8A | 1326 bytes | Pointer | Long pointers to sprite riding Yoshi routines in sprite ID order ($000 - $1B9) | |
$03A364 | 300 bytes | Subroutine | Subroutine that spawns sprites | |
$03FEEE | 274 bytes | Empty | Empty (filled with FF) | |
$0489B8 | 8 bytes | Sprite Palette | Shy Guy Colors (Green, Red, Yellow, Pink) | |
$04AC9C | 29 bytes | Subroutine | Kill Yoshi Subroutine. This one kills Yoshi as he was killed by a spike. | |
$05C6FD | 16 bytes | Misc. | Table of '?' bucket rotation effects | |
$05FFC4 | 60 bytes | Empty | Empty (filled with FF) | |
$06FEAA | 342 bytes | Empty | Empty (filled with FF) | |
$07FF47 | 185 bytes | Empty | Empty (filled with FF) | |
$089FD0 | 48 bytes | Empty | Empty (filled with 01) | |
$09835F | 477 bytes | Super FX | Super FX routine which draws Yoshi (copies tiles to OAM and sets the graphics pointer). It also draws Yoshi's tongue. | |
$09AF70 | 206 bytes | Empty | Empty (filled with 01) | |
$09EDCE | 624 bytes | Empty | Empty (filled with 01) | |
$09F18F | 687 bytes | Empty | Empty (filled with 01) | |
$0AEC2B | 4 bytes | Player Physics | Yoshi max speed for acceleration to apply, for right and left. | |
$0B9787 | 121 bytes | Empty | Empty (filled with 01) | |
$0BF3B7 | 3145 bytes | Empty | Empty (filled with FF) | |
$0CDACA | 24 bytes | Sprite Palette | Color of Kamek's first magic spell; 2 bytes per boss battle. | |
$0CDAE2 | 24 bytes | Sprite Palette | Color of Kamek's second magic spell; 2 bytes per boss battle. | |
$0CDAFA | 12 bytes | Music | Music value used for each boss battle: $0A is x-4 boss music (or for level header music setting 7 or 8, $0A becomes the longer intro used in piranha & raven), and $0C is x-8 boss music | |
$0CFF69 | 151 bytes | Empty | Empty (filled with FF) | |
$0DFC83 | 893 bytes | Empty | Empty (filled with FF) | |
$0EA131 | 7 bytes | Subroutine | Barney Bubble init subroutine | |
$0EFF82 | 126 bytes | Empty | Empty (filled with FF) | |
$0FE056 | 6058 bytes | Empty | Empty (filled with FF) | |
$0FFC80 | 896 bytes | Misc. Tilemap | Tilemap for the Title Screen logo | |
$108B05 | 16 bytes | Level Data | Table (one byte entries): The number of bits to copy for each piece of variable-sized header information, in level header order. The final $00 marks the end. Used by $108B15. |
|
$108B15 | 72 bytes | Subroutine | Level header decompression routine: copies variable-sized pieces of header data into separate addresses in RAM starting at $7E0134 | |
$11B0FB | 4 bytes | Bandit Mini-Game | Table of distances that the Gather Coins cannon rotates | |
$11B0FF | 4 bytes | Bandit Mini-Game | Table of distances that the Gather Coins cannon and platform will move along the white track | |
$11B103 | 4 bytes | Bandit Mini-Game | Table of speeds that the Gather Coins cannon rotates | |
$15FFD3 | 45 bytes | Empty | Empty (filled with FF) | |
$1681C7 | 766 bytes | Level Data | Level $00: object data | |
$17B781 | 384 bytes | Map | X-coordinates for checkpoints along Yoshi's walking path after beating a level; 8 bytes per level | |
$17B901 | 384 bytes | Map | Y-coordinates for checkpoints along Yoshi's walking path after beating a level; 8 bytes per level | |
$17BDAE | 16 bytes | Map | X-coordinates of each Yoshi on the world 1 map | |
$17BDBE | 16 bytes | Map | X-coordinates of each Yoshi on the world 2 map | |
$17BDCE | 16 bytes | Map | X-coordinates of each Yoshi on the world 3 map | |
$17BDDE | 16 bytes | Map | X-coordinates of each Yoshi on the world 4 map | |
$17BDEE | 16 bytes | Map | X-coordinates of each Yoshi on the world 5 map | |
$17BDFE | 16 bytes | Map | X-coordinates of each Yoshi on the world 6 map | |
$17BE0E | 16 bytes | Map | Y-coordinates of each Yoshi on the world 1 map | |
$17BE1E | 16 bytes | Map | Y-coordinates of each Yoshi on the world 2 map | |
$17BE2E | 16 bytes | Map | Y-coordinates of each Yoshi on the world 3 map | |
$17BE3E | 16 bytes | Map | Y-coordinates of each Yoshi on the world 4 map | |
$17BE4E | 16 bytes | Map | Y-coordinates of each Yoshi on the world 5 map | |
$17BE5E | 16 bytes | Map | Y-coordinates of each Yoshi on the world 6 map | |
$17E18E | 10 bytes | Map | (X, X, Y, B, A) Button sequence that unlocks the Mini-Battle menu | |
$17F7C3 | 1332 bytes | Level Data | Level data long pointers, two per level, in translevel ID order ($00-$DD): First is header/object/screen exit (all in one) Second is sprite data |
|
$18B3F2 | 74280 bytes | Layer 1 Tilemap | MAP16 page tables: data is word-sized SNES VRAM tilemap, split up into pages $00-$A7 and then further into 8-byte (4-word) chunks representing a single 16x16 tile (4 8x8 entries together) | |
$20B0B6 | 15992 bytes | Sound Effect | Waves crashing on island (BRR) | |
$20EF2F | 2339 bytes | Sound Effect | Seagulls on island (BRR) | |
$21B3FB | 19461 bytes | Empty | Empty (filled with FF) | |
$229333 | 682 bytes | Text | Intro cutscene message box text: "This paradise is Yoshi's Island, where all the Yoshies live. They are all in an uproar over the baby that fell from the sky. Wait! The baby seems to know where he wants to go. The bonds between the twins informs each of them where the other one is. The Yoshies decide to carry the baby to his destination via a relay system. Now begins a new adventure for the Yoshies and Baby Mario." |
|
$229825 | 140 bytes | Text | "Hovering Jump" message box text (from Welcome level) | |
$2298C7 | 225 bytes | Text | "Making Eggs" message box text (from level 1-1) | |
$22C20B | 38 bytes | Text | "Try this stage again?" text | |
$22C248 | 47 bytes | Text | "Restart from the middle ring?" text | |
$22D348 | 44216 bytes | Empty | Empty (filled with FF) | |
$248000 | 32768 bytes | Graphics | Uncompressed tile graphics, 4bpp, 32 bytes per 8x8 tile, 1024 tiles | |
$258000 | 32768 bytes | Graphics | Uncompressed tile graphics, 4bpp, 32 bytes per 8x8 tile, 1024 tiles | |
$268000 | 32768 bytes | Graphics | Block of two 256x128 Super FX bitmaps, separated by high & low nibble (map screen icons) | |
$278000 | 16384 bytes | Graphics | Block of two 256x64 Super FX bitmaps, separated by high & low nibble (selection screen & bonus screen icons) | |
$27C000 | 16384 bytes | Graphics | Uncompressed tile graphics, 4bpp, 32 bytes per 8x8 tile, 512 tiles | |
$288000 | 32768 bytes | Graphics | Block of two 256x128 Super FX bitmaps, separated by high & low nibble | |
$298000 | 32768 bytes | Graphics | Block of two 256x128 Super FX bitmaps, separated by high & low nibble | |
$2A8000 | 32768 bytes | Graphics | Block of two 256x128 Super FX bitmaps, separated by high & low nibble | |
$2B8000 | 32768 bytes | Graphics | Block of two 256x128 Super FX bitmaps, separated by high & low nibble | |
$2C8000 | 32768 bytes | Graphics | Block of two 256x128 Super FX bitmaps, separated by high & low nibble (mostly island cutscene) | |
$2D8000 | 26624 bytes | Graphics | Uncompressed tile graphics, 2bpp, 16 bytes per 8x8 tile, 1664 tiles | |
$2DE800 | 6144 bytes | Graphics | Uncompressed tile graphics, 4bpp, 32 bytes per 8x8 tile, 192 tiles | |
$2E8000 | 15360 bytes | Graphics | Block of two 256x60 Super FX bitmaps, separated by high & low nibble (French & German icon graphics) | |
$2EBC00 | 3305 bytes | Graphics | LC_LZ1 file $000: 4bpp, 4kb | |
$2EC8E9 | 3186 bytes | Graphics | LC_LZ1 file $001: 4bpp, 4kb | |
$2ED55B | 3289 bytes | Graphics | LC_LZ1 file $002: 4bpp, 4kb | |
$2EE234 | 3191 bytes | Graphics | LC_LZ1 file $003: 4bpp, 4kb | |
$2EEEAB | 2638 bytes | Graphics | LC_LZ1 file $004: 4bpp, 4kb | |
$2EF8F9 | 2419 bytes | Graphics | LC_LZ1 file $005: 4bpp, 4kb | |
$2F826C | 2892 bytes | Graphics | LC_LZ1 file $006: 4bpp, 4kb | |
$2F8DB8 | 2970 bytes | Graphics | LC_LZ1 file $007: 4bpp, 4kb | |
$2F9952 | 3096 bytes | Graphics | LC_LZ1 file $008: 4bpp, 4kb | |
$2FA56A | 2401 bytes | Graphics | LC_LZ1 file $009: 4bpp, 4kb | |
$2FAECB | 2789 bytes | Graphics | LC_LZ1 file $00A: 4bpp, 4kb | |
$2FB9B0 | 2241 bytes | Graphics | LC_LZ1 file $00B: 4bpp, 4kb | |
$2FC271 | 3120 bytes | Graphics | LC_LZ1 file $00C: 4bpp, 4kb | |
$2FCEA1 | 3353 bytes | Graphics | LC_LZ1 file $00D: 4bpp, 4kb | |
$2FDBBA | 3232 bytes | Graphics | LC_LZ1 file $00E: 4bpp, 4kb | |
$2FE85A | 2925 bytes | Graphics | LC_LZ1 file $00F: 4bpp, 4kb | |
$2FF3C7 | 1175 bytes | Graphics | LC_LZ1 file $010: 2bpp, 2kb | |
$2FF85E | 1420 bytes | Graphics | LC_LZ1 file $011: 2bpp, 2kb | |
$2FFDEA | 1139 bytes | Graphics | LC_LZ1 file $012: 2bpp, 2kb | |
$30825D | 388 bytes | Graphics | LC_LZ1 file $013: 2bpp, 2kb | |
$3083E1 | 1269 bytes | Graphics | LC_LZ1 file $014: 2bpp, 2kb | |
$3088D6 | 911 bytes | Graphics | LC_LZ1 file $015: 2bpp, 2kb | |
$308C65 | 872 bytes | Graphics | LC_LZ1 file $016: 2bpp, 2kb | |
$308FCD | 1300 bytes | Graphics | LC_LZ1 file $017: 2bpp, 2kb | |
$3094E1 | 1611 bytes | Graphics | LC_LZ1 file $018: 2bpp, 2kb | |
$309B2C | 1198 bytes | Graphics | LC_LZ1 file $019: 2bpp, 2kb | |
$309FDA | 758 bytes | Graphics | LC_LZ1 file $01A: 2bpp, 2kb | |
$30A2D0 | 1422 bytes | Graphics | LC_LZ1 file $01B: 2bpp, 2kb | |
$30A85E | 1891 bytes | Graphics | LC_LZ1 file $01C: 2bpp, 2kb | |
$30AFC1 | 1569 bytes | Graphics | LC_LZ1 file $01D: 2bpp, 2kb | |
$30B5E2 | 1618 bytes | Graphics | LC_LZ1 file $01E: 2bpp, 2kb | |
$30BC34 | 994 bytes | Graphics | LC_LZ1 file $01F: 2bpp, 2kb | |
$30C016 | 1285 bytes | Graphics | LC_LZ1 file $020: 4bpp, 2kb | |
$30C51B | 1369 bytes | Graphics | LC_LZ1 file $021: 4bpp, 2kb | |
$30CA74 | 1355 bytes | Graphics | LC_LZ1 file $022: 4bpp, 2kb | |
$30CFBF | 2729 bytes | Graphics | LC_LZ1 file $023: 4bpp, 4kb | |
$30DA68 | 2863 bytes | Graphics | LC_LZ1 file $024: 4bpp, 4kb | |
$30E597 | 3192 bytes | Graphics | LC_LZ1 file $025: 4bpp, 4kb | |
$30F20F | 3090 bytes | Graphics | LC_LZ1 file $026: 4bpp, 4kb | |
$30FE21 | 1422 bytes | Graphics | LC_LZ1 file $027: 2bpp, 2kb | |
$3183AF | 1310 bytes | Graphics | LC_LZ1 file $028: 2bpp, 2kb | |
$3188CD | 1474 bytes | Graphics | LC_LZ1 file $029: 2bpp, 2kb | |
$318E8F | 1765 bytes | Graphics | LC_LZ1 file $02A: 2bpp, 2kb | |
$319574 | 1394 bytes | Graphics | LC_LZ1 file $02B: 2bpp, 2kb | |
$319AE6 | 617 bytes | Graphics | LC_LZ1 file $02C: 4bpp, 4kb | |
$319D4F | 629 bytes | Graphics | LC_LZ1 file $02D: 4bpp, 4kb | |
$319FC4 | 777 bytes | Graphics | LC_LZ1 file $02E: 4bpp, 4kb | |
$31A2CD | 773 bytes | Graphics | LC_LZ1 file $02F: 4bpp, 4kb | |
$31A5D2 | 3183 bytes | Graphics | LC_LZ1 file $030: 4bpp, 4kb | |
$31B241 | 3039 bytes | Graphics | LC_LZ1 file $031: 4bpp, 4kb | |
$31BE20 | 2930 bytes | Graphics | LC_LZ1 file $032: 4bpp, 4kb | |
$31C992 | 3554 bytes | Graphics | LC_LZ1 file $033: 4bpp, 4kb | |
$31D774 | 3325 bytes | Graphics | LC_LZ1 file $034: 4bpp, 4kb | |
$31E471 | 2498 bytes | Graphics | LC_LZ1 file $035: 4bpp, 4kb | |
$31EE33 | 2805 bytes | Graphics | LC_LZ1 file $036: 4bpp, 4kb | |
$31F928 | 2435 bytes | Graphics | LC_LZ1 file $037: 4bpp, 4kb | |
$3282AB | 3026 bytes | Graphics | LC_LZ1 file $038: 4bpp, 4kb | |
$328E7D | 3047 bytes | Graphics | LC_LZ1 file $039: 4bpp, 4kb | |
$329A64 | 3315 bytes | Graphics | LC_LZ1 file $03A: 4bpp, 4kb | |
$32A757 | 3291 bytes | Graphics | LC_LZ1 file $03B: 4bpp, 4kb | |
$32B432 | 3450 bytes | Graphics | LC_LZ1 file $03C: 4bpp, 4kb | |
$32C1AC | 3261 bytes | Graphics | LC_LZ1 file $03D: 4bpp, 4kb | |
$32CE69 | 2601 bytes | Graphics | LC_LZ1 file $03E: 4bpp, 4kb | |
$32D892 | 3162 bytes | Graphics | LC_LZ1 file $03F: 4bpp, 4kb | |
$32E4EC | 3413 bytes | Graphics | LC_LZ1 file $040: 4bpp, 4kb | |
$32F241 | 3283 bytes | Graphics | LC_LZ1 file $041: 4bpp, 4kb | |
$32FF14 | 2983 bytes | Graphics | LC_LZ1 file $042: 4bpp, 4kb | |
$338ABB | 3060 bytes | Graphics | LC_LZ1 file $043: 4bpp, 4kb | |
$3396AF | 1416 bytes | Graphics | LC_LZ1 file $044: 4bpp, 4kb | |
$339C37 | 2954 bytes | Graphics | LC_LZ1 file $045: 4bpp, 4kb | |
$33A7C1 | 3107 bytes | Graphics | LC_LZ1 file $046: 4bpp, 4kb | |
$33B3E4 | 3239 bytes | Graphics | LC_LZ1 file $047: 4bpp, 4kb | |
$33C08B | 3212 bytes | Graphics | LC_LZ1 file $048: 4bpp, 4kb | |
$33CD17 | 3093 bytes | Graphics | LC_LZ1 file $049: 4bpp, 4kb | |
$33D92C | 5234 bytes | Graphics | LC_LZ1 file $04A: 4bpp, 8kb | |
$33ED9E | 6182 bytes | Graphics | LC_LZ1 file $04B: 4bpp, 8kb | |
$3485C4 | 2929 bytes | Graphics | LC_LZ1 file $04C: 4bpp, 4kb | |
$349135 | 1646 bytes | Graphics | LC_LZ1 file $04D: 2bpp, 2kb | |
$3497A3 | 1354 bytes | Graphics | LC_LZ1 file $04E: 2bpp, 2kb | |
$349CED | 1647 bytes | Graphics | LC_LZ1 file $04F: 2bpp, 2kb | |
$34A35C | 1402 bytes | Graphics | LC_LZ1 file $050: 2bpp, 2kb | |
$34A8D6 | 1548 bytes | Graphics | LC_LZ1 file $051: 2bpp, 2kb | |
$34AEE2 | 1393 bytes | Graphics | LC_LZ1 file $052: 2bpp, 2kb | |
$34B453 | 1265 bytes | Graphics | LC_LZ1 file $053: 2bpp, 2kb | |
$34B944 | 1996 bytes | Graphics | LC_LZ1 file $054: 2bpp, 2kb | |
$34C110 | 1272 bytes | Graphics | LC_LZ1 file $055: 2bpp, 2kb | |
$34C608 | 1623 bytes | Graphics | LC_LZ1 file $056: 2bpp, 2kb | |
$34CC5F | 1863 bytes | Graphics | LC_LZ1 file $057: 2bpp, 2kb | |
$34D3A6 | 1375 bytes | Graphics | LC_LZ1 file $058: 2bpp, 2kb | |
$34D905 | 1312 bytes | Graphics | LC_LZ1 file $059: 2bpp, 2kb | |
$34DE25 | 1660 bytes | Graphics | LC_LZ1 file $05A: 2bpp, 2kb | |
$34E4A1 | 1201 bytes | Graphics | LC_LZ1 file $05B: 2bpp, 2kb | |
$34E952 | 1174 bytes | Graphics | LC_LZ1 file $05C: 2bpp, 2kb | |
$34EDE8 | 1413 bytes | Graphics | LC_LZ1 file $05D: 4bpp, 2kb | |
$34F36D | 1575 bytes | Graphics | LC_LZ1 file $05E: 4bpp, 2kb | |
$34F994 | 3508 bytes | Graphics | LC_LZ1 file $05F: 4bpp, 4kb | |
$358748 | 2831 bytes | Graphics | LC_LZ1 file $060: 4bpp, 4kb | |
$359257 | 1417 bytes | Graphics | LC_LZ1 file $061: 2bpp, 2kb | |
$3597E0 | 1117 bytes | Graphics | LC_LZ1 file $062: 2bpp, 2kb | |
$359C3D | 1202 bytes | Graphics | LC_LZ1 file $063: 2bpp, 2kb | |
$35A0EF | 1643 bytes | Graphics | LC_LZ1 file $064: 2bpp, 2kb | |
$35A75A | 1510 bytes | Graphics | LC_LZ1 file $065: 2bpp, 2kb | |
$35AD40 | 1097 bytes | Graphics | LC_LZ1 file $066: 2bpp, 2kb | |
$35B189 | 1191 bytes | Graphics | LC_LZ1 file $067: 2bpp, 2kb | |
$35B630 | 1565 bytes | Graphics | LC_LZ1 file $068: 2bpp, 2kb | |
$35BC4D | 3716 bytes | Graphics | LC_LZ1 file $069: 4bpp, 4kb | |
$35CAD1 | 3777 bytes | Graphics | LC_LZ1 file $06A: 4bpp, 4kb | |
$35D992 | 3598 bytes | Graphics | LC_LZ1 file $06B: 4bpp, 4kb | |
$35E7A0 | 2869 bytes | Graphics | LC_LZ1 file $06C: 4bpp, 4kb | |
$35F2D5 | 2899 bytes | Graphics | LC_LZ1 file $06D: 4bpp, 4kb | |
$35FE28 | 1432 bytes | Graphics | LC_LZ1 file $06E: 4bpp, 2kb | |
$3683C0 | 1292 bytes | Graphics | LC_LZ1 file $06F: 4bpp, 2kb | |
$3688CC | 968 bytes | Graphics | LC_LZ1 file $070: 4bpp, 2kb | |
$368C94 | 1417 bytes | Graphics | LC_LZ1 file $071: 2bpp, 2kb | |
$36921D | 1412 bytes | Graphics | LC_LZ1 file $072: 2bpp, 2kb | |
$3697A1 | 644 bytes | Graphics | LC_LZ1 file $073: tilemap, 2kb | |
$369A25 | 669 bytes | Graphics | LC_LZ1 file $074: tilemap, 2kb | |
$369CC2 | 918 bytes | Graphics | LC_LZ1 file $075: tilemap, 2kb | |
$36A058 | 715 bytes | Graphics | LC_LZ1 file $076: tilemap, 2kb | |
$36A323 | 696 bytes | Graphics | LC_LZ1 file $077: tilemap, 2kb | |
$36A5DB | 436 bytes | Graphics | LC_LZ1 file $078: tilemap, 2kb | |
$36A78F | 291 bytes | Graphics | LC_LZ1 file $079: tilemap, 2kb | |
$36A8B2 | 401 bytes | Graphics | LC_LZ1 file $07A: tilemap, 2kb | |
$36AA43 | 360 bytes | Graphics | LC_LZ1 file $07B: tilemap, 2kb | |
$36ABAB | 766 bytes | Graphics | LC_LZ1 file $07C: tilemap, 4kb | |
$36AEA9 | 1038 bytes | Graphics | LC_LZ1 file $07D: tilemap, 4kb | |
$36B2B7 | 780 bytes | Graphics | LC_LZ1 file $07E: tilemap, 4kb | |
$36B5C3 | 895 bytes | Graphics | LC_LZ1 file $07F: tilemap, 4kb | |
$36B942 | 807 bytes | Graphics | LC_LZ1 file $080: tilemap, 4kb | |
$36BC69 | 1115 bytes | Graphics | LC_LZ1 file $081: tilemap, 4kb | |
$36C0C4 | 1207 bytes | Graphics | LC_LZ1 file $082: tilemap, 4kb | |
$36C57B | 956 bytes | Graphics | LC_LZ1 file $083: tilemap, 4kb | |
$36C937 | 1105 bytes | Graphics | LC_LZ1 file $084: tilemap, 4kb | |
$36CD88 | 1121 bytes | Graphics | LC_LZ1 file $085: tilemap, 4kb | |
$36D1E9 | 1076 bytes | Graphics | LC_LZ1 file $086: tilemap, 4kb | |
$36D61D | 1062 bytes | Graphics | LC_LZ1 file $087: tilemap, 4kb | |
$36DA43 | 930 bytes | Graphics | LC_LZ1 file $088: tilemap, 4kb | |
$36DDE5 | 605 bytes | Graphics | LC_LZ1 file $089: tilemap, 4kb | |
$36E042 | 558 bytes | Graphics | LC_LZ1 file $08A: tilemap, 4kb | |
$36E270 | 470 bytes | Graphics | LC_LZ1 file $08B: tilemap, 4kb | |
$36E446 | 722 bytes | Graphics | LC_LZ1 file $08C: tilemap, 4kb | |
$36E718 | 653 bytes | Graphics | LC_LZ1 file $08D: tilemap, 4kb | |
$36E9A5 | 609 bytes | Graphics | LC_LZ1 file $08E: tilemap, 4kb | |
$36EC06 | 470 bytes | Graphics | LC_LZ1 file $08F: tilemap, 4kb | |
$36EDDC | 729 bytes | Graphics | LC_LZ1 file $090: tilemap, 4kb | |
$36F0B5 | 684 bytes | Graphics | LC_LZ1 file $091: tilemap, 4kb | |
$36F361 | 586 bytes | Graphics | LC_LZ1 file $092: tilemap, 4kb | |
$36F5AB | 581 bytes | Graphics | LC_LZ1 file $093: tilemap, 4kb | |
$36F7F0 | 691 bytes | Graphics | LC_LZ1 file $094: tilemap, 4kb | |
$36FAA3 | 230 bytes | Graphics | LC_LZ1 file $095: tilemap, 1kb | |
$36FB89 | 399 bytes | Graphics | LC_LZ1 file $096: tilemap, 2kb | |
$36FD18 | 420 bytes | Graphics | LC_LZ1 file $097: tilemap, 2kb | |
$36FEBC | 436 bytes | Graphics | LC_LZ1 file $098: tilemap, 2kb | |
$378070 | 855 bytes | Graphics | LC_LZ1 file $099: tilemap, 2kb | |
$3783C7 | 473 bytes | Graphics | LC_LZ1 file $09A: tilemap, 4kb | |
$3785A0 | 1654 bytes | Graphics | LC_LZ1 file $09B: tilemap, 4kb | |
$378C16 | 207 bytes | Graphics | LC_LZ1 file $09C: tilemap, 2kb | |
$378CE5 | 170 bytes | Graphics | LC_LZ1 file $09D: tilemap, 2kb | |
$378D8F | 170 bytes | Graphics | LC_LZ1 file $09E: tilemap, 2kb | |
$378E39 | 297 bytes | Graphics | LC_LZ1 file $09F: tilemap, 2kb | |
$378F62 | 535 bytes | Graphics | LC_LZ1 file $0A0: tilemap, 2kb | |
$379179 | 296 bytes | Graphics | LC_LZ1 file $0A1: tilemap, 2kb | |
$3792A1 | 12 bytes | Graphics | LC_LZ1 file $0A2: tilemap, 2kb | |
$3792AD | 271 bytes | Graphics | LC_LZ1 file $0A3: tilemap, 2kb | |
$3793BC | 12 bytes | Graphics | LC_LZ1 file $0A4: tilemap, 2kb | |
$3793C8 | 249 bytes | Graphics | LC_LZ1 file $0A5: tilemap, 2kb | |
$3794C1 | 199 bytes | Graphics | LC_LZ1 file $0A6: tilemap, 2kb | |
$379588 | 225 bytes | Graphics | LC_LZ1 file $0A7: tilemap, 2kb | |
$379669 | 965 bytes | Graphics | LC_LZ1 file $0A8: tilemap, 4kb | |
$379A2E | 455 bytes | Graphics | LC_LZ1 file $0A9: tilemap, 2kb | |
$379BF5 | 851 bytes | Graphics | LC_LZ1 file $0AA: tilemap, 2kb | |
$379F48 | 630 bytes | Graphics | LC_LZ1 file $0AB: tilemap, $300 | |
$37A1BE | 583 bytes | Graphics | LC_LZ1 file $0AC: tilemap, $300 | |
$37A405 | 672 bytes | Graphics | LC_LZ1 file $0AD: tilemap, $300 | |
$37A6A5 | 761 bytes | Graphics | LC_LZ1 file $0AE: tilemap, $340 | |
$37A99E | 944 bytes | Graphics | LC_LZ1 file $0AF: tilemap, 2kb | |
$37AD4E | 213 bytes | Graphics | LC_LZ1 file $0B0: tilemap, 2kb | |
$37AE23 | 3234 bytes | Graphics | LC_LZ1 file $0B1: tilemap, 4kb | |
$37BAC5 | 898 bytes | Graphics | LC_LZ1 file $0B2: tilemap, 4kb | |
$37BE47 | 1579 bytes | Graphics | LC_LZ1 file $0B3: tilemap, 2kb | |
$37C472 | 1741 bytes | Graphics | LC_LZ1 file $0B4: tilemap, 2kb | |
$37CB3F | 1570 bytes | Graphics | LC_LZ1 file $0B5: tilemap, 2kb | |
$37D161 | 1568 bytes | Graphics | LC_LZ1 file $0B6: tilemap, 2kb | |
$37D781 | 1300 bytes | Graphics | LC_LZ1 file $0B7: tilemap, 2kb | |
$37DC95 | 1206 bytes | Graphics | LC_LZ1 file $0B8: tilemap, 2kb | |
$37E14B | 1691 bytes | Graphics | LC_LZ1 file $0B9: tilemap, 2kb | |
$37E7E6 | 1527 bytes | Graphics | LC_LZ1 file $0BA: tilemap, 2kb | |
$37EDDD | 1510 bytes | Graphics | LC_LZ1 file $0BB: tilemap, 2kb | |
$37F3C3 | 1475 bytes | Graphics | LC_LZ1 file $0BC: tilemap, 2kb | |
$37F986 | 802 bytes | Graphics | LC_LZ1 file $0BD: tilemap, 4kb | |
$37FCA8 | 3050 bytes | Graphics | LC_LZ1 file $0BE: tilemap, 4kb | |
$388892 | 856 bytes | Graphics | LC_LZ1 file $0BF: tilemap, 4kb | |
$388BEA | 1763 bytes | Graphics | LC_LZ1 file $0C0: tilemap, 4kb | |
$3892CD | 397 bytes | Graphics | LC_LZ1 file $0C1: tilemap, 4kb | |
$38945A | 1340 bytes | Graphics | LC_LZ1 file $0C2: tilemap, 4kb | |
$389996 | 612 bytes | Graphics | LC_LZ1 file $0C3: tilemap, 4kb | |
$389BFA | 424 bytes | Graphics | LC_LZ1 file $0C4: tilemap, 4kb | |
$389DA2 | 305 bytes | Graphics | LC_LZ1 file $0C5: tilemap, 4kb | |
$389ED3 | 1511 bytes | Graphics | LC_LZ1 file $0C6: tilemap, 4kb | |
$38A4BA | 414 bytes | Graphics | LC_LZ1 file $0C7: tilemap, 4kb | |
$38A658 | 600 bytes | Graphics | LC_LZ1 file $0C8: tilemap, 4kb | |
$38A8B0 | 493 bytes | Graphics | LC_LZ1 file $0C9: tilemap, 4kb | |
$38AA9D | 2416 bytes | Graphics | LC_LZ1 file $0CA: tilemap, 4kb | |
$38B40D | 312 bytes | Graphics | LC_LZ1 file $0CB: tilemap, 4kb | |
$38B545 | 1259 bytes | Graphics | LC_LZ1 file $0CC: tilemap, 4kb | |
$38BA30 | 761 bytes | Graphics | LC_LZ1 file $0CD: tilemap, 4kb | |
$38BD29 | 433 bytes | Graphics | LC_LZ1 file $0CE: tilemap, 4kb | |
$38BEDA | 1185 bytes | Graphics | LC_LZ1 file $0CF: tilemap, 4kb | |
$38C37B | 918 bytes | Graphics | LC_LZ1 file $0D0: tilemap, 4kb | |
$38C711 | 505 bytes | Graphics | LC_LZ1 file $0D1: tilemap, 4kb | |
$38C90A | 1953 bytes | Graphics | LC_LZ1 file $0D2: tilemap, 4kb | |
$38D0AB | 641 bytes | Graphics | LC_LZ1 file $0D3: tilemap, 4kb | |
$38D32C | 1019 bytes | Graphics | LC_LZ1 file $0D4: tilemap, 4kb | |
$38D727 | 20 bytes | Graphics | LC_LZ1 file $0D5: tilemap, 4kb | |
$38D73B | 254 bytes | Graphics | LC_LZ1 file $0D6: tilemap, 4kb | |
$38D839 | 1130 bytes | Graphics | LC_LZ1 file $0D7: tilemap, 4kb | |
$38DCA3 | 117 bytes | Graphics | LC_LZ1 file $0D8: tilemap, 1kb | |
$38DD18 | 1072 bytes | Graphics | LC_LZ1 file $0D9: tilemap, 4kb | |
$38E148 | 624 bytes | Graphics | LC_LZ1 file $0DA: tilemap, 4kb | |
$38E3B8 | 405 bytes | Graphics | LC_LZ1 file $0DB: tilemap, 4kb | |
$38E54D | 23 bytes | Graphics | LC_LZ1 file $0DC: tilemap, 2kb | |
$38E564 | 556 bytes | Graphics | LC_LZ1 file $0DD: tilemap, 2kb | |
$38E790 | 533 bytes | Graphics | LC_LZ1 file $0DE: tilemap, 2kb | |
$38E9A5 | 631 bytes | Graphics | LC_LZ1 file $0DF: tilemap, 2kb | |
$38EC1C | 510 bytes | Graphics | LC_LZ1 file $0E0: tilemap, 2kb | |
$38EE1A | 12 bytes | Graphics | LC_LZ1 file $0E1: tilemap, 2kb | |
$38EE26 | 12 bytes | Graphics | LC_LZ1 file $0E2: tilemap, 2kb | |
$38EE32 | 12 bytes | Graphics | LC_LZ1 file $0E3: tilemap, 2kb | |
$38EE3E | 581 bytes | Graphics | LC_LZ1 file $0E4: tilemap, 2kb | |
$38F083 | 237 bytes | Graphics | LC_LZ1 file $0E5: tilemap, 2kb | |
$38F170 | 962 bytes | Graphics | LC_LZ1 file $0E6: tilemap, 2kb | |
$38F532 | 592 bytes | Graphics | LC_LZ1 file $0E7: tilemap, 2kb | |
$38F782 | 722 bytes | Graphics | LC_LZ1 file $0E8: tilemap, 2kb | |
$38FA54 | 492 bytes | Graphics | LC_LZ1 file $0E9: tilemap, 2kb | |
$38FC40 | 349 bytes | Graphics | LC_LZ1 file $0EA: tilemap, 2kb | |
$38FD9D | 566 bytes | Graphics | LC_LZ1 file $0EB: tilemap, 2kb | |
$38FFD3 | 1290 bytes | Graphics | LC_LZ1 file $0EC: tilemap, 2kb | |
$3984DD | 17 bytes | Graphics | LC_LZ1 file $0ED: tilemap, 2kb | |
$3984EE | 357 bytes | Graphics | LC_LZ1 file $0EE: tilemap, 2kb | |
$398653 | 150 bytes | Graphics | LC_LZ1 file $0EF: tilemap, 2kb | |
$3986E9 | 425 bytes | Graphics | LC_LZ1 file $0F0: tilemap, 2kb | |
$398892 | 462 bytes | Graphics | LC_LZ1 file $0F1: tilemap, 2kb | |
$398A60 | 836 bytes | Graphics | LC_LZ1 file $0F2: tilemap, 2kb | |
$398DA4 | 34 bytes | Graphics | LC_LZ1 file $0F3: tilemap, 1kb | |
$398DC6 | 304 bytes | Graphics | LC_LZ1 file $0F4: tilemap, 2kb | |
$398EF6 | 302 bytes | Graphics | LC_LZ1 file $0F5: tilemap, 2kb | |
$399024 | 164 bytes | Graphics | LC_LZ1 file $0F6: tilemap, 2kb | |
$3990C8 | 910 bytes | Graphics | LC_LZ1 file $0F7: tilemap, 2kb | |
$399456 | 119 bytes | Graphics | LC_LZ1 file $0F8: tilemap, 2kb | |
$3994CD | 727 bytes | Graphics | LC_LZ1 file $0F9: tilemap, 2kb | |
$3997A4 | 121 bytes | Graphics | LC_LZ1 file $0FA: tilemap, 1kb | |
$39981D | 182 bytes | Graphics | LC_LZ1 file $0FB: tilemap, 2kb | |
$3998D3 | 494 bytes | Graphics | LC_LZ1 file $0FC: tilemap, 2kb | |
$399AC1 | 656 bytes | Graphics | LC_LZ1 file $0FD: tilemap, 2kb | |
$399D51 | 1035 bytes | Graphics | LC_LZ1 file $0FE: tilemap, 2kb | |
$39A15C | 959 bytes | Graphics | LC_LZ1 file $0FF: tilemap, 2kb | |
$39A51B | 271 bytes | Graphics | LC_LZ1 file $100: tilemap, 2kb | |
$39A62A | 506 bytes | Graphics | LC_LZ1 file $101: tilemap, 2kb | |
$39A824 | 1166 bytes | Graphics | LC_LZ1 file $102: tilemap, 2kb | |
$39ACB2 | 645 bytes | Graphics | LC_LZ1 file $103: tilemap, 2kb | |
$39AF37 | 889 bytes | Graphics | LC_LZ1 file $104: tilemap, 2kb | |
$39B2B0 | 616 bytes | Graphics | LC_LZ1 file $105: tilemap, 2kb | |
$39B518 | 515 bytes | Graphics | LC_LZ1 file $106: tilemap, 2kb | |
$39B71B | 526 bytes | Graphics | LC_LZ1 file $107: tilemap, 2kb | |
$39B929 | 352 bytes | Graphics | LC_LZ1 file $108: tilemap, 2kb | |
$39BA89 | 2233 bytes | Graphics | LC_LZ16 file $000: 4bpp, 4kb | |
$39C342 | 2050 bytes | Graphics | LC_LZ16 file $001: 4bpp, 4kb | |
$39CB44 | 2861 bytes | Graphics | LC_LZ16 file $002: 4bpp, 4kb | |
$39D671 | 2389 bytes | Graphics | LC_LZ16 file $003: 4bpp, 4kb | |
$39DFC6 | 1642 bytes | Graphics | LC_LZ16 file $004: 4bpp, 4kb | |
$39E630 | 2225 bytes | Graphics | LC_LZ16 file $005: 4bpp, 4kb | |
$39EEE1 | 1173 bytes | Graphics | LC_LZ16 file $006: 4bpp, 4kb | |
$39F376 | 1448 bytes | Graphics | LC_LZ16 file $007: 4bpp, 4kb | |
$39F91E | 1517 bytes | Graphics | LC_LZ16 file $008: 4bpp, 4kb | |
$39FF0B | 1506 bytes | Graphics | LC_LZ16 file $009: 4bpp, 4kb | |
$3A84ED | 2814 bytes | Graphics | LC_LZ16 file $00A: 4bpp, 4kb | |
$3A8FEB | 2084 bytes | Graphics | LC_LZ16 file $00B: 4bpp, 4kb | |
$3A980F | 2032 bytes | Graphics | LC_LZ16 file $00C: 4bpp, 4kb | |
$3A9FFF | 1759 bytes | Graphics | LC_LZ16 file $00D: 4bpp, 4kb | |
$3AA6DE | 2187 bytes | Graphics | LC_LZ16 file $00E: 4bpp, 4kb | |
$3AAF69 | 1458 bytes | Graphics | LC_LZ16 file $00F: 4bpp, 4kb | |
$3AB51B | 1354 bytes | Graphics | LC_LZ16 file $010: 4bpp, 4kb | |
$3ABA65 | 1301 bytes | Graphics | LC_LZ16 file $011: 4bpp, 4kb | |
$3ABF7A | 214 bytes | Graphics | LC_LZ16 file $012: 4bpp, 1kb | |
$3AC050 | 1664 bytes | Graphics | LC_LZ16 file $013: 4bpp, 4kb | |
$3AC6D0 | 1219 bytes | Graphics | LC_LZ16 file $014: 4bpp, 4kb | |
$3ACB93 | 1418 bytes | Graphics | LC_LZ16 file $015: 4bpp, 4kb | |
$3AD11D | 1745 bytes | Graphics | LC_LZ16 file $016: 4bpp, 4kb | |
$3AD7EE | 1356 bytes | Graphics | LC_LZ16 file $017: 4bpp, 4kb | |
$3ADD3A | 1839 bytes | Graphics | LC_LZ16 file $018: 4bpp, 4kb | |
$3AE469 | 1638 bytes | Graphics | LC_LZ16 file $019: 4bpp, 4kb | |
$3AEACF | 458 bytes | Graphics | LC_LZ16 file $01A: 4bpp, 1kb | |
$3AEC99 | 275 bytes | Graphics | LC_LZ16 file $01B: 4bpp, 1kb | |
$3AEDAC | 246 bytes | Graphics | LC_LZ16 file $01C: 4bpp, 1kb | |
$3AEEA2 | 401 bytes | Graphics | LC_LZ16 file $01D: 4bpp, 1kb | |
$3AF033 | 600 bytes | Graphics | LC_LZ16 file $01E: 4bpp, 1kb | |
$3AF28B | 475 bytes | Graphics | LC_LZ16 file $01F: 4bpp, 1kb | |
$3AF466 | 445 bytes | Graphics | LC_LZ16 file $020: 4bpp, 1kb | |
$3AF623 | 493 bytes | Graphics | LC_LZ16 file $021: 4bpp, 1kb | |
$3AF810 | 427 bytes | Graphics | LC_LZ16 file $022: 4bpp, 1kb | |
$3AF9BB | 373 bytes | Graphics | LC_LZ16 file $023: 4bpp, 1kb | |
$3AFB30 | 341 bytes | Graphics | LC_LZ16 file $024: 4bpp, 1kb | |
$3AFC85 | 466 bytes | Graphics | LC_LZ16 file $025: 4bpp, 1kb | |
$3AFE57 | 588 bytes | Graphics | LC_LZ16 file $026: 4bpp, 1kb | |
$3B80A3 | 549 bytes | Graphics | LC_LZ16 file $027: 4bpp, 1kb | |
$3B82C8 | 403 bytes | Graphics | LC_LZ16 file $028: 4bpp, 1kb | |
$3B845B | 601 bytes | Graphics | LC_LZ16 file $029: 4bpp, 1kb | |
$3B86B4 | 324 bytes | Graphics | LC_LZ16 file $02A: 4bpp, 1kb | |
$3B87F8 | 408 bytes | Graphics | LC_LZ16 file $02B: 4bpp, 1kb | |
$3B8990 | 435 bytes | Graphics | LC_LZ16 file $02C: 4bpp, 1kb | |
$3B8B43 | 490 bytes | Graphics | LC_LZ16 file $02D: 4bpp, 1kb | |
$3B8D2D | 316 bytes | Graphics | LC_LZ16 file $02E: 4bpp, 1kb | |
$3B8E69 | 349 bytes | Graphics | LC_LZ16 file $02F: 4bpp, 1kb | |
$3B8FC6 | 306 bytes | Graphics | LC_LZ16 file $030: 4bpp, 1kb | |
$3B90F8 | 330 bytes | Graphics | LC_LZ16 file $031: 4bpp, 1kb | |
$3B9242 | 379 bytes | Graphics | LC_LZ16 file $032: 4bpp, 1kb | |
$3B93BD | 365 bytes | Graphics | LC_LZ16 file $033: 4bpp, 1kb | |
$3B952A | 370 bytes | Graphics | LC_LZ16 file $034: 4bpp, 1kb | |
$3B969C | 596 bytes | Graphics | LC_LZ16 file $035: 4bpp, 1kb | |
$3B98F0 | 508 bytes | Graphics | LC_LZ16 file $036: 4bpp, 1kb | |
$3B9AEC | 349 bytes | Graphics | LC_LZ16 file $037: 4bpp, 1kb | |
$3B9C49 | 381 bytes | Graphics | LC_LZ16 file $038: 4bpp, 1kb | |
$3B9DC6 | 564 bytes | Graphics | LC_LZ16 file $039: 4bpp, 1kb | |
$3B9FFA | 407 bytes | Graphics | LC_LZ16 file $03A: 4bpp, 1kb | |
$3BA191 | 504 bytes | Graphics | LC_LZ16 file $03B: 4bpp, 1kb | |
$3BA389 | 429 bytes | Graphics | LC_LZ16 file $03C: 4bpp, 1kb | |
$3BA536 | 478 bytes | Graphics | LC_LZ16 file $03D: 4bpp, 1kb | |
$3BA714 | 588 bytes | Graphics | LC_LZ16 file $03E: 4bpp, 1kb | |
$3BA960 | 505 bytes | Graphics | LC_LZ16 file $03F: 4bpp, 1kb | |
$3BAB59 | 408 bytes | Graphics | LC_LZ16 file $040: 4bpp, 1kb | |
$3BACF1 | 387 bytes | Graphics | LC_LZ16 file $041: 4bpp, 1kb | |
$3BAE74 | 326 bytes | Graphics | LC_LZ16 file $042: 4bpp, 1kb | |
$3BAFBA | 313 bytes | Graphics | LC_LZ16 file $043: 4bpp, 1kb | |
$3BB0F3 | 558 bytes | Graphics | LC_LZ16 file $044: 4bpp, 1kb | |
$3BB321 | 362 bytes | Graphics | LC_LZ16 file $045: 4bpp, 1kb | |
$3BB48B | 357 bytes | Graphics | LC_LZ16 file $046: 4bpp, 1kb | |
$3BB5F0 | 542 bytes | Graphics | LC_LZ16 file $047: 4bpp, 1kb | |
$3BB80E | 560 bytes | Graphics | LC_LZ16 file $048: 4bpp, 1kb | |
$3BBA3E | 483 bytes | Graphics | LC_LZ16 file $049: 4bpp, 1kb | |
$3BBC21 | 416 bytes | Graphics | LC_LZ16 file $04A: 4bpp, 1kb | |
$3BBDC1 | 363 bytes | Graphics | LC_LZ16 file $04B: 4bpp, 1kb | |
$3BBF2C | 435 bytes | Graphics | LC_LZ16 file $04C: 4bpp, 1kb | |
$3BC0DF | 269 bytes | Graphics | LC_LZ16 file $04D: 4bpp, 1kb | |
$3BC1EC | 515 bytes | Graphics | LC_LZ16 file $04E: 4bpp, 1kb | |
$3BC3EF | 413 bytes | Graphics | LC_LZ16 file $04F: 4bpp, 1kb | |
$3BC58C | 383 bytes | Graphics | LC_LZ16 file $050: 4bpp, 1kb | |
$3BC70B | 378 bytes | Graphics | LC_LZ16 file $051: 4bpp, 1kb | |
$3BC885 | 194 bytes | Graphics | LC_LZ16 file $052: 4bpp, 1kb | |
$3BC947 | 247 bytes | Graphics | LC_LZ16 file $053: 4bpp, 1kb | |
$3BCA3E | 496 bytes | Graphics | LC_LZ16 file $054: 4bpp, 1kb | |
$3BCC2E | 509 bytes | Graphics | LC_LZ16 file $055: 4bpp, 1kb | |
$3BCE2B | 436 bytes | Graphics | LC_LZ16 file $056: 4bpp, 1kb | |
$3BCFDF | 314 bytes | Graphics | LC_LZ16 file $057: 4bpp, 1kb | |
$3BD119 | 365 bytes | Graphics | LC_LZ16 file $058: 4bpp, 1kb | |
$3BD286 | 447 bytes | Graphics | LC_LZ16 file $059: 4bpp, 1kb | |
$3BD445 | 438 bytes | Graphics | LC_LZ16 file $05A: 4bpp, 1kb | |
$3BD5FB | 459 bytes | Graphics | LC_LZ16 file $05B: 4bpp, 1kb | |
$3BD7C6 | 362 bytes | Graphics | LC_LZ16 file $05C: 4bpp, 1kb | |
$3BD930 | 452 bytes | Graphics | LC_LZ16 file $05D: 4bpp, 1kb | |
$3BDAF4 | 474 bytes | Graphics | LC_LZ16 file $05E: 4bpp, 1kb | |
$3BDCCE | 322 bytes | Graphics | LC_LZ16 file $05F: 4bpp, 1kb | |
$3BDE10 | 416 bytes | Graphics | LC_LZ16 file $060: 4bpp, 1kb | |
$3BDFB0 | 312 bytes | Graphics | LC_LZ16 file $061: 4bpp, 1kb | |
$3BE0E8 | 244 bytes | Graphics | LC_LZ16 file $062: 4bpp, 1kb | |
$3BE1DC | 457 bytes | Graphics | LC_LZ16 file $063: 4bpp, 1kb | |
$3BE3A5 | 476 bytes | Graphics | LC_LZ16 file $064: 4bpp, 1kb | |
$3BE581 | 360 bytes | Graphics | LC_LZ16 file $065: 4bpp, 1kb | |
$3BE6E9 | 453 bytes | Graphics | LC_LZ16 file $066: 4bpp, 1kb | |
$3BE8AE | 421 bytes | Graphics | LC_LZ16 file $067: 4bpp, 1kb | |
$3BEA53 | 505 bytes | Graphics | LC_LZ16 file $068: 4bpp, 1kb | |
$3BEC4C | 424 bytes | Graphics | LC_LZ16 file $069: 4bpp, 1kb | |
$3BEDF4 | 470 bytes | Graphics | LC_LZ16 file $06A: 4bpp, 1kb | |
$3BEFCA | 371 bytes | Graphics | LC_LZ16 file $06B: 4bpp, 1kb | |
$3BF13D | 390 bytes | Graphics | LC_LZ16 file $06C: 4bpp, 1kb | |
$3BF2C3 | 214 bytes | Graphics | LC_LZ16 file $06D: 4bpp, 1kb | |
$3BF399 | 293 bytes | Graphics | LC_LZ16 file $06E: 4bpp, 1kb | |
$3BF4BE | 232 bytes | Graphics | LC_LZ16 file $06F: 4bpp, 1kb | |
$3BF5A6 | 356 bytes | Graphics | LC_LZ16 file $070: 4bpp, 1kb | |
$3BF70A | 250 bytes | Graphics | LC_LZ16 file $071: 4bpp, 1kb | |
$3BF804 | 3023 bytes | Graphics | LC_LZ16 file $072: 4bpp, 8kb | |
$3C83D3 | 451 bytes | Graphics | LC_LZ16 file $073: 4bpp, 2kb | |
$3C8596 | 442 bytes | Graphics | LC_LZ16 file $074: 4bpp, 2kb | |
$3C8750 | 518 bytes | Graphics | LC_LZ16 file $075: 4bpp, 2kb | |
$3C8956 | 352 bytes | Graphics | LC_LZ16 file $076: 4bpp, 2kb | |
$3C8AB6 | 1146 bytes | Graphics | LC_LZ16 file $077: 4bpp, 4kb | |
$3C8F30 | 1994 bytes | Graphics | LC_LZ16 file $078: 4bpp, 4kb | |
$3C96FA | 1751 bytes | Graphics | LC_LZ16 file $079: 4bpp, 4kb | |
$3C9DD1 | 1663 bytes | Graphics | LC_LZ16 file $07A: 4bpp, 4kb | |
$3CA450 | 2543 bytes | Graphics | LC_LZ16 file $07B: 4bpp, 4kb | |
$3CAE3F | 2810 bytes | Graphics | LC_LZ16 file $07C: 4bpp, 4kb | |
$3CB939 | 1245 bytes | Graphics | LC_LZ16 file $07D: 4bpp, 4kb | |
$3CBE16 | 1174 bytes | Graphics | LC_LZ16 file $07E: 4bpp, 4kb | |
$3CC2AC | 2729 bytes | Graphics | LC_LZ16 file $07F: 4bpp, 4kb | |
$3CCD55 | 2642 bytes | Graphics | LC_LZ16 file $080: 4bpp, 4kb | |
$3CD7A7 | 1700 bytes | Graphics | LC_LZ16 file $081: 4bpp, 4kb | |
$3CDE4B | 1848 bytes | Graphics | LC_LZ16 file $082: 4bpp, 4kb | |
$3CE583 | 1323 bytes | Graphics | LC_LZ16 file $083: 4bpp, 4kb | |
$3CEAAE | 1586 bytes | Graphics | LC_LZ16 file $084: 4bpp, 4kb | |
$3CF0E0 | 1821 bytes | Graphics | LC_LZ16 file $085: 4bpp, 4kb | |
$3CF7FD | 2722 bytes | Graphics | LC_LZ16 file $086: 4bpp, 4kb | |
$3D829F | 4289 bytes | Graphics | LC_LZ16 file $087: 4bpp, 8kb | |
$3D9360 | 5216 bytes | Graphics | LC_LZ16 file $088: 4bpp, 8kb | |
$3DA7C0 | 4705 bytes | Graphics | LC_LZ16 file $089: 4bpp, 8kb | |
$3DBA21 | 3096 bytes | Graphics | LC_LZ16 file $08A: 4bpp, 8kb | |
$3DC639 | 2846 bytes | Graphics | LC_LZ16 file $08B: 4bpp, 8kb | |
$3DD157 | 1639 bytes | Graphics | LC_LZ16 file $08C: 4bpp, 4kb | |
$3DD7BE | 3092 bytes | Graphics | LC_LZ16 file $08D: 4bpp, 4kb | |
$3DE3D2 | 1479 bytes | Graphics | LC_LZ16 file $08E: 4bpp, 4kb | |
$3DE999 | 751 bytes | Graphics | LC_LZ16 file $08F: 4bpp, 4kb | |
$3DEC88 | 1833 bytes | Graphics | LC_LZ16 file $090: 4bpp, 4kb | |
$3DF3B1 | 555 bytes | Graphics | LC_LZ16 file $091: 4bpp, 2kb | |
$3DF5DC | 617 bytes | Graphics | LC_LZ16 file $092: 4bpp, 2kb | |
$3DF845 | 553 bytes | Graphics | LC_LZ16 file $093: 4bpp, 2kb | |
$3DFA6E | 616 bytes | Graphics | LC_LZ16 file $094: 4bpp, 2kb | |
$3DFCD6 | 553 bytes | Graphics | LC_LZ16 file $095: 4bpp, 2kb | |
$3DFEFF | 767 bytes | Graphics | LC_LZ16 file $096: 4bpp, 2kb | |
$3E81FE | 888 bytes | Graphics | LC_LZ16 file $097: 4bpp, 2kb | |
$3E8576 | 940 bytes | Graphics | LC_LZ16 file $098: 4bpp, 2kb | |
$3E8922 | 665 bytes | Graphics | LC_LZ16 file $099: 4bpp, 2kb | |
$3E8BBB | 1318 bytes | Graphics | LC_LZ16 file $09A: 4bpp, 2kb | |
$3E90E1 | 1241 bytes | Graphics | LC_LZ16 file $09B: 4bpp, 2kb | |
$3E95BA | 934 bytes | Graphics | LC_LZ16 file $09C: 4bpp, 2kb | |
$3E9960 | 1079 bytes | Graphics | LC_LZ16 file $09D: 4bpp, 2kb | |
$3E9D97 | 1044 bytes | Graphics | LC_LZ16 file $09E: 4bpp, 2kb | |
$3EA1AB | 1104 bytes | Graphics | LC_LZ16 file $09F: 4bpp, 2kb | |
$3EA5FB | 845 bytes | Graphics | LC_LZ16 file $0A0: 4bpp, 2kb | |
$3EA948 | 868 bytes | Graphics | LC_LZ16 file $0A1: 4bpp, 4kb | |
$3EACAC | 516 bytes | Graphics | LC_LZ16 file $0A2: 4bpp, 4kb | |
$3EAEB0 | 1186 bytes | Graphics | LC_LZ16 file $0A3: 4bpp, 4kb | |
$3EB352 | 1822 bytes | Graphics | LC_LZ16 file $0A4: 4bpp, 4kb | |
$3EBA70 | 1443 bytes | Graphics | LC_LZ16 file $0A5: 4bpp, 4kb | |
$3EC013 | 1444 bytes | Graphics | LC_LZ16 file $0A6: 4bpp, 4kb | |
$3EC5B7 | 1969 bytes | Graphics | LC_LZ16 file $0A7: 4bpp, 4kb | |
$3ECD68 | 1821 bytes | Graphics | LC_LZ16 file $0A8: 4bpp, 4kb | |
$3ED485 | 338 bytes | Graphics | LC_LZ16 file $0A9: 4bpp, 1kb | |
$3ED5D7 | 363 bytes | Graphics | LC_LZ16 file $0AA: 4bpp, 1kb | |
$3ED742 | 512 bytes | Graphics | LC_LZ16 file $0AB: 4bpp, 1kb | |
$3ED942 | 592 bytes | Graphics | LC_LZ16 file $0AC: 4bpp, 1kb | |
$3EDB92 | 438 bytes | Graphics | LC_LZ16 file $0AD: 4bpp, 1kb | |
$3EDD48 | 473 bytes | Graphics | LC_LZ16 file $0AE: 4bpp, 1kb | |
$3EDF21 | 517 bytes | Graphics | LC_LZ16 file $0AF: 4bpp, 1kb | |
$3EE126 | 428 bytes | Graphics | LC_LZ16 file $0B0: 4bpp, 1kb | |
$3EE2D2 | 1619 bytes | Graphics | LC_LZ16 file $0B1: 4bpp, 4kb | |
$3EE925 | 1379 bytes | Graphics | LC_LZ16 file $0B2: 4bpp, 4kb | |
$3EEE88 | 980 bytes | Graphics | LC_LZ16 file $0B3: 4bpp, 4kb | |
$3EF25C | 1706 bytes | Graphics | LC_LZ16 file $0B4: 4bpp, 4kb | |
$3EF906 | 451 bytes | Graphics | LC_LZ16 file $0B5: 4bpp, 2kb | |
$3EFAC9 | 536 bytes | Graphics | LC_LZ16 file $0B6: 4bpp, 2kb | |
$3EFCE1 | 453 bytes | Graphics | LC_LZ16 file $0B7: 4bpp, 2kb | |
$3EFEA6 | 530 bytes | Graphics | LC_LZ16 file $0B8: 4bpp, 2kb | |
$3F80B8 | 1233 bytes | Graphics | LC_LZ16 file $0B9: 4bpp, 4kb | |
$3F8589 | 1197 bytes | Graphics | LC_LZ16 file $0BA: 4bpp, 4kb | |
$3F8A36 | 2378 bytes | Empty | Empty (filled with FF) | |
$3F9380 | 1152 bytes | Misc. Tilemap | Tilemap of title screen sky | |
$3F9800 | 1024 bytes | Misc. Tilemap | Tilemap of the title screen island (worlds 1-5) | |
$3F9C00 | 1024 bytes | Misc. Tilemap | Tilemap of the title screen island (world 6) | |
$3FA000 | 24576 bytes | Object Palette | CGRAM/palette color data | |
$3FD64C | 48 bytes | Misc. | Color Gradient for BG Back Area color header $10 Table ordered from bottom to top of sublevel Each color has 15 scanlines between them interpolated 24 word entries: Word: 0BBBBBGG GGGRRRRR |
|
Regs Address | Length | Type | Description | Details |
$2100 | 1 byte | SNES Register (PPU) | wb++++ INIDISP - Screen Display x---bbbb x = Force blank on when set. bbbb = Screen brightness, F=max, 0="off". Note that force blank CAN be disabled mid-scanline. However, this can result in glitched graphics on that scanline, as the internal rendering buffers will not have been updated during force blank. Current theory is that BGs will be glitched for a few tiles (depending on how far in advance the PPU operates), and OBJ will be glitched for the entire scanline. Also, writing this register on the first line of V-Blank (225 or 240, depending on overscan) when force blank is currently active causes the OAM Address Reset to occur. | |
$2101 | 1 byte | SNES Register (PPU) | wb++?- OBSEL - Object Size and Chr Address sssnnbbb sss = Object size: 000 = 8x8 and 16x16 sprites 001 = 8x8 and 32x32 sprites 010 = 8x8 and 64x64 sprites 011 = 16x16 and 32x32 sprites 100 = 16x16 and 64x64 sprites 101 = 32x32 and 64x64 sprites 110 = 16x32 and 32x64 sprites ('undocumented') 111 = 16x32 and 32x32 sprites ('undocumented') nn = Name Select bbb = Name Base Select (Addr>>14) See the section "SPRITES" below for details. | Sprite Information |
$2102 | 2 bytes | SNES Register (PPU) | wl++?- OAMADDL - OAM Address low byte wh++?- OAMADDH - OAM Address high bit and Obj Priority p------b aaaaaaaa p = Obj Priority activation bit When this bit is set, an Obj other than Sprite 0 may be given priority. See the section "SPRITES" below for details. b aaaaaaaa = OAM address This can be thought of in two ways, depending on your conception of OAM. If you consider OAM as a 544-byte table, baaaaaaaa is the word address into that table. If you consider OAM to be a 512-byte table and a 32-byte table, b is the table selector and aaaaaaaa is the word address in the table. See the section "SPRITES" below for details. The internal OAM address is invalidated when scanlines are being rendered. This invalidation is deterministic, but we do not know how it is determined. Thus, the last value written to these registers is reloaded into the internal OAM address at the beginning of V-Blank if that occurs outside of a force-blank period. This is known as 'OAM reset'. 'OAM reset' also occurs on certain writes to $2100. Writing to either $2102 or $2103 resets the entire internal OAM Address to the values last written to this register. E.g., if you set $104 to this register, write 4 bytes, then write $1 to $2103, the internal OAM address will point to word 4, not word 6. | Sprite Information |
$2104 | 1 byte | SNES Register (PPU) | wb++-- OAMDATA - Data for OAM write dddddddd Note that OAM writes are done in an odd manner, in particular the low table of OAM is not affected until the high byte of a word is written (however, the high table is affected immediately). Thus, if you set the address, then alternate writes and reads, OAM will never be affected until you reach the high table! Similarly, if you set the address to 0, then write 1, 2, read, then write 3, OAM will end up as "01 02 01 03", rather than "01 02 xx 03" as you might expect. Technically, this register CAN be written during H-blank (and probably mid-scanline as well). However, due to OAM address invalidation, the actual OAM byte written will probably not be what you expect. Note that writing during force-blank will only work as expected if that force-blank was begun during V-Blank, or (probably) if $2102/3 have been reset during that force-blank period. See the section "SPRITES" below for details. | Sprite Information |
$2105 | 1 byte | SNES Register (PPU) | wb+++- BGMODE - BG Mode and Character Size DCBAemmm A/B/C/D = BG character size for BG1/BG2/BG3/BG4 If the bit is set, then the BG is made of 16x16 tiles. Otherwise, 8x8 tiles are used. However, note that Modes 5 and 6 always use 16-pixel wide tiles, and Mode 7 always uses 8x8 tiles. See the section "BACKGROUNDS" below for details. mmm = BG Mode e = Mode 1 BG3 priority bit Mode BG depth OPT Priorities 1 2 3 4 Front -> Back -=-------=-=-=-=----=---============--- 0 2 2 2 2 n 3AB2ab1CD0cd 1 4 4 2 n 3AB2ab1C 0c * if e set: C3AB2ab1 0c 2 4 4 y 3A 2B 1a 0b 3 8 4 n 3A 2B 1a 0b 4 8 2 y 3A 2B 1a 0b 5 4 2 n 3A 2B 1a 0b 6 4 y 3A 2 1a 0 7 8 n 3 2 1a 0 7+EXTBG 8 7 n 3 2B 1a 0b "OPT" means "Offset-per-tile mode". For the priorities, numbers mean sprites with that priority. Letters correspond to BGs (A=1, B=2, etc), with upper/lower case indicating tile priority 1/0. See the section "BACKGROUNDS" below for details. Mode 7's EXTBG mode allows you to enable BG2, which uses the same tilemap and character data as BG1 but interprets bit 7 of the pixel data as a priority bit. BG2 also has some oddness to do with some of the per-BG registers below. See the Mode 7 section under BACKGROUNDS for details. | |
$2106 | 1 byte | SNES Register (PPU) | wb+++- MOSAIC - Screen Pixelation xxxxDCBA A/B/C/D = Affect BG1/BG2/BG3/BG4 xxxx = pixel size, 0=1x1, F=16x16 The mosaic filter goes over the BG and covers each x-by-x square with the upper-left pixel of that square, with the top of the first row of squares on the 'starting scanline'. If this register is set during the frame, the 'starting scanline' is the current scanline, otherwise it is the first visible scanline of the frame. I.e. if even scanlines are completely red and odd scanlines are completely blue, setting the xxxx=1 mid-frame will make the rest of the screen either completely red or completely blue depending on whether you set xxxx on an even or an odd scanline. XXX: It seems that writing the same value to this register does not reset the 'starting scanline', but which changes do reset it? Note that mosaic is applied after scrolling, but before any clip windows, color windows, or math. So the XxX block can be partially clipped, and it can be mathed as normal with a non-mosaiced BG. But scrolling can't make it partially one color and partially another. Modes 5-6 should 'double' the expansion factor to expand half-pixels. This actually makes xxxx=0 have a visible effect, since the even half-pixels (usually on the subscreen) hide the odd half-pixels. The same thing happens vertically with interlace mode. Mode 7, of course, is weird. BG1 mosaics about like normal, as long as you remember that the Mode 7 transformations have no effect on the XxX blocks. BG2 uses bit A to control 'vertical mosaic' and bit B to control 'horizontal mosaic', so you could be expanding over 1xX, Xx1, or XxX blocks. This can get really interesting as BG1 still uses bit A as normal, so you could have the BG1 pixels expanded XxX with high-priority BG2 pixels expanded 1xX on top of them. See the section "BACKGROUNDS" below for details. | Background Information |
$2107 | 4 bytes | SNES Register (PPU) | wb++?- BG1SC - BG1 Tilemap Address and Size wb++?- BG2SC - BG2 Tilemap Address and Size wb++?- BG3SC - BG3 Tilemap Address and Size wb++?- BG4SC - BG4 Tilemap Address and Size aaaaaayx aaaaaa = Tilemap address in VRAM (Addr>>10) x = Tilemap horizontal mirroring y = Tilemap veritcal mirroring All tilemaps are 32x32 tiles. If x and y are both unset, there is one tilemap at Addr. If x is set, a second tilemap follows the first that should be considered "to the right of" the first. If y is set, a second tilemap follows the first that should be considered "below" the first. If both are set, then a second follows "to the right", then a third "below", and a fourth "below and to the right". See the section "BACKGROUNDS" below for more details. | Background Information |
$210B | 2 bytes | SNES Register (PPU) | wb++?- BG12NBA - BG1 and 2 Chr Address wb++?- BG34NBA - BG3 and 4 Chr Address bbbbaaaa aaaa = Base address for BG1/3 (Addr>>13) bbbb = Base address for BG2/4 (Addr>>13) See the section "BACKGROUNDS" below for details. | Background Information |
$210D | 4 bytes | SNES Register (PPU) | ww+++- BG1HOFS - BG1 Horizontal Scroll ww+++- M7HOFS - Mode 7 BG Horizontal Scroll ww+++- BG1VOFS - BG1 Vertical Scroll ww+++- M7VOFS - Mode 7 BG Vertical Scroll ------xx xxxxxxxx ---mmmmm mmmmmmmm x = The BG offset, 10 bits. m = The Mode 7 BG offset, 13 bits two's-complement signed. These are actually two registers in one (or would that be "4 registers in 2"?). Anyway, writing $210d will write both BG1HOFS which works exactly like the rest of the BGnxOFS registers below ($210f-$2114), and M7HOFS which works with the M7* registers ($211b-$2120) instead. Modes 0-6 use BG1xOFS and ignore M7xOFS, while Mode 7 uses M7xOFS and ignores BG1HOFS. See the appropriate sections below for details, and note the different formulas for BG1HOFS versus M7HOFS. |
|
$210F | 6 bytes | SNES Register (PPU) | ww+++- BG2HOFS - BG2 Horizontal Scroll ww+++- BG2VOFS - BG2 Vertical Scroll ww+++- BG3HOFS - BG3 Horizontal Scroll ww+++- BG3VOFS - BG3 Vertical Scroll ww+++- BG4HOFS - BG4 Horizontal Scroll ww+++- BG4VOFS - BG4 Vertical Scroll ------xx xxxxxxxx Note that these are "write twice" registers, first the low byte is written then the high. Current theory is that writes to the register work like this: BGnHOFS = (Current<<8) | (Prev&~7) | ((Reg>>8)&7); Prev = Current; or BGnVOFS = (Current<<8) | Prev; Prev = Current; Note that there is only one Prev shared by all the BGnxOFS registers. This is NOT shared with the M7* registers (not even M7xOFS and BG1xOFS). x = The BG offset, at most 10 bits (some modes effectively use as few as 8). Note that all BGs wrap if you try to go past their edges. Thus, the maximum offset value in BG Modes 0-6 is 1023, since you have at most 64 tiles (if x/y of BGnSC is set) of 16 pixels each (if the appropriate bit of BGMODE is set). Horizontal scrolling scrolls in units of full pixels no matter if we're rendering a 256-pixel wide screen or a 512-half-pixel wide screen. However, vertical scrolling will move in half-line increments if interlace mode is active. See the section "BACKGROUNDS" below for details. | Background Information |
$2115 | 1 byte | SNES Register (PPU) | wb++?- VMAIN - Video Port Control i---mmii i = Address increment mode: 0 => increment after writing $2118/reading $2139 1 => increment after writing $2119/reading $213a Note that a word write stores low first, then high. Thus, if you're storing a word value to $2118/9, you'll probably want to set 1 here. ii = Address increment amount 00 = Normal increment by 1 01 = Increment by 32 10 = Increment by 128 11 = Increment by 128 mm = Address remapping 00 = No remapping 01 = Remap addressing aaaaaaaaBBBccccc => aaaaaaaacccccBBB 10 = Remap addressing aaaaaaaBBBcccccc => aaaaaaaccccccBBB 11 = Remap addressing aaaaaaBBBccccccc => aaaaaacccccccBBB The "remap" modes basically implement address translation. If $2116/7 are set to #$0003, then word address #$0018 will be written instead, and $2116/7 will be incremented to $0004. | |
$2116 | 2 bytes | SNES Register (PPU) | wl++?- VMADDL - VRAM Address low byte wh++?- VMADDH - VRAM Address high byte aaaaaaaa aaaaaaaa This sets the address for $2118/9 and $2139/a. Note that this is a word address, not a byte address! See the sections "BACKGROUNDS" and "SPRITES" below for details. | Background Information Sprite Information |
$2118 | 2 bytes | SNES Register (PPU) | wl++-- VMDATAL - VRAM Data Write low byte wh++-- VMDATAH - VRAM Data Write high byte xxxxxxxx xxxxxxxx This writes data to VRAM. The writes take effect immediately(?), even if no increment is performed. The address is incremented when one of the two bytes is written; which one depends on the setting of bit 7 of register $2115. Keep in mind the address translation bits of $2115 as well. The interaction between these registers and $2139/a is unknown. See the sections "BACKGROUNDS" and "SPRITES" below for details. | Background Information Sprite Information |
$211A | 1 byte | SNES Register (PPU) | wb++?- M7SEL - Mode 7 Settings rc----yx r = Playing field size: When clear, the playing field is 1024x1024 pixels (so the tilemap completely fills it). When set, the playing field is much larger, and the 'empty space' fill is controlled by bit 6. c = Empty space fill, when bit 7 is set: 0 = Transparent. 1 = Fill with character 0. Note that the fill is matrix transformed like all other Mode 7 tiles. x/y = Horizontal/Veritcal mirroring. If the bit is set, flip the 256x256 pixel 'screen' in that direction. See the section "BACKGROUNDS" below for details. | Background Information |
$211B | 4 bytes | SNES Register (PPU) | ww+++- M7A - Mode 7 Matrix A (also used with $2134/6) ww+++- M7B - Mode 7 Matrix B (also used with $2134/6) ww+++- M7C - Mode 7 Matrix C ww+++- M7D - Mode 7 Matrix D aaaaaaaa aaaaaaaa Note that these are "write twice" registers, first the low byte is written then the high. Current theory is that writes to the register work like this: Reg = (Current<<8) | Prev; Prev = Current; Note that there is only one Prev shared by all these registers. This Prev is NOT shared with the BGnxOFS registers, but it IS shared with the M7xOFS registers. These set the matrix parameters for Mode 7. The values are an 8-bit fixed point, i.e. the value should be divided by 256.0 when used in calculations. See below for more explanation. The product A*(B>>8) may be read from registers $2134/6. There is supposedly no important delay. It may not be operative during Mode 7 rendering. See the section "BACKGROUNDS" below for details. | Background Information |
$211F | 2 bytes | SNES Register (PPU) | ww+++- M7X - Mode 7 Center X ww+++- M7Y - Mode 7 Center Y ---xxxxx xxxxxxxx Note that these are "write twice" registers, like the other M7* registers. See above for the write semantics. The value is 13 bit two's-complement signed. The matrix transformation formula is: [ X ] [ A B ] [ SX + M7HOFS - CX ] [ CX ] [ ] = [ ] * [ ] + [ ] [ Y ] [ C D ] [ SY + M7VOFS - CY ] [ CY ] Note: SX/SY are screen coordinates. X/Y are coordinates in the playing field from which the pixel is taken. If $211a bit 7 is clear, the result is then restricted to 0<=X<=1023 and 0<=Y<=1023. If $211a bits 6 and 7 are both set and X or Y is less than 0 or greater than 1023, use the low 3 bits of each to choose the pixel from character 0. The bit-accurate formula seems to be something along the lines of: #define CLIP(a) (((a)&0x2000)?((a)|~0x3ff):((a)&0x3ff)) X[0,y] = ((A*CLIP(HOFS-CX))&~63) + ((B*y)&~63) + ((B*CLIP(VOFS-CY))&~63) + (CX<<8) Y[0,y] = ((C*CLIP(HOFS-CX))&~63) + ((D*y)&~63) + ((D*CLIP(VOFS-CY))&~63) + (CY<<8) X[x,y] = X[x-1,y] + A Y[x,y] = Y[x-1,y] + C (In all cases, X[] and Y[] are fixed point with 8 bits of fraction) See the section "BACKGROUNDS" below for details. | Background Information |
$2121 | 1 byte | SNES Register (PPU) | wb+++- CGADD - CGRAM Address cccccccc This sets the word address (i.e. color) which will be affected by $2122 and $213b. | |
$2122 | 1 byte | SNES Register (PPU) | ww+++- CGDATA - CGRAM Data write -bbbbbgg gggrrrrr This writes to CGRAM, effectively setting the palette colors. Accesses to CGRAM are handled just like accesses to the low table of OAM, see $2104 for details. Note that the color values are stored in BGR order. | |
$2123 | 3 bytes | SNES Register (PPU) | wb+++- W12SEL - Window Mask Settings for BG1 and BG2 wb+++- W34SEL - Window Mask Settings for BG3 and BG4 wb+++- WOBJSEL - Window Mask Settings for OBJ and Color Window ABCDabcd c = Enable window 1 for BG1/BG3/OBJ a = Enable window 2 for BG1/BG3/OBJ C/A = Enable window 1/2 for BG2/BG4/Color When the bit is set, the corresponding window will affect the corresponding background (subject to the settings of $212e/f). d = Window 1 Inversion for BG1/BG3/OBJ b = Window 2 Inversion for BG1/BG3/OBJ D/B = Window 1/2 Inversion for BG2/BG4/Color When the bit is set, "W" should be replaced by "~W" (not-W) in the window combination formulae below. See the section "WINDOWS" below for more details. | Windowing Information |
$2126 | 4 bytes | SNES Register (PPU) | wb+++- WH0 - Window 1 Left Position wb+++- WH1 - Window 1 Right Position wb+++- WH2 - Window 2 Left Position wb+++- WH3 - Window 2 Right Position xxxxxxxx These set the offset of the appropriate edge of the appropriate window. Note that if the left edge is greater than the right edge, the window is considered to have no range at all (and thus "W" always is false). See the section "WINDOWS" below for more details. | Windowing Information |
$212A | 2 bytes | SNES Register (PPU) | wb+++- WBGLOG - Window mask logic for BGs 44332211 wb+++- WOBJLOG - Window mask logic for OBJs and Color Window ----ccoo 44/33/22/11/oo/cc = Mask logic for BG1/BG2/BG3/BG4/OBJ/Color This specified the window combination method, using standard boolean operators: 00 = OR 01 = AND 10 = XOR 11 = XNOR Consider two variables, W1 and W2, which are true for pixels between the appropriate left and right bounds as set in $2126-$2129 and false otherwise. Then, you have the following possibilities: (replace "W#" with "~W#", depending on the Inversion settings of $2123-$2125) Neither window enabled => nothing masked. One window enabled => Either W1 or W2, as appropriate. Both windows enabled => W1 op W2, where "op" is as above. Where the function is true, the BG will be masked. See the section "WINDOWS" below for more details. | Windowing Information |
$212C | 2 bytes | SNES Register (PPU) | wb+++- TM - Main Screen Designation wb+++- TS - Subscreen Designation ---o4321 1/2/3/4/o = Enable BG1/BG2/BG3/BG4/OBJ for display on the main (or sub) screen. See the section "BACKGROUNDS" below for details. | Background Information |
$212E | 2 bytes | SNES Register (PPU) | wb+++- TMW - Window Mask Designation for the Main Screen wb+++- TSW - Window Mask Designation for the Subscreen ---o4321 1/2/3/4/o = Enable window masking for BG1/BG2/BG3/BG4/OBJ on the main (or sub) screen. See the section "BACKGROUNDS" below for details. | Background Information |
$2130 | 1 byte | SNES Register (PPU) | wb+++- CGWSEL - Color Addition Select ccmm--sd cc = Clip colors to black before math 00 => Never 01 => Outside Color Window only 10 => Inside Color Window only 11 => Always mm = Prevent color math 00 => Never 01 => Outside Color Window only 10 => Inside Color Window only 11 => Always s = Add subscreen (instead of fixed color) d = Direct color mode for 256-color BGs See the sections "BACKGROUNDS", "WINDOWS", and "RENDERING THE SCREEN" below for details. | Background Information Windowing Information Rendering the Screen |
$2131 | 1 byte | SNES Register (PPU) | wb+++- CGADSUB - Color math designation shbo4321 s = Add/subtract select 0 => Add the colors 1 => Subtract the colors h = Half color math. When set, the result of the color math is divided by 2 (except when $2130 bit 1 is set and the fixed color is used, or when color is cliped). 4/3/2/1/o/b = Enable color math on BG1/BG2/BG3/BG4/OBJ/Backdrop See the sections "BACKGROUNDS", "WINDOWS", and "RENDERING THE SCREEN" below for details. | Background Information Windowing Information Rendering the Screen |
$2132 | 1 byte | SNES Register (PPU) | wb+++- COLDATA - Fixed Color Data bgrccccc b/g/r = Which color plane(s) to set the intensity for. ccccc = Color intensity. So basically, to set an orange you'd do something along the lines of: LDA #$3f STA $2132 LDA #$4f STA $2132 LDA #$80 STA $2132 See the sections "BACKGROUNDS" and "WINDOWS" below for details. | Background Information Windowing Information |
$2133 | 1 byte | SNES Register (PPU) | wb+++- SETINI - Screen Mode/Video Select se--poIi s = "External Sync". Used for superimposing "sfx" graphics, whatever that means. Usually 0. Not much is known about this bit. Interestingly, the SPPU chip has a pin named "EXTSYNC" (or not-EXTSYNC, since it has a bar over it) which is tied to Vcc. e = Mode 7 EXTBG ("Extra BG"). When this bit is set, you may enable BG2 on Mode 7. BG2 uses the same tile and character data as BG1, but interprets the high bit of the color data as a priority for the pixel. Various sources report additional effects for this bit, possibly related to bit 7. For example, "Enable the Data Supplied From the External Lsi.", whatever that means. Of course, maybe that's a typo and it's supposed to apply to bit 7 instead. p = Enable pseudo-hires mode. This creates a 512-pixel horizontal resolution by taking pixels from the subscreen for the even-numbered pixels (zero based) and from the main screen for the odd-numbered pixels. Color math behaves just as with Mode 5/6 hires. The interlace bit still has no effect. Mosaic operates as normal (not like Mode 5/6). The 'subscreen' pixel is clipped (by windows) when the main-screen pixel to the LEFT is clipped, not when the one to the RIGHT is clipped as you'd expect. What happens with pixel column 0 is unknown. Enabling this bit in Modes 5 or 6 has no effect. o = Overscan mode. When set, 239 lines will be displayed instead of the normal 224. This also means V-Blank will occur that much later, and be shorter. All that happens is that extra lines get added to the display, and it seems the TV will like to move the display up 8 pixels. See below for more details. I = OBJ Interlace. When set regardless of BG mode, the OBJ will be interlaced (see bit 0 below), and thus will appear half-height. Note that this only controls whether obj are drawn as normal or not; the interlace signal is only output to the TV based on bit 0 below. i = Screen interlace. When set in BG mode 5 (and probably 6), the effective screen height will be 448 (or 478) pixles, rather than 224 (or 239). When set in any other mode, the screen will just get a bit jumpy. However, toggling the tilemap each field would simulate the increased screen height (much like pseudo-hires simulares hires). In hardware, setting this bit makes the SNES output a normal interlace signal rather than always forcing one frame. See the sections "BACKGROUNDS" and "SPRITES" below for details. Overscan: The bit only matters at the very end of the frame, if you change the setting on line 0xE0 before the normal NMI trigger point then it's the same as if you had it on all frame. Note that this affects both the NMI trigger point and when HDMA stops for the frame. If you turn the bit off at the very beginning of scanline X (for 0xE1<=X<=0xF0), NMI will occur on line X and the last HDMA transfer will occur on line X-1. However, on my TV at least, the display will remain in the normal no-overscan position for lines E1-EC, it will move up only one pixel for line ED, and it will lose vertical sync for lines EF-F4! Turning the bit on, only line E1 gives any effect: NMI will occur on line E2, although the last HDMA will still occur on line E0. Anything else acts like you left the bit off the whole time. Note, however, that if you wait too long after the beginning of the scanline then you will get no effect. Even if there is no visible effect, the overscan setting still affects VRAM writes. In particular, executing "LDA #'-' / STA $2118 / LDA r2133 / STA $2133 / LDA #'+' / STA $2118" during the E1-F0 period will write only + or only - to VRAM, depending on whether the overscan bit was set to 0 or 1. | Background Information Sprite Information |
$2134 | 3 bytes | SNES Register (PPU) | r l+++? MPYL - Multiplication Result low byte r m+++? MPYM - Multiplication Result middle byte r h+++? MPYH - Multiplication Result high byte xxxxxxxx xxxxxxxx xxxxxxxx This is the 2's compliment product of the 16-bit value written to $211b and the 8-bit value most recently written to $211c. There is supposedly no important delay. It may not be operative during Mode 7 rendering. | |
$2137 | 1 byte | SNES Register (PPU) | b++++ SLHV - Software Latch for H/V Counter -------- When read, the H/V counter (as read from $213c and $213d) will be latched to the current X and Y position if bit 7 of $4201 is set. The data actually read is open bus. | |
$2138 | 1 byte | SNES Register (PPU) | r w++?- OAMDATAREAD* - Data for OAM read xxxxxxxx OAM reads are straightforward: the current byte as set in $2102/3 and incremented by reads from this register and writes to $2104 will be returned. Note that writes to the lower table are not affected so logically. See register $2104 and the section "SPRITES" below for details. Also, note that OAM address invalidation probably affects the address read by this register as well. | |
$2139 | 2 bytes | SNES Register (PPU) | r l++?- VMDATALREAD* - VRAM Data Read low byte r h++?- VMDATAHREAD* - VRAM Data Read high byte xxxxxxxx xxxxxxxx Simply, this reads data from VRAM. The address is incremented when either $2139 or $213a is read, depending on the setting of bit 7 of $2115. Actually, the reading is more complex. When either of these registers is read, the appropriate byte from a word-sized buffer is returned. A word from VRAM is loaded into this buffer just *before* the VRAM address is incremented. The actual data read and the amount of the increment depend on the low 4 bits of $2115. The effect of this is that a 'dummy read' is required after setting $2116-7 before you start getting the actual data. The interaction between these registers and $2118/9 is unknown. See the sections "BACKGROUNDS" and "SPRITES" below for details. | Background Information Sprite Information |
$213B | 1 byte | SNES Register (PPU) | r w++?- CGDATAREAD* - CGRAM Data read -bbbbbgg gggrrrrr This reads from CGRAM. Accesses to CGRAM are handled just like accesses to the low table of OAM, see $2138 for details. Note that the color values are stored in BGR order. The '-' bit is PPU2 Open Bus. | |
$213C | 2 bytes | SNES Register (PPU) | r w++++ OPHCT - Horizontal Scanline Location r w++++ OPVCT - Vertical Scanline Location -------x xxxxxxxx These values are latched by reading $2137 when bit 7 of $4201 is set, or by clearing-and-setting bit 7 of $4201 either by writing $4201 or by pin 6 of Controller Port 2 (the latch occurs on the 1->0 transition). Note that the value read is only 9 bits: bits 1-7 of the high byte are PPU2 Open Bus. Each register keeps seperate track of whether to return the low or high byte. The high/low selector is reset to 'low' when $213f is read (the selector is NOT reset when the counter is latched). H Counter values range from 0 to 339, with 22-277 being visible on the screen. V Counter values range from 0 to 261 in NTSC mode (262 is possible every other frame when interlace is active) and 0 to 311 in PAL mode (312 in interlace?), with 1-224 (or 1-239(?) if overscan is enabled) visible on the screen. | |
$213E | 1 byte | SNES Register (PPU) | r b++++ STAT77 - PPU Status Flag and Version trm-vvvv t = Time Over Flag. If more than 34 sprite-tiles (e.g. a 16x16 sprite has 2 sprite-tiles) were encountered on a single line, this flag will be set. The flag is reset at the end of V-Blank. See the section "SPRITES" below for details. r = Range Over Flag. If more than 32 sprites were encountered on a single line, this flag will be set. The flag is reset at the end of V-Blank. See the section "SPRITES" below for details. Note that the above two flags are set whether or not OBJ are actually enabled at the time. m = "Master/slave mode select". Little is known about this bit. Current theory is that it indicates the status of the "MASTER" pin on the S-PPU chip, which in the normal SNES is always Gnd. We always seem to read back 0 here. vvvv = 5c77 chip version number. So far, we've only encountered version 1. The '-' bit is PPU Open Bus. | Sprite Information |
$213F | 1 byte | SNES Register (PPU) | r b++++ STAT78 - PPU Status Flag and Version fl-pvvvv f = Interlace Field. This will toggle every V-Blank. l = External latch flag. When the PPU counters are latched, this flag gets set. The flag is reset on read, but only when $4201 bit 7 is set. p = NTSC/Pal Mode. If this is a PAL SNES, this bit will be set, otherwise it will be clear. vvvv = 5C78 chip version number. So far, we've encountered at least 2 and 3. Possibly 1 as well. The '-' bit is PPU2 Open Bus. Note: as a side effect of reading this register, the high/low byte selector for $213c/d is reset to 'low'. | |
$2140 | 4 bytes | SNES Register (APU) | rwb++++ APUIO0 - APU I/O register 0 rwb++++ APUIO1 - APU I/O register 1 rwb++++ APUIO2 - APU I/O register 2 rwb++++ APUIO3 - APU I/O register 3 xxxxxxxx These registers are used in communication with the SPC700. Note that the value written here is not the value read back. Rather, the value written shows up in the SPC700's registers $f4-7, and the values written to those registers by the SPC700 are what you read here. If the SPC700 writes the register during a read, the value read will be the logical OR of the old and new values. The exact cycles during which the 'read' actually occurs is not known, although a good guess would be some portion of the final 3 master cycles of the 6-cycle memory access. Note that these registers are mirrored throughout the range $2140-$217f. | |
$2180 | 1 byte | SNES Register (Hardware) | rwb++++ WMDATA - WRAM Data read/write xxxxxxxx This register reads to or writes from the WRAM address set in $2181-3. The address is then incremented. The effect of mixed reads and writes is unknown, but it is suspected that they are handled logically. Note that attempting a DMA from WRAM to this register will not work, WRAM will not be written. Attempting a DMA from this register to WRAM will similarly not work, the value written is (initially) the Open Bus value. In either case, the address in $2181-3 is not incremented. | |
$2181 | 3 bytes | SNES Register (Hardware) | wl++++ WMADDL - WRAM Address low byte wm++++ WMADDM - WRAM Address middle byte wh++++ WMADDH - WRAM Address high bit -------x xxxxxxxx xxxxxxxx This is the address that will be read or written by accesses to $2180. Note that WRAM is also mapped in the SNES memory space from $7E:0000 to $7F:FFFF, and from $0000 to $1FFF in banks $00 through $3F and $80 through $BF. Verious docs indicate that these registers may be read as well as written. However, they are wrong. These registers are open bus. DMA from WRAM to these registers has no effect. Otherwise, however, DMA writes them as normal. This means you could use DMA mode 4 to $2180 and a table in ROM to write any sequence of RAM addresses. The value does not wrap at page boundaries on increment. | |
$3000 | 2 bytes | Super FX Register | Default Source/Destination Register (R0) | |
$3002 | 2 bytes | Super FX Register | X coordinate for PLOT instruction (R1) | |
$3004 | 2 bytes | Super FX Register | Y coordinate for PLOT instruction (R2) | |
$3006 | 2 bytes | Super FX Register | General purpose register (R3) | |
$3008 | 2 bytes | Super FX Register | Lower 16 bits of result from LMULT instruction (R4) | |
$300A | 2 bytes | Super FX Register | General purpose register (R5) | |
$300C | 2 bytes | Super FX Register | Multiplier for FMULT and LMULT instructions (R6) | |
$300E | 2 bytes | Super FX Register | Source 1 (fixed point texel X position) for MERGE instruction (R7) | |
$3010 | 2 bytes | Super FX Register | Source 2 (fixed point texel Y position) for MERGE instruction (R8) | |
$3012 | 2 bytes | Super FX Register | General purpose register (R9) | |
$3014 | 2 bytes | Super FX Register | General purpose register, commonly used as stack pointer (R10) | |
$3016 | 2 bytes | Super FX Register | Destination for LINK instruction (R11) | |
$3018 | 2 bytes | Super FX Register | Counter for LOOP instruction (R12) | |
$301A | 2 bytes | Super FX Register | Branch for LOOP instruction (R13) | |
$301C | 2 bytes | Super FX Register | ROM Address Pointer for GETB, GETBH, GETBL, GETBS (R14) | |
$301E | 2 bytes | Super FX Register | Program Counter (R15) | |
$3030 | 2 bytes | Super FX Register | Status/Flag Register: Indicates the status of the Super FX. I--BHL21 -RGVNCZ- I = IRQ, set to 1 when Super FX caused an interrupt. Set to 0 when read by 65c816. B = Set to 1 when the WITH instruction is executed H = Immediate higher 8-bit flag L = Immediate lower 8-bit flag 2 = ALT2 mode set-up flag for the next instruction 1 = ALT1 mode set-up flag for the next instruction R = Set to 1 when reading ROM using R14 address G = Go flag, set to 1 when the Super FX is running V = Overflow flag N = Negative flag C = Carry flag Z = Zero flag | |
$3032 | 1 byte | Super FX Register | Unused. | |
$3033 | 1 byte | Super FX Register | Backup RAM Register: Makes sure the data at banks $78-$79 gets protected (or not) for writing, write-only. | |
$3034 | 1 byte | Super FX Register | Program Bank Register: Specifies the memory bank register to be accessed. Usually changed with the LJMP instruction. | |
$3035 | 1 byte | Super FX Register | Unused. | |
$3036 | 1 byte | Super FX Register | ROM Bank Register: When using the ROM buffering system, this register specifies the bank of the game pak ROM being copied into the buffer. The ROMB instruction is the general method used to change this register. | |
$3037 | 1 byte | Super FX Register | Control Flags Config Register: Selects the operating speed of the multiplier in the Super FX and sets up a mask for the interrupt signal, write-only. I-0----- I = IRQ, normal or masked 0 = MS, standard or high-speed. Should be set to 0 if the Super FX is running at 21 MHz (see $3039). | |
$3038 | 1 byte | Super FX Register | Screen Base Register: This register sets the starting address of the graphics storage area. It is written to directly, rather than through a specific instruction. | |
$3039 | 1 byte | Super FX Register | Clock Speed Register: This register assigns the Super FX operating frequency, write-only. 10.7 MHz or 21.4 MHz depending on bit 0. | |
$303A | 1 byte | Super FX Register | Screen Mode Register: Specifies the color gradient and screen height during PLOT processing and controls ROM and RAM bus assignments, write-only. --HRWhMm Hh = Screen Height 00 = 128 pixels 01 = 160 pixels 10 = 192 pixels 11 = OBJ Mode R = Game Pak ROM Access - RON 0 = SNES 1 = Super FX W = Game Pak Work RAM Access - RAN 0 = SNES 1 = Super FX Mm = Color Mode 00 = 4 colors 01 = 16 colors 10 = Not used 11 = 256 colors | |
$303B | 1 byte | Super FX Register | Version Code Register: Checks for the version of the Super FX chip, read-only. | |
$303C | 1 byte | Super FX Register | RAM Bank Register: When writing between the game WRAM and the Super FX registers, this register specifies the bank of the Game Pak RAM being used. The RAMB instruction is the general method used to change this register. Only one bit is used to set the RAM bank to $70 or $71. | |
$303D | 1 byte | Super FX Register | Unused. | |
$303E | 2 bytes | Super FX Register | Cache Base Register: This register specifies the address of either the Game Pak ROM or WRAM where data will be loaded from into the cache. Both the LJMP and CACHE instructions are accepted ways to change this register. | |
$3100 | 512 bytes | Super FX Register | Instruction cache, about 3 times faster than ROM and RAM. | |
$4016 | 2 bytes | SNES Register (Controller) | rwb++++ JOYSER0 - NES-style Joypad Access Port 1 Rd: ------ca Wr: -------l r?b++++ JOYSER1 - NES-style Joypad Access Port 2 ---111db These registers basically have a direct connection to the controller ports on the front of the SNES. l = Writing this bit controlls the Latch line of both controller ports. When 1 is set, the Latch goes high (or is it low? At any rate, whichever one makes the pads latch their state). When cleared, the Latch goes the other way. a/b = These bits return the state of the Data1 line. c/d = These bits return the state of the Data2 line. Reading $4016 drives the Clock line of Controller Port 1 low. The SNES then reads the Data1 and Data2 lines, and Clock is set back to high. $4017 does the same for Port 2. Note the 1-bits in $4017: the CPU chip has pins for these bits, but these pins are tied to Gnd and thus always 1. Data for normal joypads is returned in the order: B, Y, Select, Start, Up, Down, Left, Right, A, X, L, R, 0, 0, 0, 0, then ones until latched again. Note that Auto-Joypad Read (see register $4200) will effectively write 1 then 0 to bit 'l', then read 16 times from both $4016 and $4017. The 'a' bits will end up in $4218/9, with the first bit read (e.g. the B button) in bit 15 of the word. Similarly, the 'b' bits end up in $421a/b, the 'c' bits in $42c/d, and the 'd' bits in $421e/f. Any further bits the device may return may be read from $4016/$4017 as normal. The effect of reading these during auto-joypad read is unknown. See the section "CONTROLLERS" below for details. | Controller Information |
$4200 | 1 byte | SNES Register (Hardware) | wb+++? NMITIMEN - Interrupt Enable Flags n-yx---a n = Enable NMI. If clear, NMI will not occur. If set, NMI will fire just after the start of V-Blank. NMI fires shortly after the V Counter reaches $E1 (or presumably $F0 if overscan is enabled, see register $2133). x/y = IRQ enable. 0/0 = No IRQ will occur 0/1 = An IRQ will occur sometime just after the V Counter reaches the value set in $4209/$420A. 1/0 = An IRQ will occur sometime just after the H Counter reaches the value set in $4207/$4208. 1/1 = An IRQ will occur sometime just after the H Counter reaches the value set in $4207/$4208 when V Counter equals the value set in $4209/$420A. a = Auto-Joypad Read Enable. When set, the registers $4218-$421F will be updated at about V Counter = $E3 (or presumably $F2). Some games try to read this register. However, they work only because open bus behavior gives them values they expect. This register is initialized to $00 on power on or reset. | |
$4201 | 1 byte | SNES Register (Hardware) | wb++++ WRIO - Programmable I/O port (out-port) abxxxxxx This is basically just an 8-bit I/O Port. 'b' is connected to pin 6 of Controller Port 1. 'a' is connected to pin 6 of Controller Port 2, and to the PPU Latch line. Thus, writing a 0 then a 1 to bit 'a' will latch the H and V Counters much like reading $2137 (the latch happens on the transition to 0). When bit 'a' is 0, no latching can occur. Any other effects of this register are unknown. See $4213 for the I half of the I/O Port. Note that the IO Port is initialized as if this register were written with all 1-bits at power up, unchanged on reset(?). | |
$4202 | 2 bytes | SNES Register (Hardware) | wb++++ WRMPYA - Multiplicand A wb++++ WRMPYB - Multiplicand B mmmmmmmm Write $4202, then $4203. 8 "machine cycles" (probably 48 master cycles) after $4203 is set, the product may be read from $4216/7. $4202 will not be altered by this process, thus a new value may be written to $4203 to perform another multiplication without resetting $4202. The multiplication is unsigned. $4202 holds the value $ff on power on and is unchanged on reset. | |
$4204 | 3 bytes | SNES Register (Hardware) | wl++++ WRDIVL - Dividend C low byte wh++++ WRDIVH - Dividend C high byte dddddddd dddddddd wb++++ WRDIVB - Divisor B bbbbbbbb Write $4204/5, then $4206. 16 "machine cycles" (probably 96 master cycles) after $4206 is set, the quotient may be read from $4214/5, and the remainder from $4216/7. Presumably, $4204/5 are not altered by this process, much like $4202. The division is unsigned. Division by 0 gives a quotient of $FFFF and a remainder of C. WRDIV holds the value $ffff on power on and is unchanged on reset. | |
$4207 | 2 bytes | SNES Register (Hardware) | wl++++ HTIMEL - H Timer low byte wh++++ HTIMEH - H Timer high byte -------h hhhhhhhh If bit 4 of $4200 is set and bit 5 is clear, an IRQ will fire every scanline when the H Counter reaches the value set here. If bits 4 and 5 are both set, the IRQ will fire only when the V Counter equals the value set in $4209/a. Note that the H Counter ranges from 0 to 339, thus greater values will result in no IRQ firing. HTIME is initialized to $1ff on power on, unchanged on reset. | |
$4209 | 2 bytes | SNES Register (Hardware) | wl++++ VTIMEL - V Timer low byte wh++++ VTIMEH - V Timer high byte -------v vvvvvvvv If bit 5 of $4200 is set and bit 4 is clear, an IRQ will fire just after the V Counter reaches the value set here. If bits 4 and 5 are both set, the IRQ will fire instead when the V Counter equals the value set here and the H Counter reaches the value set in $4207/8. Note that the V Counter ranges from 0 to 261 in NTSC mode (262 is possible every other frame whan interlace is active) and 0 to 311 in PAL mode (312 in interlace?), thus greater values will result in no IRQ firing. VTIME is initialized to $1ff on power on, unchanged on reset. | |
$420B | 1 byte | SNES Register (DMA) | wb++++ MDMAEN - DMA Enable 76543210 7/6/5/4/3/2/1/0 = Enable the selected DMA channels. The CPU will be paused until all DMAs complete. DMAs will be executed in order from 0 to 7 (?). See registers $43x0-$43xA for more details. If HDMA (init or transfer) occurs while a DMA is in progress, the DMA will be paused for the duration. If the HDMA happens to involve the current DMA channel, the DMA will be immediately terminated and the HDMA will progress using the then-current values of the registers. Other DMA channels will be unaffected. This register is initialized to $00 on power on or reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$420C | 1 byte | SNES Register (DMA) | wb++++ HDMAEN - HDMA Enable 76543210 7/6/5/4/3/2/1/0 = Enable the selected HDMA channels. HDMAs will be executed in order from 0 to 7 (?). See registers $43x0-$43xA for more details. If HDMA (init or transfer) occurs while a DMA is in progress, the DMA will be paused for the duration. If the HDMA happens to involve the current DMA channel, the DMA will be immediately terminated and the HDMA will progress using the then-current values of the registers. Other DMA channels will be unaffected. Note that enabling a channel mid-frame will begin HDMA at the next HDMA point. However, the HDMA register initialization only occurs before the HDMA point on scanline 0, so those registers will have to be initialized by hand before enabling HDMA. A channel that has already terminated for the frame cannot be restarted in this manner. Writing 0 to a bit will pause an ongoing HDMA; the transfer may be continued by writing 1 to the bit. This register is initialized to $00 on power on or reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$420D | 1 byte | SNES Register (Hardware) | wb++++ MEMSEL - ROM Access Speed -------f f = FastROM select. The SNES uses a master clock running at about 21.477 MHz (current theory is 1.89e9/88 Hz). By default, the SNES takes 8 master cycles for each ROM access. If this bit is set and ROM is accessed via banks $80-$FF, only 6 master cycles will be used. This register is initialized to $00 on power on (or reset?). See my memory map and timing doc (memmap.txt) for more details. | Memory Map and Timings |
$4210 | 1 byte | SNES Register (Hardware) | r b++++ RDNMI - NMI Flag and 5A22 Version n---vvvv n = NMI Flag. This bit is set at the start of V-Blank (at the moment, we suspect when H-Counter is somewhere between $28 and $4E), and cleared on read or at the end of V-Blank. Supposedly, it is required that this register be read during NMI. Note that this bit is not affected by bit 7 of $4200. vvvv = 5A22 chip version number. So far, we've encountered at least 2, maybe 1 as well. NMI is cleared on power on or reset. The '-' bits are open bus. | |
$4211 | 1 byte | SNES Register (Hardware) | r b++++ TIMEUP - IRQ Flag i------- i = IRQ Flag. This bit is set just after an IRQ fires (at the moment, it seems to have the same delay as the NMI Flag of $4210 has following NMI), and is cleared on read or write. Supposedly, it is required that this register be read during the IRQ handler. If this really is the case, then I suspect that that read is what actually clears the CPU's IRQ line. This register is marked read/write in another doc, with no explanation. IRQ is cleared on power on or reset. The '-' bits are open bus. | |
$4212 | 1 byte | SNES Register (Hardware) | r b++++ HVBJOY - PPU Status vh-----a v = V-Blank Flag. If we're currently in V-Blank, this flag is set, otherwise it is clear. The setting seems to occur at H Counter about $16-$17 when V Counter is $E1, and the clearing at about $1E with V Counter 0. h = H-Blank Flag. If we're currently in H-Blank, this flag is set, otherwise it is clear. The setting seems to occur at H Counter about $121-$122, and the clearing at about $12-$18. a = Auto-Joypad Status. This is set while Auto-Joypad Read is in progress, and cleared when complete. It typically turns on at the start of V-Blank, and completes 3 scanlines later. This register is marked read/write in another doc, with no explanation. | |
$4213 | 1 byte | SNES Register (Hardware) | r b++++ RDIO - Programmable I/O port (in-port) abxxxxxx Reading this register reads data from the I/O Port. The way the I/O Port works, any bit set to 0 in $4201 will be 0 here. Any bit set to 1 in $4201 may be 1 or 0 here, depending on whether any other device connected to the I/O Port has set a 0 to that bit. Bit 'b' is connected to pin 6 of Controller Port 1. Bit 'a' is connected to pin 6 of Controller Port 2, and to the PPU Latch line. See register $4201 for the O side of the I/O Port. | |
$4214 | 2 bytes | SNES Register (Hardware) | r l++++ RDDIVL - Quotient of Divide Result low byte r h++++ RDDIVH - Quotient of Divide Result high byte qqqqqqqq qqqqqqqq Write $4204/5, then $4206. 16 "machine cycles" (probably 96 master cycles) after $4206 is set, the quotient may be read from these registers, and the remainder from $4216/7. The division is unsigned. | |
$4216 | 2 bytes | SNES Register (Hardware) | r l++++ RDMPYL - Multiplication Product or Divide Remainder low byte r h++++ RDMPYH - Multiplication Product or Divide Remainder high byte xxxxxxxx xxxxxxxx Write $4202, then $4203. 8 "machine cycles" (probably 48 master cycles) after $4203 is set, the product may be read from these registers. Write $4204/5, then $4206. 16 "machine cycles" (probably 96 master cycles) after $4206 is set, the quotient may be read from $4214/5, and the remainder from these registers. The multiplication and division are both unsigned. | |
$4218 | 8 bytes | SNES Register (Controller) | r l++++ JOY1L - Controller Port 1 Data1 Register low byte r h++++ JOY1H - Controller Port 1 Data1 Register high byte r l++++ JOY2L - Controller Port 2 Data1 Register low byte r h++++ JOY2H - Controller Port 2 Data1 Register high byte r l++++ JOY3L - Controller Port 1 Data2 Register low byte r h++++ JOY3H - Controller Port 1 Data2 Register high byte r l++++ JOY4L - Controller Port 2 Data2 Register low byte r h++++ JOY4H - Controller Port 2 Data2 Register high byte byetUDLR axlr0000 The bitmap above only applies for joypads, obviously. More generically, Auto Joypad Read effectively sets 1 then 0 to $4016, then reads $4016/7 16 times to get the bits for these registers. a/b/x/y/l/r/e/t = A/B/X/Y/L/R/Select/Start button status. U/D/L/R = Up/Down/Left/Right control pad status. Note that only one of L/R and only one of U/D may be set, due to the pad hardware. These registers are only updated when the Auto-Joypad Read bit (bit 0) of $4200 is set. They are being updated while the Auto-Joypad Status bit (bit 0) of $4212 is set. Reading during this time will return incorrect values. See the section "CONTROLLERS" below for details. | Controller Information |
$4300 | 1 byte | SNES Register (DMA) | rwb++++ DMAP0 - DMA Control for Channel 0 da-ifttt d = Transfer Direction. When clear, data will be read from the CPU memory and written to the PPU register. When set, vice versa. Contrary to previous belief, this bit DOES affect HDMA! Indirect mode is more useful, it will read the table as normal and write from Bus B to the Bus A address specified. Direct mode will work as expected though, it will read counts from the table and try to write the data values into the table. a = HDMA Addressing Mode. When clear, the HDMA table contains the data to transfer. When set, the HDMA table contains pointers to the data. This bit does not affect DMA. i = DMA Address Increment. When clear, the DMA address will be incremented for each byte. When set, the DMA address will be decremented. This bit does not affect HDMA. f = DMA Fixed Transfer. When set, the DMA address will not be adjusted. When clear, the address will be adjusted as specified by bit 4. This bit does not affect HDMA. ttt = Transfer Mode. 000 => 1 register write once (1 byte: p ) 001 => 2 registers write once (2 bytes: p, p+1 ) 010 => 1 register write twice (2 bytes: p, p ) 011 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) 100 => 4 registers write once (4 bytes: p, p+1, p+2, p+3) 101 => 2 registers write twice alternate (4 bytes: p, p+1, p, p+1) 110 => 1 register write twice (2 bytes: p, p ) 111 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next HDMA transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4301 | 1 byte | SNES Register (DMA) | rwb++++ BBAD0 - DMA Destination Register for Channel 0 pppppppp This specifies the Bus B address to access. Considering the standard CPU memory space, this specifies which address $00:2100-$00:21FF to access, with two- and four-register modes wrapping $21FF->$2100, not $2200. The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4302 | 3 bytes | SNES Register (DMA) | rwl++++ A1T0L - DMA Source Address for Channel 0 low byte rwh++++ A1T0H - DMA Source Address for Channel 0 high byte rwb++++ A1B0 - DMA Source Address for Channel 0 bank byte bbbbbbbb hhhhhhhh llllllll This specifies the starting Address Bus A address for the DMA transfer, or the beginning of the HDMA table for HDMA transfers. Note that Bus A does not access the Bus B registers, so pointing this address at say $00:2100 results in open bus. The effect of writing this register during HDMA to the associated channel is unknown. However, current theory is that only $4304 will affect the transfer. The changes will take effect at the next HDMA init. During DMA, $4302/3 will be incremented or decremented as specified by $4300. However $4304 will NOT be adjusted. These registers will not be affected by HDMA. This register is set to $FF on power on, and is unchanged on reset. | |
$4305 | 3 bytes | SNES Register (DMA) | rwl++++ DAS0L - DMA Size/HDMA Indirect Address low byte rwh++++ DAS0H - DMA Size/HDMA Indirect Address high byte rwb++++ DASB0 - HDMA Indirect Address bank byte bbbbbbbb hhhhhhhh llllllll For DMA, $4305/6 indicate the number of bytes to transfer. Note that this is a strict limit: if this is set to 1 then only 1 byte will be written, even if the transfer mode specifies 2 or 4 registers (and if this is 5, all 4 registers would be written once, then the first only would be written a second time). Note, however, that writing $0000 to this register actually results in a transfer of $10000 bytes, not 0. $4305/6 are decremented during DMA, and thus typically end up set to 0 when DMA is complete. For HDMA, $4307 specifies the bank for indirect addressing mode. The indirect address is copied into $4305/6 and incremented appropriately. For direct HDMA, these registers are not used or altered. Writes to $4307 during indirect HDMA will take effect for the next transfer. Writes to $4305/6 during indirect HDMA will also take effect for the next HDMA transfer, however this is only noticable during repeat mode (for normal mode, a new indirect address will be read from the table before the transfer). For a direct transfer, presumably nothing will happen. This register is set to $FF on power on, and is unchanged on reset. | |
$4308 | 2 bytes | SNES Register (DMA) | rwl++++ A2A0L - HDMA Table Address low byte rwh++++ A2A0H - HDMA Table Address high byte aaaaaaaa aaaaaaaa At the beginning of the frame $4302/3 are copied into this register for all active HDMA channels, and then this register is updated as the table is read. Thus, if a game wishes to start HDMA mid-frame (or change tables mid-frame), this register must be written. Writing this register mid-frame changes the table address for the next scanline. This register is not used for DMA. This register is set to $FF on power on, and is unchanged on reset. | |
$430A | 1 byte | SNES Register (DMA) | rwb++++ NLTR0 - HDMA Line Counter rccccccc r = Repeat Select. When set, the HDMA transfer will be performed every line, rather than only when this register is loaded from the table. However, this byte (and the indirect HDMA address) will only be reloaded from the table when the counter reaches 0. ccccccc = Line count. This is decremented every scanline. When it reaches 0, a byte is read from the HDMA table into this register (and the indirect HDMA address is read into $4305/6 if applicable). One oddity: the register is decremeted before being checked for r status or c==0. Thus, setting a value of $80 is really "128 lines with no repeat" rather than "0 lines with repeat". Similarly, a value of $00 will be "128 lines with repeat" when it doesn't mean "terminate the channel". This register is initialized at the end of V-Blank for every active HDMA channel. Note that if a game wishes to begin HDMA during the frame, it will most likely have to initalize this register. Writing this mid-transfer will similarly change the count and repeat to take effect next scanline. Remember though that 'repeat' won't take effect until after the next transfer period. This register is set to $ff on power on, and is unchanged on reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$430B | 2 bytes | SNES Register (DMA) | rwb++++ ????0 - Unknown rwb++++ ????0 - Unknown ???????? The effects of these registers (if any) are unknown. $430F and $430B are really aliases for the same register. This register is set to $FF on power on, and is unchanged on reset. | |
$4310 | 1 byte | SNES Register (DMA) | rwb++++ DMAP1 - DMA Control for Channel 1 da-ifttt d = Transfer Direction. When clear, data will be read from the CPU memory and written to the PPU register. When set, vice versa. Contrary to previous belief, this bit DOES affect HDMA! Indirect mode is more useful, it will read the table as normal and write from Bus B to the Bus A address specified. Direct mode will work as expected though, it will read counts from the table and try to write the data values into the table. a = HDMA Addressing Mode. When clear, the HDMA table contains the data to transfer. When set, the HDMA table contains pointers to the data. This bit does not affect DMA. i = DMA Address Increment. When clear, the DMA address will be incremented for each byte. When set, the DMA address will be decremented. This bit does not affect HDMA. f = DMA Fixed Transfer. When set, the DMA address will not be adjusted. When clear, the address will be adjusted as specified by bit 4. This bit does not affect HDMA. ttt = Transfer Mode. 000 => 1 register write once (1 byte: p ) 001 => 2 registers write once (2 bytes: p, p+1 ) 010 => 1 register write twice (2 bytes: p, p ) 011 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) 100 => 4 registers write once (4 bytes: p, p+1, p+2, p+3) 101 => 2 registers write twice alternate (4 bytes: p, p+1, p, p+1) 110 => 1 register write twice (2 bytes: p, p ) 111 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next HDMA transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4311 | 1 byte | SNES Register (DMA) | rwb++++ BBAD1 - DMA Destination Register for Channel 1 pppppppp This specifies the Bus B address to access. Considering the standard CPU memory space, this specifies which address $00:2100-$00:21FF to access, with two- and four-register modes wrapping $21FF->$2100, not $2200. The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4312 | 3 bytes | SNES Register (DMA) | rwl++++ A1T1L - DMA Source Address for Channel 1 low byte rwh++++ A1T1H - DMA Source Address for Channel 1 high byte rwb++++ A1B1 - DMA Source Address for Channel 1 bank byte bbbbbbbb hhhhhhhh llllllll This specifies the starting Address Bus A address for the DMA transfer, or the beginning of the HDMA table for HDMA transfers. Note that Bus A does not access the Bus B registers, so pointing this address at say $00:2100 results in open bus. The effect of writing this register during HDMA to the associated channel is unknown. However, current theory is that only $4314 will affect the transfer. The changes will take effect at the next HDMA init. During DMA, $4312/3 will be incremented or decremented as specified by $4310. However $4314 will NOT be adjusted. These registers will not be affected by HDMA. This register is set to $FF on power on, and is unchanged on reset. | |
$4315 | 3 bytes | SNES Register (DMA) | rwl++++ DAS1L - DMA Size/HDMA Indirect Address low byte rwh++++ DAS1H - DMA Size/HDMA Indirect Address high byte rwb++++ DASB1 - HDMA Indirect Address bank byte bbbbbbbb hhhhhhhh llllllll For DMA, $4315/6 indicate the number of bytes to transfer. Note that this is a strict limit: if this is set to 1 then only 1 byte will be written, even if the transfer mode specifies 2 or 4 registers (and if this is 5, all 4 registers would be written once, then the first only would be written a second time). Note, however, that writing $0000 to this register actually results in a transfer of $10000 bytes, not 0. $4315/6 are decremented during DMA, and thus typically end up set to 0 when DMA is complete. For HDMA, $4317 specifies the bank for indirect addressing mode. The indirect address is copied into $4315/6 and incremented appropriately. For direct HDMA, these registers are not used or altered. Writes to $4317 during indirect HDMA will take effect for the next transfer. Writes to $4315/6 during indirect HDMA will also take effect for the next HDMA transfer, however this is only noticable during repeat mode (for normal mode, a new indirect address will be read from the table before the transfer). For a direct transfer, presumably nothing will happen. This register is set to $FF on power on, and is unchanged on reset. | |
$4318 | 2 bytes | SNES Register (DMA) | rwl++++ A2A1L - HDMA Table Address low byte rwh++++ A2A1H - HDMA Table Address high byte aaaaaaaa aaaaaaaa At the beginning of the frame $4312/3 are copied into this register for all active HDMA channels, and then this register is updated as the table is read. Thus, if a game wishes to start HDMA mid-frame (or change tables mid-frame), this register must be written. Writing this register mid-frame changes the table address for the next scanline. This register is not used for DMA. This register is set to $FF on power on, and is unchanged on reset. | |
$431A | 1 byte | SNES Register (DMA) | rwb++++ NLTR1 - HDMA Line Counter rccccccc r = Repeat Select. When set, the HDMA transfer will be performed every line, rather than only when this register is loaded from the table. However, this byte (and the indirect HDMA address) will only be reloaded from the table when the counter reaches 0. ccccccc = Line count. This is decremented every scanline. When it reaches 0, a byte is read from the HDMA table into this register (and the indirect HDMA address is read into $4315/6 if applicable). One oddity: the register is decremeted before being checked for r status or c==0. Thus, setting a value of $80 is really "128 lines with no repeat" rather than "0 lines with repeat". Similarly, a value of $00 will be "128 lines with repeat" when it doesn't mean "terminate the channel". This register is initialized at the end of V-Blank for every active HDMA channel. Note that if a game wishes to begin HDMA during the frame, it will most likely have to initalize this register. Writing this mid-transfer will similarly change the count and repeat to take effect next scanline. Remember though that 'repeat' won't take effect until after the next transfer period. This register is set to $ff on power on, and is unchanged on reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$431B | 2 bytes | SNES Register (DMA) | rwb++++ ????1 - Unknown rwb++++ ????1 - Unknown ???????? The effects of these registers (if any) are unknown. $431F and $431B are really aliases for the same register. This register is set to $FF on power on, and is unchanged on reset. | |
$4320 | 1 byte | SNES Register (DMA) | rwb++++ DMAP2 - DMA Control for Channel 2 da-ifttt d = Transfer Direction. When clear, data will be read from the CPU memory and written to the PPU register. When set, vice versa. Contrary to previous belief, this bit DOES affect HDMA! Indirect mode is more useful, it will read the table as normal and write from Bus B to the Bus A address specified. Direct mode will work as expected though, it will read counts from the table and try to write the data values into the table. a = HDMA Addressing Mode. When clear, the HDMA table contains the data to transfer. When set, the HDMA table contains pointers to the data. This bit does not affect DMA. i = DMA Address Increment. When clear, the DMA address will be incremented for each byte. When set, the DMA address will be decremented. This bit does not affect HDMA. f = DMA Fixed Transfer. When set, the DMA address will not be adjusted. When clear, the address will be adjusted as specified by bit 4. This bit does not affect HDMA. ttt = Transfer Mode. 000 => 1 register write once (1 byte: p ) 001 => 2 registers write once (2 bytes: p, p+1 ) 010 => 1 register write twice (2 bytes: p, p ) 011 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) 100 => 4 registers write once (4 bytes: p, p+1, p+2, p+3) 101 => 2 registers write twice alternate (4 bytes: p, p+1, p, p+1) 110 => 1 register write twice (2 bytes: p, p ) 111 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next HDMA transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4321 | 1 byte | SNES Register (DMA) | rwb++++ BBAD2 - DMA Destination Register for Channel 2 pppppppp This specifies the Bus B address to access. Considering the standard CPU memory space, this specifies which address $00:2100-$00:21FF to access, with two- and four-register modes wrapping $21FF->$2100, not $2200. The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4322 | 3 bytes | SNES Register (DMA) | rwl++++ A1T2L - DMA Source Address for Channel 2 low byte rwh++++ A1T2H - DMA Source Address for Channel 2 high byte rwb++++ A1B2 - DMA Source Address for Channel 2 bank byte bbbbbbbb hhhhhhhh llllllll This specifies the starting Address Bus A address for the DMA transfer, or the beginning of the HDMA table for HDMA transfers. Note that Bus A does not access the Bus B registers, so pointing this address at say $00:2100 results in open bus. The effect of writing this register during HDMA to the associated channel is unknown. However, current theory is that only $4324 will affect the transfer. The changes will take effect at the next HDMA init. During DMA, $4322/3 will be incremented or decremented as specified by $4322/3. However $4324 will NOT be adjusted. These registers will not be affected by HDMA. This register is set to $FF on power on, and is unchanged on reset. | |
$4325 | 3 bytes | SNES Register (DMA) | rwl++++ DAS2L - DMA Size/HDMA Indirect Address low byte rwh++++ DAS2H - DMA Size/HDMA Indirect Address high byte rwb++++ DASB2 - HDMA Indirect Address bank byte bbbbbbbb hhhhhhhh llllllll For DMA, $4325/6 indicate the number of bytes to transfer. Note that this is a strict limit: if this is set to 1 then only 1 byte will be written, even if the transfer mode specifies 2 or 4 registers (and if this is 5, all 4 registers would be written once, then the first only would be written a second time). Note, however, that writing $0000 to this register actually results in a transfer of $10000 bytes, not 0. $4325/6 are decremented during DMA, and thus typically end up set to 0 when DMA is complete. For HDMA, $4327 specifies the bank for indirect addressing mode. The indirect address is copied into $4325/6 and incremented appropriately. For direct HDMA, these registers are not used or altered. Writes to $4327 during indirect HDMA will take effect for the next transfer. Writes to $4325/6 during indirect HDMA will also take effect for the next HDMA transfer, however this is only noticable during repeat mode (for normal mode, a new indirect address will be read from the table before the transfer). For a direct transfer, presumably nothing will happen. This register is set to $FF on power on, and is unchanged on reset. | |
$4328 | 2 bytes | SNES Register (DMA) | rwl++++ A2A2L - HDMA Table Address low byte rwh++++ A2A2H - HDMA Table Address high byte aaaaaaaa aaaaaaaa At the beginning of the frame $4322/3 are copied into this register for all active HDMA channels, and then this register is updated as the table is read. Thus, if a game wishes to start HDMA mid-frame (or change tables mid-frame), this register must be written. Writing this register mid-frame changes the table address for the next scanline. This register is not used for DMA. This register is set to $FF on power on, and is unchanged on reset. | |
$432A | 1 byte | SNES Register (DMA) | rwb++++ NLTR2 - HDMA Line Counter rccccccc r = Repeat Select. When set, the HDMA transfer will be performed every line, rather than only when this register is loaded from the table. However, this byte (and the indirect HDMA address) will only be reloaded from the table when the counter reaches 0. ccccccc = Line count. This is decremented every scanline. When it reaches 0, a byte is read from the HDMA table into this register (and the indirect HDMA address is read into $4325/6 if applicable). One oddity: the register is decremeted before being checked for r status or c==0. Thus, setting a value of $80 is really "128 lines with no repeat" rather than "0 lines with repeat". Similarly, a value of $00 will be "128 lines with repeat" when it doesn't mean "terminate the channel". This register is initialized at the end of V-Blank for every active HDMA channel. Note that if a game wishes to begin HDMA during the frame, it will most likely have to initalize this register. Writing this mid-transfer will similarly change the count and repeat to take effect next scanline. Remember though that 'repeat' won't take effect until after the next transfer period. This register is set to $ff on power on, and is unchanged on reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$432B | 2 bytes | SNES Register (DMA) | rwb++++ ????2 - Unknown rwb++++ ????2 - Unknown ???????? The effects of these registers (if any) are unknown. $432F and $432B are really aliases for the same register. This register is set to $FF on power on, and is unchanged on reset. | |
$4330 | 1 byte | SNES Register (DMA) | rwb++++ DMAP3 - DMA Control for Channel 3 da-ifttt d = Transfer Direction. When clear, data will be read from the CPU memory and written to the PPU register. When set, vice versa. Contrary to previous belief, this bit DOES affect HDMA! Indirect mode is more useful, it will read the table as normal and write from Bus B to the Bus A address specified. Direct mode will work as expected though, it will read counts from the table and try to write the data values into the table. a = HDMA Addressing Mode. When clear, the HDMA table contains the data to transfer. When set, the HDMA table contains pointers to the data. This bit does not affect DMA. i = DMA Address Increment. When clear, the DMA address will be incremented for each byte. When set, the DMA address will be decremented. This bit does not affect HDMA. f = DMA Fixed Transfer. When set, the DMA address will not be adjusted. When clear, the address will be adjusted as specified by bit 4. This bit does not affect HDMA. ttt = Transfer Mode. 000 => 1 register write once (1 byte: p ) 001 => 2 registers write once (2 bytes: p, p+1 ) 010 => 1 register write twice (2 bytes: p, p ) 011 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) 100 => 4 registers write once (4 bytes: p, p+1, p+2, p+3) 101 => 2 registers write twice alternate (4 bytes: p, p+1, p, p+1) 110 => 1 register write twice (2 bytes: p, p ) 111 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next HDMA transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4331 | 1 byte | SNES Register (DMA) | rwb++++ BBAD3 - DMA Destination Register for Channel 3 pppppppp This specifies the Bus B address to access. Considering the standard CPU memory space, this specifies which address $00:2100-$00:21FF to access, with two- and four-register modes wrapping $21FF->$2100, not $2200. The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4332 | 3 bytes | SNES Register (DMA) | rwl++++ A1T3L - DMA Source Address for Channel 3 low byte rwh++++ A1T3H - DMA Source Address for Channel 3 high byte rwb++++ A1B3 - DMA Source Address for Channel 3 bank byte bbbbbbbb hhhhhhhh llllllll This specifies the starting Address Bus A address for the DMA transfer, or the beginning of the HDMA table for HDMA transfers. Note that Bus A does not access the Bus B registers, so pointing this address at say $00:2100 results in open bus. The effect of writing this register during HDMA to the associated channel is unknown. However, current theory is that only $4334 will affect the transfer. The changes will take effect at the next HDMA init. During DMA, $4332/3 will be incremented or decremented as specified by $4332/3. However $4334 will NOT be adjusted. These registers will not be affected by HDMA. This register is set to $FF on power on, and is unchanged on reset. | |
$4335 | 3 bytes | SNES Register (DMA) | rwl++++ DAS3L - DMA Size/HDMA Indirect Address low byte rwh++++ DAS3H - DMA Size/HDMA Indirect Address high byte rwb++++ DASB3 - HDMA Indirect Address bank byte bbbbbbbb hhhhhhhh llllllll For DMA, $4335/6 indicate the number of bytes to transfer. Note that this is a strict limit: if this is set to 1 then only 1 byte will be written, even if the transfer mode specifies 2 or 4 registers (and if this is 5, all 4 registers would be written once, then the first only would be written a second time). Note, however, that writing $0000 to this register actually results in a transfer of $10000 bytes, not 0. $4335/6 are decremented during DMA, and thus typically end up set to 0 when DMA is complete. For HDMA, $4337 specifies the bank for indirect addressing mode. The indirect address is copied into $4335/6 and incremented appropriately. For direct HDMA, these registers are not used or altered. Writes to $4337 during indirect HDMA will take effect for the next transfer. Writes to $4335/6 during indirect HDMA will also take effect for the next HDMA transfer, however this is only noticable during repeat mode (for normal mode, a new indirect address will be read from the table before the transfer). For a direct transfer, presumably nothing will happen. This register is set to $FF on power on, and is unchanged on reset. | |
$4338 | 2 bytes | SNES Register (DMA) | rwl++++ A2A3L - HDMA Table Address low byte rwh++++ A2A3H - HDMA Table Address high byte aaaaaaaa aaaaaaaa At the beginning of the frame $4332/3 are copied into this register for all active HDMA channels, and then this register is updated as the table is read. Thus, if a game wishes to start HDMA mid-frame (or change tables mid-frame), this register must be written. Writing this register mid-frame changes the table address for the next scanline. This register is not used for DMA. This register is set to $FF on power on, and is unchanged on reset. | |
$433A | 1 byte | SNES Register (DMA) | rwb++++ NLTR3 - HDMA Line Counter rccccccc r = Repeat Select. When set, the HDMA transfer will be performed every line, rather than only when this register is loaded from the table. However, this byte (and the indirect HDMA address) will only be reloaded from the table when the counter reaches 0. ccccccc = Line count. This is decremented every scanline. When it reaches 0, a byte is read from the HDMA table into this register (and the indirect HDMA address is read into $4335/6 if applicable). One oddity: the register is decremeted before being checked for r status or c==0. Thus, setting a value of $80 is really "128 lines with no repeat" rather than "0 lines with repeat". Similarly, a value of $00 will be "128 lines with repeat" when it doesn't mean "terminate the channel". This register is initialized at the end of V-Blank for every active HDMA channel. Note that if a game wishes to begin HDMA during the frame, it will most likely have to initalize this register. Writing this mid-transfer will similarly change the count and repeat to take effect next scanline. Remember though that 'repeat' won't take effect until after the next transfer period. This register is set to $ff on power on, and is unchanged on reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$433B | 2 bytes | SNES Register (DMA) | rwb++++ ????3 - Unknown rwb++++ ????3 - Unknown ???????? The effects of these registers (if any) are unknown. $433F and $433B are really aliases for the same register. This register is set to $FF on power on, and is unchanged on reset. | |
$4340 | 1 byte | SNES Register (DMA) | rwb++++ DMAP4 - DMA Control for Channel 4 da-ifttt d = Transfer Direction. When clear, data will be read from the CPU memory and written to the PPU register. When set, vice versa. Contrary to previous belief, this bit DOES affect HDMA! Indirect mode is more useful, it will read the table as normal and write from Bus B to the Bus A address specified. Direct mode will work as expected though, it will read counts from the table and try to write the data values into the table. a = HDMA Addressing Mode. When clear, the HDMA table contains the data to transfer. When set, the HDMA table contains pointers to the data. This bit does not affect DMA. i = DMA Address Increment. When clear, the DMA address will be incremented for each byte. When set, the DMA address will be decremented. This bit does not affect HDMA. f = DMA Fixed Transfer. When set, the DMA address will not be adjusted. When clear, the address will be adjusted as specified by bit 4. This bit does not affect HDMA. ttt = Transfer Mode. 000 => 1 register write once (1 byte: p ) 001 => 2 registers write once (2 bytes: p, p+1 ) 010 => 1 register write twice (2 bytes: p, p ) 011 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) 100 => 4 registers write once (4 bytes: p, p+1, p+2, p+3) 101 => 2 registers write twice alternate (4 bytes: p, p+1, p, p+1) 110 => 1 register write twice (2 bytes: p, p ) 111 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next HDMA transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4341 | 1 byte | SNES Register (DMA) | rwb++++ BBAD4 - DMA Destination Register for Channel 4 pppppppp This specifies the Bus B address to access. Considering the standard CPU memory space, this specifies which address $00:2100-$00:21FF to access, with two- and four-register modes wrapping $21FF->$2100, not $2200. The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4342 | 3 bytes | SNES Register (DMA) | rwl++++ A1T4L - DMA Source Address for Channel 4 low byte rwh++++ A1T4H - DMA Source Address for Channel 4 high byte rwb++++ A1B4 - DMA Source Address for Channel 4 bank byte bbbbbbbb hhhhhhhh llllllll This specifies the starting Address Bus A address for the DMA transfer, or the beginning of the HDMA table for HDMA transfers. Note that Bus A does not access the Bus B registers, so pointing this address at say $00:2100 results in open bus. The effect of writing this register during HDMA to the associated channel is unknown. However, current theory is that only $4344 will affect the transfer. The changes will take effect at the next HDMA init. During DMA, $4342/3 will be incremented or decremented as specified by $4342/3. However $4344 will NOT be adjusted. These registers will not be affected by HDMA. This register is set to $FF on power on, and is unchanged on reset. | |
$4345 | 3 bytes | SNES Register (DMA) | rwl++++ DAS4L - DMA Size/HDMA Indirect Address low byte rwh++++ DAS4H - DMA Size/HDMA Indirect Address high byte rwb++++ DASB4 - HDMA Indirect Address bank byte bbbbbbbb hhhhhhhh llllllll For DMA, $4345/6 indicate the number of bytes to transfer. Note that this is a strict limit: if this is set to 1 then only 1 byte will be written, even if the transfer mode specifies 2 or 4 registers (and if this is 5, all 4 registers would be written once, then the first only would be written a second time). Note, however, that writing $0000 to this register actually results in a transfer of $10000 bytes, not 0. $4345/6 are decremented during DMA, and thus typically end up set to 0 when DMA is complete. For HDMA, $4347 specifies the bank for indirect addressing mode. The indirect address is copied into $4345/6 and incremented appropriately. For direct HDMA, these registers are not used or altered. Writes to $4347 during indirect HDMA will take effect for the next transfer. Writes to $4345/6 during indirect HDMA will also take effect for the next HDMA transfer, however this is only noticable during repeat mode (for normal mode, a new indirect address will be read from the table before the transfer). For a direct transfer, presumably nothing will happen. This register is set to $FF on power on, and is unchanged on reset. | |
$4348 | 2 bytes | SNES Register (DMA) | rwl++++ A2A4L - HDMA Table Address low byte rwh++++ A2A4H - HDMA Table Address high byte aaaaaaaa aaaaaaaa At the beginning of the frame $4342/3 are copied into this register for all active HDMA channels, and then this register is updated as the table is read. Thus, if a game wishes to start HDMA mid-frame (or change tables mid-frame), this register must be written. Writing this register mid-frame changes the table address for the next scanline. This register is not used for DMA. This register is set to $FF on power on, and is unchanged on reset. | |
$434A | 1 byte | SNES Register (DMA) | rwb++++ NLTR4 - HDMA Line Counter rccccccc r = Repeat Select. When set, the HDMA transfer will be performed every line, rather than only when this register is loaded from the table. However, this byte (and the indirect HDMA address) will only be reloaded from the table when the counter reaches 0. ccccccc = Line count. This is decremented every scanline. When it reaches 0, a byte is read from the HDMA table into this register (and the indirect HDMA address is read into $4345/6 if applicable). One oddity: the register is decremeted before being checked for r status or c==0. Thus, setting a value of $80 is really "128 lines with no repeat" rather than "0 lines with repeat". Similarly, a value of $00 will be "128 lines with repeat" when it doesn't mean "terminate the channel". This register is initialized at the end of V-Blank for every active HDMA channel. Note that if a game wishes to begin HDMA during the frame, it will most likely have to initalize this register. Writing this mid-transfer will similarly change the count and repeat to take effect next scanline. Remember though that 'repeat' won't take effect until after the next transfer period. This register is set to $ff on power on, and is unchanged on reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$434B | 2 bytes | SNES Register (DMA) | rwb++++ ????4 - Unknown rwb++++ ????4 - Unknown ???????? The effects of these registers (if any) are unknown. $434F and $434B are really aliases for the same register. This register is set to $FF on power on, and is unchanged on reset. | |
$4350 | 1 byte | SNES Register (DMA) | rwb++++ DMAP5 - DMA Control for Channel 5 da-ifttt d = Transfer Direction. When clear, data will be read from the CPU memory and written to the PPU register. When set, vice versa. Contrary to previous belief, this bit DOES affect HDMA! Indirect mode is more useful, it will read the table as normal and write from Bus B to the Bus A address specified. Direct mode will work as expected though, it will read counts from the table and try to write the data values into the table. a = HDMA Addressing Mode. When clear, the HDMA table contains the data to transfer. When set, the HDMA table contains pointers to the data. This bit does not affect DMA. i = DMA Address Increment. When clear, the DMA address will be incremented for each byte. When set, the DMA address will be decremented. This bit does not affect HDMA. f = DMA Fixed Transfer. When set, the DMA address will not be adjusted. When clear, the address will be adjusted as specified by bit 4. This bit does not affect HDMA. ttt = Transfer Mode. 000 => 1 register write once (1 byte: p ) 001 => 2 registers write once (2 bytes: p, p+1 ) 010 => 1 register write twice (2 bytes: p, p ) 011 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) 100 => 4 registers write once (4 bytes: p, p+1, p+2, p+3) 101 => 2 registers write twice alternate (4 bytes: p, p+1, p, p+1) 110 => 1 register write twice (2 bytes: p, p ) 111 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next HDMA transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4351 | 1 byte | SNES Register (DMA) | rwb++++ BBAD5 - DMA Destination Register for Channel 5 pppppppp This specifies the Bus B address to access. Considering the standard CPU memory space, this specifies which address $00:2100-$00:21FF to access, with two- and four-register modes wrapping $21FF->$2100, not $2200. The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4352 | 3 bytes | SNES Register (DMA) | rwl++++ A1T5L - DMA Source Address for Channel 5 low byte rwh++++ A1T5H - DMA Source Address for Channel 5 high byte rwb++++ A1B5 - DMA Source Address for Channel 5 bank byte bbbbbbbb hhhhhhhh llllllll This specifies the starting Address Bus A address for the DMA transfer, or the beginning of the HDMA table for HDMA transfers. Note that Bus A does not access the Bus B registers, so pointing this address at say $00:2100 results in open bus. The effect of writing this register during HDMA to the associated channel is unknown. However, current theory is that only $4354 will affect the transfer. The changes will take effect at the next HDMA init. During DMA, $4352/3 will be incremented or decremented as specified by $4352/3. However $4354 will NOT be adjusted. These registers will not be affected by HDMA. This register is set to $FF on power on, and is unchanged on reset. | |
$4355 | 3 bytes | SNES Register (DMA) | rwl++++ DAS5L - DMA Size/HDMA Indirect Address low byte rwh++++ DAS5H - DMA Size/HDMA Indirect Address high byte rwb++++ DASB5 - HDMA Indirect Address bank byte bbbbbbbb hhhhhhhh llllllll For DMA, $4355/6 indicate the number of bytes to transfer. Note that this is a strict limit: if this is set to 1 then only 1 byte will be written, even if the transfer mode specifies 2 or 4 registers (and if this is 5, all 4 registers would be written once, then the first only would be written a second time). Note, however, that writing $0000 to this register actually results in a transfer of $10000 bytes, not 0. $4355/6 are decremented during DMA, and thus typically end up set to 0 when DMA is complete. For HDMA, $4357 specifies the bank for indirect addressing mode. The indirect address is copied into $4355/6 and incremented appropriately. For direct HDMA, these registers are not used or altered. Writes to $4357 during indirect HDMA will take effect for the next transfer. Writes to $4355/6 during indirect HDMA will also take effect for the next HDMA transfer, however this is only noticable during repeat mode (for normal mode, a new indirect address will be read from the table before the transfer). For a direct transfer, presumably nothing will happen. This register is set to $FF on power on, and is unchanged on reset. | |
$4358 | 2 bytes | SNES Register (DMA) | rwl++++ A2A5L - HDMA Table Address low byte rwh++++ A2A5H - HDMA Table Address high byte aaaaaaaa aaaaaaaa At the beginning of the frame $4352/3 are copied into this register for all active HDMA channels, and then this register is updated as the table is read. Thus, if a game wishes to start HDMA mid-frame (or change tables mid-frame), this register must be written. Writing this register mid-frame changes the table address for the next scanline. This register is not used for DMA. This register is set to $FF on power on, and is unchanged on reset. | |
$435A | 1 byte | SNES Register (DMA) | rwb++++ NLTR5 - HDMA Line Counter rccccccc r = Repeat Select. When set, the HDMA transfer will be performed every line, rather than only when this register is loaded from the table. However, this byte (and the indirect HDMA address) will only be reloaded from the table when the counter reaches 0. ccccccc = Line count. This is decremented every scanline. When it reaches 0, a byte is read from the HDMA table into this register (and the indirect HDMA address is read into $4355/6 if applicable). One oddity: the register is decremeted before being checked for r status or c==0. Thus, setting a value of $80 is really "128 lines with no repeat" rather than "0 lines with repeat". Similarly, a value of $00 will be "128 lines with repeat" when it doesn't mean "terminate the channel". This register is initialized at the end of V-Blank for every active HDMA channel. Note that if a game wishes to begin HDMA during the frame, it will most likely have to initalize this register. Writing this mid-transfer will similarly change the count and repeat to take effect next scanline. Remember though that 'repeat' won't take effect until after the next transfer period. This register is set to $ff on power on, and is unchanged on reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$435B | 2 bytes | SNES Register (DMA) | rwb++++ ????5 - Unknown rwb++++ ????5 - Unknown ???????? The effects of these registers (if any) are unknown. $435F and $435B are really aliases for the same register. This register is set to $FF on power on, and is unchanged on reset. | |
$4360 | 1 byte | SNES Register (DMA) | rwb++++ DMAP6 - DMA Control for Channel 6 da-ifttt d = Transfer Direction. When clear, data will be read from the CPU memory and written to the PPU register. When set, vice versa. Contrary to previous belief, this bit DOES affect HDMA! Indirect mode is more useful, it will read the table as normal and write from Bus B to the Bus A address specified. Direct mode will work as expected though, it will read counts from the table and try to write the data values into the table. a = HDMA Addressing Mode. When clear, the HDMA table contains the data to transfer. When set, the HDMA table contains pointers to the data. This bit does not affect DMA. i = DMA Address Increment. When clear, the DMA address will be incremented for each byte. When set, the DMA address will be decremented. This bit does not affect HDMA. f = DMA Fixed Transfer. When set, the DMA address will not be adjusted. When clear, the address will be adjusted as specified by bit 4. This bit does not affect HDMA. ttt = Transfer Mode. 000 => 1 register write once (1 byte: p ) 001 => 2 registers write once (2 bytes: p, p+1 ) 010 => 1 register write twice (2 bytes: p, p ) 011 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) 100 => 4 registers write once (4 bytes: p, p+1, p+2, p+3) 101 => 2 registers write twice alternate (4 bytes: p, p+1, p, p+1) 110 => 1 register write twice (2 bytes: p, p ) 111 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next HDMA transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4361 | 1 byte | SNES Register (DMA) | rwb++++ BBAD6 - DMA Destination Register for Channel 6 pppppppp This specifies the Bus B address to access. Considering the standard CPU memory space, this specifies which address $00:2100-$00:21FF to access, with two- and four-register modes wrapping $21FF->$2100, not $2200. The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4362 | 3 bytes | SNES Register (DMA) | rwl++++ A1T6L - DMA Source Address for Channel 6 low byte rwh++++ A1T6H - DMA Source Address for Channel 6 high byte rwb++++ A1B6 - DMA Source Address for Channel 6 bank byte bbbbbbbb hhhhhhhh llllllll This specifies the starting Address Bus A address for the DMA transfer, or the beginning of the HDMA table for HDMA transfers. Note that Bus A does not access the Bus B registers, so pointing this address at say $00:2100 results in open bus. The effect of writing this register during HDMA to the associated channel is unknown. However, current theory is that only $4364 will affect the transfer. The changes will take effect at the next HDMA init. During DMA, $4362/3 will be incremented or decremented as specified by $4362/3. However $4364 will NOT be adjusted. These registers will not be affected by HDMA. This register is set to $FF on power on, and is unchanged on reset. | |
$4365 | 3 bytes | SNES Register (DMA) | rwl++++ DAS6L - DMA Size/HDMA Indirect Address low byte rwh++++ DAS6H - DMA Size/HDMA Indirect Address high byte rwb++++ DASB6 - HDMA Indirect Address bank byte bbbbbbbb hhhhhhhh llllllll For DMA, $4365/6 indicate the number of bytes to transfer. Note that this is a strict limit: if this is set to 1 then only 1 byte will be written, even if the transfer mode specifies 2 or 4 registers (and if this is 5, all 4 registers would be written once, then the first only would be written a second time). Note, however, that writing $0000 to this register actually results in a transfer of $10000 bytes, not 0. $4365/6 are decremented during DMA, and thus typically end up set to 0 when DMA is complete. For HDMA, $4367 specifies the bank for indirect addressing mode. The indirect address is copied into $4365/6 and incremented appropriately. For direct HDMA, these registers are not used or altered. Writes to $4367 during indirect HDMA will take effect for the next transfer. Writes to $4365/6 during indirect HDMA will also take effect for the next HDMA transfer, however this is only noticable during repeat mode (for normal mode, a new indirect address will be read from the table before the transfer). For a direct transfer, presumably nothing will happen. This register is set to $FF on power on, and is unchanged on reset. | |
$4368 | 2 bytes | SNES Register (DMA) | rwl++++ A2A6L - HDMA Table Address low byte rwh++++ A2A6H - HDMA Table Address high byte aaaaaaaa aaaaaaaa At the beginning of the frame $4362/3 are copied into this register for all active HDMA channels, and then this register is updated as the table is read. Thus, if a game wishes to start HDMA mid-frame (or change tables mid-frame), this register must be written. Writing this register mid-frame changes the table address for the next scanline. This register is not used for DMA. This register is set to $FF on power on, and is unchanged on reset. | |
$436A | 1 byte | SNES Register (DMA) | rwb++++ NLTR6 - HDMA Line Counter rccccccc r = Repeat Select. When set, the HDMA transfer will be performed every line, rather than only when this register is loaded from the table. However, this byte (and the indirect HDMA address) will only be reloaded from the table when the counter reaches 0. ccccccc = Line count. This is decremented every scanline. When it reaches 0, a byte is read from the HDMA table into this register (and the indirect HDMA address is read into $4365/6 if applicable). One oddity: the register is decremeted before being checked for r status or c==0. Thus, setting a value of $80 is really "128 lines with no repeat" rather than "0 lines with repeat". Similarly, a value of $00 will be "128 lines with repeat" when it doesn't mean "terminate the channel". This register is initialized at the end of V-Blank for every active HDMA channel. Note that if a game wishes to begin HDMA during the frame, it will most likely have to initalize this register. Writing this mid-transfer will similarly change the count and repeat to take effect next scanline. Remember though that 'repeat' won't take effect until after the next transfer period. This register is set to $ff on power on, and is unchanged on reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$436B | 2 bytes | SNES Register (DMA) | rwb++++ ????6 - Unknown rwb++++ ????6 - Unknown ???????? The effects of these registers (if any) are unknown. $436F and $436B are really aliases for the same register. This register is set to $FF on power on, and is unchanged on reset. | |
$4370 | 1 byte | SNES Register (DMA) | rwb++++ DMAP7 - DMA Control for Channel 7 da-ifttt d = Transfer Direction. When clear, data will be read from the CPU memory and written to the PPU register. When set, vice versa. Contrary to previous belief, this bit DOES affect HDMA! Indirect mode is more useful, it will read the table as normal and write from Bus B to the Bus A address specified. Direct mode will work as expected though, it will read counts from the table and try to write the data values into the table. a = HDMA Addressing Mode. When clear, the HDMA table contains the data to transfer. When set, the HDMA table contains pointers to the data. This bit does not affect DMA. i = DMA Address Increment. When clear, the DMA address will be incremented for each byte. When set, the DMA address will be decremented. This bit does not affect HDMA. f = DMA Fixed Transfer. When set, the DMA address will not be adjusted. When clear, the address will be adjusted as specified by bit 4. This bit does not affect HDMA. ttt = Transfer Mode. 000 => 1 register write once (1 byte: p ) 001 => 2 registers write once (2 bytes: p, p+1 ) 010 => 1 register write twice (2 bytes: p, p ) 011 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) 100 => 4 registers write once (4 bytes: p, p+1, p+2, p+3) 101 => 2 registers write twice alternate (4 bytes: p, p+1, p, p+1) 110 => 1 register write twice (2 bytes: p, p ) 111 => 2 registers write twice each (4 bytes: p, p, p+1, p+1) The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next HDMA transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4371 | 1 byte | SNES Register (DMA) | rwb++++ BBAD7 - DMA Destination Register for Channel 7 pppppppp This specifies the Bus B address to access. Considering the standard CPU memory space, this specifies which address $00:2100-$00:21FF to access, with two- and four-register modes wrapping $21FF->$2100, not $2200. The effect of writing this register during HDMA to the associated channel is unknown. Most likely, the change takes effect for the next transfer. This register is set to $FF on power on, and is unchanged on reset. | |
$4372 | 3 bytes | SNES Register (DMA) | rwl++++ A1T7L - DMA Source Address for Channel 7 low byte rwh++++ A1T7H - DMA Source Address for Channel 7 high byte rwb++++ A1B7 - DMA Source Address for Channel 7 bank byte bbbbbbbb hhhhhhhh llllllll This specifies the starting Address Bus A address for the DMA transfer, or the beginning of the HDMA table for HDMA transfers. Note that Bus A does not access the Bus B registers, so pointing this address at say $00:2100 results in open bus. The effect of writing this register during HDMA to the associated channel is unknown. However, current theory is that only $4374 will affect the transfer. The changes will take effect at the next HDMA init. During DMA, $4372/3 will be incremented or decremented as specified by $4372/3. However $4374 will NOT be adjusted. These registers will not be affected by HDMA. This register is set to $FF on power on, and is unchanged on reset. | |
$4375 | 3 bytes | SNES Register (DMA) | rwl++++ DAS7L - DMA Size/HDMA Indirect Address low byte rwh++++ DAS7H - DMA Size/HDMA Indirect Address high byte rwb++++ DASB7 - HDMA Indirect Address bank byte bbbbbbbb hhhhhhhh llllllll For DMA, $4375/6 indicate the number of bytes to transfer. Note that this is a strict limit: if this is set to 1 then only 1 byte will be written, even if the transfer mode specifies 2 or 4 registers (and if this is 5, all 4 registers would be written once, then the first only would be written a second time). Note, however, that writing $0000 to this register actually results in a transfer of $10000 bytes, not 0. $4375/6 are decremented during DMA, and thus typically end up set to 0 when DMA is complete. For HDMA, $4377 specifies the bank for indirect addressing mode. The indirect address is copied into $4375/6 and incremented appropriately. For direct HDMA, these registers are not used or altered. Writes to $4377 during indirect HDMA will take effect for the next transfer. Writes to $4375/6 during indirect HDMA will also take effect for the next HDMA transfer, however this is only noticable during repeat mode (for normal mode, a new indirect address will be read from the table before the transfer). For a direct transfer, presumably nothing will happen. This register is set to $FF on power on, and is unchanged on reset. | |
$4378 | 2 bytes | SNES Register (DMA) | rwl++++ A2A7L - HDMA Table Address low byte rwh++++ A2A7H - HDMA Table Address high byte aaaaaaaa aaaaaaaa At the beginning of the frame $4372/3 are copied into this register for all active HDMA channels, and then this register is updated as the table is read. Thus, if a game wishes to start HDMA mid-frame (or change tables mid-frame), this register must be written. Writing this register mid-frame changes the table address for the next scanline. This register is not used for DMA. This register is set to $FF on power on, and is unchanged on reset. | |
$437A | 1 byte | SNES Register (DMA) | rwb++++ NLTR7 - HDMA Line Counter rccccccc r = Repeat Select. When set, the HDMA transfer will be performed every line, rather than only when this register is loaded from the table. However, this byte (and the indirect HDMA address) will only be reloaded from the table when the counter reaches 0. ccccccc = Line count. This is decremented every scanline. When it reaches 0, a byte is read from the HDMA table into this register (and the indirect HDMA address is read into $4375/6 if applicable). One oddity: the register is decremeted before being checked for r status or c==0. Thus, setting a value of $80 is really "128 lines with no repeat" rather than "0 lines with repeat". Similarly, a value of $00 will be "128 lines with repeat" when it doesn't mean "terminate the channel". This register is initialized at the end of V-Blank for every active HDMA channel. Note that if a game wishes to begin HDMA during the frame, it will most likely have to initalize this register. Writing this mid-transfer will similarly change the count and repeat to take effect next scanline. Remember though that 'repeat' won't take effect until after the next transfer period. This register is set to $ff on power on, and is unchanged on reset. See the section "DMA AND HDMA" below for more information. | DMA and HDMA Information |
$437B | 2 bytes | SNES Register (DMA) | rwb++++ ????7 - Unknown rwb++++ ????7 - Unknown ???????? The effects of these registers (if any) are unknown. $437F and $437B are really aliases for the same register. This register is set to $FF on power on, and is unchanged on reset. | |
Tweaks Address | Length | Type | Description | Details |
$0080F7 | 1 byte | Debug | Change from [38] to [00] to enable debug routine at $0080F8. | |
$00810D | 1 byte | Debug | [20] Number of frames to skip running gamemode code after initally pressing R when frame advance flag is set. | |
$00812C | 1 byte | Debug | [04] Number of frames to skip running game mode code between each frame where game mode is running when L or R is held on Controller 2 and frame advance flag is set. | |
$00853D | 1 byte | Music | Change to [04] to make music header setting E play the "Welcome to Yoshi's Island" music. To be used with $01B259. | |
$0086D8 | 1 byte | Boss | Change to [9C] to remove the ending Key Scene from Naval Piranha boss, when using the "OH MY!" trick. Default [A3]. | |
$018F0D | 1 byte | Boss | Hookbill the Koopa's HP, multiplied by 2. Default is [06]: 3 HP. | |
$018F31 | 2 bytes | Sound Effect | Sound that Hookbill the Koopa makes when you pound his stomach. Default is [80 00]. For a list of sounds, see here. | |
$018FB1 | 2 bytes | Sound Effect | Sound that Hookbill the Koopa makes when he coughs. Default is [39 00]. For a list of sounds, see here. | |
$019078 | 2 bytes | Sprite Number | Sprite that Hookbill will cough up when stomped off. Default is [25 00]: Sprite 25, Green Egg. NOTE: Not every sprite will spawn / work correctly. |
|
$019118 | 2 bytes | Sound Effect | Sound that Hookbill the Koopa makes when he gets hit with an egg while crawling. Default is [3F 00]. For a list of sounds, see here. | |
$019210 | 2 bytes | Sound Effect | Sound that Hookbill the Koopa makes when he gets hit with an egg that knocks him over. Default is [3F 00]. For a list of sounds, see here. | |
$01A00B | 1 byte | Boss | Change to [9C] to remove the ending Key Scene from Hookbill the Koopa boss, after defeat. Default [A6]. | |
$01B259 | 1 byte | Music | Change to [02] to make music header setting E play the "Welcome to Yoshi's Island" music. To be used with $00853D. | |
$01B7D7 | 136 bytes | Misc. Tilemap | Table for the text shown in the Pause/Results screens: $01B7D7 - "HIGH SCORE" text line in the Results Screen: 22 bytes long (2 less than the others because this line has a one-tile border in each side). The first, second, twenty-first and twenty-second tiles will be overwriten with the Sun animation, while the eighteenth and nineteenth tiles will be overwriten depending on the player's total score. Default [3A 3C 4E 0E 10 0C 0E 4E 24 04 1C 22 08 36 36 36 36 54 5C 4E 3A 3C]. $01B7ED - "STARS" text line: 24 bytes long. The fourteenth, fifteenth, twenty-first, twenty-second and the bottom half of the twenty-fourth tiles will be overwritten depending on the player's star count. Default [3E 40 4E 24 26 00 22 24 36 36 36 36 36 36 50 34 56 50 68 6A 4E 50 6C 6E]. $01B805 - "COINS" text line: 24 bytes long. The fourteenth, fifteenth, twenty-first, twenty-second and the bottom half of the twenty-fourth tiles will be overwritten depending on the player's red coin count. Default [46 48 4E 04 1C 10 1A 24 36 36 36 36 36 36 50 34 54 50 68 6A 4E 50 6C 6E]. $01B81D - "FLOWERS" text line: 24 bytes long. The sixteenth, twenty-first and the bottom half of the twenty-fourth tiles will be overwritten depending on the player's flower count. Default [42 44 4E 0A 16 1C 2C 08 22 24 36 36 36 36 36 50 34 5A 68 6A 4E 50 6C 6E]. $01B835 - "TOTAL POINTS" text line: 21 bytes long (because it has 3 empty tiles on the left). The twenty-first, twenty-second and the bottom half of the twenty-fourth tiles will be overwritten depending on the player's total score. Default [26 1C 26 00 16 4E 1E 1C 10 1A 26 24 36 36 36 36 36 36 50 6C 6E]. $01B84A - "HIGH SCORE" text line in the Pause Screen: 21 bytes long (because it has 3 empty tiles on the left). The twenty-first, twenty-second and the bottom half of the twenty-fourth tiles will be overwritten depending on the player's total score. Default [4E 0E 10 0C 0E 4E 24 04 1C 22 08 36 36 36 36 36 36 36 50 6C 6E]. |
Input Basic Example |
$01BF2C | 12 bytes | Table | The bonus games which can be selected upon beating a stage in each world. These values correspond to the different bonus games: [00] - Flip Cards [02] - Scratch & Match [04] - Drawing Lots [06] - Match Cards [08] - Roulette [0A] - Slot Machine The default values are as follows: [00 02] - World 1 [04 0A] - World 2 [06 08] - World 3 [04 02] - World 4 [00 08] - World 5 [06 0A] - World 6 |
|
$01C288 | 1 byte | Text | Change to 00 to disable the message that pops up when you lose Baby Mario for the first time. Default [04]. To be used with $01C28B. | |
$01C28B | 1 byte | Text | Change to 80 to disable the message that pops up when you lose Baby Mario for the first time. Default [D0]. To be used with $01C288. | |
$01DE94 | 1 byte | Sound Effect | Sound that message boxes makes when they appear (after the block is hit). Default is [50]. For a list of sounds, see here. | |
$0285D4 | 1 byte | Boss | Change to [9C] to remove the ending Key Scene from Roger the Potted Ghost boss, after defeat. Default [A3]. | |
$02941F | 1 byte | Text | Change to 80 to disable the tutorial message that pops up when you pass the first Middle Ring in the game. Default [D0]. | |
$02A7DC | 1 byte | Level Number | Stage Level number of the level where you never obtain a bonus challenge on the goal roulette (originally Extra 1 [08]) | |
$02B4E0 | 2 bytes | Sprite Number | Change what the Grinder (spits seeds of watermelon) spits (sprite 1A6). Default is [07 01]: Sprite 107, Seed of watermelon. NOTE: Not every sprite will spawn / work correctly. |
|
$02B9C4 | 2 bytes | Sprite Number | Change what the Short Fuse throws (sprite 1A7 on Y=0). Default is [60 00]: Sprite 60, Bomb. NOTE: Not every sprite will spawn / work correctly. |
|
$02B9C9 | 2 bytes | Sprite Number | Change what the Seedy Sally throws (sprite 1A7 on Y=1). Default is [F9 00]: Sprite F9, Yellow Needlenose (although in this specific case the Needlenose will be green). NOTE: Not every sprite will spawn / work correctly. |
|
$02BCB3 | 2 bytes | Sprite Number | Change what the Grinder (climbing, spits seeds of watermelon) spits (sprite 1A9). Default is [07 01]: Sprite 107, Seed of watermelon. NOTE: Not every sprite will spawn / work correctly. |
|
$02D770 | 1 byte | Boss | Change to [A3] to add the ending Key Scene to Sluggy the Unshaven boss, after defeat. Default [9C]. | |
$02E064 | 2 bytes | Boss | Change to [EA EA] to make all bosses have a ending Key Scene after defeated (originally only for X-8 bosses). Note that, this is the only way to have Marching Milde and Prince Froggy to have a proper Key Scene, since the individual setting doesn't work with them (with Froggy the scene become a softlock and with Marching Milde the key doesn't appear at all). Default [F0 27]. Keep in mind that X-4 bosses have a shorter ending scene, so the scene will be cut before the big keyhole appears. Also note that Prince Froggy's scene has graphical glitches for some reason. |
|
$02E4B5 | 2 bytes | Boss | Naval Piranha's HP. Default is [03 00]. | |
$02F1F9 | 1 byte | Boss | Change to [9C] to remove the ending Key Scene from Naval Piranha boss, after defeat. Default [A6]. Note: Triggering the "OH MY!" trick will still show the Key Scene as usual. Check $0086D8 if you want to disable the scene in this case too. |
|
$039BA1 | 2 bytes | ASM | Change from [F0 03] (BEQ #$03) to [80 00] (BRA #$00) to force bubbles to always give you one shot, or to [80 03] (BRA #$03) to force bubbles to always give you three shots. | |
$039BAD | 1 byte | Timer | The length of the pause when Yoshi eats a watermelon. Change to 00 to disable the pause when Yoshi eats a watermelon. Default [10]. | |
$03A527 | 2 bytes | Misc. | Coins required to get a life. Default is [64 00] (100 on hex) | |
$04BB7C | 1 byte | Boss | Change to [A3] to add the ending Key Scene to Bigger Boo boss, after defeat. Default [9C]. | |
$04E1AE | 1 byte | Misc. | Change to 1F to disable the Welcome level and immediately start at 1-1. Default [0B]. To be used with $04E1B4. | |
$04E1B4 | 1 byte | Misc. | Change to 00 to disable the Welcome level and immediately start at 1-1. Default [0B]. To be used with $04E1AE. | |
$05A087 | 1 byte | Boss | Change to [6B] to make Naval Piranha's small form immune to eggs (preventing the "OH, MY!" trick). Default [B9]. | |
$068CB5 | 1 byte | Boss | Change to [9C] to remove the ending Key Scene from Salvo the Slime boss, after defeat. Default [A3]. | |
$06A2E8 | 1 byte | Boss | Change to [A3] to add the ending Key Scene to Burt the Bashful boss, after defeat. Default [9C]. | |
$06E1F8 | 7 bytes | Sprite Physics | Change to [EA EA EA EA EA EA EA] to make the large sewer ghost spawn infinite Shy Guys (up to sprite limits), instead of stopping when you have full eggs. Default [A9 D5 91 22 44 DE 7E]. | |
$0781B8 | 2 bytes | Sprite Physics | Change what the Egg Plant shoots (sprite F4 on X=0) when shooting at normal speed. The values should be the same as the ones in $078250, in order to prevent unintended bugs or crashes. Default is [25 00]: Sprite 25, Green Egg. | How does the second byte works. |
$078250 | 2 bytes | Sprite Physics | Change what the Egg Plant shoots (sprite F4 on X=0) when shooting at fast speed (when Yoshi does a Ground Pound near them). The values should be the same as the ones in $0781B8, in order to prevent unintended bugs or crashes. Default is [25 00]: Sprite 25, Green Egg. | How does the second byte works. |
$0782F9 | 2 bytes | Sprite Physics | Change what the Needlenose Plant shoots (sprite F4 on X=1) when shooting at normal speed. The values should be the same as the ones in $078347, in order to prevent unintended bugs or crashes. Default is [63 01]: Sprite 163, Bouncing green Needlenose. | How does the second byte works. |
$078347 | 2 bytes | Sprite Physics | Change what the Needlenose Plant shoots (sprite F4 on X=1) when shooting at fast speed (when Yoshi does a Ground Pound near them). The values should be the same as the ones in $0782F9, in order to prevent unintended bugs or crashes. Default is [63 01]: Sprite 163, Bouncing green Needlenose. | How does the second byte works. |
$0ADA27 | 1 byte | Sprite Physics | Amount of times an egg will ricochet. Default value is [63] (corresponds to the Super FX comamnd sub #3). Change the "3" to change the number of bounces. |
|
$0CE569 | 36 bytes | Sprite Palette | Boss palette pointers after transformation (3 bytes each): [CA A5 5F] - 1-4 Burt the Bashful [22 21 70] - 1-8 Salvo the Slime [22 21 70] - 2-4 Bigger Boo [22 21 70] - 2-8 Roger the Potted Ghost [A2 21 70] - 3-4 Prince Froggy [22 21 70] - 3-8 Naval Piranha [06 A6 5F] - 4-4 Marching Milde [22 21 70] - 4-8 Hookbill the Koopa [82 21 70] - 5-4 Sluggy the Unshaven [8E A5 5F] - 5-8 Raphael the Raven [42 A6 5F] - 6-4 Tap-Tap the Red Nose [C2 21 70] - 6-8 King Bowser If you change the bosses' location, you need to edit the pointers to fit your levels. |
|
$0CE58D | 36 bytes | Sprite Palette | Boss palette pointers before transformation (3 bytes each): [02 21 70] - 1-4 Burt the Bashful [22 21 70] - 1-8 Salvo the Slime [82 21 70] - 2-4 Bigger Boo [22 21 70] - 2-8 Roger the Potted Ghost [22 21 70] - 3-4 Prince Froggy [22 21 70] - 3-8 Naval Piranha [A2 21 70] - 4-4 Marching Milde [22 21 70] - 4-8 Hookbill the Koopa [82 21 70] - 5-4 Sluggy the Unshaven [42 21 70] - 5-8 Raphael the Raven [42 21 70] - 6-4 Tap-Tap the Red Nose [02 21 70] - 6-8 King Bowser If you change the bosses' location, you need to edit the pointers to fit your levels. (Warning: For some reason, changing the pre-transformed palette pointers for X-4 bosses will result in them using the wrong palette... however, if you leave the pointer unchanged, the boss will appear fine) |
|
$0DCB11 | 1 byte | Boss | Baby Bowser's HP (before transformation). If you change this, you need to put the same value minus one at $0DF133 (for the "defeat" sound effect). Default [03]. | |
$0DD940 | 1 byte | Boss | Giant Baby Bowser's HP. This value should be the same as $0DD980. Default is [07]. | |
$0DD980 | 1 byte | Boss | Giant Baby Bowser's HP. This value should be the same as $0DD940. Default is [07]. | |
$0DF133 | 1 byte | Boss | Baby Bowser's HP (before transformation) minus one. This is used to play the "defeat" sound at the correct hit. Default [02]. | |
$0EB534 | 1 byte | Text | Change to 80 to disable the tutorial message that pops up when you get your first flower in the game. Default [D0]. | |
$0EBEA1 | 1 byte | Sprite Palette | Item Memory index at which Chomp Rock in 1-1 will use the special palette. Default [01]. | |
$0EBEA7 | 1 byte | Sprite Palette | Translevel number of the level which will always use the special palette for Chomp Rock. Default is [28]: 4-5. | |
$0EBEC3 | 1 byte | Sprite Palette | Color of the special Chomp Rock. Default is [08]. [00] or [01] - Orange [02] or [03] - Green [04] or [05] - Gray (Default sprite palette) [06] or [07] - Light Blue (without black outline) [08] or [09] - Brown (Default special palette) Other values are still usable but gives bugged palettes. Values [0C], [0D], [0E], and [0F] depends on the Sprite Palette header, so they could or couldn't work. |
Palette Comparison |
$0F8EA6 | 8 bytes | Sprite Number | Which sprite (should be a winged cloud) the hidden winged ?-cloud (sprite $0067) turns into when touched by a chomp rock or snowball, depending on the initial X position. By default: $00C1 (5 stars), $00C8 (seed of sunflower), $00B8 (flower), $00B7 (1-up). | |
$0F8ED4 | 8 bytes | Subroutine | Whether the hidden ?-cloud reveiled by a chomp rock (sprite $0067) is affected by item memory or not depending on its content. Should be either $8EDC (affected by item memory) or $8EE8 (respawns every time). By default: $8EDC (5 stars), $8EE8 (seed of sunflower), $8EDC (flower), $8EDC (1-up). | |
$0F9C4D | 1 byte | Boss | The first of the four pointers of Tap-Tap the Red Nose boss battle. Change to the current translevel number, in the case you relocated the boss. Default is [3F]: 6-4. Use with 0F9CCF, 0F9DF2, and 0FA00D. | |
$0F9CCF | 1 byte | Boss | The second of the four pointers of Tap-Tap the Red Nose boss battle. Change to the current translevel number, in the case you relocated the boss. Default is [3F]: 6-4. Use with 0F9C4D, 0F9DF2, and 0FA00D. | |
$0F9DF2 | 1 byte | Boss | The third of the four pointers of Tap-Tap the Red Nose boss battle. Change to the current translevel number, in the case you relocated the boss. Default is [3F]: 6-4. Use with 0F9C4D, 0F9CCF, and 0FA00D. | |
$0FA00D | 1 byte | Boss | The fourth of the four pointers of Tap-Tap the Red Nose boss battle. Change to the current translevel number, in the case you relocated the boss. Default is [3F]: 6-4. Use with 0F9C4D, 0F9CCF, and 0F9DF2. | |
$0FA5B6 | 1 byte | Boss | Change to [A3] to add the ending Key Scene to Tap-Tap the Red Nose boss, after defeat. Default [9C]. | |
$0FB108 | 1 byte | Boss | Raphael the Raven's HP in unary, converted to hex. Default is [07]: 3 HP (111 in unary). Possible values: [01] - 1 HP [03] - 2 HP [07] - 3 HP [0F] - 4 HP [1F] - 5 HP [3F] - 6 HP [7F] - 7 HP [FF] - 8 HP If you change this, you should also change the byte at $0FB50D. |
|
$0FB482 | 1 byte | Boss | Raphael the Raven's initial image. See $0FB6A1 for more information. Default [06]. | |
$0FB50D | 1 byte | Boss | Raphael the Raven's HP. This value should be the same as $0FB108. Default [07]. | |
$0FB6A1 | 8 bytes | Boss | Raphael the Raven's images after every hit, depending on its HP. Possible values: [00] - Whitish Body [01] - The same color as the sky (no outline) [02] - The same color as the sky with a star in its body (no outline) [05] - The same color as the sky with a star in its body (light blue outline) [06] - Normal [07] - Yellow Body (no outline) [08] - Angry [09] - Furious Any other values gives a wrong palette. The first byte of the table seems to be unused, being the byte at $0FB482 used for the initial image. Default values are [06 08 09 09 09 09 09 09]: Normal -> Angry -> Furious. |
Image Comparison |
$0FB72D | 1 byte | Boss | Change to [9C] to remove the ending Key Scene from Raphael the Raven boss, after defeat. Default [A6]. | |
$0FBCCB | 3 bytes | Cutscene | Change to [00 00 00] to disable the story cutscene before title screen. Default [15 02 46]. To be used with $0FBDFB and $0FBED1. | |
$0FBDFB | 3 bytes | Cutscene | Change to [EA EA EA] to disable the story cutscene before title screen. Default [8D 4D 00]. To be used with $0FBCCB and $0FBED1. | |
$0FBED1 | 2 bytes | Cutscene | Change to [F0 00] to disable the story cutscene before title screen. Default [F0 12]. To be used with $0FBCCB and $0FBDFB. | |
$10804E | 1 byte | Pause Screen | Change this from [80] to [00] to disable Start+Selecting out of the welcome level (requires each save file to be reloaded from the ROM to take effect). | |
$1080A6 | 1 byte | Misc. | Change this from [00] to [02] to make "Hasty" the default control scheme. (Requires reloading each save file from the ROM to take effect) | |
$10897F | 1 byte | Sound Effect | Sound that plays when "Nintendo Presents" shows. Default is [09]. For a list of sounds, see here. | |
$108D90 | 1 byte | Level Number | Translevel number of the first of three levels where Yoshi starts out facing left. Default is [04]: 1-5. | |
$108D94 | 1 byte | Level Number | Translevel number of the second of three levels where Yoshi starts out facing left. Default is [12]: 2-7. | |
$108D98 | 1 byte | Level Number | Translevel number of the third of three levels where Yoshi starts out facing left. Default is [36]: 5-7. | |
$108D9C | 1 byte | Misc. | Change to [00] to prevent Yoshi to face left in the selected levels (which are 1-5, 2-7 and 5-7 by default). Default is [02]. | |
$108DA2 | 1 byte | Text | Change to 80 to disable the intro stage's Welcome message. Default [D0]. | |
$10CDE6 | 1 byte | Misc. | The score threshold to generate the 3-Kamek variant of the "Drawing Lots" bonus game. Default is [32] which is 50 points. Setting this to [00] will force the 3-Kamek variant, while setting it to [65] or higher will force the 1-Kamek variant. |
|
$10E189 | 1 byte | Misc. | The number of lives Yoshi starts with after continuing from the Game Over screen. Default is [03]. | |
$179933 | 1 byte | Misc. | The number of lives Yoshi starts with after selecting a save file. Default is [03]. | |
$179954 | 1 byte | Cutscene | Change to [1E] to disable both the intro scene and welcome level, and start directly on the map when starting a new game. Default is [37]. | |
$17A82E | 1 byte | Map | Change to [2E] to fix a bug where Green Yoshi's position shifts on the World 1 and World 3 maps, when exiting from the Extra level. Default [23]. | |
$3FA064 | 4 bytes | Sprite Palette | Change to [B5 24 55 3D] to fix Pink Yoshi's palette in game. This will do Mario's hat and Yoshi's tongue have the correct shading. Default [55 3D B5 24]. | Comparison Before and After |
$3FA0D8 | 2 bytes | Sprite Palette | Change to [00 00] to make Brown Yoshi in game uses the same palette it uses in the intro cutscene. Use with $3FA0DE and $3FA0E6. Default [6F 1D]. | |
$3FA0DE | 2 bytes | Sprite Palette | Change to [A9 0C] to make Brown Yoshi in game uses the same palette it uses in the intro cutscene. Use with $3FA0D8 and $3FA0E6. Default [F5 29]. | |
$3FA0E6 | 2 bytes | Sprite Palette | Change to [70 15] to make Brown Yoshi in game uses the same palette it uses in the intro cutscene. Use with $3FA0D8 and $3FA0DE. Default [BA 4A]. | |
$3FC876 | 2 bytes | Object Palette | Palette color of World Map 1 (hud) and File Select Menu, written backwards. Default is [FC 53] (SNES Color $53FC). | |
$3FC894 | 2 bytes | Object Palette | Palette color of World Map 2 (hud) and Copy File Menu, written backwards. Default is [B4 7B] (SNES Color $7BB4). | |
$3FC8B2 | 2 bytes | Object Palette | Palette color of World Map 3 (hud) and Erase File Menu, written backwards. Default is [3F 73] (SNES Color $733F). | |
$3FDAF8 | 2 bytes | Object Palette | Palette color of World Map 4 (hud) while being in World 1 (dynamic palette), written backwards. Default is [1B 73] (SNES Color $731B). | |
$3FDB16 | 2 bytes | Object Palette | Palette color of World Map 5 (hud) while being in World 1 (dynamic palette), written backwards. Default is [37 77] (SNES Color $7737). | |
$3FDB34 | 2 bytes | Object Palette | Palette color of World Map 6 (hud) while being in World 1 (dynamic palette), written backwards. Default is [DD 5A] (SNES Color $5ADD). | |
$3FDB74 | 2 bytes | Object Palette | Palette color of World Map 4 (hud) while being in World 2 (dynamic palette), written backwards. Default is [1B 73] (SNES Color $731B). | |
$3FDB92 | 2 bytes | Object Palette | Palette color of World Map 5 (hud) while being in World 2 (dynamic palette), written backwards. Default is [37 77] (SNES Color $7737). | |
$3FDBB0 | 2 bytes | Object Palette | Palette color of World Map 6 (hud) while being in World 2 (dynamic palette), written backwards. Default is [DD 5A] (SNES Color $5ADD). | |
$3FDBF0 | 2 bytes | Object Palette | Palette color of World Map 4 (hud) while being in World 3 (dynamic palette), written backwards. Default is [1B 73] (SNES Color $731B). | |
$3FDC0E | 2 bytes | Object Palette | Palette color of World Map 5 (hud) while being in World 3 (dynamic palette), written backwards. Default is [37 77] (SNES Color $7737). | |
$3FDC2C | 2 bytes | Object Palette | Palette color of World Map 6 (hud) while being in World 3 (dynamic palette), written backwards. Default is [DD 5A] (SNES Color $5ADD). | |
$3FDC6C | 2 bytes | Object Palette | Palette color of World Map 4 (hud) while being in World 4 (dynamic palette), written backwards. Default is [1B 73] (SNES Color $731B). | |
$3FDC8A | 2 bytes | Object Palette | Palette color of World Map 5 (hud) while being in World 4 (dynamic palette), written backwards. Default is [37 77] (SNES Color $7737). | |
$3FDCA8 | 2 bytes | Object Palette | Palette color of World Map 6 (hud) while being in World 4 (dynamic palette), written backwards. Default is [DD 5A] (SNES Color $5ADD). | |
$3FDCE8 | 2 bytes | Object Palette | Palette color of World Map 4 (hud) while being in World 5 (dynamic palette), written backwards. Default is [1B 73] (SNES Color $731B). | |
$3FDD06 | 2 bytes | Object Palette | Palette color of World Map 5 (hud) while being in World 5 (dynamic palette), written backwards. Default is [37 77] (SNES Color $7737). | |
$3FDD24 | 2 bytes | Object Palette | Palette color of World Map 6 (hud) while being in World 5 (dynamic palette), written backwards. Default is [DD 5A] (SNES Color $5ADD). | |
$3FDD64 | 2 bytes | Object Palette | Palette color of World Map 4 (hud) while being in World 6 (dynamic palette), written backwards. Default is [1B 73] (SNES Color $731B). | |
$3FDD82 | 2 bytes | Object Palette | Palette color of World Map 5 (hud) while being in World 6 (dynamic palette), written backwards. Default is [37 77] (SNES Color $7737). | |
$3FDDA0 | 2 bytes | Object Palette | Palette color of World Map 6 (hud) while being in World 6 (dynamic palette), written backwards. Default is [DD 5A] (SNES Color $5ADD). | |
$3FED72 | 4 bytes | Sprite Palette | Change to [B5 24 55 3D] to fix Pink Yoshi's palette in the intro cutscene. Used to complement $3FA064's fix (for the sake of color consistency). Default [55 3D B5 24]. | |
- Pages:
- 1