Views: 814,477,306
20 users online: Anorakun, Brolencho, containercore, Correa, DIO DEL METAL, GaGamer, Green Jerry, iIIustrious, JamesD28, JLippe, Lui, Milon Luxy, MrBread,  NeXuS15, OhMuramatsu, Scrambles_, smw_andz, SquidMan_Raps,  Tahixham, UltiMario - Guests: 66 - Bots: 212 Users: 43,024 (2,139 active)
Latest: Enj0ym3nt
Tip: The music in SMW's default castle/ghost house intros and boss battles can be changed by hex-editing. See $0584DB-$0584E2 in the ROM map.Not logged in.
SMW Memory Map - Waiting Addresses
Displaying 12 out of 12 waiting addresses. Show Moderated Addresses
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.
Enable JavaScript to use multiple regions.
Hold control to select multiple. Check "All" to select all at once.

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.
Per Page: 25 50 75 100 150 500 All
RAM Address Length Type Description Details Submitter
$7E0DAA 1 byte I/O Player 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.

This is used so that $16/$0DA6 will only have bits be set for 1 frame.
$7FC00A 1 byte Flag Lunar Magic's animation settings for the current level. Format: tpgl----
0=Enable, 1=Disable
t = SMW's default Tile Animations Flag
p = SMW's default Palette Animations Flag
g = Lunar Magic Global Tile Animations Flag
l = Lunar Magic Level Animations Flag
- = Unused
ROM Address Length Type Description Details Submitter
$008000 100 bytes Overworld ughh will it work??? Yosh boi
$008C81 126 bytes Layer 3 Default status bar tiles info table. Format for each 8x8 tile:

*$008C81-$008C88: top line of status bar (4 top tiles of the item box)
*$008C89-$008CC0: Second line of status bar
*$008CC1-$008CF6: Third line of status bar
*$008CF7-$008CFE: bottom line of status bar (4 bottom tiles of item box)
Table of addresses HammerBrother
$008E1A 480 bytes Layer 3 The routine that updates the values of all the addresses used for the status bar ($0EF9-$0F2F).
$008E28 - Change this address to AD to disable the timer.
$008E2E - Timer speed (USE WITH $008D8B)
$008E5C - Time is Running Out SFX. Change from FF to 00 to stop the music from speeding up when time reaches 99.
$008E6B - [22 06 F6 00] Change to [EA EA EA EA] to not kill Mario when the timer reaches zero. The timer will count down normally and stop at zero, but Mario will not die
$008EDB - Change this and/or $008F09 from 20 12 90 to EA EA EA to disable writing the score to the status bar when playing as Mario and/or Luigi, respectively. Useful if you want to place another counter in place of the score using Smallhacker's Status Bar Editor. Note: This alone will NOT stop writing blank tiles if the first N tiles/bytes at $0F29-$0F2E contains the value #$00 (the "0" graphic). To prevent that, consider using this patch.
$008F2C - How many coins you need to get an 1up (USE WITH $008F37)
$008F2F - [EE E4 18] Change to [EA EA EA] to not gain a life after collecting enough for one.
$008F37 - Number of coins to subtract from the counter when you gain enough for a 1up (Default: $64 (100). Change to [01] to create a coin wallet effect - use with $008F2F.
$008F41 - (Use with $008F45) Maximum life limit, minus one. Warning: Changing this to anything higher than 0x7E (127 lives) will remove the life limit entirely! Also, if you have more than
99 lives, the life counter will appear slightly glitched.
$008F45 - (Use with $008F41) Maximum life limit, minus one. Note that if you have more than 99 lives, the life counter will appear slightly glitched.
$008F62 - Number of bonus stars required to enter bonus game
$008F67 - [8D 25 14] Change to EA EA EA to disable entering bonus game when player has 100 bonus stars.
$008F6F - Amount of bonus stars that will be subtracted when 100 bonus stars are collected. Change to [01] to make 99 the maximum amount of bonus stars you can get - to create a bonus star wallet effect, use with $008F67.
$008F7E - Writes coins to status bar. Changing to [EA EA EA EA EA EA] will disable the coins from being written to the status bar.
$008F95 - [09] The X position of the small bonus star counter in the status bar.
$008FC5 - [20 79 90] Change to EA EA EA to disable the item GFX in the status bar
$008FCE - Length of "LUIGI" text (Status bar)
$008FE7 - [FC](blank tile) Tile used on the status bar when there's no Yoshi coin in that spot.
$008FED - [2E](coin tile) Tile used on the status bar when there is a Yoshi coin in that spot. Change to [FC](blank tile) to visually disable collected Yoshi Coins.
$008FFA 24 bytes Misc. Powers of 10 table for 6-digit* HexDec routine at $009012 used to display the player's score. Note: These are 16-bit words, but are handled as 32-bit subtraction for the low and high words individually.

*SMW displays the score as 7 digits, but the score is actually a 6-digit (decimal) number stored internally, the 7th digit "0" is a static tile not part of this number.
16-bit values HammerBrother
$009012 51 bytes Sprite subroutine (JSR) 6-digit* HexDec subroutine to write a player's score into status bar.

Call with Y = #$00, X as the position to write to on the status bar (standard is #$14), and $00-$03 as the score to write (in hexadecimal). Note that this routine does not remove leading 0s; that is handled at $008EDE and $008F0C.

Works like this: count how many subtractions by 10n (with n=5) without the difference going into the negatives, that number of subtractions is the digit for the 10ns place, then repeat but with 10n-1. This is the "left-to-right" version of base conversion using repeated subtraction to emulate the 32-bit division by 10n.

*SMW displays the score as 7 digits, but the score is actually a 6-digit (decimal) number stored internally, the 7th digit "0" is a static tile not part of this number.
$009051 40 bytes Subroutine (JSR) Bonus stars (small 8x8 digits) HexDec routine. Unknown why Nintendo didn't decide to use $009045 instead, since the bonus stars are 8-bit while other digits are also 8-bit and uses $009045.

Note: this routine alone produces mere 1s and 10s place, so the numbers will be 8x8 instead of 8x16. The code at $008FAF will convert the digits to tile numbers of 8x16 digit graphics.
$0190BA 122 bytes Sprite physics Positions of the sprite's collision point (relative to the sprite's XY position; $E4/$14E0 and $D8/$14D4) to interact with objects. 2 Tables for X and Y, each 61 bytes:
  • $0190BA-$0190F6: X positions table
  • $0190F7-$019133: Y positions table

