ref: 8f49e37b82a90bbef8c7133c4adea8f82abf00e7
parent: 365ae68d80683deab0e2e721b8ff79dda4047513
author: yenatch <yenatch@gmail.com>
date: Sat Aug 30 15:48:49 EDT 2014
Use hram constants for remaining joypad variables.
--- a/engine/cable_club.asm
+++ b/engine/cable_club.asm
@@ -537,7 +537,7 @@
ld [wTileMap + $141], a
.asm_574a
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
and a
jr z, .asm_574a ; 0x5750 $f8
bit 0, a
@@ -896,7 +896,7 @@
ld [W_GRASSRATE], a ; W_GRASSRATE
inc a
ld [W_ISLINKBATTLE], a ; W_ISLINKBATTLE
- ld [$ffb5], a
+ ld [hJoy5], a
ld a, $a
ld [wMusicHeaderPointer], a
ld a, BANK(Music_Celadon)
--- a/engine/evolution.asm
+++ b/engine/evolution.asm
@@ -140,7 +140,7 @@
call DelayFrame
push bc
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
pop bc
and $2
jr nz, .asm_7bf0d
--- a/engine/menu/main_menu.asm
+++ b/engine/menu/main_menu.asm
@@ -307,7 +307,7 @@
xor a
ld [hJoyPressed], a
ld [hJoyHeld], a
- ld [$ffb5], a
+ ld [hJoy5], a
ld [wd72d], a
ld hl, wd732
set 0, [hl]
@@ -461,7 +461,7 @@
call SetOptionsFromCursorPositions
.getJoypadStateLoop
call JoypadLowSensitivity
- ld a,[$ffb5]
+ ld a,[hJoy5]
ld b,a
and a,%11111011 ; any key besides select pressed?
jr z,.getJoypadStateLoop
--- a/engine/menu/pokedex.asm
+++ b/engine/menu/pokedex.asm
@@ -10,7 +10,7 @@
ld [wLastMenuItem],a
inc a
ld [wd11e],a
- ld [$ffb7],a
+ ld [hJoy7],a
.setUpGraphics
ld b,$08
call GoPAL_SET
@@ -35,7 +35,7 @@
ld [wcc37],a
ld [wCurrentMenuItem],a
ld [wLastMenuItem],a
- ld [$ffb7],a
+ ld [hJoy7],a
ld [wcd3a],a
ld [wcd3b],a
pop af
@@ -550,7 +550,7 @@
ld [$fff4],a
.waitForButtonPress
call JoypadLowSensitivity
- ld a,[$ffb5]
+ ld a,[hJoy5]
and a,%00000011 ; A button and B button
jr z,.waitForButtonPress
pop af
--- a/engine/slot_machine.asm
+++ b/engine/slot_machine.asm
@@ -797,7 +797,7 @@
SlotMachine_37882: ; 37882 (d:7882)
call DelayFrame
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
and $1
ret z
ld hl, wTrainerSpriteOffset
--- a/engine/town_map.asm
+++ b/engine/town_map.asm
@@ -6,7 +6,7 @@
ld [hl], $ff
push hl
ld a, $1
- ld [$ffb7], a
+ ld [hJoy7], a
ld a, [W_CURMAP] ; W_CURMAP
push af
ld b, $0
@@ -66,7 +66,7 @@
.asm_70ec8
call Func_716c6
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
ld b, a
and $c3
jr z, .asm_70ec8
@@ -78,7 +78,7 @@
jr nz, .asm_70f01
xor a
ld [wd09b], a
- ld [$ffb7], a
+ ld [hJoy7], a
ld [W_SUBANIMTRANSFORM], a ; W_SUBANIMTRANSFORM
call Func_711ab
pop hl
@@ -188,7 +188,7 @@
push hl
call DelayFrame
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
ld b, a
pop hl
and $c3
--- a/home.asm
+++ b/home.asm
@@ -102,34 +102,34 @@
INCLUDE "home/joypad.asm"
-
INCLUDE "data/map_header_pointers.asm"
-
INCLUDE "home/overworld.asm"
-; this is used to check if the player wants to interrupt the opening sequence at several points
-; XXX is this used anywhere else?
-; INPUT:
-; c = number of frames to wait
-; sets carry if Up+Select+B, Start, or A is pressed within c frames
-; unsets carry otherwise
+
CheckForUserInterruption:: ; 12f8 (0:12f8)
+; Return carry if Up+Select+B, Start or A are pressed in c frames.
+; Used only in the intro and title screen.
call DelayFrame
+
push bc
call JoypadLowSensitivity
pop bc
- ld a,[hJoyHeld] ; currently pressed buttons
- cp a,%01000110 ; Up, Select button, B button
- jr z,.setCarry ; if all three keys are pressed
- ld a,[$ffb5] ; either newly pressed buttons or currently pressed buttons at low sampling rate
- and a,%00001001 ; Start button, A button
- jr nz,.setCarry ; if either key is pressed
+
+ ld a, [hJoyHeld]
+ cp D_UP + SELECT + B_BUTTON
+ jr z, .input
+
+ ld a, [hJoy5]
+ and START | A_BUTTON
+ jr nz, .input
+
dec c
- jr nz,CheckForUserInterruption
-.unsetCarry
+ jr nz, CheckForUserInterruption
+
and a
ret
-.setCarry
+
+.input
scf
ret
@@ -1347,7 +1347,7 @@
xor a
ld [H_AUTOBGTRANSFERENABLED],a ; disable auto-transfer
ld a,1
- ld [$ffb7],a ; joypad state update flag
+ ld [hJoy7],a ; joypad state update flag
ld a,[W_BATTLETYPE]
and a ; is it the Old Man battle?
jr nz,.specialBattleType
@@ -1501,7 +1501,7 @@
ld a,[wCurrentMenuItem]
ld [wd12d],a
xor a
- ld [$ffb7],a ; joypad state update flag
+ ld [hJoy7],a ; joypad state update flag
ld hl,wd730
res 6,[hl] ; turn on letter printing delay
jp BankswitchBack
@@ -1662,7 +1662,7 @@
ld [wd12e],a
ld [wcc37],a
xor a
- ld [$ffb7],a
+ ld [hJoy7],a
ld hl,wd730
res 6,[hl]
call BankswitchBack
@@ -3347,29 +3347,29 @@
ret
; this function is used when lower button sensitivity is wanted (e.g. menus)
-; OUTPUT: [$ffb5] = pressed buttons in usual format
-; there are two flags that control its functionality, [$ffb6] and [$ffb7]
+; OUTPUT: [hJoy5] = pressed buttons in usual format
+; there are two flags that control its functionality, [hJoy6] and [hJoy7]
; there are esentially three modes of operation
; 1. Get newly pressed buttons only
-; ([$ffb7] == 0, [$ffb6] == any)
-; Just copies [hJoyPressed] to [$ffb5].
+; ([hJoy7] == 0, [hJoy6] == any)
+; Just copies [hJoyPressed] to [hJoy5].
; 2. Get currently pressed buttons at low sample rate with delay
-; ([$ffb7] == 1, [$ffb6] != 0)
+; ([hJoy7] == 1, [hJoy6] != 0)
; If the user holds down buttons for more than half a second,
; report buttons as being pressed up to 12 times per second thereafter.
; If the user holds down buttons for less than half a second,
; report only one button press.
; 3. Same as 2, but report no buttons as pressed if A or B is held down.
-; ([$ffb7] == 1, [$ffb6] == 0)
+; ([hJoy7] == 1, [hJoy6] == 0)
JoypadLowSensitivity:: ; 3831 (0:3831)
call Joypad
- ld a,[$ffb7] ; flag
+ ld a,[hJoy7] ; flag
and a ; get all currently pressed buttons or only newly pressed buttons?
ld a,[hJoyPressed] ; newly pressed buttons
jr z,.storeButtonState
ld a,[hJoyHeld] ; all currently pressed buttons
.storeButtonState
- ld [$ffb5],a
+ ld [hJoy5],a
ld a,[hJoyPressed] ; newly pressed buttons
and a ; have any buttons been newly pressed since last check?
jr z,.noNewlyPressedButtons
@@ -3383,18 +3383,18 @@
jr z,.delayOver
.delayNotOver
xor a
- ld [$ffb5],a ; report no buttons as pressed
+ ld [hJoy5],a ; report no buttons as pressed
ret
.delayOver
-; if [$ffb6] = 0 and A or B is pressed, report no buttons as pressed
+; if [hJoy6] = 0 and A or B is pressed, report no buttons as pressed
ld a,[hJoyHeld]
and a,%00000011 ; A and B buttons
jr z,.setShortDelay
- ld a,[$ffb6] ; flag
+ ld a,[hJoy6] ; flag
and a
jr nz,.setShortDelay
xor a
- ld [$ffb5],a
+ ld [hJoy5],a
.setShortDelay
ld a,5 ; 1/12 of a second delay
ld [H_FRAMECOUNTER],a
@@ -3421,7 +3421,7 @@
pop hl
call JoypadLowSensitivity
predef Func_5a5f
- ld a, [$ffb5]
+ ld a, [hJoy5]
and A_BUTTON | B_BUTTON
jr z, .asm_3872
pop af
@@ -3888,7 +3888,7 @@
.getJoypadState
pop hl
call JoypadLowSensitivity
- ld a,[$ffb5]
+ ld a,[hJoy5]
and a ; was a key pressed?
jr nz,.keyPressed
push hl
@@ -3911,7 +3911,7 @@
.keyPressed
xor a
ld [wcc4b],a
- ld a,[$ffb5]
+ ld a,[hJoy5]
ld b,a
bit 6,a ; pressed Up key?
jr z,.checkIfDownPressed
@@ -3953,7 +3953,7 @@
and b ; does the menu care about any of the pressed keys?
jp z,.loop1
.checkIfAButtonOrBButtonPressed
- ld a,[$ffb5]
+ ld a,[hJoy5]
and a,%00000011 ; pressed A button or B button?
jr z,.skipPlayingSound
.AButtonOrBButtonPressed
@@ -3971,7 +3971,7 @@
ld [H_DOWNARROWBLINKCNT1],a ; restore previous values
xor a
ld [wMenuWrappingEnabled],a ; disable menu wrapping
- ld a,[$ffb5]
+ ld a,[hJoy5]
ret
.noWrappingAround
ld a,[wcc37]
--- a/hram.asm
+++ b/hram.asm
@@ -1,8 +1,8 @@
-H_SPRITEWIDTH EQU $FF8B ; in bytes
+H_SPRITEWIDTH EQU $FF8B ; in tiles
H_SPRITEINTERLACECOUNTER EQU $FF8B
-H_SPRITEHEIGHT EQU $FF8C ; in bytes
-H_SPRITEOFFSET EQU $FF8D
+H_SPRITEHEIGHT EQU $FF8C ; in tiles
+H_SPRITEOFFSET EQU $FF8D
hSoftReset EQU $FF8A
; Initialized to 16.
@@ -14,28 +14,31 @@
H_DOWNARROWBLINKCNT1 EQU $FF8B
H_DOWNARROWBLINKCNT2 EQU $FF8C
-; Note: the following multiplication and division addresses are used for multiple purposes
-; and so they overlap with each other
+; Multiplcation and division variables are meant
+; to overlap for back-to-back usage. Big endian.
-H_MULTIPLICAND EQU $FF96 ; 3 bytes, big endian order
+H_MULTIPLICAND EQU $FF96 ; 3 bytes
H_MULTIPLIER EQU $FF99 ; 1 byte
-H_PRODUCT EQU $FF95 ; 4 bytes, big endian order
+H_PRODUCT EQU $FF95 ; 4 bytes
-H_DIVIDEND EQU $FF95 ; 4 bytes, big endian order
+H_DIVIDEND EQU $FF95 ; 4 bytes
H_DIVISOR EQU $FF99 ; 1 byte
-H_QUOTIENT EQU $FF95 ; 4 bytes, big endian order
+H_QUOTIENT EQU $FF95 ; 4 bytes
H_REMAINDER EQU $FF99 ; 1 byte
-; used to convert numbers to decimal
-H_PASTLEADINGZEROES EQU $FF95 ; flag to indicate that a nonzero digit has been printed
-H_NUMTOPRINT EQU $FF96 ; 3 bytes, big endian order
-H_POWEROFTEN EQU $FF99 ; 3 bytes, big endian order
-H_SAVEDNUMTOPRINT EQU $FF9C ; 3 bytes, big endian order (to back out of a subtraction)
+; PrintNumber (big endian).
+H_PASTLEADINGZEROES EQU $FF95 ; last char printed
+H_NUMTOPRINT EQU $FF96 ; 3 bytes
+H_POWEROFTEN EQU $FF99 ; 3 bytes
+H_SAVEDNUMTOPRINT EQU $FF9C ; 3 bytes
-hJoyHeldLast EQU $FFB1
-hJoyReleased EQU $FFB2
-hJoyPressed EQU $FFB3
-hJoyHeld EQU $FFB4
+hJoyHeldLast EQU $FFB1
+hJoyReleased EQU $FFB2
+hJoyPressed EQU $FFB3
+hJoyHeld EQU $FFB4
+hJoy5 EQU $FFB5
+hJoy6 EQU $FFB6
+hJoy7 EQU $FFB7
H_LOADEDROMBANK EQU $FFB8