Language…
11 users online: Children's Digest 1950-2009,  MarioFanGamer, MorrieTheMagpie,  NopeContest, Pancake001,  RussianMan, S.U, SteamyPanini,  Teows,  TickTockClock, will___ - Guests: 68 - Bots: 514
Users: 54,987 (2,175 active)
Latest user: EvilLuma

SMAS Memory Map

Displaying 1220 out of 1220 addresses.

View: moderated | waiting (204)

Filter

Link
  • Pages:
  • 1
RAM Address Length Type Context Description Details
$7E0000 8 bytes Miscellaneous Super Mario Bros. 1 Scratch RAM for many subroutines
$7E0000 Unknown Miscellaneous Super Mario Bros. 1 TODOs:

- Fix inconsistent SMB1 sprite table sizes
- Consistent naming (player instead of Mario, Y Position instead of ypos, and the likes)
- Find out what kind of sprites there are in SMB1. How many types of extended sprites, and so on.
- SMB3/Global addresses need context re-assigning.
$7E0008 1 byte Empty Super Mario Bros. 1 Unused scratch RAM.
$7E0009 1 byte Counter Super Mario Bros. 1 Frame Counter
$7E000A 3 bytes Flag Super Mario Bros. 1 Player action data.

Note that these flags are not mirrors of SNES controller flags. They merely signify which states the player is experiencing. For example, the Jump flag can be set by whatever button maps to jumping. Also, the flag is set only by the controller of the current player.
$7E000A 1 byte Flag Super Mario Bros. 1 Bit flags: JD000000
J - Jump button
D - Dash button
$7E000B 1 byte Flag Super Mario Bros. 1 Bit flags: 0000UD00
U - Up button
D - Down button
$7E000C 1 byte Flag Super Mario Bros. 1 Bit flags: 000000LR
L - Left flag
R - Right flag
$7E000D 1 byte Flag Super Mario Bros. 1 Saves the value of $7E:000A (jump/run flags) from the previous frame.
$7E000F 1 byte Player Action Super Mario Bros. 1 Player's current action (Entering pipe, fade to image before level, vine, etc.)

TODO: verify "Number of subroutines to run in game engine on next frame"
$7E0010 8 bytes Sprites Super Mario Bros. 1 Sprite onscreen flag.

Bit 7 = never overwrite sprite slot of current index.
Bit 0 = Onscreen flag.
$7E0010 1 byte Counter Super Mario Bros. 2 Frame Counter
$7E0011 1 byte Stripe Image Super Mario Bros. 1 Layer image upload
$7E0012 1 byte Position Super Mario Bros. 3/Global Which screen number the player is in. TODO: Verify, editing this seems to screw with the level drawing
$7E0014 1 byte Player Super Mario Bros. 2 Player's X-position, high byte.
$7E0014 1 byte Flag Super Mario Bros. 3/Global Level completed flag.
$7E0015 9 bytes Sprites Super Mario Bros. 2 Sprites' X-position, high byte.
$7E0015 1 byte Counter Super Mario Bros. 3/Global Frame counter.
$7E0016 1 byte Hardware Mirror Super Mario Bros. 3/Global Brightness. Does not affect the statusbar on the overworld.
$7E001C 8 bytes Sprites Super Mario Bros. 1 Sprite number
$7E001C 1 byte Timer Intro & Game Select Screens Number of frames to show intro logo.

Is initially set to #$81.

At #$61, the logo will flash.
$7E001E 1 byte Player Super Mario Bros. 2 Player's Y-position, high byte.
$7E001F 9 bytes Sprites Super Mario Bros. 2 Sprites' Y-position, high byte.
$7E0022 1 byte Level Super Mario Bros. 3/Global How many screens the level has.
$7E0022 1 byte Timer Intro & Game Select Screens Timer for various things.

1. Number of frames to show each flash state during intro logo flashing
$7E0022 1 byte Timer Intro & Game Select Screens Amount of time to wait until the "Super Mario All-Stars" text flashes.
$7E0023 1 byte Counter Intro & Game Select Screens What step we are in, in the flashing "ALL*STARS" text in the hall screen.
$7E0024 1 byte Flag Intro & Game Select Screens Flag for various animation timers. When set, the animation timers will begin.

1. Flash animation for intro logo
$7E0025 1 byte Sprites Super Mario Bros. 1 Sprite number which came out of a question block.
$7E0027 1 byte Flag Intro & Game Select Screens Is #$10 if the start button has been pressed by either controller, otherwise #$00.
$7E0028 1 byte Player Super Mario Bros. 2 Player's X position, low byte
$7E0029 8 bytes Sprites Super Mario Bros. 1 Sprite state.

TODO: Find a list of values
$7E0029 9 bytes Sprites Super Mario Bros. 2 Sprites' X-position, low byte. First three bytes also used for movement of bonus slots. 00 = stop, 01 = slowing down, 02-FF = not slowing down.
$7E002E 3 bytes Pointers Super Mario Bros. 3/Main gameplay 24-bit pointer to the level map16 layout in RAM. (Note that this is used for both the low and high bytes; the game changes the index to switch between them.)
$7E0031 3 bytes Pointers Super Mario Bros. 3/Global Pointer to current current level's sprite data (SNES Address, Little endian)
$7E0032 1 byte Player Super Mario Bros. 2 Player's Y-Position, low byte
$7E0033 2 bytes Sprites Super Mario Bros. 1 Fireball states

TODO: Find out about the values
$7E0033 9 bytes Sprites Super Mario Bros. 2 Sprites' Y-position, low byte. $7E0038-9 is speed of bonus slot 1's images. $7E003A-B is speed of bonus slot 2's images.
$7E0035 2 bytes Sprites Super Mario Bros. 1 Bounce block state

TODO: find out the states
$7E003C 1 byte Speed Super Mario Bros. 2 Speed of one of bonus slot 3's images. Also used for player's speed.
$7E003D 9 bytes Sprites Super Mario Bros. 2 Sprite X speed table. $3D is also used for speed of the other of bonus slot 3's images.
$7E0042 2 bytes X Position Super Mario Bros. 1 X-Position of screen
$7E0042 2 bytes X Position Super Mario Bros. 1 Horizontal X coordinate of left side of the screen - 16-bit value.

Used for rendering certain sprites and sprite particles at their proper position.
$7E0043 2 bytes Overworld Super Mario Bros. 3/Overworld Low byte of the player Y position on the overworld. Byte 1 is for Mario, byte 2 is for Luigi
$7E0043 1 byte Miscellaneous Super Mario Bros. 3/Main gameplay Player X position in the level, high byte (i.e. screen number)
$7E0044 9 bytes Sprites Super Mario Bros. 3/Global Sprite X position, high byte.

TODO: Verify length
$7E0045 2 bytes Overworld Super Mario Bros. 3/Overworld High byte of the player X position. Alternatively, this can be considered the submap number of the current world the players are on. The first byte is for Mario, while the second is for Luigi.
$7E0046 1 byte Player Super Mario Bros. 1 Facing direction of player
$01 - Right
$02 - Left
$7E0046 1 byte Player Super Mario Bros. 2 Player's Y-speed
$7E0047 8 bytes Sprites Super Mario Bros. 1 Sprite direction
$01 - Right
$02 - Left
$7E0047 9 bytes Sprites Super Mario Bros. 2 Sprite Y speed table
$7E0047 2 bytes X Position Super Mario Bros. 3/Global Player overworld X-position.

First byte is for Mario, second byte for Luigi.
$7E0047 Unknown X Position Super Mario Bros. 3/Main gameplay Sprite X position in the level, high byte.

TODO: verify length
$7E004C 1 byte Direction Super Mario Bros. 3/Global Player's direction on the overworld.
$7E0050 1 byte Direction Super Mario Bros. 1 The direction of the sprite which came out of a [?]-block.
$7E0051 9 bytes Sprites Super Mario Bros. 2 Sprite status table. 00 = non-existant/init, 01 = main, 02 = falling from screen, 03 = flat, 04 = explode, 05 = disappear in a puff of smoke, 06 = dissolving sand, 07 = stop interacting, 08 = disappear in two puffs of smoke, 09 = disappear abruptly
$7E0055 1 byte Y Position Super Mario Bros. 3/Main gameplay Player Y-position in the level, high byte.
$7E0056 9 bytes Sprites Super Mario Bros. 3/Global Sprite Y position, high byte.

TODO: Verify length
$7E005A 1 byte Flag Super Mario Bros. 3/Global "Players spins in the overworld" flag (e.g. when player dies and gets placed to the latest checkpoint)
$7E005C 1 byte Level Data Super Mario Bros. 1 Map Type

$00 - Underwater
$01 - Normal
$02 - Underground
$03 - Castle
This address always has the same value as $7E:00BA.
$7E005D 1 byte X Speed Super Mario Bros. 1 Player's X Speed
$7E005E 8 bytes X Speed Super Mario Bros. 1 Sprite X-Speed
$7E005E 1 byte X Position Super Mario Bros. 3/Global Player X-position in the level, low byte
$7E005F 9 bytes Sprites Super Mario Bros. 3/Global Sprite X position, low byte.

TODO: Verify length
$7E0060 4 bytes Sound Effect Intro & Game Select Screens SPC700 I/O Ports. Write values to play music/sound effects.
$7E0067 1 byte X Speed Super Mario Bros. 1 X speed of the sprite which came out of a [?]-block.
$7E0068 2 bytes X Speed Super Mario Bros. 1 Fireball X-Speed
$7E006A 2 bytes X Speed Super Mario Bros. 1 Bounce blocks X-Speed
$7E0070 1 byte Y Position Super Mario Bros. 3/Global Player Y-position in the level, low byte.

TODO: Also related to OW 'player spawns' stars (those spinning ones), 34 bytes.
$7E0071 9 bytes Sprites Super Mario Bros. 3/Global Sprite Y position, low byte.

TODO: Verify length
$7E0078 1 byte X Position Super Mario Bros. 1 Player X-Position, high byte.
$7E0079 8 bytes X Position Super Mario Bros. 1 Sprite X-Position, high byte.
$7E0082 1 byte Player Super Mario Bros. 2 Amount of time to remain in a player state.
$7E0084 2 bytes X Position Super Mario Bros. 1 Fireball X-Position, high byte.
$7E0086 2 bytes X Position Super Mario Bros. 1 Bounce block X-Position, high byte.
$7E008B 1 byte Speed Super Mario Bros. 3/Global Player X-speed
$7E008C 9 bytes Sprites Super Mario Bros. 3/Global Sprite X speed.

TODO: Verify length
$7E008F 1 byte Player Super Mario Bros. 2 Current player. #$00 = Mario; #$01 = Peach; #$02 = Toad; #$03 = Luigi.
$7E0090 9 bytes Sprite Number Super Mario Bros. 2 Sprite num table
$7E0099 1 byte Level Super Mario Bros. 1 Which tileset to load upon level load.

$00 - Unused?
$01 - Mario bonus background + cave FG
$02 - Hills background & SUPER MARIO BROS banner
$03 - Underground background
$04 - Castle FG & BG tileset
$05 - Tall slim hills background
$06 - Castle FG & BG tileset
$07 - Hills background
$08 - Underwater BG & FG tileset
$09 - Hills background & SUPER MARIO BROS banner
$0A - Game over screen & Mario bonus room background
$0B - Starry night background
$0C - Bowser's Castle (outside) background
$0D - Mushrooms background
$0E - Waterfall background
$0F - Underwater ruins background
$10 - Goomba pillars BG & snow FG
$11 - Underground foreground
$12 - Snow foreground
$13 - Bowser's Castle BG, part 1
$14 - Bowser's Castle BG, part 2
$15 - Game Over and Time Up text
$16 - Starry night background
$17 - Grass foreground
$18 - Luigi bonus background + cave FG
$7E0099 1 byte Level Super Mario Bros. 1 Graphics to upload during level load. See this for a list of values.
$7E009B 1 byte Sprites Super Mario Bros. 3/Global The current sprite index.
$7E009C 1 byte Flag Super Mario Bros. 2 Player holding item flag ($01 = Holding.)
$7E009D 1 byte Player Super Mario Bros. 2 Player's Direction ($00 = Left, $01 = Right)
$7E009D 1 byte Y Speed Super Mario Bros. 3/Global Player Y-speed
$7E009E 1 byte Index Super Mario Bros. 1 Current sprite index
$7E009E 9 bytes Sprites Super Mario Bros. 3/Global Sprite Y speed.

TODO: Verify length
$7E00A0 1 byte Y Speed Super Mario Bros. 1 Player's Y Speed
$7E00A1 8 bytes Y Speed Super Mario Bros. 1 Sprite Y Speed
$7E00A2 1 byte Counter Super Mario Bros. 2 Alternative Frame Counter (Stops at times)
$7E00A8 9 bytes Sprites Super Mario Bros. 2 Sprite is picked up table. 07 = sprite = bottom at player, 01 = top, 00 = normal state
$7E00AA 1 byte Y Speed Super Mario Bros. 1 Y speed of the sprite which came out of a [?]-block. TODO: Value is only applied when the sprite is airborne?
$7E00AB 2 bytes Y Speed Super Mario Bros. 1 Player fireballs Y speed
$7E00AB 3 bytes Pointers Super Mario Bros. 3/Global Pointer to 24-bit RAM address which contains the windowing HDMA table used for various effects.

Seems to alternate between $7F:9000 and $7F:9200.
$7E00AD 2 bytes Y Speed Super Mario Bros. 1 Bounce block Y speed
$7E00B3 1 byte Overworld Super Mario Bros. 3/Global What overworld tile the player is standing on.

TODO: List of overworld tiles.
$7E00BA 1 byte Level Super Mario Bros. 1 Current background palette and music.

$00 - Light blue background with underwater music
$01 - Light blue background with normal world music
$02 - Black background with underground music
$03 - Black background with castle music

This address always has the same value as $7E:005C.
$7E00BB 1 byte Y Position Super Mario Bros. 1 Player position in the level:

$00 - Top of screen (above status bar)
$01 - Inside range (anywhere he can shoot fireballs)
$02 - In pit (obviously causes death, value increases up to 6)
$7E00BB 1 byte Miscellaneous Super Mario Bros. 3/Global Something related about OW powerup get? ($07 + higher= glitch)

TODO: Verify
$7E00BC 8 bytes Y Position Super Mario Bros. 1 Sprite Y position in the level.

$00 - Top of screen (above status bar)
$01 - Inside range
$02 - In pit
$7E00BD 1 byte Direction Super Mario Bros. 3/Global Player direction ($40 = right)
$00 - Left
$40 - Right
$41 - End level walk?
TODO: Find out the format of this address, seems bitwise rather than raw numbers.
$7E00BF 1 byte Player Super Mario Bros. 3/Main gameplay Indicates that the player is dying. Setting it causes the player to die immediately.
$7E00C5 1 byte Y Position Super Mario Bros. 1 [?]-block sprite Y position

$00 - Top of screen (above status bar)
$01 - Inside range
$02 - In pit
$7E00D0 1 byte Index Intro & Game Select Screens Selected game index in the Game Select screen
$7E00D1 1 byte Index Intro & Game Select Screens Selected file index in the File Select screen
$7E00D9 2 bytes Pointers Super Mario Bros. 2 16-bit pointer to Layer 1 room data.
$7E00DB 1 byte Level Data Super Mario Bros. 1 An index value signifying the Layer 2 Background map to use.

$00 - Underwater (short)
$01 - Underwater (full)
$02 - Underwater (castle)
$03 - Night sky (w/o mountains)
$04 - Outside castle (W8-3)
$05 - Mountains and trees
$06 - Night sky (w/ mountains)
$07 - Night sky (w/ mountains & snow)
$08 - Mountains
$09 - Waterfall
$0A - Goomba statues/pillars
$0B - Narrow green hills (W2-1)
$0C - One big mountain w/ underground palette
$0D - Narrow hills w/ snow (W5-1)
$0E - Mario/Luigi Bonus room
$0F - Mushrooms
$10 - Night sky (w/o mountains)
$11 - Night sky (w/ mountains)
$12 - Mushrooms
$13 - Mountains
$14 - Narrow hills w/ snow (W5-1)
$15 - Narrow orange hills
$16 - Narrow hills w/ snow
$17 - Mario/Luigi bonus room
$18 - Night sky (w/ mountains)
$19 - Underground
$1A - Underground
$1B - Mario/Luigi bonus room (underground)
$1C - Castle
$1D - Castle w/ pillars & chandeliers
$1E - Castle w/ pillars
$1F - Castle w/ pillars
$20 - Castle w/ pillars & doors
$21 - Castle w/ windows w/ thunder & lightning
$7E00DE 1 byte Flag Intro & Game Select Screens If non-zero $7F:0000 will get uploaded to BG1's tilemap.
$7E00E2 8 bytes X Position Super Mario Bros. 3/Global Extended sprite X-position, high byte.
$7E00E3 2 bytes Timer Intro & Game Select Screens Timer for showing the current hall screen state (blackout) or (lightened).

#$011A - First blackout time
#$044A - First lightened time
$7E00EB 2 bytes Clipping Super Mario Bros. 1 Used during level loading to load level backgrounds: Starting index of the background map16 to place the background objects at (Every $0100 bytes of RAM $7ED000 is a page).

Also used by the podoboo lava splash.
$7E00EB 1 byte Flag Super Mario Bros. 2 Horizontal level flag. #$00 = Vertical level; #$01 = Horizontal level.
$7E00ED 2 bytes Miscellaneous Super Mario Bros. 1 Used during level loading to load level backgrounds: Used to calculate $7E00EB

Also used by the podoboo lava splash.
$7E00EF 2 bytes Level Data Super Mario Bros. 1 Command to use in a level's background generation routine.

