SMW Memory Map
Displaying 46 out of 2446 addresses.
View: moderated | waiting (13)
Hijack Address | Length | Type | Description | Details |
---|---|---|---|---|
$0DB940 | 4 bytes | Jump (JML/JSL) | Modified by the patch Switch Palace RAM Optimizer by Sonikku. JML, changes the red and blue switch blocks' object load code to check a bit instead of a byte. |
|
$0DBADC | 39 bytes | Code | Modified by Forest Treetop Fix. Makes forest treetops able to be positioned at any Y position inside a level. | |
$0DBB16 | 13 bytes | Code | Modified by Lunar Magic. | |
$0DC4C9 | 4 bytes | Jump (JML/JSL) | Modified by the Castle Intro Ledge Fix patch, by Kevin. JSL, stores the Map16 data pointer in $04/$05. |
|
$0DC4DE | 5 bytes | Jump (JML/JSL) | Modified by the Castle Intro Ledge Fix patch, by Kevin. JSL : NOP, retrieves the stored Map16 pointer before loading the second row of blocks to ensure correct positioning about screen boundaries. |
|
$0DE18C | 4 bytes | 24-bit Pointer | Optionally used by Lunar Magic to allow third-party tools to implement variable byte sizes for custom overworld sprites. To enable, set $0DE18F to 0x42, then write a 24-bit pointer to $0DE18C for your sprite size table. The actual table should be 0x80 bytes long, with each sprite getting one byte. The default size should be 4 (1 extra byte), with the minimum being 3 and maximum being 0xF. |
|
$0DE190 | 21 bytes | Code | Used by Lunar Magic v2.50+ for a set of three routines (RTL-ended) to access the secondary entrance tables, in addition to the ones at $05DC80. Call these with the secondary exit ID in X to get the corresponding table:
These are mainly intended for use when Lunar Magic's secondary exit expansion is applied, which moves these tables dynamically. |
|
$0DE210 | 64 bytes | Code | Used by Lunar Magic as a routine to implement bank bytes for Chocolate Island 2's data pointers. Jumped to from $05DB5B. The bank bytes specifically can be found in the same order as CI2's original pointers at $0DE231 (Layer 1), $0DE23A (Layer 2), and $0DE243 (sprites). | |
$0DEC96 | 4 bytes | Jump (JML/JSL) | Modified by the patch Switch Palace RAM Optimizer by Sonikku. Changes the switch palace switch object code to check a bit instead of a byte. |
|
$0DF08A | 79 bytes | Code | Modified by Lunar Magic. It's a subroutine (which ends in RTS) inserted the first time a level is saved in LM. |
|
$0DF100 | 20 bytes | Code | Used by Lunar Magic for a routine to decrypt level data in a locked ROM. | |
$0DF150 | 13 bytes | Code | Modified by Lunar Magic. Small piece of code inserted the first time a level is saved in LM. |
|
$0DF160 | 35 bytes | Code | Modified by Lunar Magic. It's a subroutine (which ends in RTS) inserted the first time the time limit setting is bypassed in LM. |
|
$0DF17D | 4 bytes | Jump (JML/JSL) | Hijacked by the Midway Point Timer Reset patch by WhiteYoshiEgg. JML, it hijacks Lunar Magic's custom routine that sets the level timer to backup its initial value. |
|
$0DF1A0 | 17 bytes | Code | Used by Lunar Magic for a routine to decrypt a GFX file's pointer in a locked ROM. | |
$0DF1C0 | 178 bytes | Code | Modified by Lunar Magic. It's a subroutine (which ends in RTS) inserted the first time a level is saved in LM. |
|
$0DF290 | 59 bytes | Code | Modified by Lunar Magic. It's a subroutine (which ends in RTS) inserted the first time a level is saved in LM. |
|
$0DF2CB | 8 bytes | Table | Modified by Lunar Magic. It's an AND table (which goes from $01 to $80) inserted the first time a level is saved in LM. It's used by the code at $0DF290. |
|
$0E8000 | 28928 bytes | Code | Modified by AddmusicK. First, an header is inserted, containing the following: - The identifier characters "@AMK". - Version number (which seems to be kept at $00 in all versions of the program). - Long pointer to the table of sample groups pointers. - Long pointer to the table of music data pointers. - 21 "$00" bytes, probably meant for future expansions. Then, the main code of the tool is inserted, which handles uploading music to the SPC700 and playing it, and the rest of the space is cleared out by filling it with "$55" bytes ("rep $7100 : db $55" done before inserting the custom code). The space is cleared out until $0EF0FF, since $0EF100-$0EFFFF is used by Lunar Magic. |
|
$0EF100 | 3176 bytes | Miscellaneous | Modified by Lunar Magic for various purposes.
|
Extra Bytes Data |
$0EF100 | 512 bytes | Table | Modified by LM. This table contains the bank bytes of every level's sprite data pointer. |
|
$0EF30C | 4 bytes | Data | Hijacked by Pixi. Writes the pointer to sprite size table, and then a $42 byte, so that Lunar Magic will enable extra bit customization for placing sprites. |
|
$0EF310 | 512 bytes | Table | Used by LM as a table of Layer 2-related data for each level. Format: bbBBVFDT
|
|
$0EF55D | 3 bytes | 24-bit Pointer | Used by Lunar Magic as a 24-bit pointer to the custom overworld sprite data table. Will be $FFFFFF if no custom sprites are being used. | |
$0EF600 | 1536 bytes | 24-bit Pointer | A list of 24-bit pointers to each level's palette data, inserted by Lunar Magic. Indexed by level number * 3. If an entry's low and high bytes are both zero, the default palette is loaded instead (the bank byte is not checked in this case). | |
$0EFD50 | 24 bytes | Table | Used by Lunar Magic. This is a table of eight 24-bit pointers to the BG Map16 data in ascending order, where each pointer corresponds to a set of 0x10 pages. If a pointer is $000000, then that set of BG Map16 pages is currently unused. | |
$0F8000 | 28753 bytes | Data | Modified by AddmusicK. This is where AMK's custom SPC engine (main.bin) is inserted in the ROM, to then be uploaded to the SPC700 ram. The remaining bytes are cleared out by filling them with "$55" bytes ("REP $7051 : db $55" done before inserting the custom data). The space is cleared out until $0FF050, since $0FF051-$0FFFFF is used by Lunar Magic. |
|
$0FF0A0 | 160 bytes | Hex Edit | Not actually "used" for anything, but Lunar Magic writes the following string here: Code Lunar Magic Version X.XX Public ©YYYY FuSoYa, Defender of Relm h ttp://fusoya.eludevisibility.org I am Naaall, and I love fiiiish! where X.XX is the version number and YYYY is the publication year of the LM version used. |
|
$0FF160 | 135 bytes | Code | Used by Lunar Magic for a routine to decompress a file for an ExGFX slot during level load. | |
$0FF200 | 1024 bytes | Table | Used by Lunar Magic for the "old" graphics bypass using lists. In that system, an index of $00 is used to mark that no list bypass is used, and indices $01-$FF will point into this table (However, Lunar Magic's UI will instead display $00 as the first list and $FE as the last list). To calculate the direct offset, take ((index-1)*4). Note that both FG/BG list bypass and sprite list bypass share the same range of indices. For each offset, contains four bytes for the four (Ex)GFX files that are used for this index. This system is only capable of addressing (Ex)GFX files numbered $00 through $FF. |
|
$0FF600 | 384 bytes | 24-bit Pointer | Used by Lunar Magic for a table of 24-bit pointers to ExGFX80-FF (pointers for 100-FFF can be found at $read3($0FF937)). A pointer of 000000 indicates the file isn't inserted. | |
$0FF780 | 40 bytes | Code | Used by Lunar Magic for a routine called during level load to initialize Layer 3 and AN2. | |
$0FF7D0 | 15 bytes | Code | Used by Lunar Magic for a routine for a deprecated feature that would treat the LT3 ExGFX slot as an Layer 2 tilemap (i.e. LT2). | |
$0FF7F0 | 67 bytes | Jump (JML/JSL) | Used by Lunar Magic as a routine to handle processing ExGFX files during level load. A table of every level's ExGFX files can be found at read3($0FF7FF) . Each level receives 32 bytes, with two bytes per ExGFX file; some additional data is also stored in the high byte of certain files. More information can be found here. |
|
$0FF840 | 54 bytes | Code | Used by Lunar Magic for a routine to check if an ExGFX slot has been bypassed and, if so, decompress it into RAM. The last 7 bytes of this routine appear to be unused. |
|
$0FF8A0 | 70 bytes | Code | Used by Lunar Magic for a few different support routines for decompressing GFX files:
|
|
$0FF900 | 110 bytes | Jump (JML/JSL) | Used by Lunar Magic as a routine to decompress a 4bpp GFX file to a specified location in RAM. To use it, load the 16-bit GFX file number into A and 24-bit destination RAM address in $00. Note that it won't work on GFX32/33. |
|
$0FF9C0 | 10 bytes | Code | Used by Lunar Magic for a routine to get Layer 3 GFX files for the credits and castle cutscenes. | |
$0FF9E0 | 175 bytes | Code | Used by Lunar Magic for a routine to upload Layer 3 ExGFX files. | |
$0FFAB0 | 36 bytes | Code | Used by Lunar Magic for a routine to retrieve the ExGFX list for an overworld submap. | |
$0FFAF0 | 17 bytes | Code | Modified by Lunar Magic for a routine that checks whether the overworld needs to be reloaded when swapping players. | |
$0FFB20 | 523 bytes | Code | Used by Lunar Magic for a routine to upload submap ExGFX. | |
$0FFB9C | 4 bytes | Jump (JML/JSL) | Modified by 32x32 Player Tilemap Patch, by ExE Boss and Ladida. Edit applied by the main patch. JML, overwrites Lunar Magic code to skip uploading player graphics during overworld path transitions, preventing graphical bugs. |
|
$0FFC94 | 4 bytes | Jump (JML/JSL) | Modified by 32x32 Player Tilemap Patch, by ExE Boss and Ladida. Edit applied by the main patch. JML, overwrites Lunar Magic code to correct player palette mirrors prior to palette upload, preventing graphical bugs. |
|
$0FFD80 | 332 bytes | Code | Modified by Lunar Magic. Routine called from $0FF780 during level load to store some level-specific variables in the $7FC000 area and to upload some graphics data to VRAM. |
|
$0FFFE0 | 1 byte | Miscellaneous | Not directly modified by Lunar Magic, but used as a byte containing a few different flags that let the editor know about changes in restrictions the editor should have. As the byte normally has a value of FF, the flags are reversed, with a bit being clear indicating its effect should be applied. Format: -----TOS T = If clear, indicates that text strings in the overworld editor should be able to be directly saved instead of saved as part of the overworld. O = If clear, indicates the overworld has been overridden and the user should be warned when trying to save it. S = If clear, indicates that the restriction in levels of a maximum of 128 sprites has been increased to 256 (see: $7E1938). PIXI manages the S flag as part of its !Disable255SpritesPerLevel define. |
|