Banner
The Base Rom Level Design Contest has begun! Visit its contest subforum to learn more!
Views: 771,415,081
Time:
13 users online: Aguni_, Epic_Manky, Evernn, GbreezeSunset, h.carrell, Isikoro, JakeTheYachtsman, Kagami Hiiragi, MiracleWater, OEOTeam, Parahax, Ultima, xyz600sp - Guests: 25 - Bots: 62Users: 40,525 (1,859 active)
Latest: XCB
Tip: Read all of the tips by looking here.Not logged in.
SMW Memory Map
Displaying 74 out of 824 addresses. Show Waiting Addresses (1)
Filter
Link
Address
Hexadecimal number for a partial address. 6-digit number for a full address. Use - to denote a range. Use , to list more than one address.
Length
Type
Enable JavaScript to use multiple regions.
Region
Hold control to select multiple. Check "All" to select all at once.

Type
Description
Separate each individual keyword with spaces. Surround a phrase with quotes to look for the exact phrase, or with / to use a PCRE regular expression. Prepend with - to exclude a keyword or phrase, with + to require a whole word or phrase, or with -+ to exclude a whole word or phrase. ? matches any character, * matches any amount of characters.
 
Pages: « 1 2 3 4 5 6 » Per Page: 25 50 75 100 150 500 All
RAM Address Length Type Description Details
$7E1DE9 1 byte Overworld If non-zero, indicates an event should be activated on overworld load (otherwise, event handling is skipped). The 'Course Clear!' and Switch Palace message box routines set this just before loading the overworld, and it's set to zero again when the event finishes executing.

Additionally, the enemy credits use this as the current screen number. Counts up to #$0C, which has the last set of enemies (the Koopa Kids and Bowser).
$7E1DEA 1 byte Overworld Overworld event to run at level end. #$FF means that no event will be run.
$7E1DEB 2 bytes Overworld Event 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.
$7E1DED 2 bytes Overworld Last event tile to load to the overworld during a given event, set at level end.
$7E1DEF 1 byte Empty Empty. Cleared on reset and titlescreen load.
$7E1DF0 2 bytes Overworld $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.
$7E1DF2 2 bytes Overworld $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.
$7E1DF4 1 byte Misc. Index to intro control sequence data table.
$7E1DF5 1 byte Timer Timer to used for multiple purposes:
- How long a particular input during the intro sequence will remain pressed.
- How long the Nintendo Presents screen will remain active.
- How long a Switch Palace message will remain active.
- How long the player has to wait before he can dismiss the intro message.
$7E1DF6 1 byte Overworld Star 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.
$7E1DF7 1 byte Player Used 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.
$7E1DF8 1 byte Timer Used 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).
$7E1DF9 4 bytes I/O SPC700 I/O Ports. Write values to play music/SFX. A list of values can be found here.
$7E1DFD 2 bytes Empty Empty. 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).
$7E1DFF 1 byte I/O A 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.
$7E1E00 1 byte Empty Empty. Cleared on reset, titlescreen, overworld and level load (the latter two due to new music banks being uploaded).
$7E1E01 1 byte Empty Empty, 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.
$7E1E02 20 bytes Sprites Cluster sprite Y position, low byte.
$7E1E16 20 bytes Sprites Cluster sprite X position, low byte.
$7E1E2A 20 bytes Sprites Cluster sprite Y position, high byte.
$7E1E3E 20 bytes Sprites Cluster sprite X position, high byte.
$7E1E52 20 bytes Sprites Cluster 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.
$7E1E66 20 bytes Sprites Cluster 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.
$7E1E7A 20 bytes Sprites Cluster 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.
$7E1E8E 20 bytes Sprites Cluster sprite table. Used as:
- X position of reappearing Boos, frame 2. Not relative to screen border.
$7E1EA2 96 bytes Overworld Overworld 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 the high bit of $7E:1EEB will enable the special stage features (autumn overworld palettes, etc.) in the ORIGINAL game.
$7E1F02 15 bytes Overworld Overworld 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.
$7E1F11 1 byte Overworld Current 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.
$7E1F12 1 byte Overworld Current 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.
$7E1F13 4 bytes Player Player 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.
$7E1F17 2 bytes Player Overworld X position of Mario.
$7E1F19 2 bytes Player Overworld Y position of Mario.
$7E1F1B 2 bytes Player Overworld X position of Luigi.
$7E1F1D 2 bytes Player Overworld Y position of Luigi.
$7E1F1F 2 bytes Player Pointer to Mario's overworld X position. Value is Mario's regular overworld X position divided by #$10 (#16).
$7E1F21 2 bytes Player Pointer to Mario's overworld Y position. Value is Mario's regular overworld Y position divided by #$10 (#16).
$7E1F23 2 bytes Player Pointer to Luigi's overworld X position. Value is Luigi's regular overworld X position divided by #$10 (#16).
$7E1F25 2 bytes Player Pointer to Luigi's overworld Y position. Value is Luigi's regular overworld Y position divided by #$10 (#16).
$7E1F27 4 bytes Flag Switch palace block flags (Green, Yellow, Blue and Red). #$00 = off; only outlines, #$01-#$FF = on; solid.
$7E1F2B 3 bytes Empty Empty. Unlike most empty addresses, this one is saved to and loaded from SRAM, so it's effectively cleared only at reset and new game.
$7E1F2E 1 byte Counter Number of events triggered. Can be used as a levels beaten counter.
$7E1F2F 12 bytes Flag "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.
$7E1F3B 1 byte Empty Empty. Cleared on reset, titlescreen load and at the game over screen.
$7E1F3C 12 bytes Flag "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.
$7E1F48 1 byte Empty Empty. Cleared on reset and titlescreen load.
$7E1F49 141 bytes Overworld Buffer for $7E:1EA2-$7E:1F2E. SRAM transfer of those bytes goes via this buffer.
$7E1FD6 12 bytes Sprites Unused sprite table, cleared at individual sprite load. (1 slot each.)
$7E1FE2 12 bytes Sprites Sprite table that decrements once per frame, and is used for multiple purposes. All standard sprites have it briefly set after spawning.

