SMW Resource Memory Map
Organization comes later. Feel free to add major patches here as well.
Also feel free to suggest a good way to represent SA-1 addresses (if applicable).
Lunar Magic
Note about SA-1:
For addresses between $7E:0000-$7E:00FF, the SA-1 equivalent is $3000-$30FF (code bank). For addresses between $7E:0200-$7E:1FFF, the SA-1 equivalent is $6200-$7FFF (code bank) or $40:0200-$40:1FFF (absolute).
Any other address used by Lunar Magic does not have any SA-1 equivalent and must be manipulated by the SNES CPU.
RAM
Most of these addresses were acquired from Lunar Magic's help file and files floating around the internet.
Address | Size | LM Version | Description |
---|---|---|---|
$7E:0BF5 | 1 byte | 3.00 | ExLevel flags (to be filled later). |
$7E:0BF6 | 256 bytes | 3.00 | ExLevel RAM (to be filled later). |
$7E:13D7 | 2 bytes | 3.00 | Screen vertical size. |
$7E:1936 | 2 bytes | 3.00 | Screen vertical size - #$0010. Used only for adjusting smkdan's VRAM patch. |
$7F:C004 | 1 byte | Unknown | Legacy ExAnimations frame counter. Used to be the frame counter for every ExAnimation slot, now it's only accurate for slots 0, 8, 10 and 18. |
$7F:C060 | 16 bytes | 1.80 | Conditional Direct Map16 flags. |
$7F:C070 | 16 bytes | 1.70 | Manual ExAnimation triggers. Each byte corresponds to one manual ExAnimation slot. This block of RAM addresses isn't initialized unless you use the Trigger Init button in the ExAnimation dialog. |
$7F:C080 | 32 bytes | Unknown | Level ExAnimations frame counter. Each byte corresponds to one slot. |
$7F:C0A0 | 32 bytes | Unknown | Global ExAnimations frame counter. Each byte corresponds to one slot. |
$7F:C0F8 | 4 bytes | 1.70 | One Shot Exanimation triggers. |
$7F:C0FC | 2 bytes | 1.70 | Custom ExAnimation triggers. Each bit corresponds to each custom ExAnimation slot. If a bit is on it means the trigger is enabled. This block of RAM addresses isn't initialized unless you use the Trigger Init button in the ExAnimation dialog. |
$7F:8183 | 422 bytes | 1.70 | Used for VRAM modification. See below for details. |
$7F:8183 | 2 bytes | 1.70 | Holds the Layer 1 VRAM tilemap address, similar to $7E:1BE4. Used for VRAM modification. |
$7F:8185 | 2 bytes | 1.70 | Holds the Layer 2 VRAM tilemap address, similar to $7E:1BE4. Used for VRAM modification. |
$7F:8187 | 2 bytes | 1.70 | Holds the Layer 1 VRAM address for column upload. Used for VRAM modification. |
$7F:8189 | 2 bytes | 1.70 | Holds the Layer 2 VRAM address for column upload. Used for VRAM modification. |
$7F:818B | 128 bytes | 1.70 | Holds the Layer 1 column buffer. Used for VRAM modification. |
$7F:820B | 128 bytes | 1.70 | Holds the Layer 2 column buffer. Used for VRAM modification. |
$7F:BC00 | 1024 bytes | 1.70 | Map16 low-byte buffer. Used for VRAM modification. |
$7F:C00B | 2 bytes? | Unknown | Unknown purpose. Used in $0E:FD00 to perform a bit 2 check. |
$7F:C300 | 1024 bytes | 1.70 | Map16 high-byte buffer. Used for VRAM modification. |
ROM/Routines
SNES Address | Description |
---|---|
$0FF900 | GFX decompression routine. It can't decompress GFX files 32 or 33.
On exit:
|
$0EFD00 | LM Routine? Does something related to Layer 2 tilemaps. Returns the value of $7E1928 in A. |
$000000 | To be edited later. |
AddMusicK
RAM
Note: AddMusicK's RAM addresses ($7FB000-$7FB00A) are reset during the SPC Program upload.
Address | Size | Description |
---|---|---|
$7E1DFA | 0x1 | Command list.
|
$7FB000 | 0x1 | Current song playing. |
$7FB001 | 0x1 | Flag used to disable sample upload when switching to a new song. Reset when a song finishes being uploaded to ARAM. |
$7FB002 | 0x2 | Unused. Meant to be: ARAM/DSP Address.
|
$7FB004 | 0x4 | SPC Output.
|
$7FB008 | 0x1 | Unused. Meant to have the same purpose as $7E0DDA. |
$7FB009 | 0x1 | Sample count in the current song. |
$7FB00A | 0x400 | ARAM SRCN table.
Used as a buffer for the sample pointer/loop table. Could be up to 1024 bytes long, but this is unlikely (4 bytes per sample; do the math). |
ROM/Routines
SNES Address | Description |
---|---|
$008079 | UploadSPCData. This is an ever-so-slightly modified version of SMW's SPC upload routine. You can jump here at any time to upload data to the SPC.
|
$008135 | UploadSPCDataDynamic. This address needs to be checked.
This is an alternate version of the upload routine. Call this if it is impossible to determine ahead of time where data will go. This routine is used to upload samples by default, but it can upload anything.
|
PIXI
RAM
Address | Size | Description |
---|---|---|
$000000 | 0x0 | To be edited later. |
ROM/Routines
SNES Address | Description |
---|---|
$000000 | To be edited later. |
GPS
RAM
Address | Size | Description |
---|---|---|
$000000 | 0x0 | To be edited later. |
ROM/Routines
SNES Address | Description |
---|---|
$000000 | To be edited later. |
Custom Powerups
RAM
Address | Size | Description |
---|---|---|
$7E2000 | 0x800 | RAM with different purposes. Only uses 0x1D4 bytes at the moment. |
$7E2800 | 0x2000 | Reserved as a decompression buffer for the 5th tile GFX. |
$7E4800 | 0x2000 | Reserved as a decompression buffer for dynamic items GFX. |
$7E6800 | 0x800 | Reserved as a copy of the first 2KiB of the latest decompresed GFX file. |
$7E7000 | 0xCFF | Free to use. |
$000000 | 0x0 | To be edited later. |
ROM/Routines
SNES Address | Description |
---|---|
$000000 | To be edited later. |