🏠
FreeRAM

The term "FreeRAM" is shorthand for describing addresses in the SNES memory that are "empty", cleared, or unused when it comes to Super Mario World. (You view a list of empty addresses on SMW Central's RAM map).

Available empty addresses are used by a variety of custom resources for their own functionality, and it is good practice to not have resources use the same address as this could lead to problems. When this happens it can lead to FreeRAM conflict and result in one or both ASM resources not working.

Contents


Reserved FreeRAM

The below is a list of resources in the baserom and the FreeRAM they use sorted by starting RAM address, name of resource and number of bytes.

Keep in mind some of these use a range of values, e.g. if it's starting at $60 and is 4 bytes, it's using addresses 60, 61, 62 and 63.

AddressBytesizeResource
$871 byteUsed by SA-1 (if using)
$13E61 bytesBlock duplication fix patch
$146C1 byteUsed by Lunar Magic
$14BE1 byteLayer 2 and 3 wall triangle Fix patch
$14C11 byteUsed by simple auto save as a check
$15E81 byteGoal point reward fix patch
$18692 bytesExtended No Sprite Tile Limits
$18E61 byteSkull Raft Fix
$19231 byteCape spin consistency patch
$1DFD1 byteON/OFF double-hit Fix

Large Blocks of FreeRAM

These are resources that use more than a few bytes of FreeRAM to function, and are using "long" addresses in the $7F**** block of memory. These addresses will be different on SA-1.

AddressesBytesizeResource
$7FA40016 bytes reserved*, 13 usedBaserom Feature Toggles
$7FA41016 bytes reserved*, 8 usedUberASM Object System
$7FA42016 bytes reserved*, 5 usedScreen Scrolling Pipes
$7FA43016 bytes reserved*, 8 usedSprite Scroll Fix Patch
$7FA660300 bytesDragon Coin Save, coins themselves
$7FA9608 bytesDragon Coin Save, buffer
$7FB0002 to 1032 bytesAddMusicK
$7FB400230 bytes (+1 for every midway)Retry System
*The baserom clears a range of 16 bytes to reserve regardless, for simplicity.

Changing FreeRAM

For easy configuration, the baserom uses a shared config file in shared/freeram.asm to define FreeRAM values with, so they can be called independently of resources that use them and easily be referenced.