Banner
Views: 319,031,828
Time: 2014-11-01 12:04:40 AM
4 users online: Krack Koo Kaizo, remaGnaFoiraM, PokerFace, reghrhreallyscary - Guests: 16 - Bots: 39Users: 25,778 (1,093 active)
Latest: DoctorNovakaine
Tip: Create a thread for your hack in the Works in Progress once you have enough screenshots/videos to show.
RAM Addresses
The list currently contains 824 addresses which is approximately 100% of the RAM. 7 addresses are waiting to be moderated.
Submit RAM Address - RAM Addresses Waiting To Be Moderated - Graphical RAM Map
Address AscendingLengthTypeDescription
$7E:000016 bytesMisc.Scratch RAM, is and can be used for a big number of purposes. The general purpose is temporarily preserving a value for later use in a routine.
Of note is the following address, used in LM ASM hacks:
$7E:0003 (16-bit) - Block number from LM Map16 editor. Also used in the custom Map16 tile change routine.
$7E:00101 byteFlagIf 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.
$7E:00111 byteFlagUsed to distinguish IRQ #1 from IRQ #2's code. (Inside the Morton/Ludwig/Roy room, where IRQ is used twice, although it can be used in other areas that run IRQ as well.) #$00 = IRQ #1; #$01 = IRQ #2.
$7E:00121 byteGraphicsStripe image loader - value must be divisible by 3.
A list of valid values can be found here.
$7E:00131 byteCounter"True" frame counter. Increments once per frame, except when the game is lagging. Note that $7E:0014 is better suited for most purposes.
$7E:00141 byteCounter"Effective" frame counter. Stops when, for example, RAM addresses such as $7E:009D are not zero (lock sprite flag, usually indicates the player is dying, grabbing a powerup, or something similar). Inside sprite code, this address is often preferred over $7E:0013, especially in graphics routines, as graphics will not be updated when the player dies if this address is used as an index to the tilemap.
$7E:00151 byteI/OController data 1. Format: byetUDLR.
b = A or B; y = X or Y; e = select; t = Start; U = up; D = down; L = left, R = right.
$7E:00161 byteI/OController data 1, first frame only. Format: byetUDLR.
b = B only; y = X or Y; e = select; t = Start; U = up; D = down; L = left, R = right.
$7E:00171 byteI/OController data 2. Format: axlr----.
a = A; x = X; l = L; r = R, - = null/unused.
$7E:00181 byteI/OController data 2, first frame only. Format: axlr----.
a = A; x = X; l = L; r = R, - = null/unused.
$7E:00191 bytePlayerPlayer powerup/status. #$00 = small; #$01 = big; #$02 = cape; #$03 = fire.
$7E:001A2 bytesHardware mirrorLayer 1 X position, current frame. Mirror of SNES register $210D.
$7E:001C2 bytesHardware mirrorLayer 1 Y position, current frame. Mirror of SNES register $210E.
$7E:001E2 bytesHardware mirrorLayer 2 X position, current frame. Mirror of SNES register $210F.
$7E:00202 bytesHardware mirrorLayer 2 Y position, current frame. Mirror of SNES register $2110.
$7E:00222 bytesHardware mirrorLayer 3 X position. Mirror of SNES register $2111.
$7E:00242 bytesHardware mirrorLayer 3 Y position. Mirror of SNES register $2112.
$7E:00262 bytesMisc.Depending on Layer 3 tides being activated or not, it's either:

Not activated:
Layer 2 X position minus Layer 1 X position.
Activated:
Layer 3 X position minus Layer 1 X position.

Used for various things, among which interaction with multiple layers is included.
$7E:00282 bytesMisc.Depending on Layer 3 tides being activated or not, it's either:

Not activated:
Layer 2 Y position minus Layer 1 Y position.
Activated:
Layer 3 Y position minus Layer 1 Y position.