$00 - Increase index to background map16 tilemap's latest written tile by 1
$01 - Handle HDMA gradient. Underwater levels use below value, instead.
$02 - Enable underwater HDMA gradient. TODO: does it enable anything else? (cgadsub etc)
$03 - TODO: figure out what
$04 - TODO: figure out what
$05 - Related to background map16 tilemap generation
$06 - Fill background with repetitive rock pattern of cave background
$07 - Fill top 3 rows with blank tiles for underwater levels
$08 - Generate the rocks of the waterfall background
$09 - Enable Layer 3 image
$0A - Generate the waterfall of the waterfall background
$0B - Load tilemap-specific graphics? TODO: verify
$0C - Generate Goomba pillar background's sand

Despite being two bytes in size, only the first byte is used.

Also used by the podoboo lava splash.
$7E00F0 3 bytes Pointers Super Mario Bros. 2 Indirect pointer to load a layer image from. Controlled by $11.
$7E00F0 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:4219 - Controller Port 1 Data1 Register high byte.

This mirror is for controller data from the current frame.
$7E00F1 1 byte HDMA Super Mario Bros. 1 Associated value with a background generation command, e.g. value to enable/disable layer 3, which HDMA gradient, and so on.

Also used by the podoboo lava splash.
$7E00F1 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:421B - Controller Port 2 Data1 Register high byte.

This mirror is for controller data from the current frame.
$7E00F2 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:4218 - Controller Port 1 Data1 Register low byte.

This mirror is for controller data from the current frame.
$7E00F3 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:421A - Controller Port 2 Data1 Register low byte.

This mirror is for controller data from the current frame.
$7E00F4 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:4219 - Controller Port 1 Data1 Register high byte.

This mirror is for controller data that was set on the current frame but was clear on the previous frame. Basically, this determines which buttons were pressed on this frame while not having been held on the last frame.
$7E00F5 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:421B - Controller Port 2 Data1 Register high byte.

This mirror is for controller data that was set on the current frame but was clear on the previous frame. Basically, this determines which buttons were pressed on this frame while not having been held on the last frame.
$7E00F6 1 byte Hardware Mirror Super Mario Bros. 2 Controller Data 1. AXSPUDLR. All frames.
$7E00F6 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:4218 - Controller Port 1 Data1 Register low byte.

This mirror is for controller data that was set on the current frame but was clear on the previous frame. Basically, this determines which buttons were pressed on this frame while not having been held on the last frame.
$7E00F7 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:421A - Controller Port 2 Data1 Register low byte.

This mirror is for controller data that was set on the current frame but was clear on the previous frame. Basically, this determines which buttons were pressed on this frame while not having been held on the last frame.
$7E00F8 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:4219 - Controller Port 1 Data1 Register high byte.

This mirror is for controller data from the previous frame.
$7E00F9 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:421B - Controller Port 2 Data1 Register high byte.

This mirror is for controller data from the previous frame.
$7E00FA 3 bytes Pointers Super Mario Bros. 1 24-bit pointer to current level's objects, and their positions (SNES Address, Little endian)
$7E00FA 1 byte Hardware Mirror Super Mario Bros. 2 Controller Data 2. AXSPUDLR. 1 frame.
$7E00FA 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:4218 - Controller Port 1 Data1 Register low byte.

This mirror is for controller data from the previous frame.
$7E00FB 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:421A - Controller Port 2 Data1 Register low byte.

This mirror is for controller data from the previous frame.
$7E00FD 3 bytes Pointers Super Mario Bros. 1 24-bit pointer to current level's sprites, and their positions (SNES Address, Little endian)
$7E00FD 1 byte Counter Intro & Game Select Screens Frame counter.
$7E00FE 1 byte Hardware Mirror Super Mario Bros. 2 Brightness Register
$7E00FF 1 byte Hardware Mirror Super Mario Bros. 2 NMI / Joypad Enable
$7E0100 9 bytes Empty Super Mario Bros. 1 Free space
$7E0100 1 byte Hardware Mirror Intro & Game Select Screens Screen brightness.
$7E0101 1 byte Index Super Mario Bros. 3/Global IRQ Mode index? Valid values are: { 80 40 20 60 A0 55 75 95 }

TODO: seems like this goes bitwise. Figure it out. Also, figure out what each IRQ mode is.
$7E0101 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:2101 - Object Size and Chr Size
$7E0102 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2105: BG Mode and Character Size
$7E0103 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2106: Screen Pixelation
$7E0104 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2107: BG1 Tilemap Address and Size
$7E0105 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2108: BG2 Tilemap Address and Size
$7E0106 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2109: BG3 Tilemap Address and Size
$7E0107 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $210B: Mirror of BG1 and 2 Chr Address
$7E0108 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $210D: BG1 Horizontal Scroll
This value represents the low byte address and is written to the register first.
$7E0109 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $210D: BG1 Horizontal Scroll
This value represents the high byte address and is written to the register second.
$7E010A 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $210E: BG1 Vertical Scroll
This value represents the low byte address and is written to the register first.
$7E010B 1 byte Flag Super Mario Bros. 1 "Three byte object" flag when loading level data
$7E010B 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $210E: BG1 Vertical Scroll
This value represents the high byte address and is written to the register second.
$7E010C 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $210F: BG2 Horizontal Scroll
This value represents the low byte address and is written to the register first.
$7E010D 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $210F: BG2 Horizontal Scroll
This value represents the high byte address and is written to the register second.
$7E010E 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2110: BG2 Vertical Scroll
This value represents the low byte address and is written to the register first.
$7E010F 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2110: BG2 Vertical Scroll
This value represents the high byte address and is written to the register second.
$7E0110 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2111: BG3 Horizontal Scroll
This value represents the low byte address and is written to the register first.
$7E0111 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2111: BG3 Horizontal Scroll
This value represents the high byte address and is written to the register second.
$7E0112 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2112: BG3 Vertical Scroll
This value represents the low byte address and is written to the register first.
$7E0113 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2112: BG3 Vertical Scroll
This value represents the high byte address and is written to the register second.
$7E0114 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2123: Window Mask Settings for BG1 and BG2
$7E0115 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2124: Window Mask Settings for BG3 and BG4
$7E0116 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2125: Window Mask Settings for OBJ and Color Window
$7E0117 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $212C (Main screen designation).
$7E0117 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $212C: Main Screen Designation
$7E0118 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $212D: Subscreen Designation
$7E0118 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $212D (Sub screen designation).
$7E0119 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $212E: Window Mask Designation for the Main Screen
$7E011A 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $212F: Window Mask Designation for the Subscreen
$7E011B 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2130: Color addition select
$7E011B 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2130 (Color Addition Select).
$7E011C 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2131: Color math designation
$7E011C 1 byte Hardware Mirror Intro & Game Select Screens Miror of $2131 (Color math designation).
$7E011D 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2132: Fixed color data
This value is written to the mirror first.
$7E011D 3 bytes Hardware Mirror Intro & Game Select Screens Mirror of $2132 (Fixed Color Data).

$011D - Red fixed color component.
$011E - Green fixed color component.
$011F - Blue fixed color component.
$7E011E 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2132: Fixed color data
This value is written to the mirror second.
$7E011F 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $2132: Fixed color data
This value is written to the mirror third.
$7E0120 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:420C - HDMA Enable
$7E0121 1 byte Miscellaneous Intro & Game Select Screens Value is always $7E:0124 & #$FE, but is never read in-game.
$7E0122 1 byte Flag Intro & Game Select Screens "Main program loop initialize" flag.

This flag is set during NMI. Once set, the game will go through its main program loop. When the loop is finished, it will clear the flag and wait for NMI to set it again before continuing.
$7E0124 1 byte Flag Intro & Game Select Screens General IRQ flag. If set, IRQ mode registers will be enabled
$7E0124 2 bytes Counter Intro & Game Select Screens IRQ Vertical timer. Writes to $4209 and $420A. Used to keep the "Select v Game" box at a static position.
$7E0125 1 byte Hardware Mirror Intro & Game Select Screens Mirror of $7E:4209 - V-timer low byte.
$7E0142 2 bytes Empty Super Mario Bros. 1 Free space
$7E014D 7 bytes Empty Super Mario Bros. 1 Free space
$7E0154 1 byte Flag Super Mario Bros. 1 If the value in it is not zero, run the actual game; otherwise, loop forever. It's set to a non-zero value during NMI, and it's set to zero after the game mode has been run, so that the game runs exactly once a frame - one NMI trigger per frame.
$7E0155 1 byte Empty Super Mario Bros. 1 Free space
$7E0156 170 bytes Stack Global Stack RAM. Ends at $7E01FF.
$7E0160 1 byte Player Super Mario Bros. 3/Global Debug RAM. Setting it to $80 will allow you to cycle through the player's power-ups by using select. You can also press A / B / X / Y and Select to toggle the Kuribo's Shoe power-up.
$7E0200 2 bytes Hardware Mirror Super Mario Bros. 2 BG 1 X position
$7E0200 1 byte Hardware Mirror Super Mario Bros. 3/Global Window Mask Settings for BG1 and BG2
$7E0200 1 byte Index Intro & Game Select Screens Tilemap index for animating Luigi's head
$7E0201 1 byte Hardware Mirror Super Mario Bros. 3/Global Window Mask Settings for BG3 and BG4
$7E0201 1 byte Index Intro & Game Select Screens Tilemap index for animating Luigi's right hand
$7E0202 1 byte Direction Super Mario Bros. 1 Player direction.
$01 - Right
$02 - left
$7E0202 2 bytes Hardware Mirror Super Mario Bros. 2 BG 2 X position
$7E0202 1 byte Hardware Mirror Super Mario Bros. 3/Global Window Mask Settings for OBJ and Color Window
$7E0202 1 byte Index Intro & Game Select Screens Tilemap index for animating Peach's head
$7E0203 1 byte Hardware Mirror Super Mario Bros. 3/Global Color Addition Select
$7E0203 1 byte Index Intro & Game Select Screens Tilemap index for animating Toad
$7E0204 2 bytes Hardware Mirror Super Mario Bros. 2 BG 3 X position
$7E0204 1 byte Hardware Mirror Super Mario Bros. 3/Global Color math designation
$7E0204 1 byte Index Intro & Game Select Screens Tilemap index for animating Birdo's eyes.
This animation sequence was cut from the final game.
$7E0205 1 byte Hardware Mirror Super Mario Bros. 3/Global Fixed Color Data (red)
$7E0205 1 byte Index Intro & Game Select Screens Tilemap index for animating Birdo's right arm
$7E0206 2 bytes Hardware Mirror Super Mario Bros. 2 BG 1 Y Position, works together with $04C6 (low byte)
$7E0206 1 byte Hardware Mirror Super Mario Bros. 3/Global Fixed Color Data (green)
$7E0206 1 byte Index Intro & Game Select Screens Tilemap index for animating Birdo's tail
$7E0207 1 byte Hardware Mirror Super Mario Bros. 3/Global Fixed Color Data (blue)
$7E0207 1 byte Index Intro & Game Select Screens Tilemap index for animating Gommba's head.
This animation sequence was cut from the final game.
$7E0208 2 bytes Hardware Mirror Super Mario Bros. 2 BG 2 Y position
$7E0208 1 byte Hardware Mirror Super Mario Bros. 3/Global Main Screen Designation
$7E0208 1 byte Index Intro & Game Select Screens Tilemap index for animating Bob-omb's fuse.
This animation sequence was cut from the final game.
$7E0209 1 byte Hardware Mirror Super Mario Bros. 3/Global Subscreen Designation
$7E0209 1 byte Index Intro & Game Select Screens Tilemap index for animating Spiney's head.
This animation sequence was cut from the final game.
$7E020A 2 bytes Hardware Mirror Super Mario Bros. 2 BG 3 Y position
$7E020A 1 byte Hardware Mirror Super Mario Bros. 3/Global Window Mask Designation for the Main Screen
$7E020A 1 byte Index Intro & Game Select Screens Tilemap index for animating Pidgit.
$7E020B 1 byte Hardware Mirror Super Mario Bros. 3/Global Window Mask Designation for the Subscreen
$7E020B 1 byte Index Intro & Game Select Screens Tilemap index for animating Mario's head.

Also acts as a flag to animate Mario's left arm on frame 0 and frame 6.

Resets after 10 frames
$7E020C 1 byte Powerup Super Mario Bros. 1 Which powerup the current powerup entity is. ($00 = Mushroom, $01 = Fireflower, $02 = Star, $03 = 1-up)

Note: You can only have one powerup on the screen, hence this address is a single byte.
$7E020C 1 byte Clipping Super Mario Bros. 3/Global BG Mode and Character Size
$7E020C 1 byte Index Intro & Game Select Screens Tilemap index for animating Mario's left arm.
$7E020D 1 byte Hardware Mirror Super Mario Bros. 3/Global Screen Pixelation
$7E020D 1 byte Index Intro & Game Select Screens Tilemap index for animating Bowser's left arm.
$7E020E 1 byte Graphics Super Mario Bros. 3/Global BG mode of statusbar (Mode 1 by default)
$7E020F 1 byte Hardware Mirror Super Mario Bros. 3/Global Main screen designation of statusbar
$7E0210 2 bytes X Position Super Mario Bros. 3/Global BG1 Horizontal Scroll position

TODO: maybe break up into 2 sub addresses for low and high byte
$7E0214 2 bytes Hardware Mirror Intro & Game Select Screens Mirror of $7E:210D - BG1 horizontal scroll.

The low byte is written first and then the high byte is written second.