Primarily, it disables water splashes from showing when the sprite enter or exits water, and disables interaction for the sprite with capespins, quake sprites, cape smashes, and net punches. Some sprites use it for miscellaneous purposes, as well. More information can be found here.
$7E1FEE 12 bytes Flag "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.
$7E1FFA 1 byte Empty Empty. Cleared on reset and titlescreen load.
$7E1FFB 1 byte Palettes Lightning 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.
$7E1FFC 1 byte Timer How 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.
$7E1FFD 1 byte Timer How 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.
$7E1FFE 1 byte Flag Whether to update the background in the first part of the credits, or not.
#$00 = Don't update the background.
#$01 = Do update the background.
$7E1FFF 1 byte Empty Empty. Cleared on reset and titlescreen load.
$7E2000 23808 bytes Graphics GFX32 decompressed. Written while the Nintendo Presents logo is shown and never modified after that, but often read.
$7E7D00 12288 bytes Graphics GFX33 decompressed. Written while the Nintendo Presents logo is shown and never modified after that, but often read.
$7EAD00 3072 bytes Graphics GFX 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.
$7EB900 1024 bytes Blocks Layer 2 tilemap, low byte. Format: First two 16x27 rectangles, then 160 25s that are never read.

Also used on the overworld during the switch block events for various purposes:
$7EB900-$7EB927 = Switch block X position, high byte
$7EB928-$7EB94F = Switch block Y position, high byte
$7EB950-$7EB977 = Switch block Z position, high byte
$7EB978-$7EB99F = Switch block X position, low byte
$7EB9A0-$7EB9C7 = Switch block Y position, low byte
$7EB9C8-$7EB9EF = Switch block Z position, low byte
$7EB9F0-$7EBA17 = Switch block X speed
$7EBA18-$7EBA3F = Switch block Y speed
$7EBA40-$7EBA67 = Switch block Z speed
$7EBA68-$7EBA8F = Accumulating fraction bits for fixed point switch block X speed
$7EBA90-$7EBAB7 = Accumulating fraction bits for fixed point switch block Y speed
$7EBAB8-$7EBADF = Accumulating fraction bits for fixed point switch block Z speed
$7EBD00 1024 bytes Blocks Layer 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.
$7EC100 1408 bytes Empty Empty, untouched RAM on an unhacked ROM. Lunar Magic uses it to store ExAnimation graphics data if the ExAnimation file is larger than 0x1400 bytes. Maximum size is 0x1B00, or enough for 0xD8 4bpp 8x8 tiles, in which case all of $7E:AD00-$7E:C7FF is used.
$7EC680 96 bytes Misc. Tilemap of Mode 7 bosses (Ludwig, Roy, Morton and Bowser).
$7EC6E0 288 bytes Empty Empty, untouched RAM on an unhacked ROM. In a hacked ROM, it may be occupied by ExAnimation data (see $7E:C100).
$7EC800 14336 bytes Blocks Map16 Low Byte Table.
For horizontal levels, $1B0 tiles per screen, where each screen can be indexed using the format ------y yyyyxxxx. $7E:FE00-$7E:FFFF are unused.
For vertical levels, $200 bytes per screen, with the format --sssssx yyyyxxxx. All bytes are used.
If layer 2 or 3 is interactive in the level, it uses screens 10-1F (0E-1B in vertical levels).

