diff options
author | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-07-06 21:13:17 -0400 |
---|---|---|
committer | Rangi <remy.oukaour+rangi42@gmail.com> | 2020-07-06 21:13:17 -0400 |
commit | dd08b8dd6b526cb191e921ba5a7b0b64d04d911f (patch) | |
tree | ce57cfb43f685439de9ecfd472889b05e51f7df1 /hram.asm | |
parent | 453bb5c38e8cdd7e1ba76e9931def26c0ba0abb5 (diff) |
Use labels for HRAM and VRAM
Diffstat (limited to 'hram.asm')
-rw-r--r-- | hram.asm | 526 |
1 files changed, 280 insertions, 246 deletions
@@ -1,370 +1,404 @@ -hDMARoutine EQU $FF80 +SECTION "HRAM", HRAM + +hDMARoutine:: ds 10 -hSoftReset EQU $FF8A ; Initialized to 16. ; Decremented each input iteration if the player ; presses the reset sequence (A+B+SEL+START). ; Soft reset when 0 is reached. +hSoftReset:: db -; base tile ID to which offsets are added -hBaseTileID EQU $FF8B - -; 3-byte BCD number -hItemPrice EQU $FF8B - -hDexWeight EQU $FF8B - -hWarpDestinationMap EQU $FF8B - -hOAMTile EQU $FF8B - -hROMBankTemp EQU $FF8B - -hPreviousTileset EQU $FF8B - -hEastWestConnectedMapWidth EQU $FF8B - -hSlideAmount EQU $FF8B +UNION +hBaseTileID:: ; base tile ID to which offsets are added +hDexWeight:: +hWarpDestinationMap:: +hOAMTile:: +hROMBankTemp:: +hPreviousTileset:: +hRLEByteValue:: + db -hRLEByteValue EQU $FF8B +hSpriteIndexOrTextID:: ; DisplayTextID's argument +hPartyMonIndex:: + db -hSpriteWidth EQU $FF8B ; in tiles -hSpriteInterlaceCounter EQU $FF8B -hSpriteHeight EQU $FF8C ; in tiles -hSpriteOffset EQU $FF8D +hVRAMSlot:: + db -; counters for blinking down arrow -hDownArrowBlinkCount1 EQU $FF8B -hDownArrowBlinkCount2 EQU $FF8C - -hSpriteDataOffset EQU $FF8B -hSpriteIndex EQU $FF8C - -hMapStride EQU $FF8B -hMapWidth EQU $FF8C +hFourTileSpriteCount:: +hHalveItemPrices:: + db -hNorthSouthConnectionStripWidth EQU $FF8B -hNorthSouthConnectedMapWidth EQU $FF8C +NEXTU +hItemPrice:: ds 3 ; BCD number -; DisplayTextID's argument -hSpriteIndexOrTextID EQU $FF8C - -hPartyMonIndex EQU $FF8C +NEXTU +hSlideAmount:: db ; the total number of tiles being shifted each time the pic slides by one tile -hSlidingRegionSize EQU $FF8C - -; 2 bytes -hEnemySpeed EQU $FF8D - -hVRAMSlot EQU $FF8D - -hFourTileSpriteCount EQU $FF8E +hSlidingRegionSize:: db ; -1 = left ; 0 = right -hSlideDirection EQU $FF8D - -hSpriteFacingDirection EQU $FF8D - -hSpriteMovementByte2 EQU $FF8D - -hSpriteImageIndex EQU $FF8D - -hLoadSpriteTemp1 EQU $FF8D -hLoadSpriteTemp2 EQU $FF8E - -hHalveItemPrices EQU $FF8E - -hSpriteOffset2 EQU $FF8F - -hOAMBufferOffset EQU $FF90 - -hSpriteScreenX EQU $FF91 -hSpriteScreenY EQU $FF92 - -hFF8F EQU $FF8F -hFF90 EQU $FF90 -hFF91 EQU $FF91 -hFF92 EQU $FF92 - -hTilePlayerStandingOn EQU $FF93 - -hSpritePriority EQU $FF94 - -; 2 bytes -hSignCoordPointer EQU $FF95 - -hNPCMovementDirections2Index EQU $FF95 - -hSwapItemID EQU $FF95 -hSwapItemQuantity EQU $FF96 - -; CalcPositionOfPlayerRelativeToNPC -hNPCSpriteOffset EQU $FF95 - -; temp value used when swapping bytes or words -hSwapTemp EQU $FF95 - -hExperience EQU $FF96 ; 3 bytes, big endian - -hMutateWY EQU $FF96 -hMutateWX EQU $FF97 - -; Multiplication and division variables are meant -; to overlap for back-to-back usage. Big endian. +hSlideDirection:: db -hMultiplicand EQU $FF96 ; 3 bytes -hMultiplier EQU $FF99 ; 1 byte -hProduct EQU $FF95 ; 4 bytes - -hDividend EQU $FF95 ; 4 bytes -hDivisor EQU $FF99 ; 1 byte -hQuotient EQU $FF95 ; 4 bytes -hRemainder EQU $FF99 ; 1 byte - -hDivideBuffer EQU $FF9A - -hMultiplyBuffer EQU $FF9B +NEXTU +hSpriteInterlaceCounter:: +hSpriteWidth:: db ; in tiles +hSpriteHeight:: db ; in tiles +hSpriteOffset:: db +NEXTU +; counters for blinking down arrow +hDownArrowBlinkCount1:: db +hDownArrowBlinkCount2:: db + +NEXTU +hMapStride:: +hEastWestConnectedMapWidth:: +hNorthSouthConnectionStripWidth:: + db +hMapWidth:: +hNorthSouthConnectedMapWidth:: + db + +NEXTU +hSpriteDataOffset:: db +hSpriteIndex:: db +hSpriteImageIndex:: +hSpriteFacingDirection:: +hSpriteMovementByte2:: + db + +NEXTU + ds 2 +hLoadSpriteTemp1:: db +hLoadSpriteTemp2:: db + +NEXTU + ds 2 +hEnemySpeed:: dw +ENDU + +UNION +hSpriteOffset2:: db +hOAMBufferOffset:: db +hSpriteScreenX:: db +hSpriteScreenY:: db + +NEXTU +hFF8F:: db +hFF90:: db +hFF91:: db +hFF92:: db +ENDU + +hTilePlayerStandingOn:: db + +hSpritePriority:: db + +UNION +;; Multiplication and division variables are meant +;; to overlap for back-to-back usage. Big endian. +UNION + ds 1 +hMultiplicand:: ds 3 +hMultiplier:: db + ds 1 +hMultiplyBuffer:: ds 4 +NEXTU +hProduct:: ds 4 +NEXTU +hDividend:: ds 4 +hDivisor:: db +hDivideBuffer:: ds 5 +NEXTU +hQuotient:: ds 4 +hRemainder:: db +ENDU + +NEXTU ; PrintNumber (big endian). -hPastLeadingZeros EQU $FF95 ; last char printed -hNumToPrint EQU $FF96 ; 3 bytes -hPowerOf10 EQU $FF99 ; 3 bytes -hSavedNumToPrint EQU $FF9C ; 3 bytes - +hPastLeadingZeros:: db ; last char printed +hNumToPrint:: ds 3 +hPowerOf10:: ds 3 +hSavedNumToPrint:: ds 3 + +NEXTU +hNPCMovementDirections2Index:: +hNPCSpriteOffset:: ; distance in steps between NPC and player -hNPCPlayerYDistance EQU $FF95 -hNPCPlayerXDistance EQU $FF96 - -hFindPathNumSteps EQU $FF97 - +hNPCPlayerYDistance:: + db +hNPCPlayerXDistance:: + db +hFindPathNumSteps:: db ; bit 0: set when the end of the path's Y coordinate matches the target's ; bit 1: set when the end of the path's X coordinate matches the target's ; When both bits are set, the end of the path is at the target's position ; (i.e. the path has been found). -hFindPathFlags EQU $FF98 - -hFindPathYProgress EQU $FF99 -hFindPathXProgress EQU $FF9A - +hFindPathFlags:: db +hFindPathYProgress:: db +hFindPathXProgress:: db ; 0 = from player to NPC ; 1 = from NPC to player -hNPCPlayerRelativePosPerspective EQU $FF9B - +hNPCPlayerRelativePosPerspective:: db + ds 1 ; bit 0: ; 0 = target is to the south or aligned ; 1 = target is to the north ; bit 1: ; 0 = target is to the east or aligned ; 1 = target is to the west -hNPCPlayerRelativePosFlags EQU $FF9D - -; some code zeroes this for no reason when writing a coin amount -hUnusedCoinsByte EQU $FF9F - -hMoney EQU $FF9F ; 3-byte BCD number -hCoins EQU $FFA0 ; 2-byte BCD number - -hDivideBCDDivisor EQU $FFA2 ; 3-byte BCD number -hDivideBCDQuotient EQU $FFA2 ; 3-byte BCD number -hDivideBCDBuffer EQU $FFA5 ; 3-byte BCD number +hNPCPlayerRelativePosFlags:: db -hSerialReceivedNewData EQU $FFA9 - -; $01 = using external clock -; $02 = using internal clock -; $ff = establishing connection -hSerialConnectionStatus EQU $FFAA +NEXTU +hSwapItemID:: db +hSwapItemQuantity:: db -hSerialIgnoringInitialData EQU $FFAB +NEXTU +hSignCoordPointer:: dw -hSerialSendData EQU $FFAC +NEXTU + ds 1 +hMutateWY:: db +hMutateWX:: db -hSerialReceiveData EQU $FFAD +NEXTU +; temp value used when swapping bytes or words +hSwapTemp:: db +hExperience:: ds 3 ; big endian +ENDU -; these values are copied to SCX, SCY, and WY during V-blank -hSCX EQU $FFAE -hSCY EQU $FFAF -hWY EQU $FFB0 +UNION +hMoney:: ds 3 ; BCD number +NEXTU +; some code zeroes this for no reason when writing a coin amount +hUnusedCoinsByte:: db +hCoins:: ds 2 ; BCD number +ENDU -hJoyLast EQU $FFB1 -hJoyReleased EQU $FFB2 -hJoyPressed EQU $FFB3 -hJoyHeld EQU $FFB4 -hJoy5 EQU $FFB5 -hJoy6 EQU $FFB6 -hJoy7 EQU $FFB7 +hDivideBCDDivisor:: +hDivideBCDQuotient:: + ds 3 ; BCD number +hDivideBCDBuffer:: + ds 3 ; BCD number -hLoadedROMBank EQU $FFB8 + ds 1 -hSavedROMBank EQU $FFB9 +hSerialReceivedNewData:: db +; $01 = using external clock +; $02 = using internal clock +; $ff = establishing connection +hSerialConnectionStatus:: db +hSerialIgnoringInitialData:: db +hSerialSendData:: db +hSerialReceiveData:: db + +; these values are copied to rSCX, rSCY, and rWY during V-blank +hSCX:: db +hSCY:: db +hWY:: db + +hJoyLast:: db +hJoyReleased:: db +hJoyPressed:: db +hJoyHeld:: db +hJoy5:: db +hJoy6:: db +hJoy7:: db + +hLoadedROMBank:: db +hSavedROMBank:: db ; is automatic background transfer during V-blank enabled? ; if nonzero, yes ; if zero, no -hAutoBGTransferEnabled EQU $FFBA - -TRANSFERTOP EQU 0 -TRANSFERMIDDLE EQU 1 -TRANSFERBOTTOM EQU 2 +hAutoBGTransferEnabled:: db ; 00 = top third of background ; 01 = middle third of background ; 02 = bottom third of background -hAutoBGTransferPortion EQU $FFBB +hAutoBGTransferPortion:: db ; the destination address of the automatic background transfer -hAutoBGTransferDest EQU $FFBC ; 2 bytes +hAutoBGTransferDest:: dw -hRedrawMapViewRowOffset EQU $FFBE +hRedrawMapViewRowOffset:: db ; temporary storage for stack pointer during memory transfers that use pop ; to increase speed -hSPTemp EQU $FFBF ; 2 bytes +hSPTemp:: dw ; source address for VBlankCopyBgMap function ; the first byte doubles as the byte that enabled the transfer. ; if it is 0, the transfer is disabled ; if it is not 0, the transfer is enabled ; this means that XX00 is not a valid source address -hVBlankCopyBGSource EQU $FFC1 ; 2 bytes +hVBlankCopyBGSource:: dw ; destination address for VBlankCopyBgMap function -hVBlankCopyBGDest EQU $FFC3 ; 2 bytes +hVBlankCopyBGDest:: dw ; number of rows for VBlankCopyBgMap to copy -hVBlankCopyBGNumRows EQU $FFC5 +hVBlankCopyBGNumRows:: db ; size of VBlankCopy transfer in 16-byte units -hVBlankCopySize EQU $FFC6 +hVBlankCopySize:: db ; source address for VBlankCopy function -hVBlankCopySource EQU $FFC7 +hVBlankCopySource:: dw ; destination address for VBlankCopy function -hVBlankCopyDest EQU $FFC9 +hVBlankCopyDest:: dw ; size of source data for VBlankCopyDouble in 8-byte units -hVBlankCopyDoubleSize EQU $FFCB +hVBlankCopyDoubleSize:: db ; source address for VBlankCopyDouble function -hVBlankCopyDoubleSource EQU $FFCC +hVBlankCopyDoubleSource:: dw ; destination address for VBlankCopyDouble function -hVBlankCopyDoubleDest EQU $FFCE +hVBlankCopyDoubleDest:: dw ; controls whether a row or column of 2x2 tile blocks is redrawn in V-blank ; 00 = no redraw ; 01 = redraw column ; 02 = redraw row -hRedrawRowOrColumnMode EQU $FFD0 - -REDRAW_COL EQU 1 -REDRAW_ROW EQU 2 +hRedrawRowOrColumnMode:: db -hRedrawRowOrColumnDest EQU $FFD1 +hRedrawRowOrColumnDest:: dw -hRandomAdd EQU $FFD3 -hRandomSub EQU $FFD4 +hRandomAdd:: db +hRandomSub:: db -hFrameCounter EQU $FFD5 ; decremented every V-blank (used for delays) +hFrameCounter:: db ; decremented every V-blank (used for delays) ; V-blank sets this to 0 each time it runs. ; So, by setting it to a nonzero value and waiting for it to become 0 again, ; you can detect that the V-blank handler has run since then. -hVBlankOccurred EQU $FFD6 +hVBlankOccurred:: db ; 00 = indoor ; 01 = cave ; 02 = outdoor ; this is often set to 00 in order to turn off water and flower BG tile animations -hTilesetType EQU $FFD7 +hTilesetType:: db -hMovingBGTilesCounter1 EQU $FFD8 +hMovingBGTilesCounter1:: db -hCurrentSpriteOffset EQU $FFDA ; multiple of $10 + ds 1 -hItemCounter EQU $FFDB +hCurrentSpriteOffset:: db ; multiple of $10 -hGymGateIndex EQU $FFDB -hGymGateAnswer EQU $FFDC +UNION +hPlayerFacing:: db +hPlayerYCoord:: db +hPlayerXCoord:: db -hGymTrashCanRandNumMask EQU $FFDB - -hDexRatingNumMonsSeen EQU $FFDB -hDexRatingNumMonsOwned EQU $FFDC +NEXTU ; $00 = bag full ; $01 = got item ; $80 = didn't meet required number of owned mons ; $FF = player cancelled -hOaksAideResult EQU $FFDB - -hSavedCoordIndex EQU $FFDB +hOaksAideResult:: +hOaksAideRequirement:: ; required number of owned mons + db +hOaksAideRewardItem:: db +hOaksAideNumMonsOwned:: db + +NEXTU +hVendingMachineItem:: db +hVendingMachinePrice:: ds 3 ; BCD number + +NEXTU +hGymGateIndex:: db +hGymGateAnswer:: db + +NEXTU +hDexRatingNumMonsSeen:: db +hDexRatingNumMonsOwned:: db + +NEXTU +hItemToRemoveID:: db +hItemToRemoveIndex:: db + +NEXTU +hItemCounter:: +hSavedCoordIndex:: +hMissableObjectIndex:: +hGymTrashCanRandNumMask:: + db + +NEXTU +hFFDB:: db +hFFDC:: db +ENDU + + ds 1 + +hBackupGymGateIndex:: +hUnlockedSilphCoDoors:: + db -hOaksAideRequirement EQU $FFDB ; required number of owned mons -hOaksAideRewardItem EQU $FFDC -hOaksAideNumMonsOwned EQU $FFDD - -hPlayerFacing EQU $FFDB -hPlayerYCoord EQU $FFDC -hPlayerXCoord EQU $FFDD - -hMissableObjectIndex EQU $FFDB - -hItemToRemoveID EQU $FFDB -hItemToRemoveIndex EQU $FFDC - -hVendingMachineItem EQU $FFDB -hVendingMachinePrice EQU $FFDC ; 3-byte BCD number - -hFFDB EQU $FFDB -hFFDC EQU $FFDC - -hBackupGymGateIndex EQU $FFE0 +; the first tile ID in a sequence of tile IDs that increase by 1 each step +hStartTileID:: db -hUnlockedSilphCoDoors EQU $FFE0 + ds 2 -; the first tile ID in a sequence of tile IDs that increase by 1 each step -hStartTileID EQU $FFE1 +hNewPartyLength:: db -hNewPartyLength EQU $FFE4 +UNION +hDividend2:: db +hDivisor2:: db +hQuotient2:: db -hIsHiddenMissableObject EQU $FFE5 +NEXTU +hIsHiddenMissableObject:: db +ENDU -hDividend2 EQU $FFE5 -hDivisor2 EQU $FFE6 -hQuotient2 EQU $FFE7 +hMapROMBank:: db -hMapROMBank EQU $FFE8 +hSpriteVRAMSlotAndFacing:: db -hSpriteVRAMSlotAndFacing EQU $FFE9 +hCoordsInFrontOfPlayerMatch:: +hSpriteAnimFrameCounter:: + db -hCoordsInFrontOfPlayerMatch EQU $FFEA +UNION +hSpriteScreenYCoord:: db +hSpriteScreenXCoord:: db +hSpriteMapYCoord:: db +hSpriteMapXCoord:: db -hSpriteAnimFrameCounter EQU $FFEA +NEXTU +hItemAlreadyFound:: db + ds 2 +hDidntFindAnyHiddenObject:: db -hSpriteScreenYCoord EQU $FFEB -hSpriteScreenXCoord EQU $FFEC -hSpriteMapYCoord EQU $FFED -hSpriteMapXCoord EQU $FFEE +NEXTU + ds 1 +hSavedMapTextPtr:: dw + ds 1 +ENDU -hItemAlreadyFound EQU $FFEB -hDidntFindAnyHiddenObject EQU $FFEE + ds 4 -hSavedMapTextPtr EQU $FFEC +hWhoseTurn:: db ; 0 on player's turn, 1 on enemy's turn -hWhoseTurn EQU $FFF3 ; 0 on player’s turn, 1 on enemy’s turn +hClearLetterPrintingDelayFlags:: db -hClearLetterPrintingDelayFlags EQU $FFF4 + ds 1 ; bit 0: draw HP fraction to the right of bar instead of below (for party menu) ; bit 1: menu is double spaced -hFlagsFFF6 EQU $FFF6 +hFlagsFFF6:: db + +hFieldMoveMonMenuTopMenuItemX:: db -hFieldMoveMonMenuTopMenuItemX EQU $FFF7 +hJoyInput:: db -hDisableJoypadPolling EQU $FFF9 +hDisableJoypadPolling:: db -hJoyInput EQU $FFF8 + ds 5 |