This mirror is only applied during IRQ.
$7E0214 2 bytes Hardware Mirror Intro & Game Select Screens BG1 Vertical scroll (IRQ) in Game Select screen
$7E0216 1 byte Timer Intro & Game Select Screens BG1 IRQ scroll timer in Game Select screen. This timer is used when scrolling right.
$7E0216 2 bytes Y Position Super Mario Bros. 3/Main gameplay BG1 Camera Y position. In the top of the level, this has a value of $0000 while on ground level in horizontal levels, this has a value of $00EF.
$7E0217 1 byte Timer Intro & Game Select Screens BG1 IRQ scroll timer in Game Select screen. This timer is used when scrolling left.
$7E0218 1 byte Flag Super Mario Bros. 1 Player's "peace" pose flag. (Used when entering vertical pipes)
$7E0218 1 byte Counter Intro & Game Select Screens Scroll index in Game Select menu. Increments by 1 when scrolling right, decrements by 1 when scrolling left.
$7E0218 2 bytes Y Position Super Mario Bros. 3/Main gameplay BG2 Camera Y position.
$7E0219 1 byte X Position Super Mario Bros. 1 Player's current X position within the screen.
$7E0219 1 byte Flag Intro & Game Select Screens "File Select mode" flag
$7E021A 8 bytes X Position Super Mario Bros. 1 Sprite X position, low byte
$7E021A 1 byte Flag Intro & Game Select Screens "File Select open/close" flag. When set, the File Select menu will either open if closed, or close if opened.
$7E021B 128 bytes Timer Intro & Game Select Screens "File Select open/close" timer. Counts the number of frames remaining to continue opening/closing the File Select menu.
$7E0220 1 byte Flag Intro & Game Select Screens "File Select menu open" flag. When set, the File Select menu in the Game Select screen is open.
$7E0223 1 byte Timer Intro & Game Select Screens Wait time before fading out the screen after a game has been selected.
$7E0224 1 byte Flag Intro & Game Select Screens "Begin gameplay" flag. Becomes set as soon as the player chooses a file in the Game Select screen. The flag is set to #$29 because it is set at the same time the "Begin gameplay" SFX is loaded (which is also #$29).
$7E0225 1 byte Flag Intro & Game Select Screens When $7E:00E3 decrements to this value, the timer delay for the next shine effect on the ALL-STARS logo in the intro will be set.
$7E0235 1 byte Hardware Mirror Super Mario Bros. 2 Window Mask for BG1 & BG2
$7E0236 1 byte Flag Super Mario Bros. 1 Grow vine in start of level (e.g. bonus cloud) flag.
$7E0236 1 byte Hardware Mirror Super Mario Bros. 2 Window Mask for BG3 & BG4
$7E0237 1 byte Y Position Super Mario Bros. 1 Player's Y Position
$7E0237 1 byte Hardware Mirror Super Mario Bros. 2 Window Mask for OBJ & COL
$7E0238 8 bytes Y Position Super Mario Bros. 1 Sprite Y position, low byte
$7E0238 1 byte Hardware Mirror Super Mario Bros. 2 Color addition select
$7E0239 1 byte Hardware Mirror Super Mario Bros. 2 CGADSUB settings
$7E023A 1 byte Hardware Mirror Super Mario Bros. 2 HDMA Enable
$7E023B 1 byte Hardware Mirror Super Mario Bros. 2 Window Mask Desig. Main Screen
$7E023D 3 bytes Hardware Mirror Super Mario Bros. 2 RGB Values for backdrop color
$7E0243 1 byte Hardware Mirror Super Mario Bros. 2 Main Screen Designation
$7E024B 1 byte Hardware Mirror Super Mario Bros. 2 V-count for IRQ. Starry BG appears at screen load.
$7E024C 1 byte Hardware Mirror Super Mario Bros. 2 BG1 Tilemap Address & Size
$7E026C 5 bytes X Position Super Mario Bros. 1 Whirlpool sprite X position, high byte.
$7E0283 1 byte Counter Super Mario Bros. 1 Bowser sprite's health against the player's fireballs.
$7E0285 2 bytes DMA Super Mario Bros. 1 Graphics DMA: Source address low and high byte
$7E0287 1 byte DMA Super Mario Bros. 1 Graphics DMA: Bank byte
$7E0288 2 bytes DMA Super Mario Bros. 1 Graphics DMA: DMA size
$7E028A 2 bytes DMA Super Mario Bros. 1 Graphics DMA: VRAM destination address
$7E028C 1 byte Flag Super Mario Bros. 1 Flag to disable scenery graphics animation and most of the background animations.
$7E028C 1 byte Flag Super Mario Bros. 3/Global Shows the Game Over dialogue on the overworld.
$7E028D 1 byte Flag Super Mario Bros. 1 Flag to upload the next frame of animated FG.
$7E02A9 1 byte Flag Super Mario Bros. 2 (Don't) update palettes flag.
$7E02C5 1 byte Level Data Super Mario Bros. 3/Global Layer 2 Palette, written upon level load.
$00 -
TODO: List of possible values.
$7E02DA 2 bytes Score Super Mario Bros. 3/Battle Mode The number of rounds each player has won in this match.
$7E02DE 2 bytes Score Super Mario Bros. 3/Battle Mode The number of matches each player has won. This determines the number of stars on the scoreboard.
$7E02DF 3 bytes Pointers Super Mario Bros. 2 Layer 2 Map16 data pointer.
$7E02E0 1 byte Speed Super Mario Bros. 3/Global Something related about Mario running at full speed

TODO: Figure out what
$7E02F8 1 byte Flag Super Mario Bros. 1 Bonus Room flag.
$7E0350 1 byte Level Data Super Mario Bros. 3/Global Layer 2 Background, written upon level load. Values #$26 and higher are most likely invalid. (TODO: double-check this)
$7E0364 1 byte Timer Super Mario Bros. 1 Amount of time left to make the next part of Bowser's bridge crumble
todo: also has other purposes during the Bowser fight
$7E0365 1 byte Direction Super Mario Bros. 1 Bowser sprite's movement direction.
$01 = right
$02 = right, but all he does is run towards the axe
$FF = left
$7E0367 1 byte Timer Super Mario Bros. 1 Index to ROM table $03:D6F1 (timer delay for next Bowser fireball). Increases as a bowser fireball is launched
$7E0368 1 byte Index Super Mario Bros. 1 Index of the Bowser sprite.
$7E037C 1 byte Miscellaneous Super Mario Bros. 3/Global Used by the 'slot machine' minigame to determine xposition of the parts.

TODO: What exactly is this address for?
$7E0399 1 byte Sprites Super Mario Bros. 1 How long the vine (both in start of a level and item boxes) has grown.
$7E03A2 8 bytes Timer Super Mario Bros. 1 Hammer bros hammer throw timer.

TODO: Also related to the player interacting with the red platforms.
$7E03CA 1 byte Timer Super Mario Bros. 1 Bowser's "dizzy bubbles" timer. Increases and shows the animation, until value $34.

Used in combination with $7E03CB.
$7E03CB 1 byte Flag Super Mario Bros. 1 Bowser's "dizzy bubbles" animation flag upon receiving the 4th fireball hit. Used in combination with $7E03CA.
$7E03F2 1 byte Counter Super Mario Bros. 1 Counts the amount of bounce blocks you've created in the current level. Doesn't seem to be used for anything else.
$7E0400 896 bytes VRAM Tilemap Intro & Game Select Screens "File Select tileset" buffer
$7E0422 1 byte Counter Super Mario Bros. 3/Global Amount of coins added to the coin counter (so setting this to $02 will add 2 coins to the coin counter).
$7E0428 1 byte Flag Super Mario Bros. 3/Global Setting this to $01 in a level gives the player the star powerup for the default amount of time.

Setting this in the overworld will give the player the star powerup on the overworld, to be applied when you enter a level.
$7E0429 1 byte Player Super Mario Bros. 3/Global Player's image on the overworld.

$00 - Small
$01 - Big
$02 - Big
$03 - Leaf
$04 - Frog
$05 - Tanooki
$06 - Hammer
$07 - Jugem's Cloud
$08 - P-Wing
$09 and higher - Glitch

Does not affect the powerup upon level entrance.
Palette does not update when changing image.
$7E04B5 1 byte Flag Super Mario Bros. 2 Crystal ball has been collected flag, height of opened mouth of hawkmouth.
$7E04B7 1 byte Counter Super Mario Bros. 2 How long the dark potion rooms last.
$7E04C3 1 byte Counter Super Mario Bros. 2 HP count. (Red hearts.)
$7E04C4 1 byte Miscellaneous Super Mario Bros. 2 Amount of hearts to show + 2.
$7E04C6 1 byte Hardware Mirror Super Mario Bros. 2 BG 1 Y (low byte) position, works together with $0206. Used for effects such as the POW.
$7E04CA 1 byte Player Super Mario Bros. 2 The amount of time the player can float.
$7E04CB 1 byte Counter Super Mario Bros. 2 Amount of time the player has to charge up for before doing the super jump.
$7E04E1 1 byte Timer Super Mario Bros. 2 Flashing timer, can kill enemies.
$7E04E8 1 byte Counter Super Mario Bros. 2 Accumulative level number to continue on.
$7E04E9 1 byte Level Data Super Mario Bros. 2 Current room to continue on.
$7E04EA 1 byte Level Data Super Mario Bros. 2 Screen number to continue on.
$7E04ED 1 byte Level Data Super Mario Bros. 2 0 = don't go out of level, 1 = go to player select screen, 2 = go to Game Over screen, 3 = go to bonus game, 4-FF = go to warp screen.
$7E04EE 1 byte Counter Super Mario Bros. 2 Current amount of lives.
$7E04EF 1 byte Miscellaneous Super Mario Bros. 2 Jar type. 0 = warp jar, 1 = regular jar, 2 = 'enclosed' jar
$7E0500 1 byte Sprites Super Mario Bros. 2 Amount of time sprites are frozen. (Stopwatch.)
$7E0533 1 byte Level Data Super Mario Bros. 2 Accumulative level number
$7E0534 1 byte Level Data Super Mario Bros. 2 Current room
$7E0535 1 byte Level Data Super Mario Bros. 2 Screen number to start out on.
$7E0545 1 byte Level Super Mario Bros. 3/Main gameplay During level load: Set level entrance type. Value is 00-07, set by the level header.
00 = normal
01 = slide
02 = vertical pipe exit up
03 = vertical pipe exit down??
04 = horizontal pipe exit right
05 = horizontal pipe exit left
06 = airship intro
07 = weird vertical scrolling?
(TODO: verify values 3 and 7)

During gameplay: Player sliding speed.
$00-$7F: right
$80-$FF: left

TODO: Doesn't seem to work in levels without slopes?
$7E0551 1 byte Timer Super Mario Bros. 3/Main gameplay Player growing/shrinking animation timer. $2F is the maximum value.

Does not apply to other animations (smoke animation, fire flower animation, etc.)
$7E0552 1 byte Timer Super Mario Bros. 3/Global Player is hurt flag (flashing after they get hit)
$7E0553 1 byte Timer Super Mario Bros. 3/Global Star power timer. Does not adjust the music.
$7E0554 1 byte Timer Super Mario Bros. 3/Global Player turns into smoke timer. (When you get Leaf, Tanooki suit etc.)
$7E0555 1 byte Timer Super Mario Bros. 3/Global Mario changes pallette rapidly timer (When you get fireflower)
$7E0556 1 byte Timer Super Mario Bros. 3/Global Everything freezes timer (Activates when Mario gets hit)
$7E0557 1 byte Timer Super Mario Bros. 3/Global Player kicks object image timer
$7E0558 1 byte Timer Super Mario Bros. 3/Global Player faces screen image timer
$7E0559 1 byte Timer Super Mario Bros. 3/Global Player walks to the right in level end timer (Activates when only on ground)
$7E055A 1 byte Timer Super Mario Bros. 3/Global Player walking towards doomship timer (during that one cutscene).
$7E0566 1 byte Generator Super Mario Bros. 3/Global Generator number. Valid values:

$00 - Nothing
$01 - Flying Cheep-Cheeps
$02 - Spiny Cheep-Cheeps
$03 - ? (turns off generator and does something else...)
$04 - Para-Beetles (red and green)
$05 - Moving background clouds?
$06 - Left-moving falling platforms
$07 - Exit on treasure chest obtain?
$08 - Turns off generators?

TODO: Verify values 05, 07, and 08 and check out 03.
$7E0567 1 byte Timer Super Mario Bros. 3/Global P-Switch timer.
$7E0577 1 byte Player Super Mario Bros. 3/Global Player Kuribo shoe status

$00 - Without
$01 - With
$7E0578 1 byte Powerup Super Mario Bros. 3/Global Current player's powerup.

$00 - Small
$01 - Small
$02 - Big
$03 - Fiery
$04 - Raccoon
$05 - Frog
$06 - Tanooki
$07 - Hammer
$20 - Tanooki statue
$7E057A 1 byte Timer Super Mario Bros. 3/Global Tanooki Player's statue mode timer. Makes the player lose statue mode once it hits 00.
$7E0598 1 byte Overworld Super Mario Bros. 3/Global Flag to enable the spotlight on the overworld. Read upon overworld loading, pausing and level entry.
$7E0598 1 byte Overworld Super Mario Bros. 3/Global Flag to hide the overworld in darkness when the Game Over screen pops up. Only used in World 8's 3rd submap (with the spotlight).
$7E05A5 1 byte Timer Super Mario Bros. 2 How long it takes Phanto to initially take off after grabbing a key. Starts at #$A0
$7E05BF 8 bytes Y Position Super Mario Bros. 3/Global Extended sprite Y-position, low byte.

TODO: Verify length
$7E05C9 8 bytes X Position Super Mario Bros. 3/Global Extended sprite X position, low byte

TODO: Verify length
$7E05EE 3 bytes Timer Super Mario Bros. 3/Global Current level timer (example: $03 $02 $05 = 325 seconds left)
$7E0620 1 byte Flag Super Mario Bros. 2 1UP has been collected flag.
$7E0628 1 byte Level Data Super Mario Bros. 2 In potion room or not. #$00 = regular level, #$01 = jar, #$02 = potion room.
$7E0629 1 byte Level Data Super Mario Bros. 2 Level number without world number added
$7E062A 1 byte Counter Super Mario Bros. 2 Amount of cherries collected
$7E062B 1 byte Counter Super Mario Bros. 2 Amount of coins you have for the bonus game
$7E062D 4 bytes Level Data Super Mario Bros. 2 Amount of levels completed per character table.
$7E0635 1 byte World Super Mario Bros. 2 World number.
$7E0671 8 bytes Sprites Super Mario Bros. 3/Global Sprite number.

TODO: Verify length; include list?
$7E06A1 13 bytes Map16 Super Mario Bros. 1 Map16 tile buffer.

Map16 tile which gets drawn off-screen as the level progresses. Tiles are drawn from top to bottom, so the first byte is for the top of the level while the last byte is for the bottom of the level.
$7E06C2 1 byte Player Super Mario Bros. 2 Player is shrinking or growing
$7E06CB 1 byte Generator Super Mario Bros. 1 Which generator to activate.
$7E06CC 1 byte Flag Super Mario Bros. 1 "Hard mode" flag. This flag is set at W5-3 and modifies sprites (makes platforms smaller and have bullet generators, etc.)
$7E06CD 1 byte Sprite Number Super Mario Bros. 1 Which enemy to generate during generators.
$7E06D9 1 byte Counter Super Mario Bros. 1 Looping maze level amount of correct checkpoints counter. Resets everytime you pass the last checkpoint of a certain part of the level.
$7E06DA 1 byte Counter Super Mario Bros. 1 Looping maze level amount of checkpoints counter. Resets everytime you pass the last checkpoint of a certain part of the level.
$7E06DB 1 byte Y Speed Super Mario Bros. 1 Springboard launch force. Later stored into $7E00A0, player Y Speed.
$7E0714 1 byte Flag Super Mario Bros. 1 Player is ducking flag. $04 = duck, $00 = normal. Unwritten when player is small.
$7E0715 3 bytes Routine Super Mario Bros. 3/Global Current player's score
$7E0716 1 byte Flag Super Mario Bros. 1 Disable player collision detection with objects flag.

Can still interact with sprites.
$7E0717 1 byte Counter Super Mario Bros. 1 Current Demo action executed
$7E0718 1 byte Timer Super Mario Bros. 1 Current Demo action's timer, counts down.
$7E071A 1 byte X Position Super Mario Bros. 1 Horizontal X coordinate of left side of the screen, high byte.
$7E071A 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $210D: BG1 X Position (high byte)
$7E071B 1 byte X Position Super Mario Bros. 1 Horizontal X coordinate of right side of the screen, high byte.
$7E071C 1 byte X Position Super Mario Bros. 1 Horizontal X coordinate of left side of the screen, low byte.
$7E071D 1 byte X Position Super Mario Bros. 1 Horizontal X coordinate of right side of the screen, low byte.
$7E0720 2 bytes VRAM Super Mario Bros. 1 Handles drawing of the layer 1 tiles? Adding 1 to it moves every layer 1 stuff to the left 1 8x8 tile.

"Is 0x04 on every odd numbered page and 0x00 on even."

TODO: Verify
$7E0725 1 byte Level Super Mario Bros. 1 Current screen number. Starts with $01 unlike traditional counters which start at $00.

Changing this seems to affect level loading in real-time. Seems to be used in maze castle levels (like 7-4)
$7E0726 1 byte Player Super Mario Bros. 3/Main gameplay Current player number.
$00 - Mario
$01 - Luigi
$7E0727 1 byte World Super Mario Bros. 3/Global Current world
$7E0727 1 byte Overworld Super Mario Bros. 3/Overworld Current player's overworld action.
$7E072C 2 bytes Objects Super Mario Bros. 1 Offset of level data, used as an index for [$FA],y
$7E0733 1 byte Level Super Mario Bros. 1 Area object style

$00 - Regular (green platforms, also used in cloud levels)
$01 - Mushroom platforms
$02 - Bullet Bill Cannons
$7E0735 1 byte Level Super Mario Bros. 1 Vertical length of object, used in rendering objects into the level.
$7E0739 1 byte Sprites Super Mario Bros. 1 Offset of sprite data, used as an index for [$FD],y
$7E073A 1 byte Sprites Super Mario Bros. 1 Screen number of the most recent sprite placed into the level.
$7E073D 2 bytes Flag Super Mario Bros. 3/Main gameplay Flag to beat the current world, display the "Oh thank heavens!" cutscene and proceed to the next world. Read upon level load.

Byte 1 is for Mario
Byte 2 is for Luigi
$7E073F 1 byte X Position Super Mario Bros. 1 BG1 X Position low byte.
$7E073F 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $210D: BG1 X Position (low byte)
$7E0740 1 byte Y Position Super Mario Bros. 1 BG1 Y Position low byte.
$7E0740 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $210E: BG1 Y Position (low byte)

High byte version of this address does not exist.
$7E0742 1 byte Flag Super Mario Bros. 3/Global Flag to keep N-Spade cards as is. 0 = shuffle, 1 = keep.
$7E0743 1 byte Flag Super Mario Bros. 1 Cloud bonus game level type flag (also replaces most objects with clouds as the level progresses).
$7E0744 3 bytes Pointers Super Mario Bros. 2 Layer 3 Map16 data pointer.
$7E0746 1 byte Counter Super Mario Bros. 1 Flagpole task control.

$00 - Nothing
$01 - Check if firework is applicable
$02 - Award points
$03 - Raise star flag and launch fireworks
$04 - Delay to level fadeout
$7E0747 1 byte Timer Super Mario Bros. 1 Everything freezes timer (when the player get a powerup or dies for example).
$7E0747 2 bytes Player Super Mario Bros. 3/Global Current player's powerup on the overworld.

$00 - Small
$01 - Big
$02 - Fire
$03 - Raccoon
$04 - Frog Suit
$05 - Tanooki Suit
$06 - Hammer Suit
$07 - Jugem's Cloud
$08 - P-Wing
$09 or higher - Glitch

Byte 1 is for Mario, byte 2 is for Luigi.

Behaviour of certain powerups apply once the overworld loads , not immediately upon changing the value (like Jugem's Cloud). Jugem's Cloud will also have seemingly infinite uses.
$7E074D 1 byte Sprites Super Mario Bros. 3/Global Number of pixels that a sprite has moved along the X- or Y-axis. It is set during the routine that updates a sprite's position based on its speed.
$7E074E 1 byte Graphics Super Mario Bros. 2 Enable Layer 3 image. Also controls which Layer 3 image to load.
$7E074F 9 bytes Sprites Super Mario Bros. 3/Global Sprite X position fractional bits.

TODO: Verify length
$7E0753 1 byte Player Super Mario Bros. 1 Current Player
$00 - Player 1 (Mario)
$01 - Player 2 (Luigi)

Changing this value effectively changes the input controller as well.
$7E0754 1 byte Flag Super Mario Bros. 1 Current player's small player flag.
$7E0756 1 byte Player Super Mario Bros. 1 Current player's powerup
$7E075A 1 byte Player Super Mario Bros. 1 Current player's current amount of lives.
$7E075B 1 byte Counter Super Mario Bros. 1 Current player's midway point screen number
$7E075C 1 byte Counter Super Mario Bros. 1 Current player's level number (used for dash-number display)
$7E075D 1 byte Flag Super Mario Bros. 1 Current player's hidden 1-up block can be hit flag.
$7E075E 1 byte Counter Super Mario Bros. 1 Current player's coins. (Statusbar display not updated)
$7E075F 1 byte World Super Mario Bros. 1 Current player's world.
$7E0760 1 byte World Super Mario Bros. 1 Current player's level (does not update dash-number)
$7E0761 1 byte Player Super Mario Bros. 1 Previous player's current amount of lives.
$7E0761 9 bytes Sprites Super Mario Bros. 3/Global Sprite Y position fractional bits.

TODO: Verify length
$7E0762 1 byte Counter Super Mario Bros. 1 Previous player's midway point screen number
$7E0763 1 byte Counter Super Mario Bros. 1 Previous player's level number (used for dash-number display)
$7E0764 1 byte Flag Super Mario Bros. 1 Previous player's hidden 1-up block can be hit flag.
$7E0765 1 byte Counter Super Mario Bros. 1 Previous player's coins. (Statusbar display not updated)
$7E0766 1 byte World Super Mario Bros. 1 Previous player's world.
$7E0767 1 byte World Super Mario Bros. 1 Previous player's level (does not update dash-number)
$7E0769 1 byte Flag Super Mario Bros. 1 Disable level preview flag.
$7E076A 1 byte Flag Super Mario Bros. 1 Current player's "More difficult quest" flag.
$7E0770 1 byte Routine Super Mario Bros. 1 Game operation mode.

$00 - Title screen
$01 - Main
$02 - Defeated Bowser
$03 - Game Over
$7E0772 1 byte Routine Super Mario Bros. 1 Which task to execute of the current operation mode ($7E0770).
$7E0772 1 byte Flag Super Mario Bros. 2 Layer 3 transparency flag. (Layer 3 in front of Layer 2) Used for light beams in cave levels.
$7E0773 1 byte VRAM Super Mario Bros. 1 Stripe image uploader destination VRAM address index. Indexes the tables at $0382DE (VRAM low byte) and $0382F1 (VRAM high byte).
$7E0775 1 byte Speed Super Mario Bros. 1 Camera scrolling x-speed.
$7E0775 1 byte Hardware Mirror Super Mario Bros. 2 BG Mode / Character Size / Layer 3 priority
$7E0776 1 byte Flag Super Mario Bros. 1 Pause flag. Shows the pause menu.
$7E0777 1 byte Timer Super Mario Bros. 1 Counter which disables the start button. Used when pausing the game so you can't rapidly pause/unpause. Counts down automatically.
$7E077A 1 byte Flag Super Mario Bros. 1 2-Player game flag
$7E077F 1 byte Flag Super Mario Bros. 1 Previous player's small player flag.
$7E0780 1 byte Player Super Mario Bros. 1 Previous player's powerup.
$7E0781 1 byte Flag Super Mario Bros. 1 "More difficult quest" flag for previous player
$7E0782 1 byte Timer Super Mario Bros. 2 Amount of times 'No Bonus' should flash. (Up to 7F)
$7E0783 1 byte Timer Super Mario Bros. 2 Amount of frames 'No Bonus' remains present or not. (00 slowest, 01 fastest)
$7E078A 1 byte Timer Super Mario Bros. 2 Amount of time to wait before changing music back to the original level music again. Used for several occasions like the Crystal Ball collecting scene.
$7E078C 1 byte Flag Super Mario Bros. 3/Battle Mode The player who won the round. $01 = Luigi, $02 = Mario.
$7E078F 1 byte Timer Super Mario Bros. 1 Countdown timer which when it hits 0, it reduces the level timer by 1. Lower values means the level timer counts down faster.
$7E079B 1 byte Timer Super Mario Bros. 1 Used in generators: Timer to spawn the next sprite.

TODO: Seems to behave differently for the bullet bill generator
$7E079C 1 byte Timer Super Mario Bros. 1 Time until Bowser's sprite shoots a fireball.
$7E07AE 1 byte Timer Super Mario Bros. 1 Player invincibility (after getting hit) timer.
$7E07AF 1 byte Timer Super Mario Bros. 1 Player Star power timer.
$7E07B7 7 bytes Miscellaneous Super Mario Bros. 1 Table of randomly generated numbers.
$7E07CE 6 bytes Player Super Mario Bros. 1 Player 1's current score. 1 digit each byte. Example: $01 $02 $03 $04 $05 $06 = 1234560 points
$7E07D4 6 bytes Player Super Mario Bros. 1 Player 2's current score.
$7E07E9 3 bytes Timer Super Mario Bros. 1 The level's current timer.
First byte is the hundreds, second byte is the tens, and the third byte is the ones.
$7E07FC 1 byte Flag Super Mario Bros. 1 "More difficult quest" flag.

Actually affects the world and level number display to show the star.
$7E07FD 1 byte World Super Mario Bros. 1 Residual address from NES SMB1: World number for the secret continue function (A + Start) of NES SMB1
$7E0800 544 bytes OAM Tilemap Super Mario Bros. 1 OAM table.
$7E0800 544 bytes OAM Tilemap Super Mario Bros. 2 OAM table.
$7E0800 512 bytes OAM Tilemap Intro & Game Select Screens OAM low table mirror
$7E0800 544 bytes Hardware Mirror Super Mario Bros. 3/Battle Mode Mirror of the entirety of OAM.
$7E0886 1 byte OAM Tile Number Super Mario Bros. 3/Global Miniature player's tile number in the

WORLD N
MARIO/LUIGI x N

blue screen popup on the overworld.
$7E0A00 32 bytes OAM Tilemap Intro & Game Select Screens OAM high table mirror (actual).
$7E0A20 128 bytes OAM Tilemap Super Mario Bros. 2 Table that determines the size of a sprite's tile - 8x8 (#$00) or 16x16 (#$02). Each byte corresponds to 4 OAM bytes. Stores to $0A00-$0A1F (where each 2 bits correspond to 4 OAM bytes.)
$7E0A20 128 bytes OAM Tilemap Intro & Game Select Screens OAM high table mirror (expanded).

Each byte only sets the lowest two bits that then get inserted into $7E:0A00.
$7E0AC0 1 byte Flag Intro & Game Select Screens If non-zero CGRAM will update (transfer $7F:9200 to CGRAM).
$7E0B00 512 bytes Palette Super Mario Bros. 2 CGRAM (palette) table.
$7E0B75 1 byte Pointers Super Mario Bros. 1 Pause window states.

$00 - Expand
$01 - Maintain pause window, wait for input, etc.
$02 - Option selected (?)
$03 - Collapse
$7E0B78 1 byte Timer Super Mario Bros. 1 Frame counter which increases every frame only when paused. Used to do the cursor blinking animation.
$7E0B9A 1 byte HDMA Super Mario Bros. 1 How big the windowing HDMA circle is of the player's and Peach's portrait after rescuing the princess. Maximum valid value is $30.
$7E0BA5 1 byte Flag Super Mario Bros. 1 Animation locked flag. $01 Locks the player animation.

Seems to be only used during the fadeout to a new world after rescuing Toad.
$7E0E4F 1 byte Flag Super Mario Bros. 1 Pipe fadeout flag - when taking a pipe, makes all screen fades mosaic and hides OAM tiles.
$7E0E7E 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2105: Mosaic/pixelation register.
$7E0EC0 2 bytes Index Super Mario Bros. 1 Index to the final background map16 page written. (Every $0100 bytes of RAM $7ED000 is a page)
$7E0EC2 1 byte Flag Super Mario Bros. 1 Current player's character graphics.

$00 - Mario's graphics
$01 - Luigi's graphics
$7E0ED1 1 byte Flag Super Mario Bros. 1 "Starry Night" background mode flag. Enables IRQ parallax scrolling and other things.
$7E0ED2 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2110: BG2 Y Position (low byte)
$7E0ED3 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2110: BG2 Y Position (high byte)
$7E0EDC 1 byte Flag Super Mario Bros. 1 Process layer 3 image display flag
$7E0EDE 1 byte Flag Super Mario Bros. 1 IRQ-related flag. $00 during fades, $01 during normal levels and $02 during Starry Night levels.
$7E0EE0 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2132: Direct Color Register
$7E0EE1 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2132: Direct Color Register
$7E0EE2 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2132: Direct Color Register
$7E0EEE 2 bytes Hardware Mirror Super Mario Bros. 1 if $7E0EF1 (starry night IRQ flag) is set:
Mirror of $210F: BG2 Horizontal scroll.

else:
Mirror of $2111: BG3 Horizontal scroll.
$7E0EF2 1 byte Counter Super Mario Bros. 1 IRQ V-Timer thing. #$AF during Starry Night levels to do the parallax effect, #$1F during other levels.
$7E0EFD 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $210F: BG2 X Position (low byte)
$7E0EFE 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $210F: BG2 X Position (high byte)
$7E0F4C 1 byte Timer Super Mario Bros. 1 Bowser animation freeze timer
$7E0F4E 1 byte Index Super Mario Bros. 1 Sprite index of latest generated Bowser fire.
$7E0F89 1 byte Counter Super Mario Bros. 1 'Phase' of the floating heart in the Princess kisses player sequence.
$7E1000 512 bytes Palette Super Mario Bros. 1 Level Palette
$7E1019 1 byte Counter Super Mario Bros. 3/Global An unused counter variable which controls how many times you get to play the Spade minigame. Setting the value to any value besides 00 during the game will allow you to keep trying until either you win, or the counter reaches zero (whichever comes first). Simply press A, B, or Start to spin the reels again.
$7E1061 1 byte Music Super Mario Bros. 3/Main gameplay The level music. Values:
00 = nothing
01 = athletic
02 = grassland
03 = water
04 = P-switch
05 = Bowser battle
06 = underground
07 = bonus win
08 = fortress
09 = miss
0A = game over
0B = boss clear
0C = level clear
0D = invincible
0E = Bowser defeated?
0F = falling with wand
10 = airship
11 = Hammer Bros. battle
12 = boss battle
13 = king saved
14 = Coin Heaven
15 = title screen
16 = 2-player battle (with intro)
17 = Bowser's letter
18 = Peach's letter
19-FF = nothing?
$7E1062 1 byte Music Super Mario Bros. 3/Main gameplay Music backup, used to restore the level music when it changes (as a result of something like a P-Switch or star).
$7E116C 14 bytes VRAM Tilemap Super Mario Bros. 2 Line of white squares to display how many levels there are in current world. 2 bytes per tile. 1st byte = tilemap, 2nd byte = properties.
$7E118E 1 byte VRAM Tilemap Super Mario Bros. 2 World number in beginning of level display tilemap
$7E118F 1 byte VRAM Tilemap Super Mario Bros. 2 World number in beginning of level display properties
$7E1190 1 byte VRAM Tilemap Super Mario Bros. 2 Dash in beginning of level display tilemap
$7E1191 1 byte VRAM Tilemap Super Mario Bros. 2 Dash in beginning of level display properties
$7E1192 1 byte VRAM Tilemap Super Mario Bros. 2 Level number in beginning of level display tilemap
$7E1193 1 byte VRAM Tilemap Super Mario Bros. 2 Level number in beginning of level display properties
$7E11B4 1 byte Counter Super Mario Bros. 2 Amount of lives in char. select, 10s
$7E11B5 1 byte VRAM Tilemap Super Mario Bros. 2 Properties of lives in char. select, 10s
$7E11B6 1 byte Counter Super Mario Bros. 2 Amount of lives in char. select, 1s
$7E11B7 1 byte VRAM Tilemap Super Mario Bros. 2 Properties of lives in char. select, 1s
$7E11BD 6 bytes VRAM Tilemap Super Mario Bros. 2 Tilemap and properties of number of 'World
$7E1200 1 byte Sound Effect Super Mario Bros. 3/Global Sound effects channel 1
$7E1201 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2100: Brightness settings.

Automatically goes into F-Blank when brightness is 0.
$7E1201 1 byte Sound Effect Super Mario Bros. 3/Global Sound effects channel 2
$7E1202 1 byte Music Super Mario Bros. 3/Global Current music number. Write $F2 to lower the volume, and $80 to fade out the music, although doing this disallows you from pausing inside levels.
$7E1203 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $420C: Enable HDMA channels
$7E1203 1 byte Sound Effect Super Mario Bros. 3/Global Sound effects channel 3
$7E1204 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2123: Window Mask Settings for BG1 and 2
$7E1204 4 bytes Hardware Mirror Super Mario Bros. 3/Global Backup of $1200; used to determine which music was played recently.
$7E1205 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2124: Window Mask Settings for BG3 and 4
$7E1206 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2125: Window Mask Settings for OAM and color window
$7E1207 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $212E: Window Mask Designation for main screen
$7E1208 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $212F: Window Mask Designation for sub screen
$7E1208 4 bytes Hardware Mirror Super Mario Bros. 3/Global SPC700 -> SNES I/O registers. Used to determine if a sound effect or music is finished playing.
$7E1209 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2130: Color addition select
$7E120A 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2131: CGADSUB
$7E120B 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $212C: Main Screen Designation
$7E120C 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $212D: Sub Screen Designation
$7E120D 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2105: Screen mode
$7E120E 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2128: Window 2 left position
$7E120F 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2129: Window 2 right position
$7E1210 1 byte Hardware Mirror Super Mario Bros. 1 Mirror of $2132: Direct color register
$7E1300 5 bytes Level Data (Objects) Super Mario Bros. 1 A buffer for rendering horizontally extendable objects. The buffer is represented as a stack that starts at $7E1304 and ends at $7E1300. A value of #$FF means there is no object to render. A value greater than or equal to zero means this object should render at the current X-coordinate.

Each byte represents the remaining width of the object to render. The area data parser renders the level an X-coordinate at a time. The renderer pauses until the player moves forward and more tile data needs to be read (this strategy to load area data is why you can't scroll backwards in SMB1).

How the buffer works is, when an object is at the X-coordinate as the area data renderer (the coordinate it is currently rendering) it will do the render logic for that coordinate, decrement the buffer value, and move on. Once the buffer value gets to $FF, this buffer value is free to use for another object. It will save the 16-bit index of this object relative to the area data address at $7E1305,x, and the 8-bit width of the object at $7E1300,x.

If there is already an object at the current buffer stack, the object will be saved to the next buffer location. If all five buffers are filled, the render will not render anymore objects until it gets to the next screen and the buffer is reset. This places a limit of 5 objects per X-coordinate in SMB1.
$7E1300 512 bytes Palette Super Mario Bros. 3/Global A buffer for the entire palette, both in levels and on the overworld. It may be uploaded to CGRAM depending on $1500.
$7E1305 10 bytes Level Data (Objects) Super Mario Bros. 1 A buffer that saves the index of the area data object in the respective buffer of $7E1300.

Once an object is ready to be rendered at its X-coordinate, the width of the object is saved to $7E1300,x and the index of this object in the area object data is saved at $7E1305,x. The X register for $7E1300,x is 8-bit, but for $7E1305,x it's 16-bit.
$7E130F 5 bytes Level Data (Objects) Super Mario Bros. 1 A flag for the current buffer object at $7E1300. If that object is a green tree platform, then this flag is set when it's rendering the left base of the tree (the stem), and then cleared once it reaches the right base.

This flag is used to determine when to start and stop rendering the stem green tree platform.
$7E1314 5 bytes Level Data (Objects) Super Mario Bros. 1 A value used for the current buffer object at $7E1300,x.

If that object is an orange mushroom platform, then this value is set to half the width of the platform and is used to determine where to draw the stem of the mushroom.
$7E1319 231 bytes Empty Super Mario Bros. 1 Unused free space. Ends at $7E13FF.
$7E1400 64 bytes HDMA Super Mario Bros. 1 The red intensity of the HDMA background colors. Seems to be used in indirect HDMA to $2132, HDMA channel 5
$7E1408 1 byte Counter Super Mario Bros. 2 Amount of coins in bonus game, 10s (if low byte is a blank tile, this is used as 1s)
$7E1409 1 byte VRAM Tilemap Super Mario Bros. 2 Properties of coins in bonus game, 10s
$7E140A 1 byte Counter Super Mario Bros. 2 Amount of coins in bonus game, 1s
$7E140B 1 byte VRAM Tilemap Super Mario Bros. 2 Properties of coins in bonus game, 1s
$7E142A 1 byte Counter Super Mario Bros. 2 Amount of lives in bonus game, 10s
$7E142B 1 byte VRAM Tilemap Super Mario Bros. 2 Properties of lives in bonus game, 10s
$7E142C 1 byte Counter Super Mario Bros. 2 Amount of lives in bonus game, 1s
$7E142D 1 byte VRAM Tilemap Super Mario Bros. 2 Properties of lives in bonus game, 1s
$7E1460 96 bytes HDMA Super Mario Bros. 1 The green intensity of the HDMA background colors. Seems to be used in indirect HDMA to $2132, HDMA channel 6
$7E14C0 96 bytes HDMA Super Mario Bros. 1 The blue intensity of the HDMA background colors. Seems to be used in indirect HDMA to $2132, HDMA channel 7
$7E1500 1 byte Palette Super Mario Bros. 3/Global A flag that determines whether or not to upload the data at $1300. If this is nonzero, $1300-$14FF will be uploaded to CGRAM and $1500 will be cleared to zero. The relevant check is at $20F923.
$7E1520 96 bytes HDMA Super Mario Bros. 1 Indirect HDMA Table for $7E1400 - HDMA red intensity, channel 5.
$7E1560 64 bytes HDMA Super Mario Bros. 1 Indirect HDMA Table for $7E1460 - HDMA green intensity, channel 6.
$7E15A0 64 bytes HDMA Super Mario Bros. 1 Indirect HDMA Table for $7E14C0 - HDMA blue intensity, channel 7.
$7E1600 1 byte Sound Effect Super Mario Bros. 1 Sound effect channel 1
$7E1601 1 byte Sound Effect Super Mario Bros. 1 Sound effect channel 2
$7E1602 1 byte Music Super Mario Bros. 1 Music channel
$7E1603 1 byte Sound Effect Super Mario Bros. 1 Sound effect channel 3
$7E1680 1 byte Flag Super Mario Bros. 1 "Pause" flag after you rescue the princess.

TODO: has another purpose too?
$7E1800 17 bytes Sprites Super Mario Bros. 3/Battle Mode Sprite status table (2 bytes for players, 13 bytes for enemies, then 2 bytes for bouncing blocks)
Players:
$00 - Initiate
$01 - Alive
$02 - Dying
$03 - Climbing
Enemies:
$00 - No sprite (empty slot)
$01 - Normal
$02 - Flipped upside-down
$03 - Dying
$04 - Kicked (shell only)
Bouncing blocks:
$00 - No sprite (empty slot)
$0D - Normal (decrements once per frame until despawned)
$7E1811 17 bytes Y Position Super Mario Bros. 3/Battle Mode Sprite Y position, low byte (2 bytes for players, 13 bytes for enemies, then 2 bytes for bouncing blocks).
$7E1822 17 bytes X Position Super Mario Bros. 3/Battle Mode Sprite X position, low byte (2 bytes for players, 13 bytes for enemies, then 2 bytes for bouncing blocks).
$7E1833 17 bytes Y Speed Super Mario Bros. 3/Battle Mode Sprite Y speed (2 bytes for players, 13 bytes for enemies, then 2 bytes for bouncing blocks).
$7E1844 17 bytes X Speed Super Mario Bros. 3/Battle Mode Sprite X speed (2 bytes for players, 13 bytes for enemies, then 2 bytes for bouncing blocks).
$7E1855 15 bytes Timer Super Mario Bros. 3/Battle Mode Sprite animation timer (2 bytes for players, then 13 bytes for enemies).
$7E1864 15 bytes Direction Super Mario Bros. 3/Battle Mode Sprite horizontal facing direction (2 bytes for players, then 13 bytes for enemies). $01 = left, $02 = right.
$7E1873 17 bytes Y Position Super Mario Bros. 3/Battle Mode Sprite Y position subpixel (2 bytes for players, 13 bytes for enemies, then 2 bytes for bouncing blocks).
$7E1884 17 bytes X Position Super Mario Bros. 3/Battle Mode Sprite X position subpixel (2 bytes for players, 13 bytes for enemies, then 2 bytes for bouncing blocks).
$7E1895 17 bytes Flag Super Mario Bros. 3/Battle Mode Sprite interaction direction(s) (2 bytes for players, 13 bytes for enemies, then 2 bytes for bouncing blocks).
Bitwise: ????cf?? where
c = 1 if hit a ceiling
f = 1 if hit a floor
$7E18A6 13 bytes Sprites Super Mario Bros. 3/Battle Mode Unknown sprite table (13 bytes for enemies).
TODO: figure this one out
$7E18B3 2 bytes Player Super Mario Bros. 3/Battle Mode Player kicking timer. If non-zero, player will display a kicking pose.
$7E18B5 2 bytes Player Super Mario Bros. 3/Battle Mode Player squished timer. If non-zero, player will display a squished pose.
$7E18B7 2 bytes Player Super Mario Bros. 3/Battle Mode Player frozen vertically timer. If non-zero, player will not move vertically. Used when a player hits their head on a block.
$7E18B9 1 byte Flag Super Mario Bros. 3/Battle Mode Disable player interaction flag. Used so players don't get stuck to each other when they collide.
$7E18BA 1 byte Timer Super Mario Bros. 3/Battle Mode POW timer. If non-zero, the screen will shake and all sprites on a floor will be stunned.
$7E18BB 13 bytes Sprite Number Super Mario Bros. 3/Battle Mode Sprite number for active sprites.
$00 - Spiny
$01 - ?
$02 - Crab
$03 - Fly
$04-$06 - Fireball
$07-$09 - Boo
$0A - Koopa
$0B - ?
$0C-$0E - Level cards
$0F - Brown Block
$10 - Super Mushroom
$11 - Red ? Mushroom
$12 - Green ? Mushroom
$13 - Coin
$7E18CA 1 byte Counter Super Mario Bros. 3/Battle Mode Number of unique enemies that have spawned this round.
$7E18CB 15 bytes Sprites Super Mario Bros. 3/Battle Mode Sprite lock timer (2 bytes for players, then 13 bytes for enemies). If non-zero, this sprite will be frozen in time.
$7E18DA 13 bytes Sprites Super Mario Bros. 3/Battle Mode Sprite turning around timer (13 bytes for enemies).
$7E18E7 15 bytes Sprites Super Mario Bros. 3/Battle Mode Sprite stunned timer (2 bytes for players, then 13 bytes for enemies).
$7E18F6 2 bytes Player Super Mario Bros. 3/Battle Mode Player has jumped flag.
$7E18F8 15 bytes Sprites Super Mario Bros. 3/Battle Mode What block a sprite is standing on top of (2 bytes for players, then 13 bytes for sprites).
$7E1908 2 bytes Position Super Mario Bros. 3/Battle Mode Coordinates of the block a player has hit from below.
Bitwise: xxxxyyyy where
x = block X position / $10
y = block Y position / $10
$7E190C 1 byte Counter Super Mario Bros. 3/Battle Mode Enemy spawning counter. A Swooping Boo is spawned when this value is divisible by 8.
$7E190D 1 byte Counter Super Mario Bros. 3/Battle Mode Enemy spawning counter. A Bouncing Boo is spawned when this value is divisible by 256.
$7E190E 1 byte Index Super Mario Bros. 3/Battle Mode A temporary register used for saving an index when iterating through various tables.
$7E190F 2 bytes Player Super Mario Bros. 3/Battle Mode The block that is direction above the players' heads.
$7E1911 13 bytes Sprites Super Mario Bros. 3/Battle Mode Bitwise sprite status table (13 bytes for enemies).
Bitwise: p?????e? where
p = entering/exiting a pipe
e = sprite exists
$7E191E 13 bytes Sprites Super Mario Bros. 3/Battle Mode Sprite entering/exiting a pipe timer (13 bytes for enemies).
$7E192B 3 bytes Miscellaneous Super Mario Bros. 3/Battle Mode Random number generation (RNG) bytes. First two bytes are the seeds, and $192D is the actual output of the routine.
$7E192E 2 bytes Player Super Mario Bros. 3/Battle Mode Player coin count.
$7E1930 1 byte Timer Super Mario Bros. 3/Battle Mode Round is over timer. Set to $FF when the round is finished, and advances to the next screen when it hits zero.
$7E1931 13 bytes Sprites Super Mario Bros. 3/Battle Mode Miscellaneous sprite table, fast animation? (13 bytes for enemies).
$7E193E 1 byte Counter Super Mario Bros. 3/Battle Mode Number of times the POW has been hit.
$7E193F 2 bytes Player Super Mario Bros. 3/Battle Mode Player Y offset. Used to adjust the player sprite when standing on the POW.
$7E1942 15 bytes Y Position Super Mario Bros. 3/Battle Mode Sprite Y position, high byte (2 bytes for players, then 13 bytes for enemies).
$7E1951 15 bytes Sprites Super Mario Bros. 3/Battle Mode Miscellaneous sprite table, fast animation? (2 bytes for players, then 13 bytes for enemies)
$7E1962 13 bytes Sprites Super Mario Bros. 3/Battle Mode Sprite vertical direction (13 bytes for enemies). $04 = down, $08 = up.
$7E198B 15 bytes Sprites Super Mario Bros. 3/Battle Mode Backup of $18CB sprite lock timer (2 bytes for players, then 13 bytes for enemies). Saves all values for when the game is paused.
$7E199C 2 bytes Player Super Mario Bros. 3/Battle Mode Fractional bits for $199E player animation.
$7E199E 2 bytes Player Super Mario Bros. 3/Battle Mode Player walking animation frame.
$7E19AB 1 byte Player Super Mario Bros. 3/Global Mario powerup status in the Battle Game mode.
$00 - Small
$01 - Big
$7E19AB 2 bytes Player Super Mario Bros. 3/Battle Mode Player size. $00 = small, $01 = big.
$7E19AC 1 byte Player Super Mario Bros. 3/Global Luigi powerup status in the Battle Game mode.
$00 - Small
$01 - Big
$7E19AD 2 bytes Player Super Mario Bros. 3/Battle Mode Player ducking flag.
$7E19AF 2 bytes Player Super Mario Bros. 3/Battle Mode Player transitioning between sizes timer.
$7E19B1 2 bytes Player Super Mario Bros. 3/Battle Mode Player size after the transition animation is complete.
$7E19B3 2 bytes Player Super Mario Bros. 3/Battle Mode Player flashing invincible timer.
$7E19B5 2 bytes Player Super Mario Bros. 3/Battle Mode Player remains flashing invincible timer. Used so a player won't lose invincibility until after they move around.
$7E19B7 1 byte X Position Super Mario Bros. 3/Battle Mode X position of the block that has a mushroom hidden inside.
$7E19B9 1 byte Y Position Super Mario Bros. 3/Battle Mode Y position of the block that has a mushroom hidden inside.
$7E19BC 1 byte Counter Super Mario Bros. 3/Battle Mode Total number of enemies killed this round.
$7E19C0 1 byte Timer Super Mario Bros. 3/Battle Mode ? Mushroom effects are active timer.
$7E19C5 9 bytes X Position Super Mario Bros. 3/Battle Mode Particle X position.
$7E19CE 9 bytes Y Position Super Mario Bros. 3/Battle Mode Particle Y position.
$7E19D7 9 bytes Sprites Super Mario Bros. 3/Battle Mode Particle animation timer.
$7E19E0 9 bytes Sprites Super Mario Bros. 3/Battle Mode Particle animation frame.
$7E19E9 9 bytes Sprite Number Super Mario Bros. 3/Battle Mode Particle number.
$01 - Skid smoke
$02 - Yellow star
$7E19FF 21 bytes Generator Super Mario Bros. 3/Main gameplay Various properties for layer 1 movement generator (moving spikes, autoscroll, etc)

$7E1A01: Layer 1 movements

00 - None
01 - No effect
02 - Scrolls Upright
03 - Prompt to Spike Ceiling movement.
04 - Same as 03, but scrolls down completely.
05 - Layer 1 moves up and down, the bottom of the screen has water

TODO: what are the properties
$7E1A25 9 bytes Y Position Super Mario Bros. 3/Global Sprite Y position, low byte

TODO: Verify length
$7E1A2D 9 bytes X Position Super Mario Bros. 3/Global Sprite X position, high byte

TODO: Verify length
$7E1A35 9 bytes X Position Super Mario Bros. 3/Global Sprite X position, low byte

TODO: Verify length
$7E1A35 1 byte Counter Super Mario Bros. 3/Battle Mode Counter that respawns the POW when it reaches zero.
$7E1A38 1 byte Index Super Mario Bros. 3/Battle Mode Index of the missing coin tile in the status bar when a player wins via collecting 5 coins.
$7E1A39 1 byte Timer Super Mario Bros. 3/Battle Mode Timer that controls which palette to display in the status bar when a player wins via collecting 5 coins.
$7E1CFE 1 byte Miscellaneous Super Mario Bros. 3/Global Something related to Magic Wand's image

TODO: Verify. Is there really a RAM address for something trivial like this?
$7E1D80 28 bytes Powerup Super Mario Bros. 3/Global What items Player 1 has in his inventory on the overworld.

$00 - Nothing
$01 - Mushroom
$02 - Fire Flower
$03 - Leaf
$04 - Frog Suit
$05 - Tanooki suit
$06 - Hammer suit
$07 - Jugem's Cloud
$08 - P-wing
$09 - Star
$0A - Anchor
$0B - Hammer
$0C - Warp Whistle
$0D - Music box
$0E-FF - Unused
$7E1D9C 28 bytes Powerup Super Mario Bros. 3/Global What items Player 2 has in his inventory on the overworld.

$00 - Nothing
$01 - Mushroom
$02 - Fire Flower
$03 - Leaf
$04 - Frog Suit
$05 - Tanooki suit
$06 - Hammer suit
$07 - Jugem's Cloud
$08 - P-wing
$09 - Star
$0A - Anchor
$0B - Hammer
$0C - Warp Whistle
$0D - Music box
$0E-FF - Unused
$7E1D9C 3 bytes Player Super Mario Bros. 3/Battle Mode Player 1's level cards.
$7E1DA2 1 byte Counter Super Mario Bros. 3/Global Current player's coins
$7E1DBF 3 bytes Player Super Mario Bros. 3/Battle Mode Player 2's level cards.
$7E1DE0 1 byte Music Super Mario Bros. 2 SFX panel 1
$7E1DE1 1 byte Music Super Mario Bros. 2 SFX panel 2
$7E1DE2 1 byte Music Super Mario Bros. 2 Current Music
$7E1DE3 1 byte Music Super Mario Bros. 2 SFX panel 3
$7E1E84 18 bytes Objects Super Mario Bros. 3/Global N-Spade cards. 00 = Mushroom, 01 = Fire Flower, 02 = Star, 03 = 1-up, 04 = 10 coins, 05 = 20 coins. Anything beyond that is glitched. Layout goes from top-left to bottom-right.
$7E1EBB 3 bytes Pointers Super Mario Bros. 3/Global Pointer to level object data (SNES Address, Little endian)
$7E1F26 1 byte Counter Super Mario Bros. 3/Battle Mode The current round number.
$7E1F55 1 byte Overworld Super Mario Bros. 3/Global Amount of times the music box is supposed to play on the overworld. Is set to $02 when you first use a music box.
$7E1F9C 2 bytes Sprite Number Super Mario Bros. 3/Global Smoke image sprite number

TODO: Verify length
$7E1F9F 2 bytes Y Position Super Mario Bros. 3/Global Smoke image Y position.

TODO: Verify length
$7E1FA2 2 bytes X Position Super Mario Bros. 3/Global Smoke image X position.

TODO: Verify length
$7E1FC8 8 bytes Sprite Number Super Mario Bros. 3/Global Extended sprite number. $15 = laser from Bowser's Castle

TODO: Verify length, get list of values
$7E2000 45056 bytes Map16 Tile Super Mario Bros. 1 Layer 2 Map16 Tiles
$7E2000 28672 bytes Map16 Super Mario Bros. 2 Layer 1 Map16 table for the entire level, low byte.
$7E2000 240 bytes Level Super Mario Bros. 3/Battle Mode The entire level layout.
$7E3965 1 byte Miscellaneous Super Mario Bros. 3/Global Number of coins needed to activate the White Mushroom House in a level that has one. Set by sprite D4.
$7E3966 1 byte Miscellaneous Super Mario Bros. 3/Global How many coins have been collected in the current level so far.
$7E3970 1 byte Flag Super Mario Bros. 3/Global Flag that indicates that the white mushroom house has been spawned once. When it's set, it's not possible to spawn another white mushroom house.
$7E9000 28672 bytes Map16 Super Mario Bros. 2 Layer 1 Map16 table for the entire level, high byte.
$7ED000 3328 bytes Map16 Tilemap Super Mario Bros. 1 Layer 2 Map16 tilemap
$7F2000 40960 bytes Map16 Super Mario Bros. 2 Layer 2 Map16 table for the entire level.
$7F3000 2688 bytes Map16 Super Mario Bros. 1 Layer 3 Map16 tilemap, read upon level load for the individual VRAM tiles located around $04:BD09.

TODO: Confirm size, size of ROM address, format of ROM address, and $7F2000 & $7F2004,x
$7F300C 1 byte Index Super Mario Bros. 3/Battle Mode The cursor selection on the results screen. $00 = continue, $02 = quit
$7F4000 45056 bytes Empty Super Mario Bros. 1 Unused space. Ends at $7FEFFF (0xB000 bytes).
$7F4FFE 128 bytes VRAM Tilemap Super Mario Bros. 3/Battle Mode Mirror of offset-per-tile BG3 tilemap for the barn door effect of results screen transition.
$7F8000 800 bytes VRAM Tilemap Intro & Game Select Screens Tilemap buffer for BG1.
$7F9000 959 bytes HDMA Super Mario Bros. 3/Global Windowing HDMA table.

TODO: Verify length. Having an odd number for a windowing table is odd.
$7F9200 200 bytes Palette Intro & Game Select Screens Palette buffer.
$7F9200 200 bytes Palette Intro & Game Select Screens Palette buffer.
$7FC000 2400 bytes Map16 Super Mario Bros. 2 Layer 3 Map16 table for the current room.
$7FFB00 1 byte World Super Mario Bros. 1 World number loaded from save file. Used in order to load the correct world number after the title screen.
$7FFB01 1 byte Level Super Mario Bros. 1 Level number loaded from save file, typically 0 due to how SMB1's save system works. Setting this anyway displays the level number you set it to, but doesn't load that specific level. Use $7FFB02 for that.
$7FFB02 1 byte Level Super Mario Bros. 1 Level number loaded from save file, but it's typically 0 due to how SMB1's save system works. Read after starting the game from title screen. Setting this changes which level the game starts at.
$7FFB03 1 byte Counter Super Mario Bros. 1 Player 1 amount of lives loaded from save file. Read after starting the game from title screen.
$7FFB04 1 byte Counter Super Mario Bros. 1 Player 2 amount of lives loaded from save file. Read after starting the game from title screen.
$7FFB05 1 byte Flag Super Mario Bros. 1 More difficult quest flag loaded from save file.
$7FFB06 1 byte Flag Super Mario Bros. 1 2-Player flag, loaded from save file. Affects the game's title screen menu.
$7FFF00 1 byte Index Global The current game being played. Used to run the appropriate NMI and IRQ routines of the games.

$00 - Nintendo presents, hall screen, game select screen, etc.
$02 - Super Mario Bros. 1
$04 - Super Mario Bros. The Lost Levels
$06 - Super Mario Bros. 2
$08 - Super Mario Bros. 3
ROM Address Length Type Description Details
$0082CE 10 bytes Pointers [Other] NMI routine pointers based on each game, 2 bytes for each pointer. 1st pointer = Game Select, 2nd = SMB1, 3rd = SMB:TLL, 4th = SMB2, 5th = SMB3
$008362 10 bytes Pointers [Other] IRQ routine pointers based on each game, 2 bytes for each pointer. 1st pointer = Game Select, 2nd = SMB1, 3rd = SMB:TLL, 4th = SMB2, 5th = SMB3
$008C1E 1 byte Flag [Other] Change 00 to 01 to enable debug mode for all games.
$009307 192 bytes VRAM Tilemap (Text) [Other] Error message tilemap: Tile, properties, tile, etc. Text says "THIS GAME PAK IS NOT DESIGINED FOR YOUR SUPER FAMICOM OR SUPER NES. NINTENDO CO.,LTD.". This error message triggers when your SNES is PAL.
$009383 2 bytes Palette [Other] First color of the "pirated" message. Palette $00, color $0C.
$009389 2 bytes Palette [Other] Second color of the "pirated" message. Palette $00, color $0D.
$00938F 2 bytes Palette [Other] Third color of the "pirated" message. Palette $00, color $0E.
$009395 2 bytes Palette [Other] Fourth color of the "pirated" message. Palette $00, color $0F.
$0093C7 322 bytes Routine [Other] "Incompatible SNES" message routine
$0093EC 2 bytes Palette [Other] First color of the "not compatible" message. Palette $00, color $0C.
$0093F2 2 bytes Palette [Other] Second color of the "not compatible" message. Palette $00, color $0D.
$0093F8 2 bytes Palette [Other] Third color of the "not compatible" message. Palette $00, color $0E.
$0093FE 2 bytes Palette [Other] Fourth color of the "not compatible" message. Palette $00, color $0F.
$009509 312 bytes VRAM Tilemap (Text) [Other] "Serious crime" pirated message. Format is the same as the "Not Compatible" message.
$009641 190 bytes Routine [Other] Pirated ROM message routine.
$00965A 1 byte Music [Other] Which music to play at the "Pirated" message. Default value fades out the music.
$009780 514 bytes HDMA [Other] Used in "peach saved" sequence at the end of SMB1 and SMB:TLL for the windowing HDMA circle which expands. Format = unknown. TODO: Figure out the format
$009C8D 1 byte Timer [Other] Nintendo presents blink time. The higher the number, the sooner the logo will blink. Max number is $7F, min number is $01. Other numbers won't make it blink at all
$009C91 1 byte Sound Effect [Other] Nintendo presents blink SFX. Caution: Uses other samples than the games themselves, so -some- SFX might sound glitched such as $03.
$009FAB 70 bytes Pointers [Hall screen] "Triangle fading" graphics offsets when fading into the game select menu, used to create the nifty effect. Bank is hardcoded at #$02
$00A017 20 bytes OAM Tile Number [Other] Nintendo presents logo tilemap (16x16 tiles)
$00A02F 1 byte OAM Tile Y Position [Other] Nintendo presents logo Y position.
$00A033 1 byte OAM Tile X Position [Other] Nintendo presents logo X position
$00A052 1 byte OAM Tile Size [Other] Nintendo presents logo tile sizes. $02 = 16x16, $00 = 8x8
$00A072 4 bytes Timer [Other] Nintendo presents logo blinks duration. Change to [00 00 00 00] to make the logo keep its blinking color after the blink.
$00A076 48 bytes Palette [Other] Nintendo presents logo blinking colors. Format is currently unknown? TODO: Figure out the color
$00A1A7 161 bytes OAM Tilemap [Hall screen] "SUPER MARIO ALL*STARS" OAM tilemap on the hall screen. Format: XX YY TT PP. XX = Xpos, YY = Ypos, TT = Tile, PP = properties. These tiles are 16x16. A value of $FF as XX marks the end of the table.
$00A248 125 bytes OAM Tilemap [Hall screen] "SUPER MARIO ALL*STARS" OAM tilemap on the hall screen. Format: XX YY TT PP. XX = Xpos, YY = Ypos, TT = Tile, PP = properties. These tiles are 8x8. A value of $FF as XX marks the end of the table.
$00A521 1 byte Sound Effect [Game select screen] SFX to play when you're moving the cursor |> over file A/B/C/D screen
$00A60E 1 byte Sound Effect [Game select screen] SFX to play when you can't decrease world number in a file A/B/C/D select screen
$00A9B1 14 bytes VRAM Tilemap [Game select screen] Tilemap in selected game's file select. Tilemap of "FILE" and the entire thin line below it (which includes the bottom part of "NEW"). Table is for ALL the 4 "FILE" sections. Format: Tile, properties. $FFFF ends the table
$00A9C7 34 bytes VRAM Tilemap [Game select screen] Tilemap in selected game's file select. Tilemap of the small controller in the bottom-left corner. Format: Tile, properties. Tilemap is for controller -only-, text around it is excluded.
$00BE08 30 bytes Palette [Hall screen] Palette of the shining ALL*STARS logo. The final 8 colors should be the same color to make the logo stay decent after the flash.
$00BE26 474 bytes Empty [Other] Empty, unused space.
$00C083 32 bytes Palette [Super Mario Bros.: The Lost Levels] Palette of Mario and Princess during the princess rescued sequence.
$00C0A3 32 bytes Palette [Super Mario Bros.: The Lost Levels] Palette of Luigi and Princess during the princess rescued sequence.
$00C12E 164 bytes Stripe Image (Text) [Super Mario Bros.: The Lost Levels] "Thank you Mario! The kingdom is saved! Now try a more difficult quest..." text. Encoded in stripe image
$00C1D2 178 bytes Stripe Image (Text) [Super Mario Bros.: The Lost Levels] "Thank you Mario for restoring peace to our kingdom. Hurrah to our hero, Mario!" text. Encoded in stripe image
$00C284 164 bytes Stripe Image (Text) [Super Mario Bros.: The Lost Levels] "Thank you Luigi! The kingdom is saved! Now try a more difficult quest..." text. Encoded in stripe image
$00C328 178 bytes Stripe Image (Text) [Super Mario Bros.: The Lost Levels] "Thank you Luigi for restoring peace to our kingdom. Hurrah to our hero, Luigi!" text. Encoded in stripe image
$00E5C4 6652 bytes Empty [Other] Empty, unused space.
$018000 32768 bytes Graphics [Hall screen] Hall screen graphics with those characters and all (NOT animation). 8bpp
$028000 4096 bytes Graphics [Other] The Nintendo Presents (Mario head) + the "© 1993 Nintendo" text for the hall screen graphics
$02A000 8192 bytes Graphics [Hall screen] Graphics of the fancy Super Mario All-Stars text as well as the "© 1993 Nintendo" text.
$02F000 4096 bytes VRAM Tilemap [Game select screen] Game select menu tilemap. Format: Tile, properties. Keep in mind that the first 448 bytes affects the "SELECT GAME" area which does NOT scroll when you are scrolling through the games!
$0386E6 48 bytes Routine [Super Mario Bros. 1] Reset highscore (access by B+A+L+R on title screen)
$03896B 1 byte Music [Super Mario Bros. 1] Princess got rescued music.
$039440 1736 bytes Map16 [Super Mario Bros. 1] Map16 data of FG? Partial? Format: $upperleft,$property,$bottomleft,$property,$upperright,$property,$bottomright,$property. TODO: Confirm this address
$039B08 21 bytes Routine [Super Mario Bros. 1] ExecutePtrShort routine.
$039BBC 168 bytes Routine [Super Mario Bros. 1] Stripe image uploader. $00-$02: Pointer to stripe image.

Format of stripe image:
VVVVVVVV VVVVVVVV DRLLLLLL LLLLLLLL <data bytes>

V = VRAM
D = Stripe image direction. 1 = vertical, 0 = horizontal
R = RLE flag
L = Length of data
$039D4A 37 bytes Empty [Other] Empty, unused space.
$03A7C9 94 bytes Pointers [Super Mario Bros. 1] Pointers to level object generation routines (pipes, springboards, etc.)
$03AB26 4 bytes Map16 Tile [Super Mario Bros. 1] Coin map16 tile, depending on $7E005C

In this order: Underwater coin, regular coin, underground coin, castle coin
$03AB5A 4 bytes Map16 Tile [Super Mario Bros. 1] Stone block map16 tile, depending on $7E005C

In this order: Coral stone, normal stone, underground stone, castle dark brick
$03AB5E 5 bytes Map16 Tile [Super Mario Bros. 1] Level brick map16, depending on RAM $7E005C

In this order: Underwater coral, normal bricks, underground bricks, castle bricks, smiling cloud tiles
$03B1B5 1 byte Music [Super Mario Bros. 1] Mario died music (when you fall in a pit).
$03B6AC 1 byte Sound Effect [Super Mario Bros. 1] Fireball throwing sound effect.
$03B6E4 2 bytes X Speed [Super Mario Bros. 1] Fireball X-speed (right, left).
$03B6FE 1 byte X Position [Super Mario Bros. 1] Fireball creation X-position, relative to the player's X-position.
$03B71B 1 byte Y Speed [Super Mario Bros. 1] Fireball initial Y-speed.
$03B953 1 byte Music [Super Mario Bros. 1] Goal at flagpole music.
$03BA2F 1 byte Sprites [Super Mario Bros. 1] How long the vine at the start of a (bonus) level grows at most.
$03BA30 1 byte Sprites [Super Mario Bros. 1] How long the vine from item boxes grows at most.
$03C970 4 bytes Y Position [Super Mario Bros. 1] Bowser's fireball Y positions on the screen (fireball generator).
$03D4F0 1 byte Music [Super Mario Bros. 1] Goal music when you defeat (any) Bowser
$03D6B3 1 byte World [Super Mario Bros. 1] At which world the "real" Bowser battle music plays.
$03D6B7 1 byte Music [Super Mario Bros. 1] "Real" Bowser music.
$03D6BB 1 byte Music [Super Mario Bros. 1] "Fake" Bowser music.
$03DC62 15 bytes Empty [Other] Empty, unused space
$03DCCD 8 bytes Sprite Number [Super Mario Bros. 1] Sprite to generate when you kill Bowser with fireballs. In this order: Goomba, Green Koopa, Red Koopa, Spiny, Lakitu, Blooper, Hammer Bros., Bowser
$03DE13 1 byte Timer [Super Mario Bros. 1] How long the star power lasts.
$03DE18 1 byte Music [Super Mario Bros. 1] Star power music.
$03E51D 1 byte X Position [Super Mario Bros. 1] Player's X position while sliding down the flagpole, relative to the flagpole position. $00-$7F is the left side, $80-$FF is the right side.
$03EBD9 55 bytes Empty [Other] Empty, unused space
$03FFDE 34 bytes Empty [Other] Empty, unused space
$04825E 34 bytes HDMA [Super Mario Bros. 1] HDMA Gradient enable routine, to be JSLed to. Used during level loading.

Input:
A = Which HDMA gradient to display.
$00 - Regular
$01 - Starry night
$02 - Underwater
$03 - A bright cyan/white gradient.
$048ED6 48 bytes Map16 Tilemap [Super Mario Bros. 1] Small castle/top part of big castle object MAP16 tilemap.
$048F06 62 bytes Map16 Tilemap [Super Mario Bros. 1] Bottom part of big castle object MAP16 tilemap.
$049172 12 bytes Map16 Tilemap [Super Mario Bros. 1] World X-2 go to the surface pipe object map16 tilemap. Consult image 1 for the layout.
$049679 32 bytes Palette [Super Mario Bros. 1] Bonus room Luigi background palette
$04991D 32 bytes Palette [Super Mario Bros. 1] Luigi Palette
$04993D 32 bytes Palette [Super Mario Bros. 1] Fire Mario Palette
$04995D 32 bytes Palette [Super Mario Bros. 1] Fire Luigi Palette
$0499FD 32 bytes Palette [Super Mario Bros. 1] Mario Palette
$04BE89 237 bytes Empty [Other] Empty, unused space.
$04C1D8 39 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 1-4 and 6-4
$04C1FF 25 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 4-4
$04C218 47 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 2-4
$04C247 44 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 3-4
$04C272 21 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 7-4
$04C287 58 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 8-4
$04C2C1 37 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 3-3
$04C2E6 29 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 8-3
$04C303 14 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 4-1
$04C311 39 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 6-2
$04C338 49 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 3-1
$04C369 30 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 1-1
$04C387 29 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 1-3 and 5-3
$04C3A4 21 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 2-3 and 7-3
$04C3B9 43 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 2-1
$04C3E4 44 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 5-1
$04C408 9 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of Sky Bonus Area (Day)
$04C411 37 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 4-3
$04C436 35 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 6-3
$04C459 9 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 6-1
$04C462 1 byte Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 4-2's Warpzone
$04C463 58 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 8-1
$04C49D 43 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 5-2
$04C4C8 46 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 8-2
$04C4F6 28 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 7-1
$04C512 9 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of Sky Bonus Area (Night)
$04C51B 37 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 3-2
$04C540 45 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 1-2
$04C56D 47 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 4-2
$04C59B 45 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of Underground Bonus Area
$04C5C8 17 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of Underwater Bonus Area
$04C5D9 26 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 2-2 and 7-2
$04C603 20 bytes Level Data (Sprite) [Super Mario Bros. 1] Sprite data of 8-4 Underwater
$04C617 187 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 1-4 and 6-4
$04C6D2 296 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 4-4
$04C7FA 222 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 2-4 and 5-4
$04C8D8 252 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 3-4
$04C9D4 301 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 7-4
$04CB01 266 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 8-4
$04CC0B 105 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 3-3
$04CC74 79 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 8-3
$04CCC3 88 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 4-1
$04CD1B 149 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 6-2
$04CDB0 127 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 3-1
$04CE2F 107 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 1-1
$04CE9A 87 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 1-3 and 5-3
$04CEF1 137 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 2-3 and 7-3
$04CF7A 109 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 2-1
$04CFE7 10 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of Pipe Entrance
$04CFF1 68 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 5-1
$04D035 21 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of Sky Bonus Area (Day)
$04D04A 113 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 4-3
$04D0BB 109 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 6-3
$04D128 123 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 6-1
$04D1A3 50 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 4-2's Warpzone
$04D1D5 152 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 8-1
$04D26D 126 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 5-2
$04D2EB 128 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 8-2
$04D36B 95 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 7-1
$04D3CA 43 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of Sky Bonus Area (Night)
$04D3F5 56 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 3-2
$04D42D 165 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 1-2
$04D4D2 164 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 4-2
$04D576 146 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of Underground Bonus Area
$04D608 105 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of Underwater Bonus Area
$04D671 156 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 2-2 and 7-2
$04D70D 105 bytes Level Data (Objects) [Super Mario Bros. 1] 2-byte header and object data of 8-4 Underwater
$04D776 138 bytes Empty [Other] Empty, unused space.
$04D813 1 byte Frequency [Super Mario Bros. 1] The amount frames of delay of playing the "Mario is turning" sound repeatedly
$04D883 32 bytes Palette [Super Mario Bros. 1] Mario palette of "Princess kisses player" sequence
$04D8A3 32 bytes Palette [Super Mario Bros. 1] Luigi palette of "Princess kisses player" sequence
$04D92E 164 bytes Stripe Image (Text) [Super Mario Bros. 1] "Thank you Mario! The kingdom is saved! Now try a more difficult quest..." text. Encoded in stripe image
$04D9D2 178 bytes Stripe Image (Text) [Super Mario Bros. 1] "Thank you Mario for restoring peace to our kingdom. Hurrah to our hero, Mario!" text. Encoded in stripe image
$04DA84 164 bytes Stripe Image (Text) [Super Mario Bros. 1] "Thank you Luigi! The kingdom is saved! Now try a more difficult quest..." text. Encoded in stripe image
$04DB28 178 bytes Stripe Image (Text) [Super Mario Bros. 1] "Thank you Luigi for restoring peace to our kingdom. Hurrah to our hero, Luigi!" text. Encoded in stripe image
$04FD86 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "P" of "PUSH START" (after saving the princess).
$04FD8B 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "U" of "PUSH START" (after saving the princess).
$04FD90 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "S" of "PUSH START" (after saving the princess).
$04FD95 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "H" of "PUSH START" (after saving the princess).
$04FD9A 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character " " of "PUSH START" (after saving the princess).
$04FD9F 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "S" of "PUSH START" (after saving the princess).
$04FDA4 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "T" of "PUSH START" (after saving the princess).
$04FDA9 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "A" of "PUSH START" (after saving the princess).
$04FDAE 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "R" of "PUSH START" (after saving the princess).
$04FDB3 2 bytes VRAM Tilemap (Text) [Super Mario Bros. 1] Properties byte of character, then the character "T" of "PUSH START" (after saving the princess).
$04FDBF 1 byte Sound Effect [Super Mario Bros. 1] "Push start" SFX at princess rescued sequence
$04FDEF 529 bytes Empty [Other] Empty, unused space.
$05D60A 6 bytes OAM Tile Number [Super Mario Bros. 1] Tile number of the lava splash of when podoboo lands in lava, each tile corresponds to a frame.
$05E762 50 bytes DMA [Super Mario Bros. 1] Graphics bank bytes used in DMA. Every 2nd byte are unused.

The graphics associated with this address and the next 4 addresses are as following:

Address - VRAM - Size
$000000 - $0000 - $1000 ; $00 - Unused
$08E000 - $2000 - $1000 ; $01 - Mario bonus background
$06A000 - $2000 - $2000 ; $02 - Hills background & SUPER MARIO BROS. title screen banner
$098000 - $2000 - $1000 ; $03 - Underground background
$09A000 - $2000 - $2000 ; $04 - Castle background & foreground
$089800 - $2C00 - $0800 ; $05 - Tall slim hills background
$09A000 - $2000 - $2000 ; $06 - Castle background & foreground
$06A000 - $2000 - $1000 ; $07 - Hills background
$088000 - $2000 - $1000 ; $08 - Underwater background & foreground
$06A000 - $2000 - $2000 ; $09 - Hills background & SUPER MARIO BROS. title screen banner
$08D000 - $3400 - $2000 ; $0A - Game over screen & Mario bonus room background
$09E000 - $2C00 - $0800 ; $0B - Starry night background
$08A000 - $2800 - $1000 ; $0C - Bowser's Castle background (outside) & princess cage
$089000 - $2C00 - $0800 ; $0D - Mushrooms background
$08B000 - $2C00 - $0800 ; $0E - Waterfall background
$099000 - $2000 - $1000 ; $0F - Underwater ruins background
$08B800 - $2C00 - $1000 ; $10 - Goomba pillars background & snow foreground
$09D000 - $3000 - $1000 ; $11 - Underground foreground
$08C000 - $3000 - $1000 ; $12 - Snow foreground
$09E800 - $2000 - $0800 ; $13 - Bowser's Castle background, part 1
$09F000 - $2800 - $0800 ; $14 - Bowser's Castle background, part 2
$09F800 - $2C00 - $0800 ; $15 - Game Over and Time Up text
$09E000 - $2C00 - $0800 ; $16 - Starry night background
$09C000 - $3000 - $1000 ; $17 - Grass foreground
$08F000 - $2000 - $1000 ; $18 - Luigi bonus background
$05E794 50 bytes DMA [Super Mario Bros. 1] Graphics addresses low and high bytes used in DMA.
$05E7C6 50 bytes DMA [Super Mario Bros. 1] Graphics VRAM addresses used in DMA.
$05E7F8 50 bytes DMA [Super Mario Bros. 1] Graphics DMA size.
$05EE66 4506 bytes Empty [Other] Empty, unused space.
$068000 49152 bytes Graphics [Super Mario Bros. 1] Super Mario Bros. 1 & The Lost Levels graphics.
$07FC00 160 bytes SPC-700 [Other] Block of SPC data.

As with all blocks of SPC data, the data starts with a 2-word header:
$009C - The size of the SPC data block
$3D00 - The destination of the SPC-700 data block within ARAM.

TODO: Figure out what SPC data this is.
$07FCA0 28 bytes SPC-700 [Other] Block of SPC data.

As with all blocks of SPC data, the data starts with a 2-word header:
$0018 - The size of the SPC data block
$3EE8 - The destination of the SPC-700 data block within ARAM.

TODO: Figure out what SPC data this is.
$07FCC0 832 bytes SPC-700 [Other] Part 1 of the entire SMAS SPC-700 engine (ASM)

As with all blocks of SPC data, the data starts with a 2-word header:
$210F - The size of the SPC data block
$0500 - The destination of the SPC-700 data block within ARAM.


$088000 98304 bytes Graphics [Super Mario Bros. 1] Super Mario Bros. 1 & The Lost Levels graphics.
$0B8000 116 bytes SPC-700 [Hall screen] Pointers to sample data (points to ARAM) for the piano in the hall screen and game select music
$0CD000 10240 bytes Graphics [Super Mario Bros. 3] Super Mario Bros. 3 credits graphics (?)
$0CF800 2048 bytes Graphics [Super Mario Bros. 1] Super Mario Bros. 1 & The Lost Levels layer 3 graphics.
$0D977C 163 bytes Routine [Super Mario Bros.: The Lost Levels] Stripe image uploader. $00-$02: Pointer to stripe image.

Format of stripe image:
VVVVVVVV VVVVVVVV DRLLLLLL LLLLLLLL <data bytes>

V = VRAM
D = Stripe image direction. 1 = vertical, 0 = horizontal
R = RLE flag
L = Length of data
$108000 32768 bytes Graphics [Super Mario Bros.: The Lost Levels] The Lost Levels graphics and animated graphics.
$1187EF 1 byte Music [Super Mario Bros. 2] Which music is used in the potion rooms.
$118FB2 1 byte Level Data [Super Mario Bros. 2] After which level the credits are triggered.
$1198BF 193 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$119D4D 3 bytes X Speed [Super Mario Bros. 2] Player X speed when climbing. (First value = pressing no button, second value = pressing right, third value = pressing left)
$11ACF0 11 bytes Pointers [Super Mario Bros. 2] Low byte of pointer to Layer 1 Map16 tilemap in RAM, per screen.
$11ACFB 11 bytes Pointers [Super Mario Bros. 2] Middle byte of pointer to Layer 1 Map16 tilemap in RAM, per screen.
$11AD06 11 bytes Pointers [Super Mario Bros. 2] High byte of pointer to Layer 1 Map16 tilemap in RAM, per screen.
$11AF64 4 bytes Pointers [Super Mario Bros. 2] Low byte of pointer to Layer 1 Map16 tilemap data, page 0. Indexed per $40 tiles.
$11AF68 4 bytes Pointers [Super Mario Bros. 2] High byte of pointer to Layer 1 Map16 tilemap data, page 0. Indexed per $40 tiles.
$11AF6C 2040 bytes Map16 [Super Mario Bros. 2] Layer 1 Map16 tilemap data, page 0.
$11BA39 200 bytes Music [Super Mario Bros. 2] Music table for all rooms.
$11BC9C 32 bytes Palette [Super Mario Bros. 2] Mario's palette - 16 colours.
$11BCBC 32 bytes Palette [Super Mario Bros. 2] Peach's palette - 16 colours.
$11BCDC 32 bytes Palette [Super Mario Bros. 2] Toad's palette - 16 colours.
$11BCFC 32 bytes Palette [Super Mario Bros. 2] Luigi's palette - 16 colours.
$11C3D0 81 bytes Pointers [Super Mario Bros. 2] Pointer to various images used in the game, such as the character select screen, starry BG, etc.
$11CBB4 8 bytes Level Data [Super Mario Bros. 2] Starting room for each world. Also used to calculate how many levels one world must have.
$11CDF1 3 bytes Y Speed [Super Mario Bros. 2] Player Y speed when climbing. (First value = pressing no button, second value = pressing down, third value = pressing up)
$11D152 200 bytes HDMA [Super Mario Bros. 2] Table indexed by room number. Determines which HDMA BG should be used for which room.
$11D2AD 210 bytes Pointers [Super Mario Bros. 2] Low byte of pointer to level data (objects + level header). Indexed by room number.
$11D37F 210 bytes Pointers [Super Mario Bros. 2] High byte of pointer to level data (objects + level header). Indexed by room number.
$11D451 8796 bytes Level Data (Objects) [Super Mario Bros. 2] Object data + level headers.
$11F6AE 13 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$11F6BB 21 bytes Pointers [Super Mario Bros. 2] High byte of pointer to high byte of room pointers of sprite data, indexed by level number.
$11F6D0 21 bytes Pointers [Super Mario Bros. 2] Low byte of pointer to high byte of room pointers of sprite data, indexed by level number.
$11F6E5 21 bytes Pointers [Super Mario Bros. 2] High byte of pointer to low byte of room pointers of sprite data, indexed by level number.
$11F6FA 21 bytes Pointers [Super Mario Bros. 2] Low byte of pointer to low byte of room pointers of sprite data, indexed by level number.
$11F70F 420 bytes Pointers [Super Mario Bros. 2] High and low bytes of pointers to sprite data, indexed by room number of level.
$11F8B3 2349 bytes Level Data (Sprite) [Super Mario Bros. 2] Sprite data.
$1281E0 32 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$128230 1 byte Miscellaneous [Super Mario Bros. 2] Player state to change into when getting hurt. (Default: 08, changing size.) Change to 00 to actually never shrink.
$12823F 18 bytes Pointers [Super Mario Bros. 2] Pointer to various player animations, from $50.
$128343 1 byte Player [Super Mario Bros. 2] While climbing, this button needs to be pressed in order to animate (flipping direction) the player. 00 - neither of the two, 01 - down, 02 - up.
$128386 1 byte Frequency [Super Mario Bros. 2] Amount of frames to wait until direction is flipped and climbing sound is generated, when climbing.
$128390 1 byte Sound Effect [Super Mario Bros. 2] Sound effect when player is climbing.
$1283BA 1 byte Player [Super Mario Bros. 2] On which height of the screen the player should be put at when he enters a jar room. 00 = bottom, 02 = top, 05 = middle.
$1283E4 1 byte Sound Effect [Super Mario Bros. 2] Sound effect that is used when the player goes out of a jar.
$12843D 1 byte X Speed [Super Mario Bros. 2] X-speed of player when entering Hawkmouth.
$128441 1 byte Direction [Super Mario Bros. 2] Player's direction when entering Hawkmouth.
$128758 1 byte Map16 Tile [Super Mario Bros. 2] What map16 block to spawn after grabbing any item (except sprites)
$128887 1 byte Counter [Super Mario Bros. 2] Amount of cherries necessary to get a star.
$128891 1 byte Sound Effect [Super Mario Bros. 2] Which sound effect to generate when cherry is collected. (Bank = $1DE3.)
$1288A0 1 byte Map16 Tile [Super Mario Bros. 2] Which 16x16 tile to spawn for the cherry object when collected
$128907 1 byte Timer [Super Mario Bros. 2] How long it lasts until the sand digging sprite tile has vanished.
$12890B 1 byte Sprites [Super Mario Bros. 2] Sprite state for digging up a sand tile
$12898D 1 byte Map16 [Super Mario Bros. 2] Which 16x16 tile should act like a warp jar. (6F of page 0)
$1289A8 1 byte Sound Effect [Super Mario Bros. 2] Which sound effect to generate when the player is going down a jar.
$1289AD 1 byte Player [Super Mario Bros. 2] X-speed of player when entering jar.
$1289B1 1 byte Player [Super Mario Bros. 2] In which state the player sould go when going down a jar. (Default: 04.)
$129112 1 byte Timer [Super Mario Bros. 2] Amount of time you remain in the dark potion room.
$1292E7 1 byte Timer [Super Mario Bros. 2] Amount of time it takes for one line of text to load (Story).
$1293DD 7 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$129444 1 byte Timer [Super Mario Bros. 2] Amount of frames the 'pulling fairies out of jar' cutscene is going to take.
$129448 1 byte Player [Super Mario Bros. 2] Direction the player is going to face during the 'pulling fairies out of jar' cutscene. 00 = left, 01 = right.
$1294B7 1 byte Music [Super Mario Bros. 2] Which song to play with the credits. (Default: 0E.)
$129A3E 66 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$129B74 1 byte Sound Effect [Super Mario Bros. 2] Falling SFX which plays when you enter 1-1
$129CE7 25 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$129F56 20 bytes Pointers [Super Mario Bros. 2] 16-bit pointer for sprite statuses. ($51,x.)
$12A0EC 142 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to sprite data, init routine.
$12A246 1 byte Music [Super Mario Bros. 2] Which music to play for defeating a boss. (Default: 0B)
$12A38C 1 byte Sprite Number [Super Mario Bros. 2] Which sprite should have different properties when flattened. (Default: POW, sprite 3A.)
$12A390 1 byte OAM Tile Properties [Super Mario Bros. 2] YXPPCCCT byte of flat POW sprite. (Default: 22)
$12A4B3 4 bytes OAM Tilemap [Super Mario Bros. 2] Tilemap of the "BOMB" sprite
$12A4B7 4 bytes OAM Tile X Position [Super Mario Bros. 2] XDisp of the "BOMB" sprite
$12A4BB 4 bytes OAM Tile Y Position [Super Mario Bros. 2] YDisp of the "BOMB" sprite
$12A506 1 byte OAM Tilemap [Super Mario Bros. 2] Part of what indicates the YXPPCCCT properties the "BOMB" tiles use (= palette, graphics page, etc.). This one relies on the frame counter, meaning that this byte controls the animation of the "BOMB" sprite. With #$06 it scrolls through pal 8-B only, with #$0E through 8-F, with #$02 through 8-9. Other combinations are possible, but do know what you are doing.
$12A508 1 byte OAM Tilemap [Super Mario Bros. 2] Other part of what indicates the YXPPCCCT properties the "BOMB" tiles use. This one, by default, adds priority to the sprite tiles.
$12A516 1 byte OAM Tilemap [Super Mario Bros. 2] Size of "BOMB" tiles (default: 02, 16x16. 00 = 8x8. Other values not recommended.) Accounts for all four tiles.
$12A8B7 1 byte Y Speed [Super Mario Bros. 2] Y speed of dissolving sand sprite.
$12A8BE 1 byte OAM Tilemap [Super Mario Bros. 2] Tile number of dissolving sand sprite for the first 16 frames.
$12A8C2 1 byte Timer [Super Mario Bros. 2] How many frames are still left before the 'almost completely dissolved' sand tile.
$12A8D7 1 byte OAM Tile Number [Super Mario Bros. 2] Tile number of dissolving sand sprite for the last 16 frames.
$12AB3D 142 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to sprite data, main routine.
$12AE12 1 byte Y Speed [Super Mario Bros. 2] Y speed of star.
$12AE16 1 byte X Speed [Super Mario Bros. 2] X speed of star, first 128 frames.
$12AE1F 1 byte X Speed [Super Mario Bros. 2] X speed of star, other 128 frames.
$12AE67 1 byte Sprite Number [Super Mario Bros. 2] Sprite spawned by Bob-omb generator.
$12AE9F 1 byte Sound Effect [Super Mario Bros. 2] Sound effect generated when Hawkmouth opens his mouth.
$12AF15 1 byte Player [Super Mario Bros. 2] In which state the player should go when entering Hawkmouth. (Default: 06.)
$12AF19 1 byte Player [Super Mario Bros. 2] Amount of frames to make the player walking when entering Hawkmouth.
$12AF1D 1 byte Y Speed [Super Mario Bros. 2] Y-speed of player when entering Hawkmouth.
$12AF21 1 byte Music [Super Mario Bros. 2] Music to play when entering Hawkmouth. (Default: 80, fading away.)
$12AF29 1 byte Sound Effect [Super Mario Bros. 2] Entering Hawkmouth sound effect.
$12B0CB 1 byte X Speed [Super Mario Bros. 2] X-speed (left) of Heart.
$12B0D3 1 byte X Speed [Super Mario Bros. 2] X-speed (right) of Heart.
$12B0D7 1 byte Y Speed [Super Mario Bros. 2] Y-speed of Heart.
$12B100 1 byte OAM Tile Number [Super Mario Bros. 2] Upper tile of heart.
$12B105 1 byte OAM Tile Number [Super Mario Bros. 2] Lower tile of heart.
$12B111 1 byte OAM Tile Properties [Super Mario Bros. 2] YXPPCCCT data for the heart tiles.
$12B122 1 byte OAM Tile Size [Super Mario Bros. 2] Size of tiles of hearts. #$00 = 8x8, #$02 = 16x16.
$12B244 1 byte Sprite Number [Super Mario Bros. 2] Which sprite should add a life to the player's total and set the '1UP collected flag'. (1UP.)
$12B259 1 byte Sound Effect [Super Mario Bros. 2] Sound effect generated when 1UP is collected.
$12B289 1 byte Music [Super Mario Bros. 2] Music to play when a crystal ball is collected.
$12B28E 1 byte Timer [Super Mario Bros. 2] Amount of time to wait before Hawkmouth opens his mouth fully after crystal ball has been collected.
$12B293 1 byte Timer [Super Mario Bros. 2] Amount of time to wait before music is changed back to the original again after crystal ball has been collected.
$12B2B6 1 byte Music [Super Mario Bros. 2] Music to play when a mushroom is collected.
$12B2C5 1 byte Y Speed [Super Mario Bros. 2] Y speed of 1-Up mushroom when collected.
$12B2CE 1 byte Timer [Super Mario Bros. 2] Amount of time to freeze sprite when stopwatch is collected. (#$FF)
$12B4CD 1 byte Sprite Number [Super Mario Bros. 2] Sprite spawned by Albatoss with Bob-Omb.
$12B58C 1 byte Sprite Number [Super Mario Bros. 2] If this sprite is carried, Phanto comes alive. Use in conjunction with $12:B390/0x9B590
$12B590 1 byte Sprite Number [Super Mario Bros. 2] If this sprite is carried, Phanto comes alive. Value = sprite number + 1. Use in conjunction with $12:B38C/0x9B58C.
$12B885 1 byte Y Speed [Super Mario Bros. 2] Y speed of bullet spawned by Snifits.
$12B889 1 byte Sprite Number [Super Mario Bros. 2] Sprite spawned by Snifits. (Bullet.)
$12B977 1 byte Sprite Number [Super Mario Bros. 2] Which sprite number should behave like a POW sprite when thrown on the ground (default: 3A, POW). The only other sprite that can be affected by this is the mushroom block.
$12B97B 1 byte Timer [Super Mario Bros. 2] How long to shake screen and kill all sprites which are on screen when a POW has been thrown.
$12B980 1 byte Sound Effect [Super Mario Bros. 2] Sound effect for POW being thrown on ground.
$12B985 1 byte Sprites [Super Mario Bros. 2] Sprite state for flattened POW generating two puffs of smoke. (Default: 08)
$12B98C 1 byte Y Speed [Super Mario Bros. 2] Minimum Y speed at which the mushroom block will start bouncing if hitting the ground.
$12B9A9 1 byte Y Speed [Super Mario Bros. 2] Y speed of mushroom block when bouncing off the ground for one time.
$12C460 16 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$12C7E2 1 byte Speed [Super Mario Bros. 2] X and Y speed of Pidgit's carpet, when spawned.
$12C7E8 1 byte Sprite Number [Super Mario Bros. 2] Sprite spawned when Pidgit is picked up. (Carpet.)
$12C80D 1 byte Timer [Super Mario Bros. 2] Amount of time carpet stays active after being spawned.
$12CEE7 1 byte Y Speed [Super Mario Bros. 2] How fast the Cobrat in sand jumps up.
$12CEF0 1 byte Y Speed [Super Mario Bros. 2] Rising speed of Cobrat in sand (while in sand).
$12CEF9 1 byte Y Speed [Super Mario Bros. 2] Sinking speed of Cobrat in sand (while in sand).
$12DF75 27 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$12E2E3 1 byte Sprite Number [Super Mario Bros. 2] Which sprite should be touched to obtain star power. (Star.)
$12E2E7 1 byte Timer [Super Mario Bros. 2] How long until the star timer runs out.
$12E2F1 1 byte Sprites [Super Mario Bros. 2] In which sprite state the star goes after being collected. (00, non-existant.)
$12E399 1 byte Sprite Number [Super Mario Bros. 2] Which sprite should spawn a carpet when picked up. (Pidgit.)
$12E657 9 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$12E665 26 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to the code that uploads objects 30-FF.
$1381F2 14 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$138200 14 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to graphics for tiles 140-17F. Indexed by world number*2.
$13820E 7 bytes Pointers [Super Mario Bros. 2] Bank byte of pointer to graphics for tiles 140-17F. Indexed by world number.
$138215 14 bytes Pointers [Super Mario Bros. 2] 16-bit pointer for tiles 180-1BF. Indexed by world number*2.
$138223 7 bytes Pointers [Super Mario Bros. 2] Bank byte of pointer for tiles 180-1BF. Indexed by world number.
$13822A 14 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to boss graphics. Indexed by world number*2.
$138238 14 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to tiles 00-7F of the FG/BG slots (not the animated ones). Indexed by world number*2.
$138246 7 bytes Pointers [Super Mario Bros. 2] Bank byte of pointer to tiles 00-7F of the FG/BG slots (not the animated ones). Indexed by world number.
$13824D 14 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to tiles C0-FF of the FG/BG slots. Indexed by world number*2.
$13825B 7 bytes Pointers [Super Mario Bros. 2] Bank byte of pointer to tiles C0-FF of the FG/BG slots. Indexed by world number.
$13832A 200 bytes Pointers [Super Mario Bros. 2] High byte of pointer to tiles 140-17F of the FG/BG slots. Indexed by room number.
$1383F2 200 bytes Pointers [Super Mario Bros. 2] High byte of pointer to tiles 180-1BF of the FG/BG slots. Indexed by room number.
$1384BA 200 bytes Pointers [Super Mario Bros. 2] High byte of pointer to tiles 1C0-1FF of the FG/BG slots. Indexed by room number.
$138582 200 bytes Pointers [Super Mario Bros. 2] Bank byte of pointer to tiles 140-17F of the FG/BG slots. Indexed by room number.
$13864A 200 bytes Pointers [Super Mario Bros. 2] Bank byte of pointer to tiles 180-1BF of the FG/BG slots. Indexed by room number.
$138712 200 bytes Pointers [Super Mario Bros. 2] Bank byte of pointer to tiles 1C0-1FF of the FG/BG slots. Indexed by room number.
$1387DA 351 bytes Routine [Super Mario Bros. 2] Subroutine that loads tiles C0-FF of the FG/BG slots.
$13893D 60 bytes Routine [Super Mario Bros. 2] Subroutine that loads tiles 200-27F of the FG/BG slots.
$1389C7 1 byte Pointers [Super Mario Bros. 2] Bank byte of pointer to boss graphics.
$1394B3 77 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$139FE7 25 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$13DD67 153 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$13DEE8 14 bytes Palette [Super Mario Bros. 2] BG colour of the 'World x-x' screen, per world. SNES RGB values.
$13E2EC 1 byte Music [Super Mario Bros. 2] Which music to play when the player has star power.
$13E736 458 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$13F13F 193 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$13F698 104 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$13FA6B 149 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$13FEA1 863 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$14C200 512 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$14CF45 11 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$14E045 27 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$14E8AC 4 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$14EF42 30 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$14F67E 130 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$14F84A 28 bytes Routine [Super Mario Bros. 2] Clears the entire Layer 3 tilemap.
$14FA27 217 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$14FBF0 169 bytes Routine [Super Mario Bros. 2] Clears all OAM subroutine.
$14FD7E 98 bytes HDMA [Super Mario Bros. 2] Scanline counts and RAM pointer table for the red colours.
$14FDE0 98 bytes HDMA [Super Mario Bros. 2] Scanline counts and RAM pointer table for the green colours.
$14FE42 98 bytes HDMA [Super Mario Bros. 2] Scanline counts and RAM pointer table for the blue colours.
$14FEA4 64 bytes HDMA [Super Mario Bros. 2] Red colours for the four HDMA gradients.
$14FEE4 64 bytes HDMA [Super Mario Bros. 2] Green colours for the four HDMA gradients.
$14FF24 64 bytes HDMA [Super Mario Bros. 2] Blue colours for the four HDMA gradients.
$14FF64 668 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$158682 126 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$158A20 224 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$158B00 40 bytes Pointers [Super Mario Bros. 2] Index to another pointer. Holds the value that determines which cloud background (Layer 3) will be used.
$158B28 20 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to the various cloud images.
$158B3C 2095 bytes VRAM Tilemap [Super Mario Bros. 2] Layer 3 cloud images.
$15936B 200 bytes Map16 [Super Mario Bros. 2] Which set of Map16 tiles to use for Layer 3. (00 or 01)
$159437 208 bytes Map16 [Super Mario Bros. 2] Tilemap of Layer 3 Map16 tiles 00-19, cloud tiles.
$159507 64 bytes Map16 [Super Mario Bros. 2] Tilemap of Layer 3 Map16 tiles 1A-22, light beam tiles.
$159571 10 bytes Pointers [Super Mario Bros. 2] 16-bit pointer to five different sets of Layer 3 stars.
$15957B 121 bytes Pointers [Super Mario Bros. 2] Five different sets of Layer 3 stars, each with a varying position and number of Layer 3 stars that are uploaded on screen.
$1595F4 12 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$15A5F3 13 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$15A6C8 6 bytes Pointers [Super Mario Bros. 2] Pointer to the Layer 1 Map16 tile data of page 1, indexed by every $40 tiles (page 1 is not complete).
$15CDD0 1072 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$15D542 3262 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$15E20F 577 bytes VRAM Tilemap [Super Mario Bros. 2] Border of the 'Super Mario Bros. 2' screen.
$15E450 463 bytes VRAM Tilemap [Super Mario Bros. 2] 'Super Mario Bros. 2' and '©1988-1992 Nintendo'.
$15E861 640 bytes VRAM Tilemap (Text) [Super Mario Bros. 2] Story text.
$15EA3F 17 bytes Pointers [Super Mario Bros. 2] High byte of 16-bit pointer that points to the 'Story' text. Indexed by line number.
$15EA50 17 bytes Pointers [Super Mario Bros. 2] Low byte of 16-bit pointer that points to the 'Story' text. Indexed by line number.
$15EE57 681 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$15F100 21 bytes Pointers [Super Mario Bros. 2] 24-bit pointer to the miniature levels' tilemap data. (At the world x-x screen.)
$15F115 400 bytes VRAM Tilemap [Super Mario Bros. 2] Miniature level for worlds 1, 3 and 5.
$15F2A5 400 bytes VRAM Tilemap [Super Mario Bros. 2] Miniature level for worlds 2 and 6.
$15F435 400 bytes VRAM Tilemap [Super Mario Bros. 2] Miniature level for world 4.
$15F5C5 400 bytes VRAM Tilemap [Super Mario Bros. 2] Miniature level for world 7.
$168000 157696 bytes Graphics [Super Mario Bros. 2] Super Mario Bros. 2 graphics.
$16814E 178 bytes Empty [Super Mario Bros. 2] Filled with $FF.
$1B8000 114688 bytes Graphics [Super Mario Bros. 2] Super Mario Bros. 2 graphics.
$1EC000 16384 bytes Graphics [Super Mario Bros. 1] Super Mario Bros. 1 Toad, sack and Princess graphics.
$2080A8 1 byte Music [Super Mario Bros. 3] Music of the title screen.
$208270 1 byte World [Super Mario Bros. 3] In which world the overworld spotlight should be enabled. World 8 by default.
$208276 1 byte Overworld [Super Mario Bros. 3] In which submap the overworld spotlight should be enabled. Submap #3 by default.
$2082E9 1 byte World [Super Mario Bros. 3] World number where to display the "WELCOME TO WARP ZONE" text.
$20832D 13 bytes World [Super Mario Bros. 3] Code which checks if you're in World 5's cloud submap so it can play the cloud overworld music.
$2085C0 1 byte Sound Effect [Super Mario Bros. 3] Enter level sound effect on the overworld.

It is also the *second* sound effect which plays after you get pulled into a level by the hand in world 8's 2nd submap.
$2085C5 1 byte Music [Super Mario Bros. 3] Music to play when entering level. By default it's fadeout ($80).
$20863A 38 bytes Overworld [Super Mario Bros. 3] Code which checks on which tiles "Player Start" should be shown at the start of the level.

It won't show on N-Spades, Mushroom House tiles and Pipe tiles. However, it does show on pipe tiles in world 5's cloud map.
$208C22 1 byte Music [Super Mario Bros. 3] Spade/N-Spade music (0D)
$208D80 1 byte Timer [Super Mario Bros. 3] P-Switch duration.
$2091E1 1 byte Music [Super Mario Bros. 3] Game Over music (0A)
$20CACB 90 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Princess Peach ending text
$20FB1F 27 bytes Routine [Super Mario Bros. 3] 16-bit pointer jump routine. SMB3's equivalent to $0086DF in SMW. Input: 8-bit pointer number in A.
$219813 60 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Spade Line up Text
$21984F 72 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] N-Spade "Flip over the cards" text
$219A1C 18 bytes Objects [Super Mario Bros. 3] N-Spade Cards. 00 = Mushroom, 01 = Fire Flower, 02 = Star, 03 = 1-up, 04 = 10 coins, 05 = 20 coins. Anything beyond that is glitched. Layout goes from top-left to bottom-right.

These cards are eventually shuffled by the routine at $239FE6.
$21BE1C 70 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Mushroom House "Pick a Box" Text
$21BE62 70 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Mushroom House Warp Whistle "One toot" Text. Used in 1-3.
$21BEA8 70 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Blue Mushroom House "Shop of strange and wonderful things" text
$21CA0B 9 bytes Music [Super Mario Bros. 3] Overworld music, from world 1 to world 9.
$21CE46 12 bytes Level Data [Super Mario Bros. 3] List of music to be used with the levels. In this order: Grassland, Cave, Underwater, Castle, Boss Fight, Doomship, Hammer Bros, Mushroom House (overworld bank), Athletic, Doomship "Help" Castle, Coin Heaven, Overworld Warp Pipe (overworld bank)
$21F185 132 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] King Restored Text
$21F209 132 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] King Restored Text (Frog suit version)
$21F28D 132 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] King Restored Text (Tanooki suit version)
$21F311 132 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] King Restored Text (Hammer suit version)
$21F493 75 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Princess letter 1 text
$21F4DE 84 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Princess letter 2 text
$21F532 54 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Princess letter 3 text
$21F568 81 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Princess letter 4 text
$21F5B9 92 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Princess letter 5 text
$21F615 99 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Princess letter 6 text
$21F678 99 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Bowser letter text (2nd part of the message without the first 2 lines)
$21F6E7 158 bytes VRAM Tilemap [Super Mario Bros. 3] VRAM tilemap of Layer 2 Bowser in World 7 beaten's letter. A group of $FF,$FF means "get to the next line" of the tilemap.
$21F785 12 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Greetings letter text used in the Princess letters
$21F791 84 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Enclosed Jewel letter text used in the Princess letters
$21F7E5 12 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Bowser Kidnapped start letter text, used in Bowser's letter in world 7
$21F7F1 68 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Bowser finish letter text ("ha ha ha... king of the koopa"), used by Bowser's letter after world 7 is beaten
$21FAD9 132 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] King Transformed Text
$21FB5D 132 bytes VRAM Tilemap (Text) [Super Mario Bros. 3] Hurry Hurry! Retrieve the magic wand! text
$228BF2 8 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Top row's left corner of statusbar's first portion

