Language…
17 users online:  AmperSam, autisticsceptile1993, CharlieUltra, CroNo, GamesInTweed, GiraffeKiller, GRIMMKIN, Hammerer, HobbesSMW, Metal-Yoshi94, MorrieTheMagpie, Nayfal, rafaelfutbal, Romiori, TheOrangeToad, Tulip Time Scholarship Games, underway - Guests: 290 - Bots: 370
Users: 64,795 (2,369 active)
Latest user: mathew

SMW Memory Map

Displaying 40 out of 840 addresses.

View: moderated | waiting (13)

Filter

Link
RAM Address Length Type Description Details
$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 overworld event tilemap. The space after $7F0D00 is unused in the original game, but is used by LM to hold the expanded tilemap area. Note that this only holds the YXPCCCTT properties, with the actual tile numbers being retrieved from $0C8000.

If LM's title screen moves recording hijack is installed, this region is also used to store the title screen movements. Three bytes are written any time a new key is pressed or released, or if the same keys are held for 256 frames. Since the event tilemap isn't restored, however, this will causes glitches with event tiles if the hijack isn't uninstalled.

$7F0B44-$7F1343 is also used as a buffer for dynamic sprite graphics, to be 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 (see details).
RAM Map
$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 and patches, so hacked ROMs are likely to use some of the addresses found here.
$7FAB10 12 bytes Sprites Custom sprite table used by Pixi.
It holds the extra bits of a sprite.
Usage
$7FAB1C 12 bytes Sprites Custom sprite table used by Pixi.
Using during sprite loading to signal that the sprite being loaded is custom. Used for custom generators, shooters and normal sprites.
$7FAB28 12 bytes Sprites Custom sprite table used by Pixi.
It holds the first extra property byte of the sprite.
$7FAB34 12 bytes Sprites Custom sprite table used by Pixi.
It holds the second extra property byte of the sprite.
The highest two bits are used by Pixi to determine if the sprite should execute the original code for sprite states other than 8 (main): if the highest bit is set, the original code will be skipped, while if the second highest bit is set, the original code will be executed and then the custom code.
$7FAB40 12 bytes Sprites Custom sprite table used by Pixi.
It holds the first extra (extension) byte of the sprite.
$7FAB4C 12 bytes Sprites Custom sprite table used by Pixi.
It holds the second extra (extension) byte of the sprite.
$7FAB58 12 bytes Sprites Custom sprite table used by Pixi.
It holds the third extra (extension) byte of the sprite.
$7FAB64 12 bytes Sprites Custom sprite table used by Pixi.
It holds the fourth extra (extension) byte of the sprite.
$7FAB9E 12 bytes Sprites Custom sprite table used by Pixi.
It holds the custom sprite number, as defined in the list.txt file, and is a copy of $9E for vanilla sprites. To get the act as of a custom sprite, use $9E instead.
$7FAC00 8 bytes Sprites Custom shooter sprite table used by Pixi.
It holds the first extra byte of the shooter.
$7FAC08 8 bytes Sprites Custom shooter sprite table used by Pixi.
It holds the second extra byte of the shooter.
$7FAC10 8 bytes Sprites Custom shooter sprite table used by Pixi.
It holds the third extra byte of the shooter.
$7FAF00 256 bytes Sprites Custom sprite table used by Pixi.
This serves the same purpose as $1938, but it supports up to 255 sprites per level. Not used if !Disable255SpritesPerLevel is set. In custom sprites it's recommended to use the !1938 define, since it'll be mapped to either $1938 or $7FAF00 depending on the Pixi configuration (pay attention that in one case it's absolute, in the other it's long!).
$7FB000 1034 bytes Misc. RAM used by AddmusicK for various purposes. RAM Map
$7FBC00 1024 bytes Misc. Used by Lunar Magic's VRAM patch.
$7FC000 32 bytes Misc. Used by Lunar Magic for various purposes. See details for an incomplete list. RAM Map
$7FC020 14 bytes Misc. Used by Lunar Magic v2.20+ for LZ2/LZ3/ExAnimation code execution, on SA-1 roms only.
$7FC060 16 bytes Flag Used by Lunar Magic v1.80+ as bitwise state flags for Conditional Direct Map16. To find the bit for a particular flag, use flag >> 3 to get the byte, and then 1 << (flag & 7) to get a bitmask for the bit (ordered low to high).

Note that this address is not initialized automatically.
$7FC070 16 bytes Misc. Used by Lunar Magic v1.70+ as frame numbers for each Manual ExAnimation. One byte per slot.

Note that these addresses are uninitialized unless specified by the "Trigger Init" settings in Lunar Magic.
$7FC080 32 bytes Counter Used by Lunar Magic as frame counters for each Level ExAnimation. One byte per slot.
$7FC0A0 32 bytes Counter Used by Lunar Magic as frame counters for each Global ExAnimation. One byte per slot.
$7FC0C0 56 bytes Graphics Lunar Magic's ExAnimation output table, used to temporarily store data for any ExAnimations updating on the current frame. There are 8 tables, each 7 bytes long, with their data written by the routine at read3($00A2A5+1). The data within these tables is then written as follows:

Bytes 0-1: 16-bit header. The highest bit determines the animation type, with 0 being graphics and 1 being palettes. For graphics, the remaining 15 bits are the transfer size. For palettes, the low byte is doubled and used as the transfer size (with the low byte hence effectively being the number of colors).
Bytes 2-3: 16-bit destination. For GFX animations, the high bit determines whether the animation uses a line (0) or rectangular (1) type, with the remaining 15 bits used as the base VRAM address. For color animations, the low byte holds the base CGRAM address while the high byte is unused.
Bytes 4-6: 24-bit source. For GFX animations, this generally points to RAM, but may be ROM for ExGFX60-63. For "palette + working" animations, this points to the corresponding color to update in the table at $0903. For palette animations with only one color (i.e. header = #$8001), bytes 4/5 hold the raw 16-bit SNES RGB color while byte 6 is unused. For any other palette animation, bytes 4-6 hold the 24-bit address to the color data.
$7FC0F8 4 bytes Flag Used by Lunar Magic v1.70+ as bitwise flags for One Shot ExAnimation triggers. To find the bit for a particular trigger, use trigger >> 3 to get the byte, and then 1 << (trigger & 7) to get a bitmask for the bit.
$7FC0FC 2 bytes Flag Used by Lunar Magic v1.70+ as bitwise flags for Custom ExAnimation triggers. To find the bit for a particular flag, use trigger >> 3 to get the byte, and then 1 << (trigger & 7) to get a bitmask for the bit.

Note that these addresses are uninitialized unless specified by the "Trigger Init" settings in Lunar Magic.
$7FC300 1024 bytes Misc. Used by Lunar Magic v1.70 as a Map16 high byte buffer.
$7FC800 14336 bytes Blocks Map16 high byte table. Same format as $7EC800.
$7FFFF8-$7FFFFD are also used by Lunar Magic's title screen recording ASM.