On Lunar Magic version 3+, refer to this document for the blocks format for other level dimensions.


On the overworld:
$7E:C800-$7E:CFFF (2048 ($800) bytes) is used as the Layer 1 tilemap for the overworld.
To index this table, use $7E:1F11, $7E:1F1F, and $7E:1F21 to find Mario, or use $7E:1F12, $7E:1F23, and $7E:1F25 to find Luigi.
X position / 16: %---- ---- ---X xxxx
Y position / 16: %---- ---- ---Y yyyy
Index to this table: %---- -SYX yyyy xxxx
* If Mario is on a submap, the S bit is set.

$7ED000-$7ED7FF (2048 bytes) is used as a table that contains the translevel numbers for every Layer 1 tile, in the format of $7E13BF.
$7ED800-$7EDFFF (2048 bytes) is used as a table that contains the path direction settings for every Layer 1 tile, in the format of $04D678.
$7EE400-$7EEBFF (2048 bytes) is used for uploading the Layer 1 tile map to VRAM in 2KB chunks. One chunk is uploaded per frame for four frames during transitions between the main overworld and submaps. Data is refreshed after each DMA.
$7F0000 16384 bytes Overworld Layer 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.
$7F4000 16384 bytes Overworld The 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.
$7F8000 387 bytes Sprites Unrolled loop which, executed once per each frame, writes to OAM to put all sprites outside the screen (this clears the OAM slots by setting their Y positions to #$F0). Note: Not executed during pause.
$7F8183 504 bytes Empty Empty, untouched RAM.
~420 bytes used in LM 1.70+ for VRAM modification.
$7F837B 2 bytes Misc. Current length of the $7F837D stripe image, excluding the FF terminator. Used to allow two subroutines to write to $7F837D in the same frame.
$7F837D 5118 bytes Misc. VRAM upload table, as a stripe image. Used for things that change in the middle of the screen, such as ? blocks. Uploaded and reset every frame; most frames, it's empty.

Not all of it is used during normal gameplay, so $7F:8600+ shouldn't be dangerous to use.

See here for more info.
$7F977B 768 bytes Misc. Mario/Luigi Start, Game Over, Time Up etc. messages Graphics, decompressed.
$7F9A7B 512 bytes Sprites Position of Wiggler's segments.
$7F9C7B 11141 bytes Empty Empty 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.]
$7FC800 14336 bytes Blocks Map16 high byte table. Same format as $7E:C800.
$7F:FFF8 through $7F:FFFD are also used by Lunar Magic's title screen recording ASM.
Pages: « 1 2 3 4 5 6 » Per Page: 25 50 75 100 150 500 All

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

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


Total queries: 9

Menu

Follow Us On

  • YouTube
  • Twitch
  • Twitter

Affiliates

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