For an explanation of the format of the table, please consult $29E8AB.
$228BFA 6 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Top row of statusbar's first portion

For an explanation of the format of the table, please consult $29E8AB.
$228C00 28 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Top row's right corner of statusbar's first portion, top row of 3 card columns

For an explanation of the format of the table, please consult $29E8AB.
$228C1C 68 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Row 2 of statusbar: "WORLD", empty P-meter, coins (initialized to 66 for some reason), 3 card columns.

For an explanation of the format of the table, please consult $29E8AB.
$228C60 68 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Row 3 of statusbar: "x" (from Mx or Lx), score initialized to 0000000, time initialized to 000, 3 card columns.

For an explanation of the format of the table, please consult $29E8AB.
$228CA4 68 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Bottom row's left corner of statusbar's first portion.

For an explanation of the format of the table, please consult $29E8AB.
$228CAC 6 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Bottom row of statusbar's first portion.

For an explanation of the format of the table, please consult $29E8AB.
$228CB2 28 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Bottom row's right corner of statusbar's first portion, bottom row of 3 card columns.

For an explanation of the format of the table, please consult $29E8AB.
$228CCE 6 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Fills the invisible rows beyond the statusbar with blank tiles.

For an explanation of the format of the table, please consult $29E8AB.
$228CD4 6 bytes VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

