; ========================================================= ; --------------------------------------------------------- ; USING THIS SYMBOLS MAP ; --------------------------------------------------------- ; Except for larger blocks of data, every address will be given at least one symbol ; Symbols are each given a unique name with focus on hierarchy by nature of usage ; ; Low bytes may be indicated with an "L" suffix ; High bytes are indicated with an "H" suffix ; High bytes that are unused may have a "U" suffix ; ; Bitfields, full or partial, will name each property with a unique letter ; If multiple bits share a letter, they are part of the same property ; and form a larger number that is only part of the address ; All unused bits are marked with a period (.) and no mention of them is made ; ; Unused addresses will be named "UNUSED_AAAAAA" ; Unused addresses will be grouped together and include a comment: ; "FREE RAM: " to make finding free space easier ; Larger blocks will say "BIG FREE RAM" ; ; For documentation on hardware registers, see «registers.asm» ; For documentation on save game data, see «symbols_sram.asm» ; For documentation on APU addresses, see «symbols_apu.asm» ; ========================================================= ; ========================================================= ; --------------------------------------------------------- ; DIRECT PAGE ; --------------------------------------------------------- ; Reminder that direct page is always an address in bank 00. ; For ALTTP's mapping and functionality this will always be a mirror of bank 7E page 00 or page 1F. ; For the most part, ALTTP leaves the direct page register (D) at $0000. ; The polyhedral code that draws the triforce and crystals will change this register during IRQ. ; The symbols here mirror page 00 of bank 7E. ; --------------------------------------------------------- ; ========================================================= ; Any use of these addresses should be considered incredibly volatile. ; LENGTH: 0x10 SCRAP00 = $7E0000 SCRAP01 = $7E0001 SCRAP02 = $7E0002 SCRAP03 = $7E0003 SCRAP04 = $7E0004 SCRAP05 = $7E0005 SCRAP06 = $7E0006 SCRAP07 = $7E0007 SCRAP08 = $7E0008 SCRAP09 = $7E0009 ; --------------------------------------------------------- ; TILE ACT NOTES ; --------------------------------------------------------- ; SCRAP0A is used as a direction bitfield during tile act routines. ; --------------------------------------------------------- ; For tile act bitfields, each property is flagged with 4 bits. ; These bits indicate which tile relative Link the tile was found ; ; a b ; L ; c d ; ; abcd ; a - found to the north west ; b - found to the north east ; c - found to the south west ; d - found to the south east ; ; L - Link ; --------------------------------------------------------- SCRAP0A = $7E000A SCRAP0B = $7E000B SCRAP0C = $7E000C SCRAP0D = $7E000D SCRAP0E = $7E000E SCRAP0F = $7E000F ; Game mode and submode ; See $00:80B5 MODE = $7E0010 SUBMODE = $7E0011 ; Before the main loop starts again, $12 is cleared with an STZ ; While 0, it sits in a loop, waiting for interrupts. ; When NMI triggers, it checks this flag to decide if the bulk updates should be performed. ; If NMI reads this flag as zero, it knows the main loop has completed and bulk updates are allowed to occur ; If NMI triggers before the main game code is finished, this flag will be still be nonzero ; such bulk updates will be skipped ; NMI will set this flag to non zero, allowing the loop to exit after NMI LAG = $7E0012 ; Queue for INIDISP updates; handled during NMI INIDISPQ = $7E0013 ; NMI update flags ; when non zero, these will trigger a specific graphics update during NMI NMISTRIPES = $7E0014 NMICGRAM = $7E0015 NMIHUD = $7E0016 NMIINCR = $7E0017 NMIUP1100 = $7E0018 ; Incremental upload VRAM high byte UPINCVH = $7E0019 ; This counter is incremented every time the main loop runs. ; In other words: every frame that the game is not lagging FRAME = $7E001A ; Used to flag indoors/outdoors ; 0x00 - outdoors ; 0x01 - indoors INDOORS = $7E001B ; PPU register queues handled during NMI TMQ = $7E001C TSQ = $7E001D TMWQ = $7E001E TSWQ = $7E001F ; Link's absolute coordinates ; TODO also used during attract (up through around $34) POSY = $7E0020 POSYH = $7E0021 POSX = $7E0022 POSXH = $7E0023 ; Takes the value $FFFF when on the ground POSZ = $7E0024 POSZH = $7E0025 ; Direction Link is pushing ; .... udlr ; u - up ; d - down ; l - left ; r - right PUSHDIR = $7E0026 ; Link's recoil ; By themselves, these do not do much ; They will be reset every frame Link is not in recoil state KNBY = $7E0027 KNBX = $7E0028 KNBZ = $7E0029 ; Link's subpixel velocity ; when this value overflows, Link's main velocity gains an extra pixel ; reset on direction change, so not really a positional subpixel SUBVY = $7E002A SUBVX = $7E002B ; Handles fading in attract mode. ; Zeroed in one location during gameplay, but otherwise unused. ATRFADE = $7E002C ; Acts as a timer for certain animations to advance ANIMSTEP. ANIMTIME = $7E002D ; Link's animation step ANIMSTEP = $7E002E ; Link's direction; always a multiple of 2 ; 0x00 - up ; 0x02 - down ; 0x04 - left ; 0x06 - right DIR = $7E002F ; The difference in pixels Link moved on each axis DIFFY = $7E0030 DIFFX = $7E0031 ; Used for temporary calculations/caching with Link's coordinates when hopping a ledge. HOPCALCY = $7E0032 HOPCALCX = $7E0033 ; Used as a delay timer for Agahnim during attract mode. ATRAGATIME = $7E0034 ; FREE RAM: 0x03 UNUSED_35 = $7E0035 UNUSED_36 = $7E0036 UNUSED_37 = $7E0037 ; Tile act bitfield used by outer slopes. ; The high byte is technically written when the bitfield is flagged, ; but it's always ORing in 0x00. It is otherwise unused. TODO verify ; SEE TILE ACT NOTES ; .... ssss TACTSLOPEO = $7E0038 TACTSLOPEU = $7E0039 ; Bitfield for B and Y ; hyu. .d.b ; h - B button held ; y - Y button held ; u - tested for but never set ; d - holding down on dpad (set from $F0) ; b - B released during sword swing BYFLAG = $7E003A ; Bitfield for A ; a..d .... ; a - A button held ; d - prevents sword swing; only set by unused routine AFLAG = $7E003B ; Timer for B button ; ssss tttt ; s - spin attack in action; set to 0x9 ; t - sword swing timer ; 0x00 - No swing ; —0x08 - Sword swing ; 0x09 - Sword primed ; —0x0C - Poking wall ; ; Also used as a 16-bit countdown for various cutscenes: ; Ether tablet: 0x00C0 ; Bombos tablet: 0x00E0 ; Desert tablet: 0x0001 BFLAG = $7E003C ; Used as an animation timer for items, sword, zap, etc. ANIMTIME2 = $7E003D ; Caches Link's coordinates for calculations during movement routines. CALCYL = $7E003E CALCXL = $7E003F CALCYH = $7E0040 CALCXH = $7E0041 ; Appears to flag directions for freedom for vertical and diagonal, respectively. ; Flags are set when there's no obstruction. (0: obstructed | 1: unobstructed) ; .... udlr ; u - upwards ; d - downwards ; l - leftwards ; r - rightwards OBSTRUCTV = $7E0042 OBSTRUCTD = $7E0043 ; Offsets for OAM also used in calculation of sword/hammer hitboxes OAMOFFAY = $7E0044 OAMOFFAX = $7E0045 ; Countdown timer used when Link takes damage INPAIN = $7E0046 ; Weapon tink spark timer TINKTM = $7E0047 ; Bitfield for push actions ; s... dbpt ; s - statue/somaria ; d - pushing door ; b - push block ; p - pushing ; t - harder push DOGRAB = $7E0048 ; Forces dpad inputs when written to. ; High byte is never used, but incidentally cleared by tile detection routines. FORCEMOVE = $7E0049 FORCEMOVEU = $7E004A ; If set to 0x0C, Link will not be visible. VISIBLE = $7E004B ; Countdown timer for cape sapping magic when in use. CAPETIME = $7E004C ; Indicates various types of recoil. ; 0x00 - no recoil ; 0x01 - bonking/damage/jumping in or out of water ; 0x02 - ledge hop JUMPING = $7E004D ; Indicates the tile type landed on after a dungeon transition. ; 0x00 - Shallow water/Nothing ; 0x01 - Normal door ; 0x02 - Shutter doors/All others - zeros DOORWAY ; 0x03 - Layer doors? TODO ; 0x04 - Lower layer shutters - zeros DOORWAY TRANSLAND = $7E004E ; Dash SFX timer FSHFSH = $7E004F ; When 0, Link will change the direction he's facing based on his movement ; When nonzero, he will strafe around ; .... .bps ; s - the bit generally flagged ; p - flagged during rupee pull and perpendicular door movement ; b - flagged during push blocks ; ; Used during attract for the escorted maiden's flinch STRAFE = $7E0050 ; Target Y coordinate Link should fall to ; TODO other stuff too??? TARGETY = $7E0051 TARGETYH = $7E0052 TARGETX = $7E0053 TARGETXH = $7E0054 ; When set, Link is invisible and untouchable. CAPEON = $7E0055 ; Flags for bunny. ; Usually kept in sync with BUNNY, but one of these is honestly redundant. ; 0x00 - Link ; 0x01 - bunny RABBIT = $7E0056 ; Timer that counts up to 0x10 to induce slower speed on stairs. ; Famously uncleared after spiral stairs. STAIRDRAG = $7E0057 ; Tile act bitfield used by manual stairs ; .... ssss ; SEE TILE ACT NOTES TACTSTAIR = $7E0058 ; Tile act bitfield used by pits ; .... ssss ; SEE TILE ACT NOTES TACTPIT = $7E0059 ; Pose when landing from a pit fall in underworld FALLPOSE = $7E005A ; Represents Link's "slipping into a pit" status ; 0x00 - Nothing ; 0x01 - Near pit ; 0x02 - Falling ; 0x03 - Falling more SLIP = $7E005B ; Timer for the falling animation FALLTIMER = $7E005C ; Link's main state handler LINKDO = $7E005D ; Link's main speed handler ; Only the base values that are possible to see are documented here ; For the full table, see SubVelocityValues in «bank_07.asm» ; 0x00 - Walking on ground ; 0x02 - Walking on stairs ; 0x04 - Slipping into pit ; 0x06 - Harder slipping into pit/Entering underworld ; 0x08 - Pushing statue ; 0x0C - Walking with sword out/carrying item ; 0x10 - Dashing ; 0x12 - Pushing somaria block ; 0x14 - Pulling statue/Walking to triforce SPEED = $7E005E ; Bitfield used by manipulable tiles MANIPIDL = $7E005F MANIPIDH = $7E0060 ; Push timer for blocks, graves, etc.; shared by all FRICTION = $7E0061 ; Seems to only act as a flag for horizontal doors. ; .... ..h. ; h - on horizontal door tile HDOOR = $7E0062 ; Used for spell timer for Agahnim in attract mode. ; Zeroed by HDOOR during normal gameplay. ATRAGASP = $7E0063 ; Used to ORA in OAM priority, but only high byte seems used for that. ; Low byte used as a timer for Agahnim text display in attract mode. ATRAGSTEP = $7E0064 OAMPROPOR = $7E0065 ; Last direction Link moved ; 0x00 - up ; 0x01 - down ; 0x02 - left ; 0x03 - right LASTDIR = $7E0066 ; Direction Link is walking ; .... udlr WALKDIR = $7E0067 ; Difference of coordinate high bytes for movement calculations. DIFFYH = $7E0068 DIFFXH = $7E0069 ; Set when moving diagonally to flag the direction link is facing ; .... .hv ; h - facing horizontally ; v - facing vertically DIAGFACE = $7E006A ; ..hv udlr ; 0x15 ...1 .1.1 ◣ down ; 0x16 ...1 .11. ◢ down ; 0x19 ...1 1..1 ◤ up ; 0x1A ...1 1.1. ◥ up ; 0x25 ..1. .1.1 ◥ right ; 0x26 ..1. .11. ◤ left ; 0x29 ..1. 1..1 ◢ right ; 0x2A ..1. 1.1. ◣ left ; h - moving horizontally ; v - moving vertically ; u - change of direction into the slope has an up vector ; d - change of direction into the slope has a down vector ; l - change of direction into the slope has a left vector ; r - change of direction into the slope has a right vector SLOPEPUSH = $7E006B ; .... ..hv ; h - in horizontal door ; v - in vertical door DOORWAY = $7E006C ; Holds the value of SLOPEPUSH when you can't actually move. SLOPEFAIL = $7E006D ; Tile act bitfield used by slopes. ; High byte has an explicit STZ as well, but never used. ; .... ssss ; SEE TILE ACT NOTES TACTSLOPI = $7E006E TACTSLOPIH = $7E006F ; FREE RAM: 0x02 UNUSED_70 = $7E0070 UNUSED_71 = $7E0071 ; Very volatile memory used similarly to $00..$0F ; Anything written here should be considered very temporary SCRAP72 = $7E0072 SCRAP73 = $7E0073 SCRAP74 = $7E0074 SCRAP75 = $7E0075 SCRAP76 = $7E0076 ; Never really used, but zeroed by some uses of SCRAP76. SCRAP77 = $7E0077 ; TODO ; Seems to flag non-north hops in the overworld. ; Messes with camera scroll. ; Kept in sync with NOHURT JUMPSCROLL = $7E0078 ; Spin attack timer ; Fully charged at 48 (0x30) ; Hardcapped at 64 (0x40) SPINTIME = $7E0079 ; FREE RAM: 0x01 UNUSED_7A = $7E007A ; Used to cache light world versus dark world for comparisons. ; .w.. .... ; w - world (0: light world | 1: dark world) WORLDCACHE = $7E007B ; FREE RAM: 0x08 UNUSED_7C = $7E007C UNUSED_7D = $7E007D UNUSED_7E = $7E007E UNUSED_7F = $7E007F UNUSED_80 = $7E0080 UNUSED_81 = $7E0081 UNUSED_82 = $7E0082 UNUSED_83 = $7E0083 ; Index for overworld map16 buffer to load new graphics when scrolling OWTMAPI = $7E0084 OWTMAPIH = $7E0085 ; Used to index $0500 and tilemap ; TODO look at 02E9F7 OWMAPDIX = $7E0086 OWMAPDIXH = $7E0087 OWMAPDIY = $7E0088 OWMAPDIYH = $7E0089 ; Overworld screen ID ; In practice bit 6 indicates a Dark World screen, and bit 7 indicates special overworld ; As the highest screen ID is 0x81, $8B is essentially unused in the overworld. ; However, reads and writes for screen ID are often 16-bit ; Occasionally 8A is used to read underworld screens. ; Thus, this address should be considered used. OWSCR = $7E008A OWSCRH = $7E008B ; Overworld background overlay ID OWBG1 = $7E008C ; Used to index sloshing animations for thick grass and shallow water. FEETANIM = $7E008D ; FREE RAM: 0x02 UNUSED_8E = $7E008E UNUSED_8F = $7E008F ; Used during draw routines to indirectly address the OAM buffer. OAMLBFR = $7E0090 OAMLBFRH = $7E0091 OAMHBFR = $7E0092 OAMHBFRH = $7E0093 ; Various PPU queues handled during NMI BGMODEQ = $7E0094 MOSAICQ = $7E0095 W12SELQ = $7E0096 W34SELQ = $7E0097 WOBJSELQ = $7E0098 CGWSELQ = $7E0099 CGADSUBQ = $7E009A ; HDMA enable queue HDMAENQ = $7E009B ; These are just written to COLDATA successively ; The color channel bit is not ORA'd in ; So generally expect to see the same top 3 bits for each address ; There's nothing preventing these being used for any COLDATA writes, though ; e.g. the following values will produce a pure white: ; 00 00 FF COLDATAR = $7E009C COLDATAG = $7E009D COLDATAB = $7E009E ; FREE RAM: 0x01 UNUSED_9F = $7E009F ; Room ID for underworld ; Copied to $0483 ; There are only 2 "maps", so $A1 is only expected to be 0 or 1 ROOM = $7E00A0 ROOMH = $7E00A1 ; Value of $A0 for previous room PREVROOM = $7E00A2 PREVROOMH = $7E00A3 ; Current floor of dungeon. ; 0x00 - Floor 1 ; Negative values indicate basement floors. FLOOR = $7E00A4 ; Technically never used, but read by FLOOR sometimes (never rewritten). ; Seems to expect 0x00 always for various comparisons. ; Not safe to consider this free. FLOORH = $7E00A5 ; Which set of camera boundaries to use. BSETH = $7E00A6 BSETV = $7E00A7 ; ...l llvh ; l - room layout ; v - QUADV ; h - QUADH ROOMLAYOUT = $7E00A8 ; Together, indicates which quadrant Link is in. ; H can be 0 or 1, for left or right ; V can be 0 or 2, for top or bottom QUADH = $7E00A9 QUADV = $7E00AA ; FREE RAM: 0x02 UNUSED_AB = $7E00AB UNUSED_AC = $7E00AC ; Holds layer floor effect index BGFX = $7E00AD ; Room effects; e.g. kill room, shutter switch, etc. TAG1 = $7E00AE TAG2 = $7E00AF ; Often used as a submodule, such as for transitions SUBSUB = $7E00B0 ; FREE RAM: 0x01 UNUSED_B1 = $7E00B1 ; Used as scrap space when building rooms. SCRAPB2 = $7E00B2 SCRAPB3 = $7E00B3 SCRAPB4 = $7E00B4 SCRAPB5 = $7E00B5 ; FREE RAM: 0x01 UNUSED_B6 = $7E00B6 ; Used as a pointer when drawing room objects. ; TODO something with palettes OBJPTR = $7E00B7 OBJPTRH = $7E00B8 OBJPTRB = $7E00B9 ; Used as an offset for OBJPTR ; TODO other uses? OBJX = $7E00BA OBJXH = $7E00BB ; FREE RAM: 0x01 UNUSED_BC = $7E00BC ; Frequently used as scratch space with various uses ; TODO document room draw stuff more precisely SCRAPBD = $7E00BD SCRAPBE = $7E00BE SCRAPBF = $7E00BF SCRAPC0 = $7E00C0 SCRAPC1 = $7E00C1 SCRAPC2 = $7E00C2 SCRAPC3 = $7E00C3 SCRAPC4 = $7E00C4 SCRAPC5 = $7E00C5 SCRAPC6 = $7E00C6 SCRAPC7 = $7E00C7 SCRAPC8 = $7E00C8 SCRAPC9 = $7E00C9 SCRAPCA = $7E00CA SCRAPCB = $7E00CB SCRAPCC = $7E00CC SCRAPCD = $7E00CD SCRAPCE = $7E00CE SCRAPCF = $7E00CF SCRAPD0 = $7E00D0 SCRAPD1 = $7E00D1 SCRAPD2 = $7E00D2 SCRAPD3 = $7E00D3 SCRAPD4 = $7E00D4 SCRAPD5 = $7E00D5 SCRAPD6 = $7E00D6 SCRAPD7 = $7E00D7 SCRAPD8 = $7E00D8 SCRAPD9 = $7E00D9 SCRAPDA = $7E00DA SCRAPDB = $7E00DB SCRAPDC = $7E00DC SCRAPDD = $7E00DD SCRAPDE = $7E00DE SCRAPDF = $7E00DF ; Background scroll registers ; For BG1 and BG2, these registers are used for calculations later for different writes to PPU. ; For BG3, the values are written directly to the PPU during NMI ; Since BG1 and BG2 are not written directly to PPU they are given different names from BG3. BG1H = $7E00E0 BG1HH = $7E00E1 BG2H = $7E00E2 BG2HH = $7E00E3 BG3HOFSQL = $7E00E4 BG3HOFSQH = $7E00E5 BG1V = $7E00E6 BG1VH = $7E00E7 BG2V = $7E00E8 BG2VH = $7E00E9 BG3VOFSQL = $7E00EA BG3VOFSQH = $7E00EB ; Used for tilemap calculations ; UW: 0x01F8 ; OW: 0xFFF8 COLTYPE = $7E00EC COLTYPEH = $7E00ED ; Mostly behaves as an indicator of which layer Link is on ; 0x00 - Upper layer (BG2) ; 0x01 - Lower layer (BG1) ; TODO other values LAYER = $7E00EE ; .... ..sl ; l - layer (0: ignore | 1: swap) ; s - dungeon id (0: ignore | 1: id^=2) ; This address is cleared every movement frame in the underworld ; But it's also set by certain door tiles ; The effects of the address don't occur until an UW-UW transition TRANTOG = $7E00EF ; Joypad input ; ALL input includes the input from the previous frame ; NEW input is only the current frame ; OLD input is unfiltered from the previous frame ; Joypad 2 code exists but is unreachable ; ; JOY#A JOY#B ; BYsSudlr AXLR.... JOY1A_ALL = $7E00F0 JOY2A_ALL = $7E00F1 JOY1B_ALL = $7E00F2 JOY2B_ALL = $7E00F3 JOY1A_NEW = $7E00F4 JOY2A_NEW = $7E00F5 JOY1B_NEW = $7E00F6 JOY2B_NEW = $7E00F7 JOY1A_OLD = $7E00F8 JOY2A_OLD = $7E00F9 JOY1B_OLD = $7E00FA JOY2B_OLD = $7E00FB ; If nonzero, these values overwrite BSETH and BSETV, respectively, when an exploding wall clears. BWSETH = $7E00FC BWSETV = $7E00FD ; FREE RAM: 0x01 UNUSED_FE = $7E00FE ; Vertical scanline trigger for IRQ NMIVTIME = $7E00FF ; ========================================================= ; --------------------------------------------------------- ; WRAM MIRROR ; --------------------------------------------------------- ; Pages 0x00–0x1F of bank 7E are mirrored to every program bank ALTTP uses. ; These addresses can be accessed with absolute addressing, ; as long as the data bank is not 0x70 or 0x7F. ; --------------------------------------------------------- ; ========================================================= ; Link animation values POSECHR = $7E0100 POSECHRH = $7E0101 AUXACHR = $7E0102 AUXACHRH = $7E0103 AUXBCHR = $7E0104 AUXBCHRH = $7E0105 ; FREE RAM: 0x01 UNUSED_7E0106 = $7E0106 SWORDCHR = $7E0107 SHIELDCHR = $7E0108 ITEMCHR = $7E0109 ; Flag set on death for use by dungeon reload. DEADLOAD = $7E010A ; FREE RAM: 0x01 UNUSED_7E010B = $7E010B ; Used to cache MODE and SUBMODE during interface modules MODECACHE = $7E010C SUBCACHE = $7E010D ; Entrance ID into underworld. ENTRANCE = $7E010E ENTRANCEH = $7E010F ; Contains the current room ID * 3 ROOMX3 = $7E0110 ROOMX3H = $7E0111 ; Flag used for medallion cutscenes. MDLSCENE = $7E0112 ; FREE RAM: 0x01 UNUSED_7E0113 = $7E0113 ; Current tile type Link is standing on in the underworld. ; High byte is always 0x00. TILEUW = $7E0114 TILEUWH = $7E0115 ; Index for high bytes for VRAM tile map uploads. ; Also used for VRAM address for various other uploads. ARBTMAP = $7E0116 ARBTMAPH = $7E0117 ; Incremental VRAM upload buffer address ; Low byte is always set to 0x00. UPINCBL = $7E0118 UPINCBH = $7E0119 ; Applied to BG scroll BG1SHAKEV = $7E011A BG1SHAKEVH = $7E011B BG1SHAKEH = $7E011C BG1SHAKEHH = $7E011D ; Written to registers during NMI BG2HOFSQL = $7E011E BG2HOFSQH = $7E011F BG1HOFSQL = $7E0120 BG1HOFSQH = $7E0121 BG2VOFSQL = $7E0122 BG2VOFSQH = $7E0123 BG1VOFSQL = $7E0124 BG1VOFSQH = $7E0125 ; Used as a counter for scrolling in the underworld. UWTRANSCR = $7E0126 ; FREE RAM: 0x01 UNUSED_7E0127 = $7E0127 ; Flags IRQ enabling during NMI ; 0x00 - Don't update BG3 scroll ; 0x01–0x7F - Enable IRQ ; 0x80–0xFF - Disable IRQ IRQSET = $7E0128 ; FREE RAM: 0x01 UNUSED_7E0129 = $7E0129 ; Flags whether IRQ is handling polyhedral text or credits IRQTHREAD = $7E012A ; FREE RAM: 0x01 UNUSED_7E012B = $7E012B ; APU I/O queues handled during NMI ; See sfx.txt and music.txt for expected values SONG = $7E012C SFX1 = $7E012D SFX2 = $7E012E SFX3 = $7E012F ; Stores the last nonzero song given to the SPC LASTSONG = $7E0130 ; Stores the last nonzero SFX1 given to the SPC LASTSFX1 = $7E0131 ; Used to queue up writes to SONG SONGQ = $7E0132 ; Stores the last anything written to SONG LASTAPU0 = $7E0133 ; Target VRAM address for animated tiles ANIMVRAML = $7E0134 ANIMVRAMH = $7E0135 ; Flags which song bank was last loaded to APU. ; 0x00 - overworld ; 0x01 - underworld SONGBANK = $7E0136 ; $00:0137–$00:01FF are essentially reserved for the stack. ; Explicitly read to save a return address after memory is cleared on reset. RESETRET = $7E01FE ; Top of stack STACK = $7E01FF ; --------------------------------------------------------- ; Used by interfaces as a submodule ID. ; High byte is never written, but always expected to be 0x00. INTSUBSUB = $7E0200 INTSUBSUBH = $7E0201 ; Index of currently selected item in the item menu. YSEL = $7E0202 ; Zeroed in item menu but never read. JUNK_7E0203 = $7E0203 ; Zeroed in item menu and set to 0x80 during file save. Never read. JUNK_7E0204 = $7E0204 ; Used as a step counter for opening/closing the bottle submenu. ; Also referenced in unused dungeon map module. BOTSUBGROW = $7E0205 ; Incremented every frame of the item menu, but never read. MENUFRAME = $7E0206 ; Incremented every frame and masked with 0x10 to blink the menu cursor. ; If bit 4 is set, the cursor is visible; otherwise, it is not. ; Reset to 0x10 when moving cursor. MENUBLINK = $7E0207 ; Timer for the flipping animation when health is restored. HPFLIPT = $7E0208 ; Animation step of health restoration heart flip. HPFLIPI = $7E0209 ; Flags heart refilling. HPFILL = $7E020A ; Appears to be a flag related to the menu and rod items. ; Zeroed in several places, but never set to any other value. DEBUG_7E020B = $7E020B ; Never really used. Scares MoN for some reason - "oh hells naw". ; Some unreachable debug code reads this when reading $020B. ; FREE RAM: 0x01 UNUSED_7E020C = $7E020C ; Used as a module index for dungeon map. DNGMAPSUBSUBSUB = $7E020D ; Holds the currently selected floor when using the dungeon map. MAPFLOOR = $7E020E ; Zeroed when scrolling dungeon map, but never read. JUNK_7E020F = $7E020F ; Flag to prevent input when scrolling the dungeon map. CANMAPSCR = $7E0210 ; Of the two floors shown on a dungeon map, this indicates which one is of ; the floor Link is currently on. ; High byte isn't relevant and is zeroed during drawing. ; 0x00 - top map ; 0x02 - bottom map MAPCURF = $7E0211 MAPCURFH = $7E0212 ; Velocity of background scroll for dungeon map. MAPSCRV = $7E0213 MAPSCRVH = $7E0214 ; Offset used for positioning the Link dot and crosshair sprites on dungeon maps. URHEREX = $7E0215 URHEREXH = $7E0216 URHEREY = $7E0217 URHEREYH = $7E0218 ; Location of HUD tile map in VRAM. ; Written when loading a file and called upon during NMI. HUDLOC = $7E0219 HUDLOCH = $7E021A ; Unused but referenced in an unused table entry indicating this address would have ; been used for stripes data of some sort...? UNUSED_7E021B = $7E021B UNUSED_7E021C = $7E021C ; Unused pointer written to with the value $007F4841. WEIRDPTRL = $7E021D WEIRDPTRH = $7E021E WEIRDPTRB = $7E021F WEIRDPTRU = $7E0220 ; Written to with the value 0xFFFF; never read. JUNK_7E0221 = $7E0221 JUNK_7E0222 = $7E0222 ; Zeroed during message routines, but never used. JUNK_7E0223 = $7E0223 ; BIG FREE RAM: 0x5C UNUSED_7E0224 = $7E0224 ; Forces ancilla priority higher during drawing and checks. ; TODO also collision related ; LENGTH: 0x0A ANC0FPRI = $7E0280 ANC1FPRI = $7E0281 ANC2FPRI = $7E0282 ANC3FPRI = $7E0283 ANC4FPRI = $7E0284 ANC5FPRI = $7E0285 ANC6FPRI = $7E0286 ANC7FPRI = $7E0287 ANC8FPRI = $7E0288 ANC9FPRI = $7E0289 ; Timer to rate limit tile collision calculations. ; Set to 0x06 after an "interesting" collision. ; LENGTH: 0x0A ANC0COLW = $7E028A ANC1COLW = $7E028B ANC2COLW = $7E028C ANC3COLW = $7E028D ANC4COLW = $7E028E ANC5COLW = $7E028F ANC6COLW = $7E0290 ANC7COLW = $7E0291 ANC8COLW = $7E0292 ANC9COLW = $7E0293 ; Ancilla Z velocity ; LENGTH: 0x0A ANC0VZ = $7E0294 ANC1VZ = $7E0295 ANC2VZ = $7E0296 ANC3VZ = $7E0297 ANC4VZ = $7E0298 ANC5VZ = $7E0299 ANC6VZ = $7E029A ANC7VZ = $7E029B ANC8VZ = $7E029C ANC9VZ = $7E029D ; Ancilla Z coordinate ; LENGTH: 0x0A ANC0Z = $7E029E ANC1Z = $7E029F ANC2Z = $7E02A0 ANC3Z = $7E02A1 ANC4Z = $7E02A2 ANC5Z = $7E02A3 ANC6Z = $7E02A4 ANC7Z = $7E02A5 ANC8Z = $7E02A6 ANC9Z = $7E02A7 ; Ancilla Z subpixel velocity ; LENGTH: 0x0A ANC0SUBZ = $7E02A8 ANC1SUBZ = $7E02A9 ANC2SUBZ = $7E02AA ANC3SUBZ = $7E02AB ANC4SUBZ = $7E02AC ANC5SUBZ = $7E02AD ANC6SUBZ = $7E02AE ANC7SUBZ = $7E02AF ANC8SUBZ = $7E02B0 ANC9SUBZ = $7E02B1 ; FREE RAM: 0x0E UNUSED_7E02B2 = $7E02B2 UNUSED_7E02B3 = $7E02B3 UNUSED_7E02B4 = $7E02B4 UNUSED_7E02B5 = $7E02B5 UNUSED_7E02B6 = $7E02B6 UNUSED_7E02B7 = $7E02B7 UNUSED_7E02B8 = $7E02B8 UNUSED_7E02B9 = $7E02B9 UNUSED_7E02BA = $7E02BA UNUSED_7E02BB = $7E02BB UNUSED_7E02BC = $7E02BC UNUSED_7E02BD = $7E02BD UNUSED_7E02BE = $7E02BE UNUSED_7E02BF = $7E02BF ; Tile act bitfield used by intraroom stairs ; High byte unused but written. ; ssss nnnn ; n - north ; s - south ; SEE TILE ACT NOTES TACTAUTOST = $7E02C0 TACTAUTOSTH = $7E02C1 ; Caches TACTMANIPL in a couple locations, but never read. TACTMCACHE = $7E02C2 ; Push block falling step and timer BLKFALLS = $7E02C3 BLKFALLT = $7E02C4 ; Some weird timer/flag when doing very long jumps or recoils. ; Seems to cause Link to hesitate briefly before actually jumping. JUMPDELAY = $7E02C5 ; Seems to be a counter for Link's bouncing and how many shifts right to perform. BOUNCESHIFT = $7E02C6 ; Link's recoil controlled by above before writing to KNOCKBZ. REBOUNCE = $7E02C7 ; FREE RAM: 0x01 UNUSED_7E02C8 = $7E02C8 ; Used for indexing the fall animation. PITANIMX = $7E02C9 ; Timer that counts up to 0x1F when pushing a wall into falling. ; TODO unsure of what it accomplishes. PUSHFALL = $7E02CA ; TODO swim stroke timer? STROKETIME = $7E02CB ; Acts as a step offset for swimming. ; 0, 1, 2 SWIMOFF = $7E02CC ; Countdown timer for follower messages. YELL = $7E02CD YELLH = $7E02CE ; Index from 0x00 to 0x13 for follower animation step index. Used for reading data. FLWANIMIR = $7E02CF ; Flag set when using hookshot with a follower. Forces game mode check. FLWHOOK = $7E02D0 ; Caches FLWANIMIW when hookshotting is finished. FLWHOOKI = $7E02D1 ; Countdown timer preventing followers from being regrabbed after dropping for a brief period. FLWGRABTIME = $7E02D2 ; Index from 0x00 to 0x13 for follower animation step index. Used for writing data. FLWANIMIW = $7E02D3 ; Zeroed in one location; never read. JUNK_7E02D4 = $7E02D4 ; FREE RAM: 0x01 UNUSED_7E02D5 = $7E02D5 ; Zeroed by followers; never read. JUNK_7E02D6 = $7E02D6 ; TODO ; Seems to be something with overriding properties. FLWREPRI = $7E02D7 ; Holds ID of item receipt items. ITEMGETID = $7E02D8 ; Written to with a value of 0x60 when receiving an item, but never read. JUNK_7E02D9 = $7E02D9 ; Pose for item receipt. ; 0x00 - No pose ; 0x01 - 1 hand up ; 0x02 - 2 hands up BRANDISH = $7E02DA ; Flag that prevents warp tiles from activating. ; Set during world changes, but always seems cleared before it can be read. NOWARP = $7E02DB ; Cache of Link's coordinates used during slope kickback routine. SKICKXL = $7E02DC SKICKXH = $7E02DD SKICKYL = $7E02DE SKICKYH = $7E02DF ; Should Link use bunny graphics? ; 0x00 - Link ; 0x01 - Bunny BUNNY = $7E02E0 ; Flag set when Link is poofing from cape or bunny. POOFING = $7E02E1 ; Countdown timer for poofing. POOFTIME = $7E02E2 ; Cooldown timer for the sword after dashing through an enemy ; Is set on hits in general, but often irrelevant. SWORDCOOL = $7E02E3 ; Flags cutscenes. ; Various values are written here, but all nonzero values behave the same. CUTSCENE = $7E02E4 ; Tile act bitfield used by chests ; High byte unused but written. ; .... cccc ; SEE TILE ACT NOTES TACTCHEST = $7E02E5 TACTCHESTH = $7E02E6 ; Tile act bitfield used by chests, etc. ; cccc gggg ; g - graves ; c - big chests ; SEE TILE ACT NOTES TACTCHEST2 = $7E02E7 ; Tile act bitfield used by spikes and pegs ; pppp ssss ; s - spikes ; p - pegs ; SEE TILE ACT NOTES TACTSPIKE = $7E02E8 ; TODO ; Item receipt method RECEIPTID = $7E02E9 ; Tile type of chests referenced when opening a chest. ; High byte unused but written. CHESTTILE = $7E02EA CHESTTILEH = $7E02EB ; When near a liftable ancilla, this holds its slot+1. LIFTIDX = $7E02EC ; Flag for being near a plaque. PLAQUED = $7E02ED ; Tile act bitfield used by spike floors and hylian plaques ; ssss pppp ; s - spike floor ; p - plaques ; SEE TILE ACT NOTES TACTSPLQ = $7E02EE ; Tile act bitfield used by breakables and entrances ; bbbb dddd ; d - entrance ; b - breakables ; SEE TILE ACT NOTES TACTBRK = $7E02EF ; When set, the Desert Palace barriers can activate. DSRTACT = $7E02F0 ; Starts at 0x40 and counts down to 0x20 ; If it could reach 0x0F (which it can't), Link would stop moving DASHSTOP = $7E02F1 ; Flags messages as already received from a follower via dynamic bitfield. FLWTALKED = $7E02F2 ; Zeroed in one location, but otherwise unused. JUNK_7E02F3 = $7E02F3 ; Used to temporarily cache SPRLIFT. LIFTCACHE = $7E02F4 ; Indicates somaria platform status. ; 0x00 - Not on platform ; 0x01 - On platform ; 0x02 - On platform and moving SOMPLAT = $7E02F5 ; Tile act bitfield used by hookshottables and flaggable doors ; dddd hhhh ; d - flaggable doors ; h - hookshottable tiles ; SEE TILE ACT NOTES TACTHOOK = $7E02F6 ; Tile act bitfield used by rupees ; bbbb rrrr ; b - rupee tiles (low) ; r - rupee tiles (high) ; SEE TILE ACT NOTES TACTRUPEE = $7E02F7 ; When set, guarantees a thud on landing. THUD = $7E02F8 ; When set, prevents follower from drawing and forces a game mode check. FLWNODRAW = $7E02F9 ; Set when near a draggable statue. Causes Link to drag. STATUE = $7E02FA ; FREE RAM: 0x05 UNUSED_7E02FB = $7E02FB UNUSED_7E02FC = $7E02FC UNUSED_7E02FD = $7E02FD UNUSED_7E02FE = $7E02FE UNUSED_7E02FF = $7E02FF ; --------------------------------------------------------- ; Step counter for Y-item animations. Also used for zap. ITEMSTEP = $7E0300 ; Bitfield for Y-item usage. ; See also: USEY2 ; bp.a xzhr ; b - boomerang ; p - powder ; a - bow ; x - tested with hammer, but never set ; z - tested with rods, but never set ; h - hammer ; r - rods USEY1 = $7E0301 ; Seems to be a flag for intraframe wall collisions, indicating pushback. COLLIDE = $7E0302 ; Currently equipped Y item. See: MenuID_to_EquipID CURY = $7E0303 ; Indicates the actively used Y item; copied from CURY ACTY = $7E0304 ; Only read in one location, never written. ; If equal to 0x01, tossing ancillae will clear TMWQ and TSWQ. NOWINDOW = $7E0305 ; Written to with the value of AINDEX in one location. Never read. AINDEX2 = $7E0306 ; Contains ACTY minus 4 to get rod type. ; 0x01 - Fire rod ; 0x02 - Ice rod ; Any other value would crash the game on use. RODTYPE = $7E0307 ; Bitfield for certain A button presses. ; h... ..dt ; h - carrying/tossing item (including wishing wells) ; d - Desert prayer ; t - tree pull ACTA = $7E0308 ; Bitfield for carry-related actions. ; .... ..tl ; t - tossing object ; l - lifting object CARRY = $7E0309 ; Indexes Link's grab animation, but all nonzero values seem to behave the same way. STRAIN = $7E030A ; Timer that handles Link's pull animation STRAINTIME = $7E030B ; FREE RAM: 0x01 UNUSED_7E030C = $7E030C ; Indexes Link's sweat drops animation SWEAT = $7E030D ; Only ever zeroed in bank07. ADC in bank0D for some reason. DEBUG_7E030E = $7E030E ; FREE RAM: 0x01 UNUSED_7E030F = $7E030F ; Moving floor velocity like Mothula or Ice Place FLOORVYL = $7E0310 FLOORVYH = $7E0311 FLOORVXL = $7E0312 FLOORVXH = $7E0313 ; When near a liftable sprite, this holds its slot +1. SPRLIFT = $7E0314 ; TODO ; Some type of flag set for collision checks COLFLAG = $7E0315 ; Flags which axes moving walls should push or something. MVONY = $7E0316 MVONX = $7E0317 ; Scratch spaced used for caching Link's coordinates during moving floor routines. FLRYL = $7E0318 FLRYH = $7E0319 FLRXL = $7E031A FLRXH = $7E031B ; Animation step/graphics for spin attack animations; including medallions. SPINGFX = $7E031C SPINSTEP = $7E031D ; Data offset based on direction for SPINSTEP. SPINOFF = $7E031E ; Countdown timer for invulnerability frames. Induces blinking. IFRAMES = $7E031F ; Tile act bitfield used by overlay masks ; High byte unused but written. ; .... cccc ; c - Mask 0C ; SEE TILE ACT NOTES TACTMASK0C = $7E0320 TACTMASK0CH = $7E0321 ; TODO some bitfield flagging interaction with mask0C? MASK0CON = $7E0322 ; Copies DIR for use during Link's OAM routines. ; Explicitly set to down (0x02) for Desert prayer. OAMDIR = $7E0323 ; When nonzero, prevents medallion spell ancillae from being added. ; Flagged by medallion use routines to prevent multiple from being added. ADDSPELL = $7E0324 ; Zeroed by medallion ancillae, but never read. JUNK_7E0325 = $7E0325 ; Momentum for ice/swimming ; When a direction is released, these count down to 0. MOMENTUMY = $7E0326 MOMENTUMYH = $7E0327 MOMENTUMX = $7E0328 MOMENTUMXH = $7E0329 ; Number of times the stroke timer has counted down (stops at 4) STROKETIMECNT = $7E032A ; Used to index accelaration for thrust changes. ; Max expected value is 0x0002 SWIMIY = $7E032B SWIMIYH = $7E032C SWIMIX = $7E032D SWIMIXH = $7E032E ; Flags checking swim accleration resets SWIMRESY = $7E032F SWIMRESYH = $7E0330 SWIMRESX = $7E0331 SWIMRESXH = $7E0332 ; Current tile type torch or lamp are interacting with FIRETILE = $7E0333 ; Max accelarations when swimming SWIMPYL = $7E0334 SWIMPYH = $7E0335 SWIMPXL = $7E0336 SWIMPXH = $7E0337 ; Seems to flag acceleration to have on each axis; high byte unused. AFLAGY = $7E0338 AFLAGYH = $7E0339 AFLAGX = $7E033A AFLAGXH = $7E033B ; Swim acceleration and thrust, related to gaining speed in the water. SWIMACCELY = $7E033C SWIMTHRUSTY = $7E033D SWIMACCELX = $7E033E SWIMTHRUSTX = $7E033F ; Bitfield for swim direction inputs ; .... udlr ; u - up ; d - down ; l - left ; r - right SWIMDIR = $7E0340 ; Tile act bitfield used by water ; High byte unused but written. ; bbbb dddd ; d - deep water ; b - tile 0B TODO ; SEE TILE ACT NOTES TACTDEEPW = $7E0341 TACTDEEPWH = $7E0342 ; Tile act bitfield used by tile 0A and another nothing ; Used to detect whether Link should jump in or out of water. ; High byte unused but written. ; .... aaaa ; SEE TILE ACT NOTES TACTJW = $7E0343 TACTJWH = $7E0344 ; Set when on deep water. DEEPWATER = $7E0345 ; Used to swap Link's palette between 0 and 7. ; Takes on the values of 0x0E00 or 0x0000, depending on COLROOM. LINKPALIL = $7E0346 LINKPALIH = $7E0347 ; Tile act bitfield used by ice. ; High byte unused but written. ; iiii gggg ; i - ice palace ice ; g - gt ice ; SEE TILE ACT NOTES TACTICE = $7E0348 TACTICEH = $7E0349 ; Appears to flag what type of ice floor Link is walking on ; .... ..ig ; i - ice palace ice ; g - gt ice ICEFLOOR = $7E034A ; Debug flag related to the rods and item menu scrolling. ; Written, but never read. DEBUGROD = $7E034B ; Tile act bitfield used by overlay mask 1C ; High byte unused but written. ; .... mmmm ; SEE TILE ACT NOTES TACTMASK1C = $7E034C TACTMASK1CH = $7E034D ; TODO ; Something with Link's OAM priority and somaria platform. SOMPRI = $7E034E ; Non zero when stroking while swimming STROKE = $7E034F ; Written to in various places, but never read. DEBUG_7E0350 = $7E0350 ; Controls the graphical effect around Link's feet ; 0x00 - shadow handler ; 0x01 - water ripple ; 0x02 - grass FEETS = $7E0351 ; Used to index an offset into OAM buffer for Link's draw routines. LOAMXL = $7E0352 LOAMXH = $7E0353 ; Index of animation for Link's auxiliary sprite objects. AUXDRAW = $7E0354 ; Animation step and timer for water ripples and tall grass at Link's feet. SLOSHSTEP = $7E0355 SLOSHTIME = $7E0356 ; Tile act bitfield used by thick grass and warps ; High byte unused but written. ; wwww tttt ; t - thick grass ; w - warp ; SEE TILE ACT NOTES TACTTHICK = $7E0357 TACTTHICKH = $7E0358 ; Tile act bitfield used by shallow water ; High byte unused but written. ; .... ssss ; SEE TILE ACT NOTES TACTSHALLOW = $7E0359 TACTSHALLOWH = $7E035A ; Tile act bitfield used by diggable ground. ; High byte unused but written. ; .... dddd ; SEE TILE ACT NOTES TACTDIG = $7E035B TACTDIGH = $7E035C ; OAM properties of Link's shadow. SHDWPROPL = $7E035D SHDWPROPH = $7E035E ; Flags whether the boomerang is already active. ; Also used by GAME OVER text for indexing. BOOMOUT = $7E035F ; When set, recoils will cause Link to feel electricity ZAP = $7E0360 ; FREE RAM: 0x01 UNUSED_7E0361 = $7E0361 ; Something with hopping; often takes value of SPEEDZ ; TODO HOPVZ2 = $7E0362 HOPVZ2H = $7E0363 ; Acts as a Z-coordinate sort of when jumping ledges HOPZ = $7E0364 HOPZH = $7E0365 ; Tile act bitfield used by liftables in some weird way?? TODO ; High byte unused but written. ; .... llll ; SEE TILE ACT NOTES TACTLIFTC = $7E0366 TACTLIFTCH = $7E0367 ; Tile type of liftables, usually obtained from LIFTIDX>>1 ; Also contains values checked for underworld tile replacement. LIFTX = $7E0368 ; Same as LIFTX, but never read. LIFTX2 = $7E0369 ; Liftable index set during TileBehavior_Liftable ; high byte always 00 LIFTBX = $7E036A ; Flags Link being in the death spin animation DIESPIN = $7E036B ; Index for which action to perform when A is pressed. ; 0x00 - Prayer (unused) ; 0x01 - Lift/Carry/Throw ; 0x02 - Dash ; 0x03 - Grab ; 0x04 - Read ; 0x05 - Open chest ; 0x06 - Drag statue ; 0x07 - Rupee pull (not actually set) AINDEX = $7E036C ; Tile act bitfield used by ledges ; ssss nnnn ; n - north ; s - south ; SEE TILE ACT NOTES TACTHOPNS = $7E036D ; Tile act bitfield used by horizontal and diagonal north ledges ; dddd hhhh ; h - east/west ledge ; d - diagonal north ; SEE TILE ACT NOTES TACTHOPHD = $7E036E ; Tile act bitfield used by diagonal south ledges ; .... ssss TACTSD = $7E036F ; Tile act bitfield used by weird things in EP ; dddd cccc ; SEE TILE ACT NOTES TACTEP = $7E0370 ; Timer used to start and restart Link's pushing animation. PUSHTIME = $7E0371 ; Flags dashing; known for spinspeed. DASHING = $7E0372 ; Damage to deal to Link HURTME = $7E0373 ; Dash charge timer DASHTIME = $7E0374 ; Countdown timer for hopping a ledge. Default start at 0x13. HOPTIME = $7E0375 ; .... ..sw ; s - grabbing statue ; w - grabbing wall GRABBING = $7E0376 ; Frame of grabbing? GRABFRAME = $7E0377 ; Timer related to changing directions on inter-room spiral stairs. STAIRDIRT = $7E0378 ; When set, the A press routine is short circuited. NOA = $7E0379 ; Bitfield for Y-item usage. ; See also: USEY1 ; ..bn ch.s ; b - book ; n - net ; c - canes ; h - hookshot ; s - shovel USEY2 = $7E037A ; Prevents Link from recieving damage. NOPAIN = $7E037B ; Sleep submode for link state 0x16 SLEEPMODE = $7E037C ; Determines how exactly Link is in bed. ; 0x00 - sleep ; 0x01 - awake ; 0x02 - jumping out SLEEPSTAGE = $7E037D ; Bitfield for hookshot drag stuff. ; .... ..ld ; l - set when crossing a hop tile; seems to flag which layer to read from. ; d - hookshot drag in effect HOOKDRAG = $7E037E ; When nonzero, Link can walk through walls and use a 2-way mirror. CHEAT = $7E037F ; General use variable for ancillae. Only intended for front slots. ; LENGTH: 0x05 ANC0MISCA = $7E0380 ANC1MISCA = $7E0381 ANC2MISCA = $7E0382 ANC3MISCA = $7E0383 ANC4MISCA = $7E0384 ; General use variable for ancillae. ; LENGTH: 0x0A ANC0MISCB = $7E0385 ANC1MISCB = $7E0386 ANC2MISCB = $7E0387 ANC3MISCB = $7E0388 ANC4MISCB = $7E0389 ANC5MISCB = $7E038A ANC6MISCB = $7E038B ANC7MISCB = $7E038C ANC8MISCB = $7E038D ANC9MISCB = $7E038E ; General use variable for ancillae. Only intended for front slots. ; Only used by hammer stars and gravestones. ; LENGTH: 0x05 ANC0MISCC = $7E038F ANC1MISCC = $7E0390 ANC2MISCC = $7E0391 ANC3MISCC = $7E0392 ANC4MISCC = $7E0393 ; General use variable for ancillae. Only intended for front slots. ; Often used as a timer. ; LENGTH: 0x05 ANC0MISCD = $7E0394 ANC1MISCD = $7E0395 ANC2MISCD = $7E0396 ANC3MISCD = $7E0397 ANC4MISCD = $7E0398 ; Temporary cache of boomerang coordinates used for placing the wall hit spark. BOOMHITYL = $7E0399 BOOMHITYH = $7E039A BOOMHITXL = $7E039B BOOMHITXH = $7E039C ; Slot index of active hookshot. ; Also used by boomerang to flag directions when first thrown. HOOKSLOT = $7E039D ; FREE RAM: 0x01 UNUSED_7E039E = $7E039E ; General use variable for ancillae. Only intended for front slots. ; Mainly used as a timer. ; LENGTH: 0x05 ANC0MISCE = $7E039F ANC1MISCE = $7E03A0 ANC2MISCE = $7E03A1 ANC3MISCE = $7E03A2 ANC4MISCE = $7E03A3 ; General use variable for ancillae. Only intended for front slots. ; LENGTH: 0x05 ANC0MISCF = $7E03A4 ANC1MISCF = $7E03A5 ANC2MISCF = $7E03A6 ANC3MISCF = $7E03A7 ANC4MISCF = $7E03A8 ; General use variable for ancillae. Only intended for front slots. ; LENGTH: 0x05 ANC0MISCG = $7E03A9 ANC1MISCG = $7E03AA ANC2MISCG = $7E03AB ANC3MISCG = $7E03AC ANC4MISCG = $7E03AD ; Technically unreferenced but misslotting... ; FREE RAM: 0x03 UNUSED_7E03AE = $7E03AE UNUSED_7E03AF = $7E03AF UNUSED_7E03B0 = $7E03B0 ; General use variable for ancillae. Only intended for front slots. ; LENGTH: 0x05 ANC0MISCH = $7E03B1 ANC1MISCH = $7E03B2 ANC2MISCH = $7E03B3 ANC3MISCH = $7E03B4 ANC4MISCH = $7E03B5 ; Bombed door properties BOMB0ATXL = $7E03B6 BOMB0ATXH = $7E03B7 BOMB1ATXL = $7E03B8 BOMB1ATXH = $7E03B9 BOMB0ATYL = $7E03BA BOMB0ATYH = $7E03BB BOMB1ATYL = $7E03BC BOMB1ATYH = $7E03BD BOMB0ATDIR = $7E03BE BOMB1ATDIR = $7E03BF ; Timer for door debris existing DEBRIS0T = $7E03C0 DEBRIS1T = $7E03C1 ; Step counter for door debris based on timer. Counts up to 0x04. ; Used by other ancilla for dumb reasons. DEBRIS0I = $7E03C2 DEBRIS1I = $7E03C3 ; Used to search through ancilla when every front slot is occupied. ASEARCH = $7E03C4 ; General use variable for ancillae. Only intended for front slots. ; LENGTH: 0x05 ANC0MISCI = $7E03C5 ANC1MISCI = $7E03C6 ANC2MISCI = $7E03C7 ANC3MISCI = $7E03C8 ANC4MISCI = $7E03C9 ; General use variable for ancillae. Only intended for front slots. ; LENGTH: 0x05 ANC0MISCJ = $7E03CA ANC1MISCJ = $7E03CB ANC2MISCJ = $7E03CC ANC3MISCJ = $7E03CD ANC4MISCJ = $7E03CE ; General use variable for ancillae. Only intended for front slots. ; LENGTH: 0x05 ANC0MISCK = $7E03CF ANC1MISCK = $7E03D0 ANC2MISCK = $7E03D1 ANC3MISCK = $7E03D2 ANC4MISCK = $7E03D3 ; Technically unused, but misslotting... UNUSED_7E03D4 = $7E03D4 ; General use variable for ancillae. Only intended for front slots. ; Used by the carry routine? TODO ; LENGTH: 0x05 ANC0MISCL = $7E03D5 ANC1MISCL = $7E03D6 ANC2MISCL = $7E03D7 ANC3MISCL = $7E03D8 ANC4MISCL = $7E03D9 ; Technically unused, but misslotting... UNUSED_7E03DA = $7E03DA ; Used by somaria to count the number of button tiles it's on. ; Only intended for front slots. ; LENGTH: 0x05 SOM0BTN = $7E03DB SOM1BTN = $7E03DC SOM2BTN = $7E03DD SOM3BTN = $7E03DE SOM4BTN = $7E03DF ; Technically unused, but misslotting... UNUSED_7E03E0 = $7E03E0 UNUSED_7E03E1 = $7E03E1 UNUSED_7E03E2 = $7E03E2 UNUSED_7E03E3 = $7E03E3 ; Tile type ID for ancilla. Only intended for front slots. ; LENGTH: 0x05 ANC0TILE = $7E03E4 ANC1TILE = $7E03E5 ANC2TILE = $7E03E6 ANC3TILE = $7E03E7 ANC4TILE = $7E03E8 ; Flag indicating a gravestone is active. GRAVEON = $7E03E9 ; Flag that prevents lifting ancilla. Only intended for front slots. ; LENGTH: 0x05 ANC0NOLIFT = $7E03EA ANC1NOLIFT = $7E03EB ANC2NOLIFT = $7E03EC ANC3NOLIFT = $7E03ED ANC4NOLIFT = $7E03EE ; Forces Link into a sword-up pose SWORDUP = $7E03EF ; Countdown timer for being allowed to use the flute. WHISTLE = $7E03F0 ; Tile act bitfield used by conveyor belts ; rrrrllll dddduuuu ; u - upwards ; d - downwards ; l - leftwards ; r - rightwards ; SEE TILE ACT NOTES TACTBELTUD = $7E03F1 TACTBELTLR = $7E03F2 ; Conveyor type ; 0x00 - none ; 0x01 - up ; 0x02 - down ; 0x03 - left ; 0x04 - right CONVEYOR = $7E03F3 ; Counts the number of transit tiles in a room; checked by somaria. ; Technically 2 bytes, but you shouldn't have that many of these objects in a room... LINECOUNT = $7E03F4 ; Timer for temporary bunny. TEMPBUNTM = $7E03F5 TEMPBUNTMH = $7E03F6 ; Flag for ticking TEMPBUNTM TEMPBUN = $7E03F7 ; Flag for being near a rupee pull. ATPULL = $7E03F8 ; Countsdown from 4 to prevent toggling bit 1 of HOOKDRAG. ; Only seems to be that way to prevent toggling every frame. HOOKWAIT = $7E03F9 ; Bit 8 of OAM X coordinate for drawing Link's sword and shield EQUOFFXL = $7E03FA EQUOFFXH = $7E03FB ; Y-item override for minigames. ; 0x00 - Selected item ; 0x01 - Shovel ; 0x02 - Bow YOVERRIDE = $7E03FC ; Flags flute ducks summoned inside. INBIRD = $7E03FD ; FREE RAM: 0x02 UNUSED_7E03FE = $7E03FE UNUSED_7E03FF = $7E03FF ; --------------------------------------------------------- ; Doors unlocked in a given room ; High byte is the main one used and sent to SRAM. ; It is copied to the low byte for no reason when loading a room. UNLOCKED2 = $7E0400 UNLOCKED = $7E0401 ; Doors opened (not necessarily unlocked) in a given room ; Not a very consistent reference. ; Definitely flags the TR eye door and some shutters OPENED = $7E0402 ; Items taken in a room ; Bit 7 prevents damage from bombs and spikes ; bkut sehc ; b - boss kill / heart container ; k - key / heart piece / crystal (unused for crystals, but prevents them from dropping) ; u - 2nd key / heart piece ; t - chest 4 / rupee floor / swamp drains / bombable floor / mire wall ; s - chest 3 / pod or desert wall ; e - chest 2 ; h - chest 1 ; c - chest 0 TAKEN = $7E0403 ; FREE RAM: 0x01 UNUSED_7E0404 = $7E0404 ; Read by water flooding, but never written. JUNK_7E0405 = $7E0405 ; FREE RAM: 0x02 UNUSED_7E0406 = $7E0406 UNUSED_7E0407 = $7E0407 ; Quadrant visits ; High byte unused ; .... abcd ; a - north west ; b - north east ; c - south west ; d - south east VISITED = $7E0408 VISITEDH = $7E0409 ; Copy of OWSCR ; High byte has an explicit STZ OWSCR2 = $7E040A OWSCR2H = $7E040B ; Dungeon IDs, multiples of 2. ; High byte mostly unused but sometimes read. DUNGEON = $7E040C DUNGEONH = $7E040D ; Dungeon room layout ; High byte zeroed but unused LAYOUT = $7E040E LAYOUTH = $7E040F ; Transition direction on overworld. ; High byte unused ; .... udlr ; u - north ; d - south ; l - west ; r - east OWTDIR = $7E0410 OWTDIRH = $7E0411 ; Incremental VRAM upload step UPINCSTEP = $7E0412 ; FREE RAM: 0x01 UNUSED_7E0413 = $7E0413 ; TODO ; Background stuff BGACT = $7E0414 BGACTH = $7E0415 ; Designates which vector to follow when updating the overworld tilemap ; High byte seems unused MAPPANVCT = $7E0416 MAPPANVCTH = $7E0417 ; Transition direction ; For some reason, parity is flipped between overworld and underworld ; High byte is zeroed but not read ; Overworld Underworld ; 0x00 - North South ; 0x01 - South North ; 0x02 - West East ; 0x03 - East West TRANDIR = $7E0418 TRANDIRH = $7E0419 ; Flags for room tags to move a wall ; Also flags moving floor TODO MVWALL = $7E041A MVWALLH = $7E041B ; Seems to be a subpixel for moving walls and floors MWSUBL = $7E041C MWSUBH = $7E041D ; Used to saved an index value for moving walls MWDRAWXL = $7E041E MWDRAWXH = $7E041F ; Zeroed once, but never read. JUNK_7E0420 = $7E0420 JUNK_7E0421 = $7E0421 ; BG1 relative offset from BG2 when $0428 is flagged BG1OFFHL = $7E0422 BG1OFFHH = $7E0423 BG1OFFVL = $7E0424 BG1OFFVH = $7E0425 ; FREE RAM: 0x02 UNUSED_7E0426 = $7E0426 UNUSED_7E0427 = $7E0427 ; TODO something with scrolling bg1 UNKNOWN_7E0428 = $7E0428 ; FREE RAM: 0x01 UNUSED_7E0429 = $7E0429 ; Tilemap address of moving wall MWALLTMAP = $7E042A MWALLTMAPH = $7E042B ; Used to index manipulable objects when building rooms; pots, blocks, etc. MANIPINDEX = $7E042C MANIPINDEXH = $7E042D ; Used to index torches when building rooms TORCHINDEX = $7E042E TORCHINDEXH = $7E042F ; Flags whether Link is standing on a toggle switch (not hold switch). ONSWITCH = $7E0430 ONSWITCHH = $7E0431 ; Used to index star tile arrays when building rooms STARINDEX = $7E0432 STARINDEXH = $7E0433 ; FREE RAM: 0x02 UNUSED_7E0434 = $7E0434 UNUSED_7E0435 = $7E0435 ; Seems to flag the eye door to Turtle Rock compass. ; Defaults to 0xFFFF. EYEDOORL = $7E0436 EYEDOORH = $7E0437 ; Indexes stairs when building rooms. STAIRSI = $7E0438 STAIRSIH = $7E0439 STAIRSI2 = $7E043A STAIRSI2H = $7E043B ; Indexes all sorts of inter-room stairs ; TODO split RSTAIRSI = $7E043C RSTAIRSIH = $7E043D RSTAIRSI2 = $7E043E RSTAIRSI2H = $7E043F RSTAIRSI3 = $7E0440 RSTAIRSI3H = $7E0441 RSTAIRSI4 = $7E0442 RSTAIRSI4H = $7E0443 RSTAIRSI5 = $7E0444 RSTAIRSI5H = $7E0445 RSTAIRSI6 = $7E0446 RSTAIRSI6H = $7E0447 RSTAIRSI7 = $7E0448 RSTAIRSI7H = $7E0449 ; Identifies the layer interaction behavior of a room. ; Also known as "EG Strength" EGSTR = $7E044A EGSTRH = $7E044B ; FREE RAM: 0x02 UNUSED_7E044C = $7E044C UNUSED_7E044D = $7E044D ; Indexes layer swap doors when building rooms. LSWAPI = $7E044E LSWAPIL = $7E044F ; Indexes dungeon swap doors when building rooms. DSWAPI = $7E0450 DSWAPIH = $7E0451 ; Flags layout changes from moving wall WALLYT = $7E0452 WALLYTH = $7E0453 ; Flags active exploding walls BLASTWALL = $7E0454 BLASTWALLH = $7E0455 ; Indexes exploding walls when building rooms. BLASTWI = $7E0456 BLASTWIH = $7E0457 ; Flags having lamp while in a dark room ; High byte always expected to be 0x00. DARKLAMP = $7E0458 DARKLAMPH = $7E0459 ; Number of torches lit in a room ; High byte always expected to be 0x00. LIGHT = $7E045A LIGHTH = $7E045B ; Used in increments of 0x04 to draw quadrants. ; High byte always 0x00 QUADOFF = $7E045C QUADOFFH = $7E045D ; Indexes a room object with an unreachable routine. UNINDEX = $7E045E UNINDEXH = $7E045F ; Indexes doors when building rooms DOORX = $7E0460 DOORXH = $7E0461 ; Stair tile type when using inter room stairs ; 0x04 - upwards? ; this bit is checked for being reset for incrementing floor counter on transitions STAIRATTR = $7E0462 ; Gets a value from above, but this appears useless. JUNK_7E0463 = $7E0463 ; Countdown timer used when climbing stairs. STAIRSTEP = $7E0464 ; FREE RAM: 0x01 UNUSED_7E0465 = $7E0465 ; Takes on SHUTTER ^ 0x0001 when a push block covers a switch. BLKSWITCH = $7E0466 BLKSWITCHH = $7E0467 ; Flags shutter doors being down. SHUTTER = $7E0468 SHUTTERH = $7E0469 ; Floor 1 draw FLOOR1 = $7E046A FLOOR1H = $7E046B ; TODO "collision" BG1FX = $7E046C ; FREE RAM: 0x03 UNUSED_7E046D = $7E046D UNUSED_7E046E = $7E046E UNUSED_7E046F = $7E046F ; Used for timing and indexing the dam flood. Counts up to 0x40 DAMTIME = $7E0470 DAMTIMEH = $7E0471 ; Tilemap location of watergate in the dam. DAMTMAP = $7E0472 DAMTMAPH = $7E0473 ; Direction a push block was pushed. ; High byte always 0x00. ; 0x00 - up ; 0x02 - down ; 0x04 - left ; 0x06 - right BLOCKDIR = $7E0474 BLOCKDIRH = $7E0475 ; More layer, similar to LAYER, but different. ; Sometimes kept in sync. DLAYER = $7E0476 ; FREE RAM: 0x01 UNUSED_7E0477 = $7E0477 ; Number of manipulable objects in a room, x2. ; Kept in sync with MANIPINDEX and TORCHINDEX. MANIPCOUNT = $7E0478 MANIPCOUNTH = $7E0479 ; Flags layer adjustments occuring. ; Famous for arming EG. ARMEG = $7E047A ; FREE RAM: 0x01 UNUSED_7E047B = $7E047B ; Flag to adjust the offset of water vomit face drawing. H20VOMIT = $7E047C H20VOMITH = $7E047D ; Used to index stairs of all types when building rooms. STAIRSI3 = $7E047E STAIRSI3H = $7E047F STAIRSI4 = $7E0480 STAIRSI4H = $7E0481 STAIRSI5 = $7E0482 STAIRSI5H = $7E0483 STAIRSI6 = $7E0484 STAIRSI6H = $7E0485 ; Tilemap index of bomb walls in overworld BWALLT1 = $7E0486 BWALLT1H = $7E0487 BWALLT2 = $7E0488 BWALLT2H = $7E0489 ; Stair type interacted with STAIRID = $7E048A STAIRIDH = $7E048B ; Tile map index of stair interacted with STAIRT = $7E048C STAIRTH = $7E048D ; Mirrors ROOM ROOMCOPY = $7E048E ROOMCOPYH = $7E048F ; Floor 2 type FLOOR2 = $7E0490 FLOOR2H = $7E0491 ; Flags previous stair index? STAIRLI = $7E0492 STAIRLIH = $7E0493 ; Counts from 0x00 to 0x03 to animate the overworld rain overlay RAINSTEP = $7E0494 ; FREE RAM: 0x01 UNUSED_7E0495 = $7E0495 ; Used to index chests when building rooms. CHESTINDEX = $7E0496 CHESTINDEXH = $7E0497 CHESTINDEX2 = $7E0498 CHESTINDEX2H = $7E0499 ; Indexes south inter-room stairs when building rooms. SSTAIRI = $7E049A SSTAIRIH = $7E049B SSTAIRI2 = $7E049C SSTAIRI2H = $7E049D SSTAIRI3 = $7E049E SSTAIRI3H = $7E049F ; Timer used to display the floor number on HUD. Counts up to 0x00C0 FLOORTIME = $7E04A0 FLOORTIMEH = $7E04A1 ; More stair indexing for some stupid reason... STAIRSI7 = $7E04A2 STAIRSI7H = $7E04A3 STAIRSI8 = $7E04A4 STAIRSI8H = $7E04A5 STAIRSI9 = $7E04A6 STAIRSI9H = $7E04A7 STAIRSIA = $7E04A8 STAIRSIAH = $7E04A9 ; If set, entrance loading is treated as respawning. RESPAWN = $7E04AA RESPAWNH = $7E04AB ; Index for map16 tile change buffes on overworld M16CHINDX = $7E04AC M16CHINDXH = $7E04AD ; More south auto stairs... SSTAIRI4 = $7E04AE SSTAIRI4H = $7E04AF ; TODO ; Tilemap thing with unused object. UTMAP = $7E04B0 UTMAPH = $7E04B1 ; Written to with 0x0492 if the flute spot is dug up. Otherwise zero. ; Nonzero values let the flute spawn. FLUTEX = $7E04B2 FLUTEXH = $7E04B3 ; Timer used by minigames and big bomb. HUDTIMER = $7E04B4 ; Counts down from 60 to tick HUDTIMER HUDTMSUB = $7E04B5 ; Tilemap position of triggers when stood on. TRIGGERT = $7E04B6 TRIGGERTH = $7E04B7 ; Set nonzero when you've triggered a message on a door/entrance ; Cleared when you've stepped away. ; High byte always 0x00. DOORMSG = $7E04B8 DOORMSGH = $7E04B9 ; Hole overlay ID for star switches. ; High byte always 0x00. HOLES = $7E04BA HOLESH = $7E04BB ; Current state of star switches. STARON = $7E04BC ; FREE RAM: 0x01 UNUSED_7E04BD = $7E04BD ; Timers for Trinexx shell palette filtering PTIMEFIRE = $7E04BE PTIMEICE = $7E04BF ; Step counters for Trinexx shell palette filtering SHELLFIRE = $7E04C0 SHELLICE = $7E04C1 ; Timer used by falling items. MFALLTIME = $7E04C2 ; FREE RAM: 0x01 UNUSED_7E04C3 = $7E04C3 ; Number of chances left for chest minigames. CREDITS = $7E04C4 ; Control's Ganon's vulnerability. HITPIG = $7E04C5 ; Overworld entrance cutscene to play OWENTSC = $7E04C6 ; When set, dungeon room tags are not executed. NOTAG = $7E04C7 ; Counts number of pegs hammered in the stake field. ; Tracks which step is being checked for TR pegs. PEGCOUNTL = $7E04C8 PEGCOUNTH = $7E04C9 ; Countdown timer for heart beep. Starts at 32. BEEP = $7E04CA ; FREE RAM: 0x25 UNUSED_7E04CA = $7E04CB ; Countdown timers for torches. TORCH0 = $7E04F0 TORCH1 = $7E04F1 TORCH2 = $7E04F2 TORCH3 = $7E04F3 TORCH4 = $7E04F4 TORCH5 = $7E04F5 TORCH6 = $7E04F6 TORCH7 = $7E04F7 TORCH8 = $7E04F8 TORCH9 = $7E04F9 TORCHA = $7E04FA TORCHB = $7E04FB TORCHC = $7E04FC TORCHD = $7E04FD TORCHE = $7E04FE TORCHF = $7E04FF ; --------------------------------------------------------- ; Used in the overworld as a buffer for tile16 M16BUFF500 = $7E0500 M16BUFF520 = $7E0520 ; Properties for manipulable objects. 2 bytes allotted for each. ; 0x0000 - Nothing / stationary push block ; 0x0001 - Triggered push block ; 0x0002 - Moving push block ; 0x0003 - Done moving push block ; 0x0004 - Falling push block ; 0x0005 - Push block on switch ; 0x1010 - Pot requiring lift 2 ; 0x1111 - Normal pot ; 0x1212 - Ugly pot ; 0x2020 - Big gray rock ; 0x2121 - Big gray rock ; 0x2222 - Big gray rock ; 0x2323 - Big gray rock ; 0x3030 - Bombable floor ; 0x3131 - Bombable floor ; 0x3232 - Bombable floor ; 0x3333 - Bombable floor ; 0x4040 - Hammer peg MANIPPROPS = $7E0500 ; Offset into ROM data of the object MANIPOBJX = $7E0520 ; Tile map position for manipulables MANIPTMAPX = $7E0540 ; Replacement tiles for manipulables MANIPRTNW = $7E0560 MANIPRTSW = $7E0580 MANIPRTNE = $7E05A0 MANIPRTSE = $7E05C0 ; Push block properties ; Coordinates take 2 bytes, but only the lower byte is used. ; Marked with U for unused ; X high PBLOCK0XH = $7E05E0 PBLOCK0XHU = $7E05E1 PBLOCK1XH = $7E05E2 PBLOCK1XHU = $7E05E3 ; X low PBLOCK0XL = $7E05E4 PBLOCK0XLU = $7E05E5 PBLOCK1XL = $7E05E6 PBLOCK1XLU = $7E05E7 ; Target coordinate in direction, masked with 0x0F PBLOCK0TARG = $7E05E8 PBLOCK0TARGU = $7E05E9 PBLOCK1TARG = $7E05EA PBLOCK1TARGU = $7E05EB ; Y high PBLOCK0YH = $7E05EC PBLOCK0YHU = $7E05ED PBLOCK1YH = $7E05EE PBLOCK1YHU = $7E05EF ; Y low PBLOCK0YL = $7E05F0 PBLOCK0YLU = $7E05F1 PBLOCK1YL = $7E05F2 PBLOCK1YLU = $7E05F3 ; Possibly a vestigial subpixel value? Never actually read PBLOCK0SUBL = $7E05F4 PBLOCK0SUBH = $7E05F5 PBLOCK1SUBL = $7E05F6 PBLOCK1SUBH = $7E05F7 ; direction PBLOCK0DIR = $7E05F8 PBLOCK0DIRU = $7E05F9 PBLOCK1DIR = $7E05FA PBLOCK1DIRU = $7E05FB ; Block indices PBLOCK0X = $7E05FC PBLOCK1X = $7E05FD ; FREE RAM: 0x02 UNUSED_7E05FE = $7E05FE UNUSED_7E05FF = $7E05FF ; --------------------------------------------------------- ; Camera scroll boundaries for big (B) and small (A) rooms in directions NSEW SCROLLAN = $7E0600 SCROLLANH = $7E0601 SCROLLBN = $7E0602 SCROLLBNH = $7E0603 SCROLLAS = $7E0604 SCROLLASH = $7E0605 SCROLLBS = $7E0606 SCROLLBSH = $7E0607 SCROLLAW = $7E0608 SCROLLAWH = $7E0609 SCROLLBW = $7E060A SCROLLBWH = $7E060B SCROLLAE = $7E060C SCROLLAEH = $7E060D SCROLLBE = $7E060E SCROLLBEH = $7E060F ; Seems to be target positions of movement for overworld transitions OWTARGN = $7E0610 OWTARGNH = $7E0611 OWTARGS = $7E0612 OWTARGSH = $7E0613 OWTARGW = $7E0614 OWTARGWH = $7E0615 OWTARGE = $7E0616 OWTARGEH = $7E0617 ; Camera scroll trigger areas for directions NSEW ; The higher boundary should always be +2 from the lower in underworld and -2 in overworld SCROLLATN = $7E0618 SCROLLATNH = $7E0619 SCROLLATS = $7E061A SCROLLATSH = $7E061B SCROLLATW = $7E061C SCROLLATWH = $7E061D SCROLLATE = $7E061E SCROLLATEH = $7E061F ; Behaves as a subpixel for background 1 overlay scroll on overworld OWBG1SUBPX = $7E0620 OWBG1SUBPXH = $7E0621 OWBG1SUBPY = $7E0622 OWBG1SUBPYH = $7E0623 ; TODO analyze ; Seems to track overworld camera stuff ; The B variables are always the additive inverse of the A variables SCRMODYA = $7E0624 SCRMODYAH = $7E0625 SCRMODYB = $7E0626 SCRMODYBH = $7E0627 SCRMODXA = $7E0628 SCRMODXAH = $7E0629 SCRMODXB = $7E062A SCRMODXBH = $7E062B ; Takes on the background 2 scroll values AND 0xFE00 BGOFEHL = $7E062C BGOFEHH = $7E062D BGOFEVL = $7E062E BGOFEVH = $7E062F ; BG3 horizontal scroll during credits ; Handled by IRQ CREDITBG3 = $7E0630 CREDITBG3H = $7E0631 ; FREE RAM: 0x03 UNUSED_7E0632 = $7E0632 UNUSED_7E0633 = $7E0633 UNUSED_7E0634 = $7E0634 ; Written to with 0x04 in overworld map, but never used. JUNK_7E0635 = $7E0635 ; Controls map zoom level. ; 0 - zoomed out ; 1 - zoomed in MAPZOOM = $7E0636 ; Appears to just handle zoom control of the mode 7 map in attract mode. AMAPZOOM = $7E0637 ; Mode7 queues handled during NMI. M7XQL = $7E0638 M7XQH = $7E0639 M7YQL = $7E063A M7YQH = $7E063B ; Target layers for warps/pits and spiral/fat stairs TGTLAYERWP = $7E063C TGTLAYERS1 = $7E063D TGTLAYERS2 = $7E063E TGTLAYERS3 = $7E063F TGTLAYERS4 = $7E0640 ; Flips bit 0 every time a push block is pushed, except on lower layer PUSHFLIP = $7E0641 ; Set high by sprites triggering room tags SPRTAG = $7E0642 ; FREE RAM: 0x03 UNSUED_7E0643 = $7E0643 UNSUED_7E0644 = $7E0644 UNSUED_7E0645 = $7E0645 ; Set by somaria when on a switch SOMBTN = $7E0646 ; If set, mosaic from electrocution decreases; otherwise, it increases. MOSAICDIR = $7E0647 ; FREE RAM: 0x28 UNUSED_7E0648 = $7E0648 ; Used for calculating water HDMA properties WCALCLEFT = $7E0670 WCALCLEFTH = $7E0671 ; FREE RAM: 0x02 UNUSED_7E0672 = $7E0672 UNUSED_7E0673 = $7E0673 ; Moving wall stuff TODO WCALCSIZEY = $7E0674 WCALCSIZEYH = $7E0675 WCALCSIZEX = $7E0676 WCALCSIZEXH = $7E0677 WCALCMAXX = $7E0678 WCALCMAXXH = $7E0679 WCALCMAXY = $7E067A WCALCMAXYH = $7E067B ; Used for spotlight HDMA IRISTOP = $7E067C IRISTOPH = $7E067D IRISTYPE = $7E067E IRISTYPEH = $7E067F ; Water HDMA properties for swamp WTRLEFT = $7E0680 WTRLEFTH = $7E0681 WTRTOP = $7E0682 WTRTOPH = $7E0683 WTRSIZEY = $7E0684 WTRSIZEYH = $7E0685 WTRSIZEX = $7E0686 WTRSIZEXH = $7E0687 WTRMAXX = $7E0688 WTRMAXXH = $7E0689 WTRMAXY = $7E068A WTRMAXYH = $7E068B ; Flags open doors during transitions DOOROPEN2 = $7E068C DOOROPEN = $7E068D ; Tile map position of door DOORTM = $7E068E DOORTMH = $7E068F ; Timer for opening doors DOORTIME = $7E0690 DOORTIMEH = $7E0691 ; Used as an index for updating doors in the underworld or tile32 on the overworld. UPDATE32ID = $7E0692 UPDATE32IDH = $7E0693 ; Cache of door type (tile_attribute & 0x000F) DOORINDEX = $7E0694 DOORINDEXH = $7E0695 ; Tilemap location of entrance doors ENTRTMAP = $7E0696 ENTRTMAPH = $7E0697 ; Tilemap location of new tile32 objects, such as from graves/rocks REPLTMAP = $7E0698 REPLTMAPH = $7E0699 ; Countdown timer for walking out when exiting to overworld. WALKOUT = $7E069A ; FREE RAM: 0x01 UNUSED_7E069B = $7E069B ; Another address for transition direction. ; High byte written but unused. OWTRANDIR = $7E069C OWTRANDIRH = $7E069D ; TODO ; Something with extra camera scroll values SCROLLHUHY = $7E069E SCROLLHUHX = $7E069F ; TODO ; Mirror warp variables that can be figured out later ; Star tile (enabled only) in underworld STARTILES = $7E06A0 WARP_7E06A0 = $7E06A0 WARP_7E06A1 = $7E06A1 WARP_7E06A2 = $7E06A2 WARP_7E06A3 = $7E06A3 WARP_7E06A4 = $7E06A4 WARP_7E06A5 = $7E06A5 WARP_7E06A6 = $7E06A6 WARP_7E06A7 = $7E06A7 WARP_7E06A8 = $7E06A8 WARP_7E06A9 = $7E06A9 WARP_7E06AA = $7E06AA WARP_7E06AB = $7E06AB WARP_7E06AC = $7E06AC WARP_7E06AD = $7E06AD WARP_7E06AE = $7E06AE WARP_7E06AF = $7E06AF ; Tilemap positions of interroom stairs ISTAIR0SAT = $7E06B0 ISTAIR0SATH = $7E06B1 ISTAIR1SAT = $7E06B2 ISTAIR1SATH = $7E06B3 ISTAIR2SAT = $7E06B4 ISTAIR2SATH = $7E06B5 ISTAIRS3AT = $7E06B6 ISTAIRS3ATH = $7E06B7 ; Tilemap positions of north stairs NSTAIR0SAT = $7E06B8 NSTAIR0SATH = $7E06B9 NSTAIR1SAT = $7E06BA NSTAIR1SATH = $7E06BB NSTAIR2SAT = $7E06BC NSTAIR2SATH = $7E06BD NSTAIRS3AT = $7E06BE NSTAIRS3ATH = $7E06BF ; Tilemap positions of layer toggle doors BGTOGGLEAT = $7E06C0 ; Tilemap positions of dungeon toggle doors DTOGGLEAT = $7E06D0 ; Tilemap positions of locked chests and cell doors CHEST0AT = $7E06E0 CHEST0ATH = $7E06E1 CHEST1AT = $7E06E2 CHEST1ATH = $7E06E3 CHEST2AT = $7E06E4 CHEST2ATH = $7E06E5 CHEST3AT = $7E06E6 CHEST3ATH = $7E06E7 CHEST4AT = $7E06E8 CHEST4ATH = $7E06E9 CHEST5AT = $7E06EA CHEST5ATH = $7E06EB ; Tilemap positions of south stairs ; TODO SSTAIRAT = $7E06EC ; FREE RAM: 0x08 UNUSED_7E06F8 = $7E06F8 UNUSED_7E06F9 = $7E06F9 UNUSED_7E06FA = $7E06FA UNUSED_7E06FB = $7E06FB UNUSED_7E06FC = $7E06FC UNUSED_7E06FD = $7E06FD UNUSED_7E06FE = $7E06FE UNUSED_7E06FF = $7E06FF ; --------------------------------------------------------- ; ........ yyyzxxx. ; Caclulated as: ; POSYH - ...yyya. ; POSXH - ...xxxb. ; z = a|b OWPOSM = $7E0700 OWPOSMH = $7E0701 ; FREE RAM: 0x06 UNUSED_7E0702 = $7E0702 UNUSED_7E0703 = $7E0703 UNUSED_7E0704 = $7E0704 UNUSED_7E0705 = $7E0705 UNUSED_7E0706 = $7E0706 UNUSED_7E0707 = $7E0707 ; Overworld camera boundaries ; Y edge OWBGSY = $7E0708 OWBGSYH = $7E0709 ; Y size ; 0x01F0 on small screens ; 0x03F0 on big screens OWBGSYO = $7E070A OWBGSYOH = $7E070B ; X edge OWBGSX = $7E070C OWBGSXH = $7E070D ; X size ; 0x003E on small screens ; 0x007E on big screens OWBGSXO = $7E070E OWBGSXOH = $7E070F ; Set this flag high to skip OAM char data updates ; High byte unused but written with 0xFF by exploding walls SKIPOAM = $7E0710 SKIPOAMH = $7E0711 ; Flags overworld screen size OWSCRSIZE = $7E0712 OWSCRSIZEH = $7E0713 ; Screen size of previous screen PREVSIZE = $7E0714 PREVSIZEH = $7E0715 ; Forms east and south triggers for overworld scrolling ; High byte written separately OWSCROLL = $7E0716 OWSCROLLH = $7E0717 ; These addresses may be read during erroneous map16 reads for overworld scrolling. ; But the values are written to an area completely off screen. ; This block of memory is otherwise completely unused. ; It can safely be considered free RAM. ; BIG FREE RAM: 0xE8 MAP16OVERFLOW = $7E0718 ; --------------------------------------------------------- ; Main buffer sent to OAM OAMBUFF = $7E0800 OAMBUFF2 = $7E0A00 ; Holds the 2 auxiliary bits of OAM data. ; ORA'd in every frame. OAMBUFFSX = $7E0A20 ; --------------------------------------------------------- ; GFX sheets MAINGFX = $7E0AA0 BGSET1 = $7E0AA1 BGSET2 = $7E0AA2 SPRSET1 = $7E0AA3 SPRSET2 = $7E0AA4 ; FREE RAM: 0x01 UNUSED_7E0AA5 = $7E0AA5 ; Only ever zeroed JUNK_7E0AA6 = $7E0AA6 JUNK_7E0AA7 = $7E0AA7 ; Used to choose between palette buffers when writing PALBUFNL = $7E0AA8 PALBUFNH = $7E0AA9 ; Used to choose different graphics temporarily, such as medallion spells GFXSTEAL = $7E0AAA ; FREE RAM: 0x01 UNUSED_7E0AAB = $7E0AAB ; TODO ; Palette loading stuff PALSPR0 = $7E0AAC PALSPR1 = $7E0AAD PALSPR2 = $7E0AAE ; FREE RAM: 0x01 UNUSED_7E0AAF = $7E0AAF ; Only referenced in an unreachable palette routine. PALUNU = $7E0AB0 ; TODO PALAB1 = $7E0AB1 ; Used for loading BG3 colors PALHUD = $7E0AB2 PALAB3 = $7E0AB3 PALAB4 = $7E0AB4 PALAB5 = $7E0AB5 PALBG = $7E0AB6 ; Read in one place but never used PALAB7 = $7E0AB7 ; TODO PALAB8 = $7E0AB8 ; FREE RAM: 0x04 UNUSED_7E0AB9 = $7E0AB9 UNUSED_7E0ABA = $7E0ABA UNUSED_7E0ABB = $7E0ABB UNUSED_7E0ABC = $7E0ABC ; Set when in a room that utilizes color math for sprites. ; High byte unused, but read in 16-bit a couple times COLROOM = $7E0ABD COLROOMH = $7E0ABE ; Flagged during certain types of overworld transitions ; Used for events such as smithy and witch ; TODO more OWTRAN = $7E0ABF ; These are OAM addresses in various banks for DMA transfers ; Link parts come from bank 10 ; Other parts come from decompressed 4bpp caches in bank 7E ; a couple of these in here are actually unused ; T = Top ; B = Bottom ; ; Sword SWDGFXT = $7E0AC0 SWDGFXTH = $7E0AC1 SWDGFXB = $7E0AC2 SWDGFXBH = $7E0AC3 ; Shield SHDGFXT = $7E0AC4 SHDGFXTH = $7E0AC5 SHDGFXB = $7E0AC6 SHDGFXBH = $7E0AC7 ; Y-items ITEMGFXT = $7E0AC8 ITEMGFXTH = $7E0AC9 ITEMGFXB = $7E0ACA ITEMGFXBH = $7E0ACB ; Link's head HEADGFXT = $7E0ACC HEADGFXTH = $7E0ACD HEADGFXB = $7E0ACE HEADGFXBH = $7E0ACF ; Link's body BODYGFXT = $7E0AD0 BODYGFXTH = $7E0AD1 BODYGFXB = $7E0AD2 BODYGFXBH = $7E0AD3 ; Link's auxiliary parts AUXGFX1 = $7E0AD4 AUXGFX1H = $7E0AD5 AUXGFX2 = $7E0AD6 AUXGFX2H = $7E0AD7 ; Pushable blocks BLKGFXT = $7E0AD8 BLKGFXTH = $7E0AD9 BLKGFXB = $7E0ADA BLKGFXBH = $7E0ADB ; Background BGANIMGFX = $7E0ADC BGANIMGFXH = $7E0ADD ; FREE RAM: 0x02 UNUSED_7E0ADE = $7E0ADE UNUSED_7E0ADF = $7E0ADF ; Rupee sprites RUPGFXT = $7E0AE0 RUPGFXTH = $7E0AE1 RUPGFXB = $7E0AE2 RUPGFXBH = $7E0AE3 ; FREE RAM: 0x04 UNUSED_7E0AE4 = $7E0AE4 UNUSED_7E0AE5 = $7E0AE5 UNUSED_7E0AE6 = $7E0AE6 UNUSED_7E0AE7 = $7E0AE7 ; Follower head/body gfx offsets FLWHO = $7E0AE8 FLWHOH = $7E0AE9 FLWBO = $7E0AEA FLWBOH = $7E0AEB ; Follower head FLWHGFXT = $7E0AEC FLWHGFXTH = $7E0AED FLWHGFXB = $7E0AEE FLWHGFXBH = $7E0AEF ; Follower body FLWBGFXT = $7E0AF0 FLWBGFXTH = $7E0AF1 FLWBGFXB = $7E0AF2 FLWBGFXBH = $7E0AF3 ; Duck DUCKPOSE = $7E0AF4 DUCKPOSEH = $7E0AF5 DUCKGFXT = $7E0AF6 DUCKGFXTH = $7E0AF7 DUCKGFXB = $7E0AF8 DUCKGFXBH = $7E0AF9 ; FREE RAM: 0x06 UNUSED_7E0AFA = $7E0AFA UNUSED_7E0AFB = $7E0AFB UNUSED_7E0AFC = $7E0AFC UNUSED_7E0AFD = $7E0AFD UNUSED_7E0AFE = $7E0AFE UNUSED_7E0AFF = $7E0AFF ; --------------------------------------------------------- ; Overlord IDs OL0ID = $7E0B00 OL1ID = $7E0B01 OL2ID = $7E0B02 OL3ID = $7E0B03 OL4ID = $7E0B04 OL5ID = $7E0B05 OL6ID = $7E0B06 OL7ID = $7E0B07 ; Overlord coordinates ; x low OL0XL = $7E0B08 OL1XL = $7E0B09 OL2XL = $7E0B0A OL3XL = $7E0B0B OL4XL = $7E0B0C OL5XL = $7E0B0D OL6XL = $7E0B0E OL7XL = $7E0B0F ; x high OL0XH = $7E0B10 OL1XH = $7E0B11 OL2XH = $7E0B12 OL3XH = $7E0B13 OL4XH = $7E0B14 OL5XH = $7E0B15 OL6XH = $7E0B16 OL7XH = $7E0B17 ; y low OL0YL = $7E0B18 OL1YL = $7E0B19 OL2YL = $7E0B1A OL3YL = $7E0B1B OL4YL = $7E0B1C OL5YL = $7E0B1D OL6YL = $7E0B1E OL7YL = $7E0B1F ; y high OL0YH = $7E0B20 OL1YH = $7E0B21 OL2YH = $7E0B22 OL3YH = $7E0B23 OL4YH = $7E0B24 OL5YH = $7E0B25 OL6YH = $7E0B26 OL7YH = $7E0B27 ; General purpose timers ; None of these are automated OL0TA = $7E0B28 OL1TA = $7E0B29 OL2TA = $7E0B2A OL3TA = $7E0B2B OL4TA = $7E0B2C OL5TA = $7E0B2D OL6TA = $7E0B2E OL7TA = $7E0B2F ; TODO OL0TB = $7E0B30 OL1TB = $7E0B31 OL2TB = $7E0B32 OL3TB = $7E0B33 OL4TB = $7E0B34 OL5TB = $7E0B35 OL6TB = $7E0B36 OL7TB = $7E0B37 ; TODO OL0TC = $7E0B38 OL1TC = $7E0B39 OL2TC = $7E0B3A OL3TC = $7E0B3B OL4TC = $7E0B3C OL5TC = $7E0B3D OL6TC = $7E0B3E OL7TC = $7E0B3F ; Layer, as always: (0: upper | 1: lower) OL0LAYER = $7E0B40 OL1LAYER = $7E0B41 OL2LAYER = $7E0B42 OL3LAYER = $7E0B43 OL4LAYER = $7E0B44 OL5LAYER = $7E0B45 OL6LAYER = $7E0B46 OL7LAYER = $7E0B47 ; TODO OL0SCRL = $7E0B48 OL0SCRH = $7E0B49 OL1SCRL = $7E0B4A OL1SCRH = $7E0B4B OL2SCRL = $7E0B4C OL2SCRH = $7E0B4D OL3SCRL = $7E0B4E OL3SCRH = $7E0B4F OL4SCRL = $7E0B50 OL4SCRH = $7E0B51 OL5SCRL = $7E0B52 OL5SCRH = $7E0B53 OL6SCRL = $7E0B54 OL6SCRH = $7E0B55 OL7SCRL = $7E0B56 OL7SCRH = $7E0B57 ; Auto-decrementing timer for stunned enemies SPR0STUN = $7E0B58 SPR1STUN = $7E0B59 SPR2STUN = $7E0B5A SPR3STUN = $7E0B5B SPR4STUN = $7E0B5C SPR5STUN = $7E0B5D SPR6STUN = $7E0B5E SPR7STUN = $7E0B5F SPR8STUN = $7E0B60 SPR9STUN = $7E0B61 SPRASTUN = $7E0B62 SPRBSTUN = $7E0B63 SPRCSTUN = $7E0B64 SPRDSTUN = $7E0B65 SPRESTUN = $7E0B66 SPRFSTUN = $7E0B67 ; Weapon tink spark layer TINKBG = $7E0B68 ; Controls Blind's head spin by /8. ; Also controls tutorial guard message increment. BLINDDIR = $7E0B69 ; Used by beamos lasers and desert statues to index amongst themselves ; Also used for Blind's current phase LIMSPRCT = $7E0B6A ; tttt a.bp ; t - tile hitbox TODO ??? ; a - deflect arrows TODO VERIFY ; b - boss death ; p - idk SPR0TILEDIE = $7E0B6B SPR1TILEDIE = $7E0B6C SPR2TILEDIE = $7E0B6D SPR3TILEDIE = $7E0B6E SPR4TILEDIE = $7E0B6F SPR5TILEDIE = $7E0B70 SPR6TILEDIE = $7E0B71 SPR7TILEDIE = $7E0B72 SPR8TILEDIE = $7E0B73 SPR9TILEDIE = $7E0B74 SPRATILEDIE = $7E0B75 SPRBTILEDIE = $7E0B76 SPRCTILEDIE = $7E0B77 SPRDTILEDIE = $7E0B78 SPRETILEDIE = $7E0B79 SPRFTILEDIE = $7E0B7A ; Prevents Link from physically moving when non zero ; cleared every frame under normal circumstances ; only used by debirando pits SANDPIT = $7E0B7B ; Drag velocities used by sandpits and somaria DRAGYL = $7E0B7C DRAGYH = $7E0B7D DRAGXL = $7E0B7E DRAGXH = $7E0B7F ; Last 4 rooms visit LASTROOM0 = $7E0B80 LASTROOM0H = $7E0B81 LASTROOM1 = $7E0B82 LASTROOM1H = $7E0B83 LASTROOM2 = $7E0B84 LASTROOM2H = $7E0B85 LASTROOM3 = $7E0B86 LASTROOM3H = $7E0B87 ; Number of octorok targets hit in arrow game THEX99 = $7E0B88 ; TODO ; Something with sprite priority SPR0PRIO = $7E0B89 SPR1PRIO = $7E0B8A SPR2PRIO = $7E0B8B SPR3PRIO = $7E0B8C SPR4PRIO = $7E0B8D SPR5PRIO = $7E0B8E SPR6PRIO = $7E0B8F SPR7PRIO = $7E0B90 SPR8PRIO = $7E0B91 SPR9PRIO = $7E0B92 SPRAPRIO = $7E0B93 SPRBPRIO = $7E0B94 SPRCPRIO = $7E0B95 SPRDPRIO = $7E0B96 SPREPRIO = $7E0B97 SPRFPRIO = $7E0B98 ; Number of shots left for the arrow game FREESHOT = $7E0B99 ; If set, arrows fired are immediately deleted. ; Only used by archery game. DRYFIRE = $7E0B9A ; Used to index which key slot a standing or bonkable key occupies. ; This slot controls which bit is used for flagging collection. ; 0x00 = bit 6 (0x40) ; 0x01 = bit 5 (0x20) ; In practice, only slot 0 is ever used. ; There is also no bounds checking for invalid higher indices. KEYSLOT = $7E0B9B ; Controls the secret spawned from bushes, pots, rocks, etc ; See Sprite_SpawnSecret SECRETID = $7E0B9C ; Indexes the save file ID to act on for COPY and KILL. FILEID = $7E0B9D ; Flags activation of falling stalfos trap triggers. STALTRAP = $7E0B9E ; FREE RAM: 0x01 UNUSED_7E0B9F = $7E0B9F ; If nonzero, ancillae do not interact with the sprite ; Bulletproof SPR0BPF = $7E0BA0 SPR1BPF = $7E0BA1 SPR2BPF = $7E0BA2 SPR3BPF = $7E0BA3 SPR4BPF = $7E0BA4 SPR5BPF = $7E0BA5 SPR6BPF = $7E0BA6 SPR7BPF = $7E0BA7 SPR8BPF = $7E0BA8 SPR9BPF = $7E0BA9 SPRABPF = $7E0BAA SPRBBPF = $7E0BAB SPRCBPF = $7E0BAC SPRDBPF = $7E0BAD SPREBPF = $7E0BAE SPRFBPF = $7E0BAF ; When an ancilla hits a sprite, it stores its ID here. SPR0ANCID = $7E0BB0 SPR1ANCID = $7E0BB1 SPR2ANCID = $7E0BB2 SPR3ANCID = $7E0BB3 SPR4ANCID = $7E0BB4 SPR5ANCID = $7E0BB5 SPR6ANCID = $7E0BB6 SPR7ANCID = $7E0BB7 SPR8ANCID = $7E0BB8 SPR9ANCID = $7E0BB9 SPRAANCID = $7E0BBA SPRBANCID = $7E0BBB SPRCANCID = $7E0BBC SPRDANCID = $7E0BBD SPREANCID = $7E0BBE SPRFANCID = $7E0BBF ; Slots of currently loaded sprites. ; Half redundant, but has special flagging before with negative values. SPR0SLOT = $7E0BC0 SPR1SLOT = $7E0BC1 SPR2SLOT = $7E0BC2 SPR3SLOT = $7E0BC3 SPR4SLOT = $7E0BC4 SPR5SLOT = $7E0BC5 SPR6SLOT = $7E0BC6 SPR7SLOT = $7E0BC7 SPR8SLOT = $7E0BC8 SPR9SLOT = $7E0BC9 SPRASLOT = $7E0BCA SPRBSLOT = $7E0BCB SPRCSLOT = $7E0BCC SPRDSLOT = $7E0BCD SPRESLOT = $7E0BCE SPRFSLOT = $7E0BCF ; On the overworld, this contains a pointer to the address in OWDEATH of the sprite. ; Thus, the table is twice as large on the overworld SPR0OWDL = $7E0BC0 SPR0OWDH = $7E0BC1 SPR1OWDL = $7E0BC2 SPR1OWDH = $7E0BC3 SPR2OWDL = $7E0BC4 SPR2OWDH = $7E0BC5 SPR3OWDL = $7E0BC6 SPR3OWDH = $7E0BC7 SPR4OWDL = $7E0BC8 SPR4OWDH = $7E0BC9 SPR5OWDL = $7E0BCA SPR5OWDH = $7E0BCB SPR6OWDL = $7E0BCC SPR6OWDH = $7E0BCD SPR7OWDL = $7E0BCE SPR7OWDH = $7E0BCF SPR8OWDL = $7E0BD0 SPR8OWDH = $7E0BD1 SPR9OWDL = $7E0BD2 SPR9OWDH = $7E0BD3 SPRAOWDL = $7E0BD4 SPRAOWDH = $7E0BD5 SPRBOWDL = $7E0BD6 SPRBOWDH = $7E0BD7 SPRCOWDL = $7E0BD8 SPRCOWDH = $7E0BD9 SPRDOWDL = $7E0BDA SPRDOWDH = $7E0BDB SPREOWDL = $7E0BDC SPREOWDH = $7E0BDD SPRFOWDL = $7E0BDE SPRFOWDH = $7E0BDF ; TODO ; iwbs pppp ; i - disable tile interaction ; w - something water ; b - sprite is blocked by shield ; s - taking damage sfx to use TODO name ; p - prize pack SPR0PRIZE = $7E0BE0 SPR1PRIZE = $7E0BE1 SPR2PRIZE = $7E0BE2 SPR3PRIZE = $7E0BE3 SPR4PRIZE = $7E0BE4 SPR5PRIZE = $7E0BE5 SPR6PRIZE = $7E0BE6 SPR7PRIZE = $7E0BE7 SPR8PRIZE = $7E0BE8 SPR9PRIZE = $7E0BE9 SPRAPRIZE = $7E0BEA SPRBPRIZE = $7E0BEB SPRCPRIZE = $7E0BEC SPRDPRIZE = $7E0BED SPREPRIZE = $7E0BEE SPRFPRIZE = $7E0BEF ; --------------------------------------------------------- ; TODO ANC0MISCM = $7E0BF0 ANC1MISCM = $7E0BF1 ANC2MISCM = $7E0BF2 ANC3MISCM = $7E0BF3 ANC4MISCM = $7E0BF4 ANC5MISCM = $7E0BF5 ANC6MISCM = $7E0BF6 ANC7MISCM = $7E0BF7 ANC8MISCM = $7E0BF8 ANC9MISCM = $7E0BF9 ; Ancilla coordinates ; y low ANC0YL = $7E0BFA ANC1YL = $7E0BFB ANC2YL = $7E0BFC ANC3YL = $7E0BFD ANC4YL = $7E0BFE ANC5YL = $7E0BFF ANC6YL = $7E0C00 ANC7YL = $7E0C01 ANC8YL = $7E0C02 ANC9YL = $7E0C03 ; x low ANC0XL = $7E0C04 ANC1XL = $7E0C05 ANC2XL = $7E0C06 ANC3XL = $7E0C07 ANC4XL = $7E0C08 ANC5XL = $7E0C09 ANC6XL = $7E0C0A ANC7XL = $7E0C0B ANC8XL = $7E0C0C ANC9XL = $7E0C0D ; y high ANC0YH = $7E0C0E ANC1YH = $7E0C0F ANC2YH = $7E0C10 ANC3YH = $7E0C11 ANC4YH = $7E0C12 ANC5YH = $7E0C13 ANC6YH = $7E0C14 ANC7YH = $7E0C15 ANC8YH = $7E0C16 ANC9YH = $7E0C17 ; x high ANC0XH = $7E0C18 ANC1XH = $7E0C19 ANC2XH = $7E0C1A ANC3XH = $7E0C1B ANC4XH = $7E0C1C ANC5XH = $7E0C1D ANC6XH = $7E0C1E ANC7XH = $7E0C1F ANC8XH = $7E0C20 ANC9XH = $7E0C21 ; Ancilla velocities ; y axis ANC0VY = $7E0C22 ANC1VY = $7E0C23 ANC2VY = $7E0C24 ANC3VY = $7E0C25 ANC4VY = $7E0C26 ANC5VY = $7E0C27 ANC6VY = $7E0C28 ANC7VY = $7E0C29 ANC8VY = $7E0C2A ANC9VY = $7E0C2B ; x axis ANC0VX = $7E0C2C ANC1VX = $7E0C2D ANC2VX = $7E0C2E ANC3VX = $7E0C2F ANC4VX = $7E0C30 ANC5VX = $7E0C31 ANC6VX = $7E0C32 ANC7VX = $7E0C33 ANC8VX = $7E0C34 ANC9VX = $7E0C35 ; Ancilla subpixel velocities ; y axis ANC0SUBY = $7E0C36 ANC1SUBY = $7E0C37 ANC2SUBY = $7E0C38 ANC3SUBY = $7E0C39 ANC4SUBY = $7E0C3A ANC5SUBY = $7E0C3B ANC6SUBY = $7E0C3C ANC7SUBY = $7E0C3D ANC8SUBY = $7E0C3E ANC9SUBY = $7E0C3F ; x axis ANC0SUBX = $7E0C40 ANC1SUBX = $7E0C41 ANC2SUBX = $7E0C42 ANC3SUBX = $7E0C43 ANC4SUBX = $7E0C44 ANC5SUBX = $7E0C45 ANC6SUBX = $7E0C46 ANC7SUBX = $7E0C47 ANC8SUBX = $7E0C48 ANC9SUBX = $7E0C49 ; Ancilla ID ; $0C4A is also used as a vector index for GAME OVER letters ANC0ID = $7E0C4A ANC1ID = $7E0C4B ANC2ID = $7E0C4C ANC3ID = $7E0C4D ANC4ID = $7E0C4E ANC5ID = $7E0C4F ANC6ID = $7E0C50 ANC7ID = $7E0C51 ANC8ID = $7E0C52 ANC9ID = $7E0C53 ; TODO ANC0MISCN = $7E0C54 ANC1MISCN = $7E0C55 ANC2MISCN = $7E0C56 ANC3MISCN = $7E0C57 ANC4MISCN = $7E0C58 ANC5MISCN = $7E0C59 ANC6MISCN = $7E0C5A ANC7MISCN = $7E0C5B ANC8MISCN = $7E0C5C ANC9MISCN = $7E0C5D ; Used by various ancillae in various ways. ; Tracks current hookshot extension and item receipt ID. ANC0GETL = $7E0C5E ANC1GETL = $7E0C5F ANC2GETL = $7E0C60 ANC3GETL = $7E0C61 ANC4GETL = $7E0C62 ANC5GETL = $7E0C63 ANC6GETL = $7E0C64 ANC7GETL = $7E0C65 ANC8GETL = $7E0C66 ANC9GETL = $7E0C67 ; General timer TODO ANC0TIMERA = $7E0C68 ANC1TIMERA = $7E0C69 ANC2TIMERA = $7E0C6A ANC3TIMERA = $7E0C6B ANC4TIMERA = $7E0C6C ANC5TIMERA = $7E0C6D ANC6TIMERA = $7E0C6E ANC7TIMERA = $7E0C6F ANC8TIMERA = $7E0C70 ANC9TIMERA = $7E0C71 ; Tracks ancilla direction ANC0DIR = $7E0C72 ANC1DIR = $7E0C73 ANC2DIR = $7E0C74 ANC3DIR = $7E0C75 ANC4DIR = $7E0C76 ANC5DIR = $7E0C77 ANC6DIR = $7E0C78 ANC7DIR = $7E0C79 ANC8DIR = $7E0C7A ANC9DIR = $7E0C7B ; Ancilla's layer ANC0LAYER = $7E0C7C ANC1LAYER = $7E0C7D ANC2LAYER = $7E0C7E ANC3LAYER = $7E0C7F ANC4LAYER = $7E0C80 ANC5LAYER = $7E0C81 ANC6LAYER = $7E0C82 ANC7LAYER = $7E0C83 ANC8LAYER = $7E0C84 ANC9LAYER = $7E0C85 ; OAM region offset of ancillae ANC0OAMR = $7E0C86 ANC1OAMR = $7E0C87 ANC2OAMR = $7E0C88 ANC3OAMR = $7E0C89 ANC4OAMR = $7E0C8A ANC5OAMR = $7E0C8B ANC6OAMR = $7E0C8C ANC7OAMR = $7E0C8D ANC8OAMR = $7E0C8E ANC9OAMR = $7E0C8F ; Ancilla OAM allocation ANC0OAML = $7E0C90 ANC1OAML = $7E0C91 ANC2OAML = $7E0C92 ANC3OAML = $7E0C93 ANC4OAML = $7E0C94 ANC5OAML = $7E0C95 ANC6OAML = $7E0C96 ANC7OAML = $7E0C97 ANC8OAML = $7E0C98 ANC9OAML = $7E0C99 ; --------------------------------------------------------- ; Current overworld screen sprite is loaded on. ; Used to kill sprites during screen transitions SPR0SCR = $7E0C9A SPR1SCR = $7E0C9B SPR2SCR = $7E0C9C SPR3SCR = $7E0C9D SPR4SCR = $7E0C9E SPR5SCR = $7E0C9F SPR6SCR = $7E0CA0 SPR7SCR = $7E0CA1 SPR8SCR = $7E0CA2 SPR9SCR = $7E0CA3 SPRASCR = $7E0CA4 SPRBSCR = $7E0CA5 SPRCSCR = $7E0CA6 SPRDSCR = $7E0CA7 SPRESCR = $7E0CA8 SPRFSCR = $7E0CA9 ; aixd tspr ; a - TODO ; i - ; x - ; d - ; t - ; s - ; p - ; r - Handles behavior with previous deaths flagged in $7F:DF80 (0: default | 1: ignore) SPR0DEFL = $7E0CAA SPR1DEFL = $7E0CAB SPR2DEFL = $7E0CAC SPR3DEFL = $7E0CAD SPR4DEFL = $7E0CAE SPR5DEFL = $7E0CAF SPR6DEFL = $7E0CB0 SPR7DEFL = $7E0CB1 SPR8DEFL = $7E0CB2 SPR9DEFL = $7E0CB3 SPRADEFL = $7E0CB4 SPRBDEFL = $7E0CB5 SPRCDEFL = $7E0CB6 SPRDDEFL = $7E0CB7 SPREDEFL = $7E0CB8 SPRFDEFL = $7E0CB9 ; Forces drops on sprite death ; 0x00 - Nothing ; 0x01 - Key ; 0x02 - Big key ; 0x03 - Green rupee SPR0DROP = $7E0CBA SPR1DROP = $7E0CBB SPR2DROP = $7E0CBC SPR3DROP = $7E0CBD SPR4DROP = $7E0CBE SPR5DROP = $7E0CBF SPR6DROP = $7E0CC0 SPR7DROP = $7E0CC1 SPR8DROP = $7E0CC2 SPR9DROP = $7E0CC3 SPRADROP = $7E0CC4 SPRBDROP = $7E0CC5 SPRCDROP = $7E0CC6 SPRDDROP = $7E0CC7 SPREDROP = $7E0CC8 SPRFDROP = $7E0CC9 ; TODO OL0_ROOM = $7E0CCA OL1_ROOM = $7E0CCB OL2_ROOM = $7E0CCC OL3_ROOM = $7E0CCD OL4_ROOM = $7E0CCE OL5_ROOM = $7E0CCF OL6_ROOM = $7E0CD0 OL7_ROOM = $7E0CD1 ; Primarily deals with bump damage ; tzpd bbbb ; t - TODO ; z - High priority target for bees to give hints ; p - Powder interaction (0: normal | 1: ignore) ; d - Behavior when a boss spawns (0: die | 1: live) ; b - bump damage class ; Bump damage classes are read from a table at $06F42D ; Each table entry has 3 values, for green, blue, and red mails ; class g b r ; 0x00 2 1 1 ; 0x01 4 4 4 ; 0x02 0 0 0 ; 0x03 8 4 2 ; 0x04 8 8 8 ; 0x05 16 8 4 ; 0x06 32 16 8 ; 0x07 32 24 16 ; 0x08 24 16 8 ; 0x09 64 48 24 ; ; Higher values are invalid, but here's what they are: ; 0x0A 169 48 32 ; 0x0B 142 246 169 ; 0x0C 144 133 71 ; 0x0D 169 16 133 ; 0x0E 70 169 33 ; 0x0F 34 124 187 SPR0BUMP = $7E0CD2 SPR1BUMP = $7E0CD3 SPR2BUMP = $7E0CD4 SPR3BUMP = $7E0CD5 SPR4BUMP = $7E0CD6 SPR5BUMP = $7E0CD7 SPR6BUMP = $7E0CD8 SPR7BUMP = $7E0CD9 SPR8BUMP = $7E0CDA SPR9BUMP = $7E0CDB SPRABUMP = $7E0CDC SPRBBUMP = $7E0CDD SPRCBUMP = $7E0CDE SPRDBUMP = $7E0CDF SPREBUMP = $7E0CE0 SPRFBUMP = $7E0CE1 ; Damage sprite is enduring SPR0DMG = $7E0CE2 SPR1DMG = $7E0CE3 SPR2DMG = $7E0CE4 SPR3DMG = $7E0CE5 SPR4DMG = $7E0CE6 SPR5DMG = $7E0CE7 SPR6DMG = $7E0CE8 SPR7DMG = $7E0CE9 SPR8DMG = $7E0CEA SPR9DMG = $7E0CEB SPRADMG = $7E0CEC SPRBDMG = $7E0CED SPRCDMG = $7E0CEE SPRDDMG = $7E0CEF SPREDMG = $7E0CF0 SPRFDMG = $7E0CF1 ; Damage class of a particular hit against a sprite DMGCLASS = $7E0CF2 ; Zeroed but never read. JUNK_7E0CF3 = $7E0CF3 ; Flags snake and bomb ambushes from bad pull switches. DROPTRAP = $7E0CF4 ; Y offset for drawing the dungeon map squares. DMAPROWL = $7E0CF5 DMAPROWH = $7E0CF6 ; Prize pack counter for bush prizes on the overworld. BUSHPACKX = $7E0CF7 ; Used for calculating SFX panning. PANTEMP = $7E0CF8 ; Drop luck ; 0x00 - None ; 0x01 - Good luck ; 0x02 - Bad luck DROPLUCK = $7E0CF9 ; Kills of luck remaining LUCKKILL = $7E0CFA ; Number of kills for rupee pulls PULLKILL = $7E0CFB ; Number of times hit for rupee pull prize calculation PULLHITS = $7E0CFC ; Rupee refill sound effect timer CHACHING = $7E0CFD ; Override palette ; High byte always to be 0 PAL2F = $7E0CFE PAL2FH = $7E0CFF ; --------------------------------------------------------- ; Sprite coordinates ; y low SPR0_YL = $7E0D00 SPR1_YL = $7E0D01 SPR2_YL = $7E0D02 SPR3_YL = $7E0D03 SPR4_YL = $7E0D04 SPR5_YL = $7E0D05 SPR6_YL = $7E0D06 SPR7_YL = $7E0D07 SPR8_YL = $7E0D08 SPR9_YL = $7E0D09 SPRA_YL = $7E0D0A SPRB_YL = $7E0D0B SPRC_YL = $7E0D0C SPRD_YL = $7E0D0D SPRE_YL = $7E0D0E SPRF_YL = $7E0D0F ; x low SPR0_XL = $7E0D10 SPR1_XL = $7E0D11 SPR2_XL = $7E0D12 SPR3_XL = $7E0D13 SPR4_XL = $7E0D14 SPR5_XL = $7E0D15 SPR6_XL = $7E0D16 SPR7_XL = $7E0D17 SPR8_XL = $7E0D18 SPR9_XL = $7E0D19 SPRA_XL = $7E0D1A SPRB_XL = $7E0D1B SPRC_XL = $7E0D1C SPRD_XL = $7E0D1D SPRE_XL = $7E0D1E SPRF_XL = $7E0D1F ; y high SPR0_YH = $7E0D20 SPR1_YH = $7E0D21 SPR2_YH = $7E0D22 SPR3_YH = $7E0D23 SPR4_YH = $7E0D24 SPR5_YH = $7E0D25 SPR6_YH = $7E0D26 SPR7_YH = $7E0D27 SPR8_YH = $7E0D28 SPR9_YH = $7E0D29 SPRA_YH = $7E0D2A SPRB_YH = $7E0D2B SPRC_YH = $7E0D2C SPRD_YH = $7E0D2D SPRE_YH = $7E0D2E SPRF_YH = $7E0D2F ; x high SPR0_XH = $7E0D30 SPR1_XH = $7E0D31 SPR2_XH = $7E0D32 SPR3_XH = $7E0D33 SPR4_XH = $7E0D34 SPR5_XH = $7E0D35 SPR6_XH = $7E0D36 SPR7_XH = $7E0D37 SPR8_XH = $7E0D38 SPR9_XH = $7E0D39 SPRA_XH = $7E0D3A SPRB_XH = $7E0D3B SPRC_XH = $7E0D3C SPRD_XH = $7E0D3D SPRE_XH = $7E0D3E SPRF_XH = $7E0D3F ; Sprite velocity ; y-axis SPR0_VY = $7E0D40 SPR1_VY = $7E0D41 SPR2_VY = $7E0D42 SPR3_VY = $7E0D43 SPR4_VY = $7E0D44 SPR5_VY = $7E0D45 SPR6_VY = $7E0D46 SPR7_VY = $7E0D47 SPR8_VY = $7E0D48 SPR9_VY = $7E0D49 SPRA_VY = $7E0D4A SPRB_VY = $7E0D4B SPRC_VY = $7E0D4C SPRD_VY = $7E0D4D SPRE_VY = $7E0D4E SPRF_VY = $7E0D4F ; x-axis SPR0_VX = $7E0D50 SPR1_VX = $7E0D51 SPR2_VX = $7E0D52 SPR3_VX = $7E0D53 SPR4_VX = $7E0D54 SPR5_VX = $7E0D55 SPR6_VX = $7E0D56 SPR7_VX = $7E0D57 SPR8_VX = $7E0D58 SPR9_VX = $7E0D59 SPRA_VX = $7E0D5A SPRB_VX = $7E0D5B SPRC_VX = $7E0D5C SPRD_VX = $7E0D5D SPRE_VX = $7E0D5E SPRF_VX = $7E0D5F ; subpixels SPR0_SUBVY = $7E0D60 SPR1_SUBVY = $7E0D61 SPR2_SUBVY = $7E0D62 SPR3_SUBVY = $7E0D63 SPR4_SUBVY = $7E0D64 SPR5_SUBVY = $7E0D65 SPR6_SUBVY = $7E0D66 SPR7_SUBVY = $7E0D67 SPR8_SUBVY = $7E0D68 SPR9_SUBVY = $7E0D69 SPRA_SUBVY = $7E0D6A SPRB_SUBVY = $7E0D6B SPRC_SUBVY = $7E0D6C SPRD_SUBVY = $7E0D6D SPRE_SUBVY = $7E0D6E SPRF_SUBVY = $7E0D6F SPR0_SUBVX = $7E0D70 SPR1_SUBVX = $7E0D71 SPR2_SUBVX = $7E0D72 SPR3_SUBVX = $7E0D73 SPR4_SUBVX = $7E0D74 SPR5_SUBVX = $7E0D75 SPR6_SUBVX = $7E0D76 SPR7_SUBVX = $7E0D77 SPR8_SUBVX = $7E0D78 SPR9_SUBVX = $7E0D79 SPRA_SUBVX = $7E0D7A SPRB_SUBVX = $7E0D7B SPRC_SUBVX = $7E0D7C SPRD_SUBVX = $7E0D7D SPRE_SUBVX = $7E0D7E SPRF_SUBVX = $7E0D7F ; TODO SPR0_0D80 = $7E0D80 SPR1_0D80 = $7E0D81 SPR2_0D80 = $7E0D82 SPR3_0D80 = $7E0D83 SPR4_0D80 = $7E0D84 SPR5_0D80 = $7E0D85 SPR6_0D80 = $7E0D86 SPR7_0D80 = $7E0D87 SPR8_0D80 = $7E0D88 SPR9_0D80 = $7E0D89 SPRA_0D80 = $7E0D8A SPRB_0D80 = $7E0D8B SPRC_0D80 = $7E0D8C SPRD_0D80 = $7E0D8D SPRE_0D80 = $7E0D8E SPRF_0D80 = $7E0D8F ; TODO SPR0_0D90 = $7E0D90 SPR1_0D90 = $7E0D91 SPR2_0D90 = $7E0D92 SPR3_0D90 = $7E0D93 SPR4_0D90 = $7E0D94 SPR5_0D90 = $7E0D95 SPR6_0D90 = $7E0D96 SPR7_0D90 = $7E0D97 SPR8_0D90 = $7E0D98 SPR9_0D90 = $7E0D99 SPRA_0D90 = $7E0D9A SPRB_0D90 = $7E0D9B SPRC_0D90 = $7E0D9C SPRD_0D90 = $7E0D9D SPRE_0D90 = $7E0D9E SPRF_0D90 = $7E0D9F ; TODO SPR0_0DA0 = $7E0DA0 SPR1_0DA0 = $7E0DA1 SPR2_0DA0 = $7E0DA2 SPR3_0DA0 = $7E0DA3 SPR4_0DA0 = $7E0DA4 SPR5_0DA0 = $7E0DA5 SPR6_0DA0 = $7E0DA6 SPR7_0DA0 = $7E0DA7 SPR8_0DA0 = $7E0DA8 SPR9_0DA0 = $7E0DA9 SPRA_0DA0 = $7E0DAA SPRB_0DA0 = $7E0DAB SPRC_0DA0 = $7E0DAC SPRD_0DA0 = $7E0DAD SPRE_0DA0 = $7E0DAE SPRF_0DA0 = $7E0DAF ; TODO SPR0_0DB0 = $7E0DB0 SPR1_0DB0 = $7E0DB1 SPR2_0DB0 = $7E0DB2 SPR3_0DB0 = $7E0DB3 SPR4_0DB0 = $7E0DB4 SPR5_0DB0 = $7E0DB5 SPR6_0DB0 = $7E0DB6 SPR7_0DB0 = $7E0DB7 SPR8_0DB0 = $7E0DB8 SPR9_0DB0 = $7E0DB9 SPRA_0DB0 = $7E0DBA SPRB_0DB0 = $7E0DBB SPRC_0DB0 = $7E0DBC SPRD_0DB0 = $7E0DBD SPRE_0DB0 = $7E0DBE SPRF_0DB0 = $7E0DBF ; Mostly used as graphics control SPR0_GFXSTEP = $7E0DC0 SPR1_GFXSTEP = $7E0DC1 SPR2_GFXSTEP = $7E0DC2 SPR3_GFXSTEP = $7E0DC3 SPR4_GFXSTEP = $7E0DC4 SPR5_GFXSTEP = $7E0DC5 SPR6_GFXSTEP = $7E0DC6 SPR7_GFXSTEP = $7E0DC7 SPR8_GFXSTEP = $7E0DC8 SPR9_GFXSTEP = $7E0DC9 SPRA_GFXSTEP = $7E0DCA SPRB_GFXSTEP = $7E0DCB SPRC_GFXSTEP = $7E0DCC SPRD_GFXSTEP = $7E0DCD SPRE_GFXSTEP = $7E0DCE SPRF_GFXSTEP = $7E0DCF ; Main AI state of the sprite SPR0_AIMODE = $7E0DD0 SPR1_AIMODE = $7E0DD1 SPR2_AIMODE = $7E0DD2 SPR3_AIMODE = $7E0DD3 SPR4_AIMODE = $7E0DD4 SPR5_AIMODE = $7E0DD5 SPR6_AIMODE = $7E0DD6 SPR7_AIMODE = $7E0DD7 SPR8_AIMODE = $7E0DD8 SPR9_AIMODE = $7E0DD9 SPRA_AIMODE = $7E0DDA SPRB_AIMODE = $7E0DDB SPRC_AIMODE = $7E0DDC SPRD_AIMODE = $7E0DDD SPRE_AIMODE = $7E0DDE SPRF_AIMODE = $7E0DDF ; TODO SPR0_0DE0 = $7E0DE0 SPR1_0DE0 = $7E0DE1 SPR2_0DE0 = $7E0DE2 SPR3_0DE0 = $7E0DE3 SPR4_0DE0 = $7E0DE4 SPR5_0DE0 = $7E0DE5 SPR6_0DE0 = $7E0DE6 SPR7_0DE0 = $7E0DE7 SPR8_0DE0 = $7E0DE8 SPR9_0DE0 = $7E0DE9 SPRA_0DE0 = $7E0DEA SPRB_0DE0 = $7E0DEB SPRC_0DE0 = $7E0DEC SPRD_0DE0 = $7E0DED SPRE_0DE0 = $7E0DEE SPRF_0DE0 = $7E0DEF ; Auto-decremented timers SPR0_TIMER_A = $7E0DF0 SPR1_TIMER_A = $7E0DF1 SPR2_TIMER_A = $7E0DF2 SPR3_TIMER_A = $7E0DF3 SPR4_TIMER_A = $7E0DF4 SPR5_TIMER_A = $7E0DF5 SPR6_TIMER_A = $7E0DF6 SPR7_TIMER_A = $7E0DF7 SPR8_TIMER_A = $7E0DF8 SPR9_TIMER_A = $7E0DF9 SPRA_TIMER_A = $7E0DFA SPRB_TIMER_A = $7E0DFB SPRC_TIMER_A = $7E0DFC SPRD_TIMER_A = $7E0DFD SPRE_TIMER_A = $7E0DFE SPRF_TIMER_A = $7E0DFF ; TODO SPR0_TIMER_B = $7E0E00 SPR1_TIMER_B = $7E0E01 SPR2_TIMER_B = $7E0E02 SPR3_TIMER_B = $7E0E03 SPR4_TIMER_B = $7E0E04 SPR5_TIMER_B = $7E0E05 SPR6_TIMER_B = $7E0E06 SPR7_TIMER_B = $7E0E07 SPR8_TIMER_B = $7E0E08 SPR9_TIMER_B = $7E0E09 SPRA_TIMER_B = $7E0E0A SPRB_TIMER_B = $7E0E0B SPRC_TIMER_B = $7E0E0C SPRD_TIMER_B = $7E0E0D SPRE_TIMER_B = $7E0E0E SPRF_TIMER_B = $7E0E0F ; TODO SPR0_TIMER_C = $7E0E10 SPR1_TIMER_C = $7E0E11 SPR2_TIMER_C = $7E0E12 SPR3_TIMER_C = $7E0E13 SPR4_TIMER_C = $7E0E14 SPR5_TIMER_C = $7E0E15 SPR6_TIMER_C = $7E0E16 SPR7_TIMER_C = $7E0E17 SPR8_TIMER_C = $7E0E18 SPR9_TIMER_C = $7E0E19 SPRA_TIMER_C = $7E0E1A SPRB_TIMER_C = $7E0E1B SPRC_TIMER_C = $7E0E1C SPRD_TIMER_C = $7E0E1D SPRE_TIMER_C = $7E0E1E SPRF_TIMER_C = $7E0E1F ; Which sprite is it? SPR0_ID = $7E0E20 SPR1_ID = $7E0E21 SPR2_ID = $7E0E22 SPR3_ID = $7E0E23 SPR4_ID = $7E0E24 SPR5_ID = $7E0E25 SPR6_ID = $7E0E26 SPR7_ID = $7E0E27 SPR8_ID = $7E0E28 SPR9_ID = $7E0E29 SPRA_ID = $7E0E2A SPRB_ID = $7E0E2B SPRC_ID = $7E0E2C SPRD_ID = $7E0E2D SPRE_ID = $7E0E2E SPRF_ID = $7E0E2F ; TODO SPR0_AUXS = $7E0E30 SPR1_AUXS = $7E0E31 SPR2_AUXS = $7E0E32 SPR3_AUXS = $7E0E33 SPR4_AUXS = $7E0E34 SPR5_AUXS = $7E0E35 SPR6_AUXS = $7E0E36 SPR7_AUXS = $7E0E37 SPR8_AUXS = $7E0E38 SPR9_AUXS = $7E0E39 SPRA_AUXS = $7E0E3A SPRB_AUXS = $7E0E3B SPRC_AUXS = $7E0E3C SPRD_AUXS = $7E0E3D SPRE_AUXS = $7E0E3E SPRF_AUXS = $7E0E3F ; Controls OAM allocation and a couple other properties ; set from $0D:B080 ; hmwo oooo ; h - harmless sprite ; m - something with mastersword TODO ; w - something with walls? TODO ; o - oam allocation SPR0_OAMHARM = $7E0E40 SPR1_OAMHARM = $7E0E41 SPR2_OAMHARM = $7E0E42 SPR3_OAMHARM = $7E0E43 SPR4_OAMHARM = $7E0E44 SPR5_OAMHARM = $7E0E45 SPR6_OAMHARM = $7E0E46 SPR7_OAMHARM = $7E0E47 SPR8_OAMHARM = $7E0E48 SPR9_OAMHARM = $7E0E49 SPRA_OAMHARM = $7E0E4A SPRB_OAMHARM = $7E0E4B SPRC_OAMHARM = $7E0E4C SPRD_OAMHARM = $7E0E4D SPRE_OAMHARM = $7E0E4E SPRF_OAMHARM = $7E0E4F ; Sprite's hitpoints | set from $0DB173 SPR0_HP = $7E0E50 SPR1_HP = $7E0E51 SPR2_HP = $7E0E52 SPR3_HP = $7E0E53 SPR4_HP = $7E0E54 SPR5_HP = $7E0E55 SPR6_HP = $7E0E56 SPR7_HP = $7E0E57 SPR8_HP = $7E0E58 SPR9_HP = $7E0E59 SPRA_HP = $7E0E5A SPRB_HP = $7E0E5B SPRC_HP = $7E0E5C SPRD_HP = $7E0E5D SPRE_HP = $7E0E5E SPRF_HP = $7E0E5F ; Mostly controls graphics ; nios pppt ; n - death anim stuff? TODO ; i - impervious to attacks and collision? TODO ; o - shadow size (0: normal | 1: small) ; s - shadow (0: no shadow | 1: shadow) ; p - palette used for OAM props ; t - name table used for OAM props SPR0_PROPS = $7E0E60 SPR1_PROPS = $7E0E61 SPR2_PROPS = $7E0E62 SPR3_PROPS = $7E0E63 SPR4_PROPS = $7E0E64 SPR5_PROPS = $7E0E65 SPR6_PROPS = $7E0E66 SPR7_PROPS = $7E0E67 SPR8_PROPS = $7E0E68 SPR9_PROPS = $7E0E69 SPRA_PROPS = $7E0E6A SPRB_PROPS = $7E0E6B SPRC_PROPS = $7E0E6C SPRD_PROPS = $7E0E6D SPRE_PROPS = $7E0E6E SPRF_PROPS = $7E0E6F ; TODO SPR0_COLLIDE = $7E0E70 SPR1_COLLIDE = $7E0E71 SPR2_COLLIDE = $7E0E72 SPR3_COLLIDE = $7E0E73 SPR4_COLLIDE = $7E0E74 SPR5_COLLIDE = $7E0E75 SPR6_COLLIDE = $7E0E76 SPR7_COLLIDE = $7E0E77 SPR8_COLLIDE = $7E0E78 SPR9_COLLIDE = $7E0E79 SPRA_COLLIDE = $7E0E7A SPRB_COLLIDE = $7E0E7B SPRC_COLLIDE = $7E0E7C SPRD_COLLIDE = $7E0E7D SPRE_COLLIDE = $7E0E7E SPRF_COLLIDE = $7E0E7F ; TODO SPR0_0E80 = $7E0E80 SPR1_0E80 = $7E0E81 SPR2_0E80 = $7E0E82 SPR3_0E80 = $7E0E83 SPR4_0E80 = $7E0E84 SPR5_0E80 = $7E0E85 SPR6_0E80 = $7E0E86 SPR7_0E80 = $7E0E87 SPR8_0E80 = $7E0E88 SPR9_0E80 = $7E0E89 SPRA_0E80 = $7E0E8A SPRB_0E80 = $7E0E8B SPRC_0E80 = $7E0E8C SPRD_0E80 = $7E0E8D SPRE_0E80 = $7E0E8E SPRF_0E80 = $7E0E8F ; TODO SPR0_0E90 = $7E0E90 SPR1_0E90 = $7E0E91 SPR2_0E90 = $7E0E92 SPR3_0E90 = $7E0E93 SPR4_0E90 = $7E0E94 SPR5_0E90 = $7E0E95 SPR6_0E90 = $7E0E96 SPR7_0E90 = $7E0E97 SPR8_0E90 = $7E0E98 SPR9_0E90 = $7E0E99 SPRA_0E90 = $7E0E9A SPRB_0E90 = $7E0E9B SPRC_0E90 = $7E0E9C SPRD_0E90 = $7E0E9D SPRE_0E90 = $7E0E9E SPRF_0E90 = $7E0E9F ; TODO SPR0_0EA0 = $7E0EA0 SPR1_0EA0 = $7E0EA1 SPR2_0EA0 = $7E0EA2 SPR3_0EA0 = $7E0EA3 SPR4_0EA0 = $7E0EA4 SPR5_0EA0 = $7E0EA5 SPR6_0EA0 = $7E0EA6 SPR7_0EA0 = $7E0EA7 SPR8_0EA0 = $7E0EA8 SPR9_0EA0 = $7E0EA9 SPRA_0EA0 = $7E0EAA SPRB_0EA0 = $7E0EAB SPRC_0EA0 = $7E0EAC SPRD_0EA0 = $7E0EAD SPRE_0EA0 = $7E0EAE SPRF_0EA0 = $7E0EAF ; TODO SPR0_0EB0 = $7E0EB0 SPR1_0EB0 = $7E0EB1 SPR2_0EB0 = $7E0EB2 SPR3_0EB0 = $7E0EB3 SPR4_0EB0 = $7E0EB4 SPR5_0EB0 = $7E0EB5 SPR6_0EB0 = $7E0EB6 SPR7_0EB0 = $7E0EB7 SPR8_0EB0 = $7E0EB8 SPR9_0EB0 = $7E0EB9 SPRA_0EB0 = $7E0EBA SPRB_0EB0 = $7E0EBB SPRC_0EB0 = $7E0EBC SPRD_0EB0 = $7E0EBD SPRE_0EB0 = $7E0EBE SPRF_0EB0 = $7E0EBF ; TODO SPR0_0EC0 = $7E0EC0 SPR1_0EC0 = $7E0EC1 SPR2_0EC0 = $7E0EC2 SPR3_0EC0 = $7E0EC3 SPR4_0EC0 = $7E0EC4 SPR5_0EC0 = $7E0EC5 SPR6_0EC0 = $7E0EC6 SPR7_0EC0 = $7E0EC7 SPR8_0EC0 = $7E0EC8 SPR9_0EC0 = $7E0EC9 SPRA_0EC0 = $7E0ECA SPRB_0EC0 = $7E0ECB SPRC_0EC0 = $7E0ECC SPRD_0EC0 = $7E0ECD SPRE_0EC0 = $7E0ECE SPRF_0EC0 = $7E0ECF ; TODO SPR0_0ED0 = $7E0ED0 SPR1_0ED0 = $7E0ED1 SPR2_0ED0 = $7E0ED2 SPR3_0ED0 = $7E0ED3 SPR4_0ED0 = $7E0ED4 SPR5_0ED0 = $7E0ED5 SPR6_0ED0 = $7E0ED6 SPR7_0ED0 = $7E0ED7 SPR8_0ED0 = $7E0ED8 SPR9_0ED0 = $7E0ED9 SPRA_0ED0 = $7E0EDA SPRB_0ED0 = $7E0EDB SPRC_0ED0 = $7E0EDC SPRD_0ED0 = $7E0EDD SPRE_0ED0 = $7E0EDE SPRF_0ED0 = $7E0EDF ; TODO SPR0_TIMER_D = $7E0EE0 SPR1_TIMER_D = $7E0EE1 SPR2_TIMER_D = $7E0EE2 SPR3_TIMER_D = $7E0EE3 SPR4_TIMER_D = $7E0EE4 SPR5_TIMER_D = $7E0EE5 SPR6_TIMER_D = $7E0EE6 SPR7_TIMER_D = $7E0EE7 SPR8_TIMER_D = $7E0EE8 SPR9_TIMER_D = $7E0EE9 SPRA_TIMER_D = $7E0EEA SPRB_TIMER_D = $7E0EEB SPRC_TIMER_D = $7E0EEC SPRD_TIMER_D = $7E0EED SPRE_TIMER_D = $7E0EEE SPRF_TIMER_D = $7E0EEF ; TODO SPR0_DMGTIMER = $7E0EF0 SPR1_DMGTIMER = $7E0EF1 SPR2_DMGTIMER = $7E0EF2 SPR3_DMGTIMER = $7E0EF3 SPR4_DMGTIMER = $7E0EF4 SPR5_DMGTIMER = $7E0EF5 SPR6_DMGTIMER = $7E0EF6 SPR7_DMGTIMER = $7E0EF7 SPR8_DMGTIMER = $7E0EF8 SPR9_DMGTIMER = $7E0EF9 SPRA_DMGTIMER = $7E0EFA SPRB_DMGTIMER = $7E0EFB SPRC_DMGTIMER = $7E0EFC SPRD_DMGTIMER = $7E0EFD SPRE_DMGTIMER = $7E0EFE SPRF_DMGTIMER = $7E0EFF ; TODO SPR0_HALT = $7E0F00 SPR1_HALT = $7E0F01 SPR2_HALT = $7E0F02 SPR3_HALT = $7E0F03 SPR4_HALT = $7E0F04 SPR5_HALT = $7E0F05 SPR6_HALT = $7E0F06 SPR7_HALT = $7E0F07 SPR8_HALT = $7E0F08 SPR9_HALT = $7E0F09 SPRA_HALT = $7E0F0A SPRB_HALT = $7E0F0B SPRC_HALT = $7E0F0C SPRD_HALT = $7E0F0D SPRE_HALT = $7E0F0E SPRF_HALT = $7E0F0F ; TODO SPR0_TIMER_E = $7E0F10 SPR1_TIMER_E = $7E0F11 SPR2_TIMER_E = $7E0F12 SPR3_TIMER_E = $7E0F13 SPR4_TIMER_E = $7E0F14 SPR5_TIMER_E = $7E0F15 SPR6_TIMER_E = $7E0F16 SPR7_TIMER_E = $7E0F17 SPR8_TIMER_E = $7E0F18 SPR9_TIMER_E = $7E0F19 SPRA_TIMER_E = $7E0F1A SPRB_TIMER_E = $7E0F1B SPRC_TIMER_E = $7E0F1C SPRD_TIMER_E = $7E0F1D SPRE_TIMER_E = $7E0F1E SPRF_TIMER_E = $7E0F1F ; TODO SPR0_LAYER = $7E0F20 SPR1_LAYER = $7E0F21 SPR2_LAYER = $7E0F22 SPR3_LAYER = $7E0F23 SPR4_LAYER = $7E0F24 SPR5_LAYER = $7E0F25 SPR6_LAYER = $7E0F26 SPR7_LAYER = $7E0F27 SPR8_LAYER = $7E0F28 SPR9_LAYER = $7E0F29 SPRA_LAYER = $7E0F2A SPRB_LAYER = $7E0F2B SPRC_LAYER = $7E0F2C SPRD_LAYER = $7E0F2D SPRE_LAYER = $7E0F2E SPRF_LAYER = $7E0F2F ; TODO ; y-axis SPR0_RECOILY = $7E0F30 SPR1_RECOILY = $7E0F31 SPR2_RECOILY = $7E0F32 SPR3_RECOILY = $7E0F33 SPR4_RECOILY = $7E0F34 SPR5_RECOILY = $7E0F35 SPR6_RECOILY = $7E0F36 SPR7_RECOILY = $7E0F37 SPR8_RECOILY = $7E0F38 SPR9_RECOILY = $7E0F39 SPRA_RECOILY = $7E0F3A SPRB_RECOILY = $7E0F3B SPRC_RECOILY = $7E0F3C SPRD_RECOILY = $7E0F3D SPRE_RECOILY = $7E0F3E SPRF_RECOILY = $7E0F3F ; x-axis SPR0_RECOILX = $7E0F40 SPR1_RECOILX = $7E0F41 SPR2_RECOILX = $7E0F42 SPR3_RECOILX = $7E0F43 SPR4_RECOILX = $7E0F44 SPR5_RECOILX = $7E0F45 SPR6_RECOILX = $7E0F46 SPR7_RECOILX = $7E0F47 SPR8_RECOILX = $7E0F48 SPR9_RECOILX = $7E0F49 SPRA_RECOILX = $7E0F4A SPRB_RECOILX = $7E0F4B SPRC_RECOILX = $7E0F4C SPRD_RECOILX = $7E0F4D SPRE_RECOILX = $7E0F4E SPRF_RECOILX = $7E0F4F ; Actual props copied to OAM SPR0_OAMPROP = $7E0F50 SPR1_OAMPROP = $7E0F51 SPR2_OAMPROP = $7E0F52 SPR3_OAMPROP = $7E0F53 SPR4_OAMPROP = $7E0F54 SPR5_OAMPROP = $7E0F55 SPR6_OAMPROP = $7E0F56 SPR7_OAMPROP = $7E0F57 SPR8_OAMPROP = $7E0F58 SPR9_OAMPROP = $7E0F59 SPRA_OAMPROP = $7E0F5A SPRB_OAMPROP = $7E0F5B SPRC_OAMPROP = $7E0F5C SPRD_OAMPROP = $7E0F5D SPRE_OAMPROP = $7E0F5E SPRF_OAMPROP = $7E0F5F ; Mostly controls collision related stuff ; isph hhhh ; i - ignore collision stuff? TODO ; s - "statis"; sprite doesn't count for kill rooms if set ; p - activeness? TODO ; h - hitbox ID ; TODO HITBOXES SPR0_COLPROP = $7E0F60 SPR1_COLPROP = $7E0F61 SPR2_COLPROP = $7E0F62 SPR3_COLPROP = $7E0F63 SPR4_COLPROP = $7E0F64 SPR5_COLPROP = $7E0F65 SPR6_COLPROP = $7E0F66 SPR7_COLPROP = $7E0F67 SPR8_COLPROP = $7E0F68 SPR9_COLPROP = $7E0F69 SPRA_COLPROP = $7E0F6A SPRB_COLPROP = $7E0F6B SPRC_COLPROP = $7E0F6C SPRD_COLPROP = $7E0F6D SPRE_COLPROP = $7E0F6E SPRF_COLPROP = $7E0F6F ; Z coordinate SPR0_Z = $7E0F70 SPR1_Z = $7E0F71 SPR2_Z = $7E0F72 SPR3_Z = $7E0F73 SPR4_Z = $7E0F74 SPR5_Z = $7E0F75 SPR6_Z = $7E0F76 SPR7_Z = $7E0F77 SPR8_Z = $7E0F78 SPR9_Z = $7E0F79 SPRA_Z = $7E0F7A SPRB_Z = $7E0F7B SPRC_Z = $7E0F7C SPRD_Z = $7E0F7D SPRE_Z = $7E0F7E SPRF_Z = $7E0F7F ; TODO SPR0_VZ = $7E0F80 SPR1_VZ = $7E0F81 SPR2_VZ = $7E0F82 SPR3_VZ = $7E0F83 SPR4_VZ = $7E0F84 SPR5_VZ = $7E0F85 SPR6_VZ = $7E0F86 SPR7_VZ = $7E0F87 SPR8_VZ = $7E0F88 SPR9_VZ = $7E0F89 SPRA_VZ = $7E0F8A SPRB_VZ = $7E0F8B SPRC_VZ = $7E0F8C SPRD_VZ = $7E0F8D SPRE_VZ = $7E0F8E SPRF_VZ = $7E0F8F ; TODO SPR0_SUBZ = $7E0F90 SPR1_SUBZ = $7E0F91 SPR2_SUBZ = $7E0F92 SPR3_SUBZ = $7E0F93 SPR4_SUBZ = $7E0F94 SPR5_SUBZ = $7E0F95 SPR6_SUBZ = $7E0F96 SPR7_SUBZ = $7E0F97 SPR8_SUBZ = $7E0F98 SPR9_SUBZ = $7E0F99 SPRA_SUBZ = $7E0F9A SPRB_SUBZ = $7E0F9B SPRC_SUBZ = $7E0F9C SPRD_SUBZ = $7E0F9D SPRE_SUBZ = $7E0F9E SPRF_SUBZ = $7E0F9F ; Current sprite slot being executed during the main sprite loop. SPRSLOT = $7E0FA0 ; Used to hold last RNG value for "seeding" RNG = $7E0FA1 ; FREE RAM: 0x03 UNUSED_7E0FA2 = $7E0FA2 UNUSED_7E0FA3 = $7E0FA3 UNUSED_7E0FA4 = $7E0FA4 ; Stores the tile type for sprites and ancillae. SPRTILE = $7E0FA5 ; FREE RAM: 0x02 UNUSED_7E0FA6 = $7E0FA6 UNUSED_7E0FA7 = $7E0FA7 ; Used as general scratch space, but commonly used for low byte of OAM positioning for sprites. SPROAMX = $7E0FA8 SPROAMY = $7E0FA9 ; Used for positioning OAM on the dungeon map. ; Also used as general scratch space for guards. MAPOAMX = $7E0FAA MAPOAMY = $7E0FAB ; Weapon tink spark animation state TINK = $7E0FAC ; Weapon tink spark coordinates TINKX = $7E0FAD TINKY = $7E0FAE ; Weapon tink spark animation timer TINKATM = $7E0FAF ; Used to set sprite coordinate high bytes as calculated from room ID SETXHI = $7E0FB0 SETYHI = $7E0FB1 ; Some debug variable? Never used productively, but seems to be kept in sync with SPRLIFT. DEBUG_7E0FB2 = $7E0FB2 ; This address forces OAM allocation to consider the layer of the entity. ; Mostly helps to prevent ghosting with objects in multi layer rooms ; Also required to be set if sprites are to drop to the other layer when hitting mask 1C LAYERING = $7E0FB3 ; When nonzero, garnish are handled. GARNISH = $7E0FB4 ; Used for looping through sprites in various routines. SPRXTEMP = $7E0FB5 ; Used as scratch space for various sprite routines. SPRSCRAP = $7E0FB6 ; Counts up every frame in the overworld. ; Bit 0 is checked to alternate the behavior of proximity based sprite activation. OWLOADSWAP = $7E0FB7 ; Edge coordinates used for calculating proximity of sprites to load on overworld OWLDWXL = $7E0FB8 OWLDWXH = $7E0FB9 OWLDNYL = $7E0FBA OWLDNYH = $7E0FBB OWLDEXL = $7E0FBC OWLDEXH = $7E0FBD OWLDSYL = $7E0FBE OWLDSYH = $7E0FBF ; FREE RAM: 0x01 UNUSED_7E0FC0 = $7E0FC0 ; Seems to freeze sprites ; TODO: usage FREEZESPR = $7E0FC1 ; Cache of Link's coordinates ; Done at the beginning of Link_Main every frame ; In X,Y order instead of Y,X for some reason POSX2L = $7E0FC2 POSX2H = $7E0FC3 POSY2L = $7E0FC4 POSY2H = $7E0FC5 ; Mirrors $0AAA in some cases ; Used by sprites to verify the graphics loaded ; TODO verify GFXHSLOT = $7E0FC6 ; Prize pack indices PRIZEX1 = $7E0FC7 PRIZEX2 = $7E0FC8 PRIZEX3 = $7E0FC9 PRIZEX4 = $7E0FCA PRIZEX5 = $7E0FCB PRIZEX6 = $7E0FCC PRIZEX7 = $7E0FCD ; FREE RAM: 0x09 ; Space was probably allotted for more prize packs, but it goes unused. UNUSED_7E0FCE = $7E0FCE UNUSED_7E0FCF = $7E0FCF UNUSED_7E0FD0 = $7E0FD0 UNUSED_7E0FD1 = $7E0FD1 UNUSED_7E0FD2 = $7E0FD2 UNUSED_7E0FD3 = $7E0FD3 UNUSED_7E0FD4 = $7E0FD4 UNUSED_7E0FD5 = $7E0FD5 UNUSED_7E0FD6 = $7E0FD6 ; Unreachable debug flag for skipping frames when L but not R pressed. SKIPFRAME = $7E0FD7 ; Caches sprite coordinates for calculations SPRCORDXL = $7E0FD8 SPRCORDXH = $7E0FD9 SPRCORDYL = $7E0FDA SPRCORDYH = $7E0FDB ; Triggers noise to call guards. ALERT = $7E0FDC ; Flags whether the animals in the haunted grove should disperse yet. ANIMALRUN = $7E0FDD ; Overlord index of active "home target" overlords (ID: 0x01) HOMESLOT = $7E0FDE ; FREE RAM: 0x01 UNUSED_7E0FDF = $7E0FDF ; OAM region pointers OAMAH = $7E0FE0 OAMAL = $7E0FE1 OAMBH = $7E0FE2 OAMBL = $7E0FE3 OAMCH = $7E0FF4 OAMCL = $7E0FF5 OAMDH = $7E0FF6 OAMDL = $7E0FF7 OAMEH = $7E0FF8 OAMEL = $7E0FF9 OAMFH = $7E0FFA OAMFL = $7E0FFB ; Used to find backup regions for OAM regions ; High byte unused but always written 0 OAMBKAH = $7E0FEC OAMBKAL = $7E0FED OAMBKBH = $7E0FEE OAMBKBL = $7E0FEF OAMBKCH = $7E0FF0 OAMBKCL = $7E0FF1 OAMBKDH = $7E0FF2 OAMBKDL = $7E0FF3 OAMBKEH = $7E0FF4 OAMBKEL = $7E0FF5 OAMBKFH = $7E0FF6 OAMBKFL = $7E0FF7 ; Used as a fallback search index for garnish creation. ; Also counts the number of armos knights left alive. GARNFIND = $7E0FF8 ; Used as a timer that counts down and flashes the screen while running. ; Flags whether or not to execute cached sprites on transition. DOCACHE = $7E0FFA ; Zeroed in one location, but never read. JUNK_7E0FFB = $7E0FFB ; When set, prevents: ; menuing ; mirroring ; medallions NOMENU = $7E0FFC ; Set nonzero when the boulder spawner overlord is loaded on the overworld. AVALANCHE = $7E0FFD ; Increments if AVALANCHE is set. ; Boulders spawn when the bottom 4 bits are all reset. ; ..aa aaaa BOULDER = $7E0FFE ; Light world or dark world WORLDFLAG = $7E0FFF ; --------------------------------------------------------- ; Used by stripes for arbitrary VRAM transfers. GFXSTRIPES = $7E1000 ; Used for room drawing ROOMSTRIPES = $7E1100 ; --------------------------------------------------------- ; Door types TODO DOOR0TYPE = $7E1980 DOOR0DIRT = $7E1981 DOOR1TYPE = $7E1982 DOOR1DIRT = $7E1983 DOOR2TYPE = $7E1984 DOOR2DIRT = $7E1985 DOOR3TYPE = $7E1986 DOOR3DIRT = $7E1987 DOOR4TYPE = $7E1988 DOOR4DIRT = $7E1989 DOOR5TYPE = $7E198A DOOR5DIRT = $7E198B DOOR6TYPE = $7E198C DOOR6DIRT = $7E198D DOOR7TYPE = $7E198E DOOR7DIRT = $7E198F DOOR8TYPE = $7E1990 DOOR8DIRT = $7E1991 DOOR9TYPE = $7E1992 DOOR9DIRT = $7E1993 DOORATYPE = $7E1994 DOORADIRT = $7E1995 DOORBTYPE = $7E1996 DOORBDIRT = $7E1997 DOORCTYPE = $7E1998 DOORCDIRT = $7E1999 DOORDTYPE = $7E199A DOORDDIRT = $7E199B DOORETYPE = $7E199C DOOREDIRT = $7E199D DOORFTYPE = $7E199E DOORFDIRT = $7E199F ; Door tile map location DOOR0TMAPL = $7E19A0 DOOR0TMAPH = $7E19A1 DOOR1TMAPL = $7E19A2 DOOR1TMAPH = $7E19A3 DOOR2TMAPL = $7E19A4 DOOR2TMAPH = $7E19A5 DOOR3TMAPL = $7E19A6 DOOR3TMAPH = $7E19A7 DOOR4TMAPL = $7E19A8 DOOR4TMAPH = $7E19A9 DOOR5TMAPL = $7E19AA DOOR5TMAPH = $7E19AB DOOR6TMAPL = $7E19AC DOOR6TMAPH = $7E19AD DOOR7TMAPL = $7E19AE DOOR7TMAPH = $7E19AF DOOR8TMAPL = $7E19B0 DOOR8TMAPH = $7E19B1 DOOR9TMAPL = $7E19B2 DOOR9TMAPH = $7E19B3 DOORATMAPL = $7E19B4 DOORATMAPH = $7E19B5 DOORBTMAPL = $7E19B6 DOORBTMAPH = $7E19B7 DOORCTMAPL = $7E19B8 DOORCTMAPH = $7E19B9 DOORDTMAPL = $7E19BA DOORDTMAPH = $7E19BB DOORETMAPL = $7E19BC DOORETMAPH = $7E19BD DOORFTMAPL = $7E19BE DOORFTMAPH = $7E19BF ; Door direction ; 0x00 - North ; 0x01 - South ; 0x02 - West ; 0x03 - East DOOR0DIR = $7E19C0 DOOR0DIRH = $7E19C1 DOOR1DIR = $7E19C2 DOOR1DIRH = $7E19C3 DOOR2DIR = $7E19C4 DOOR2DIRH = $7E19C5 DOOR3DIR = $7E19C6 DOOR3DIRH = $7E19C7 DOOR4DIR = $7E19C8 DOOR4DIRH = $7E19C9 DOOR5DIR = $7E19CA DOOR5DIRH = $7E19CB DOOR6DIR = $7E19CC DOOR6DIRH = $7E19CD DOOR7DIR = $7E19CE DOOR7DIRH = $7E19CF DOOR8DIR = $7E19D0 DOOR8DIRH = $7E19D1 DOOR9DIR = $7E19D2 DOOR9DIRH = $7E19D3 DOORADIR = $7E19D4 DOORADIRH = $7E19D5 DOORBDIR = $7E19D6 DOORBDIRH = $7E19D7 DOORCDIR = $7E19D8 DOORCDIRH = $7E19D9 DOORDDIR = $7E19DA DOORDDIRH = $7E19DB DOOREDIR = $7E19DC DOOREDIRH = $7E19DD DOORFDIR = $7E19DE DOORFDIRH = $7E19DF ; Index for exit mod doors in the following array EXITI = $7E19E0 EXITIH = $7E19E1 ; Tile map location of doors modified into exits EXIT0TX = $7E19E2 EXIT0TXH = $7E19E3 EXIT1TX = $7E19E4 EXIT1TXH = $7E19E5 EXIT2TX = $7E19E6 EXIT2TXH = $7E19E7 EXIT3TX = $7E19E8 EXIT3TXH = $7E19E9 ; FREE RAM: 0x16 UNUSED_7E19EA = $7E19EA ; --------------------------------------------------------- ; 20 steps of animation and movement caching for followers FOLLOWERYL = $7E1A00 FOLLOWERYH = $7E1A14 FOLLOWERXL = $7E1A28 FOLLOWERXH = $7E1A3C FOLLOWERZ = $7E1A50 FOLLOWERLAYER = $7E1A64 ; BIG FREE RAM: 0x38 UNUSED_7E1A78 = $7E1A78 ; X- and Y- coordinates of mirror portal; also flute numbers during flute menu. ; x low FLUTENUMXL = $7E1AB0 ; FREE RAM: 0x07 UNUSED_7E1AB8 = $7E1AB8 ; mirror x low MIRRORXL = $7E1ABF ; x high FLUTENUMXH = $7E1AC0 ; FREE RAM: 0x07 UNUSED_7E1AC8 = $7E1AC8 ; mirror x high MIRRORXH = $7E1ACF ; y low FLUTENUMYL = $7E1AD0 ; FREE RAM: 0x07 UNUSED_7E1AD8 = $7E1AD8 ; mirror y low MIRRORYL = $7E1ADF ; y high FLUTENUMYH = $7E1AE0 ; FREE RAM: 0x07 UNUSED_7E1AE8 = $7E1AE8 ; mirror y high MIRRORYH = $7E1AEF ; Currently selected flute number. Zero-indexed, unlike the actual icons. FLUTESEL = $7E1AF0 ; Zeroed when initializing bat crash, but never read. JUNK_7E1AF1 = $7E1AF1 ; FREE RAM: 0x0D UNUSED_7E1AF2 = $7E1AF2 UNUSED_7E1AF3 = $7E1AF3 UNUSED_7E1AF4 = $7E1AF4 UNUSED_7E1AF5 = $7E1AF5 UNUSED_7E1AF6 = $7E1AF6 UNUSED_7E1AF7 = $7E1AF7 UNUSED_7E1AF8 = $7E1AF8 UNUSED_7E1AF9 = $7E1AF9 UNUSED_7E1AFA = $7E1AFA UNUSED_7E1AFB = $7E1AFB UNUSED_7E1AFC = $7E1AFC UNUSED_7E1AFD = $7E1AFD UNUSED_7E1AFE = $7E1AFE ; Slowly counts up while in the world map if mirror is active. ; Zeroed when loading a file. ; Not used for anything. MIRRORCOUNT = $7E1AFF ; --------------------------------------------------------- ; Spotlight windowing values for the IRIS HDMA IRIS = $7E1B00 ; --------------------------------------------------------- ; FREE RAM: 0x10 UNUSED_7E1CC0 = $7E1CC0 UNUSED_7E1CC1 = $7E1CC1 UNUSED_7E1CC2 = $7E1CC2 UNUSED_7E1CC3 = $7E1CC3 UNUSED_7E1CC4 = $7E1CC4 UNUSED_7E1CC5 = $7E1CC5 UNUSED_7E1CC6 = $7E1CC6 UNUSED_7E1CC7 = $7E1CC7 UNUSED_7E1CC8 = $7E1CC8 UNUSED_7E1CC9 = $7E1CC9 UNUSED_7E1CCA = $7E1CCA UNUSED_7E1CCB = $7E1CCB UNUSED_7E1CCC = $7E1CCC UNUSED_7E1CCD = $7E1CCD UNUSED_7E1CCE = $7E1CCE UNUSED_7E1CCF = $7E1CCF ; VRAM address for drawing message box borders BORDADD = $7E1CD0 BORDADDH = $7E1CD1 ; VRAM address>>1 of dialog window MSGWPOSL = $7E1CD2 MSGWPOSH = $7E1CD3 ; Subsubmodule on what to draw MSGSUBSUB = $7E1CD4 ; TODO how exactly this is used? MSGSPEEDB = $7E1CD5 MSGSPEEDA = $7E1CD6 ; Used as a counter to render border window MSGBRDCNT = $7E1CD7 ; Messaging submodule MSGSUB = $7E1CD8 ; Offset into message buffer at $7F:1200 MSGBFROFF = $7E1CD9 MSGBFROFFH = $7E1CDA ; FREE RAM: 0x01 UNUSED_7E1CDB = $7E1CDB ; High byte of message tilemap definition (including props; color) MSGPROP = $7E1CDC ; Offset into message data MSGDATAOFF = $7E1CDD MSGDATAOFFH = $7E1CDE ; Initialized with 00, but seems unused. JUNK_7E1CDF = $7E1CDF ; Wait timer delay MSGWAIT = $7E1CE0 MSGWAITH = $7E1CE1 ; Initialized to $3980 and incremented to fill the message box tile map. MSGFILL = $7E1CE2 MSGFILLH = $7E1CE3 ; Initialized with 0x00, but unused JUNK_7E1CE4 = $7E1CE4 JUNK_7E1CE5 = $7E1CE5 ; Helps draw in pixels one by one to VRAM buffer MSGPXL = $7E1CE6 MSGPXLH = $7E1CE7 ; Selected option in message MSGCHOICE = $7E1CE8 ; Delay timer for various actions MSGDELAY = $7E1CE9 ; Handles scrolling loops, but poorly implemented and unused MSGSCRLX = $7E1CEA ; Initialized with 00, but unused JUNK_7E1CEB = $7E1CEB JUNK_7E1CEC = $7E1CEC JUNK_7E1CED = $7E1CED JUNK_7E1CEE = $7E1CEE JUNK_7E1CEF = $7E1CEF ; Message ID and page TEXTID = $7E1CF0 TEXTIDH = $7E1CF1 ; Message BCD values as nibbles ; 1CF2: bbbb aaaa ; 1CF3: dddd cccc MSGBCD12 = $7E1CF2 MSGBCD34 = $7E1CF3 ; Saves last selected menu option when entering various interfaces MSGLASTC = $7E1CF4 ; FREE RAM: 0x0B UNUSED_7E1CF5 = $7E1CF5 UNUSED_7E1CF6 = $7E1CF6 UNUSED_7E1CF7 = $7E1CF7 UNUSED_7E1CF8 = $7E1CF8 UNUSED_7E1CF9 = $7E1CF9 UNUSED_7E1CFA = $7E1CFA UNUSED_7E1CFB = $7E1CFB UNUSED_7E1CFC = $7E1CFC UNUSED_7E1CFD = $7E1CFD UNUSED_7E1CFE = $7E1CFE UNUSED_7E1CFF = $7E1CFF ; --------------------------------------------------------- ; Self-explanatory sprite caching CACHE_0DD0 = $7E1D00 CACHE_0E20 = $7E1D10 CACHE_0D10 = $7E1D20 CACHE_0D30 = $7E1D30 CACHE_0D00 = $7E1D40 CACHE_0D20 = $7E1D50 CACHE_0DC0 = $7E1D60 CACHE_0D90 = $7E1D70 CACHE_0EB0 = $7E1D80 CACHE_0F50 = $7E1D90 CACHE_0B89 = $7E1DA0 CACHE_0DE0 = $7E1DB0 CACHE_0E40 = $7E1DC0 CACHE_0F20 = $7E1DD0 CACHE_0D80 = $7E1DE0 CACHE_0E60 = $7E1DF0 ; --------------------------------------------------------- ; Polyhedral variables used by the intro and ending sequence. ; --------------------------------------------------------- ; Be wary of FREE RAM listed here, as it will be cleared with other values here. ; --------------------------------------------------------- ; Cutscene act SCENESTEP = $7E1E00 ; Timer for changing acts SCENETIME = $7E1E01 ; When set, triforce room triangles don't move. SCENESTOP = $7E1E02 ; FREE RAM: 0x05 UNUSED_7E1E03 = $7E1E03 UNUSED_7E1E04 = $7E1E04 UNUSED_7E1E05 = $7E1E05 UNUSED_7E1E06 = $7E1E06 UNUSED_7E1E07 = $7E1E07 ; Used for indexing in OAM routines SCENEOAMXL = $7E1E08 SCENEOAMXH = $7E1E09 ; Frame counter SCENEFRAME = $7E1E0A ; FREE RAM: 0x01 UNUSED_7E1E0B = $7E1E0B ; Countdown timer for the triangles to snap into their final position in the triforce room. SCENESNAPTL = $7E1E0C SCENESNAPTH = $7E1E0D ; FREE RAM: 0x02 UNUSED_7E1E0E = $7E1E0E UNUSED_7E1E0F = $7E1E0F ; Mode for sprite ; 0x00 - nothing ; 0x01 - initialize ; 0x02 - animate SCSPRMODE = $7E1E10 ; Sprite type SCSPRID = $7E1E18 ; Step counter SCSPRSTEP = $7E1E20 ; Seems to be a subpixel for triforce triangle x speeds SCSPRSUBX = $7E1E28 ; X position SCSPRXL = $7E1E30 SCSPRXH = $7E1E38 ; Seems to be a subpixel for triforce triangle y speeds SCSPRSUBY = $7E1E40 ; Y position SCSPRYL = $7E1E48 SCSPRYH = $7E1E50 ; Speed SCSPRVX = $7E1E58 SCSPRVY = $7E1E60 ; FREE RAM: 0x08 UNUSED_7E1E68 = $7E1E68 ; BIG FREE RAM: 0x90 ; This big block is actually 100% safe UNUSED_7E1E70 = $7E1E70 ; ========================================================= ; --------------------------------------------------------- ; IRQ DIRECT PAGE ; --------------------------------------------------------- ; ========================================================= ; --------------------------------------------------------- ; The polyhedral code is the only instance of direct page juggling in ALTTP ; most addresses here will be accessed with direct page addressing ; ; Be wary of FREE RAM listed here, as it will be zeroed whenever the polyhedral thread initializes. ; --------------------------------------------------------- ; ========================================================= ; Tells the polyhedral thread to wait for IRQ. POLYWAIT = $7E1F00 ; Seems to control opacity POLYOPAC = $7E1F01 ; Polyhedral distance ; Larger numbers = further distance POLYZOOM = $7E1F02 ; Polyhedral shape ID ; 0x00 - Crystal ; 0x01 - Triforce triangle POLYSHAPE = $7E1F03 ; Rotation of polyhedral about its axes POLYROTX = $7E1F04 POLYROTY = $7E1F05 ; Offset of the drawn polyhedral POLYOFFH = $7E1F06 POLYOFFV = $7E1F07 ; Seems to be size in some way. ; Larger numbers = smaller object. POLYSIZEL = $7E1F08 POLYSIZEH = $7E1F09 ; Stack pointer for polyhedral threads POLYSTACKL = $7E1F0A POLYSTACKH = $7E1F0B ; Flag for updating sprites during NMI POLYSPRUP = $7E1F0C ; Polyhedral stack space. 0x32 bytes ; $1F32..$1F3E are initialized with the necessary values of registers to be pulled from IRQ's RTI. ; To access these values, POLYSTACKL is initialized with $1F31. POLYSTACKBOT = $7E1F0D POLYSTACKTOP = $7E1F3E ; Number of vertices POLYVERTS = $7E1F3F ; Number of faces POLYFACES = $7E1F40 ; Pointer to vertices data POLYPTRVERTL = $7E1F41 POLYPTRVERTH = $7E1F42 ; Pointer to faces data POLYPTRFACEL = $7E1F43 POLYPTRFACEH = $7E1F44 ; Math scratch space POLYSCRAP45 = $7E1F45 POLYSCRAP46 = $7E1F46 POLYSCRAP47 = $7E1F47 POLYSCRAP48 = $7E1F48 POLYSCRAP49 = $7E1F49 POLYSCRAP4A = $7E1F4A POLYSCRAP4B = $7E1F4B POLYSCRAP4C = $7E1F4C POLYSCRAP4D = $7E1F4D POLYSCRAP4E = $7E1F4E POLYSCRAP4F = $7E1F4F POLYSCRAP50 = $7E1F50 POLYSCRAP51 = $7E1F51 POLYSCRAP52 = $7E1F52 POLYSCRAP53 = $7E1F53 POLYSCRAP54 = $7E1F54 POLYSCRAP55 = $7E1F55 POLYSCRAP56 = $7E1F56 POLYSCRAP57 = $7E1F57 POLYSCRAP58 = $7E1F58 POLYSCRAP59 = $7E1F59 POLYSCRAP5A = $7E1F5A POLYSCRAP5B = $7E1F5B POLYSCRAP5C = $7E1F5C POLYSCRAP5D = $7E1F5D POLYSCRAP5E = $7E1F5E POLYSCRAP5F = $7E1F5F ; TODO UNKNOWN_7E1F60 = $7E1F60 ; TODO UNKNOWN_7E1F88 = $7E1F88 ; TODO UNKNOWN_7E1FB0 = $7E1FB0 UNKNOWN_7E1FB1 = $7E1FB1 UNKNOWN_7E1FB2 = $7E1FB2 UNKNOWN_7E1FB3 = $7E1FB3 ; FREE RAM: 0x01 UNUSED_7E1FB4 = $7E1FB4 ; TODO UNKNOWN_7E1FB5 = $7E1FB5 UNKNOWN_7E1FB6 = $7E1FB6 UNKNOWN_7E1FB7 = $7E1FB7 UNKNOWN_7E1FB8 = $7E1FB8 UNKNOWN_7E1FB9 = $7E1FB9 UNKNOWN_7E1FBA = $7E1FBA ; FREE RAM: 0x01 UNUSED_7E1FBB = $7E1FBB ; TODO UNKNOWN_7E1FBC = $7E1FBC ; FREE RAM: 0x03 UNUSED_7E1FBD = $7E1FBD UNUSED_7E1FBE = $7E1FBE UNUSED_7E1FBF = $7E1FBE ; TODO UNKNOWN_7E1FC0 = $7E1FC0 UNKNOWN_7E1FC1 = $7E1FC1 UNKNOWN_7E1FC2 = $7E1FC2 UNKNOWN_7E1FC3 = $7E1FC3 UNKNOWN_7E1FC4 = $7E1FC4 UNKNOWN_7E1FC5 = $7E1FC5 UNKNOWN_7E1FC6 = $7E1FC6 UNKNOWN_7E1FC7 = $7E1FC7 UNKNOWN_7E1FE0 = $7E1FE0 UNKNOWN_7E1FE1 = $7E1FE1 UNKNOWN_7E1FE2 = $7E1FE2 UNKNOWN_7E1FE3 = $7E1FE3 UNKNOWN_7E1FE4 = $7E1FE4 UNKNOWN_7E1FE5 = $7E1FE5 UNKNOWN_7E1FE6 = $7E1FE6 UNKNOWN_7E1FE7 = $7E1FE7 UNKNOWN_7E1FE8 = $7E1FE8 UNKNOWN_7E1FE9 = $7E1FE9 UNKNOWN_7E1FEA = $7E1FEA UNKNOWN_7E1FEB = $7E1FEB UNKNOWN_7E1FEC = $7E1FEC UNKNOWN_7E1FED = $7E1FED UNKNOWN_7E1FEE = $7E1FEE UNKNOWN_7E1FEF = $7E1FEF UNKNOWN_7E1FF0 = $7E1FF0 UNKNOWN_7E1FF1 = $7E1FF1 UNKNOWN_7E1FF2 = $7E1FF2 ; FREE RAM: 0x07 UNUSED_7E1FF3 = $7E1FF3 UNUSED_7E1FF4 = $7E1FF4 UNUSED_7E1FF5 = $7E1FF5 UNUSED_7E1FF6 = $7E1FF6 UNUSED_7E1FF7 = $7E1FF7 UNUSED_7E1FF8 = $7E1FF8 UNUSED_7E1FF9 = $7E1FF9 ; TODO UNKNOWN_7E1FFA = $7E1FFA UNKNOWN_7E1FFB = $7E1FFB ; FREE RAM: 0x04 UNUSED_7E1FFC = $7E1FFC UNUSED_7E1FFD = $7E1FFD UNUSED_7E1FFE = $7E1FFE UNUSED_7E1FFF = $7E1FFF ; ========================================================= ; --------------------------------------------------------- ; UNMIRRORED WRAM ; Addresses from here on can only be accessed with long addressing ; or absolute addressing with the appropriate data bank set ; --------------------------------------------------------- ; ========================================================= ; In the underworld, this holds a copy of the entire BG tilemap for ; Layer 1 (BG2) in TILEMAPA ; Layer 2 (BG1) in TILEMAPB ; ; In the overworld, this holds the entire map16 space, using both blocks as a single array TILEMAPA = $7E2000 TILEMAPB = $7E4000 ; --------------------------------------------------------- ; Decompression scratch space DECOMP = $7E6000 ; --------------------------------------------------------- ; Fully decompressed 4BPP buffer for common graphics GFX_SWORD = $7E9000 GFX_SHIELD = $7E9300 GFX_ROD = $7E9480 GFX_HAMMER = $7E9640 GFX_BOW = $7E9800 GFX_SHOVEL = $7E98C0 GFX_ZZZ = $7E99C0 GFX_QUAVER = $7E9A20 GFX_POWDER = $7E9A80 GFX_HOOK = $7E9AC0 GFX_NET = $7E9BC0 GFX_CANE = $7E9F40 GFX_BOOK = $7EA100 GFX_NULL = $7EA180 GFX_BLOCK = $7EA480 GFX_TILEF1 = $7EA680 GFX_TILEF2 = $7EAA80 GFX_TILEF3 = $7EAE80 GFX_RUPEES = $7EB280 GFX_PEGS = $7EB340 GFX_DUCK = $7EB540 GFX_CHEST = $7EB600 GFX_FOLLOWER = $7EB940 GFX_ITEMGET = $7EBD40 GFX_STARS = $7EBDC0 ; --------------------------------------------------------- ; BIG FREE RAM: 0x0200 UNUSED_7EBE00 = $7EBE00 ; --------------------------------------------------------- ; Target room ID of pits/warps and stairs WARPTO = $7EC000 STAIR0TO = $7EC001 STAIR1TO = $7EC002 STAIR2TO = $7EC003 STAIR3TO = $7EC004 ; Flags fade to black on room transitions RMFADE = $7EC005 RMFADE2 = $7EC006 ; Timer for transition fading and mosaics FADETIME = $7EC007 FADETIMEH = $7EC008 ; Flags direction of fade RMFADEDIR = $7EC009 RMFADEDIRH = $7EC00A ; Target fade level FADETGT = $7EC00B FADETGTH = $7EC00C ; Timer used for animating the background. BGANMTIME = $7EC00D BGANMTIMEH = $7EC00E ; Index for animated rupee tiles. BGRUPSTEP = $7EC00F BGRUPSTEPH = $7EC010 ; Mosaic level copied to MOSAICQ. ; High byte zeroed but unused. MOSAICLEVEL = $7EC011 MOSAICLEVELH = $7EC012 ; Timer for animated rupee sprites RUPTIMER = $7EC013 RUPTIMERH = $7EC014 ; Index for animated rupee sprites. OBJRUPSTEP = $7EC015 OBJRUPSTEPH = $7EC016 ; Darkness level of a room when using torches. ; High byte zeroed but unused. DARKNESS = $7EC017 DARKNESSH = $7EC018 ; Used for filtering Aga's shadow AGAFADETIME = $7EC019 AGAFADEDIR = $7EC01F ; BIG FREE RAM: 0xDB UNUSED_7EC025 = $7EC025 ; --------------------------------------------------------- ; Variable caching for special overworld SPO_OWSCR2L = $7EC100 SPO_OWSCR2H = $7EC101 SPO_TMQ = $7EC102 SPO_TSQ = $7EC103 SPO_BG2VERTL = $7EC104 SPO_BG2VERTH = $7EC105 SPO_BG2HORZL = $7EC106 SPO_BG2HORZH = $7EC107 SPO_POSYL = $7EC108 SPO_POSYH = $7EC109 SPO_POSXL = $7EC10A SPO_POSXH = $7EC10B SPO_OWSCRL = $7EC10C SPO_OWSCRH = $7EC10D SPO_OWTMAPIL = $7EC10E SPO_OWTMAPIH = $7EC10F SPO_SCROLLATNL = $7EC110 SPO_SCROLLATNH = $7EC111 SPO_SCROLLATWL = $7EC112 SPO_SCROLLATWH = $7EC113 SPO_SCROLLANL = $7EC114 SPO_SCROLLANH = $7EC115 SPO_SCROLLBNL = $7EC116 SPO_SCROLLBNH = $7EC117 SPO_SCROLLASL = $7EC118 SPO_SCROLLASH = $7EC119 SPO_SCROLLBSL = $7EC11A SPO_SCROLLBSH = $7EC11B SPO_OWTARGNL = $7EC11C SPO_OWTARGNH = $7EC11D SPO_OWTARGSL = $7EC11E SPO_OWTARGSH = $7EC11F SPO_OWTARGWL = $7EC120 SPO_OWTARGWH = $7EC121 SPO_OWTARGEL = $7EC122 SPO_OWTARGEH = $7EC123 SPO_MAINGFX = $7EC124 SPO_BGSET1 = $7EC125 SPO_BGSET2 = $7EC126 SPO_SPRSET1 = $7EC127 ; FREE RAM: 0x02 UNUSED_7EC128 = $7EC128 UNUSED_7EC129 = $7EC129 ; More caching SPO_SCRMODYAL = $7EC12A SPO_SCRMODYAH = $7EC12B SPO_SCRMODYBL = $7EC12C SPO_SCRMODYBH = $7EC12D SPO_SCRMODXAL = $7EC12E SPO_SCRMODXAH = $7EC12F SPO_SCRMODXBL = $7EC130 SPO_SCRMODXBH = $7EC131 ; FREE RAM: 0x0E UNUSED_7EC132 = $7EC132 UNUSED_7EC133 = $7EC133 UNUSED_7EC134 = $7EC134 UNUSED_7EC135 = $7EC135 UNUSED_7EC136 = $7EC136 UNUSED_7EC137 = $7EC137 UNUSED_7EC138 = $7EC138 UNUSED_7EC139 = $7EC139 UNUSED_7EC13A = $7EC13A UNUSED_7EC13B = $7EC13B UNUSED_7EC13C = $7EC13C UNUSED_7EC13D = $7EC13D UNUSED_7EC13E = $7EC13E UNUSED_7EC13F = $7EC13F ; Used for caching with entrances EN_OWSCR2L = $7EC140 EN_OWSCR2H = $7EC141 EN_TMQ = $7EC142 EN_TSQ = $7EC143 EN_BG2VERTL = $7EC144 EN_BG2VERTH = $7EC145 EN_BG2HORZL = $7EC146 EN_BG2HORZH = $7EC147 EN_POSYL = $7EC148 EN_POSYH = $7EC149 EN_POSXL = $7EC14A EN_POSXH = $7EC14B EN_OWSCR = $7EC14C EN_OWSCRH = $7EC14D EN_OWTMAPIL = $7EC14E EN_OWTMAPIH = $7EC14F EN_SCROLLATNL = $7EC150 EN_SCROLLATNH = $7EC151 EN_SCROLLATWL = $7EC152 EN_SCROLLATWH = $7EC153 EN_SCROLLANL = $7EC154 EN_SCROLLANH = $7EC155 EN_SCROLLBNL = $7EC156 EN_SCROLLBNH = $7EC157 EN_SCROLLASL = $7EC158 EN_SCROLLASH = $7EC159 EN_SCROLLBSL = $7EC15A EN_SCROLLBSH = $7EC15B EN_OWTARGNL = $7EC15C EN_OWTARGNH = $7EC15D EN_OWTARGSL = $7EC15E EN_OWTARGSH = $7EC15F EN_OWTARGWL = $7EC160 EN_OWTARGWH = $7EC161 EN_OWTARGEL = $7EC162 EN_OWTARGEH = $7EC163 EN_MAINGFX = $7EC164 EN_BGSET1 = $7EC165 EN_BGSET2 = $7EC166 EN_SPRSET1 = $7EC167 ; FREE RAM: 0x02 UNUSED_7EC168 = $7EC168 UNUSED_7EC169 = $7EC169 ; More caching EN_SCRMODYAL = $7EC16A EN_SCRMODYAH = $7EC16B EN_SCRMODYBL = $7EC16C EN_SCRMODYBH = $7EC16D EN_SCRMODXAL = $7EC16E EN_SCRMODXAH = $7EC16F EN_SCRMODXBL = $7EC170 EN_SCRMODXBH = $7EC171 ; Peg colors ; Also used with tilemap calculations on overworld PEGCOLOR = $7EC172 OWCALC84L = $7EC172 OWCALC84H = $7EC173 OWCALC86L = $7EC174 OWCALC86H = $7EC175 OWCALC88L = $7EC176 OWCALC88H = $7EC177 ; FREE RAM: 0x08 UNUSED_7EC178 = $7EC178 UNUSED_7EC179 = $7EC179 UNUSED_7EC17A = $7EC17A UNUSED_7EC17B = $7EC17B UNUSED_7EC17C = $7EC17C UNUSED_7EC17D = $7EC17D UNUSED_7EC17E = $7EC17E UNUSED_7EC17F = $7EC17F ; Cache for various properties CC_BG2HORZL = $7EC180 CC_BG2HORZH = $7EC181 CC_BG2VERTL = $7EC182 CC_BG2VERTH = $7EC183 CC_POSYL = $7EC184 CC_POSYH = $7EC185 CC_POSXL = $7EC186 CC_POSXH = $7EC187 CC_SCROLLANL = $7EC188 CC_SCROLLANH = $7EC189 CC_SCROLLASL = $7EC18A CC_SCROLLASH = $7EC18B CC_SCROLLAWL = $7EC18C CC_SCROLLAWH = $7EC18D CC_SCROLLAEL = $7EC18E CC_SCROLLAEH = $7EC18F CC_OWTARGNL = $7EC190 CC_OWTARGNH = $7EC191 CC_OWTARGSL = $7EC192 CC_OWTARGSH = $7EC193 CC_OWTARGWL = $7EC194 CC_OWTARGWH = $7EC195 CC_OWTARGEL = $7EC196 CC_OWTARGEH = $7EC197 CC_SCROLLATNL = $7EC198 CC_SCROLLATNH = $7EC199 CC_SCROLLATWL = $7EC19A CC_SCROLLATWH = $7EC19B CC_QUADH = $7EC19C CC_QUADV = $7EC19D CC_QUADLR = $7EC19E CC_QUADTB = $7EC19F ; FREE RAM: 0x06 UNUSED_7EC1A0 = $7EC1A0 UNUSED_7EC1A1 = $7EC1A1 UNUSED_7EC1A2 = $7EC1A2 UNUSED_7EC1A3 = $7EC1A3 UNUSED_7EC1A4 = $7EC1A4 UNUSED_7EC1A5 = $7EC1A5 ; More caching CC_DIR = $7EC1A6 CC_LAYER = $7EC1A7 CC_DLAYER = $7EC1A8 CC_DOORWAY = $7EC1A9 CC_DNGFLOOR = $7EC1AA ; FREE RAM: 0x55 UNUSED_7EC1AB = $7EC1AB ; --------------------------------------------------------- ; Overworld map caching OMC_BG1HORZL = $7EC200 OMC_BG1HORZH = $7EC201 OMC_BG2HORZL = $7EC202 OMC_BG2HORZH = $7EC203 OMC_BG1VERTL = $7EC204 OMC_BG1VERTH = $7EC205 OMC_BG2VERTL = $7EC206 OMC_BG2VERTH = $7EC207 ; Copies BGACT but never used CACHE_BGACT = $7EC208 ; FREE RAM: 0x01 UNUSED_7EC209 = $7EC209 ; TODO update with names ; Caches variables, but never used CACHE_AB6 = $7EC20A CACHE_AB8 = $7EC20B CACHE_AB7 = $7EC20C ; FREE RAM: 0x01 UNUSED_7EC20D = $7EC20D ; Underworld map caching UMC_BGSET1 = $7EC20E UMC_SPRSET1 = $7EC20F UMC_BGSET2 = $7EC210 ; Caches $1C and $1D, for TM and TS TMCACHE = $7EC211 TSCACHE = $7EC212 ; OW caching OWC_OWSCRL = $7EC213 OWC_OWSCRH = $7EC214 OWC_OWTMAPIL = $7EC215 OWC_OWTMAPIH = $7EC216 OWC_OWMAPDIYL = $7EC217 OWC_OWMAPDIYH = $7EC218 OWC_OWMAPDIXL = $7EC219 OWC_OWMAPDIXH = $7EC21A OWC_TRANDIRL = $7EC21B OWC_TRANDIRH = $7EC21C OWC_OWTDIRL = $7EC21D OWC_OWTDIRH = $7EC21E OWC_MAPPANVCTL = $7EC21F OWC_MAPPANVCTH = $7EC220 ; Game over caching GOC_FADETIMEL = $7EC221 GOC_FADETIMEH = $7EC222 GOC_RMFADEDIRL = $7EC223 GOC_RMFADEDIRH = $7EC224 GOC_CGWSELQ = $7EC225 GOC_CGADSUBQ = $7EC226 GOC_SONG = $7EC227 GOC_SFX1 = $7EC228 ; Cache for HDMA enable for various things CACHE_HDMAENQ = $7EC229 ; BIG FREE RAM: 0xCE UNUSED_7EC22A = $7EC22A ; Lists the currently loaded sheets to check against for decompression. LASTBGSET0 = $7EC2F8 LASTBGSET1 = $7EC2F9 LASTBGSET2 = $7EC2FA LASTBGSET3 = $7EC2FB LASTSPRSET0 = $7EC2FC LASTSPRSET1 = $7EC2FD LASTSPRSET2 = $7EC2FE LASTSPRSET3 = $7EC2FF ; ========================================================= ; Palette buffer 2 ; ========================================================= ; HUD palettes PALB_HUD0 = $7EC300 PALB_HUD1 = $7EC308 PALB_HUD2 = $7EC310 PALB_HUD3 = $7EC318 PALB_HUD4 = $7EC320 PALB_HUD5 = $7EC328 PALB_HUD6 = $7EC330 PALB_HUD7 = $7EC338 ; Background palettes PALB_BG2A = $7EC340 PALB_BG2B = $7EC350 PALB_BG3A = $7EC360 PALB_BG3B = $7EC370 PALB_BG4A = $7EC380 PALB_BG4B = $7EC390 PALB_BG5A = $7EC3A0 PALB_BG5B = $7EC3B0 PALB_BG6A = $7EC3C0 PALB_BG6B = $7EC3D0 PALB_BG7A = $7EC3E0 PALB_BG7B = $7EC3F0 ; Sprite palettes PALB_SPRA = $7EC400 PALB_SPRB = $7EC410 PALB_SPR1A = $7EC420 PALB_SPR1B = $7EC430 PALB_SPR2A = $7EC440 PALB_SPR2B = $7EC450 PALB_SPR3A = $7EC460 PALB_SPR3B = $7EC470 PALB_SPR4A = $7EC480 PALB_SPR4B = $7EC490 PALB_SPR5A = $7EC4A0 PALB_SPR5B = $7EC4B0 PALB_SPR6A = $7EC4C0 PALB_SPR6B = $7EC4D0 PALB_SPR7A = $7EC4E0 PALB_SPR7B = $7EC4F0 ; ========================================================= ; Main palette block written to CGRAM ; ========================================================= ; HUD palettes PAL_HUD0 = $7EC500 PAL_HUD1 = $7EC508 PAL_HUD2 = $7EC510 PAL_HUD3 = $7EC518 PAL_HUD4 = $7EC520 PAL_HUD5 = $7EC528 PAL_HUD6 = $7EC530 PAL_HUD7 = $7EC538 ; Background palettes PAL_BG2A = $7EC540 PAL_BG2B = $7EC550 PAL_BG3A = $7EC560 PAL_BG3B = $7EC570 PAL_BG4A = $7EC580 PAL_BG4B = $7EC590 PAL_BG5A = $7EC5A0 PAL_BG5B = $7EC5B0 PAL_BG6A = $7EC5C0 PAL_BG6B = $7EC5D0 PAL_BG7A = $7EC5E0 PAL_BG7B = $7EC5F0 ; Sprite palettes PAL_SPRA = $7EC600 PAL_SPRB = $7EC610 PAL_SPR1A = $7EC620 PAL_SPR1B = $7EC630 PAL_SPR2A = $7EC640 PAL_SPR2B = $7EC650 PAL_SPR3A = $7EC660 PAL_SPR3B = $7EC670 PAL_SPR4A = $7EC680 PAL_SPR4B = $7EC690 PAL_SPR5A = $7EC6A0 PAL_SPR5B = $7EC6B0 PAL_SPR6A = $7EC6C0 PAL_SPR6B = $7EC6D0 PAL_SPR7A = $7EC6E0 PAL_SPR7B = $7EC6F0 ; --------------------------------------------------------- ; TODO MORE ; Tilemap buffer for the HUD HUD = $7EC700 ; --------------------------------------------------------- ; FREE RAM: 0x36 UNUSED_7EC84A = $7EC84A ; Tilemap buffer for moving wall animation. WALLDRAW = $7EC880 ; BIG FREE RAM: 0x1F00 UNUSED_7EC900 = $7EC900 ; --------------------------------------------------------- ; TODO POLYDRAW = $7EE800 ; --------------------------------------------------------- ; SRAM mirror for current file ; see symbols_sram.asm WRAMSAVE = $7EF000 ; --------------------------------------------------------- ; FREE RAM: 0x80 UNUSED_7EF500 = $7EF500 ; Tracks lifted pot secrets POTLIFT = $7EF580 ; --------------------------------------------------------- ; Caches the tilemap location of changed map16 tiles on the overworld M16CHTMAPX = $7EF800 ; Locations of push blocks in underworld PUSHBLOCKS = $7EF940 ; Caches the tile of changed map16 tiles on the overworld M16CHTILES = $7EFA00 ; Locations of torches in underworld TORCHES = $7EFB40 ; Caches sheets SHEETLISTA = $7EFCC0 SHEETLISTB = $7EFD40 ; --------------------------------------------------------- ; FREE RAM: 0x40 UNUSED_7EFDC0 = $7EFDC0 ; --------------------------------------------------------- ; Table of tile properties for interaction TILEATTR = $7EFE00 ; ========================================================= ; --------------------------------------------------------- ; Bank 7F ; --------------------------------------------------------- ; ========================================================= ; Decompression buffer DECOMPA = $7F0000 ; --------------------------------------------------------- ; In the underworld, these arrays contain tile the tile's collision type for each layer. ; Layer 1 (COLMAPA) ; Layer 2 (COLMAPB) ; 1 byte per tile. See «values.asm» for TILETYPE definitions ; ; In the overworld, this block is used as a buffer for decompiled map16 data before its ; transfered stripe-by-stripe into the tilemaps for both BG1 and BG2. COLMAPA = $7F2000 COLMAPB = $7F3000 ; --------------------------------------------------------- ; Decompression buffer DECOMPB = $7F4000 ; BIG FREE RAM: 0x0800 UNUSED_7F5000 = $7F5000 ; --------------------------------------------------------- ; Used by medallions, sword beams, gt crystals, and rupee pond rupees ; Not worth documenting them all right now ANC_7F5800 = $7F5800 ANC_7F5801 = $7F5801 ANC_7F5802 = $7F5802 ANC_7F5803 = $7F5803 ANC_7F5804 = $7F5804 ANC_7F5805 = $7F5805 ANC_7F5806 = $7F5806 ANC_7F5807 = $7F5807 ANC_7F5808 = $7F5808 ANC_7F5809 = $7F5809 ANC_7F580A = $7F580A ANC_7F580B = $7F580B ANC_7F580C = $7F580C ANC_7F580D = $7F580D ANC_7F580E = $7F580E ANC_7F580F = $7F580F ANC_7F5810 = $7F5810 ANC_7F5811 = $7F5811 ANC_7F5812 = $7F5812 ANC_7F5813 = $7F5813 ANC_7F5814 = $7F5814 ANC_7F5815 = $7F5815 ANC_7F5816 = $7F5816 ANC_7F5817 = $7F5817 ANC_7F5818 = $7F5818 ANC_7F5819 = $7F5819 ANC_7F581E = $7F581E ANC_7F581F = $7F581F ANC_7F5820 = $7F5820 ANC_7F5824 = $7F5824 ANC_7F5826 = $7F5826 ANC_7F5827 = $7F5827 ANC_7F582E = $7F582E ANC_7F582F = $7F582F ANC_7F5830 = $7F5830 ANC_7F5836 = $7F5836 ANC_7F5837 = $7F5837 ANC_7F583C = $7F583C ANC_7F5848 = $7F5848 ANC_7F584F = $7F584F ANC_7F5854 = $7F5854 ANC_7F5860 = $7F5860 ANC_7F5864 = $7F5864 ANC_7F5867 = $7F5867 ANC_7F586C = $7F586C ANC_7F5878 = $7F5878 ANC_7F5879 = $7F5879 ANC_7F587A = $7F587A ANC_7F587F = $7F587F ANC_7F5886 = $7F5886 ANC_7F5892 = $7F5892 ANC_7F5897 = $7F5897 ANC_7F589E = $7F589E ANC_7F58A4 = $7F58A4 ANC_7F58AA = $7F58AA ANC_7F58AF = $7F58AF ANC_7F58B6 = $7F58B6 ANC_7F58B8 = $7F58B8 ANC_7F58E4 = $7F58E4 ; --------------------------------------------------------- ; TODO at least this much ; FREE RAM: 0x024 UNUSED_7F5900 = $7F5900 ; TODO BOMBOS_7F5924 = $7F5924 BOMBOS_7F5925 = $7F5925 ; FREE RAM: 0x06 UNUSED_7F5926 = $7F5926 ; TODO BOMBOS_7F592C = $7F592C BOMBOS_7F592D = $7F592D ; FREE RAM: 0x06 UNUSED_7F592E = $7F592E ; TODO BOMBOS_7F5934 = $7F5934 BOMBOS_7F5935 = $7F5935 BOMBOS_7F5945 = $7F5945 BOMBOS_7F5955 = $7F5955 ; BIG FREE RAM: 0x60 UNUSED_7F5975 = $7F5975 ; TODO BOMBOS_7F59D5 = $7F59D5 ; BIG FREE RAM: 0x60 UNUSED_7F59F5 = $7F59F5 ; TODO BOMBOS_7F5A55 = $7F5A55 BOMBOS_7F5A56 = $7F5A56 BOMBOS_7F5A57 = $7F5A57 ; BIG FREE RAM: 0xA8 UNUSED_7F5A58 = $7F5A58 ; --------------------------------------------------------- ; Used when decompressing text characters TEXTDECOMP = $7F5B00 ; --------------------------------------------------------- ; BIG FREE RAM: 0xFE UNUSED_7F5F02 = $7F5F02 ; --------------------------------------------------------- ; Damage class to subclass for every enemy ; 16 bytes per enemy, including garbage from garbage data for invalid sprites ; See «resources/damagetable.asm» for decompressed and decompiled data DMGTABLE = $7F6000 ; --------------------------------------------------------- ; Used as a buffer for writing to IRIS IRISBUFFER = $7F7000 ; --------------------------------------------------------- ; Text pointers in bank 1C, built procedurally. ; Expected vanilla values for JP1.0 listed as comment. MSG0000 = $7F71C0 ; $8000 MSG0001 = $7F71C2 ; $8001 MSG0002 = $7F71C4 ; $800E MSG0003 = $7F71C6 ; $801B MSG0004 = $7F71C8 ; $803C MSG0005 = $7F71CA ; $805C MSG0006 = $7F71CC ; $806D MSG0007 = $7F71CE ; $8078 MSG0008 = $7F71D0 ; $8083 MSG0009 = $7F71D2 ; $808E MSG000A = $7F71D4 ; $8097 MSG000B = $7F71D6 ; $80A0 MSG000C = $7F71D8 ; $80DF MSG000D = $7F71DA ; $818F MSG000E = $7F71DC ; $81B7 MSG000F = $7F71DE ; $81E4 MSG0010 = $7F71E0 ; $8211 MSG0011 = $7F71E2 ; $823E MSG0012 = $7F71E4 ; $826A MSG0013 = $7F71E6 ; $8297 MSG0014 = $7F71E8 ; $82C0 MSG0015 = $7F71EA ; $82E9 MSG0016 = $7F71EC ; $8313 MSG0017 = $7F71EE ; $8457 MSG0018 = $7F71F0 ; $848D MSG0019 = $7F71F2 ; $84B6 MSG001A = $7F71F4 ; $853E MSG001B = $7F71F6 ; $855F MSG001C = $7F71F8 ; $8648 MSG001D = $7F71FA ; $866E MSG001E = $7F71FC ; $8728 MSG001F = $7F71FE ; $8775 MSG0020 = $7F7200 ; $87B0 MSG0021 = $7F7202 ; $8809 MSG0022 = $7F7204 ; $8837 MSG0023 = $7F7206 ; $8892 MSG0024 = $7F7208 ; $8929 MSG0025 = $7F720A ; $895E MSG0026 = $7F720C ; $89BC MSG0027 = $7F720E ; $89EA MSG0028 = $7F7210 ; $8A18 MSG0029 = $7F7212 ; $8A3F MSG002A = $7F7214 ; $8AAF MSG002B = $7F7216 ; $8B89 MSG002C = $7F7218 ; $8BE5 MSG002D = $7F721A ; $8C0E MSG002E = $7F721C ; $8C2C MSG002F = $7F721E ; $8C8B MSG0030 = $7F7220 ; $8CB0 MSG0031 = $7F7222 ; $8D86 MSG0032 = $7F7224 ; $8DF0 MSG0033 = $7F7226 ; $8E27 MSG0034 = $7F7228 ; $8F97 MSG0035 = $7F722A ; $9003 MSG0036 = $7F722C ; $9039 MSG0037 = $7F722E ; $916B MSG0038 = $7F7230 ; $935A MSG0039 = $7F7232 ; $9389 MSG003A = $7F7234 ; $93B9 MSG003B = $7F7236 ; $93D8 MSG003C = $7F7238 ; $93E7 MSG003D = $7F723A ; $93FA MSG003E = $7F723C ; $9415 MSG003F = $7F723E ; $942E MSG0040 = $7F7240 ; $944B MSG0041 = $7F7242 ; $945C MSG0042 = $7F7244 ; $947A MSG0043 = $7F7246 ; $9495 MSG0044 = $7F7248 ; $94B4 MSG0045 = $7F724A ; $94BF MSG0046 = $7F724C ; $94EE MSG0047 = $7F724E ; $94FE MSG0048 = $7F7250 ; $950F MSG0049 = $7F7252 ; $9533 MSG004A = $7F7254 ; $955E MSG004B = $7F7256 ; $958C MSG004C = $7F7258 ; $95B7 MSG004D = $7F725A ; $9616 MSG004E = $7F725C ; $9631 MSG004F = $7F725E ; $9650 MSG0050 = $7F7260 ; $9673 MSG0051 = $7F7262 ; $9693 MSG0052 = $7F7264 ; $96B8 MSG0053 = $7F7266 ; $96DE MSG0054 = $7F7268 ; $970C MSG0055 = $7F726A ; $9731 MSG0056 = $7F726C ; $975B MSG0057 = $7F726E ; $9787 MSG0058 = $7F7270 ; $97BF MSG0059 = $7F7272 ; $97F3 MSG005A = $7F7274 ; $982A MSG005B = $7F7276 ; $9857 MSG005C = $7F7278 ; $9886 MSG005D = $7F727A ; $98BB MSG005E = $7F727C ; $98DD MSG005F = $7F727E ; $990C MSG0060 = $7F7280 ; $9940 MSG0061 = $7F7282 ; $9972 MSG0062 = $7F7284 ; $99AB MSG0063 = $7F7286 ; $99E2 MSG0064 = $7F7288 ; $9A18 MSG0065 = $7F728A ; $9A48 MSG0066 = $7F728C ; $9A72 MSG0067 = $7F728E ; $9A9E MSG0068 = $7F7290 ; $9ACD MSG0069 = $7F7292 ; $9AFA MSG006A = $7F7294 ; $9B27 MSG006B = $7F7296 ; $9B59 MSG006C = $7F7298 ; $9B85 MSG006D = $7F729A ; $9BB6 MSG006E = $7F729C ; $9BDA MSG006F = $7F729E ; $9C81 MSG0070 = $7F72A0 ; $9CAA MSG0071 = $7F72A2 ; $9CD7 MSG0072 = $7F72A4 ; $9D05 MSG0073 = $7F72A6 ; $9D39 MSG0074 = $7F72A8 ; $9D61 MSG0075 = $7F72AA ; $9D8D MSG0076 = $7F72AC ; $9DB5 MSG0077 = $7F72AE ; $9DE5 MSG0078 = $7F72B0 ; $9E13 MSG0079 = $7F72B2 ; $9E38 MSG007A = $7F72B4 ; $9E60 MSG007B = $7F72B6 ; $9E97 MSG007C = $7F72B8 ; $9EF1 MSG007D = $7F72BA ; $9F47 MSG007E = $7F72BC ; $9FAF MSG007F = $7F72BE ; $A018 MSG0080 = $7F72C0 ; $A054 MSG0081 = $7F72C2 ; $A066 MSG0082 = $7F72C4 ; $A09B MSG0083 = $7F72C6 ; $A0D1 MSG0084 = $7F72C8 ; $A123 MSG0085 = $7F72CA ; $A138 MSG0086 = $7F72CC ; $A161 MSG0087 = $7F72CE ; $A185 MSG0088 = $7F72D0 ; $A1CA MSG0089 = $7F72D2 ; $A1E5 MSG008A = $7F72D4 ; $A207 MSG008B = $7F72D6 ; $A237 MSG008C = $7F72D8 ; $A261 MSG008D = $7F72DA ; $A27B MSG008E = $7F72DC ; $A2A5 MSG008F = $7F72DE ; $A2C6 MSG0090 = $7F72E0 ; $A2E1 MSG0091 = $7F72E2 ; $A302 MSG0092 = $7F72E4 ; $A322 MSG0093 = $7F72E6 ; $A352 MSG0094 = $7F72E8 ; $A382 MSG0095 = $7F72EA ; $A3B2 MSG0096 = $7F72EC ; $A3E1 MSG0097 = $7F72EE ; $A454 MSG0098 = $7F72F0 ; $A508 MSG0099 = $7F72F2 ; $A524 MSG009A = $7F72F4 ; $A5B8 MSG009B = $7F72F6 ; $A5E9 MSG009C = $7F72F8 ; $A680 MSG009D = $7F72FA ; $A70E MSG009E = $7F72FC ; $A7A3 MSG009F = $7F72FE ; $A81B MSG00A0 = $7F7300 ; $A876 MSG00A1 = $7F7302 ; $A96D MSG00A2 = $7F7304 ; $A9F2 MSG00A3 = $7F7306 ; $AA0F MSG00A4 = $7F7308 ; $AA3E MSG00A5 = $7F730A ; $AAD3 MSG00A6 = $7F730C ; $AAFE MSG00A7 = $7F730E ; $AB19 MSG00A8 = $7F7310 ; $AB34 MSG00A9 = $7F7312 ; $AB52 MSG00AA = $7F7314 ; $AB61 MSG00AB = $7F7316 ; $AB71 MSG00AC = $7F7318 ; $AB80 MSG00AD = $7F731A ; $ABB0 MSG00AE = $7F731C ; $ABCB MSG00AF = $7F731E ; $ABDB MSG00B0 = $7F7320 ; $ABED MSG00B1 = $7F7322 ; $AC1D MSG00B2 = $7F7324 ; $AC41 MSG00B3 = $7F7326 ; $ACA1 MSG00B4 = $7F7328 ; $AD23 MSG00B5 = $7F732A ; $AD47 MSG00B6 = $7F732C ; $ADA6 MSG00B7 = $7F732E ; $AE01 MSG00B8 = $7F7330 ; $AE61 MSG00B9 = $7F7332 ; $AE95 MSG00BA = $7F7334 ; $AEC2 MSG00BB = $7F7336 ; $AEE4 MSG00BC = $7F7338 ; $AF13 MSG00BD = $7F733A ; $AF41 MSG00BE = $7F733C ; $AF9F MSG00BF = $7F733E ; $AFD3 MSG00C0 = $7F7340 ; $B019 MSG00C1 = $7F7342 ; $B068 MSG00C2 = $7F7344 ; $B099 MSG00C3 = $7F7346 ; $B0C2 MSG00C4 = $7F7348 ; $B0F4 MSG00C5 = $7F734A ; $B154 MSG00C6 = $7F734C ; $B176 MSG00C7 = $7F734E ; $B1A3 MSG00C8 = $7F7350 ; $B1CD MSG00C9 = $7F7352 ; $B1ED MSG00CA = $7F7354 ; $B212 MSG00CB = $7F7356 ; $B23E MSG00CC = $7F7358 ; $B261 MSG00CD = $7F735A ; $B280 MSG00CE = $7F735C ; $B29A MSG00CF = $7F735E ; $B2C6 MSG00D0 = $7F7360 ; $B30C MSG00D1 = $7F7362 ; $B330 MSG00D2 = $7F7364 ; $B352 MSG00D3 = $7F7366 ; $B373 MSG00D4 = $7F7368 ; $B397 MSG00D5 = $7F736A ; $B3BE MSG00D6 = $7F736C ; $B3E6 MSG00D7 = $7F736E ; $B425 MSG00D8 = $7F7370 ; $B44F MSG00D9 = $7F7372 ; $B473 MSG00DA = $7F7374 ; $B491 MSG00DB = $7F7376 ; $B4B4 MSG00DC = $7F7378 ; $B4D1 MSG00DD = $7F737A ; $B4ED MSG00DE = $7F737C ; $B51A MSG00DF = $7F737E ; $B56F MSG00E0 = $7F7380 ; $B5EF MSG00E1 = $7F7382 ; $B60D MSG00E2 = $7F7384 ; $B622 MSG00E3 = $7F7386 ; $B64B MSG00E4 = $7F7388 ; $B6F9 MSG00E5 = $7F738A ; $B71B MSG00E6 = $7F738C ; $B738 MSG00E7 = $7F738E ; $B75A MSG00E8 = $7F7390 ; $B801 MSG00E9 = $7F7392 ; $B82A MSG00EA = $7F7394 ; $B85F MSG00EB = $7F7396 ; $B889 MSG00EC = $7F7398 ; $B8BB MSG00ED = $7F739A ; $B8EC MSG00EE = $7F739C ; $B91E MSG00EF = $7F739E ; $B951 MSG00F0 = $7F73A0 ; $B97F MSG00F1 = $7F73A2 ; $B9AD MSG00F2 = $7F73A4 ; $BA04 MSG00F3 = $7F73A6 ; $BA38 MSG00F4 = $7F73A8 ; $BA58 MSG00F5 = $7F73AA ; $BA81 MSG00F6 = $7F73AC ; $BAB8 MSG00F7 = $7F73AE ; $BAE5 MSG00F8 = $7F73B0 ; $BB14 MSG00F9 = $7F73B2 ; $BB41 MSG00FA = $7F73B4 ; $BB6D MSG00FB = $7F73B6 ; $BB9E MSG00FC = $7F73B8 ; $BBD0 MSG00FD = $7F73BA ; $BC17 MSG00FE = $7F73BC ; $BC8D MSG00FF = $7F73BE ; $BCB6 MSG0100 = $7F73C0 ; $BD53 MSG0101 = $7F73C2 ; $BDC6 MSG0102 = $7F73C4 ; $BE1D MSG0103 = $7F73C6 ; $BE4C MSG0104 = $7F73C8 ; $BED4 MSG0105 = $7F73CA ; $BEF4 MSG0106 = $7F73CC ; $BEFF MSG0107 = $7F73CE ; $BF0A MSG0108 = $7F73D0 ; $BF73 MSG0109 = $7F73D2 ; $BF8F MSG010A = $7F73D4 ; $BFA2 MSG010B = $7F73D6 ; $BFCF MSG010C = $7F73D8 ; $BFF2 MSG010D = $7F73DA ; $C015 MSG010E = $7F73DC ; $C038 MSG010F = $7F73DE ; $C08D MSG0110 = $7F73E0 ; $C0DD MSG0111 = $7F73E2 ; $C2AB MSG0112 = $7F73E4 ; $C2EB MSG0113 = $7F73E6 ; $C32C MSG0114 = $7F73E8 ; $C36A MSG0115 = $7F73EA ; $C38F MSG0116 = $7F73EC ; $C3BD MSG0117 = $7F73EE ; $C3EA MSG0118 = $7F73F0 ; $C404 MSG0119 = $7F73F2 ; $C42F MSG011A = $7F73F4 ; $C47F MSG011B = $7F73F6 ; $C49F MSG011C = $7F73F8 ; $C4CC MSG011D = $7F73FA ; $C51A MSG011E = $7F73FC ; $C545 MSG011F = $7F73FE ; $C56B MSG0120 = $7F7400 ; $C588 MSG0121 = $7F7402 ; $C5B4 MSG0122 = $7F7404 ; $C5C7 MSG0123 = $7F7406 ; $C5E2 MSG0124 = $7F7408 ; $C6F2 MSG0125 = $7F740A ; $C750 MSG0126 = $7F740C ; $C77D MSG0127 = $7F740E ; $C7B0 MSG0128 = $7F7410 ; $C7DA MSG0129 = $7F7412 ; $C807 MSG012A = $7F7414 ; $C820 MSG012B = $7F7416 ; $C84B MSG012C = $7F7418 ; $C875 MSG012D = $7F741A ; $C8A4 MSG012E = $7F741C ; $C8CF MSG012F = $7F741E ; $C8F1 MSG0130 = $7F7420 ; $C91C MSG0131 = $7F7422 ; $CC51 MSG0132 = $7F7424 ; $CF83 MSG0133 = $7F7426 ; $D1D9 MSG0134 = $7F7428 ; $D3C4 MSG0135 = $7F742A ; $D643 MSG0136 = $7F742C ; $D85D MSG0137 = $7F742E ; $DAB2 MSG0138 = $7F7430 ; $DADC MSG0139 = $7F7432 ; $DB05 MSG013A = $7F7434 ; $DB27 MSG013B = $7F7436 ; $DDD0 MSG013C = $7F7438 ; $DE21 MSG013D = $7F743A ; $DEB5 MSG013E = $7F743C ; $DEE2 MSG013F = $7F743E ; $DF14 MSG0140 = $7F7440 ; $DF72 MSG0141 = $7F7442 ; $DF9D MSG0142 = $7F7444 ; $DFE8 MSG0143 = $7F7446 ; $E06D MSG0144 = $7F7448 ; $E096 MSG0145 = $7F744A ; $E0C3 MSG0146 = $7F744C ; $E126 MSG0147 = $7F744E ; $E158 MSG0148 = $7F7450 ; $E2C3 MSG0149 = $7F7452 ; $E305 MSG014A = $7F7454 ; $E30C MSG014B = $7F7456 ; $E313 MSG014C = $7F7458 ; $E33A MSG014D = $7F745A ; $E367 MSG014E = $7F745C ; $E3F5 MSG014F = $7F745E ; $E404 MSG0150 = $7F7460 ; $E413 MSG0151 = $7F7462 ; $E422 MSG0152 = $7F7464 ; $E432 MSG0153 = $7F7466 ; $E446 MSG0154 = $7F7468 ; $E45E MSG0155 = $7F746A ; $E476 MSG0156 = $7F746C ; $E48E MSG0157 = $7F746E ; $E4B5 MSG0158 = $7F7470 ; $E4DC MSG0159 = $7F7472 ; $E4FA MSG015A = $7F7474 ; $E5DC MSG015B = $7F7476 ; $E608 MSG015C = $7F7478 ; $E6BD MSG015D = $7F747A ; $E6ED MSG015E = $7F747C ; $E71F MSG015F = $7F747E ; $E76E MSG0160 = $7F7480 ; $E792 MSG0161 = $7F7482 ; $E7B9 MSG0162 = $7F7484 ; $E7DE MSG0163 = $7F7486 ; $E7F5 MSG0164 = $7F7488 ; $E81F MSG0165 = $7F748A ; $E848 MSG0166 = $7F748C ; $E868 MSG0167 = $7F748E ; $E891 MSG0168 = $7F7490 ; $E8B5 MSG0169 = $7F7492 ; $E8D7 MSG016A = $7F7494 ; $E901 MSG016B = $7F7496 ; $E91B MSG016C = $7F7498 ; $E948 MSG016D = $7F749A ; $E970 MSG016E = $7F749C ; $E9F8 MSG016F = $7F749E ; $EA25 MSG0170 = $7F74A0 ; $EA8C MSG0171 = $7F74A2 ; $EAEA MSG0172 = $7F74A4 ; $EE1A MSG0173 = $7F74A6 ; $EE29 MSG0174 = $7F74A8 ; $EE7A MSG0175 = $7F74AA ; $EE88 MSG0176 = $7F74AC ; $EEB3 MSG0177 = $7F74AE ; $EEDA MSG0178 = $7F74B0 ; $EF09 MSG0179 = $7F74B2 ; $EF25 MSG017A = $7F74B4 ; $EF45 MSG017B = $7F74B6 ; $EF62 MSG017C = $7F74B8 ; $EFEA MSG017D = $7F74BA ; $F039 MSG017E = $7F74BC ; $F050 MSG017F = $7F74BE ; $F072 MSG0180 = $7F74C0 ; $F0C1 MSG0181 = $7F74C2 ; $F157 MSG0182 = $7F74C4 ; $F1E4 MSG0183 = $7F74C6 ; $F204 MSG0184 = $7F74C8 ; $F233 MSG0185 = $7F74CA ; $F24E MSG0186 = $7F74CC ; $F29E MSG0187 = $7F74CE ; $F2C8 MSG0188 = $7F74D0 ; $F2EC MSG0189 = $7F74D2 ; $F310 MSG018A = $7F74D4 ; $F325 MSG018B = $7F74D6 ; $F356 ; --------------------------------------------------------- ; MASSIVE FREE RAM: 0x68A8 UNUSED_7F74D8 = $7F74D8 ; --------------------------------------------------------- ; TODO PALSAVE = $7FDD80 AUXPALSAVE = $7FDE00 ; Underworld: ; Flags sprite deaths in underworld based on slot. ; Indexed by 2 * room ID. ; Overworld: ; Holds ID+1 of sprite with each position being assigned a unique byte ; 0x00 indicates no sprite in this slot UWDEATH = $7FDF80 ; Flags overworld sprite deaths/enemies already spawned OWDEATH = $7FEF80 ; --------------------------------------------------------- ; BIG FREE RAM: 0x680 UNUSED_7FF180 = $7FF180 ; --------------------------------------------------------- ; Garnish IDs GRN00_ID = $7FF800 GRN01_ID = $7FF801 GRN02_ID = $7FF802 GRN03_ID = $7FF803 GRN04_ID = $7FF804 GRN05_ID = $7FF805 GRN06_ID = $7FF806 GRN07_ID = $7FF807 GRN08_ID = $7FF808 GRN09_ID = $7FF809 GRN0A_ID = $7FF80A GRN0B_ID = $7FF80B GRN0C_ID = $7FF80C GRN0D_ID = $7FF80D GRN0E_ID = $7FF80E GRN0F_ID = $7FF80F GRN10_ID = $7FF810 GRN11_ID = $7FF811 GRN12_ID = $7FF812 GRN13_ID = $7FF813 GRN14_ID = $7FF814 GRN15_ID = $7FF815 GRN16_ID = $7FF816 GRN17_ID = $7FF817 GRN18_ID = $7FF818 GRN19_ID = $7FF819 GRN1A_ID = $7FF81A GRN1B_ID = $7FF81B GRN1C_ID = $7FF81C GRN1D_ID = $7FF81D ; Garnish positions ; y low GRN00_YL = $7FF81E GRN01_YL = $7FF81F GRN02_YL = $7FF820 GRN03_YL = $7FF821 GRN04_YL = $7FF822 GRN05_YL = $7FF823 GRN06_YL = $7FF824 GRN07_YL = $7FF825 GRN08_YL = $7FF826 GRN09_YL = $7FF827 GRN0A_YL = $7FF828 GRN0B_YL = $7FF829 GRN0C_YL = $7FF82A GRN0D_YL = $7FF82B GRN0E_YL = $7FF82C GRN0F_YL = $7FF82D GRN10_YL = $7FF82E GRN11_YL = $7FF82F GRN12_YL = $7FF830 GRN13_YL = $7FF831 GRN14_YL = $7FF832 GRN15_YL = $7FF833 GRN16_YL = $7FF834 GRN17_YL = $7FF835 GRN18_YL = $7FF836 GRN19_YL = $7FF837 GRN1A_YL = $7FF838 GRN1B_YL = $7FF839 GRN1C_YL = $7FF83A GRN1D_YL = $7FF83B ; x low GRN00_XL = $7FF83C GRN01_XL = $7FF83D GRN02_XL = $7FF83E GRN03_XL = $7FF83F GRN04_XL = $7FF840 GRN05_XL = $7FF841 GRN06_XL = $7FF842 GRN07_XL = $7FF843 GRN08_XL = $7FF844 GRN09_XL = $7FF845 GRN0A_XL = $7FF846 GRN0B_XL = $7FF847 GRN0C_XL = $7FF848 GRN0D_XL = $7FF849 GRN0E_XL = $7FF84A GRN0F_XL = $7FF84B GRN10_XL = $7FF84C GRN11_XL = $7FF84D GRN12_XL = $7FF84E GRN13_XL = $7FF84F GRN14_XL = $7FF850 GRN15_XL = $7FF851 GRN16_XL = $7FF852 GRN17_XL = $7FF853 GRN18_XL = $7FF854 GRN19_XL = $7FF855 GRN1A_XL = $7FF856 GRN1B_XL = $7FF857 GRN1C_XL = $7FF858 GRN1D_XL = $7FF859 ; y high GRN00_YH = $7FF85A GRN01_YH = $7FF85B GRN02_YH = $7FF85C GRN03_YH = $7FF85D GRN04_YH = $7FF85E GRN05_YH = $7FF85F GRN06_YH = $7FF860 GRN07_YH = $7FF861 GRN08_YH = $7FF862 GRN09_YH = $7FF863 GRN0A_YH = $7FF864 GRN0B_YH = $7FF865 GRN0C_YH = $7FF866 GRN0D_YH = $7FF867 GRN0E_YH = $7FF868 GRN0F_YH = $7FF869 GRN10_YH = $7FF86A GRN11_YH = $7FF86B GRN12_YH = $7FF86C GRN13_YH = $7FF86D GRN14_YH = $7FF86E GRN15_YH = $7FF86F GRN16_YH = $7FF870 GRN17_YH = $7FF871 GRN18_YH = $7FF872 GRN19_YH = $7FF873 GRN1A_YH = $7FF874 GRN1B_YH = $7FF875 GRN1C_YH = $7FF876 GRN1D_YH = $7FF877 ; x high GRN00_XH = $7FF878 GRN01_XH = $7FF879 GRN02_XH = $7FF87A GRN03_XH = $7FF87B GRN04_XH = $7FF87C GRN05_XH = $7FF87D GRN06_XH = $7FF87E GRN07_XH = $7FF87F GRN08_XH = $7FF880 GRN09_XH = $7FF881 GRN0A_XH = $7FF882 GRN0B_XH = $7FF883 GRN0C_XH = $7FF884 GRN0D_XH = $7FF885 GRN0E_XH = $7FF886 GRN0F_XH = $7FF887 GRN10_XH = $7FF888 GRN11_XH = $7FF889 GRN12_XH = $7FF88A GRN13_XH = $7FF88B GRN14_XH = $7FF88C GRN15_XH = $7FF88D GRN16_XH = $7FF88E GRN17_XH = $7FF88F GRN18_XH = $7FF890 GRN19_XH = $7FF891 GRN1A_XH = $7FF892 GRN1B_XH = $7FF893 GRN1C_XH = $7FF894 GRN1D_XH = $7FF895 ; Garnish speed ; y speed GRN00_VY = $7FF896 GRN01_VY = $7FF897 GRN02_VY = $7FF898 GRN03_VY = $7FF899 GRN04_VY = $7FF89A GRN05_VY = $7FF89B GRN06_VY = $7FF89C GRN07_VY = $7FF89D GRN08_VY = $7FF89E GRN09_VY = $7FF89F GRN0A_VY = $7FF8A0 GRN0B_VY = $7FF8A1 GRN0C_VY = $7FF8A2 GRN0D_VY = $7FF8A3 GRN0E_VY = $7FF8A4 GRN0F_VY = $7FF8A5 GRN10_VY = $7FF8A6 GRN11_VY = $7FF8A7 GRN12_VY = $7FF8A8 GRN13_VY = $7FF8A9 GRN14_VY = $7FF8AA GRN15_VY = $7FF8AB GRN16_VY = $7FF8AC GRN17_VY = $7FF8AD GRN18_VY = $7FF8AE GRN19_VY = $7FF8AF GRN1A_VY = $7FF8B0 GRN1B_VY = $7FF8B1 GRN1C_VY = $7FF8B2 GRN1D_VY = $7FF8B3 ; x speed GRN00_VX = $7FF8B4 GRN01_VX = $7FF8B5 GRN02_VX = $7FF8B6 GRN03_VX = $7FF8B7 GRN04_VX = $7FF8B8 GRN05_VX = $7FF8B9 GRN06_VX = $7FF8BA GRN07_VX = $7FF8BB GRN08_VX = $7FF8BC GRN09_VX = $7FF8BD GRN0A_VX = $7FF8BE GRN0B_VX = $7FF8BF GRN0C_VX = $7FF8C0 GRN0D_VX = $7FF8C1 GRN0E_VX = $7FF8C2 GRN0F_VX = $7FF8C3 GRN10_VX = $7FF8C4 GRN11_VX = $7FF8C5 GRN12_VX = $7FF8C6 GRN13_VX = $7FF8C7 GRN14_VX = $7FF8C8 GRN15_VX = $7FF8C9 GRN16_VX = $7FF8CA GRN17_VX = $7FF8CB GRN18_VX = $7FF8CC GRN19_VX = $7FF8CD GRN1A_VX = $7FF8CE GRN1B_VX = $7FF8CF GRN1C_VX = $7FF8D0 GRN1D_VX = $7FF8D1 ; TODO GRN00_8D2 = $7FF8D2 GRN01_8D2 = $7FF8D3 GRN02_8D2 = $7FF8D4 GRN03_8D2 = $7FF8D5 GRN04_8D2 = $7FF8D6 GRN05_8D2 = $7FF8D7 GRN06_8D2 = $7FF8D8 GRN07_8D2 = $7FF8D9 GRN08_8D2 = $7FF8DA GRN09_8D2 = $7FF8DB GRN0A_8D2 = $7FF8DC GRN0B_8D2 = $7FF8DD GRN0C_8D2 = $7FF8DE GRN0D_8D2 = $7FF8DF GRN0E_8D2 = $7FF8E0 GRN0F_8D2 = $7FF8E1 GRN10_8D2 = $7FF8E2 GRN11_8D2 = $7FF8E3 GRN12_8D2 = $7FF8E4 GRN13_8D2 = $7FF8E5 GRN14_8D2 = $7FF8E6 GRN15_8D2 = $7FF8E7 GRN16_8D2 = $7FF8E8 GRN17_8D2 = $7FF8E9 GRN18_8D2 = $7FF8EA GRN19_8D2 = $7FF8EB GRN1A_8D2 = $7FF8EC GRN1B_8D2 = $7FF8ED GRN1C_8D2 = $7FF8EE GRN1D_8D2 = $7FF8EF ; TODO GRN00_8F0 = $7FF8F0 GRN01_8F0 = $7FF8F1 GRN02_8F0 = $7FF8F2 GRN03_8F0 = $7FF8F3 GRN04_8F0 = $7FF8F4 GRN05_8F0 = $7FF8F5 GRN06_8F0 = $7FF8F6 GRN07_8F0 = $7FF8F7 GRN08_8F0 = $7FF8F8 GRN09_8F0 = $7FF8F9 GRN0A_8F0 = $7FF8FA GRN0B_8F0 = $7FF8FB GRN0C_8F0 = $7FF8FC GRN0D_8F0 = $7FF8FD GRN0E_8F0 = $7FF8FE GRN0F_8F0 = $7FF8FF GRN10_8F0 = $7FF900 GRN11_8F0 = $7FF901 GRN12_8F0 = $7FF902 GRN13_8F0 = $7FF903 GRN14_8F0 = $7FF904 GRN15_8F0 = $7FF905 GRN16_8F0 = $7FF906 GRN17_8F0 = $7FF907 GRN18_8F0 = $7FF908 GRN19_8F0 = $7FF909 GRN1A_8F0 = $7FF90A GRN1B_8F0 = $7FF90B GRN1C_8F0 = $7FF90C GRN1D_8F0 = $7FF90D ; TODO GRN00_TIMER = $7FF90E GRN01_TIMER = $7FF90F GRN02_TIMER = $7FF910 GRN03_TIMER = $7FF911 GRN04_TIMER = $7FF912 GRN05_TIMER = $7FF913 GRN06_TIMER = $7FF914 GRN07_TIMER = $7FF915 GRN08_TIMER = $7FF916 GRN09_TIMER = $7FF917 GRN0A_TIMER = $7FF918 GRN0B_TIMER = $7FF919 GRN0C_TIMER = $7FF91A GRN0D_TIMER = $7FF91B GRN0E_TIMER = $7FF91C GRN0F_TIMER = $7FF91D GRN10_TIMER = $7FF91E GRN11_TIMER = $7FF91F GRN12_TIMER = $7FF920 GRN13_TIMER = $7FF921 GRN14_TIMER = $7FF922 GRN15_TIMER = $7FF923 GRN16_TIMER = $7FF924 GRN17_TIMER = $7FF925 GRN18_TIMER = $7FF926 GRN19_TIMER = $7FF927 GRN1A_TIMER = $7FF928 GRN1B_TIMER = $7FF929 GRN1C_TIMER = $7FF92A GRN1D_TIMER = $7FF92B ; Slot of spawning parent sprite GRN00_MOM = $7FF92C GRN01_MOM = $7FF92D GRN02_MOM = $7FF92E GRN03_MOM = $7FF92F GRN04_MOM = $7FF930 GRN05_MOM = $7FF931 GRN06_MOM = $7FF932 GRN07_MOM = $7FF933 GRN08_MOM = $7FF934 GRN09_MOM = $7FF935 GRN0A_MOM = $7FF936 GRN0B_MOM = $7FF937 GRN0C_MOM = $7FF938 GRN0D_MOM = $7FF939 GRN0E_MOM = $7FF93A GRN0F_MOM = $7FF93B GRN10_MOM = $7FF93C GRN11_MOM = $7FF93D GRN12_MOM = $7FF93E GRN13_MOM = $7FF93F GRN14_MOM = $7FF940 GRN15_MOM = $7FF941 GRN16_MOM = $7FF942 GRN17_MOM = $7FF943 GRN18_MOM = $7FF944 GRN19_MOM = $7FF945 GRN1A_MOM = $7FF946 GRN1B_MOM = $7FF947 GRN1C_MOM = $7FF948 GRN1D_MOM = $7FF949 ; TODO GRN00_94A = $7FF94A GRN01_94A = $7FF94B GRN02_94A = $7FF94C GRN03_94A = $7FF94D GRN04_94A = $7FF94E GRN05_94A = $7FF94F GRN06_94A = $7FF950 GRN07_94A = $7FF951 GRN08_94A = $7FF952 GRN09_94A = $7FF953 GRN0A_94A = $7FF954 GRN0B_94A = $7FF955 GRN0C_94A = $7FF956 GRN0D_94A = $7FF957 GRN0E_94A = $7FF958 GRN0F_94A = $7FF959 GRN10_94A = $7FF95A GRN11_94A = $7FF95B GRN12_94A = $7FF95C GRN13_94A = $7FF95D GRN14_94A = $7FF95E GRN15_94A = $7FF95F GRN16_94A = $7FF960 GRN17_94A = $7FF961 GRN18_94A = $7FF962 GRN19_94A = $7FF963 GRN1A_94A = $7FF964 GRN1B_94A = $7FF965 GRN1C_94A = $7FF966 GRN1D_94A = $7FF967 ; TODO GRN00_LAYER = $7FF968 GRN01_LAYER = $7FF969 GRN02_LAYER = $7FF96A GRN03_LAYER = $7FF96B GRN04_LAYER = $7FF96C GRN05_LAYER = $7FF96D GRN06_LAYER = $7FF96E GRN07_LAYER = $7FF96F GRN08_LAYER = $7FF970 GRN09_LAYER = $7FF971 GRN0A_LAYER = $7FF972 GRN0B_LAYER = $7FF973 GRN0C_LAYER = $7FF974 GRN0D_LAYER = $7FF975 GRN0E_LAYER = $7FF976 GRN0F_LAYER = $7FF977 GRN10_LAYER = $7FF978 GRN11_LAYER = $7FF979 GRN12_LAYER = $7FF97A GRN13_LAYER = $7FF97B GRN14_LAYER = $7FF97C GRN15_LAYER = $7FF97D GRN16_LAYER = $7FF97E GRN17_LAYER = $7FF97F GRN18_LAYER = $7FF980 GRN19_LAYER = $7FF981 GRN1A_LAYER = $7FF982 GRN1B_LAYER = $7FF983 GRN1C_LAYER = $7FF984 GRN1D_LAYER = $7FF985 ; TODO GRN00_986 = $7FF986 GRN01_986 = $7FF987 GRN02_986 = $7FF988 GRN03_986 = $7FF989 GRN04_986 = $7FF98A GRN05_986 = $7FF98B GRN06_986 = $7FF98C GRN07_986 = $7FF98D GRN08_986 = $7FF98E GRN09_986 = $7FF98F GRN0A_986 = $7FF990 GRN0B_986 = $7FF991 GRN0C_986 = $7FF992 GRN0D_986 = $7FF993 GRN0E_986 = $7FF994 GRN0F_986 = $7FF995 GRN10_986 = $7FF996 GRN11_986 = $7FF997 GRN12_986 = $7FF998 GRN13_986 = $7FF999 GRN14_986 = $7FF99A GRN15_986 = $7FF99B GRN16_986 = $7FF99C GRN17_986 = $7FF99D GRN18_986 = $7FF99E GRN19_986 = $7FF99F GRN1A_986 = $7FF9A0 GRN1B_986 = $7FF9A1 GRN1C_986 = $7FF9A2 GRN1D_986 = $7FF9A3 ; TODO GRN00_9A4 = $7FF9A4 GRN01_9A4 = $7FF9A5 GRN02_9A4 = $7FF9A6 GRN03_9A4 = $7FF9A7 GRN04_9A4 = $7FF9A8 GRN05_9A4 = $7FF9A9 GRN06_9A4 = $7FF9AA GRN07_9A4 = $7FF9AB GRN08_9A4 = $7FF9AC GRN09_9A4 = $7FF9AD GRN0A_9A4 = $7FF9AE GRN0B_9A4 = $7FF9AF GRN0C_9A4 = $7FF9B0 GRN0D_9A4 = $7FF9B1 GRN0E_9A4 = $7FF9B2 GRN0F_9A4 = $7FF9B3 GRN10_9A4 = $7FF9B4 GRN11_9A4 = $7FF9B5 GRN12_9A4 = $7FF9B6 GRN13_9A4 = $7FF9B7 GRN14_9A4 = $7FF9B8 GRN15_9A4 = $7FF9B9 GRN16_9A4 = $7FF9BA GRN17_9A4 = $7FF9BB GRN18_9A4 = $7FF9BC GRN19_9A4 = $7FF9BD GRN1A_9A4 = $7FF9BE GRN1B_9A4 = $7FF9BF GRN1C_9A4 = $7FF9C0 GRN1D_9A4 = $7FF9C1 ; Holds tile type sprite is currently on. SPR0TILE = $7FF9C2 SPR1TILE = $7FF9C3 SPR2TILE = $7FF9C4 SPR3TILE = $7FF9C5 SPR4TILE = $7FF9C6 SPR5TILE = $7FF9C7 SPR6TILE = $7FF9C8 SPR7TILE = $7FF9C9 SPR8TILE = $7FF9CA SPR9TILE = $7FF9CB SPRATILE = $7FF9CC SPRBTILE = $7FF9CD SPRCTILE = $7FF9CE SPRDTILE = $7FF9CF SPRETILE = $7FF9D0 SPRFTILE = $7FF9D1 ; FREE RAM: 0x2C UNUSED_7FF9D2 = $7FF9D2 ; TODO GRN00_9FE = $7FF9FE GRN01_9FE = $7FF9FF GRN02_9FE = $7FFA00 GRN03_9FE = $7FFA01 GRN04_9FE = $7FFA02 GRN05_9FE = $7FFA03 GRN06_9FE = $7FFA04 GRN07_9FE = $7FFA05 GRN08_9FE = $7FFA06 GRN09_9FE = $7FFA07 GRN0A_9FE = $7FFA08 GRN0B_9FE = $7FFA09 GRN0C_9FE = $7FFA0A GRN0D_9FE = $7FFA0B GRN0E_9FE = $7FFA0C GRN0F_9FE = $7FFA0D GRN10_9FE = $7FFA0E GRN11_9FE = $7FFA0F GRN12_9FE = $7FFA10 GRN13_9FE = $7FFA11 GRN14_9FE = $7FFA12 GRN15_9FE = $7FFA13 GRN16_9FE = $7FFA14 GRN17_9FE = $7FFA15 GRN18_9FE = $7FFA16 GRN19_9FE = $7FFA17 GRN1A_9FE = $7FFA18 GRN1B_9FE = $7FFA19 GRN1C_9FE = $7FFA1A GRN1D_9FE = $7FFA1B ; --------------------------------------------------------- ; Current stage of lifting for sprite SPR0LIFT = $7FFA1C SPR1LIFT = $7FFA1D SPR2LIFT = $7FFA1E SPR3LIFT = $7FFA1F SPR4LIFT = $7FFA20 SPR5LIFT = $7FFA21 SPR6LIFT = $7FFA22 SPR7LIFT = $7FFA23 SPR8LIFT = $7FFA24 SPR9LIFT = $7FFA25 SPRALIFT = $7FFA26 SPRBLIFT = $7FFA27 SPRCLIFT = $7FFA28 SPRDLIFT = $7FFA29 SPRELIFT = $7FFA2A SPRFLIFT = $7FFA2B ; Holds sprite's state from before it was lifted SPR0PRELIFT = $7FFA2C SPR1PRELIFT = $7FFA2D SPR2PRELIFT = $7FFA2E SPR3PRELIFT = $7FFA2F SPR4PRELIFT = $7FFA30 SPR5PRELIFT = $7FFA31 SPR6PRELIFT = $7FFA32 SPR7PRELIFT = $7FFA33 SPR8PRELIFT = $7FFA34 SPR9PRELIFT = $7FFA35 SPRAPRELIFT = $7FFA36 SPRBPRELIFT = $7FFA37 SPRCPRELIFT = $7FFA38 SPRDPRELIFT = $7FFA39 SPREPRELIFT = $7FFA3A SPRFPRELIFT = $7FFA3B ; Flags frozen sprites SPR0ICED = $7FFA3C SPR1ICED = $7FFA3D SPR2ICED = $7FFA3E SPR3ICED = $7FFA3F SPR4ICED = $7FFA40 SPR5ICED = $7FFA41 SPR6ICED = $7FFA42 SPR7ICED = $7FFA43 SPR8ICED = $7FFA44 SPR9ICED = $7FFA45 SPRAICED = $7FFA46 SPRBICED = $7FFA47 SPRCICED = $7FFA48 SPRDICED = $7FFA49 SPREICED = $7FFA4A SPRFICED = $7FFA4B ; Sprite variable caching during transitions SPRCACHE_7FFA4C = $7FFA4C SPRCACHE_7FFA5C = $7FFA5C SPRCACHE_7FFA6C = $7FFA6C SPRCACHE_7FFA7C = $7FFA7C SPRCACHE_7FFA8C = $7FFA8C SPRCACHE_7FFA9C = $7FFA9C SPRCACHE_7FFAAC = $7FFAAC ; Also has tile the sprite is on SPR0TILE2 = $7FFABC SPR1TILE2 = $7FFABD SPR2TILE2 = $7FFABE SPR3TILE2 = $7FFABF SPR4TILE2 = $7FFAC0 SPR5TILE2 = $7FFAC1 SPR6TILE2 = $7FFAC2 SPR7TILE2 = $7FFAC3 SPR8TILE2 = $7FFAC4 SPR9TILE2 = $7FFAC5 SPRATILE2 = $7FFAC6 SPRBTILE2 = $7FFAC7 SPRCTILE2 = $7FFAC8 SPRDTILE2 = $7FFAC9 SPRETILE2 = $7FFACA SPRFTILE2 = $7FFACB ; Sprite variable caching during transitions SPRCACHE_7FFACC = $7FFACC SPRCACHE_7FFADC = $7FFADC ; FREE RAM: 0x30 UNUSED_7FFAEC = $7FFAEC ; --------------------------------------------------------- ; TODO SWAMSEG2A = $7FFB1C SWAMSEG2B = $7FFB3C SWAMSEG2C = $7FFB5C SWAMSEG2D = $7FFB7C SWAMSEG2E = $7FFB9C SWAMSEG2F = $7FFBBC ; TODO SWAMSEG1A = $7FFBDC SWAMSEG1B = $7FFBFC SWAMSEG1C = $7FFC1C SWAMSEG1D = $7FFC3C SWAMSEG1E = $7FFC5C SWAMSEG1F = $7FFC7C ; Used with drawing segmented enemies SEGMENTS_7FFC00 = $7FFC00 SEGMENTS_7FFC80 = $7FFC00 SWAMOLA_7FFC9C = $7FFC00 SEGMENTS_7FFD00 = $7FFC00 ; Used to calculate Ganon's warp location ; Seems to have space for multiple slots ; even though Ganon only uses 1 slot himself ; In fact, the trident catch only uses that slot GANONWARPXL = $7FFD5C GANONWARPXH = $7FFD62 GANONWARPYL = $7FFD68 GANONWARPYH = $7FFD6E ; Used with drawing segmented enemies SEGMENTS_7FFD80 = $7FFD80 ; --------------------------------------------------------- ; Number of digs in digging game DIGS = $7FFE00 ; Used as a dialog counter for the Zelda rescue dialogs SANCBLAB = $7FFE01 ; Time spent in race game. ; The first four (G) hold a 32-bit frame count that continues running. ; The next four (D) hold the frame count when you finish and stops updating. ; Despite being 32-bit, only the lower 16-bits are checked. RACETIMEGA = $7FFE00 RACETIMEGB = $7FFE01 RACETIMEGC = $7FFE02 RACETIMEGD = $7FFE03 RACETIMEDA = $7FFE04 RACETIMEDB = $7FFE05 RACETIMEDC = $7FFE06 RACETIMEDD = $7FFE07 ; Used for drawing beamos lasers/lanmo rubble SPR_7FFE00 = $7FFE00 SPR_7FFE80 = $7FFE00 SPR_7FFF00 = $7FFF00 ; ========================================================= ; ========================================================= ; Save data is located in 2 separate locations in SRAM: ; File 1: $70:0000 Mirror: $70:0F00 ; File 2: $70:0500 Mirror: $70:1400 ; File 3: $70:0A00 Mirror: $70:1900 ; The main location is what gets brought down to WRAM at $7E:F000. ; The mirrors are used if an invalid checksum is found on the main copy. ; If both are invalid, the file is deleted. ; ; Use of unused SRAM is not recommended for general purpose memory ; As it will be kept across game sessions ; ========================================================= ; The following ASCII art is included because MathOnNapkins likes it: ; --------------------------------------------------------- ; ; /\/\/\/ ||\\\\ || |||\\ /\ |||||||||||| /\ ; /| || || // \\ //\\ || || || //\\ ; /| ||\\ || // || // \\ || || || ///\\\ ; /| ||// || // || //||||\\ || || || /\ /\ ; /| || || // // // \\ || || || //\\ //\\ ; /\/\/\/ ||//// ||//// |||// // \\ |||||||||||| ///\\\///\\\ ; ; <^^> <^^> **** **** **** **** **** **** ; <<<##^^^^##>>> *** **** *** *** **** *** *** **** *** ; <<############>> ** ** ** ** ** ** ; <<############>> ** ** ** ** ** ** ; <<##########>> ** ** ** ** ** ** ; <<########>> ** ** ** ** ** ** ; <<######>> ** ** ** ** ** ** ; <<##>> ** ** ** ** ** ** ; <<>> **** **** **** ; <> ** ** ** ; ; ========================================================= FILE1MAIN = $700000 FILE2MAIN = $700500 FILE3MAIN = $700A00 FILE1COPY = $700F00 FILE2COPY = $701400 FILE3COPY = $701900 ; 0x01FE free bytes of SRAM FREESRAM = $701E00 ; Used to find the correct save file offset to use when transferring between SRAM and WRAM. SRAMOFF = $701FFE ; ========================================================= ; Documention is for WRAM, as SRAM is not directly accessed except when ; verifying the file ; loading/saving ; Do note that the offset into any particular block of save is data is ; just equal to the bottom 3 nibbles of the WRAM address. ; e.g. $7E:F340 is an offset of +$0340 into the block ; ========================================================= ; Room flag data ; dddd bkut sehc qqqq ; d - door opened ; b - boss kill / heart container ; k - key / heart piece / crystal (unused for crystals, but prevents them from dropping) ; u - 2nd key / heart piece ; t - chest 4 / rupee floor / swamp drains / bombable floor / mire wall ; s - chest 3 / pod or desert wall ; e - chest 2 ; h - chest 1 ; c - chest 0 ; q - quadrant visits ; nw, ne, sw, se RMFLG000 = $7EF000 RMFLG001 = $7EF002 RMFLG002 = $7EF004 RMFLG003 = $7EF006 RMFLG004 = $7EF008 RMFLG005 = $7EF00A RMFLG006 = $7EF00C RMFLG007 = $7EF00E RMFLG008 = $7EF010 RMFLG009 = $7EF012 RMFLG00A = $7EF014 RMFLG00B = $7EF016 RMFLG00C = $7EF018 RMFLG00D = $7EF01A RMFLG00E = $7EF01C RMFLG00F = $7EF01E RMFLG010 = $7EF020 RMFLG011 = $7EF022 RMFLG012 = $7EF024 RMFLG013 = $7EF026 RMFLG014 = $7EF028 RMFLG015 = $7EF02A RMFLG016 = $7EF02C RMFLG017 = $7EF02E RMFLG018 = $7EF030 RMFLG019 = $7EF032 RMFLG01A = $7EF034 RMFLG01B = $7EF036 RMFLG01C = $7EF038 RMFLG01D = $7EF03A RMFLG01E = $7EF03C RMFLG01F = $7EF03E RMFLG020 = $7EF040 RMFLG021 = $7EF042 RMFLG022 = $7EF044 RMFLG023 = $7EF046 RMFLG024 = $7EF048 RMFLG025 = $7EF04A RMFLG026 = $7EF04C RMFLG027 = $7EF04E RMFLG028 = $7EF050 RMFLG029 = $7EF052 RMFLG02A = $7EF054 RMFLG02B = $7EF056 RMFLG02C = $7EF058 RMFLG02D = $7EF05A RMFLG02E = $7EF05C RMFLG02F = $7EF05E RMFLG030 = $7EF060 RMFLG031 = $7EF062 RMFLG032 = $7EF064 RMFLG033 = $7EF066 RMFLG034 = $7EF068 RMFLG035 = $7EF06A RMFLG036 = $7EF06C RMFLG037 = $7EF06E RMFLG038 = $7EF070 RMFLG039 = $7EF072 RMFLG03A = $7EF074 RMFLG03B = $7EF076 RMFLG03C = $7EF078 RMFLG03D = $7EF07A RMFLG03E = $7EF07C RMFLG03F = $7EF07E RMFLG040 = $7EF080 RMFLG041 = $7EF082 RMFLG042 = $7EF084 RMFLG043 = $7EF086 RMFLG044 = $7EF088 RMFLG045 = $7EF08A RMFLG046 = $7EF08C RMFLG047 = $7EF08E RMFLG048 = $7EF090 RMFLG049 = $7EF092 RMFLG04A = $7EF094 RMFLG04B = $7EF096 RMFLG04C = $7EF098 RMFLG04D = $7EF09A RMFLG04E = $7EF09C RMFLG04F = $7EF09E RMFLG050 = $7EF0A0 RMFLG051 = $7EF0A2 RMFLG052 = $7EF0A4 RMFLG053 = $7EF0A6 RMFLG054 = $7EF0A8 RMFLG055 = $7EF0AA RMFLG056 = $7EF0AC RMFLG057 = $7EF0AE RMFLG058 = $7EF0B0 RMFLG059 = $7EF0B2 RMFLG05A = $7EF0B4 RMFLG05B = $7EF0B6 RMFLG05C = $7EF0B8 RMFLG05D = $7EF0BA RMFLG05E = $7EF0BC RMFLG05F = $7EF0BE RMFLG060 = $7EF0C0 RMFLG061 = $7EF0C2 RMFLG062 = $7EF0C4 RMFLG063 = $7EF0C6 RMFLG064 = $7EF0C8 RMFLG065 = $7EF0CA RMFLG066 = $7EF0CC RMFLG067 = $7EF0CE RMFLG068 = $7EF0D0 RMFLG069 = $7EF0D2 RMFLG06A = $7EF0D4 RMFLG06B = $7EF0D6 RMFLG06C = $7EF0D8 RMFLG06D = $7EF0DA RMFLG06E = $7EF0DC RMFLG06F = $7EF0DE RMFLG070 = $7EF0E0 RMFLG071 = $7EF0E2 RMFLG072 = $7EF0E4 RMFLG073 = $7EF0E6 RMFLG074 = $7EF0E8 RMFLG075 = $7EF0EA RMFLG076 = $7EF0EC RMFLG077 = $7EF0EE RMFLG078 = $7EF0F0 RMFLG079 = $7EF0F2 RMFLG07A = $7EF0F4 RMFLG07B = $7EF0F6 RMFLG07C = $7EF0F8 RMFLG07D = $7EF0FA RMFLG07E = $7EF0FC RMFLG07F = $7EF0FE RMFLG080 = $7EF100 RMFLG081 = $7EF102 RMFLG082 = $7EF104 RMFLG083 = $7EF106 RMFLG084 = $7EF108 RMFLG085 = $7EF10A RMFLG086 = $7EF10C RMFLG087 = $7EF10E RMFLG088 = $7EF110 RMFLG089 = $7EF112 RMFLG08A = $7EF114 RMFLG08B = $7EF116 RMFLG08C = $7EF118 RMFLG08D = $7EF11A RMFLG08E = $7EF11C RMFLG08F = $7EF11E RMFLG090 = $7EF120 RMFLG091 = $7EF122 RMFLG092 = $7EF124 RMFLG093 = $7EF126 RMFLG094 = $7EF128 RMFLG095 = $7EF12A RMFLG096 = $7EF12C RMFLG097 = $7EF12E RMFLG098 = $7EF130 RMFLG099 = $7EF132 RMFLG09A = $7EF134 RMFLG09B = $7EF136 RMFLG09C = $7EF138 RMFLG09D = $7EF13A RMFLG09E = $7EF13C RMFLG09F = $7EF13E RMFLG0A0 = $7EF140 RMFLG0A1 = $7EF142 RMFLG0A2 = $7EF144 RMFLG0A3 = $7EF146 RMFLG0A4 = $7EF148 RMFLG0A5 = $7EF14A RMFLG0A6 = $7EF14C RMFLG0A7 = $7EF14E RMFLG0A8 = $7EF150 RMFLG0A9 = $7EF152 RMFLG0AA = $7EF154 RMFLG0AB = $7EF156 RMFLG0AC = $7EF158 RMFLG0AD = $7EF15A RMFLG0AE = $7EF15C RMFLG0AF = $7EF15E RMFLG0B0 = $7EF160 RMFLG0B1 = $7EF162 RMFLG0B2 = $7EF164 RMFLG0B3 = $7EF166 RMFLG0B4 = $7EF168 RMFLG0B5 = $7EF16A RMFLG0B6 = $7EF16C RMFLG0B7 = $7EF16E RMFLG0B8 = $7EF170 RMFLG0B9 = $7EF172 RMFLG0BA = $7EF174 RMFLG0BB = $7EF176 RMFLG0BC = $7EF178 RMFLG0BD = $7EF17A RMFLG0BE = $7EF17C RMFLG0BF = $7EF17E RMFLG0C0 = $7EF180 RMFLG0C1 = $7EF182 RMFLG0C2 = $7EF184 RMFLG0C3 = $7EF186 RMFLG0C4 = $7EF188 RMFLG0C5 = $7EF18A RMFLG0C6 = $7EF18C RMFLG0C7 = $7EF18E RMFLG0C8 = $7EF190 RMFLG0C9 = $7EF192 RMFLG0CA = $7EF194 RMFLG0CB = $7EF196 RMFLG0CC = $7EF198 RMFLG0CD = $7EF19A RMFLG0CE = $7EF19C RMFLG0CF = $7EF19E RMFLG0D0 = $7EF1A0 RMFLG0D1 = $7EF1A2 RMFLG0D2 = $7EF1A4 RMFLG0D3 = $7EF1A6 RMFLG0D4 = $7EF1A8 RMFLG0D5 = $7EF1AA RMFLG0D6 = $7EF1AC RMFLG0D7 = $7EF1AE RMFLG0D8 = $7EF1B0 RMFLG0D9 = $7EF1B2 RMFLG0DA = $7EF1B4 RMFLG0DB = $7EF1B6 RMFLG0DC = $7EF1B8 RMFLG0DD = $7EF1BA RMFLG0DE = $7EF1BC RMFLG0DF = $7EF1BE RMFLG0E0 = $7EF1C0 RMFLG0E1 = $7EF1C2 RMFLG0E2 = $7EF1C4 RMFLG0E3 = $7EF1C6 RMFLG0E4 = $7EF1C8 RMFLG0E5 = $7EF1CA RMFLG0E6 = $7EF1CC RMFLG0E7 = $7EF1CE RMFLG0E8 = $7EF1D0 RMFLG0E9 = $7EF1D2 RMFLG0EA = $7EF1D4 RMFLG0EB = $7EF1D6 RMFLG0EC = $7EF1D8 RMFLG0ED = $7EF1DA RMFLG0EE = $7EF1DC RMFLG0EF = $7EF1DE RMFLG0F0 = $7EF1E0 RMFLG0F1 = $7EF1E2 RMFLG0F2 = $7EF1E4 RMFLG0F3 = $7EF1E6 RMFLG0F4 = $7EF1E8 RMFLG0F5 = $7EF1EA RMFLG0F6 = $7EF1EC RMFLG0F7 = $7EF1EE RMFLG0F8 = $7EF1F0 RMFLG0F9 = $7EF1F2 RMFLG0FA = $7EF1F4 RMFLG0FB = $7EF1F6 RMFLG0FC = $7EF1F8 RMFLG0FD = $7EF1FA RMFLG0FE = $7EF1FC RMFLG0FF = $7EF1FE RMFLG100 = $7EF200 RMFLG101 = $7EF202 RMFLG102 = $7EF204 RMFLG103 = $7EF206 RMFLG104 = $7EF208 RMFLG105 = $7EF20A RMFLG106 = $7EF20C RMFLG107 = $7EF20E RMFLG108 = $7EF210 RMFLG109 = $7EF212 RMFLG10A = $7EF214 RMFLG10B = $7EF216 RMFLG10C = $7EF218 RMFLG10D = $7EF21A RMFLG10E = $7EF21C RMFLG10F = $7EF21E RMFLG110 = $7EF220 RMFLG111 = $7EF222 RMFLG112 = $7EF224 RMFLG113 = $7EF226 RMFLG114 = $7EF228 RMFLG115 = $7EF22A RMFLG116 = $7EF22C RMFLG117 = $7EF22E RMFLG118 = $7EF230 RMFLG119 = $7EF232 RMFLG11A = $7EF234 RMFLG11B = $7EF236 RMFLG11C = $7EF238 RMFLG11D = $7EF23A RMFLG11E = $7EF23C RMFLG11F = $7EF23E RMFLG120 = $7EF240 RMFLG121 = $7EF242 RMFLG122 = $7EF244 RMFLG123 = $7EF246 RMFLG124 = $7EF248 RMFLG125 = $7EF24A RMFLG126 = $7EF24C RMFLG127 = $7EF24E RMFLG128 = $7EF250 RMFLG129 = $7EF252 RMFLG12A = $7EF254 RMFLG12B = $7EF256 RMFLG12C = $7EF258 RMFLG12D = $7EF25A RMFLG12E = $7EF25C RMFLG12F = $7EF25E RMFLG130 = $7EF260 RMFLG131 = $7EF262 RMFLG132 = $7EF264 RMFLG133 = $7EF266 RMFLG134 = $7EF268 RMFLG135 = $7EF26A RMFLG136 = $7EF26C RMFLG137 = $7EF26E RMFLG138 = $7EF270 RMFLG139 = $7EF272 RMFLG13A = $7EF274 RMFLG13B = $7EF276 RMFLG13C = $7EF278 RMFLG13D = $7EF27A RMFLG13E = $7EF27C RMFLG13F = $7EF27E ; ========================================================= ; Overworld data ; .io. ..b. ; i - item collected / lightning barrier destroyed ; o - overlay active ; b - bomb wall opened ; ========================================================= OWFLG00 = $7EF280 OWFLG01 = $7EF281 OWFLG02 = $7EF282 OWFLG03 = $7EF283 OWFLG04 = $7EF284 OWFLG05 = $7EF285 OWFLG06 = $7EF286 OWFLG07 = $7EF287 OWFLG08 = $7EF288 OWFLG09 = $7EF289 OWFLG0A = $7EF28A OWFLG0B = $7EF28B OWFLG0C = $7EF28C OWFLG0D = $7EF28D OWFLG0E = $7EF28E OWFLG0F = $7EF28F OWFLG10 = $7EF290 OWFLG11 = $7EF291 OWFLG12 = $7EF292 OWFLG13 = $7EF293 OWFLG14 = $7EF294 OWFLG15 = $7EF295 OWFLG16 = $7EF296 OWFLG17 = $7EF297 OWFLG18 = $7EF298 OWFLG19 = $7EF299 OWFLG1A = $7EF29A OWFLG1B = $7EF29B OWFLG1C = $7EF29C OWFLG1D = $7EF29D OWFLG1E = $7EF29E OWFLG1F = $7EF29F OWFLG20 = $7EF2A0 OWFLG21 = $7EF2A1 OWFLG22 = $7EF2A2 OWFLG23 = $7EF2A3 OWFLG24 = $7EF2A4 OWFLG25 = $7EF2A5 OWFLG26 = $7EF2A6 OWFLG27 = $7EF2A7 OWFLG28 = $7EF2A8 OWFLG29 = $7EF2A9 OWFLG2A = $7EF2AA OWFLG2B = $7EF2AB OWFLG2C = $7EF2AC OWFLG2D = $7EF2AD OWFLG2E = $7EF2AE OWFLG2F = $7EF2AF OWFLG30 = $7EF2B0 OWFLG31 = $7EF2B1 OWFLG32 = $7EF2B2 OWFLG33 = $7EF2B3 OWFLG34 = $7EF2B4 OWFLG35 = $7EF2B5 OWFLG36 = $7EF2B6 OWFLG37 = $7EF2B7 OWFLG38 = $7EF2B8 OWFLG39 = $7EF2B9 OWFLG3A = $7EF2BA OWFLG3B = $7EF2BB OWFLG3C = $7EF2BC OWFLG3D = $7EF2BD OWFLG3E = $7EF2BE OWFLG3F = $7EF2BF OWFLG40 = $7EF2C0 OWFLG41 = $7EF2C1 OWFLG42 = $7EF2C2 OWFLG43 = $7EF2C3 OWFLG44 = $7EF2C4 OWFLG45 = $7EF2C5 OWFLG46 = $7EF2C6 OWFLG47 = $7EF2C7 OWFLG48 = $7EF2C8 OWFLG49 = $7EF2C9 OWFLG4A = $7EF2CA OWFLG4B = $7EF2CB OWFLG4C = $7EF2CC OWFLG4D = $7EF2CD OWFLG4E = $7EF2CE OWFLG4F = $7EF2CF OWFLG50 = $7EF2D0 OWFLG51 = $7EF2D1 OWFLG52 = $7EF2D2 OWFLG53 = $7EF2D3 OWFLG54 = $7EF2D4 OWFLG55 = $7EF2D5 OWFLG56 = $7EF2D6 OWFLG57 = $7EF2D7 OWFLG58 = $7EF2D8 OWFLG59 = $7EF2D9 OWFLG5A = $7EF2DA OWFLG5B = $7EF2DB OWFLG5C = $7EF2DC OWFLG5D = $7EF2DD OWFLG5E = $7EF2DE OWFLG5F = $7EF2DF OWFLG60 = $7EF2E0 OWFLG61 = $7EF2E1 OWFLG62 = $7EF2E2 OWFLG63 = $7EF2E3 OWFLG64 = $7EF2E4 OWFLG65 = $7EF2E5 OWFLG66 = $7EF2E6 OWFLG67 = $7EF2E7 OWFLG68 = $7EF2E8 OWFLG69 = $7EF2E9 OWFLG6A = $7EF2EA OWFLG6B = $7EF2EB OWFLG6C = $7EF2EC OWFLG6D = $7EF2ED OWFLG6E = $7EF2EE OWFLG6F = $7EF2EF OWFLG70 = $7EF2F0 OWFLG71 = $7EF2F1 OWFLG72 = $7EF2F2 OWFLG73 = $7EF2F3 OWFLG74 = $7EF2F4 OWFLG75 = $7EF2F5 OWFLG76 = $7EF2F6 OWFLG77 = $7EF2F7 OWFLG78 = $7EF2F8 OWFLG79 = $7EF2F9 OWFLG7A = $7EF2FA OWFLG7B = $7EF2FB OWFLG7C = $7EF2FC OWFLG7D = $7EF2FD OWFLG7E = $7EF2FE OWFLG7F = $7EF2FF ; Most of these special screens aren't actually reachable OWFLG80 = $7EF300 OWFLG81 = $7EF301 ; Completely unused ; but written to when splashing in special overworld ; because of some shared code OWFLG82 = $7EF302 OWFLG83 = $7EF303 OWFLG84 = $7EF304 OWFLG85 = $7EF305 OWFLG86 = $7EF306 OWFLG87 = $7EF307 OWFLG88 = $7EF308 OWFLG89 = $7EF309 OWFLG8A = $7EF30A OWFLG8B = $7EF30B OWFLG8C = $7EF30C OWFLG8D = $7EF30D OWFLG8E = $7EF30E OWFLG8F = $7EF30F OWFLG90 = $7EF310 OWFLG91 = $7EF311 OWFLG92 = $7EF312 OWFLG93 = $7EF313 OWFLG94 = $7EF314 OWFLG95 = $7EF315 OWFLG96 = $7EF316 OWFLG97 = $7EF317 OWFLG98 = $7EF318 OWFLG99 = $7EF319 OWFLG9A = $7EF31A OWFLG9B = $7EF31B OWFLG9C = $7EF31C OWFLG9D = $7EF31D OWFLG9E = $7EF31E OWFLG9F = $7EF31F ; ========================================================= ; Items ; ========================================================= ; 0x00 - Nothing ; 0x01 - Bow ; 0x02 - Bow and arrows ; 0x03 - Silver bow ; 0x04 - Silver bow and arrows ; Picking the arrow and nonarrow versions is done by the HUD draw routines BOW = $7EF340 ; 0x00 - Nothing ; 0x01 - Blue boomerang ; 0x02 - Red boomerang BOOMER = $7EF341 ; 0x00 - Nothing ; 0x01 - Hookshot HOOKSHOT = $7EF342 ; Number of bombs BOMBS = $7EF343 ; 0x00 - Nothing ; 0x01 - Mushroom ; 0x02 - Powder SHROOM = $7EF344 ; 0x00 - Nothing ; 0x01 - Fire rod FIREROD = $7EF345 ; 0x00 - Nothing ; 0x01 - Ice rod ICEROD = $7EF346 ; 0x00 - Nothing ; 0x01 - Bombos medallion BOMBOS = $7EF347 ; 0x00 - Nothing ; 0x01 - Ether medallion ETHER = $7EF348 ; 0x00 - Nothing ; 0x01 - Quake medallion QUAKE = $7EF349 ; 0x00 - Nothing ; 0x01 - Lamp LAMP = $7EF34A ; 0x00 - Nothing ; 0x01 - Magic hammer HAMMER = $7EF34B ; 0x00 - Nothing ; 0x01 - Shovel ; 0x02 - Inactive flute ; 0x03 - Active flute FLUTE = $7EF34C ; 0x00 - Nothing ; 0x01 - Bug catching net BUGNET = $7EF34D ; 0x00 - Nothing ; 0x01 - Book of Mudora BOOK = $7EF34E ; 0x00 - Nothing ; Other values indicate the index of the currently selected bottle BOTSEL = $7EF34F ; 0x00 - Nothing ; 0x01 - Cane of Somaria SOMARIA = $7EF350 ; 0x00 - Nothing ; 0x01 - Cane of Byrna BYRNA = $7EF351 ; 0x00 - Nothing ; 0x01 - Magic cape CAPE = $7EF352 ; 0x00 - Nothing ; 0x01 - Letter (works like mirror) ; 0x02 - Mirror ; 0x03 - Deleted triforce item MIRROR = $7EF353 ; 0x00 - Lift 1 (nothing) ; 0x01 - Lift 2 (power glove) ; 0x02 - Lift 3 (titan's mitt) GLOVES = $7EF354 ; 0x00 - Nothing ; 0x01 - Pegasus boots ; bit 2 of $7E:F379 also needs to be set to actually dash BOOTS = $7EF355 ; 0x00 - Nothing ; 0x01 - Zora's flippers FLIPPERS = $7EF356 ; 0x00 - Nothing ; 0x01 - Moon pearl PEARL = $7EF357 ; Appears to be for nothing UNUSED_7EF358 = $7EF358 ; 0x00 - Nothing ; 0x01 - Fighter sword ; 0x02 - Master sword ; 0x03 - Tempered sword ; 0x04 - Golden sword ; 0xFF - Set when sword is handed in to smithy SWORD = $7EF359 ; 0x00 - Nothing ; 0x01 - Fighter shield ; 0x02 - Fire shield ; 0x03 - Mirror shield SHIELD = $7EF35A ; 0x00 - Green jerkin ; 0x01 - Blue mail ; 0x02 - Red mail ARMOR = $7EF35B ; 0x00 - Nothing ; 0x01 - Mushroom (unused) ; 0x02 - Empty bottle ; 0x03 - Red potion ; 0x04 - Green potion ; 0x05 - Blue potion ; 0x06 - Fairy ; 0x07 - Bee ; 0x08 - Good bee BOTTLE1 = $7EF35C BOTTLE2 = $7EF35D BOTTLE3 = $7EF35E BOTTLE4 = $7EF35F ; Number of rupees you have ; RUPEEDISP will be incremented or decremented until it reaches this value RUPEES = $7EF360 ; Rupee count displayed on the HUD RUPEEDISP = $7EF362 ; Bitfields for ownership of various dungeon items ; SET 2 SET 1 ; xced aspm wihb tg.. ; c - Hyrule Castle ; x - Sewers ; a - Agahnim's Tower ; ; e - Eastern Palace ; d - Desert Palace ; h - Tower of Hera ; ; p - Palace of Darkness ; s - Swamp Palace ; w - Skull Woods ; b - Thieves' Town ; i - Ice Palace ; m - Misery Mire ; t - Turtle Rock ; g - Ganon's Tower COMPASS1 = $7EF364 COMPASS2 = $7EF365 BIGKEY1 = $7EF366 BIGKEY2 = $7EF367 DNGMAP1 = $7EF368 DNGMAP2 = $7EF369 ; Number of rupees donated to fairies WISHRUP = $7EF36A ; Number of heart pieces towards next container ; Intended to be a value from 0-3 HEARTPC = $7EF36B ; Maximum health; 1 heart container = 0x08 HP MAXHP = $7EF36C ; Current health ; You die at 0x00 ; You also die at ≥0xA8 CURHP = $7EF36D ; Magic power, capped at 128 MAGPOW = $7EF36E ; Current number of keys for whatever dungeon is loaded KEYS = $7EF36F ; Number of capacity upgrades received BOMBCAP = $7EF370 ARROWCAP = $7EF371 ; Refills health ; Expects multiples of 8 HEALME = $7EF372 ; Refills magic ZAPME = $7EF373 ; ... ..gbr ; r - Wisdom (red) ; b - Power (blue) ; g - Courage (green) PENDANTS = $7EF374 ; Refills bombs BOMBME = $7EF375 ; Refills arrows SHOOTME = $7EF376 ; Arrow count ARROWS = $7EF377 ; Unused UNUSED_7EF378 = $7EF378 ; Displays ability flags ; lrtu pbsh ; h - Pray (unused and mostly cut off by HUD borders) ; s - Swim ; b - Run ; u - unused but set by default ; p - Pull ; t - Talk ; r - Read ; l - Lift ; This only controls the display of "LIFT.1" ; If this bit is unset but LIFT is set then the proper lift text is displayed ABILITY = $7EF379 ; .wbs tipm ; p - Palace of Darkness ; s - Swamp Palace ; w - Skull Woods ; b - Thieves' Town ; i - Ice Palace ; m - Misery Mire ; t - Turtle Rock CRYSTALS = $7EF37A ; 0x00 - Normal magic ; 0x01 - Half magic ; 0x02 - Quarter magic ; Quarter magic has no special HUD graphic, unlike half magic ; Also, not everything is necessarily quarter magic MAGCON = $7EF37B ; Keys earned per dungeon ; Sewers and Castle are kept in sync KEYSSEWER = $7EF37C KEYSHYRULE = $7EF37D KEYSEAST = $7EF37E KEYSDESERT = $7EF37F KEYSAGA = $7EF380 KEYSSWAMP = $7EF381 KEYSPOD = $7EF382 KEYSMIRE = $7EF383 KEYSWOODS = $7EF384 KEYSICE = $7EF385 KEYSHERA = $7EF386 KEYSTHIEF = $7EF387 KEYSTROCK = $7EF388 KEYSGANON = $7EF389 ; Unused block of SRAM UNUSED_7EF38A = $7EF38A ; Game state ; 0x00 - Very start; progress cannot be saved in this state ; 0x01 - Uncle reached ; 0x02 - Zelda rescued ; 0x03 - Agahnim defeated GAMESTATE = $7EF3C5 ; Bitfield of less important progression ; .fbh .zsu ; u - Uncle visited in secret passage; controls spawn (0: spawn | 1: gone) ; s - Priest visited in sanc after Zelda is kidnapped again ; z - Zelda brought to sanc ; h - Uncle has left Link's house; controls spawn (0: spawn | 1: gone) ; b - Book of Mudora obtained/mentioned; controls Aginah dialog ; f - Flipped by fortune tellers to decide which fortune set to give PROGLITE = $7EF3C6 ; Map icon to guide noob players ; 0x00 - Red X on castle | Save zelda ; 0x01 - Red X on Kakariko | Talk to villagers about elders ; 0x02 - Red X on Eastern | Talk to Sahasrahla ; 0x03 - Pendants and MS | Obtain the master sword ; 0x04 - Master sword on LW | Grab the master sword ; 0x05 - Skull on castle | Kill Agahnim ; 0x06 - Crystal on POD | Get the first crystal ; 0x07 - Crystals | Get all 7 crystals ; 0x08 - Skull on GT | Climb Ganon's Tower MAPICON = $7EF3C7 ; 0x00 - Link's house ; 0x01 - Sanctuary ; 0x02 - Prison ; 0x03 - Uncle ; 0x04 - Throne ; 0x05 - Old man cave ; 0x06 - Old man home SPAWNPT = $7EF3C8 ; Another bitfield for progress ; t.dp s.bh ; t - smiths are currently tempering sword ; d - swordsmith rescued ; p - purple chest has been opened ; s - stumpy has been stumped ; b - bottle purchased from vendor ; h - bottle received from hobo PROGLITE2 = $7EF3C9 ; .d.. .... ; d - World (0: Light World | 1: Dark World) SAVEWORLD = $7EF3CA ; Not used UNUSED_7EF3CB = $7EF3CB ; Current follower ID FOLLOWER = $7EF3CC ; Cache of follower properties FOLLOWCYL = $7EF3CD FOLLOWCYH = $7EF3CE FOLLOWCXL = $7EF3CF FOLLOWCXH = $7EF3D0 ; Copies INDOORS FOLLOWERINOUT = $7EF3D1 ; Copies LAYER FOLLOWERCLAYER = $7EF3D2 ; Indicates the follower is currently following ; 0x00 - Following ; 0x80 - Not following FOLLOWERING = $7EF3D3 ; Unused UNUSED_7EF3D4 = $7EF3D4 UNUSED_7EF3D5 = $7EF3D5 UNUSED_7EF3D6 = $7EF3D6 UNUSED_7EF3D7 = $7EF3D7 UNUSED_7EF3D8 = $7EF3D8 ; Player name NAME1L = $7EF3D9 NAME1H = $7EF3DA NAME2L = $7EF3DB NAME2H = $7EF3DC NAME3L = $7EF3DD NAME3H = $7EF3DE NAME4L = $7EF3DF NAME4H = $7EF3E0 ; Save file checksum; expected to be $55AA SCHKSML = $7EF3E1 SCHKSMH = $7EF3E2 ; Games played in each dungeon GPSEWER = $7EF3E3 GPHYRULE = $7EF3E5 GPEAST = $7EF3E7 GPDESERT = $7EF3E9 GPAGA = $7EF3EB GPSWAMP = $7EF3ED GPPOD = $7EF3EF GPMIRE = $7EF3F1 GPWOODS = $7EF3F3 GPICE = $7EF3F5 GPHERA = $7EF3F7 GPTHIEF = $7EF3F9 GPTROCK = $7EF3FB GPGANON = $7EF3FD ; Games played for current segment GPNOW = $7EF3FF ; Total games played ; No display on file select if 0xFFFF GAMESPLAYED = $7EF401 ; Big unused block UNUSED_7EF403 = $7EF403 ; Inverse checksum for save file SAVEICKSML = $7EF4FE SAVEICKSMH = $7EF4FF ; ========================================================= INIDISP = $002100 OBSEL = $002101 OAMADDR = $002102 OAMADDL = $002102 OAMADDH = $002103 OAMDATA = $002104 BGMODE = $002105 MOSAIC = $002106 BG1SC = $002107 BG2SC = $002108 BG3SC = $002109 BG4SC = $00210A BG12NBA = $00210B BG34NBA = $00210C BG1HOFS = $00210D BG1VOFS = $00210E BG2HOFS = $00210F BG2VOFS = $002110 BG3HOFS = $002111 BG3VOFS = $002112 BG4HOFS = $002113 BG4VOFS = $002114 M7HOFS = $00210D M7VOFS = $00210E VMAIN = $002115 VMADDR = $002116 VMADDL = $002116 VMADDH = $002117 VMDATA = $002118 VMDATAL = $002118 VMDATAH = $002119 M7SEL = $00211A M7A = $00211B M7B = $00211C M7C = $00211D M7D = $00211E PPUMULT16 = $00211B PPUMULT8 = $00211C M7X = $00211F M7Y = $002120 CGADD = $002121 CGDATA = $002122 W12SEL = $002123 W34SEL = $002124 WOBJSEL = $002125 WH0 = $002126 WH1 = $002127 WH2 = $002128 WH3 = $002129 WINDOW1L = $002126 WINDOW1R = $002127 WINDOW2L = $002128 WINDOW2R = $002129 WBGLOG = $00212A WOBJLOG = $00212B TM = $00212C TS = $00212D TMW = $00212E TSW = $00212F CGWSEL = $002130 CGADSUB = $002131 COLDATA = $002132 SETINI = $002133 MPYL = $002134 MPYM = $002135 MPYH = $002136 SLVH = $002137 OAMDATAREAD = $002138 VMDATALREAD = $002139 VMDATAHREAD = $00213A CGDATAREAD = $00213B OPHCT = $00213C OPVCT = $00213D STAT77 = $00213E STAT78 = $00213F APUIO = $002140 APUIO0 = $002140 APUIO1 = $002141 APUIO2 = $002142 APUIO3 = $002143 WMDATA = $002180 WMADDR = $002181 WMADDL = $002181 WMADDH = $002182 WMADDB = $002183 JOYPAD = $004016 JOYPADA = $004016 JOYPADB = $004017 NMITIMEN = $004200 WRIO = $004201 WRMPYA = $004202 WRMPYB = $004203 WRDIVL = $004204 WRDIVH = $004205 WRDIVB = $004206 HTIME = $004207 HTIMEL = $004207 HTIMEH = $004208 VTIME = $004209 VTIMEL = $004209 VTIMEH = $00420A MDMAEN = $00420B HDMAEN = $00420C MEMSEL = $00420D RDNMI = $004210 TIMEUP = $004211 HVBJOY = $004212 RDIO = $004213 RDDIV = $004214 RDDIVL = $004214 RDDIVH = $004215 RDMPY = $004216 RDMPYL = $004216 RDMPYH = $004217 JOY1L = $004218 JOY1H = $004219 JOY2L = $00421A JOY2H = $00421B JOY3L = $00421C JOY3H = $00421D JOY4L = $00421E JOY4H = $00421F JOY1DATA1L = $004218 JOY1DATA1H = $004219 JOY2DATA1L = $00421A JOY2DATA1H = $00421B JOY1DATA2L = $00421C JOY1DATA2H = $00421D JOY2DATA2L = $00421E JOY2DATA2H = $00421F DMAPX = $004300 DMAP0 = $004300 DMAP1 = $004310 DMAP2 = $004320 DMAP3 = $004330 DMAP4 = $004340 DMAP5 = $004350 DMAP6 = $004360 DMAP7 = $004370 DMAXMODE = $004300 DMA0MODE = $004300 DMA1MODE = $004310 DMA2MODE = $004320 DMA3MODE = $004330 DMA4MODE = $004340 DMA5MODE = $004350 DMA6MODE = $004360 DMA7MODE = $004370 HDMAXMODE = $004300 HDMA0MODE = $004300 HDMA1MODE = $004310 HDMA2MODE = $004320 HDMA3MODE = $004330 HDMA4MODE = $004340 HDMA5MODE = $004350 HDMA6MODE = $004360 HDMA7MODE = $004370 BBADX = $004301 BBAD0 = $004301 BBAD1 = $004311 BBAD2 = $004321 BBAD3 = $004331 BBAD4 = $004341 BBAD5 = $004351 BBAD6 = $004361 BBAD7 = $004371 DMAXPORT = $004301 DMA0PORT = $004301 DMA1PORT = $004311 DMA2PORT = $004321 DMA3PORT = $004331 DMA4PORT = $004341 DMA5PORT = $004351 DMA6PORT = $004361 DMA7PORT = $004371 A1TX = $004302 A1TXL = $004302 A1T0L = $004302 A1T1L = $004312 A1T2L = $004322 A1T3L = $004332 A1T4L = $004342 A1T5L = $004352 A1T6L = $004362 A1T7L = $004372 A1TXH = $004303 A1T0H = $004303 A1T1H = $004313 A1T2H = $004323 A1T3H = $004333 A1T4H = $004343 A1T5H = $004353 A1T6H = $004363 A1T7H = $004373 A1BX = $004304 A1B0 = $004304 A1B1 = $004314 A1B2 = $004324 A1B3 = $004334 A1B4 = $004344 A1B5 = $004354 A1B6 = $004364 A1B7 = $004374 DMAXADDR = $004302 DMA0ADDR = $004302 DMA1ADDR = $004312 DMA2ADDR = $004322 DMA3ADDR = $004332 DMA4ADDR = $004342 DMA5ADDR = $004352 DMA6ADDR = $004362 DMA7ADDR = $004372 DMAXADDRL = $004302 DMA0ADDRL = $004302 DMA1ADDRL = $004312 DMA2ADDRL = $004322 DMA3ADDRL = $004332 DMA4ADDRL = $004342 DMA5ADDRL = $004352 DMA6ADDRL = $004362 DMA7ADDRL = $004372 DMAXADDRH = $004303 DMA0ADDRH = $004303 DMA1ADDRH = $004313 DMA2ADDRH = $004323 DMA3ADDRH = $004333 DMA4ADDRH = $004343 DMA5ADDRH = $004353 DMA6ADDRH = $004363 DMA7ADDRH = $004373 DMAXADDRB = $004304 DMA0ADDRB = $004304 DMA1ADDRB = $004314 DMA2ADDRB = $004324 DMA3ADDRB = $004334 DMA4ADDRB = $004344 DMA5ADDRB = $004354 DMA6ADDRB = $004364 DMA7ADDRB = $004374 HDMAXADDR = $004302 HDMA0ADDR = $004302 HDMA1ADDR = $004312 HDMA2ADDR = $004322 HDMA3ADDR = $004332 HDMA4ADDR = $004342 HDMA5ADDR = $004352 HDMA6ADDR = $004362 HDMA7ADDR = $004372 HDMAXADDRL = $004302 HDMA0ADDRL = $004302 HDMA1ADDRL = $004312 HDMA2ADDRL = $004322 HDMA3ADDRL = $004332 HDMA4ADDRL = $004342 HDMA5ADDRL = $004352 HDMA6ADDRL = $004362 HDMA7ADDRL = $004372 HDMAXADDRH = $004303 HDMA0ADDRH = $004303 HDMA1ADDRH = $004313 HDMA2ADDRH = $004323 HDMA3ADDRH = $004333 HDMA4ADDRH = $004343 HDMA5ADDRH = $004353 HDMA6ADDRH = $004363 HDMA7ADDRH = $004373 HDMAXADDRB = $004304 HDMA0ADDRB = $004304 HDMA1ADDRB = $004314 HDMA2ADDRB = $004324 HDMA3ADDRB = $004334 HDMA4ADDRB = $004344 HDMA5ADDRB = $004354 HDMA6ADDRB = $004364 HDMA7ADDRB = $004374 DASX = $004305 DAS0 = $004305 DAS1 = $004315 DAS2 = $004325 DAS3 = $004335 DAS4 = $004345 DAS5 = $004355 DAS6 = $004365 DAS7 = $004375 DASXL = $004305 DAS0L = $004305 DAS1L = $004315 DAS2L = $004325 DAS3L = $004335 DAS4L = $004345 DAS5L = $004355 DAS6L = $004365 DAS7L = $004375 DASXH = $004306 DAS0H = $004306 DAS1H = $004316 DAS2H = $004326 DAS3H = $004336 DAS4H = $004346 DAS5H = $004356 DAS6H = $004366 DAS7H = $004376 DASBX = $004307 DASB0 = $004307 DASB1 = $004317 DASB2 = $004327 DASB3 = $004337 DASB4 = $004347 DASB5 = $004357 DASB6 = $004367 DASB7 = $004377 DMAXSIZE = $004305 DMA0SIZE = $004305 DMA1SIZE = $004315 DMA2SIZE = $004325 DMA3SIZE = $004335 DMA4SIZE = $004345 DMA5SIZE = $004355 DMA6SIZE = $004365 DMA7SIZE = $004375 DMAXSIZEL = $004305 DMA0SIZEL = $004305 DMA1SIZEL = $004315 DMA2SIZEL = $004325 DMA3SIZEL = $004335 DMA4SIZEL = $004345 DMA5SIZEL = $004355 DMA6SIZEL = $004365 DMA7SIZEL = $004375 DMAXSIZEH = $004306 DMA0SIZEH = $004306 DMA1SIZEH = $004316 DMA2SIZEH = $004326 DMA3SIZEH = $004336 DMA4SIZEH = $004346 DMA5SIZEH = $004356 DMA6SIZEH = $004366 DMA7SIZEH = $004376 HDMAXINDIRECT = $004305 HDMA0INDIRECT = $004305 HDMA1INDIRECT = $004315 HDMA2INDIRECT = $004325 HDMA3INDIRECT = $004335 HDMA4INDIRECT = $004345 HDMA5INDIRECT = $004355 HDMA6INDIRECT = $004365 HDMA7INDIRECT = $004375 HDMAXINDIRECTL = $004305 HDMA0INDIRECTL = $004305 HDMA1INDIRECTL = $004315 HDMA2INDIRECTL = $004325 HDMA3INDIRECTL = $004335 HDMA4INDIRECTL = $004345 HDMA5INDIRECTL = $004355 HDMA6INDIRECTL = $004365 HDMA7INDIRECTL = $004375 HDMAXINDIRECTH = $004306 HDMA0INDIRECTH = $004306 HDMA1INDIRECTH = $004316 HDMA2INDIRECTH = $004326 HDMA3INDIRECTH = $004336 HDMA4INDIRECTH = $004346 HDMA5INDIRECTH = $004356 HDMA6INDIRECTH = $004366 HDMA7INDIRECTH = $004376 HDMAXINDIRECTB = $004307 HDMA0INDIRECTB = $004307 HDMA1INDIRECTB = $004317 HDMA2INDIRECTB = $004327 HDMA3INDIRECTB = $004337 HDMA4INDIRECTB = $004347 HDMA5INDIRECTB = $004357 HDMA6INDIRECTB = $004367 HDMA7INDIRECTB = $004377 A2AX = $004308 A2AXL = $004308 A2A0L = $004308 A2A1L = $004318 A2A2L = $004328 A2A3L = $004338 A2A4L = $004348 A2A5L = $004358 A2A6L = $004368 A2A7L = $004378 A2AXH = $004309 A2A0H = $004309 A2A1H = $004319 A2A2H = $004329 A2A3H = $004339 A2A4H = $004349 A2A5H = $004359 A2A6H = $004369 A2A7H = $004379 HDMAXTABLEADDR = $004308 HDMA0TABLEADDR = $004308 HDMA1TABLEADDR = $004318 HDMA2TABLEADDR = $004328 HDMA3TABLEADDR = $004338 HDMA4TABLEADDR = $004348 HDMA5TABLEADDR = $004358 HDMA6TABLEADDR = $004368 HDMA7TABLEADDR = $004378 HDMAXTABLEADDRL = $004308 HDMA0TABLEADDRL = $004308 HDMA1TABLEADDRL = $004318 HDMA2TABLEADDRL = $004328 HDMA3TABLEADDRL = $004338 HDMA4TABLEADDRL = $004348 HDMA5TABLEADDRL = $004358 HDMA6TABLEADDRL = $004368 HDMA7TABLEADDRL = $004378 HDMAXTABLEADDRH = $004309 HDMA0TABLEADDRH = $004309 HDMA1TABLEADDRH = $004319 HDMA2TABLEADDRH = $004329 HDMA3TABLEADDRH = $004339 HDMA4TABLEADDRH = $004349 HDMA5TABLEADDRH = $004359 HDMA6TABLEADDRH = $004369 HDMA7TABLEADDRH = $004379 NLTRX = $00430A NLTR0 = $00430A NLTR1 = $00431A NLTR2 = $00432A NLTR3 = $00433A NLTR4 = $00434A NLTR5 = $00435A NLTR6 = $00436A NLTR7 = $00437A HDMAXLINECOUNT = $00430A HDMA0LINECOUNT = $00430A HDMA1LINECOUNT = $00431A HDMA2LINECOUNT = $00432A HDMA3LINECOUNT = $00433A HDMA4LINECOUNT = $00434A HDMA5LINECOUNT = $00435A HDMA6LINECOUNT = $00436A HDMA7LINECOUNT = $00437A