;================================================================================ ; RAM Labels & Assertions ;-------------------------------------------------------------------------------- ; This module is primarily concerned with labeling WRAM addresses used by the ; randomizer and documenting their usage. ; ; See the JP 1.0 disassembly for reference ; (https://github.com/spannerisms/jpdasm/ - 31/10/2022) ;-------------------------------------------------------------------------------- pushpc org 0 ;================================================================================ ; Direct Page ;-------------------------------------------------------------------------------- base $7E0000 Scrap: Scrap00: skip 1 ; Used as short-term scratch space. If you need some short-term Scrap01: skip 1 ; RAM, you can often use these. Double check that the next use Scrap02: skip 1 ; of the addresses you want to use is a write. Scrap03: skip 1 ; Scrap04: skip 1 ; Scrap05: skip 1 ; Scrap06: skip 1 ; Scrap07: skip 1 ; Scrap08: skip 1 ; Scrap09: skip 1 ; Scrap0A: skip 1 ; Scrap0B: skip 1 ; Scrap0C: skip 1 ; Scrap0D: skip 1 ; Scrap0E: skip 1 ; Scrap0F: skip 1 ; LinkPosY = $7E0020 ; 2 bytes LinkPosX = $7E0022 ; 2 bytes RoomIndex = $7E00A0 ; 2 bytes, UW room index ;================================================================================ ; Bank 7E ;-------------------------------------------------------------------------------- ;================================================================================ ; Mirrored WRAM ;-------------------------------------------------------------------------------- ; Pages 0x00–0x1F of Bank7E are mirrored to every program bank ALTTP uses. ;-------------------------------------------------------------------------------- CurrentMSUTrack = $7E010B CurrentVolume = $7E0127 TargetVolume = $7E0129 CurrentControlRequest = $7E0133 ; Last thing written to MusicControlRequest MusicControl = $7E012B MusicControlRequest = $7E012C ItemReceiptID = $7E02D8 NMIAux = $7E0632 SpritePosYLow = $7E0D00 ; all $10 bytes SpritePosXLow = $7E0D10 SpritePosYHigh = $7E0D20 SpritePosXHigh = $7E0D30 SpriteAuxTable = $7E0DA0 ; 0x1F bytes SpriteAITable = $7E0DD0 SpriteTypeTable = $7E0E20 SpriteDirectionTable = $7E0EB0 ToastBuffer = $7E1E0E ; 2 bytes DoToast MSUResumeTime = $7E1E6B ; 4 bytes MSUResumeControl = $7E1E6F MSUFallbackTable = $7E1E70 ; 8 bytes MSUDelayedCommand = $7E1E79 MSUPackCount = $7E1E7A MSUPackCurrent = $7E1E7B MSUPackRequest = $7E1E7C MSULoadedTrack = $7E1E7D ; 2 bytes MSUResumeTrack = $7E1E7F ;1E90 ClockHours = $7E1E90 ; Clock Hours ClockMinutes = $7E1E94 ; Clock Minutes ClockSeconds = $7E1E98 ; Clock Seconds ClockBuffer = $7E1E9C ; Clock Temporary ;1EA0 ScratchBufferNV = $7E1EA0 ; Callee preserved ;1EB0 ScratchBufferV = $7E1EB0 ; Caller preserved ;1EC0 ;1ED0 ;1EE0 ;1EF0 ;================================================================================ ; UNMIRRORED WRAM ; Addresses from here on can only be accessed with long addressing ; or absolute addressing with the appropriate data bank set ;-------------------------------------------------------------------------------- TileUploadBuffer = $7EA180 ; 0x300 bytes SpriteOAM = $7EC025 ; ; $7EC700 - Tile map buffer for HUD HUDKeyIcon = $7EC726 HUDGoalIndicator = $7EC72A HUDPrizeIcon = $7EC742 HUDRupees = $7EC750 HUDBombCount = $7EC75A HUDArrowCount = $7EC760 HUDKeyDigits = $7EC764 BigRAM = $7EC900 ; Big buffer of free ram (0x1F00) ;================================================================================ ; Bank 7F ;-------------------------------------------------------------------------------- base $7F5000 RedrawFlag: skip 1 ; skip 2 ; HexToDecDigit1: skip 1 ; Space for storing the result of hex to decimal conversion. HexToDecDigit2: skip 1 ; Digits are stored from high to low. HexToDecDigit3: skip 1 ; HexToDecDigit4: skip 1 ; HexToDecDigit5: skip 1 ; SpriteSkipEOR: skip 2 ; Used in utilities.asm to determine when to skip drawing sprites. Zero-padded skip $2B ; Unused AltTextFlag: skip 2 ; dialog.asm: Determines whether to load from vanilla decompression buffer ; or from a secondary buffer (used for things like free dungeon item text) BossKills: skip 1 ; LagTime: skip 4 ; Computed during stats preparation for display RupeesCollected: skip 2 ; Computed during stats preparation for display NonChestCounter: skip 2 ; Computed during stats preparation for display skip 2 ; Unused TileUploadOffsetOverride: skip 2 ; Offset override for loading sprite gfx skip 3 ; skip 9 ; ; Shop Block $7F5050 - $7F506F ShopId: skip 1 ; Shop ID. Used for indexing and loading inventory for custom shops ShopType: skip 1 ; Shop type. $FF = vanilla shop ; t - - - - - - - ; t = Take-any ShopInventory: skip $0D ; For three possible shop items, row major: ; [Item ID][Price low][Price High][Purchase Count] ShopState: skip 1 ; - - - - - l c r | Bitfield that determines whether to draw an item ShopCapacity: skip 1 ; Four lower bits of shop_config in ShopTable, number of items 1-3 ShopScratch: skip 1 ; Scratch byte used in shop drawing routines ShopSRAMIndex: skip 1 ; SRAM index for purchase counts ShopMerchant: skip 1 ; Loaded from ShopTable and used to jump to one of four drawing routines skip 2 ; Unused ShopPriceColumn: skip 3 ; Stores coordinates for drawing prices in shops skip 7 ; skip 2 ; Reserved for OneMind OneMindId: skip 1 ; Current OneMind player OneMindTimerRAM: skip 2 ; Frame counter for OneMind skip 9 ; Unused ClockStatus: skip 2 ; 2 bytes second always zero padding ; ---- --dn ; d - DNF mode ; n - Negative skip $10 ; Unused RNGLockIn: skip 1 ; Used for RNG item (currently unused by rando) BusyItem: skip 1 ; Flags for indicating when these things are "busy" BusyHealth: skip 1 ; e.g. doing some animation BusyMagic: skip 1 ; DialogOffsetPointer: skip 2 ; Offset and return pointer into new dialog buffer used DialogReturnPointer: skip 2 ; for e.g. free dungeon item text. skip 1 ; Unused PreviousOverworldDoor: skip 1 ; Previous overworld door is cached or initialized here skip 1 ; Reserved skip 1 ; Unused DuckMapFlag: skip 1 ; Temporary flag used and reset by flute map drawing routine StalfosBombDamage: skip 1 ; Relocated from damage table ValidKeyLoaded: skip 1 ; TextBoxDefer: skip 1 ; Flag used to defer post-item text boxes skip $10 ; Unused skip $10 ; Reserved for enemizer ; Most of these modifiers are intended to be written to by ; a 3rd party (e.g. Crowd Control.) Writer is responsible ; for zeroing. SwordModifier: skip 1 ; Adds level to current sword. Doesn't change graphics. ShieldModifier: skip 1 ; Not implemented ArmorModifier: skip 1 ; Adds level to current mail. Doesn't change graphics. MagicModifier: skip 1 ; Adds level to magic consumption (1/2, 1/4.) LightConeModifier: skip 1 ; Gives lamp cone when set to 1 CuccoStormer: skip 1 ; Non-zero write causes storm. OldManDash: skip 1 ; Unused IceModifier: skip 1 ; - - - g - - - i | Flipping either sets ice physics InfiniteArrows: skip 1 ; Setting these to $01 will give infinite ammo. Set by InfiniteBombs: skip 1 ; EscapeAssist. InfiniteMagic: skip 1 ; ControllerInverter: skip 1 ; $01 = D-pad | $02 = Buttons | $03 = Buttons and D-Pad ; >=$04 = Swap buttons and D-pad OHKOFlag: skip 1 ; Any non-zero write sets OHKO mode SpriteSwapper: skip 1 ; Loads new link sprite and glove/armor palette. No gfx or ; code currently in base ROM for this. BootsModifier: skip 1 ; $01 = Give dash ability skip 1 ; Unused ; Crypto Block ($7F50D0 - $7F51FF) KeyBase: skip $10 ; y: skip 4 ; z: skip 4 ; Sum: skip 4 ; p: skip 4 ; e: skip 2 ; CryptoScratch: skip $0E ; CryptoBuffer: ; v: skip $100 ; RNGPointers: skip $100 ; Pointers for static RNG ; Network I/O block. See servicerequest.asm. Rx and Tx channels ; also allocated 8 persistent bytes each in sram.asm. RxBuffer: skip $7F ; RxStatus: skip 1 ; TxBuffer: skip $7F ; TxStatus: skip 1 ; skip $10 ; Unused CompassTotalsWRAM: skip $10 ; skip $10 skip $40 ; Reserved for general dungeon tracking data. May have over ; allocated here. Feel free to reassign. skip $40 ; Unused skip $260 ; Unused DialogBuffer: skip $100 ; Dialog Buffer ;================================================================================ ; RAM Assertions ;-------------------------------------------------------------------------------- macro assertRAM(label, address) assert