Fills the invisible rows beyond the statusbar with blank tiles.

For an explanation of the format of the table, please consult $29E8AB.
$228CDA 1 byte VRAM Tilemap [Super Mario Bros. 3] Default template for statusbar.

$FF, which marks the end of the statusbar template table.
$228F07 32 bytes VRAM Tilemap (Text) [Super mario Bros. 3] Upper half of the "COURSE CLEAR!" text, processed by the routine at $29E8AB
$228F27 32 bytes VRAM Tilemap (Text) [Super mario Bros. 3] Lower half of the "COURSE CLEAR!" text, processed by the routine at $29E8AB
$22CDD9 1 byte Sprites [Super Mario Bros. 3] How many times the Chain Chomp must tug on its chain before it breaks free.
$23C407 1 byte Sound Effect [Super Mario Bros. 3] What sound effect to play when you run in max speed
$23D53B 1 byte Music [Super Mario Bros. 3] P-Switch music
$27A547 1 byte Music [Super Mario Bros. 3] Death music (09)
$27D365 1 byte Music [Super Mario Bros. 3] Doomship wand obtained music (0B)
$288000 540 bytes Pointers [Super Mario Bros. 3] Sprite init routine pointers. These are for all the normal sprites, so there are a total of 180 or 0xB4.
$28821C 540 bytes Pointers [Super Mario Bros. 3] Sprite main routine pointers. These are for all the normal sprites, so there are a total of 180 or 0xB4.
$288D52 1 byte Music [Super Mario Bros. 3] What music to play when you get the star
$289AD2 1 byte Music [Super Mario Bros. 3] Player falling from doomship music (0F)
$28CE20 1 byte Music [Super Mario Bros. 3] Course Clear music (0C)
$28CE2C 1 byte Sound Effect [Super Mario Bros. 3] Course Clear card sound effect (05)
$28CE44 1 byte Music [Super Mario Bros. 3] Course Clear 1-up music (07) (when the three cards don't match)
$28CE5D 1 byte Music [Super Mario Bros. 3] Course Clear 3 in a row music (0B)
$28CE62 1 byte Sound Effect [Super Mario Bros. 3] Course Clear 3 in a row sound effect (29)
$28D712 1 byte Music [Super Mario Bros. 3] Boom Boom beaten music (0B)
$28D919 1 byte Music [Super Mario Bros. 3] What music to play when you face Boom-Boom
$29A9E6 1 byte Sound Effect [Super Mario Bros. 3] World 8 hand pulling sound effect (43)
$29C383 1 byte Music [Super Mario Bros. 3] Princess letter music (18)
$29DE97 1 byte Music [Super Mario Bros. 3] Warp Whistle jingle (0B)
$29E8AB 168 bytes Routine [Super Mario Bros. 3] Upload multiple VRAM tilemaps tables (which is one huge "Tilemaps Block") to VRAM routine (JSL).

Input: $36-38 = 24-bit pointer to Tilemaps Block
VRAM tilemap tables have two 2-byte headers, followed by the VRAM tilemap itself

Header format: %AAAA AAAA, %AAAA AAAA, %CFSS SSSS, %SSSS SSSS

A = VRAM Address/2 (BIG Endian) (so VRAM $0800 is $04,$00 in header).
A value of $8000 or higher = end of table. Generally $FF as the first byte is enough.

C = Bit 0 for $2115. Upload VRAM tiles per 1 tile or per 32 tile in VRAM

F = Fixed DMA. When DMA is fixed, size is increased by 1, because each byte becomes a word, and you can't have a half word. This mode is used to "fill" a tilemap with a single tile.

S = DMA Size - 1 (Big Endian). So transferring 4 bytes would be $00,$03
$2B8000 32768 bytes Graphics [Game select screen] 8bpp graphics of the game select screen and its components - part 1
$2C8000 32768 bytes Graphics [Game select screen] 8bpp graphics of the game select screen and its components - part 2. Final $1800 bytes are probably unused. TODO: Probably or not?
$2D8000 65536 bytes Graphics [Super Mario Bros. 3] Super Mario Bros. 3 player and certain background graphics.
$2F8000 20480 bytes Graphics [Super Mario Bros. 2] Super Mario Bros. 2 player graphics.
$2FD000 12288 bytes Graphics [Super Mario Bros. 1] Super Mario Bros. 1 & The Lost Levels princess rescued portrait graphics.
$308000 276480 bytes Graphics [Super Mario Bros. 3] Super Mario Bros. 3 graphics.
$38C000 81920 bytes Graphics [Super Mario Bros. 3] Super Mario Bros. 3 graphics.
$3B8000 3625 bytes SPC-700 [Other] Part 2 of the entire SMAS SPC-700 engine (ASM)
$3B9DCF 1154 bytes SPC-700 [Hall screen] Music data of the Hall screen music and the game select menu music.
$3C8000 2048 bytes VRAM Tilemap [Hall screen] Default BG1 tilemap of the 'hall screen' (without animation and all). Data MVN'd to RAM $7F:0000
$3D8000 98304 bytes Graphics [Super Mario Bros. 3] Super Mario Bros. 3 graphics.
$3DCC00 5120 bytes Graphics [Hall screen] Most of the animated graphics of hall screen.
SRAM Address Length Type Description Details
$700000 1 byte Miscellaneous Used in piracy check.
$700004 2 bytes Miscellaneous SRAM Offset of last save data accessed (added with number $700010).

$0000 = Super Mario Bros. - FILE A
$0009 = Super Mario Bros.: The Lost Levels - FILE A
$0011 = Super Mario Bros. 2 - FILE A
$001A = Super Mario Bros. 3 - FILE A
$0120 = Super Mario Bros. - FILE B
$0129 = Super Mario Bros.: The Lost Levels - FILE B
$0131 = Super Mario Bros. 2 - FILE B
$013A = Super Mario Bros. 3 - FILE B
$0240 = Super Mario Bros. - FILE C
$0249 = Super Mario Bros.: The Lost Levels - FILE C
$0251 = Super Mario Bros. 2 - FILE C
$025A = Super Mario Bros. 3 - FILE C
$0360 = Super Mario Bros. - FILE D
$0369 = Super Mario Bros.: The Lost Levels - FILE D
$0371 = Super Mario Bros. 2 - FILE D
$037A = Super Mario Bros. 3 - FILE D
$700006 1 byte Flag The currently selected button configuration.
00: X/Y = dash, A/B = jump
01: X/Y/B = dash, A = jump
$700007 1 byte Flag Set this to enable debug mode in all games.
$700008 1 byte World Progress Which world you have last loaded, not restricted to any game.
$700009 1 byte Level Progress Which level you have last loaded, not restricted to any game.
$70000E 1 byte Miscellaneous Which save slot you last played, not restricted to any game.
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.
$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