diff options
author | YamaArashi <shadow962@live.com> | 2012-01-26 12:01:09 -0800 |
---|---|---|
committer | YamaArashi <shadow962@live.com> | 2012-01-26 12:01:09 -0800 |
commit | 429275810394eab9a849b1cc3d640ad316e812c4 (patch) | |
tree | 7231018814853079b22dd19720e074fe29a9473e | |
parent | 5ca3748f4cba85a4ba6a8abc994a20d73c0661e2 (diff) |
more bank 0 functions
hg-commit-id: 93b61834dcee
-rw-r--r-- | main.asm | 117 |
1 files changed, 116 insertions, 1 deletions
@@ -4821,7 +4821,122 @@ GetJoypadStateLowSensitivity: ; 3831 ld [$ffd5],a ; frame counter ret -INCBIN "baserom.gbc",$3865,$3927 - $3865 +INCBIN "baserom.gbc",$3865,$38AC - $3865 + +; function to do multiplication +; all values are big endian +; INPUT +; FF96-FF98 = multiplicand +; FF99 = multiplier +; OUTPUT +; FF95-FF98 = product +Multiply: ; 38AC + push hl + push bc + ld hl,$7d41 + ld b,$0d + call Bankswitch + pop bc + pop hl + ret + +; function to do division +; all values are big endian +; INPUT +; FF95-FF98 = dividend +; FF99 = divisor +; b = number of signficant bytes in the dividend (starting from FF95) +; all bytes considered "not signifcant" will be treated as 0 +; OUTPUT +; FF95-FF98 = quotient +; FF99 = remainder +Divide: ; 38B9 + push hl + push de + push bc + ld a,[$ffb8] + push af + ld a,$0d + ld [$ffb8],a + ld [$2000],a + call $7da5 + pop af + ld [$ffb8],a + ld [$2000],a + pop bc + pop de + pop hl + ret + +; This function is used to wait a short period after printing a letter to the +; screen unless the player presses the A/B button or the delay is turned off +; through the [$d730] or [$d358] flags. +PrintLetterDelay: ; 38D3 + ld a,[$d730] + bit 6,a + ret nz + ld a,[$d358] + bit 1,a + ret z + push hl + push de + push bc + ld a,[$d358] + bit 0,a + jr z,.waitOneFrame\@ + ld a,[$d355] + and a,$0f + ld [$ffd5],a ; frame counter + jr .checkButtons\@ +.waitOneFrame\@ + ld a,1 + ld [$ffd5],a ; frame counter +.checkButtons\@ + call GetJoypadState + ld a,[$ffb4] +.checkAButton\@ + bit 0,a ; is the A button pressed? + jr z,.checkBButton\@ + jr .endWait\@ +.checkBButton\@ + bit 1,a ; is the B button pressed? + jr z,.buttonsNotPressed\@ +.endWait\@ + call DelayFrame + jr .done\@ +.buttonsNotPressed\@ ; if neither A nor B is pressed + ld a,[$ffd5] ; frame counter + and a + jr nz,.checkButtons\@ +.done\@ + pop bc + pop de + pop hl + ret + +; Copies [hl, bc) to [de, bc - hl). +; In other words, the source data is from hl up to but not including bc, +; and the destination is de. +CopyDataUntil: ; 3913 + ld a,[hli] + ld [de],a + inc de + ld a,h + cp b + jr nz,CopyDataUntil + ld a,l + cp c + jr nz,CopyDataUntil + ret + +; Function to remove a pokemon from the party or the current box. +; W_WHICHPOKEMON determines the pokemon. +; [$cf95] == 0 specifies the party. +; [$cf95] != 0 specifies the current box. +RemovePokemon: ; 391F + ld hl,$7b68 + ld b,$01 + jp Bankswitch AddPokemonToParty: ; 0x3927 push hl |