Each byte indexed by: %00ccccpp:
  • pp: Which of the 4 collision points to use:
    • %00 = Right (interacts with left side of block, SpriteH for custom blocks.)
    • %01 = Left (interact with right side of block, SpriteH for custom blocks)
    • %10 = Down (interact with top of block, SpriteV for custom blocks)
    • %11 = Up (interact with bottom of block, SpriteV for custom blocks)
  • cccc: Sprite's clipping number, the low nybble from $1656,x.
$019138 8 bytes Sprite subroutine (JSL) JSL for sprites interacting with objects. Actually calls routine at $019140.

During processing GPS blocks:
  • $0A-$0D: Position (in pixels) of the collision point currently being processed for sprite interaction with blocks in the level:
    • $0A-$0B (2 bytes): X position
    • $0C-$0D (2 bytes): Y position

    Note, just like $98-9B, coordinates are respective to the top-left of the layer currently being processed. Hence, if Layer 1 and Layer 2 are offset from each other, this value will differ between the two, even when the sprite is at the same position with respect to the level.
  • $0F (1 byte): Index of one of the 4 collision points currently in use. Also used to eject sprite out of block horizontally:
    • #$00 = SpriteV: Right (touches blocks from left)
    • #$01 = SpriteV: Left (touches blocks from right)
    • #$02 = SpriteH: Down (touches blocks from above)
    • #$03 = SpriteH: Up (touches blocks from below)

    Be careful when using custom blocks, $0F remains used before and after custom block processing at $019533. If $0F is modified and not restored, sprite interaction glitches can occur.
$02887D 36 bytes Subroutine (JSL) Seems to be a subroutine for spawning stuff from blocks. What is spawned depends on the value of $05:

00 - nothing
01 - mushroom
02 - flower
03 - star
04 - cape
05 - 1-Up
06 - coin
07 - coin (sets multiple-coin-block timer)
08 - growing vine
09 - nothing?
0A - P-switch (blue/gray depending on block X position)
0B - key/wings/balloon/shell (depending on block X position)
0C - green Yoshi egg
0D - green Koopa shell (with stun timer set)
0E - changing item
0F - directional coins
10 - key (but a random blue shell-less Koopa also pops out)
11-FF - completely glitchy; best not to use

This subroutine can be used properly in a block, but the data bank must be 02 and the lower nybbles of $98 and $9A must be cleared. All values except 06 and 07 JSR to the main "spawn sprite from block" routine at $0288DC; values 06 and 07 JSR to the coin-spawning routine at $028A66.

Note: When used in a custom block under sprite interaction, make sure you preserve $1695 and then restore it after this routine to prevent a random splash sprite from spawning.
Hijack Address Length Type Description Details Submitter
$02A8D8 1 byte Opcode Modified by Lunar Magic. FuSoYa
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 - 2020 - SMW Central
Legal Information - Privacy Policy - Link To Us

Total queries: 27


Follow Us On

  • YouTube
  • Twitch
  • Twitter


  • Super Mario Bros. X Community
  • Mario Fan Games Galaxy