Used for various things, among which interaction with multiple layers is included.
$7E:002A2 bytesHardware mirrorMode 7 Center X position. Mirror of SNES register $211F, + #$0080.
$7E:002C2 bytesHardware mirrorMode 7 Center Y position. Mirror of SNES register $2120, + #$0080.
$7E:002E2 bytesHardware mirrorMode 7 matrix parameter A. Mirror of SNES register $211B.
$7E:00302 bytesHardware mirrorMode 7 matrix parameter B. Mirror of SNES register $211C.
$7E:00322 bytesHardware mirrorMode 7 matrix parameter C. Mirror of SNES register $211D.
$7E:00342 bytesHardware mirrorMode 7 matrix parameter D. Mirror of SNES register $211E.
$7E:00362 bytesMisc.Mode 7 rotation. Its values are calculated and stored into the respective Mode 7 parameter mirrors at $7E:002E through $7E:0035.
Values #$0000 through #$01FF are all different values, after that it's the same pattern - that is, if you add this 16-bit address with #$0200, there is a 360 degree rotation.
Furthermore, this address is used in the brown chained platform code as an index to the sine and cosine tables at $07:F7DB.
$7E:00382 bytesMisc.Mode 7 scaling; that is, making Layer 1 shrink or grow. Its values are calculated and stored into the respective Mode 7 parameter mirrors at $7E:002E through $7E:0035.
The first byte - $7E:0038 - is used for horizontal scaling, whereas the second byte - $7E:0039 - is used for vertical scaling.
Default value is #$20. The closer to #$00, the more the layer grows, the further from #$00, the more the layer shrinks. Value #$10 makes the layer twice as large as value #$20, value #$40 makes the layer twice as small as value #$20, etc.
$7E:003A2 bytesHardware mirrorMode 7 Layer 1 X position. Mirror of SNES register $210D.
$7E:003C2 bytesHardware mirrorMode 7 Layer 1 Y position. Mirror of SNES register $210E.
$7E:003E1 byteHardware mirrorBackground mode select applied with IRQ below status bar (so the area above IRQ is not affected by this). Format: 4321pmmm.
4321 = Layer 1/2/3/4 uses 8x8 tiles when clear, 16x16 tiles when set; p = Layer 3 absolute priority (only in background mode 1); mmm = background mode # (0-7).
Mirror of SNES register $2105.
$7E:003F1 byteHardware mirrorOAM Address, low byte. Also known as the mirror of SNES register $2102. High byte is at ROM $00:846B/0x66B. Is sometimes used to alter priority of various sprite tiles, such as with the sprite backgrounds in the boss rooms.
$7E:00401 byteHardware mirrorCGADSUB settings. Format: shbo4321.
s = 0 for adding color layer, 1 for subtracting color layer; h = half-color enable; b = backdrop enable; o = object (aka sprite) enable; 4321 = enable Layer 4, 3, 2, 1 (Layer 3 is only affected below the status bar). Mirror of SNES register $2131.
$7E:00411 byteHardware mirrorLayer 1/2 window mask settings. Format: aaaabbbb.
aaaa = Layer 2 window settings; bbbb = Layer 1 window settings. Mirror of SNES register $2123.
$7E:00421 byteHardware mirrorLayer 3/4 window mask settings. Format: aaaabbbb.
aaaa = Layer 4 window settings; bbbb = Layer 3 window settings. Mirror of SNES register $2124.
$7E:00431 byteHardware mirrorObject and color window settings. Format: aaaabbbb.
aaaa = color window settings; bbbb = object window settings. Mirror of SNES register $2125.
$7E:00441 byteHardware mirrorInitial settings for color addition. Format: aabb00cd.
aa = main color window on/off; bb = sub color window on/off; c = fixed color add/subtract; d = direct color mode for 8bpp backgrounds. Mirror of SNES register $2130.
$7E:00452 bytesCameraColumn/row of Map16 tiles to use for VRAM upload when layer 1 is scrolling left/up. Its value is equal to $7E:001A (or $7E:001C if vertical) divided by #$10, minus #$08.
$7E:00472 bytesCameraColumn/row of Map16 tiles to use for VRAM upload when layer 1 is scrolling right/down. Its value is equal to $7E:001A (or $7E:001C if vertical) divided by #$10, plus #$17.
$7E:00492 bytesCameraColumn/row of Map16 tiles to use for VRAM upload when interactive layer 2 is scrolling left/up. Its value is equal to $7E:001E (or $7E:0020 if vertical) divided by #$10 (16), minus #$08.
$7E:004B2 bytesCameraColumn/row of Map16 tiles to use for VRAM upload when interactive layer 2 is scrolling right/down. Its value is equal to $7E:001E (or $7E:0020 if vertical) divided by #$10, plus #$17.
$7E:004D2 bytesCameraLast X/Y value of layer 1 where VRAM upload of Map16 tiles was performed when scrolling left/up.
The low 4 bits are forced to zero (AND #$FFF0) in order to get scroll values on a 16 pixel boundary.
It is used to determine if a VRAM update is necessary during scrolling.
$7E:004F2 bytesCameraLast X/Y value of layer 1 where VRAM upload of Map16 tiles was performed when scrolling right/down.
The low 4 bits are forced to zero (AND #$FFF0) in order to get scroll values on a 16 pixel boundary.
It is used to determine if a VRAM update is necessary during scrolling.
$7E:00512 bytesCameraLast X/Y value of interactive layer 2 where VRAM upload of Map16 tiles was performed when scrolling left/up.
The low 4 bits are forced to zero (AND #$FFF0) in order to get scroll values on a 16 pixel boundary.
It is used to determine if a VRAM update is necessary during scrolling.
$7E:00532 bytesCameraLast X/Y value of interactive layer 2 where VRAM upload of Map16 tiles was performed when scrolling right/down.
The low 4 bits are forced to zero (AND #$FFF0) in order to get scroll values on a 16 pixel boundary.
It is used to determine if a VRAM update is necessary during scrolling.
$7E:00551 byteCameraDirection of scrolling for Layer 1.
#$00 = left (or up); #$02 = right (or down).
Used to index the various camera tables at $7E:0045 through $7E:0048 and $7E:004D through $7E:0050.
$7E:00561 byteCameraDirection of scrolling for Layer 2.
#$00 = left (or up); #$02 = right (or down).
Used to index the various camera tables at $7E:0049 through $7E:004C and $7E:0051 through $7E:0054.
$7E:00571 byteBlocksUsed in the level loading code. It's the position within the subscreen.
Format: yyyyxxxx, where yyyy is the Y position (units of 16 pixels) and xxxx is the X position.
$7E:00581 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:00591 byteBlocksUsed in the level loading routine as an indicator for the size of the object, or extended object type depending on what object is being loaded. Could be used as scratch RAM (except in ObjecTool and similar codes).
$7E:005A1 byteBlocksUsed in the level loading routine as the object number. Could be used as scratch RAM (except in ObjecTool and similar codes).
$7E:005B1 byteMisc.Screen mode: CD----Vv.
C = Collision with layer 2.
D = Disable collision with layer 1.
V = Vertical layer 2.
v = Vertical layer 1.
- = unused.

This address is set by a table at $05:8417, which is indexed by the level mode setting.
$7E:005C1 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:005D1 byteMisc.Number of screens in level.
$7E:005E1 byteCameraThe last screen number (minus 1) before the camera stops moving horizontally. (Only applies in horizontal levels.)
$7E:005F1 byteCameraThe last screen number (minus 1) before the camera stops moving vertically. (Only applies in vertical levels.)
$7E:00604 bytesEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:00641 byteMisc.Properties (YXPPCCCT) byte for most sprites inside levels - including the player. Exceptions to this include sprites that mess with sprite priority in a different way, such as Piranha Plants, items coming out of a box (and inside the item box) and Net Koopas behind the nets.
$7E:00653 bytesPointer24-bit pointer to layer 1 data - both level and overworld.
$7E:00683 bytesPointer24-bit pointer to layer 2 data.
$7E:006B3 bytesPointer24-bit pointer to low byte of Map16 block data. Used during level load.
$7E:006E3 bytesPointer24-bit pointer to high byte of Map16 block data. Used during level load.
$7E:00711 bytePlayerPlayer animation trigger. A list of possible values can be found here.
$7E:00721 bytePlayerPlayer is in the air flag. This is set to a certain value depending on how the player got in the air in the first place, and in what state he is currently (rising or sinking).
This address is not affected by phases such as climbing. It is, however, also used in swimming animation.

Notable values:
#$0B = Jumping/swimming upwards.
#$0C = Shooting out of a slanted pipe, running at maximum speed.
#$24 = Descending/sinking.

The address in general is used in many instances.
For example, the game checks if this address is #$0C. If not, the player cannot ascend properly with the cape. Furthermore, the Layer 3 smash won't hurt the player if he's not on the ground (any non-zero value) and this address prevents the player from locking in place when still airborne during the Morton/Roy/Ludwig battle.
Also, when airborne, the value in this address appears to be stored to $7E:13E0, which also explains the otherwise odd values used for the different airborne phases.
$7E:00731 byteFlagPlayer is ducking flag. #$00 = No; #$04 = Yes. However, any value that is not zero also counts as 'Yes', SMW just stores that specific value to it.
$7E:00741 byteFlagPlayer is climbing flag. #$00 = No; #$1F = Yes. However, any value that is not zero will also mean the player is climbing - SMW always stores #$1F to it.
$7E:00751 byteFlagPlayer is in water flag. #$00 = No; #$01 = Yes.
$7E:00761 bytePlayerPlayer direction. #$00 = Left; #$01 = Right.
$7E:00771 bytePlayerPlayer blocked status - Used to check if player is blocked in a certain direction. Format: SxxMUDLR
The M bit means that the player is in the middle of a block.
The S bit indicates that the player is touching the side of the screens while horizontal screen scrolling is disabled.
UDLR = up, down, left, right (contact with walls).
$7E:00781 bytePlayerUsed to hide the player partially or fully. Format: dlucapLU.
d = used in conjunction with all other set bits in order to disable processes such as the star timer decrementing.
l = hide lower extra player tile when in flight (hovering with the cape).
u = hide upper extra player tile when in flight (hovering with the cape).
c = hide regular cape tile.
a = hide attributive 8x8 tile.
p = hide extra player tile that is shown during the inflated P-balloon pose (does not apply if the player is small).
L = hide lower half of the body.
U = hide upper half of the body.
$7E:00791 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:007A1 bytePlayerAccumulating fraction bits for player X speed (see code around $00:D792).
$7E:007B1 bytePlayerPlayer X speed. #$7F is the fastest rightwards speed, while #$80 is the highest leftwards. +/-#$14 is fully walking, +/-#$2F is fully running. #$01-#$7F is right, #$80-#$FF is left, #$00 is standing still.
$7E:007C1 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:007D1 bytePlayerPlayer Y speed. #$00-#$7F = falling, #$80-#$FF = rising. #$80 is the highest upwards speed, while #$7F is the highest downwards speed. #$46 is the maximum fall speed, #$B3 is the normal jump speed, and #$A4 is the jump speed when fully running.
$7E:007E2 bytesPlayerPlayer X position (16-bit), within the borders of the screen.
$7E:00802 bytesPlayerPlayer Y position (16-bit), within the borders of the screen.
$7E:00823 bytesPointerPoints to how steep the various slopes are and which parts of the slopes they represent. Points to $00:E5C8 in tilesets 0 and 7, and $00:E55E in others.
The table this one points to has one byte per block, from tile 16A to tile 1D7.
The value in these tables is then multiplied by 16, the lowest nibble of the sprite/player X position is added, and this is then used as an index to $00:E632 to tell how many pixels the sprite/player should move down from the nearest 16x16 tile.
$7E:00851 byteFlagWater level flag. #$00 = No; #$01 = Yes.
$7E:00861 byteFlagSlippery level flag. #$00 = No; #$01 through #$7F = Half-slippery; #$80 through #$FF = Yes. Possible values in the clean ROM are #$00 and #$80.
$7E:00871 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:00881 bytePlayerHow long player goes into a pipe until he warps to another level.
$7E:00891 bytePlayerAction to take when the player enters or exits from a pipe.

#$00 = Enter a right-facing horizontal pipe.
#$01 = Enter a left-facing horizontal pipe.
#$02 = Enter a down-facing vertical pipe.
#$03 = Enter an up-facing vertical pipe.
#$04 = Exit from a left-facing horizontal pipe.
#$05 = Exit from a right-facing horizontal pipe.
#$06 = Exit from an up-facing vertical pipe.
#$07 = Exit from a down-facing vertical pipe.
$7E:008A3 bytesMisc.Used for quite a number of things.

Altogether, it's a 24-bit pointer to the location of the compressed graphics files inside the ROM.

Furthermore, these addresses all appear to be used as scratch RAM. For example, solely $7E:008A is used as number of options to select in a blinking cursor menu.
$7E:008D3 bytesMisc.This forms a 24-bit pointer to part of the decompressed graphics; starts at $7E:ACFE/F and keeps decrementing.
The three seperate RAM addresses have multiple purposes, however.
$7E:00901 bytePlayerPlayer Y position within a block. Calculated with $7E:0096 & #$0F. Indicates whether the player is touching the top or the bottom of the block.
$7E:00911 bytePlayerThe direction to move the player out of a block.
#$01-#$07 are up, #$08-#$0F are down. Directly storing to it is ineffective as $7E:0090 will be used to overwrite it at $00:EE19.
$7E:00921 bytePlayerPlayer X position within a block. Calculated with $7E:0094 + #$08 & #$0F.
$7E:00931 bytePlayerThe side of a block the player is on. It's set to #$00 for the right side and #$01 for the left side. This address is relative to the block the player is currently inside.
$7E:00942 bytesPlayerPlayer X position (16-bit) within the level, next frame (calculates player position one frame ahead, as opposed to $7E:00D1).
It's also used as a player X position on-screen on the overworld border.
$7E:00962 bytesPlayerPlayer Y position (16-bit) within the level, next frame (calculates player position one frame ahead, as opposed to $7E:00D3).
It's also used as a player Y position on-screen on the overworld border.
$7E:00981 byteMisc.Y position of block the player is touching, low byte. Also used in the creation of various sprite types/other blocks.
$7E:00991 byteMisc.Y position of block the player is touching, high byte. Also used in the creation of various sprite types/other blocks.
$7E:009A1 byteMisc.X position of block the player is touching, low byte. Also used in the creation of various sprite types/other blocks.
$7E:009B1 byteMisc.X position of block the player is touching, high byte. Also used in the creation of various sprite types/other blocks.
$7E:009C1 byteBlocksMap16 tile to generate (used with $00:BEB0).
A list of valid values can be found here.
$7E:009D1 byteFlagLock animation and sprites flag. Most codes will still run if this is set, but almost nothing will move or animate.
$7E:009E12 bytesSpritesSprite number, or Acts Like setting for custom sprites.
$7E:00AA12 bytesSpritesSprite Y speed table.
$7E:00B612 bytesSpritesSprite X speed table.
$7E:00C212 bytesSpritesMiscellaneous sprite table. In SMW, it's commonly used as a pointer to different parts of a sprite.
$7E:00CE3 bytesPointer24-bit pointer to level's sprite data.
$7E:00D12 bytesPlayerPlayer X position (16-bit) within the level, current frame (as opposed to $7E:0094).
$7E:00D32 bytesPlayerPlayer Y position (16-bit) within the level, current frame (as opposed to $7E:0096).
$7E:00D53 bytesPointerPointer to X and Y positions of Wiggler segments. Table at $7F9A7B.
$7E:00D812 bytesSpritesSprite Y position, low byte.
$7E:00E412 bytesSpritesSprite X position, low byte.
$7E:00F016 bytesEmptyUsed by Lunar Magic for various purposes.
$7E:00FE is the current level number plus 1 (so Yoshi's Island 1 would store #$0106 here). It's used for the custom palette loading code. #$0000 means that the custom palette won't be loaded (this is probably used for castle intros and/or credits).
The rest is unknown.

Originally, this address is empty, and it's cleared at reset, titlescreen and overworld load.
$7E:01001 byteMisc.Game Mode. A list of valid values can be found here.
$7E:01014 bytesMisc.Currently loaded sprite GFX files - stored in reverse order.
$7E:01054 bytesMisc.Currently loaded layer GFX files - stored in reverse order.
$7E:01091 byteMisc.When set to a non-zero value, the overworld loading routine is overridden by loading a level value stored here, minus #$24 if it's above #$24. For example, the intro level (level C5) is loaded this way by storing #$E9 to this address.
Depending on whether the player is on the main overworld or a submap, the level in question is either in the 0xx or 1xx area.
$7E:010A1 byteMisc.Current save file number.
$7E:010B245 bytesMisc.Stack. The first two bytes is the current level number in most hacks.
$7E:0200544 bytesI/OOAM table - handles all sprite tiles that are on screen. Order is xxxxxxxx yyyyyyyy tttttttt yxppccct.
$7E:0310-$7E:0313 is for the player's upper half, $7E:0314-$7E:0317 for the player's lower half, and $7E:0318-$7E:031B is for the player's hand. Various tiles are documented here.
Note that $7E:0400-$7E:041F handles high bit of X position and tile size. It is not usable, since it is overwritten each frame and pretty painful to work with. Use $7E:0420-$7E:049F instead.
$7E:0420128 bytesSpritesA table that determines the size of a sprite tile - 8x8 (#$00) or 16x16 (#$02). Each byte corresponds to four OAM bytes. Stores to $7E:0400-$7E:041F (where each two bits correspond to four OAM bytes.)
The lowest bit (#$01) is also used for the high bit of the X position.
$7E:04A0448 bytesMisc.HDMA table for windowing effects, such as with the keyhole, level ending and titlescreen.
$7E:066032 bytesMisc.Gets overwritten by the HDMA table for the level ending circle. If the player gets above or below the borders of the screen, it can even run into $7E:0680 and beyond.
Otherwise cleared on reset and titlescreen load, but usage as empty RAM is definitely not recommended.
$7E:06801 bytePalettesIndex to the palette updating tables, that are uploaded every frame.
#$00 = Use table at $7E:0682.
#$03 = Use table at $7E:0905.
#$06 = Use table at $7E:0703.
$7E:06811 bytePalettesIndex to the table at $7E:0682 during the time when data is stored to this table in the lightning's, Magikoopa's and Big Boo Boss' code.
$7E:068219 bytesPalettesUses for uploading palettes dynamically. SMW uses this in the lightning/Magikoopa/Big Boo Boss palette effects. $7E:0682 holds the amount of bytes to transfer, $7E:0683 holds the color number (stored to SNES register $2121), the bytes afterwards hold the actual color values transferred to the CGRAM. Further, this table may be indexed by $7E:0681 to add more color destinations; it's terminated by a #$00. The format is the same as before, just at the new location.
This table doesn't actually have to end at $7E:0694, but SMW never goes beyond this. As such, the area after this address is listed as "empty".
$7E:0695108 bytesEmpty100 bytes used in LM 1.70+ for VRAM modification.

In the clean ROM, it's empty (cleared on reset and titlescreen load).
$7E:07012 bytesPalettesBackground color. Used during gameplay in conjunction with $2132.
$7E:0703512 bytesPalettesThe entire palette. It is only uploaded to CGRAM during the level loading routine. Also used during overworld load, but not all of it.
$7E:09032 bytesPalettesCopy of background color $7E:0701/2.
$7E:0905496 bytesPalettesCopy of palettes 0-F from $0703-$08F2. Only the first half of palette F is included. It is used in overworld path events fading in ($04:EAA0), and level ending fade in/out ($00:AF9D).
$7E:0AF51 byteEmptyCleared on reset and titlescreen load. Also cleared after a boss had been beaten - this can be disabled by changing [9C 5C 0A] at $00:B08D/0x328D to [80 01 EA].
$7E:0AF6256 bytesMisc.Used for three different things:
1. Decompressed overworld graphics, animated tiles. For that it also cooperates with $7E:0BF6-$7E:0C55.
2. Iggy's/Larry's platform interaction. (16x16 tiles in a 16x16 square.)
3. Various tables for the Yoshi eggs at the credits, such as how much time must be waited until a new egg breaks, Y speed tables. TODO: Make Wiki page on this third note.
$7E:0BF6384 bytesMisc.Decompressed GFX for tiles #$4A-#$4F, #$5A-#$5F of SP1.
$7E:0D762 bytesGraphicsUsed during the GFX33 DMA routine. It holds the first of three possible source addresses for the animated graphics.
$7E:0D782 bytesGraphicsUsed during the GFX33 DMA routine. It holds the second of three possible source addresses for the animated graphics.
$7E:0D7A2 bytesGraphicsUsed during the GFX33 DMA routine. It holds the third of three possible source addresses for the animated graphics.
$7E:0D7C2 bytesGraphicsUsed during the GFX33 DMA routine. It holds the first of three possible VRAM addresses for the animated graphics.
$7E:0D7E2 bytesGraphicsUsed during the GFX33 DMA routine. It holds the second of three possible VRAM addresses for the animated graphics.
$7E:0D802 bytesGraphicsUsed during the GFX33 DMA routine. It holds the third of three possible VRAM addresses for the animated graphics.
$7E:0D822 bytesPointer16-bit pointer to the player palette. #$B2C8 = regular Mario; #$B2DC = regular Luigi; #$B2F0 = fire Mario; #$B304 = fire Luigi. Always uses #$00 for bank byte (the first bank).
$7E:0D841 byteMisc.Used in Player Graphics DMA routine. This holds the amount of tiles to load. Is #$0A in levels (because of Yoshi) and #$06 on the overworld.
If it's set to zero, the player palette isn't reloaded. The presents screen makes use of that.
$7E:0D8520 bytesSprites16-bit pointers in bank $7E for uploading the player's, Yoshi's and Podoboo's on-screen tiles.
They're divided in two sets of 10 bytes, each two bytes being used for two 8x8 tiles.
The first 10 bytes are for the top half of each 16x16 tile (player's head, player's bottom, cape, Yoshi's head/Podoboo, Yoshi's bottom). The latter 10 bytes are for the bottom half of each 16x16 tile (same order).
$7E:0D992 bytesGraphicsHolds the lower two bytes of the 24-bit RAM address (bank byte is $7E) of tile 7F's graphics; used during the player graphics DMA routine.
$7E:0D9B1 byteMisc.Activates different level modes, depending on the following values:
#$00 = Regular level.
#$01 = Mario Start, Time Up, etc. + Title Screen + Castle destruction scene.
#$02 = Overworld.
#$80 = Iggy's and Larry's battle mode.
#$C0 = Reznor's, Morton's and Roy's battle mode.
#$C1 = Bowser's battle mode.
$7E:0D9C1 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:0D9D1 byteHardware mirrorMain Screen and Window logic mask setting of current level mode (000abcde - a = Object layer; b = Layer 4; c = Layer 3; d = Layer 2; e = Layer 1). Appears as TM in Lunar Magic. Mirror of SNES registers $212C and $212E; transfer only occurs on level load.
$7E:0D9E1 byteHardware mirrorSub Screen and Window logic mask setting of current level mode (000abcde - a = Object layer; b = Layer 4; c = Layer 3; d = Layer 2; e = Layer 1). Appears as TD in Lunar Magic. Mirror of SNES registers $212D and $212F; transfer only occurs on level load.
$7E:0D9F1 byteHardware mirrorHDMA Channel Enable: abcdefgh a = Channel 7 .. h = Channel 0: 1 = Enable 0 = Disable. Mirror of SNES register $420C.
$7E:0DA01 bytePlayerCurrent Player (0 - Player 1, 1 - Player 2). Used by controller Routine.
Note that the highest bit (#$80) is the "controller 2 plugged in" flag, so you probably want to use $7E:0DB3 instead.
$7E:0DA11 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:0DA21 byteI/OCopy of controller data 1 ($7E:0015). Format: byetUDLR.
b = B, y = Y, e = Select, t = Start, UDLR = Up/Down/Left/Right.
Used by player 1 (Mario).
$7E:0DA31 byteI/OCopy of controller data 1 ($7E:0015). Format: byetUDLR.
b = B, y = Y, e = Select, t = Start, UDLR = Up/Down/Left/Right.
Used by player 2 (Luigi).
$7E:0DA41 byteI/OCopy of controller data 2 ($7E:0017). Format: axlr----.
a = A; x = X; l = L; r = R, 0 = null/unused.
Note that the upper two bits are also used by controller data 1 at $7E:0015, so that A/B and X/Y are combined.
Used by player 1 (Mario).
$7E:0DA51 byteI/OCopy of controller data 2 ($7E:0017). Format: axlr----.
a = A; x = X; l = L; r = R, 0 = null/unused.
Note that the upper two bits are also used by controller data 1 at $7E:0015, so that A/B and X/Y are combined.
Used by player 2 (Luigi).
$7E:0DA61 byteI/OCopy of controller data 1, one frame ($7E:0016). Format: byetUDLR.
b = B, y = Y, e = Select, t = Start, UDLR = Up/Down/Left/Right.
Used by player 1 (Mario).
$7E:0DA71 byteI/OCopy of controller data 1, one frame ($7E:0016). Format: byetUDLR.
b = B, y = Y, e = Select, t = Start, UDLR = Up/Down/Left/Right.
Used by player 2 (Luigi).
$7E:0DA81 byteI/OCopy of controller data 2, one frame ($7E:0018). Format: axlr----.
a = A; x = X; l = L; r = R, 0 = null/unused.
Note that the sixth bit is also used by controller data 1 at $7E:0016, so that X/Y are combined.
Used by player 1 (Mario).
$7E:0DA91 byteI/OCopy of controller data 2, one frame ($7E:0018). Format: axlr----.
a = A; x = X; l = L; r = R, 0 = null/unused.
Note that the sixth bit is also used by controller data 1 at $7E:0016, so that X/Y are combined.
Used by player 2 (Luigi).
$7E:0DAA1 byteI/OPlayer 1 controller disable flags ($4219), one frame. If a bit is set here, that bit will be disabled in $7E:0016.
Format: byetUDLR.
b = B, y = Y, e = Select, t = Start, UDLR = Up/Down/Left/Right.
$7E:0DAB1 byteI/OPlayer 2 controller disable flags ($421B), one frame. If a bit is set here, that bit will be disabled in $7E:0016.
Format: byetUDLR.
b = B, y = Y, e = Select, t = Start, UDLR = Up/Down/Left/Right.
$7E:0DAC1 byteI/OPlayer 1 controller disable flags ($4218), one frame. If a bit is set here, that bit will be disabled in $7E:0018.
Format: axlr----.
a = A, x = X, l = L, r = R, 0 = null/unused.
$7E:0DAD1 byteI/OPlayer 2 controller disable flags ($421A), one frame. If a bit is set here, that bit will be disabled in $7E:0018.
Format: axlr----.
a = A, x = X, l = L, r = R, 0 = null/unused.
$7E:0DAE1 byteHardware mirrorHandles brightness and force blank. Format: f---bbbb. f = force blank flag, --- = unused bits, bbbb = brightness setting. Mirror of SNES register $2100.
$7E:0DAF1 byteMisc.Mosaic direction. #$00 = shrinking mosaic; #$01 = growing mosaic.
$7E:0DB01 byteHardware mirrorCurrent mosaic pixel size on level load. Mirror of SNES register $2106, though bits 0 and 1 are always set ($2106 = $7E:0DB0 | #$03).
$7E:0DB11 byteTimerIs used to keep a mode active. If the respective value is positive, the game mode doesn't change. This is primarily used in the fading routines (example: from overworld to level and vice versa).
$7E:0DB21 byteFlag2-Player game flag. #$00 = No; #$01 = Yes.
$7E:0DB31 bytePlayerWhich character is in play. #$00 = Mario; #$01 = Luigi. If you prefer Luigi to be #$04, use $7E:0DD6.
$7E:0DB41 bytePlayerMario's lives. Note that this is only used in two player games, you'll want $7E:0DBE in 99% of the cases.
$7E:0DB51 bytePlayerLuigi's lives. Note that this is only used in two player games, you'll want $7E:0DBE in 99% of the cases.
$7E:0DB61 bytePlayerMario's coins. Note that this is only used in two player games, you'll want $7E:0DBF in 99% of the cases.
$7E:0DB71 bytePlayerLuigi's coins. Note that this is only used in two player games, you'll want $7E:0DBF in 99% of the cases.
$7E:0DB81 bytePlayerMario's powerup/status. Note that this is only used in two player games, you'll want $7E:0019 in 99% of the cases.
$7E:0DB91 bytePlayerLuigi's powerup/status. Note that this is only used in two player games, you'll want $7E:0019 in 99% of the cases.
$7E:0DBA1 byteYoshiMario's Yoshi color.
$7E:0DBB1 byteYoshiLuigi's Yoshi color.
$7E:0DBC1 bytePlayerItem in Mario's item box. #$00 = Nothing; #$01 = Mushroom; #$02 = Cape; #$03 = Fire Flower. Note that you'll want $7E:0DC2 in most cases.
$7E:0DBD1 bytePlayerItem in Luigi's item box. #$00 = Nothing; #$01 = Mushroom; #$02 = Cape; #$03 = Fire Flower. Note that you'll want $7E:0DC2 in most cases.
$7E:0DBE1 bytePlayerCurrent player lives, minus one (#$04 here means that the player has 5 lives).
$7E:0DBF1 bytePlayerCurrent player coin count.
$7E:0DC01 byteCounterGreen star block coin counter. Starts at 30 at the beginning of a level, and decrements for each coin that is collected. Adjusts content of green star block when it hits zero. (A 1-Up mushroom comes out, instead of a spinning coin.)
$7E:0DC11 byteYoshiPlayer can carry Yoshi over levels flag. #$00 = can't carry over levels; #$01 = can carry over levels.
$7E:0DC21 bytePlayerItem in current player's item box. #$00 = None; #$01 = Mushroom; #$02 = Fire Flower; #$03 = Star; #$04 = Feather.
$7E:0DC34 bytesEmptyEmpty. Cleared on reset and titlescreen load. $7E:0DC3 is also cleared when selecting how many players to use, but this can be disabled with no known side effects by setting $00:9E48/0x2048 to [80 01 EA].
$7E:0DC72 bytesPlayerOverworld X position where Mario should be going to. Is used by overworld path tiles to indicate Mario's direction. Updated as soon as Mario starts moving - zero otherwise.
$7E:0DC92 bytesPlayerOverworld Y position where Mario should be going to. Is used by overworld path tiles to indicate Mario's direction. Updated as soon as Mario starts moving - zero otherwise.
$7E:0DCB2 bytesPlayerOverworld X position where Luigi should be going to. Is used by overworld path tiles to indicate Luigi's direction. Updated as soon as Luigi starts moving - zero otherwise.
$7E:0DCD2 bytesPlayerOverworld Y position where Luigi should be going to. Is used by overworld path tiles to indicate Luigi's direction. Updated as soon as Luigi starts moving - zero otherwise.
$7E:0DCF2 bytesPlayerPlayer X speed on the overworld. Added with $7E:13D5, which does happen to be zero all the time.
$7E:0DD12 bytesPlayerPlayer Y speed on the overworld. Added with $7E:13D7, which is zero most of the time.
$7E:0DD31 byteOverworldPlayer direction. #$00 = up; #$02 = down; #$04 = left; #$06 = right.
$7E:0DD41 byteEmptyThis address is only referenced once, and may be regarded as the low byte of $7E:0DD5. Its value is never used, nor is anything ever stored to it, and so it can be used as free RAM.
Cleared on reset and titlescreen load.
$7E:0DD51 byteMisc.#$00 = Do not auto-walk while on the overworld.
#$01 = Level beaten, regular.
#$02 = Level beaten, secret.
#$80 = Exit level with Start+Select, by dying.
#$E0 = Level beaten (not for the first time), level is one of the tile numbers at $04:E5E6. Do not move the player, but enable the save prompt.
$7E:0DD61 bytePlayerWhich character is in play. Used on the overworld. The value of this address is actually $7E:0DB3 * 4.
#$00 = Mario; #$04 = Luigi.
$7E:0DD71 byteShould be 00An address that is expected to be #$00 throughout the entire game. $7E:0DD6 (current player) is sometimes used in 16bit mode, so using this address for different purposes is a bad idea.
$7E:0DD81 byteFlagUsed to tell if the game is currently switching between Mario and Luigi or not.
#$00 = Not switching between Mario and Luigi.
#$01 = Switching between Mario and Luigi, during the fade-out.
$7E:0DD91 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:0DDA1 byteMisc.Back-up of the music register. Gets its value from the level music table at $05:84DB.
Bit 7 of this address is set when the player has a star powerup or presses a P-switch; when this is cleared again, the music ends.
This address is also set to #$FF when the level ends, either by beating it or by dying.
Bit 6 is similar but is used to not reupload all music. This is used when changing from the Mario start screen to the level game mode.
$7E:0DDB3 bytesEmptyEmpty. Cleared on reset and titlescreen load.
$7E:0DDE1 byteMisc.Which files to delete on the erase file screen. Format: xxxxx123. It is also used as an overworld sprite index.
$7E:0DDF1 byteSpritesStarting OAM index for overworld sprites. Appears to be used only by the cloud sprites.
$7E:0DE05 bytesSpritesUsed for the overworld cloud sprites. This table is used in such a way that clouds check each other's 16-bit Y positions. By doing this, they can maintain their speed, making it the same for all clouds on-screen.
$7E:0DE516 bytesSpritesOverworld sprite number. A list of possible values can be found here.
$7E:0DF516 bytesSpritesMiscellaneous overworld sprite table.
$7E:0E0516 bytesSpritesMiscellaneous overworld sprite table.
$7E:0E1516 bytesSpritesMiscellaneous overworld sprite table.
$7E:0E2516 bytesSpritesMiscellaneous overworld sprite table.
$7E:0E3516 bytesSpritesOverworld sprite X position, low byte.
$7E:0E4516 bytesSpritesOverworld sprite Y position, low byte.
$7E:0E5516 bytesSpritesOverworld sprite Z position, low byte; distance that the sprite is from the ground.
$7E:0E6516 bytesSpritesOverworld sprite X position, high byte.
$7E:0E7516 bytesSpritesOverworld sprite Y position, high byte.
$7E:0E8516 bytesSpritesOverworld sprite Z position, high byte; distance that the sprite is from the ground. Probably has no real purpose in the original SMW; it may not be anything but #$00.
$7E:0E9516 bytesSpritesOverworld sprite X speed.
$7E:0EA516 bytesSpritesOverworld sprite Y speed.
$7E:0EB516 bytesSpritesOverworld sprite Z speed.
$7E:0EC516 bytesSpritesAccumulating fraction bits for overworld sprite X speed.
$7E:0ED516 bytesSpritesAccumulating fraction bits for overworld sprite Y speed.
$7E:0EE516 bytesSpritesAccumulating fraction bits for overworld sprite Z speed.
$7E:0EF51 byteOverworldThis would be used to check whether the Koopa Kid should activate. Most likely it was used to prevent the Koopa Kid from triggering multiple times. Uses bits 5-7 only (#$80, #$40 and #$20).
This address can be used as free RAM if you do not use the overworld koopa kids, it is cleared on reset and titlescreen load.
$7E:0EF61 byteOverworldIndicates which of the koopa kid triggers you are standing on. By default the tiles are: #$49, #$4A and #$4B. These correspond to index #$00, #$01 and #$02 respectively. This address is unused in the original SMW and can be used as free RAM, it is cleared on reset and titlescreen load.
$7E:0EF71 byteMisc.If bit 7 is set (#$80-#$FF) and the player is located on a level tile, he will enter it directly.
$7E:0EF81 byteFlagYoshi has been saved for the first time flag - used for Yoshi's thank message.
$7E:0EF955 bytesMisc.Status bar tilemap. A list of which byte goes where can be found here.
$7E:0F301 byteCounterTimer frame counter. When this address reaches #$00, one second is subtracted from SMW's timer, after which this address is set to #$28. This means that a SMW second is only 40 frames - in NTSC (60Hz), three SMW seconds = two real seconds
$7E:0F313 bytesCounterTimer.
$7E:0F31 = Hundreds.
$7E:0F32 = Tens.
$7E:0F33 = Ones.
$7E:0F343 bytesCounterMario's score, divided by 10 (the last digit of the score counter is always zero).
$7E:0F373 bytesCounterLuigi's score, divided by 10 (the last digit of the score counter is always zero).
$7E:0F3A6 bytesEmptyEmpty. Cleared on reset and titlescreen load.
$7E:0F402 bytesCounterAmount of score to add up to the score total, at level end. Decrements as total score increments.
$7E:0F426 bytesEmptyEmpty. Cleared on reset and titlescreen load.
$7E:0F481 byteCounterMario Bonus stars.
$7E:0F491 byteCounterLuigi Bonus stars.
$7E:0F4A20 bytesSpritesCluster sprite table. Is used for the castle background flame's frame to display, as well as Boo ring's speed - #$00 = still; #$01-#$7F = counter-clockwise; #$80-#$FF = clockwise.
Is also used for several other sprites that are generated, such as the ghost ceiling, but not necessarily for the same purpose.
$7E:0F5E20 bytesEmptyEmpty. Cleared on reset and titlescreen load. This table was probably meant to function as a cluster sprite table, but it was never used as such.
$7E:0F7220 bytesSpritesCluster sprite table. Could be used for any purpose - in the original SMW, it holds the index of each individual Boo in a Boo ring (#$00-#$09). It is also used in the death bat ceiling to keep track of the bats' Y position.
$7E:0F8620 bytesSpritesCluster sprite table, used for various purposes including determining which Boo ring is which and determining whether or not a particular "death bat" is visible.
$7E:0F9A20 bytesSpritesCluster sprite table. Its purpose in SMW are the following: act as a timer for determining when death bats will fly, and as a timer to freeze an active Boo in the ghost ceiling.
$7E:0FAE2 bytesSpritesLow byte of the angle of the Boo rings. $7E:0FAE is for the first Boo ring active; $7E:0FAF is for the second Boo ring active.
$7E:0FB02 bytesSpritesHigh byte of the angle of the Boo rings. $7E:0FB0 is for the first Boo ring active; $7E:0FB1 is for the second Boo ring active.
$7E:0FB22 bytesSpritesBoo ring center X position, low byte. $7E:0FB2 is for the first active Boo ring; $7E:0FB3 is for the second active Boo ring.
$7E:0FB42 bytesSpritesBoo ring center X position, high byte. $7E:0FB4 is for the first active Boo ring; $7E:0FB5 is for the second active Boo ring.
$7E:0FB62 bytesSpritesBoo ring center Y position, low byte. $7E:0FB6 is for the first active Boo ring; $7E:0FB7 is for the second active Boo ring.
$7E:0FB82 bytesSpritesBoo ring center Y position, high byte. $7E:0FB8 is for the first active Boo ring; $7E:0FB9 is for the second active Boo ring.
$7E:0FBA2 bytesSpritesOffscreen flag for the Boo ring. If a byte is set to 01, the ring is offscreen and doesn't show up. $7E:0FBA is for the first Boo ring active; $7E:0FBB is for the second.
$7E:0FBC2 bytesSpritesBoo ring index to level table (see $7E:1938). They are never erased, though, so they will always be reloaded.
$7E:0FBE1,024 bytesPointer16-bit pointer table, indexed by Map16 tile number*2. Points to the image to use for a certain Map16 tile. Usually starts with #$8000 or $9100 (levels) or #$D000 (overworld) and the value counts up with eight per two RAM addresses. Bank byte should be #$0D (levels) or #$05 (overworld).
$7E:13BE1 byteMisc.Item memory settings from header.
$7E:13BF1 byteMisc.Translevel number, set during transfer from world map to level. This identifies the first room of the current level. To convert this to a room number (the "level number" in Lunar Magic), if > #$24, then add #$DC.

The actual formula is more complex. If translevel number > #$24, then subtract #$24. Then check RAM $7E:1F11 or $7E:1F12. If the player is in a submap (not the big world map), then add #$100. The submaps of SMW use translevel numbers > #$24, and the big map uses numbers <= #$24, so the simplication is that #$100 - #$24 is #$DC.
$7E:13C01 byteShould be 00While this is never non-zero in the original SMW, $7E:13BF (level number) is sometimes used in 16bit mode. Using this address is thus not recommended.
To make this one become useful free RAM, change $05:D9C9/0x2DBC9 to [E2 10 AC BF 13 B9 08 D6 8D EA 1D] (header : lorom : org $05D9C9 : SEP #$10 : LDY $13BF : LDA $D608,y : STA $1DEA).
$7E:13C11 byteOverworldCurrent Layer 1 overworld tile the player is standing on.
$7E:13C21 byteShould be 00Cleared on reset, title screen load, and when walking onto a new overworld tile.
Note that it should remain at #$00 on the overworld, or various stuff will bug up.
$7E:13C31 byteOverworldCurrent player submap. #$00 = Main map; #$01 = Yoshi's Island; #$02 = Vanilla Dome; #$03 = Forest of Illusion; #$04 = Valley of Bowser; #$05 = Special World; #$06 = Star World.
Note that it is sometimes inaccurate. It is wiser to use $7E:0DB3 and $7E:1F11.
$7E:13C41 byteShould be 00An address that is expected to be #$00 throughout the entire game. $7E:13C3 (current player submap) is often used in 16-bit mode, so using this address is not recommended, unless you make sure it's cleared on overworld load. Is also cleared during the switch between Mario and Luigi. Furthermore, cleared on reset and titlescreen load.
$7E:13C51 byteCounterIncrements each time a 3-Up moon is collected, serves no other purpose. (Its value is never loaded.)
$7E:13C61 byteMisc.Used by SMW's cutscenes. Goes from #$01 to #$08 and these values are in the order of the boss battles, e.g. #$01 = Iggy's castle, #$02 = Morton's castle. #$08 is the value used for the credits.
$7E:13C71 byteYoshiYoshi color. #$04=yellow; #$06=blue; #$08=red; #$0A=green. Refreshes on level change
$7E:13C81 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:13C91 byteFlagShow "Continue/End" menu flag.
#$00 = Don't show it; #$01 = freeze player, but don't load the text yet; #$02 = freeze player, load "Continue/End" menu.
$7E:13CA1 byteFlagShow save prompt flag. It actually triggers when you get on a new level tile. #$00 = Don't show save prompt; #$01 = show save prompt.
$7E:13CB1 byteMisc.This has been left out in the current SMW version.

When you hit a goal tape, and spawn a starman (which never happens), this is set to #$01. Now each time you switch an area in a level, this gets multiplied by 2. When this reaches #$80 (changed area seven times), you will start the area with the star power. The instruction which sets this address to #$01 is located at $00:FB5C/0x7D5C.
$7E:13CC1 byteCounterThe value you store here is the amount of coins that are being added up to the total. Usually, $7E:13CC is either #$00 or #$01, but it can be set to other values in order to add up multiple coins at once.
$7E:13CD1 byteFlagIf set to #$00, the midway point won't trigger if grabbed (it'll still make you big, but it won't set the midway flag). Never has any effect in the original SMW, probably left over from a beta.
$7E:13CE1 byteFlagMidway Point flag.
#$00 = Midway Point not crossed; #$01 = Midway Point crossed.
$7E:13CF1 byteFlagUsed to override the castle/ghost house entrance cutscene after you collect the midway point.

#$00 = Show castle/ghost house entrance cutscene after collecting midway point.
#$40 = Don't show castle/ghost house entrance cutscene after collecting midway point. Note that any non-zero value will work, this is just what SMW uses.

Change $05:D9DE to #$9C to make the cutscene play regardless.
$7E:13D01 byteOverworldIndex to what tile should be stored to VRAM during the castle/switch palace/fortress destruction sequence.
#$00 = Pressed green switch.
#$01 = Pressed yellow/red/blue switch.
#$02 = Destroyed fortress.
#$03 = Destroyed castle with exit.
#$04 = Destroyed castle without exit.
The tile data is then read from $04:EE7A through a 24-bit pointer at $7E:000A (scratch RAM).
$7E:13D11 byteOverworldHolds the value of the listed castle/fortress/switch tile that must be destroyed, by checking which event it uses (table at $04E5D6). For example, event #$06 (Iggy's Castle destroyed) makes this address hold value #$00 (it's the first slot in the table).
This address is then used as index to the address where the destroyed tile is uploaded to VRAM.
$7E:13D21 byteMisc.Color of the currently pressed switch palace, or #$00 for None. It's set to #$01 when the player hits a switch palace, and then set to the correct color (#$01 for Yellow, #$02 for Blue, #$03 for Red and #$04 for Green, others are oddly colored and/or flipped) by the message box routine. It creates both the ! blocks in the message boxes and on the overworld.
$7E:13D31 byteFlagTimer that disables Start from flipping the Pause flag when its value is not #$00 (thus, #$01-#$FF). If it is #$00, being able to press Start to get into the Pause mode is possible.
$7E:13D41 byteFlagPause flag for levels, and "look around the map" flag for the overworld. #$00 = off; #$01 = on.
$7E:13D51 byteMisc.A flag that determines whether or not Layer 3 should scroll with the screen. If this is zero, Layer 3 will scroll depending on the tileset and tide setting; if it is any other value, Layer 3 will always be at the same position relative to Layer 1.
Also used on the overworld as accumulating fraction bits for player X speed (see $04:9801).
$7E:13D61 byteTimerAmount of time to wait until the score-incrementing drumroll begins when you beat a level. Any time you enter a level, this address is set to #$50. Once you beat the level and the number of bonus stars you won and the score is displayed (or just the score if you didn't cut the goal tape), this timer will decrement itself once per frame. Once it reaches a negative value or zero, the drumroll will commence.
Once the drumroll ends, this is set to #$30, and then set to zero upon going to the overworld. It serves the same purpose after you beat a boss as well.
$7E:13D71 byteOverworldY position fraction bits for the intro march (walking to Yoshi's House). It's in 256ths and increments with #$80 each frame; when it hits #$100 and thus overflows to #$00, the player is moved down a pixel. In addition to this, he's moved up a pixel every frame - making the player move up 1 pixel per 2 frames.
$7E:13D81 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:13D91 bytePointerA pointer to various processes running on the overworld.

#$01 = Activate overworld events.
#$02 = Runs as soon as a level is beaten and the events have run.
#$03 = Standing still on a level tile.
#$04 = Player is moving in a certain direction.
#$05 = Runs before settling on a level tile.
#$06 = Fading out to #$07.
#$07 = Switching between Mario and Luigi.
#$08 = Fading in from #$07.
#$09 = Follows up #$08, sets $7E:13D9 to #$03.
#$0A = Switching between two submaps (not via warp pipe/star).
#$0B = Activate star warp.
#$0C = Player intro march (entering overworld for the first time).

Also used in the level end march:
#$00 = Show up the course clear text.
#$01 = Store bonus star text (if applicable), bonus stars not decrementing yet.
#$02 = Count down timer/convert to score, add up bonus stars to total.
#$03 = Do nothing.
$7E:13DA1 bytePlayerAccumulating fraction bits for fixed point player X speed.
$7E:13DB1 bytePlayerPlayer walking frame pose.

While walking, it gets the values from the table at $00:DC78, indexed by $7E:0019, which eventually becomes the player pose if the player does nothing else. The duration of each frame is read from $00:DC7C, though $7E:13DB plays no role in this. Note that this never is #$02 if the player is small.
$7E:13DB plays a role in determining which walking frame should be raised one pixel - see $00E35D.
$7E:13DC1 bytePlayerAccumulating fraction bits for fixed point player Y speed.
$7E:13DD1 bytePlayerPose used when player is turning around. Uses same format as $7E:13E0.
$7E:13DE1 bytePlayerPoses used on overworld map and during credits by the player. The animation uses three frames, namely: this value, this value + 1, and this value + 2.
Can also be used as a "Player is looking up" flag. That's cleared every frame, and it's set to #$03 when holding the Up arrow and standing still. The graphics routine is the only code that actually reads it.
$7E:13DF1 bytePlayerCape image. A list of valid values can be found here.
$7E:13E01 bytePlayerPlayer image/pose. A list of valid values can be found here.
$7E:13E11 bytePlayerDetermines what kind of slope you are on. It's also set when flying with a cape. Possible values are:

#$00 - Not on any slope.
#$08 - Gradual slope left.
#$10 - Gradual slope right.
#$18 - Normal slope left.
#$20 - Normal slope right.
#$28 - Steep slope left.
#$30 - Steep slope right.
#$58 - Very steep slope left.
#$60 - Very steep slope right.
#$68 - Swooping down while flying and facing Left.
#$70 - Swooping down while flying and facing right.
$7E:13E21 bytePlayerSpinjump fireball timer. It increments every frame when the player spinjumps, if he has fire power. If the lowest four bits are clear, the player will throw out a fireball. The fourth bit (#$10) is the direction in which that fireball will move.
$7E:13E31 bytePlayerPlayer is wall-running flag.

#$00 = not wall-running.
#$02 = on bottom left (45° angle).
#$03 = on bottom right (45° angle).
#$04 = on top left (45° angle, on top of the wall).
#$05 = on top right (45° angle, on top of the wall).
#$06 = on the left wall.
#$07 = on the right wall.

Note that custom block codes will not run while wall-running!
$7E:13E41 bytePlayerPlayer dash timer. Increments with #$02 every frame the player is walking on the ground with the dash button held, otherwise decrements until it is zero. #$70 indicates that the player is at its maximum running speed, and also means that the player is able to fly with a cape.
$7E:13E51 byteMisc.This is the index used to get how many frames to store to the player animation timer, at $7E:1496. This is set to #$68 when the player is moving over a slippery surface.
$7E:13E62 bytesEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:13E81 byteFlagCape spin interacts with sprites flag.
#$00 = don't interact; #$01 = do interact.
$7E:13E92 bytesPlayerCape interaction X position within the level. It's adjusted when the cape attack is used.
$7E:13EB2 bytesPlayerCape interaction Y position within the level. It's adjusted when the cape attack is used.
$7E:13ED1 bytePlayerPlayer pose on a slope when sliding, is set to #$1C.
This value is also negative (bit 7 set) when landing from flying, which allows the player to slide.
$7E:13EE1 bytePlayerWhat kind of slope the player is on.

#$FC = Very steep slope left.
#$FD = Steep slope left.
#$FE = Normal slope left.
#$FF = Gradual slope left.
#$00 = Not on slope.
#$01 = Gradual slope right.
#$02 = Normal slope right.
#$03 = Steep slope right.
#$04 = Very steep slope right.
$7E:13EF1 bytePlayerPlayer is on ground flag.
Is only set to #$01 if touching the floor, and ignores touching sides, ceilings, and running up walls. Does not work correctly in blocks, as the value still has to be calculated at that point. Instead, the original value of $7E:13EF is stored over to $7E:008D.
$7E:13F01 bytePlayerUsed to calculate the index to the direction the player faces while using a climbing net door. The formula is $7E:149D << 1 & #$0E | $7E:13F0. This address gets its value from $7E:13F9.
$7E:13F11 byteFlagVertical Scroll enable flag. #$00 = disabled; #$01 = enabled.
$7E:13F21 byteEmptyCleared on reset, titlescreen, overworld and cutscene load, as well as at $00F8A7. (TODO: What exactly is this routine?)
$7E:13F31 byteTimerWhen you get a P-balloon, this is set to #$09. Each frame afterwards, this is decremented until it gets to #$01, at which point the player will begin to show his inflated frame.
$7E:13F45 bytesBlocksA byte assigned to each row of blocks in the coin bonus game. Updated as blocks are chosen by the player to decide whether a life is given or not. If the value is #$FF, a life will be handed out. $7E:13F4 is for the uppermost row, $7E:13F5 for the one below that, etc.
$7E:13F91 bytePlayerPlayer goes behind layers flag.
$7E:13FA1 bytePlayerWhether the player is capable of jumping out of the water immediately or not (so just below the surface). #$00 = No; #$01 = Yes.
$7E:13FB1 bytePlayerPlayer is frozen flag. This includes controls and animation. Other sprites still move and can interact with the player, but contact with them should be avoided, as it would freeze the game. This may be useful for cutscenes to eliminate the jumping sound.
$7E:13FC1 byteMisc.Currently active boss. Used for determining which graphics to load, as well as checking for various other purposes (like when the player should have priority over certain sprite backgrounds, that can be found in the boss rooms).
#$00 = Morton; #$01 = Roy; #$02 = Ludwig; #$03 = Bowser; #$04 = Reznor
Note that Iggy, Lemmy, Wendy and Larry don't make use of this. Cleared on level->overworld transitions, and possibly at other times too.
$7E:13FD1 byteFlagWhen the L/R button is pressed, this address gets set to #$01 which briefly freezes the screen while the screen scrolls in whatever direction you pressed. It's cleared again when scrolling is done.
$7E:13FE1 byteMisc.#$02 = scroll right, #$04 = scroll left. Used when L/R is pressed.
$7E:13FF1 bytePlayerPlayer direction ($7E:0076) times 2. Used in the L/R screen-scrolling routine to determine when the screen will stop scrolling.
$7E:14001 byteCameraControls if the camera should move to be at the proper place compared to the player. If this is set, L and R are ignored.
#$00 = normal case, don't move camera automatically, keep it in place (assuming L/R aren't used).
#$08 = move camera right.
#$0A = move camera left.
$7E:14011 byteTimerIncrements with one each time one of the L/R buttons is pressed, until the timer hits #$10 (at which the L/R screen scroll is activated) or if the buttons are released.
$7E:14021 byteBlocksA flag that is set when the player is on a note block that is currently going down, i.e. the bounce sprite is moving downwards. If this wouldn't be set, the player would be pushed away from tile 152 (the tile that temporarily comes into place of the note block).
$7E:14031 byteMisc.Settings for current layer 3 tide.
#$00 - Not a tide image
#$01 - Water level changes
#$02 - Water level doesn't change
$7E:14041 byteFlagIf "vertical scroll at will" is enabled, then this flag controls if the screen should scroll up to the player. If you set this to a non-zero value every frame, it can be seen as a temporary alternative to setting $00:F878/0x7A78 to #$80, since the latter is permanent.
$7E:14051 byteFlagIndicates that the player is just about to warp to another level via a pipe, and whether or not Yoshi should be drawn at that point. It is set as soon as $7E:0088 reaches zero, and if Yoshi is inside the warp pipe too, his graphics will be hidden.
$7E:14061 byteCameraThis is set to #$80 if you bounce off of a springboard or a purple triangle (while on Yoshi, that is), and is cleared when touching the ground.
The game uses this, along with some other RAM addresses, to determine if the screen should scroll up with the player or not.
$7E:14071 bytePlayerPlayer gliding with cape phase.

#$00 = Not gliding.
#$01 = Gliding, rising.
#$02 = Gliding, staying on level.
#$03 = Gliding, sinking a little.
#$04 = Gliding, sinking more.
#$05 = Swooping down, initial phase.
#$06 = Swooping down, fast.

Controls player pose as well (table at $00:CE79).
$7E:14081 bytePlayerUsed to index the cape gliding table at $00:D7D4 to see what the next step should be in the cape gliding phase. That value is (eventually) stored in $7E:1407.
#$00 = Make player rise.
#$01 = Make player sink (eventually swoop down).
#$02 = Holding off left/right button, make player sink, but not swoop down.
#$03 = Holding off left/right button, swooping down, make player sink less.
#$04 = Holding off left/right and X/Y buttons, terminate cape gliding.
$7E:14091 bytePlayerKeeps track of the furthest stage the player has been diving during flight. Possible values are:
#$F8: the stage when not holding the right or left button
#$F4: Partially aiming towards floor
#$F0: Almost completely diving
#$C8: Diving completely, the stage where you cause an earthquake where you land.

When set to #$C8, the player will gain the large upwards boost (instead of the little normal boost) when cathing air.
$7E:140A1 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and during part of the cape flight routine.
$7E:140B2 bytesEmptyEmpty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.
$7E:140D1 byteFlagSpin Jump flag. #$00 = normal jump (or on ground); any other value = spinjumping.
$7E:140E1 byteSpritesLayer 2 is touched flag, which is used in the Layer 2 sinking/rising upon touch scroll sprite. #$00 = Layer 2 not touched; #$01 = Layer 2 touched.
$7E:140F1 byteFlagKeeps incrementing in the Reznor battle room. It is used as a flag to determine that a different OAM index needs to be used for a smoke sprite or a puff of smoke, to make sure there's no conflict with the platform tiles.
However, since this keeps incrementing and thus sometimes hits #$00 again, it can occur that a platform tile disappears for one frame when a smoke sprite is shown.
$7E:14101 byteFlagYoshi has wings flag #1 (the other is $7E:141E). #$01 would mean that the player with a fire flower powerup can shoot fireballs while on Yoshi (never occurs in the game), whereas #$02 indicates Yoshi has wings.
Note that this one only handles graphics of the wings (value #$02), and that it disables the Yoshi tongue action (value #$01).
The value from $7E:141E is stored here each frame.
$7E:14111 byteFlagHorizontal scroll settings from header flag. #$00 = Disable; #$01 = Enable.
$7E:14121 byteMisc.Vertical scroll settings from header. #$00 = Disable; #$01 = Enable; #$02 = Enable if flying/climbing/etc.
$7E:14131 byteMisc.Horizontal scroll setting for Layer 2. #$00 = none; #$01 = constant; #$02 = variable.
$7E:14141 byteMisc.Vertical scroll setting for Layer 2. #$00 = none; #$01 = constant; #$02 = variable; #$03 = slow.
$7E:14152 bytesEmptyEmpty. Cleared on reset, titlescreen load, overworld load and cutscene load.
$7E:14172 bytesCameraThe distance to scroll layer 2 vertically if that kind of scrolling is enabled. This is calculated based on the type of vertical scrolling set in $7E:1414. The scrolling is calculated as follows:

If $7E:1414 is #$01 (constant), then $7E:1417 is: $7E:0020-$7E:001C
If $7E:1414 is #$02 (variable), then $7E:1417 is: $7E:001C >> 1 ^ #$FFFF + 1 + $7E:0020
If $7E:1414 is #$03 (slow), then $7E:1417 is: $7E:001C >> 3 ^ #$FFFF + 1 + $7E:0020
$7E:14191 byteSpritesHow Yoshi should go inside a pipe.
#$01 = Duck a little (horizontal pipe).
#$02 = Face the screen (vertical pipe).
#$FF = Don't change image, only go behind layer (shooting out of slanted pipe). Note that this will probably work with all values #$03-#$FF.

An immediate effect of this is that Yoshi goes beyond layer 1 with any non-zero value. Also, Yoshi's tongue isn't shown either.
$7E:141A1 byteCounterCounter that increments every time a new level is entered (with a door or pipe) - this enables you to distinguish the 'mother'-level from sublevels, as this always is zero at the start of a level. Note: Don't enter a sublevel within a level 256 times, or a glitch will occur.
$7E:141B1 byteFlagDetermines if you have played the bonus game before in the same level before. If it is non-zero (meaning you've played the game before), all blocks in the coin game will always be incorrect.
Note that if you don't hit a single block the first time playing the game, then this will be zero, and you can play the game again.
$7E:141C1 byteFlagSecret goal sprite flag. Is not checked in vertical levels.
$7E:141D1 byteFlagWhether "Mario/Luigi Start!" should be shown or not. Used for castle entrances and the likes.
#$00 = enable; #$01 = disable.
$7E:141E1 byteYoshiYoshi has wings flag. The only possible value for this address in the original is #$02, but setting to #$01 will allow the player to throw fireballs if on Yoshi, even if he is not fiery. This will, however, disable flight as well as Yoshi's tongue attack.
It's recalculated each frame.
$7E:141F1 byteFlagDisable No Yoshi Intro flag.
#$00 = regular behavior (depending on the tileset, the No Yoshi Intro is either shown or not).
#$80 = the No Yoshi Intro is disabled, regardless of tileset.
$7E:14201 byteCounterYoshi Coins collected. Does not affect amount of Yoshi Coins on status bar.
$7E:14211 byteCounterCounter used by the invisible 1-Up checkpoints. Starts at zero, and increments with one every time the next checkpoint has been touched. Resets to zero when a checkpoint has been touched that can't be checked yet, for example checkpoint #2 when #1 hasn't been touched yet.
$7E:14221 byteCounterAmount of Yoshi Coins to display on the status bar. Values #$01 through #$04 are the values where it will display that number of Yoshi Coins, otherwise none are displayed.
$7E:14231 byteMisc.Indicates which switch palace switch is being pressed.
Its value also varies depending on which side of the switch was pressed. (Left side -> it uses the first value, right side -> it uses the second.)
01/02 = green, 05/06 = yellow, 09/0A = blue, 0D/0E = red.
The bottom halves also set this, but this doesn't trigger anything.
$7E:14241 byteTimerUsed to determine whether or not the victory walk should display the number of collected bonus stars. If it is zero (see also $7E:1900), the amount of collected bonus stars is not displayed. Otherwise, it is. $7E:1900 is stored to it, causing this address to decrement as well. Also note that this value does NOT have any effect on the rest of the bonus text.
$7E:14251 byteFlagBonus game flag. If anything non-zero, the bonus game will commence after the level has been cleared.
$7E:14261 byteMisc.Message box trigger. #$00 = none; #$01 = message 1; #$02 = message 2; #$03 = Yoshi thanks message.
$7E:14271 byteMisc.Bowser clown car image.
00-Regular
01-Blinking
02-Hurt
03-Angry face
Higher values makes it cycle through the above ones.
$7E:14281 byteSpritesUsed as an index for the frames of the Bowser propeller. Valid frames range from #$00-#$03.
$7E:14291 byteSpritesUsed to calculate which palette to use for Bowser. Valid values range from #$00-#$07. This value is calculated based on the Mode 7 scale factor, with the table at $03:A265.
$7E:142A2 bytesPlayerWhere the player has to be on the screen in order to justify moving the screen. If the player X position relative to the screen is less than $142A - #$000C, then the screen will move left. If the player X position relative to the screen is greater than or equal to $142A + #$000C, the screen will move right.
$7E:142C4 bytesCameraTwo 16-bit addresses, $142C and $142E, are set to $142A - #$000C and $142A + #$000C respectively during the screen-scrolling routine, read from to determine whether or not to scroll the screen.
$7E:14301 byteBlocksLowest tile that's solid for sprites from below (in addition to 111 through 16D). It's on page 1.
$7E:14311 byteBlocksHighest tile that's solid for sprites from below (in addition to 111 through 16D) plus 1. It's on page 1.
$7E:14321 byteFlagDirectional coin activation flag. This is set to #$01 when the sprite changes the music, and it is used to prevent the player being able to spawn any more than one instance of the sprite in an entire level, as it carries across sublevels.
$7E:14331 byteTimerScaling factor of the circle for the windowing HDMA effects used with the titlescreen, level ending and keyhole.
The closer to zero, the smaller the circle.
Loads titlescreen when value becomes #$F0 or higher.
$7E:14341 byteTimerSet to #$30 to end level via keyhole. Works as a timer of some sorts, to indicate how long the keyhole sequence should last - but in SMW, this value is never set to anything other than #$00 or #$30. Also, this address freezes player and sprites by storing its value to $7E:13FB, resp. $7E:009D.
$7E:14351 byteFlagKeyhole growing/shrinking flag. #$00 = growing; #$01 = shrinking.
$7E:14362 bytesMisc.Used for multiple purposes.

Keyhole X position when keyhole sequence is activated. It's also used in the Iggy/Larry boss fight, where it controls the player X position when on the ground.
Additionally, related to the switch block overworld event, purpose yet unknown.
$7E:14382 bytesSpritesUsed for multiple purposes.

Keyhole Y position when keyhole sequence is activated. It's also used in the Iggy/Larry boss fight, where it controls the player Y position when on the ground.
Additionally, related to the switch block overworld event, purpose yet unknown.
$7E:143A1 byteFlagWhen set to a value that is not zero, this will make the game overwrite tiles #$00 through #$05, #$10 through #$15, #$4A through #$4F and #$5A through #$5F with data it gets from $7F:977B-$7F:9A7A. These are uploaded during V-blank (NMI).
Is used to write the graphics for "MARIO START!", "LUIGI START!", "TIME UP!", "GAME OVER" and "BONUS GAME".
$7E:143B1 byteMisc.Which death message must be displayed. #$14 = "GAME OVER"; #$1D = "TIME UP!".
$7E:143C1 byteTimerDeath message animation timer. Amount of time until the two segments come together, such as with "GAME OVER", where the animation goes like this: GAME --> <-- OVER.
Is set to #$C0, decrements by four at a time.
$7E:143D1 byteTimerTimer for the "TIME UP!"/"GAME OVER" death message - how long it should stay active after the two words have come together. Is set to #$FF, decrements by one at a time.
$7E:143E1 byteSpritesScroll command number. A list of possible values can be found here.
$7E:143F1 byteSpritesScroll command number used on layer two. This address serves as a complement to $7E:143E. This address is set by the init routine of the layer one of each scroll address.
$7E:14401 byteSpritesThe starting Y-position of the current scroll sprite, left-shifted twice and with the extra bits still added. (Format: --YYYYEE, where Y = Y position and EE = extra bits).
Regularly adjusted inside the scroll sprites. It can be particularly useful for determining what type of scrolling should be applied with this scroll sprite.
This address is used for Layer 1 scrolling.
$7E:14411 byteSpritesThe starting Y-position of the current scroll sprite, left-shifted twice and with the extra bits still added. (Format: --YYYYEE, where Y = Y position and EE = extra bits).
Regularly adjusted inside the scroll sprites. It can be particularly useful for determining what type of scrolling should be applied with this scroll sprite.
This address is used for Layer 2 scrolling.
$7E:14421 byteMisc.Various flags used in the Yoshi's House portion of the credits scene. Used values:
#$00 = Player and companion walks in
#$01 = Various Yoshis duck and watch in excitement.
#$02 = Eggs are shattering, one by one.
#$03 = Yoshis get up and "THANK YOU" appears on Yoshi's house.
#$04 = Yoshis jump in excitement, then screen fades out.
24-bit pointers for these actions are located at SNES $0C:A1DE.

Also used in the castle destruction sequence as a pointer to what actions should be taken. Each castle destruction has its own pointer table for this address. $0C:C9A5 is a pointer table which points the the pointer tables of each castle. You can view the breakdown of each sequence here.

Used in scroll sprites for tracking what type of scroll it is currently doing, usually depending on $7E:1440/$7E:1441. This is the Layer 1 counterpart of $7E:1443.
$7E:14431 byteSpritesUsed in scroll sprites for tracking what type of scroll it is currently doing, usually depending on $7E:1440/$7E:1441. This is the Layer 2 counterpart of $7E:1442.

It's also a castle destruction sequence text timer. Starts at #$FF when the 'Welcome' music starts, and a new line of text appears every #$20 frames after that. (#$DF, #$BF, #$9F, etc.)
$7E:14441 byteSpritesLayer 1 scroll command pointer/timer. This timer serves no defined purpose on itself, but is generally used for waiting a specific number of frames before updating scroll properties such as speed. For example, with the Layer 1 auto-scroll, this value being #$00 indicates the auto-scroll has finished.
$7E:14451 byteSpritesLayer 2 scroll command pointer/timer. This timer serves no defined purpose on itself, but is generally used for waiting a specific number of frames before updating scroll properties such as speed.
$7E:14462 bytesSpritesLayer 1 X speed used in the scrolling codes.
#$0001-#$7FFF = move left; #$8000-#$FFFF = move right. #$0000 means there is no movement.
Effectively, it's the X speed to give the player when he's touching the side of a screen, during a level which does not have regular Layer 1 scrolling. Values are different depending on the type of (auto-)scroll.
This value divided by #$10/#16 is stored into $7E:007B.
$7E:14482 bytesSpritesLayer 1 Y speed used in the scrolling codes.
#$0001-#$7FFF = move upwards; #$8000-#$FFFF = move downwards. #$0000 means there is no movement.
$7E:144A2 bytesSpritesLayer 2 X speed used in the scrolling codes.
#$0001-#$7FFF = move left; #$8000-#$FFFF = move right. #$0000 means there is no movement.
$7E:144C2 bytesSpritesLayer 2 Y speed used in the scrolling codes, particularly in the Layer 2 scroll command (sprite EA).
#$0001-#$7FFF = move upwards; #$8000-#$FFFF = move downwards. #$0000 means there is no movement.

$7E:144D also controls the time until you can press a button to end the castle destruction sequence (after all text has been generated on-screen).
$7E:144E2 bytesSpritesThis is used internally by the scroll sprites for updating the layer 1 X position. In particular, the routine at $05:C4F9 uses it to add the current speed to.

Furthermore, $7E:144E is used on the overworld to determine after how many frames the player should face the screen again after settling on a level tile.

$7E:144E is also used in the credits, as a timer that is set to #$06 and decrements every frame. If this is zero, bit 0 of $7E:144F will get flipped, causing Peach's image during the walking phase to bounce.

$7E:144F is a flag that makes Peach bounce during the time she walks in the credits.
#$00 = Peach frame 1, upright; #$01 = Peach frame 2, one pixel lower.
$7E:14502 bytesSpritesThis is used internally by the scroll sprites for updating the layer 1 Y position. In particular, the routine at $05:C4F9 uses it to add the current speed to.
$7E:14522 bytesSpritesThis is used internally by the scroll sprites for updating the layer 2 X position. In particular, the routine at $05:C4F9 uses it to add the current speed to.
$7E:14542 bytesSpritesThis is used internally by the scroll sprites for updating the layer 2 Y position. In particular, the routine at $05:C4F9 uses it to add the current speed to.
$7E:14561 byteSpritesUsed by the scroll sprites as an index for what layer to process. #$00 is Layer 1, and #$04 is Layer 2. The RAM addresses indexed include the entire area of $7E:1446-$7E:1455.
$7E:14571 byteFlagThis flag is set and used to determine whether to upload the multicolor Yoshis in the ending cutscene. The surprised Yoshi image (when the eggs are hatching) will appear regardless of this address, but the jumping Yoshi images require this flag to be #$01.
If anything else, they will not be drawn on-screen.
$7E:14582 bytesMisc.Used in the Layer 3 images to control the X speed of Layer 3. This address is primarily used for the tileset specific images (not #$01 or #$03), for example the goldfish and the ghost house fog.
$7E:145A2 bytesMisc.Used in the Layer 3 images to control the Y speed of Layer 3. This address is used primarily for the rising/falling Layer 3 tide.
$7E:145C2 bytesMisc.This is used internally by Layer 3 images for updating the Layer 3 X position, which is used in (for example) the goldfish and ghost house fog.
It's also used as accumulating fraction bits for the Layer 3 Y speed during the rising/sinking Layer 3 tide.

$7E:145D is also used as a timer to determine when to move to the next game mode after the Yoshi house credits scene. Is set to #$F0 the moment all eggs hatched.
$7E:145E2 bytesEmptyEmpty. Cleared on reset, titlescreen load, overworld load and cutscene load.
$7E:14601 byteFlagLayer 3 vertical scrolling direction. #$00 = downwards; #$01 = upwards.
$7E:14611 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and cutscene load.
This byte functions as the "high byte" of $7E:1460. SMW does not actually use this byte, however it is overwritten during level load (see $05:BE92).
Cleared on reset, titlescreen, overworld, level (with the exception of boss rooms) and cutscene load.
$7E:14622 bytesMisc.Layer 1 X position, next frame.
Much similar to $7E:001A, maintaining the exact same values, with the difference being the usage of their values.
This is more notable in auto-scroll commands, for example, if $7E:1462 were to remain static while there was a Layer 2 auto-scroll going, the image would stay, but the level would move.
Is also used for temporary storage to determine how much the screen has moved horizontally in the current frame. ($7E:001A - $7E:1462 = $7E:17BD)
$7E:14642 bytesMisc.Layer 1 Y position, next frame.
Much similar to $7E:001C.
Is also used for temporary storage to determine how much the screen has moved vertically in the current frame. ($7E:001C - $7E:1464 = $7E:17BC)
$7E:14662 bytesMisc.Layer 2 X position, next frame.
Much similar to $7E:001E.
Is also used for temporary storage to determine how much the screen has moved horizontally in the current frame. ($7E:001E - $7E:1466 = $7E:17BF)
$7E:14682 bytesMisc.Layer 2 Y position, next frame.
Much similar to $7E:0020.
Is also used for temporary storage to determine how much Layer 2 has moved vertically in the current frame. ($7E:0020 - $7E:1468 = $7E:17BE)
$7E:146A2 bytesMisc.Used to determine how much layer 3 has moved horizontally in the current frame. This address is only used during the credits while displaying the enemies for the windowing HDMA.
$7E:146C4 bytesEmptyEmpty. Cleared on reset, titlescreen load, overworld load and cutscene load.
$7E:14701 byteFlagCarrying something flag. Very similar to $7E:148F, with the difference that, if this flag is set, the player's graphics don't change, and throw blocks can still be picked up as long as $7E:148F remains zero. If used in a carryable custom sprite to check if the player is already carrying something, definitely combine it with $7E:148F to assure there are no exceptions.
#$00 = Carrying nothing; #$01 = carrying something.
$7E:14711 byteMisc.Whether the player is on top of a solid sprite, and what kind of sprite that is.

#$01 = Standing on top of a floating rock, floating grass platform, floating skull, Mega Mole, carrot top lift, etc. This one calculates the player's position based on the next frame.
#$02 = Standing on top of a springboard, pea bouncer. This one calculates the player's position based on the next frame.
There's a check at $00:D60B so that the player can hold the jump button pressed for a longer while to jump higher.
#$03 = Standing on top of a brown chained platform, gray falling platform. This one calculates the player's position based on the current frame.
$7E:14721 byteSpritesLeft window X position of the top of the spotlight. It's always #$78. This is the value stored that is stored to $7E:147A every four frames.
$7E:14731 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:14741 byteSpritesRight window X position of the top of the spotlight. It's always #$87. This is the value that is stored to $7E:147C every four frames.
$7E:14751 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:14761 byteSpritesLeft window X position of the extreme bottom of the spotlight.
Please note that this position is for the imaginary scanline #$FF, whereas there are normally only #$E0 scanlines on a screen.
That means that the value here is never equal to the left window X position on the very bottom of the screen, unless $7E:1476 is equal to $7E:1472, forming a straight vertical line.
$7E:14771 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:14781 byteSpritesRight window X position of the extreme bottom of the spotlight.
Please note that this position is for the imaginary scanline #$FF, whereas there are normally only #$E0 scanlines on a screen.
That means that the value here is never equal to the right window X position on the very bottom of the screen, unless $7E:1478 is equal to $7E:1474, forming a straight vertical line.
$7E:14791 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:147A1 byteSpritesIn the spotlight code, the left window X position of each scanline is calculated and temporarily stored here, after which this address stores its value to an even byte of $7E:04A0.
What is left at the end of every frame is the left window X position on the very bottom scanline.
This is used once in every four frames, probably to reduce lag.
$7E:147B1 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:147C1 byteSpritesIn the spotlight code, the right window X position of each scanline is calculated and temporarily stored here, after which this address stores its value to an odd byte of $7E:04A0.
What is left at the end of every frame is the right window X position on the very bottom scanline.
This address used once in every four frames, probably to reduce lag.
$7E:147D1 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:147E1 byteSpritesUsed by the spotlight to calculate whether or not to move the left window on a particular scan line into the direction of the resulting X position on the bottom left.
It works by adding the width from $7E:1480 to itself (starting at #$00 initially), and if the resulting value is higher than #$CF (or even overflows, setting the carry bit), the left window moves a pixel into the direction of the resulting X position on the bottom left.
$7E:147F1 byteSpritesUsed by the spotlight to calculate whether or not to move the right window on a particular scan line into the direction of the resulting X position on the bottom right.
It works by adding the width from $7E:1481 to itself (starting at #$00 initially), and if the resulting value is higher than #$CF (or even overflows, setting the carry bit), the right window moves a pixel into the direction of the resulting X position on the bottom right.
$7E:14801 byteSpritesWidth between the top left window ($7E:1472) and the bottom left window ($7E:1476) of the spotlight. This value is always positive, and its sign flag is saved at $7E:1484.
$7E:14811 byteSpritesWidth between the top right window ($7E:1474) and the bottom right window ($7E:1478) of the spotlight. This value is always positive, and its sign flag is saved at $7E:1485.
$7E:14821 byteFlagUsed as a flag in the spotlight code to skip initialization of the top left, top right, bottom left, and bottom right RAM addresses.
#$00 = Run initialization; #$01 = Do not run initialization.
$7E:14831 byteSpritesUsed as a flag for the current direction the spotlight is moving. #$00 = spotlight is moving right; #$01 = spotlight is moving left.
$7E:14841 byteSpritesA flag used in the spotlight code to determine which side of the top left window border the bottom left window border is on.
#$00 = bottom left is more to the left; #$01 = bottom left is on the same position, or more to the right.
$7E:14851 byteSpritesA flag used in the spotlight code to determine which side of the top right window border the bottom right window border is on.
#$00 = bottom right is more to the left; #$01 = bottom right is on the same position, or more to the right.
$7E:14861 byteSpritesUnused, set to #$01 in the dark room spotlight sprite. Change $03:C544 to EA EA EA (NOP #3) to change this into free RAM. If that patch is performed, this address is safe for other uses. Cleared on reset, titlescreen load, overworld load and cutscene load.
$7E:14874 bytesEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:148B2 bytesMisc.Used by random number generation subroutine to determine the next output.
Do not use these if you want a random number. Use $7E:148D instead.
$7E:148D2 bytesMisc.Output of random number generation routine, located at $01:ACF9/0x0AEF9.
$7E:148F1 bytePlayerFlag used to detect if the player is holding an object (throw block, key, shell, etc.) Also adjusts the player image, different from $7E:1470. This address does store its value to $7E:1470.
If the player is carrying something, this address should usually (not always, regarding the glitch) prevent the player from holding a second item.
#$00 = Carrying nothing; #$01 = carrying something.
$7E:14901 byteTimerStar power timer. Decrements every fourth frame, except when sprites are locked. The music will revert when this timer reaches #$1E.
$7E:14911 byteSpritesAmount of pixels on the X/Y axis a sprite has moved in the current frame. It is set after every call to update sprite position based on speed, and the routine that updates both X/Y position based on speed will leave $7E:1491 with the movement on the X axis in this address. Very often used for rideable sprites as this address can be added to the player position to move the player in tandem with the sprite.
$7E:14921 byteTimerPlayer peace image timer.
$7E:14931 byteTimerEnd level timer. Setting to #$FF will end the level as a goal sphere / boss fight. Peace sign is shown here when the timer hits #$28. The switches (yellow, green, red and blue) set it to #$08.
$7E:14941 bytePalettesDirection of the color fading at level end. Only the highest bit is ever read.
#$00 = getting darker; #$80 = getting brighter.
$7E:14951 byteTimerTimer that controls fading and the level end scorecard. Increments and stops when it hits #$40. While it's ticking, the colors will fade; when it's done, $7E:003A through $7E:003D won't be read and the Layer 3 scrolling will be locked.
$7E:14961 byteTimerPlayer animation timer. This controls a lot of things such as the walking/running animation rate, how long the death animation should last, how long to stay invisible for after getting the cape, the alternating player images when the player is walking over slippery surfaces, etc.
$7E:14971 byteTimerFlashing invulnerability timer - not to be confused with the star timer. This is activated when the player gets hurt. Controls both interaction (player should not interact with sprites again) as well as the blinking graphics.
$7E:14981 byteTimerTime to show player picking an item/object up pose.
$7E:14991 byteTimerTime for player to face the screen.
$7E:149A1 byteTimerTime to show player kicking something pose.
$7E:149B1 byteTimerTime for the player to change through palettes, as if he got a fire flower. Only ticks when the "get flower" animation is active, and is just a flag otherwise.
$7E:149C1 byteTimerTime to show player shooting a fireball pose.
$7E:149D1 byteTimerSide flipping climbing net sprite flag and timer. Whenever you punch the flipping net, this gets set to #$1E and decrements every frame till it's zero. That's how many frames the spinning animation lasts. It also determines the X speed the player has while he's on the climbing net sprite - this means that it should be decremented every frame in order to avoid issues.
$7E:149E1 byteTimerPlayer punches while climbing on a net flag and timer. Every time you punch a net this is set to #$08 and decremented till it's zero again. During the time it's not zero, the frame is displayed that shows the player punching the net. If you store #$08 or greater to it every frame you'll be hold onto the net without being able to move or get off.
When this RAM address is non-zero, the player can also not move.
$7E:149F1 byteTimerThis timer controls the time until the player gets into gliding/sinking mode after he has jumped into the air with a cape. Is set to #$50 the moment you get airborne, and decrements every frame afterwards. The ability of raising any further stops at #$00.
$7E:14A01 byteTimerHow long the running frames should be shown after the player launches off with the cape. Is #$10 by default and decrements each frame.
$7E:14A11 byteTimerPlayer slides a bit when turning around timer. Most notably used with very steep slopes. If this is non-zero, $7E:13DD's image (#$0D) won't be shown.
$7E:14A21 byteTimerUsed as a timer for the cape animation. This is what makes the cape wave when the player walks and what makes the cape fall when he stops.
$7E:14A31 byteTimerA timer for Yoshi's tongue stretching out.
#$12 = Yoshi about to stretch out tongue (timer starts here), player pose #$27.
#$10 = $7E:18AE is set to #$06.
#$0C = Player now gets a different pose, #$28.
#$00 = Player now gets a different pose, #$20 (or #$21 if turning around, $7E:187A is used to determine that).
$7E:14A41 byteTimerTime until the player advances a diving stage, while flying and holding forward, and time until the player pulls back up a stage, while flying and holding backward.
$7E:14A51 byteTimerTimer for how long you keep floating after releasing B when floating with the cape.
$7E:14A61 bytePlayerCape spin timer.
$7E:14A71 byteTimerTimer for breaking the bridge in Reznor battles. It is set to #$40 and decrements each frame. When it reaches #$3C, a tile on each side breaks. When it drops to #$00, a sound is played and it's reset to #$40 again.
$7E:14A83 bytesMisc.Unused, and decrement every frame automatically until they reach zero. $7E:14A9 is cleared when the player ground pounds with the cape (this can be prevented by setting $02:94C6/0x116C6 to NOP #3 or [EA EA EA]), and $7E:14AA is set to #$40 when Yoshi grabs the wings (this can be stopped by setting $01:F6CF/0xF8CF to NOP #3 or [EA EA EA]).
$7E:14AB1 byteTimerBonus game ending timer. Does nothing in a normal level, but during a bonus game, setting it will end the bonus game and return to the overworld. At #$44 it starts the "end bonus game" music, and at #$01 it actually fades to the overworld.
$7E:14AC1 byteEmptyEmpty. However, due to the code at $00:C563/0x04763 and $00:C513/0x04713, it decrements every fourth frame until it hits zero.
$7E:14AD1 byteTimerBlue P-Switch timer. Decrements every fourth frame. The P-switch running out sound is played when this hits #$1E.
$7E:14AE1 byteTimerSilver P-Switch timer. Decrements every fourth frame. The P-switch running out sound is played when this hits #$1E.
$7E:14AF1 byteFlagOn/Off Switch value. #$00 is ON and all others (non-zero, i.e. #$01-#$FF) are OFF.
$7E:14B02 bytesMisc.Used for multiple purposes.

The 16-bit address forms the center X position of the brown chained platform that is currently processed. The formula for this address = $7E:14B4 - $7E:14BC.

Additionally, the Lakitu cloud graphics routine uses $7E:14B0 as scratch RAM for the X position of a tile.

$7E:14B0 is furthermore used in the Bowser battle as a timer between his various attacks. Set to #$78 at the beginning, and between attacks afterwards it is set to #$54 each time.
Note that, whether he throws the Mechakoopas or not, does not only depend on this address!

And finally, $7E:14B1 is a timer that is set to #$FF when Bowser begins with the Mechakoopa attack. Note that the Mechakoopas are thrown when this timer is at #$80.
$7E:14B22 bytesMisc.Used for multiple purposes.

The 16-bit address forms the center Y position of the brown chained platform that is currently processed. Note that, since the radius based on the sprite Y position is always zero, this holds the same value as $7E:14B6. The formula for this address = $7E:14B6 - $7E:14BF.

Additionally, the Lakitu cloud graphics routine uses $7E:14B2 as scratch RAM for the Y position of a tile.

$7E:14B2 is also a flag for scaling when Bowser is flying away. #$00 = shrinking; #$01 = growing; #$02 = disappear.

And finally, $7E:14B3 is an incrementing index to the Y position for the teardrop tile that appears on the Clown Car when Bowser is hurt.
$7E:14B42 bytesMisc.Used for multiple purposes.

The 16-bit address is the X position of the brown chained platform sprite at cos a = 1. It is in fact a mirror of the sprite X position, which always stays the same. By subtracting the horizontal radius ($7E:14BC) from this address, the center position to revolve around is calculated.

The 16-bit address is also used to determine Iggy/Larry interactive X position, as well as the player's fireball X position during this boss battle.

$7E:14B4 is used in the Bowser battle as an index to what music should be played in phase 2 and 3. It only appears to have these values after written to:
#$07 = Use track #$19.
#$08 = Use track #$1A.
Both tracks are identical. Perhaps this seperation was intended to be used so that a different track played on each phase.

And finally, $7E:14B5 is a timer for Bowser's hurt state. If non-zero, Bowser will show his hurt pose.
$7E:14B62 bytesSpritesUsed for multiple purposes.

The 16-bit address is the Y position of the brown chained platform sprite at sin a = 0. It is in fact a mirror of the sprite Y position, which always stays the same. By subtracting the horizontal radius ($7E:14BF) from this address, the center position to revolve around is calculated. Since $7E:14BF is always zero, the center position and this address always have the same identical value.

The 16-bit address is also used to determine Iggy/Larry interactive Y position, as well as the player's fireball Y position during this boss battle.

$7E:14B6 is also a timer that is set to #$FF when Bowser begins with the Big Steelie attack. Note that the Big Steelie is thrown when this timer is at #$80.

And finally, $7E:14B7 holds the X position of each new fireball that falls from the sky in the Bowser battle, as well as the index to the sound effects that are generated with them (table at $03:A841).
$7E:14B82 bytesMisc.Used for multiple purposes.

The 16-bit address is the X position of the first (outermost) chain tile of the brown chained platform currently being processed. This address is responsible for the actual movement of the platform and interaction with the player.

$7E:14B8 itself seems to form a buffer for the X position of Iggy/Larry during that boss battle, much similar to $7E:14B4.

Lastly, $7E:14B8 is an attack counter used in the second phase of the Bowser battle to determine if Bowser should throw Mechakoopas or Big Steelies. It increments on every throw, on #$02 Mechakoopas are thrown, and on #$03 it resets to #$00.
$7E:14BA2 bytesSpritesUsed for multiple purposes.

The 16-bit address is the Y position of the first (outermost) chain tile of the brown chained platform currently being processed. This address is responsible for the actual movement of the platform and interaction with the player.

$7E:14BA itself seems to form a buffer for the Y position of Iggy/Larry during that boss battle, much similar to $7E:14B6.
$7E:14BC2 bytesSpritesRadius of the rotating brown platform, by default this value is #$50 (found at $01:CACC). This value is subtracted from $7E:14B4 and stored into $7E:14B0.
In SMW however, the value is always #$50. Additionally, the high byte is always #$00.

Note that this radius depends on sprite X position (which stays the same). It calculates the center position of the imaginary circle you rotate around from that position.
The further you increment the radius, the further you will have to move the sprite to the right in order for the center position to be the same.

See also $7E:14BF.
$7E:14BE1 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and cutscene load.
$7E:14BF2 bytesSpritesAnother type of radius that would rely on the brown chained platform's Y position, except that it's always #$0000, and thus effectively it does nothing. Subtracted from $7E:14B6 and stored into $7E:14B2. See also $7E:14BC.
$7E:14C11 byteEmptyEmpty. Cleared on reset, titlescreen, overworld and cutscene load.
$7E:14C22 bytesSpritesUsed to hold the sine value of the brown rotating platform. Note that the range of this is always #$0000-#$0100. XOR isn't applied to this value when it is negative.
$7E:14C41 byteEmptyEmpty. Cleared on reset, titlescreen, overworld and cutscene load.
$7E:14C52 bytesSpritesUsed to hold the cosine value of the brown rotating platform. Note that the range of this is always #$0000-#$0100. XOR isn't applied to this value when it is negative.
$7E:14C71 byteEmptyEmpty. Cleared on reset, titlescreen, overworld and cutscene load.
$7E:14C812 bytesSpritesSprite status table. A list of possible values can be found here.
$7E:14D412 bytesSpritesSprite Y position, high byte.
$7E:14E012 bytesSpritesSprite X position, high byte.
$7E:14EC12 bytesSpritesAccumulating fraction bits for fixed point sprite Y speed.
$7E:14F812 bytesSpritesAccumulating fraction bits for fixed point sprite X speed.
$7E:150412 bytesSpritesMiscellaneous sprite table. In SMW, it's used as e.g. throw timer.
$7E:151012 bytesSpritesMiscellaneous sprite table. In SMW, it's used in the brown platform's graphics routine, but nowhere else in SMW's entire code. It is also not cleared in the sprite table clear routine, unlike every single other sprite table.
$7E:151C12 bytesSpritesMiscellaneous sprite table. In SMW, it's used for vertical directions, and Yoshi uses it to determine which sprite to spawn out of an egg.
$7E:1520-$7E:1523 is a 'Reznor killed flag'. If a byte is set to #$01, the Reznor will disappear. Byte 1 is for Reznor 1, byte 2 for Reznor 2 and so on.
$7E:152812 bytesSpritesMiscellaneous sprite table. In SMW, it's used for Chargin' Chuck HP, Thwomp's face expression, etc.
$7E:153412 bytesSpritesMiscellaneous sprite table.
Certain powerups use this table as a blink-fall flag.
#$00 = Off; #$01 = On, powerup will blink and fall straight down.
The game stores #$01 here when it drops the reserved item from the item box. The blink-fall flag affects the Super Mushroom and the Fire Flower, but not the Cape Feather. The blink-fall flag also affects some other sprites, at least the Starman, the 1-Up mushroom and the coin sprite, but these sprites might glitch if you set the flag.
One glitch is that the blinking sprite-coin permanently occupies a sprite slot if it falls off the level, so that it might prevent the spawning of other common sprites.
Other than that, this address has many different purposes.
$7E:154012 bytesSpritesMiscellaneous sprite table. Table decrements itself once per frame, except for carryable sprites, where it decrements every second frame.
Various sprites use this table as a stun timer. For example, this timer controls when flipped Goombas and squashed Mecha-Koopas decide to rise and walk. This table is also the sprite spinjump death frame counter - that is, how long to show the "spinjumped" image when the sprite is killed by a jump of such sorts.
$7E:154C12 bytesSpritesMiscellaneous sprite table. Used as a timer to disable sprite contact with the player. Table decrements itself once per frame.
$7E:155812 bytesSpritesMiscellaneous sprite table. Used as a timer for how long a sprite is sinking in lava/mud. Table decrements itself once per frame.
$7E:156412 bytesSpritesMiscellaneous sprite table. Used as a timer to disable sprite contact with other sprites. Table decrements itself once per frame.
$7E:157012 bytesSpritesMiscellaneous sprite table. In SMW, it's used as a frame counter for timed lifts (amount of frames until it hits zero), a frame counter that indicates when sprites #$00-#$13 that have the 'Follow player' flag set should turn, etc.
$7E:157C12 bytesSpritesMiscellaneous sprite table. It's most often used as a horizontal sprite direction table. #$00 = Right; #$01 = Left.
$7E:158812 bytesSpritesSprite blocked status table. Format: asb?udlr.
a = touching Layer 2 from above.
s = touching Layer 2 from the side.
b = touching Layer 2 from below.
? = unknown, probably unused.
u = up.
d = down.
l = left.
r = right.
$7E:159412 bytesSpritesMiscellaneous sprite table. In classic Piranha Plants, it is used to check if the sprite should be made visible and have interaction with the player. If it's any non-zero value, that Piranha Plant will become invisible.
$7E:15A012 bytesSpritesSprite off screen flag, horizontal
$7E:15AC12 bytesSpritesMiscellaneous sprite table. It's often used as a timer to determine how long it takes to turn around. Table decrements itself once per frame.
$7E:15B812 bytesSpritesDetermines what kind of slope a sprite is on. Possible values:
#$FC = very steep slope left.
#$FD = steep slope left.
#$FE = normal slope left.
#$FF = gradual slope left.
#$00 = flat ground (or in the air).
#$01 = gradual slope right.
#$02 = normal slope right.
#$03 = steep slope right.
#$04 = very steep slope right.
$7E:15C412 bytesSpritesSprite table which is set to #$01 if the sprite in question is off-screen. For example, the rings of the Ball 'n' Chain are never drawn if this is a non-zero value.
$7E:15D012 bytesSpritesSprite about to be eaten flag table. #$00 = No; #$01 = Yes.
$7E:15DC12 bytesSpritesFlag that determines whether or not sprites should interact with objects.
#$00 = Yes; #$01 = No.
$7E:15E81 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:15E91 byteSpritesSprite index for the current sprite that is being processed.
$7E:15EA12 bytesSpritesSprite index to the OAM table.
$7E:15F612 bytesSpritesSprite YXPPCCCT table. Many sprites use it in their graphics routines.
$7E:160212 bytesSpritesMiscellaneous sprite table. Often used as graphics pointer.
$7E:160E12 bytesSpritesMiscellaneous sprite table. In SMW, it is used to keep track of things such as the green bouncing Koopa's Y speed and the sprite number of certain spawned, kicked, etc. sprites.
$7E:161A12 bytesSpritesSprite index to level table (see $7E:1938). #$00 means it should be reloaded. Set to #$FF to prevent from reloading it once it goes offscreen.
$7E:162612 bytesSpritesMiscellaneous sprite table. Consecutive enemies killed by a sprite table. Each byte is how many sprites that particular sprite has killed. In SMW, this applies to sprites that can be thrown, such as Koopa shells.
$7E:163212 bytesSprites"Sprite is behind scenery" flag. Used by, among others, the net Koopas.
$7E:163E12 bytesSpritesMiscellaneous sprite table. Table decrements once per frame. In SMW, it's used as e.g. a timer that, when it's zero, makes Ludwig face the player, while he's spitting fireballs.
$7E:164A12 bytesSpritesSprite is in water flag table. #$00 = Sprite not in water; #$01 = Sprite in water.
Used in the Roy battle as an indicator that the walls have to close in.
$7E:165612 bytesSpritesSprite properties, first Tweaker/MWR byte.
Format: sSjJcccc
s=Disappear in cloud of smoke
S=Hop in/kick shells
j=Dies when jumped on
J=Can be jumped on (false = player gets hurt if he jumps on the sprite, but can bounce off with a spin jump)
cccc=Object clipping
$7E:166212 bytesSpritesSprite properties, second Tweaker/MWR byte.
Format: dscccccc
d=Falls straight down when killed
s=Use shell as death frame
cccccc=Sprite clipping
$7E:166E12 bytesSpritesSprite properties, third Tweaker/MWR byte.
Format: lwcfpppg
l=Don't interact with layer 2 (or layer 3 tides)
w=Disable water splash
c=Disable cape killing
f=Disable fireball killing
ppp=Palette
g=Use second graphics page
$7E:167A12 bytesSpritesSprite properties, fourth Tweaker/MWR byte.
Format: dpmksPiS
d=Don't use default interaction with player
p=Gives power-up when eaten by Yoshi
m=Process interaction with player every frame
k=Can't be kicked like a shell
s=Don't change into a shell when stunned
P=Process while off screen
i=Invincible to star/cape/fire/bouncing bricks
S=Don't disable clipping when killed with star
$7E:168612 bytesSpritesSprite properties, fifth Tweaker/MWR byte.
Format: dnctswye
d=Don't interact with objects
n=Spawns a new sprite
c=Don't turn into a coin when goal passed
t=Don't change direction if touched
s=Don't interact with other sprites
w=Weird ground behavior
y=Stay in Yoshi's mouth
e=Inedible
$7E:16921 byteSpritesSprite memory setting from header.
$7E:16931 byteBlocksFor the regular tiles in SMW, this holds the low byte of the Map16 number (Y contains the high byte). Within custom block code, this contains the low byte of the "acts like" setting, Y has the high byte, and $03-$04 contain the actual Map16 number. This gets its value from a pointer to the Map16 tile table at $7E:C800 (Y gets its value from $7F:C800).
$7E:16941 byteBlocksHow many pixels the sprite should move down from the nearest 16x16 tile. Originally, its data comes from the table at $00:E632.
$7E:16951 byteMisc.Used most often in tracking the second sprite being checked in various interaction routines, for example the second sprite's index in the sprite contact routine. It also serves a use during checking when a sprite is entering/exiting water.
$7E:16961 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.
$7E:16971 byteCounterConsecutive enemies stomped.
$7E:16981 byteSpritesMinor extended sprite index for the current minor extended sprite that is being processed.
$7E:16994 bytesSpritesBounce sprite type number. A list of possible values can be found here.
$7E:169D4 bytesSpritesBounce sprite initialization flag table. #$00 = bounce sprite in init routine; #$01 = bounce sprite in main routine. Used for several things, such as generating tile 152 (invisible solid) once only.
$7E:16A14 bytesSpritesBounce sprite Y position, low byte.
$7E:16A54 bytesSpritesBounce sprite X position, low byte.
$7E:16A94 bytesSpritesBounce sprite Y position, high byte.
$7E:16AD4 bytesSpritesBounce sprite X position, high byte.
$7E:16B14 bytesSpritesBounce sprite Y speed.
$7E:16B54 bytesSpritesBounce sprite X speed.
$7E:16B94 bytesSpritesAccumulating fraction bits for bounce sprite X speed.
$7E:16BD4 bytesSpritesAccumulating fraction bits for bounce sprite Y speed.
$7E:16C14 bytesSpritesBounce sprite turns into Map16 tile. This uses the same values as $7E:009C.
$7E:16C54 bytesSpritesBounce sprite timer - amount of frames until bounce sprite disappears. Turn blocks are set to spinning mode when this timer runs out.
$7E:16C94 bytesSpritesBlock bounce sprite table.
Format: L-----DD
L is which layer it is on. Clear means it's on layer 1, set means it's on layer 2 (or layer 3 if applicable).
DD is the direction it is moving in. 00 = up; 01 = right; 10 = left; 11 = down.
The -'s are unknown. They're likely unused, but that's not certain yet.
$7E:16CD4 bytesSpritesBlock bounce sprite table that controls position and size of sprite interaction.
$7E:16D14 bytesSpritesBounce sprite X position, low byte. Used for interaction.
$7E:16D54 bytesSpritesBounce sprite X position, high byte. Used for interaction.
$7E:16D94 bytesSpritesBounce sprite Y position, low byte. Used for interaction.
$7E:16DD4 bytesSpritesBounce sprite Y position, high byte. Used for interaction.
$7E:16E16 bytesSpritesScore/1-Up sprite number. A list of possible values can be found here.
$7E:16E76 bytesSpritesScore/1-up sprite Y position, low byte.
$7E:16ED6 bytesSpritesScore/1-up sprite X position, low byte.
$7E:16F36 bytesSpritesScore/1-up sprite X position, high byte.
$7E:16F96 bytesSpritesScore/1-up sprite Y position, high byte.
$7E:16FF6 bytesSpritesScore/1-up sprite Y movement - how long the score sprite should move upwards. It is not possible to go down, and the maximum amount of frames is #$30. Additionally, the sprite is twice as slow with #$10-#$1F as with #$20-#$2F, and four times as slow with #$00-#$0F. The sprite terminates itself when this hits zero.
$7E:17056 bytesSpritesLayer the score/1-up sprite is on. Used to control its position.
$7E:170B10 bytesSpritesExtended sprite number. A list of possible values can be found here. Last two bytes reserved for fireballs.
$7E:171510 bytesSpritesExtended sprite Y position, low byte. Last two bytes reserved for fireballs.
$7E:171F10 bytesSpritesExtended sprite X position, low byte. Last two bytes reserved for fireballs.
$7E:172910 bytesSpritesExtended sprite Y position, high byte. Last two bytes reserved for fireballs.
$7E:173310 bytesSpritesExtended sprite X position, high byte. Last two bytes reserved for fireballs.
$7E:173D10 bytesSpritesExtended sprite Y speed. Last two bytes reserved for fireballs.
$7E:174710 bytesSpritesExtended sprite X speed. Last two bytes reserved for fireballs.
$7E:175110 bytesSpritesAccumulating fraction bits for extended sprite Y speed. The last two bytes are for the player's fireballs.
$7E:175B10 bytesSpritesAccumulating fraction bits for extended sprite X speed. The last two bytes are for the player's fireballs. The fireballs also use this table for a hit flag table.
$7E:176510 bytesSpritesExtended sprite table. Most extended sprites increment this table and use it for their GFX table. (Use a different image every x frames.)
$7E:176F10 bytesSpritesExtended sprite table with multiple purposes. Fireballs use it as a frame counter table when they hit an object. Various other extended sprites, such as the trail of smoke, use it as a graphics pointer.
$7E:177910 bytesSpritesExtended sprite goes behind layers flag. Last two bytes reserved for fireballs.
$7E:17838 bytesSpritesShooter number. #$00 = None, #$01 = Bullet Bill shooter, #$02 = Torpedo Launcher.
$7E:178B8 bytesSpritesShooter Y position, low byte.
$7E:17938 bytesSpritesShooter Y position, high byte.
$7E:179B8 bytesSpritesShooter X position, low byte.
$7E:17A38 bytesSpritesShooter X position, high byte.
$7E:17AB8 bytesSpritesAmount of time it takes for a shooter to shoot the next sprite.
$7E:17B38 bytesSpritesShooter's index to level table (see $7E:1938). Curiously, shooters are always reloaded, because there is no routine to erase them.
$7E:17BB1 byteEmptyContains the low byte of the level number when loading the levels, but never read by anything. It's cleared when the loading is done. Can be used as freeram.
$7E:17BC1 byteMisc.How much the Y position of Layer 1 changed in the current frame. Only used by the originally unused winged cage sprite.
$7E:17BD1 byteMisc.How much the X position of Layer 1 changed in the current frame. Used in various instances, for example to check how fast the spinning coins should move horizontally when a goal tape is touched when there are sprites on screen.
$7E:17BE1 byteMisc.How much the Y position of Layer 2 changed in the current frame. Used when the player should be still compared to a moving layer 2. For example, it's used by the Layer 2 horizontal scroll sprite, F4.
$7E:17BF1 byteMisc.How much the X position of Layer 2 changed in the current frame.
$7E:17C04 bytesSpritesSmoke sprite number. A list of possible values can be found here.
$7E:17C44 bytesSpritesSmoke sprite Y position, low byte.
$7E:17C84 bytesSpritesSmoke sprite X position, low byte.
$7E:17CC4 bytesSpritesSmoke sprite timer - amount of frames until smoke sprite disappears.
$7E:17D04 bytesSpritesSpinning coin from block. If zero, the slot is free, otherwise it's occupied by such a spinning coin.
$7E:17D44 bytesSpritesSpinning coin from block Y position, low byte.
$7E:17D84 bytesSpritesSpinning coin from block Y speed. $20-$9F will terminate the sprite and cause a score sprite to appear.
$7E:17DC4 bytesSpritesAccumulating fraction bits for fixed point spinning coin from block Y speed.
$7E:17E04 bytesSpritesSpinning coin from block X position, low byte.
$7E:17E44 bytesSpritesSpinning coin from block table. Indicates whether the spinning coin is generated from a block on Layer 1, or Layer 2/3. Depending on the layer, it updates its position based on the layer's movements.
$7E:17E84 bytesSpritesSpinning coin from block Y position, high byte.
$7E:17EC4 bytesSpritesSpinning coin from block X position, high byte.
$7E:17F012 bytesSpritesMinor extended sprite number. A list of possible values can be found here.
$7E:17FC12 bytesSpritesMinor extended sprite Y position, low byte.
$7E:180812 bytesSpritesMinor extended sprite X position, low byte.
$7E:181412 bytesSpritesMinor extended sprite Y position, high byte.
$7E:182012 bytesSpritesMinor extended sprite Y speed.
$7E:182C12 bytesSpritesMinor extended sprite X speed.
$7E:183812 bytesSpritesAccumulating fraction bits for fixed point minor extended sprite Y speed.
$7E:184412 bytesSpritesAccumulating fraction bits for fixed point minor extended sprite X speed.
$7E:185012 bytesSpritesMinor extended sprite timer. Indicates how long the minor extended sprite is still staying active, on-screen.
$7E:185C1 bytePlayerThe player falls through interactive layers flag. Used by the moving holes in ghost house floors. #$00 = Don't fall through; #$01 = fall through.
$7E:185D1 byteSpritesRelated to the spawning of extended sprites. Used to index $7E:17F0 (minor extended sprite type table) if there are no empty slots when an extended sprite needs to be spawned. This is so that the oldest extended sprite can be removed when a new one needs to be made.
$7E:185E1 byteMisc.Sometimes used to keep track of a tile to generate at $00:BEB0 (before storing to $7E:009C); may be in conjunction with $7E:18B6. Also used to determine the player Y position when he's on the line guided rope, used to determine positions and such of Yoshi's tiles, etc.
$7E:185F1 byteSpritesThis is the low byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching vertically.

This is set after $01:9138, the subroutine that allows the sprite to interact with objects, is called. (This includes $01:802A, the routine that updates sprite position with gravity, which calls $01:9138.)
$7E:18601 byteSpritesThis is the low byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching horizontally.

This is set after $01:9138, the subroutine that allows the sprite to interact with objects, is called. (This includes $01:802A, the routine that updates sprite position with gravity, which calls $01:9138.)
$7E:18611 byteSpritesWhich sprite to overwrite if all slots are full. Used for blocks containing sprites and the item box.
Note that only the last two slots can be overwritten using this method.
$7E:18621 byteSpritesThis is the high byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching horizontally.

This is set after $01:9138, the subroutine that allows the sprite to interact with objects, is called. (This includes $01:802A, the routine that updates sprite position with gravity, which calls $01:9138.)
$7E:18631 byteSpritesSmoke sprite index. Holds the first available smoke image index and resets to #$03 if all of them have been filled and another smoke image is spawned.
$7E:18641 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:18651 byteSpritesSpinning coin from block index. Holds the first available index and resets to #$03 if all of them have been filled and another coin is spawned.
$7E:18662 bytesMisc.Two seperate, 8-bit addresses used by the brown chained platform rotation routine. Used to tell if an angle is negative or not. Refer to $7E:0036 also.
$7E:18681 byteBlocksUsed as a mirror of $7E:1693 in stunned sprites. This address here is used to check if a sprite is hitting a smashable block (for example, a question mark block) from below.
$7E:18692 bytesEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:186B1 byteBlocksMultiple coin block timer - amount of time until the multiple coin block turns into a used block. Keeps decrementing until it's #$01, after that it stays that value until the block is hit again, at which it's turned into a used block. Then, this address gets set to zero.
$7E:186C12 bytesSpritesSprite off screen flag, vertical [TODO: This one uses multiple bits, see $01A3DF; figure out the details]
$7E:18781 byteSpritesIndicates where the player is on the X axis in relation to the currently-active revolving net door sprite. If this is #$00, the player is perfectly centered on the sprite horizontally. It will be positive if the player is toward the left side of the sprite (the farther left, the bigger the positive number) and negative if the player is toward the right side of the sprite (the farther right, the bigger the negative number).

Is used to calculate the player X speed as the net is turning around sideways.
$7E:18791 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:187A1 byteYoshiRiding Yoshi Flag. #$00 = No, #$01 = Yes, #$02 = Yes, and turning around.
$7E:187B12 bytesSpritesMiscellaneous sprite table. Has the following purposes:

Sprite stomp immunity flag table - enables stomp immunity for sprites if the flag is set.
Additionally, the changing item sprite uses it to determine which sprite it is (#$00 = mushroom, #$40 = fire flower, #$80 = feather, #$C0 = star), the goal tape determines by this address whether it activates the normal or secret exit, the radius of rotating chain sprites is held by this address, certain Yoshi abilities are handled, etc.

$7E:1884 is also used to determine what background should be used during the Morton/Roy/Ludwig battle scene. #$00 = Ludwig; #$01 = Morton/Roy.
There is also a bug with the background flames during the Ludwig battle, as they seem to change color upon this address not being #$01. This is responsible for a palette glitch in the original SMW, where the fire turns a greyish blue very briefly. Change $02:8380 to #$80 to fix the bug.
$7E:18871 byteTimerTime to shake Layer 1.
$7E:18882 bytesMisc.Layer 1 image relative Y position, used by $7E:1887 (shaking ground). Does not affect Layer 1 interaction. #$0000 = default value, Layer 1's image unchanged. The higher the value (positive, #$0001 and beyond), the more Layer 1 goes up. The lower the value (negative, wraps around to #$FFFF and below) the more Layer 1 goes down.
$7E:188A1 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load, but also on death ($00:F625/0x7825) and in the Peach Rescued scene ($03:AE39/0x1B039).
$7E:188B1 bytePlayerPlayer image-relative Y position, used by $7E:1887 (shaking ground). Does not affect player interaction. Unlike $7E:1888, this is an 8-bit address.
$7E:188C1 byteFlagFlag that determines if the game should keep updating the tile and YXPPCCCT data for the sprite background tiles in the Morton/Roy/Ludwig room.

#$00 = Keep updating; #$01 = Stop updating.
$7E:188D1 byteMisc.Used during the calculation of the X position of the background in the Morton/Roy/Ludwig room. It starts by copying the value from $7E:001A (8-bit) and getting the lowest bit from $7E:001B by using the carry bit. So first, this address is $7E:001A (9-bit) > 1.
This address is then, after it's inverted with EOR #$FF : INC A, used for $7E:0006 (scratch RAM, used for X displacement of all tiles).
$7E:188E1 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.
$7E:188F1 byteSpritesUsed to indicate whether the bonus game is over. It will disable the interaction and movement.
$7E:18901 byteCounterHow many 1-Ups to spawn. (Used for bonus game.)
$7E:18911 byteTimerP-balloon timer. Ticks down one step per four frames.
Note that setting this doesn't make the player fly away. The flight controller is $7E:13F3.
$7E:189220 bytesSpritesCluster sprite number. The pointer for those is at $02:F825/0x17A25. A list of possible values, as well as more information on cluster sprites in general, can be found here.
$7E:18A61 byteEmptyUnused RAM. Referenced at $01CF9E (Morton's code) but never actually used. Cleared on reset, titlescreen load, overworld load and level load.
$7E:18A71 byteBlocksThis address is a mirror of $7E:1693, which holds the Map16 number of the current block that is being checked. Primarily used in the Chargin' Chuck turn/throw block detection code.
$7E:18A82 bytesSpritesMorton and Roy left and right pillar status. $7E:18A8 controls the left pillar, whereas $7E:18A9 is used for the right pillar.
#$00 = Pillar is not falling yet.
#$01 = Pillar is falling.
#$81 = Pillar has fallen.
$7E:18AA2 bytesSpritesMorton and Roy left and right pillar Y positions. $7E:18AA is the left pillar, $7E:18AB is the right pillar.
The pillar status ($7E:18A8 and $7E:18A9) is set to #$81 (pillar has fallen) as soon as this Y position becomes #$B0.
The Y speed here accelerates slightly - see $02:83F8 for reference.
$7E:18AC1 byteYoshiTimer on when Yoshi will swallow the sprite in his mouth. It ticks down one step every fourth frame, and Yoshi's swallowing animation starts when this is #$26 or lower.
$7E:18AD1 byteYoshiFrame counter for Yoshi's walking frames. It goes from #$00-#$02, forms an index for the image table at $01:EDEE, and becomes #$02 when it gets lower than #$00 (frame counter decrements).
This address is comparable with the player's version, at $7E:13DB.
$7E:18AE1 byteTimerHow long it takes for Yoshi's tongue to come out after the player "hits" Yoshi (after $7E:14A3 becomes #$10). Starts at #$06 and decrements each frame.
$7E:18AF1 byteYoshiYoshi squatting timer. It's set to #$0C once the player hops onto Yoshi, decrements once every frame, and takes care of the ducking frame.
$7E:18B02 bytesYoshiYoshi's X position. Used only to determine where Yoshi is when eating a berry (by means of walking into one, not sticking his tongue out).
$7E:18B22 bytesYoshiYoshi's Y position. Used only to determine where Yoshi is when eating a berry (by means of walking into one, not sticking his tongue out).
$7E:18B41 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:18B51 byteFlagCleared when standing on the ground, set when standing on the floor of the unused winged cage. It tells whether the player should be following the cage or layer 1.
$7E:18B61 byteMisc.Sometimes used to keep track of a tile to generate at $00:BEB0 (before storing to $7E:009C); may be in conjunction with $7E:185E. Also used to determine the player X position when he's on the line guided rope, used when the player is on top of Boo Block, etc.
$7E:18B71 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:18B81 byteFlagRun cluster sprite code.
#$00 = No; #$01 = Yes.
$7E:18B91 byteSpritesGenerator type that is currently active. #$01 = Eerie Generator; #$02 = Para Goomba; and so on. The pointer for this address is located at $02:B00C/0x1320C.
$7E:18BA1 byteSpritesIndex to the Boo rings that are on screen (maximum is two). Additionally, depending on bit 0 of this byte, the reappearing ghosts use position combination 1 or 2.
$7E:18BB1 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:18BC1 byteSpritesFloating skull speed. It's set to #$00 in the sprite initial routine, and set to #$0C when the player touches the sprite.
$7E:18BD1 byteTimerTime to stun the player. It will make the player face the screen and make him unable to move.
$7E:18BE1 byteFlagFlag used to tell if the player can climb on air. The line guided ropes use this to let the player get onto them.
$7E:18BF1 byteTimerTimer used by a bunch of appearing/disappearing sprites (examples: Lakitu, Magikoopa, and Layer 3 smasher). Sprite D2 freezes it by incrementing the timer - effectively getting rid of the decrements applied by said sprites.
$7E:18C01 byteTimerTimer for respawning certain sprites, such as the Boo Buddies or sprite E5 (and Lakitu). Sprite D2, Turn Off Generator 2, sets this to zero when it is active.
$7E:18C11 byteSpritesUsed by Magikoopa and Lakitu to determine which sprite number should respawn when $7E:18BF is zero.
$7E:18C21 byteFlagPlayer is inside Lakitu cloud flag.
#$00 = Not inside Lakitu cloud.
#$01 = Inside Lakitu cloud.
If the latter, the player does not animate as if he were walking or floating.
$7E:18C32 bytesSpritesY position of the respawning sprite, used with $7E:18C0 (respawn timer) and $7E:18C1 (respawn sprite number).
$7E:18C58 bytesEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:18CD1 byteSpritesBounce sprite (alternative) index.
$7E:18CE4 bytesTimerSpinning turn block timer - amount of frames a spinning turn block lasts. When it hits zero, it reverts to a regular turn block.
$7E:18D21 bytePlayerThis address is incremented every time the player kills a sprite with a star while the star is active and will reset when the star runs out.
#$01 = 200; #$02 = 400; #$03 = 800; #$04 = 1000; #$05 = 2000; #$06 = 4000; #$07 = 8000; #$08 and above = 1-Up
$7E:18D31 byteTimerWrite a value to here, and sparkles (like the ones from the stars) will fly around the player for that amount of frames. However, it is never used in the original game.
Note that if the player has an invincibility star, this timer will wait until the star runs out.
$7E:18D41 byteYoshiRed berries eaten by Yoshi. After 10 berries, the counter resets and Yoshi lays an egg, containing a mushroom.
$7E:18D51 byteYoshiPink berries eaten by Yoshi. After 2 berries, the counter resets and Yoshi lays an egg, containing a coin game cloud.
$7E:18D61 byteYoshiType of the current berry being eaten. #$00 = Coin (no effect except getting a coin), #$01 = Red, #$02 = Pink, #$03 = Green. Controls both color and what happens when Yoshi eats the berry.
$7E:18D71 byteSpritesThis is the high byte of the Map16 tile (actual tile number, not "acts like" setting) that a sprite is touching vertically.

This is set after $01:9138, the subroutine that allows the sprite to interact with objects, is called. (This includes $01:802A, the routine that updates sprite position with gravity, which calls $01:9138.)
$7E:18D81 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.
$7E:18D91 byteTimerTimer for the castle/ghost house door in the intro sequence. The castle door starts at #$FF, the ghost house door starts at #$7F.
For the castle door: start rising and generate first sound at #$B0, rise until #$81, stay still until #$30, then sink and generate second sound at #$01.
For the ghost house door: open and generate first sound at #$76, then close and generate second sound at #$08.
$7E:18DA1 byteYoshiSprite number that spawns when Yoshi lays an egg. Valid values are #$74 (mushroom) and #$6A (coin game cloud).
$7E:18DB1 byteEmptySet to #$08 at $00:CDD4 (unreachable by default) and never touched again. Might have been intended as a starting index for the player's fireballs.
Cleared on reset, titlescreen load, overworld load and level load.
$7E:18DC1 byteYoshiFlag that is set when the player is ducking with Yoshi. They cannot turn around in this state. If you were to use the debug codes at $00:D085-$00:D089 (x5285 - x5289), this also makes the fireballs that the player fires when on Yoshi appear at a different position.
$7E:18DD1 byteCounterNumber of silver coins collected.
$7E:18DE1 byteYoshiTimer that determines how long it takes before an egg is laid by Yoshi, when 10 red Berries have been eaten. Is set to #$20 by default. Also, as long as this timer is above #$01, the player is frozen ($7E:13FB is set).
$7E:18DF1 byteSpritesID (index to $7E:009E and similar) of the current Yoshi, plus 1. Set to #$00 when the Yoshi despawns.
$7E:18E01 byteTimerTimer for how long stolen Lakitu clouds should remain before evaporating. Decrements once every four frames.
$7E:18E11 byteSpritesID of the Lakitu cloud (index to the sprite table that corresponds to the Lakitu cloud sprite). Contains a valid value even if the Lakitu itself is still alive.
$7E:18E21 byteYoshiLoose Yoshi Flag. If set, any Yoshis spawned will become 1-Ups instead. It's also Yoshi's index in the sprite table, plus 1.
$7E:18E31 byteSpritesHow many of the coins from the coin game cloud (the one that appears if Yoshi eats two pink berries) the player has collected. Oddly enough, it's cleared if you get hurt.
$7E:18E41 byteMisc.1-Up handler. Write to it to give that many lives. Handles everything except the 1-Up/2-Up/etc. graphics.
$7E:18E51 byteTimerAmount of time until the next life is given through the 1-Up handler ($7E:18E4).
$7E:18E61 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:18E71 byteYoshiYoshi ground stomp flag. #$00 = Yoshi does not stomp the ground when landing on it; #$01 = Yoshi does stomp the ground when landing on it.
This is set to #$01 when a Yellow Yoshi has a shell in its mouth, or when any Yoshi has a yellow shell in its mouth.
$7E:18E81 byteYoshiYoshi growing animation timer. Starts at #$40 and then decrements. Additionally, it freezes everything on the screen except Yoshi.
$7E:18E91 byteSpritesOccasionally used to index $7E:17C0 (smoke image table). If there are no empty slots left when a smoke image should be spawned, the oldest one is removed and the index is reset.
$7E:18EA12 bytesSpritesMinor extended sprite X position, high byte.
$7E:18F61 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load, cutscene load and level load.
$7E:18F71 byteSpritesScore sprite index.
$7E:18F84 bytesSpritesTime for a bounce sprite to interact with a normal sprite. Starts at #$06 and decrements. Actual interaction doesn't occur until the value is lower than #$03, though, and $7E:16CD has to be non-zero.
$7E:18FC1 byteSpritesAlternative extended sprite index, used when the extended sprite tables are full. Holds the first available extended sprite index and resets to #$07 if all of them have been filled and another extended sprite is spawned.
$7E:18FD1 byteSpritesFlag set when Whistlin' Chuck whistles, even when it's the Super Koopa-generating kind. Setting this makes Rip van Fish chase the player.
$7E:18FE1 byteSpritesThe diagonal and surrounded bullet bills timer. It increments every second frame, and when it reaches #$A0, it sends out some more Bullet Bills and resets itself.
$7E:18FF1 byteSpritesShooter index for the current shooter that is being processed.
$7E:19001 byteCounterBonus stars gained at level end - decrements to zero.
$7E:19014 bytesSpritesYXPPCCCT data of bounce sprite that is being shown.
$7E:19051 byteCounterIggy's/Larry's platform total number of tilts made counter. It will increment everytime the platform will be at a maximum tilt.
Only the lowest bit is ever used, and it controls which direction it should move.
$7E:19061 byteTimerIggy/Larry's platform stationary phase timer. Is set to #$40 and decrements every frame. As long as it's not zero, the platform won't rotate.
$7E:19071 byteCounterIggy's platform rotation phase counter.
#$00 = First phase, tilting left.
#$01 = First phase, tilting right.
#$02 = Second phase, tilting left.
#$03 = Second phase, tilting right.
#$04 = Third phase, tilting left steeply.
#$05 = Third phase, tilting right steeply.
After the third phase ends, the counter resets.
$7E:19081 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and level load.
$7E:19091 byteFlagFlag that makes the creating/eating block run or not run. #$FF = don't run, any other value = run. Set to #$00 when a brown block is touched.
$7E:190A1 byteSpritesReappearing Boo frame counter. They start appearing at #$FF, become fully opaque at #$DF, start disappearing at #$3F, and become fully invisible at #$1F. The counter decrements every frame and doesn't stop when it hits #$00 unless sprite D2 is active, which causes it to freeze at #$FF.
$7E:190B1 byteSpritesBig Boo Boss palette index, used for the transparency effect. The reappearing Boos (cluster sprites) also use this. They set this address to #$08.
$7E:190C1 byteTimerDirectional coin timer. Decrements every fourth frame.
$7E:190D1 byteFlagUsed as a flag in the Bowser battle for whether or not the final cutscene is playing. Used to remove the item box, as well as several palette updates and using a different OAM index for the roof tiles. Any non-zero value activates the flag.
$7E:190E1 byteSpritesSprite buoyancy settings from level header. Format: XY-- ---- (bits)
X = Enable sprite buoyancy. This reduces the number of sprites that can be on the screen at once without slowing down.
Y = Enable sprite buoyancy and disable all other sprite interaction with layer 2. This reduces the processing cost and slowdown.
$7E:190F12 bytesSpritesSprite properties, sixth Tweaker/MWR byte.
Format: wcdj5sDp
w=Don't get stuck in walls (carryable sprites)
c=Don't turn into a coin with silver POW
d=Death frame 2 tiles high
j=Can be jumped on with upward Y speed
5=Takes 5 fireballs to kill. Clear means it's killed by one. The hit counter is at $7E:1528.
s=Can't be killed by sliding
D=Don't erase when goal passed
p=Make platform passable from below
$7E:191B1 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load, and every frame when Yoshi is on screen. The latter can be disabled by changing [9C 1B 19] at $01:EBD9/0xEDD9 to [80 01 EA].
$7E:191C1 byteYoshiIndicates whether or not Yoshi has a key in his mouth. #$00 = no, #$01 = yes.
$7E:191D1 byteSpritesIndex for the cluster sprites that make up Sumo Brother flames, as they are being generated.
$7E:191E1 byteMisc.Is set to a value #$00-#$03 when pressing a big switch. Depending on the value, either a green, yellow, blue or red flat switch sprite will be left behind in the room.
$7E:191F1 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:19201 byteCounterHow many 1-Ups from the bonus game are still not collected. Decrements every time a 1-Up is collected. The bonus game ends when this address hits zero.
$7E:19211 byteMisc.During the cutscene after defeating Bowser, indicates which letter the "Mario's adventure is over..." message is currently at. Ends at #$54.
$7E:19221 byteShould be 00High byte of $7E:1921. This is never any value other than #$00 in the original SMW, but since $7E:1921 is sometimes loaded in 16-bit mode, it's not a good idea to use it if you're using the original Bowser battle. Cleared on reset, title screen load, and overworld load.
$7E:19232 bytesEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:19251 byteMisc.Level mode settings from level header.
$7E:19262 bytesEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:19281 byteMisc.One of two screen numbers used in the level loading routine. This one points to where the current object is placed and is never changed inside an object loading code. The other screen number is $7E:1BA1.

It is also used in the credits as a pointer to which background should be used for which part of the credits roll.
$7E:19291 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:192A1 byteMisc.Level header RAM address. Format: swaaaaaa. s = slippery level, w = water level, a = player action. If one of bits 3-5 is set, the player action will be "vertical pipe exit downwards, water level".
$7E:192B1 byteGraphicsSprite GFX set that is currently used.
$7E:192C1 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:192D1 byteMisc.FG palette settings from the level header.
$7E:192E1 byteMisc.Sprite palette settings from the level header.
$7E:192F1 byteMisc.Background color settings from the level header.
$7E:19301 byteMisc.Background palette settings from the level header.
$7E:19311 byteMisc.Tileset setting from level header. Also used on the overworld and in cutscenes to determine what graphics should be uploaded.
$7E:19321 byteMisc.Copy of the tileset setting from the level header. Never read by anything.
$7E:19331 byteMisc.Layer being processed. #$00 = Layer 1; #$01 = Layer 2/3 (depending on which is interactive). Used in both level loading routine and processing interactions.
$7E:19341 byteEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:19351 byteFlagWhen set to a non-zero value, it'll overwrite tiles #$4A-#$4F and #$5A-#$5F with graphics which it gets from $7E:0BF6 on level load. Used by the MARIO START! sign. Flag is immediately cleared after that.
$7E:19362 bytesEmptyEmpty. Cleared on reset, titlescreen load and overworld load.
$7E:1938128 bytesSpritesSprite load status within the level.
Loaded sprites' indices to this table are stored in the sprite table at $7E:161A. Shooters' indices are stored to $7E:17B3.
All sprites are set to #$00 when the player enters a new area, meaning they are marked to be loaded.
If a sprite's value is set to anything else, it will not reload until the player exits and re-enters the area.
$7E:19B832 bytesMisc.Exit Table. This connects doors and exit-enabled pipes to their correct entrances.
The index for this exit table is the position of the exit (relative to layer 1) divided by 256. If layer 1 is vertical, then use the Y position of the exit, else use the X position. This is also known as the current screen number.
For primary exits, the value in this exit table is the low 8 bits of the level number of the destination room. For secondary exits, the value in this exit table is the index to the secondary entrance ROM tables; and ROM table $05:F800/0x2FA00 provides the low 8 bits of the room number.
$7E:19D832 bytesMisc.Exit Table, flags + high bit.
Bit 0 = High bit of level number (1 = level 1xx; 0 = level 0xx)
Bit 1 = Secondary Exit Flag
Bit 2 = Exit Present Flag (set if any exit is on this screen)
Bit 3 = Make Destination Water Flag (Secondary Exit only)
Bits 4-7 = Unused

Only used when Lunar Magic is done with the ROM.
$7E:19F8384 bytesMisc.Three tables of 128 bytes each for remembering which items have been collected (item memory settings). If the corresponding bits are set (items are collected), those objects will not be reloaded.
The tables are split up like this: every screen number has 4 bytes designated to it. The first byte is for the left half of the top subscreen, the second byte for the right half, and the third and fourth are for the bottom subscreen. Each vertical column within these regions uses one bit.

Item memory setting 3 doesn't actually exist in the original game, but LM still allows you to select it. As of LM 1.8, it is apparently possible to use item memory setting 3 as well, but it only means "make everything respawn" and doesn't remember anything.
$7E:1B782 bytesOverworldThis is used on the overworld to determine if a hard coded path should be processed. This flag is set and read in 16-bit mode, it can have the values #$0000 or #$0001. #$0001 means that a hard coded path/event is processed.
$7E:1B7A2 bytesOverworldThis address serves as index to $04:9086 which is used to get what hard coded tile to use for the current tile the player is walking on. This address plus one is also the index to $04:90CA.
$7E:1B7C1 byteOverworldAccumulating fraction bits for the Layer 1 X speed on the overworld, used when the camera returns to the player after having been in free scrolling mode. This address handles incrementing the Layer 1 X position when it overflows.
$7E:1B7D1 byteOverworldAccumulating fraction bits for the Layer 1 Y speed on the overworld, used when the camera returns to the player after having been in free scrolling mode. This address handles incrementing the Layer 1 Y position when it overflows.
$7E:1B7E1 byteOverworldThis address is a mirror of $7E:13C1 (tile the player is on in the overworld) and it's used to check whether the player is walking on a complementive corner tile (those small corners used with the paths, a list of all tile numbers can be found at $04:A03C) while settling on a level tile.
Appears to be designed to allow for (very) curvy paths leading to level tiles, found in for example Star World and the path to the warp pipe from Chocolate Island 2.
Depending on the complementive corner tile in question, the player image and position are altered when settling on a level tile.
$7E:1B7F1 byteEmptyEmpty. Cleared on reset, titlescreen load, overworld load and titlescreen load.

This address could be regarded as the "high byte" of $7E:1B7E, however it is never used (AND #$00FF is applied) and only stored to on the overworld. Thus, it is safe to use this address as free RAM outside of the overworld.
$7E:1B801 byteOverworldPlayer is on a climbing tile flag.
#$00 = Player is not on a climbing tile.
#$01 = Player is on a climbing tile.
$7E:1B811 byteShould be 00Uses in 16-bit loads to $7E:1B80, and otherwise #$00 is always stored here. Using this outside of the overworld is fine, however. Cleared on reset, titlescreen load and overworld load.
$7E:1B821 byteOverworldX position on-screen of the current castle/fortress destruction explosion. Also denotes X position on-screen of the appearing event sprite tiles.
$7E:1B831 byteOverworldY position on-screen of the current castle/fortress destruction explosion. Also denotes Y position on-screen of the appearing event sprite tiles.
$7E:1B842 bytesTimerThe 16-bit address is used to determine whether the large event tiles (6x6) are uploaded or the small event tiles (2x2). It's #$0900 or higher if it's the latter. It gets its values from the table at $04:DD8D.

Solely $7E:1B84 is a timer used for handling castle/fortress destruction on the overworld, as well as the timer used for a level tile being revealed (the flash sprite).
$7E:1B861 bytePointerPointer to the various routines that handle overworld events being activated. The pointers are located at $04E577.

#$00 = Check if an event needs to run, and check if a "explosion" is needed.
#$01 = Show the castle/P-switch "explosion".
#$02 = Set up the event index counters.
#$03 = Get layer 2 event tile.
#$04 = Animate the fade in for layer 2 tile.
#$05 = Get layer 1 event tile.
#$06 = Animate the fade in for layer 1 tile.
#$07 = End of event, marks event as run.
$7E:1B871 bytePointerOverworld continue/save prompt trigger.

#$01 = Init of game over, continue screen. If 2-Player flag is on ($7E:0DB2 is non-zero), go to following value.
#$02 = Preparing $7E:1B8A, go to following value, fading into the 'swap lives between players' screen.
#$03 = Swap lives between players screen.
#$04 = Fading out of the 'swap lives between players' screen.
#$05 = Init of save prompt.
#$06 = Fading into save prompt.
#$07 = Save prompt screen.
#$08 = Fading out of save prompt.
$7E:1B881 byteFlagMessage box expanding (#$00) or shrinking (#$01) flag. Also used in various other instances such as the save prompt on the overworld.
$7E:1B891 byteMisc.Message box expansion and shrinking timer/size. Note: Setting expanding timer above #$04 will cause the message to be blank. Also used in various other instances such as the save prompt on the overworld.
$7E:1B8A1 byteFlagWhich direction to point the arrow on the give lives menu.
#$00 = Point to Luigi's direction, give him lives.
#$01 = Point to Mario's direction, give him lives.
$7E:1B8B1 byteOverworldA timer that increments every frame, used for the blinking arrow on the give lives (between players) screen. If $7E:1B8B & #$18 gives a non-zero value, the arrow is shown. If the result of that is zero instead, a blank is shown.
$7E:1B8C1 byteFlagUsed as a flag to determine whether you are at the first or second iteration of the pointer to $04:DB18 ($7E:1DE8 is #$00 or #$06). #$02 is fully cleared, #$00 is fully blacked out. Needed to make the windowing HDMA fade out at first, then fade back in when the submap switching process is done.
$7E:1B8D2 bytesOverworldUsed in the calculation of the X positions for the overworld fade in/out windowing HDMA transitions. Removing stores to this address will make it only active in the Y direction. Starts at #$0000 (completely black) and ends at #$7000 (cleared, except for the sides which are hidden under the overworld border).
$7E:1B8F2 bytesOverworldUsed in the calculation of the Y positions for the overworld fade in/out windowing HDMA transitions. Removing stores to this address will make it only active in the X direction. Starts at #$0000 (completely black) and ends at #$5400 (cleared).
$7E:1B911 byteCounterBlinking cursor frame counter (file select, save prompt, etc.)
$7E:1B921 byteMisc.Position of the cursor on the title screen menus.
$7E:1B931 byteMisc.Use Secondary Exits flag. This is likely not used when Lunar Magic is done with the ROM.
$7E:1B941 byteFlagDisable bonus game sprite from being loaded flag. If not zero, the bonus game sprite will terminate itself in the init routine.
$7E:1B951 byteFlagThis flag is set to #$02 as soon as the Yoshi wings animation (#$08 of $7E:0071) brings you above the screen ($7E:0080 = #$FFC0), which means you will be heading for level C8 or 1C8.
A bycoming effect is that Yoshi will have wings in that level, and that you can't die from falling into the depths. Moreover, as you enter the level, Yoshi will always be blue. It's also the only way you can "die" with Yoshi without losing him on the overworld.
$7E:1B961 byteFlagSide exit enabled flag. #$00 = Disabled; #$01 = enabled.
$7E:1B972 bytesEmptyThis address is only stored to once in all of SMW, and that's in code that was originally never used (the fifth scrolling command, sprite #$EC). It was going to have some unknown use when you reached the last screen of the level. Because SMW never executes the code that writes to it (unless that command is used), this is a safe address to use.

Cleared on reset, titlescreen load, overworld load and cutscene load.
$7E:1B991 byteFlagUsed in goal point marching: flag to show peace image flag and handling the fade-out ellipse.
#$00 = Don't show peace image yet, don't handle fade-out ellipse.
#$01 = Show peace image and handle fade-out ellipse.
$7E:1B9A1 byteGraphicsBackground Scroll Activated flag. The unused orange platform (sprite 5E) sets it to #$01, and the flying turn blocks (sprite C1) set it to #$08.
If set, triggers the fast BG scroll sprite, as well as making the flying turn blocks move.
$7E:1B9B1 byteFlagUsed to check if Yoshi should not reappear for the next room (castle intro cutscene and the likes). These cutscenes set the flag to #$01, which makes Yoshi not reappear for the next room, but it does keep Yoshi on the overworld. Automatically set to #$00 when the overworld is loaded again. One could use this RAM address to disable Yoshi for one room, but re-enable him in the next again.
$7E:1B9C1 byteOverworldPlayer is entering a warp pipe/star flag.
#$00 = No; #$01 = Yes.
$7E:1B9D1 byteTimerTime to wait until the rising/sinking tide starts rising/sinking again (after the "no movement" interval).
$7E:1B9E1 byteFlagMusic has to be altered on the overworld during a 2-player game flag.
#$00 = Do not alter music.
#$01 = Do alter music.
It's set when the players are switching, but also when you go from submap to submap, the latter even when it's a 1-player game. But this flag is never read if it's a 1-player game.
$7E:1B9F1 byteCounterNumber of broken tile pairs in the Reznor battle.
$7E:1BA01 byteOverworldThe overworld uses this address to shake the ground as the Valley of Bowser entrance rises from the depths, by setting this address to #$FF. It also changes the music and adds some sound effects. It's a timer, but it only decrements as long as $7E:13D9 is #$02.
$7E:1BA11 byteMisc.One of two screen numbers used in the level loading routine. This one points to where the next tile will be placed and is often changed inside an object loading code. The other screen number is $7E:1928.
Although referenced at $03:DF58 (Bowser's code), its value isn't actually used there.
$7E:1BA21 byteSpritesBits 0-6 form the index to the tilemap for the Mode 7 bosses, which read from the table at $03:D9DE, 16 bytes per image. Bit 7 is used to control the X-flip of the tiles. What actually happens then, is that the odd graphic tile is used instead of the even graphic tile, since all Mode 7 graphics are decompressed into a regular and flipped tile. For example, tile #$01 in VRAM is the same as tile #$00 except it's flipped.
$7E:1BA364 bytesGraphicsA buffer that is used for uploading Mode 7 tile data to VRAM in non-platform Mode 7 bosses. The buffer is enough to fill in an entire 8x8 tile, as each 8x8 tile requires 64 bytes in Mode 7 8bpp.

$7E:1BB2 is also used as a buffer in the graphics upload routine. The use seems to be for converting 3bpp to 4bpp format.

$7E:1BBC is used as a flag in the graphics upload routine to alter 3bpp to 4bpp conversion depending on the graphics file that is being uploaded.
$7E:1BE31 byteMisc.Layer 3 settings.
#$00 = No Layer 3; #$01 = Low and high tide; #$02 = Low tide only; #$03 = Tileset specific image.
$7E:1BE42 bytesBlocksVRAM address to start uploading data from the table at $7E:1BE6. It's used for layer 1. Big endian.
$7E:1BE6256 bytesBlocksWhich tiles should be used for each row of 16x16 tiles, 2 bytes per 8x8 tile, used while scrolling layer 1 (loading new tiles). In horizontal levels, $7E:1BE6-$7E:1C65 form the left column of 8x8 tiles while $7E:1C66-$7E:1CE5 form the right column of 8x8 tiles. On the overworld and in vertical levels, $7E:1BE6-$7E:1C65 form the upper row of 8x8 tiles, while $7E:1C66-$7E:1CE5 form the bottom row of 8x8 tiles.
$7E:1CE62 bytesBlocksVRAM address to start uploading data from the table at $7E:1CE8. It's used for layer 2. Big endian.
$7E:1CE8256 bytesBlocksWhich tiles should be used for each row of 16x16 tiles, 2 bytes per 8x8 tile, used while scrolling interactive layer 2 (loading new tiles). In horizontal levels, $7E:1CE8-$7E:1D77 form the left column of 8x8 tiles while $7E:1D78-$7E:1DE7 form the right column of 8x8 tiles. On the overworld and in vertical levels, $7E:1CE8-$7E:1D77 form the upper row of 8x8 tiles, while $7E:1D78-$7E:1DE7 form the bottom row of 8x8 tiles.
$7E:1DE81 byteOverworldThis is a pointer index used for various tasks during the submap switching scene ($7E:13D9 is #$0A), possible values are:
#$00 = Commence with handling windowing HDMA.
#$01-04 = Update layer 1 on the overworld.
#$05 = Handle palette loading.
#$06 = End with windowing HDMA.
#$07 = Terminate submap switching phase by storing #$04 to $7E:13D9, make eventual submap changes (for example, what music to play).
$7E:1DE91 byteCounterEnding enemy presentation screen number at the end of the credits. Counts up to #$0C, which holds the last set of enemies (the Koopa Kids and Bowser).
$7E:1DEA1 byteOverworldOverworld event to run at level end. #$FF means that no event will be run.
$7E:1DEB2 bytesOverworldEvent tile to load to the overworld. A starting value is set to this at level end, and it increments until it reaches the value of $7E:1DED.
$7E:1DED2 bytesOverworldLast event tile to load to the overworld during a given event, set at level end.
$7E:1DEF1 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:1DF02 bytesOverworld$7E:1DF0 - X position of the camera when using the overworld scroll function, low byte.
$7E:1DF1 - X position of the camera when using the overworld scroll function, high byte.
These values are only used to determine which way the camera should go to get back to the player.
$7E:1DF22 bytesOverworld$7E:1DF2 - Y position of the camera when using the overworld scroll function, low byte.
$7E:1DF3 - Y position of the camera when using the overworld scroll function, high byte.
These values are only used to determine which way the camera should go to get back to the player.
$7E:1DF41 byteMisc.Index to intro control sequence data table.
$7E:1DF51 byteTimerFrame counter to use the same controller bits for intro sequence. It's also used as timer to determine how long the Nintendo Presents screen will remain active, and a timer for how long to require the player to wait before he can dismiss the intro message.
$7E:1DF61 byteOverworldStar and Warp pipe handler. It's an index of the current star/warp pipe tile you're standing on, multiplied by two. With this index, the destination coordinates are determined.
$7E:1DF71 bytePlayerUsed by the Star Road warp star on the overworld. Determines the speed with which the player is launched in the air during warping. The higher the value, the faster he gets launched in the air. By default the maximum is #$04, though this cap can be altered by editing $04:9E70/0x22070.
$7E:1DF81 byteTimerUsed by the Star Road warp star tile on the overworld. It controls how long the player has to stay on the ground during the warp, before he actually gets launched in the air. The player gets airborne as soon as the timer hits #$31 (as it increments).
$7E:1DF94 bytesI/OSPC700 I/O Ports. Write values to play music/SFX. A list of values can be found here.
$7E:1DFD2 bytesEmptyEmpty. Cleared on reset, titlescreen, overworld and level load (the latter two due to new music banks being uploaded). Note that $7E:1DFD is cleared twice, due to a 16-bit store to $7E:1DFC - at $04:969F/0x2189F (LDA #$0023 : STA $1DFC) and $05:C75D/0x2C95D (LDA #$0009 : STA $1DFC).
$7E:1DFF1 byteI/OA copy of $7E:1DFB, the music register. It contains the last value written to SNES register $2142. Probably used to keep the music playing between areas.
$7E:1E001 byteEmptyEmpty. Cleared on reset, titlescreen, overworld and level load (the latter two due to new music banks being uploaded).
$7E:1E011 byteEmptyEmpty, unused. Cleared on reset and titlescreen load. However, if the debug code at $00:CC86/0x4E86 is enabled, this address allows you to be in free roaming mode: the player can move in any direction, without being affected by objects or sprites. #$00 = none; #$01 = dash immediately; #$02 = free roaming.
$7E:1E0220 bytesSpritesCluster sprite Y position, low byte.
$7E:1E1620 bytesSpritesCluster sprite X position, low byte.
$7E:1E2A20 bytesSpritesCluster sprite Y position, high byte.
$7E:1E3E20 bytesSpritesCluster sprite X position, high byte.
$7E:1E5220 bytesSpritesCluster sprite table. Used as:
- Y position of reappearing Boos, frame 1. Not relative to screen border.
- Y speed for Boos from ghost ceiling and death bats.
$7E:1E6620 bytesSpritesCluster sprite table. Used as:
- X position of reappearing Boos, frame 1. Not relative to screen border.
- X speed for Boos from ghost ceiling and death bats.
$7E:1E7A20 bytesSpritesCluster sprite table. Used as:
- Y position of reappearing Boos, frame 2. Not relative to screen border.
- Accumulating fraction bits for fixed point Y speed of death bats.
$7E:1E8E20 bytesSpritesCluster sprite table. Used as:
- X position of reappearing Boos, frame 2. Not relative to screen border.
$7E:1EA296 bytesOverworldOverworld level setting flags, location within the table corresponds to $7E:13BF. Format: bmesudlr.
b = level is beaten.
m = midway point has been passed.
e = no entry if level already passed.
s = open Save Prompt when level is beaten.
u = enable walking upwards.
d = enable walking downwards.
l = enable walking leftwards.
r = enable walking rightwards.

Setting $7E:1EEB to #$83 will enable the special stage features (autumn overworld palettes, etc.) in the ORIGINAL game.
$7E:1F0215 bytesOverworldOverworld event flags. The table works bitwise - if a bit corresponding to an event is set, that event has been run. If it's clear, it hasn't been run yet.

There's a little formula for finding out what event number corresponds to which bit. Take the event number, divide by eight and use that as index for this table. Take the remainder, and that number (0-7) is the position of the bit inside the indexed byte (left to right).
Example: Finding event #$13. Division by eight turns #$02 as index (so $7E:1F04) and #$03 as the remainder. It's bit 4 of $7E:1F04 (xxxx xxxx). Not bit 3, because of the "reversed" AND tables that are used with this table - bits are not counted from right to left, but from left to right instead.
$7E:1F111 byteOverworldCurrent submap for Mario. #$00 = Main map; #$01 = Yoshi's Island; #$02 = Vanilla Dome; #$03 = Forest of Illusion; #$04 = Valley of Bowser; #$05 = Special World; #$06 = Star World.
$7E:1F121 byteOverworldCurrent submap for Luigi. #$00 = Main map; #$01 = Yoshi's Island; #$02 = Vanilla Dome; #$03 = Forest of Illusion; #$04 = Valley of Bowser; #$05 = Special World; #$06 = Star World.
$7E:1F134 bytesPlayerPlayer animation on the overworld.

#$00 = Move up.
#$02 = Move down, stand still (facing the screen).
#$04 = Move left.
#$06 = Move right.
#$08 = Move up while in water.
#$0A = Move down while in water, stand still while in water (facing the screen).
#$0C = Move left while in water.
#$0E = Move right while in water.
#$10 = Sticking hand out (entering level).
#$12 = Sticking hand out while in the water (entering level).
#$14 = Climb ladder/vine, only used when descending path tile #$41.
#$16 = Climb ladder/vine, regular.

$7E:1F13/4 form Mario's image and $7E:1F15/6 form Luigi's image. Note that the high bytes of the two (bytes 2 and 4, $7E:1F14 and $7E:1F16) are actually unused.
$7E:1F172 bytesPlayerOverworld X position of Mario.
$7E:1F192 bytesPlayerOverworld Y position of Mario.
$7E:1F1B2 bytesPlayerOverworld X position of Luigi.
$7E:1F1D2 bytesPlayerOverworld Y position of Luigi.
$7E:1F1F2 bytesPlayerPointer to Mario's overworld X position. Value is Mario's regular overworld X position divided by #$10 (#16).
$7E:1F212 bytesPlayerPointer to Mario's overworld Y position. Value is Mario's regular overworld Y position divided by #$10 (#16).
$7E:1F232 bytesPlayerPointer to Luigi's overworld X position. Value is Luigi's regular overworld X position divided by #$10 (#16).
$7E:1F252 bytesPlayerPointer to Luigi's overworld Y position. Value is Luigi's regular overworld Y position divided by #$10 (#16).
$7E:1F274 bytesFlagSwitch block flags (Green, Yellow, Blue and Red). #$00 = off; only outlines, #$01-#$FF = on; solid.
$7E:1F2B3 bytesEmptyEmpty. Unlike most empty addresses, this one is saved to and loaded from SRAM, so it's effectively cleared only at reset and new game.
$7E:1F2E1 byteCounterNumber of events triggered. Can be used as a levels beaten counter.
$7E:1F2F12 bytesFlag"Collected five or more Yoshi Coins" flags, for each level.
Each seperate byte represents the values for 8 levels, with each bit acting as a flag for a given level.
If a bit is set, no Yoshi Coins will reappear in that level.

The format is as following: $7E:13BF (the level number) divided by 8 (3x LSR) provides the index per byte into this table; that's because 8 levels are represented by one byte, 1 bit per level.
For each byte, the level modulo 8 (AND #$07) is the index to the bit, and said index gets the corresponding bit from an AND table at $05:B35B.
That bit will be the flag for the level.
0 = clear bit, less than five Yoshi Coins collected; 1 = set bit, five or more Yoshi Coins collected.

An example: checking if five or more Yoshi Coins were collected in level 105. First, convert to $7E:13BF format. #$29 indicates you're in level 105.
Divide that by 8 to get the byte index - #$29 divided by 8 is five (rounded), so the sixth byte is the correct index.
After that, apply modulo 8 on #$29 - AND #$07 - and you'll end up with #$01.
This value is then used to index the aforementioned AND table, which gets the corresponding bit - in this case, #$40, bit 6.
So if bit 6 of the sixth byte ($7E:1F34) in the table is set, five or more Yoshi Coins have been collected in level 105.
$7E:1F3B1 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:1F3C12 bytesFlag"Collected invisible 1-Up flags", for each level.
Each seperate byte represents the values for 8 levels, with each bit acting as a flag for a given level.
If a bit is set, no invisible 1-Up will reappear in that level.

The format is as following: $7E:13BF (the level number) divided by 8 (3x LSR) provides the index per byte into this table; that's because 8 levels are represented by one byte, 1 bit per level.
For each byte, the level modulo 8 (AND #$07) is the index to the bit, and said index gets the corresponding bit from an AND table at $05:B35B.
That bit will be the flag for the level.
0 = clear bit, invisible 1-Up not collected; 1 = set bit, invisible 1-Up collected.

An example: checking if an invisible 1-Up was collected in level 105. First, convert to $7E:13BF format. #$29 indicates you're in level 105.
Divide that by 8 to get the byte index - #$29 divided by 8 is five (rounded), so the sixth byte is the correct index.
After that, apply modulo 8 on #$29 - AND #$07 - and you'll end up with #$01.
This value is then used to index the aforementioned AND table, which gets the corresponding bit - in this case, #$40, bit 6.
So if bit 6 of the sixth byte ($7E:1F41) in the table is set, an invisible 1-Up has been collected in level 105.
$7E:1F481 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:1F49141 bytesOverworldBuffer for $7E:1EA2-$7E:1F2E. SRAM transfer of those bytes goes via this buffer.
$7E:1FD612 bytesSpritesUnused sprite table, cleared at individual sprite load. (1 slot each.)
$7E:1FE212 bytesSpritesTime to disable sprite contact with cape. Table decrements once per frame.
$7E:1FEE12 bytesFlag"Collected 3-Up moon" flags, for each level.
Each seperate byte represents the values for 8 levels, with each bit acting as a flag for a given level.
If a bit is set, no 3-Up will reappear in that level.

The format is as following: $7E:13BF (the level number) divided by 8 (3x LSR) provides the index per byte into this table; that's because 8 levels are represented by one byte, 1 bit per level.
For each byte, the level modulo 8 (AND #$07) is the index to the bit, and said index gets the corresponding bit from an AND table.
That bit will be the flag for the level.
0 = clear bit, no 3-Up moon collected; 1 = set bit, 3-Up moon collected.

An example: checking if a 3-Up moon was collected in level 105. First, convert to $7E:13BF format. #$29 indicates you're in level 105.
Divide that by 8 to get the byte index - #$29 divided by 8 is five (rounded), so the sixth byte is the correct index.
After that, apply modulo 8 on #$29 - AND #$07 - and you'll end up with #$01.
This value is then used to index the aforementioned AND table, which gets the corresponding bit - in this case, #$40, bit 6.
So if bit 6 of the sixth byte ($7E:1FF3) in the table is set, a 3-Up moon has been collected in level 105.
$7E:1FFA1 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:1FFB1 bytePalettesLightning flash color index. Only #$00-#$07 are actually used. #$07 is the brightest shade of white, the lower the value, the closer to black it gets. This address gets its value from the table at $04:F700.
$7E:1FFC1 byteTimerHow long to wait until the next lightning flash is generated. Gets its value from a table at $04:F6F8, which in turn gets its index from a "random" value in the routine of $04:F708 & #$07. This address decrements after the previous lightning flash has ended.
$7E:1FFD1 byteTimerHow long a lightning flash should last, per color change. Is set to #$08 frames for the first color flash (the most bright one), then it's set to #$04 frames for the following color flashes which are becoming less and less bright. Decrements every frame.
$7E:1FFE1 byteFlagWhether to update the background in the first part of the credits, or not.
#$00 = Don't update the background.
#$01 = Do update the background.
$7E:1FFF1 byteEmptyEmpty. Cleared on reset and titlescreen load.
$7E:200023,808 bytesGraphicsGFX32 decompressed. Written while the Nintendo Presents logo is shown and never modified after that, but often read.
$7E:7D0012,288 bytesGraphicsGFX33 decompressed. Written while the Nintendo Presents logo is shown and never modified after that, but often read.
$7E:AD003,072 bytesGraphicsGFX file decompression buffer. Decompressed as 3bpp (3kb) for unexpanded GFX and as 4bpp for expanded.
Also used for Lunar Magic's extra animated tile space.
$7E:B900 is also used as additional buffer kilobyte.
$7E:B9001,024 bytesBlocksLayer 2 tilemap, low byte. Format: First two 16x27 rectangles, then 160 25s that are never read.
$7E:BD001,024 bytesBlocksLayer 2 tilemap, high byte; same format as $7E:B900. Writing to this area with the gfx+2 patch installed generates BG garbage and should never be done.
$7E:C1001,408 bytesEmptyEmpty, untouched RAM on an unhacked ROM, potentially occupied with extended animated tile graphics in a hacked ROM.
$7E:C68096 bytesMisc.Tilemap of Mode 7 bosses (Ludwig, Roy, Morton and Bowser).
$7E:C6E0288 bytesEmptyEmpty, untouched RAM on an unhacked ROM, potentially occupied with extended animated tile graphics in a hacked ROM.
$7E:C80014,336 bytesBlocksMap16 Low Byte Table ($7E:FE00-$7E:FFFF are unused in horizontal levels, but used in vertical ones). In the overworld, $7E:D000-$7E:D3FF is used as a table that contains translevel numbers for the big world map (the one with Donut Plains and Chocolate Island). If you divide the map into 16x16 blocks, then this table connects each block to a level. To interpret the value, see RAM $7E:13BF.
To index this table, use RAM $7E:1F1F and $7E:1F21 to find Mario, or use RAM $7E:1F23 and RAM $7E:1F25 to find Luigi.
X position / 16: %---- ---- ---X xxxx
Y position / 16: %---- ---- ---Y yyyy
index to this table: %---- --YX yyyy xxxx.
$7E:D400-$7E:D7FF is used for the submaps as a whole and has the same kind of format.
$7E:E400-$7E:EBFF is used for uploading the layer 1 tile map to VRAM in 2KB chunks. One chunk is uploaded per frame for four frames during overworld and submap transition. Data is refreshed after each DMA.
$7F:000016,384 bytesOverworldLayer 2 event tilemap of the overworld. $7F:0D00-$7F:3FFF is empty (untouched) RAM on a vanilla ROM, but LM uses it to hold the expanded layer 2 event tilemap on a hacked ROM.
LM also uses $7F:0000 and upwards to store title screen movement (three bytes every time a key is pressed or released, or if the same keys are held for #$FF frames), and $7F:0B44-$7F:1343 are also used as buffer for dynamic sprite graphics because of them being uploaded during V-Blank.
$7F:400016,384 bytesOverworldThe Layer 2 tilemap of the whole overworld (including submaps, starting at $7F:6000). It does NOT affect the event tiles. The tiles are also 8x8. The tilemap starts from the top left corner of the main overworld. Format is as following:
[Tile number], [Tile properties]
This table is also used for a RAM buffer for the credit cutscene backgrounds.
$7F:8000387 bytesSpritesUnrolled loop which, each frame, writes to OAM to put all sprites outside the screen.
$7F:8183504 bytesEmptyEmpty, untouched RAM.
~420 bytes used in LM 1.70+ for VRAM modification.
$7F:837B2 bytesMisc.Used for indexing the stripe image table.
$7F:837D5,118 bytesMisc.VRAM upload table (In stripe image). Not all of it is used during normal gameplay, so $7F:8600+ shouldn't be dangerous to use.
$7F:977B768 bytesMisc.Mario/Luigi Start, Game Over, Time Up etc. messages Graphics, decompressed.
$7F:9A7B512 bytesSpritesPosition of Wiggler's segments.
$7F:9C7B11,141 bytesEmptyEmpty RAM which is entirely untouched.
This area is used by many SMW hacking tools, so hacked ROMs are likely to use some of the addresses found here. A list of RAM addresses used by several SMW hacking tools can be found here.
A few more addresses are documented here. [TODO: Merge those into SMWiki once it unlocks.]
$7F:C80014,336 bytesBlocksMap16 high byte table. $7F:FE00-$7F:FFFF are unused in horizontal levels, but used in vertical ones.
$7F:FFF8 through $7F:FFFD is also used by Lunar Magic's title screen recording ASM.

The purpose of this site is not to distribute copyrighted material, but to honor one of our favourite games.

Copyright © 2005 - 2014 - SMW Central
Legal Information - Privacy Policy - Link To Us


Total queries: 28

Menu

Affiliates

  • Talkhaus
  • SMBX Community
  • GTx0
  • Super Luigi Bros
  • ROMhacking.net
  • MFGG