diff --git a/src/field.asm b/src/field.asm index 350b07a..cc26cc7 100644 --- a/src/field.asm +++ b/src/field.asm @@ -32,7 +32,7 @@ wField:: ds (10*24) wShadowField:: ds (14*26) -SECTION "Field High Variables", HRAM +SECTION "High Field Variables", HRAM hPieceDataBase: ds 2 hPieceDataBaseFast: ds 2 hPieceDataOffset: ds 1 @@ -1435,9 +1435,9 @@ FieldDelay:: jr nz, :- ld a, l - ld [wScoreIncrement], a + ldh [hScoreIncrement], a ld a, h - ld [wScoreIncrement+1], a + ldh [hScoreIncrement+1], a call IncreaseScore ret diff --git a/src/input.asm b/src/input.asm index 3e15782..195770d 100644 --- a/src/input.asm +++ b/src/input.asm @@ -22,7 +22,7 @@ DEF INPUT_ASM EQU 1 INCLUDE "globals.asm" -SECTION "Input Variables", HRAM +SECTION "High Input Variables", HRAM hUpState:: ds 1 hDownState:: ds 1 hLeftState:: ds 1 diff --git a/src/interrupts.asm b/src/interrupts.asm index 0679310..d9c18bb 100644 --- a/src/interrupts.asm +++ b/src/interrupts.asm @@ -22,7 +22,7 @@ DEF INTERRUPTS_ASM EQU 1 INCLUDE "globals.asm" -SECTION "Interrupt Variables", HRAM +SECTION "High Interrupt Variables", HRAM hLCDCCtr:: ds 1 diff --git a/src/level.asm b/src/level.asm index 5739e4f..56c2b48 100644 --- a/src/level.asm +++ b/src/level.asm @@ -22,13 +22,7 @@ DEF LEVEL_ASM EQU 1 INCLUDE "globals.asm" -SECTION "Level Variables", WRAM0 -wCLevel:: ds 4 -wNLevel:: ds 6 ; The extra 2 bytes will be clobbered by the sprite drawing functions. -wPrevHundreds:: ds 1 - - -SECTION "Critical Level Variables", HRAM +SECTION "High Level Variables", HRAM hCurrentDAS:: ds 1 hCurrentARE:: ds 1 hCurrentLockDelay:: ds 1 @@ -40,6 +34,9 @@ hSpeedCurvePtr:: ds 2 hStartSpeed:: ds 2 hRequiresLineClear:: ds 1 hLevel:: ds 2 +hCLevel:: ds 4 +hNLevel:: ds 6 ; The extra 2 bytes will be clobbered by the sprite drawing functions. +hPrevHundreds:: ds 1 SECTION "Level Functions", ROM0 @@ -47,20 +44,18 @@ LevelInit:: xor a, a ldh [hLevel], a ldh [hLevel+1], a - ld hl, wCLevel - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl], a - ld hl, wNLevel - ld [hl+], a - inc a - ld [hl+], a - dec a - ld [hl+], a - ld [hl], a + ldh [hCLevel], a + ldh [hCLevel+1], a + ldh [hCLevel+2], a + ldh [hCLevel+3], a + ldh [hNLevel], a + ldh [hNLevel+2], a ; Note +1 is inited later. + ldh [hNLevel+3], a ldh [hRequiresLineClear], a + ld a, 1 + ldh [hNLevel+1], a + ldh a, [hStartSpeed] ld l, a ldh a, [hStartSpeed+1] @@ -70,19 +65,19 @@ LevelInit:: ld a, [hl+] ld b, a and a, $0F - ld [wCLevel+3], a + ldh [hCLevel+3], a ld a, b swap a and a, $0F - ld [wCLevel+2], a + ldh [hCLevel+2], a ld a, [hl+] ld b, a and a, $0F - ld [wCLevel+1], a + ldh [hCLevel+1], a ld a, b swap a and a, $0F - ld [wCLevel], a + ldh [hCLevel], a ld a, l ldh [hSpeedCurvePtr], a @@ -99,19 +94,19 @@ LevelInit:: ld a, [hl+] ld b, a and a, $0F - ld [wNLevel+3], a + ldh [hNLevel+3], a ld a, b swap a and a, $0F - ld [wNLevel+2], a + ldh [hNLevel+2], a ld a, [hl+] ld b, a and a, $0F - ld [wNLevel+1], a + ldh [hNLevel+1], a ld a, b swap a and a, $0F - ld [wNLevel], a + ldh [hNLevel], a call DoSpeedUp ret @@ -120,7 +115,7 @@ LevelInit:: ; Levels may only increment by single digits. LevelUp:: ; Return if we're maxed out. - ld hl, wCLevel + ld hl, hCLevel ld a, $09 and a, [hl] inc hl @@ -148,12 +143,12 @@ LevelUp:: ldh [hLevel], a ; Save the current hundred digit. - ld a, [wCLevel+1] - ld [wPrevHundreds], a + ldh a, [hCLevel+1] + ldh [hPrevHundreds], a ; Increment LSD. .doit - ld hl, wCLevel+3 + ld hl, hCLevel+3 ld a, [hl] add a, e ld [hl], a @@ -192,10 +187,10 @@ LevelUp:: ; We're maxed out. Both levels should be set to 9999. ld a, 9 - ld [hl-], a - ld [hl-], a - ld [hl-], a - ld [hl], a + ldh [hCLevel], a + ldh [hCLevel+1], a + ldh [hCLevel+2], a + ldh [hCLevel+3], a call DoSpeedUp ld a, SFX_RANK_UP call SFXEnqueue @@ -203,7 +198,7 @@ LevelUp:: .checknlevel ; Make wNLevel make sense. - ld hl, wCLevel + ld hl, hCLevel ld a, $09 and a, [hl] inc hl @@ -212,13 +207,12 @@ LevelUp:: ; If wCLevel begins 99, wNLevel should be 9999. jr nz, :+ ld a, 9 - ld hl, wNLevel - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl], a + ldh [hNLevel], a + ldh [hNLevel+1], a + ldh [hNLevel+2], a + ldh [hNLevel+3], a ; If the last two digits of wCLevel are 98, play the bell. - ld hl, wCLevel+2 + ld hl, hCLevel+2 ld a, [hl+] cp a, 9 jr nz, .checkspeedup @@ -232,31 +226,31 @@ LevelUp:: jr .leveljinglemaybe ; Otherwise check the second digit of wCLevel. -: ld hl, wCLevel+1 +: ld hl, hCLevel+1 ld a, [hl] ; If it's 9, wNLevel should be y0xx. With y being the first digit of wCLevel+1 cp a, 9 jr nz, :+ - ld hl, wNLevel+1 + ld hl, hNLevel+1 xor a, a ld [hl], a - ld hl, wCLevel + ld hl, hCLevel ld a, [hl] inc a - ld hl, wNLevel + ld hl, hNLevel ld [hl], a jr .bellmaybe ; Otherwise just set the second digit of wNLevel to the second digit of wCLevel + 1. -: ld hl, wCLevel+1 +: ld hl, hCLevel+1 ld a, [hl] inc a - ld hl, wNLevel+1 + ld hl, hNLevel+1 ld [hl], a .bellmaybe ; If the last two digits of wCLevel are 99, play the bell. - ld hl, wCLevel+2 + ld hl, hCLevel+2 ld a, [hl+] and a, [hl] cp a, 9 @@ -267,9 +261,9 @@ LevelUp:: call SFXEnqueue .leveljinglemaybe - ld a, [wPrevHundreds] + ldh a, [hPrevHundreds] ld b, a - ld a, [wCLevel+1] + ld a, [hCLevel+1] cp a, b jr z, .checkspeedup ld a, SFX_LEVEL_UP @@ -281,14 +275,14 @@ LevelUp:: jr z, :+ swap a and a, $0F - ld hl, wCLevel + ld hl, hCLevel cp a, [hl] ret nc : ldh a, [hNextSpeedUp] and a, $0F jr z, :+ - ld hl, wCLevel+1 + ld hl, hCLevel+1 cp a, [hl] jr z, :+ ret nc @@ -298,7 +292,7 @@ LevelUp:: jr z, :+ swap a and a, $0F - ld hl, wCLevel+2 + ld hl, hCLevel+2 cp a, [hl] jr z, :+ ret nc @@ -306,19 +300,11 @@ LevelUp:: : ldh a, [hNextSpeedUp+1] and a, $0F jr z, :+ - ld hl, wCLevel+3 + ld hl, hCLevel+3 cp a, [hl] jr z, :+ ret nc - ldh a, [hNextSpeedUp+0] - ldh a, [hNextSpeedUp+1] - - ld a, [wCLevel+0] - ld a, [wCLevel+1] - ld a, [wCLevel+2] - ld a, [wCLevel+3] - : call DoSpeedUp ret diff --git a/src/main.asm b/src/main.asm index d354b28..eb6be10 100644 --- a/src/main.asm +++ b/src/main.asm @@ -25,7 +25,7 @@ INCLUDE "res/gameplay_map.inc" INCLUDE "res/title_map.inc" -SECTION "Globals", HRAM +SECTION "High Globals", HRAM hGameState:: ds 1 hSwapAB:: ds 1 diff --git a/src/rng.asm b/src/rng.asm index e2c5fff..662eb4a 100644 --- a/src/rng.asm +++ b/src/rng.asm @@ -22,40 +22,38 @@ DEF RNG_ASM EQU 1 INCLUDE "globals.asm" -SECTION "RNG Variables", WRAM0 -wRNGSeed: ds 4 -wPieceHistory: ds 4 -wNextPiece:: ds 1 +SECTION "High RNG Variables", HRAM +hRNGSeed: ds 4 +hPieceHistory: ds 4 +hNextPiece:: ds 1 section "RNG Functions", ROM0 RNGInit:: ; Do some bit fuckery on the seed using the gameboy's free-running timers. - ld hl, wRNGSeed ldh a, [rDIV] xor a, [hl] - ld [hl+], a + ldh [hRNGSeed], a ldh a, [rTIMA] xor a, [hl] - ld [hl+], a + ldh [hRNGSeed+1], a ldh a, [rDIV] xor a, [hl] - ld [hl+], a + ldh [hRNGSeed+2], a ldh a, [rTIMA] xor a, [hl] - ld [hl], a + ldh [hRNGSeed+3], a ; Initialize the next history. - ld hl, wPieceHistory ld a, PIECE_Z - ld [hl+], a - ld [hl+], a + ld [hPieceHistory], a + ld [hPieceHistory+1], a ld a, PIECE_S - ld [hl+], a - ld [hl], a + ld [hPieceHistory+2], a + ld [hPieceHistory+3], a ; Get the first piece and make sure it's not Z, S or O. : call NextPiece @@ -67,10 +65,8 @@ RNGInit:: jr z, :- ; Store it. - ld hl, wPieceHistory - ld [hl], a - ld hl, wNextPiece - ld [hl], a + ldh [hPieceHistory], a + ld [hNextPiece], a ret @@ -80,7 +76,7 @@ GetNextPiece:: jr z, :+ call NextPiece - ld hl, wPieceHistory + ld hl, hPieceHistory cp a, [hl] jr z, :- inc hl @@ -93,20 +89,16 @@ GetNextPiece:: cp a, [hl] jr z, :- -: ld hl, wNextPiece - ld [hl], a +: ldh [hNextPiece], a ld b, a - ld hl, wPieceHistory+2 - ld a, [hl+] - ld [hl], a - ld hl, wPieceHistory+1 - ld a, [hl+] - ld [hl], a - ld hl, wPieceHistory - ld a, [hl+] - ld [hl-], a + ldh a, [hPieceHistory+2] + ldh [hPieceHistory+3], a + ldh a, [hPieceHistory+1] + ldh [hPieceHistory+2], a + ldh a, [hPieceHistory] + ldh [hPieceHistory+1], a ld a, b - ld [hl], a + ldh [hPieceHistory], a ret @@ -120,7 +112,7 @@ NextPiece: NextByte: ; Load seed - ld hl,wRNGSeed+3 + ld hl, hRNGSeed+3 ld a, [hl-] ld b, a ld a, [hl-] diff --git a/src/score.asm b/src/score.asm index e24d4f1..1071b77 100644 --- a/src/score.asm +++ b/src/score.asm @@ -22,54 +22,50 @@ DEF SCORE_ASM EQU 1 INCLUDE "globals.asm" -SECTION "Score Variables", WRAM0 -wScore:: ds 6 -wScoreIncrement:: ds 2 -wScoreIncrementBCD:: ds 6 -wScoreIncrementHead:: ds 1 +SECTION "Score Variables", HRAM +hScore:: ds 6 +hScoreIncrement:: ds 2 +hScoreIncrementBCD:: ds 6 +hScoreIncrementHead:: ds 1 SECTION "Score Functions", ROM0 ScoreInit:: xor a, a - ld hl, wScore - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl], a - ld hl, wScoreIncrement - ld [hl+], a - ld [hl], a + ldh [hScore], a + ldh [hScore+1], a + ldh [hScore+2], a + ldh [hScore+3], a + ldh [hScore+4], a + ldh [hScore+5], a + ldh [hScoreIncrement], a + ldh [hScoreIncrement+1], a ld a, $FF - ld hl, wScoreIncrementBCD - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl], a + ldh [hScoreIncrementBCD], a + ldh [hScoreIncrementBCD+1], a + ldh [hScoreIncrementBCD+2], a + ldh [hScoreIncrementBCD+3], a + ldh [hScoreIncrementBCD+4], a + ldh [hScoreIncrementBCD+5], a ret ; Increases the current score by the amount in wScoreIncrement. IncreaseScore:: ; Wipe the old BCD score. ld a, $FF - ld hl, wScoreIncrementBCD - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl+], a - ld [hl], a + ldh [hScoreIncrementBCD], a + ldh [hScoreIncrementBCD+1], a + ldh [hScoreIncrementBCD+2], a + ldh [hScoreIncrementBCD+3], a + ldh [hScoreIncrementBCD+4], a + ldh [hScoreIncrementBCD+5], a ; First convert to BCD. - ld a, [wScoreIncrement] + ldh a, [hScoreIncrement] ld l, a - ld a, [wScoreIncrement+1] + ldh a, [hScoreIncrement+1] ld h, a - ld de, wScoreIncrementBCD + ld de, hScoreIncrementBCD ld bc, -10000 call .doConvert ld bc, -1000 @@ -109,12 +105,12 @@ IncreaseScore:: ret .postConvert - ld hl, wScoreIncrement + ld hl, hScoreIncrement xor a, a ld [hl+], a ld [hl], a - ld de, wScoreIncrementBCD+5 + ld de, hScoreIncrementBCD+5 ld b, 0 ld a, $FF : cp a, b @@ -125,22 +121,22 @@ IncreaseScore:: .preAddDigit ; B contains the amount of times we need to shift the BCD score to the right. - ld a, [wScoreIncrementBCD+4] - ld [wScoreIncrementBCD+5], a - ld a, [wScoreIncrementBCD+3] - ld [wScoreIncrementBCD+4], a - ld a, [wScoreIncrementBCD+2] - ld [wScoreIncrementBCD+3], a - ld a, [wScoreIncrementBCD+1] - ld [wScoreIncrementBCD+2], a - ld a, [wScoreIncrementBCD] - ld [wScoreIncrementBCD+1], a + ldh a, [hScoreIncrementBCD+4] + ldh [hScoreIncrementBCD+5], a + ldh a, [hScoreIncrementBCD+3] + ldh [hScoreIncrementBCD+4], a + ldh a, [hScoreIncrementBCD+2] + ldh [hScoreIncrementBCD+3], a + ldh a, [hScoreIncrementBCD+1] + ldh [hScoreIncrementBCD+2], a + ldh a, [hScoreIncrementBCD] + ldh [hScoreIncrementBCD+1], a xor a, a - ld [wScoreIncrementBCD], a + ldh [hScoreIncrementBCD], a dec b jr z, :- - ld hl, wScore+5 - ld de, wScoreIncrementBCD+5 + ld hl, hScore+5 + ld de, hScoreIncrementBCD+5 ; DE is now pointing to the last digit of the BCD score. ; HL points at the last digit of the displayed score. @@ -182,13 +178,13 @@ IncreaseScore:: jr nz, .addDigit ; Check if the score has rolled over. - ld a, [wScore] + ldh a, [hScore] cp a, $0A ret c ; If it has, reset the score. xor a, a - ld [wScore], a + ldh [hScore], a ld a, SFX_RANK_UP call SFXEnqueue ret diff --git a/src/sfx.asm b/src/sfx.asm index 5b7183a..8117a1d 100644 --- a/src/sfx.asm +++ b/src/sfx.asm @@ -1279,7 +1279,7 @@ sSFXReadyGo:: sSFXReadyGoEnd:: -SECTION "SFX Variables", HRAM +SECTION "High SFX Variables", HRAM hPlayhead:: ds 2 hPlayQueue:: ds 4 diff --git a/src/state_gameplay.asm b/src/state_gameplay.asm index 7b9c1c6..18bae79 100644 --- a/src/state_gameplay.asm +++ b/src/state_gameplay.asm @@ -34,7 +34,7 @@ DEF MODE_PRE_GAME_OVER EQU 8 DEF MODE_PAUSED EQU 9 -SECTION "Critical Gameplay Variables", HRAM +SECTION "High Gameplay Variables", HRAM hCurrentPiece:: ds 1 hCurrentPieceX:: ds 1 hCurrentPieceY:: ds 1 @@ -180,7 +180,7 @@ postGoMode: ; Fetch the next piece. fetchPieceMode: - ld a, [wNextPiece] + ldh a, [hNextPiece] ldh [hCurrentPiece], a call GetNextPiece @@ -257,7 +257,7 @@ fetchPieceMode: cp a, 0 jr nz, .skipJingle .playNextJingle - ld a, [wNextPiece] + ldh a, [hNextPiece] call SFXEnqueue .skipJingle ld a, MODE_SPAWN_PIECE @@ -462,7 +462,7 @@ gameOverMode: ; Quit : ldh a, [hBState] cp a, 1 - jr nz, :+ + jp nz, drawStaticInfo call SwitchToTitle jp EventLoopPostHandler @@ -524,22 +524,22 @@ pauseMode: ; Always draw the score, level, next piece, and held piece. drawStaticInfo: -: ld a, [wNextPiece] +: ldh a, [hNextPiece] call ApplyNext ldh a, [hHeldPiece] call ApplyHold ld hl, wSPRScore1 - ld de, wScore + ld de, hScore call ApplyNumbers ld hl, wSPRCLevel1 - ld de, wCLevel + ld de, hCLevel call ApplyNumbers ld hl, wSPRNLevel1 - ld de, wNLevel + ld de, hNLevel call ApplyNumbers jp EventLoopPostHandler @@ -612,7 +612,7 @@ DoHold: jr nz, :+ ldh a, [hCurrentPiece] ldh [hHeldPiece], a - ld a, [wNextPiece] + ldh a, [hNextPiece] ldh [hCurrentPiece], a call GetNextPiece ret diff --git a/src/time.asm b/src/time.asm index f2c9d03..0286d15 100644 --- a/src/time.asm +++ b/src/time.asm @@ -22,7 +22,7 @@ DEF TIME_ASM EQU 1 INCLUDE "globals.asm" -SECTION "Time Variables", HRAM +SECTION "High Time Variables", HRAM hFrameCtr:: ds 1 hEvenFrame:: ds 1