diff options
Diffstat (limited to 'engine')
-rw-r--r-- | engine/copy.asm | 431 | ||||
-rw-r--r-- | engine/engine_flags.asm (renamed from engine/bittable2.asm) | 0 | ||||
-rw-r--r-- | engine/fade.asm | 134 | ||||
-rw-r--r-- | engine/init.asm | 2 | ||||
-rw-r--r-- | engine/joypad.asm | 216 | ||||
-rw-r--r-- | engine/lcd.asm | 81 | ||||
-rw-r--r-- | engine/palettes.asm | 347 | ||||
-rw-r--r-- | engine/scripting.asm | 136 | ||||
-rw-r--r-- | engine/serial.asm | 408 | ||||
-rw-r--r-- | engine/time.asm | 311 | ||||
-rw-r--r-- | engine/vblank.asm | 4 |
11 files changed, 2000 insertions, 70 deletions
diff --git a/engine/copy.asm b/engine/copy.asm new file mode 100644 index 000000000..c5ba92c65 --- /dev/null +++ b/engine/copy.asm @@ -0,0 +1,431 @@ +; Functions to copy data from ROM. + + +Functiondc9: ; dc9 + ld a, [rLCDC] + bit 7, a + jp z, Copy2bpp + + ld a, [hROMBank] + push af + ld a, BANK(Function104284) + rst Bankswitch + call Function104284 + pop af + rst Bankswitch + + ret +; ddc + +Functionddc: ; ddc + ld a, [rLCDC] + bit 7, a + jp z, Copy1bpp + + ld a, [hROMBank] + push af + ld a, BANK(Function1042b2) + rst Bankswitch + call Function1042b2 + pop af + rst Bankswitch + + ret +; def + +Functiondef: ; def + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + call FarCopyBytesDouble + pop af + rst Bankswitch + ret +; dfd + +Functiondfd: ; dfd + dec c + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + +.asm_e09 + ld a, d + ld [rHDMA1], a + ld a, e + and $f0 + ld [rHDMA2], a + ld a, h + and $1f + ld [rHDMA3], a + ld a, l + and $f0 + ld [rHDMA4], a + ld a, c + cp $8 + jr c, .asm_e3c + sub $8 + ld c, a + ld a, $f + ld [hDMATransfer], a + call DelayFrame + ld a, l + add $0 + ld l, a + ld a, h + adc $1 + ld h, a + ld a, e + add $0 + ld e, a + ld a, d + adc $1 + ld d, a + jr .asm_e09 + +.asm_e3c + ld a, c + and $7f + ld [hDMATransfer], a + call DelayFrame + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret +; e4a + + + +Functione4a: ; e4a + ld a, $5 + ld hl, $4135 + rst FarCall + ret +; e51 + + + +Functione51: ; e51 + ld a, $3e + ld hl, $7449 + rst FarCall + ret +; e58 + +Functione58: ; e58 + ld a, $3e + ld hl, $74be + rst FarCall + ret +; e5f + + + +Functione5f: ; e5f + ld a, $3e + ld hl, $748a + rst FarCall + ld a, $3e + ld hl, $74b0 + rst FarCall + ret +; e6c + +Functione6c: ; e6c + ld a, $3e + ld hl, $74b0 + rst FarCall + ret +; e73 + +Functione73: ; e73 + push de + ld a, $0 + call GetSRAMBank + push bc + ld de, $a000 + ld a, b + call FarDecompress + pop bc + pop hl + ld de, $a000 + call Request2bpp + call CloseSRAM + ret +; e8d + + + +FarCopyBytes: ; e8d +; copy bc bytes from a:hl to de + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call CopyBytes + + pop af + rst Bankswitch + ret +; 0xe9b + + +FarCopyBytesDouble: ; e9b +; Copy bc bytes from a:hl to bc*2 bytes at de, +; doubling each byte in the process. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + +; switcheroo, de <> hl + ld a, h + ld h, d + ld d, a + ld a, l + ld l, e + ld e, a + + inc b + inc c + jr .dec + +.loop + ld a, [de] + inc de + ld [hli], a + ld [hli], a +.dec + dec c + jr nz, .loop + dec b + jr nz, .loop + + pop af + rst Bankswitch + ret +; 0xeba + + +Request2bpp: ; eba + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, [$ffd3] + push af + + ld a, $8 + ld [$ffd3], a + ld a, [InLinkBattle] + cp $4 + jr nz, .asm_edc + ld a, [$ffe9] + and a + jr nz, .asm_edc + ld a, $6 + ld [$ffd3], a + +.asm_edc + ld a, e + ld [$cf68], a + ld a, d + ld [$cf69], a + ld a, l + ld [$cf6a], a + ld a, h + ld [$cf6b], a + +.asm_eec + ld a, c + ld hl, $ffd3 + cp [hl] + jr nc, .asm_f08 + + ld [$cf67], a +.wait + call DelayFrame + ld a, [$cf67] + and a + jr nz, .wait + + pop af + ld [$ffd3], a + + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret + +.asm_f08 + ld a, [$ffd3] + ld [$cf67], a +.asm_f0d + call DelayFrame + ld a, [$cf67] + and a + jr nz, .asm_f0d + ld a, c + ld hl, $ffd3 + sub [hl] + ld c, a + jr .asm_eec +; f1e + + +Request1bpp: ; f1e + ld a, [hBGMapMode] + push af + xor a + ld [hBGMapMode], a + + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, [$ffd3] + push af + + ld a, $8 + ld [$ffd3], a + ld a, [InLinkBattle] + cp $4 + jr nz, .asm_f40 + ld a, [$ffe9] + and a + jr nz, .asm_f40 + ld a, $6 + ld [$ffd3], a + +.asm_f40 + ld a, e + ld [$cf6d], a + ld a, d + ld [$cf6e], a + ld a, l + ld [$cf6f], a + ld a, h + ld [$cf70], a +.asm_f50 + ld a, c + ld hl, $ffd3 + cp [hl] + jr nc, .asm_f6c + + ld [$cf6c], a +.wait + call DelayFrame + ld a, [$cf6c] + and a + jr nz, .wait + + pop af + ld [$ffd3], a + + pop af + rst Bankswitch + + pop af + ld [hBGMapMode], a + ret + +.asm_f6c + ld a, [$ffd3] + ld [$cf6c], a +.asm_f71 + call DelayFrame + ld a, [$cf6c] + and a + jr nz, .asm_f71 + ld a, c + ld hl, $ffd3 + sub [hl] + ld c, a + jr .asm_f50 +; f82 + + +Get2bpp: ; f82 + ld a, [rLCDC] + bit 7, a + jp nz, Request2bpp + +Copy2bpp: ; f89 +; copy c 2bpp tiles from b:de to hl + + push hl + ld h, d + ld l, e + pop de + +; bank + ld a, b + +; bc = c * $10 + push af + swap c + ld a, $f + and c + ld b, a + ld a, $f0 + and c + ld c, a + pop af + + jp FarCopyBytes +; f9d + + +Get1bpp: ; f9d + ld a, [rLCDC] + bit 7, a + jp nz, Request1bpp + +Copy1bpp: ; fa4 +; copy c 1bpp tiles from b:de to hl + + push de + ld d, h + ld e, l + +; bank + ld a, b + +; bc = c * $10 / 2 + push af + ld h, 0 + ld l, c + add hl, hl + add hl, hl + add hl, hl + ld b, h + ld c, l + pop af + + pop hl + jp FarCopyBytesDouble +; fb6 + diff --git a/engine/bittable2.asm b/engine/engine_flags.asm index 5527226e4..5527226e4 100644 --- a/engine/bittable2.asm +++ b/engine/engine_flags.asm diff --git a/engine/fade.asm b/engine/fade.asm new file mode 100644 index 000000000..d67211e29 --- /dev/null +++ b/engine/fade.asm @@ -0,0 +1,134 @@ +; Functions to fade the screen in and out. + + +Function48c: ; 48c + ld a, [TimeOfDayPal] + ld b, a + ld hl, IncGradGBPalTable_11 + ld a, l + sub b + ld l, a + jr nc, .asm_499 + dec h + +.asm_499 + ld a, [hli] + ld [rBGP], a + ld a, [hli] + ld [rOBP0], a + ld a, [hli] + ld [rOBP1], a + ret +; 4a3 + + +Function4a3: ; 4a3 + ld a, [hCGB] + and a + jr z, .asm_4af + ld hl, IncGradGBPalTable_00 + ld b, 4 + jr FadeOut + +.asm_4af + ld hl, IncGradGBPalTable_08 + ld b, 4 + jr FadeOut +; 4b6 + +Function4b6: ; 4b6 + ld a, [hCGB] + and a + jr z, .asm_4c2 + ld hl, IncGradGBPalTable_05 + ld b, 3 + jr FadeOut + +.asm_4c2 + ld hl, IncGradGBPalTable_13 + ld b, 3 +; 4c7 + +FadeOut: ; 4c7 + push de + ld a, [hli] + call DmgToCgbBGPals + ld a, [hli] + ld e, a + ld a, [hli] + ld d, a + call DmgToCgbObjPals + ld c, 8 + call DelayFrames + pop de + dec b + jr nz, FadeOut + ret +; 4dd + +Function4dd: ; 4dd + ld a, [hCGB] + and a + jr z, .asm_4e9 + ld hl, IncGradGBPalTable_04 - 1 + ld b, 4 + jr FadeIn + +.asm_4e9 + ld hl, IncGradGBPalTable_12 - 1 + ld b, 4 + jr FadeIn +; 4f0 + +Function4f0: ; 4f0 + ld a, [hCGB] + and a + jr z, .asm_4fc + ld hl, IncGradGBPalTable_07 - 1 + ld b, 3 + jr FadeIn + +.asm_4fc + ld hl, IncGradGBPalTable_15 - 1 + ld b, 3 + ; fallthrough +; 501 + +FadeIn: ; 501 + push de + ld a, [hld] + ld d, a + ld a, [hld] + ld e, a + call DmgToCgbObjPals + ld a, [hld] + call DmgToCgbBGPals + ld c, 8 + call DelayFrames + pop de + dec b + jr nz, FadeIn + ret +; 517 + + +; 517 +IncGradGBPalTable_00: db %11111111, %11111111, %11111111 +IncGradGBPalTable_01: db %11111110, %11111110, %11111110 +IncGradGBPalTable_02: db %11111001, %11111001, %11111001 +IncGradGBPalTable_03: db %11100100, %11100100, %11100100 +IncGradGBPalTable_04: db %11100100, %11100100, %11100100 +IncGradGBPalTable_05: db %10010000, %10010000, %10010000 +IncGradGBPalTable_06: db %01000000, %01000000, %01000000 +IncGradGBPalTable_07: db %00000000, %00000000, %00000000 +; bgp obp1 obp2 +IncGradGBPalTable_08: db %11111111, %11111111, %11111111 +IncGradGBPalTable_09: db %11111110, %11111110, %11111000 +IncGradGBPalTable_10: db %11111001, %11100100, %11100100 +IncGradGBPalTable_11: db %11100100, %11010000, %11100000 +IncGradGBPalTable_12: db %11100100, %11010000, %11100000 +IncGradGBPalTable_13: db %10010000, %10000000, %10010000 +IncGradGBPalTable_14: db %01000000, %01000000, %01000000 +IncGradGBPalTable_15: db %00000000, %00000000, %00000000 +; 547 + diff --git a/engine/init.asm b/engine/init.asm index d7594ae1d..3104c416d 100644 --- a/engine/init.asm +++ b/engine/init.asm @@ -79,7 +79,7 @@ Init: ; 17d or c jr nz, .asm_1b1 - ld sp, Stack - 1 + ld sp, Stack ; Clear HRAM ld a, [hCGB] diff --git a/engine/joypad.asm b/engine/joypad.asm index 5266ef8a8..388c84e22 100644 --- a/engine/joypad.asm +++ b/engine/joypad.asm @@ -273,3 +273,219 @@ StopAutoInput: ; a0a ret ; a1b + +Functiona1b: ; a1b + + call DelayFrame + + push bc + call Functiona57 + pop bc + + ld a, [hJoyDown] + cp D_UP | SELECT | BUTTON_B + jr z, .asm_a34 + + ld a, [$ffa9] + and START | BUTTON_A + jr nz, .asm_a34 + + dec c + jr nz, Functiona1b + + and a + ret + +.asm_a34 + scf + ret +; a36 + + +Functiona36: ; a36 + call DelayFrame + call GetJoypadPublic + ld a, [hJoyPressed] + and BUTTON_A | BUTTON_B + ret nz + call RTC + jr Functiona36 +; a46 + +Functiona46: ; a46 + ld a, [hOAMUpdate] + push af + ld a, 1 + ld [hOAMUpdate], a + call WaitBGMap + call Functiona36 + pop af + ld [hOAMUpdate], a + ret +; a57 + +Functiona57: ; a57 + call GetJoypadPublic + ld a, [$ffaa] + and a + ld a, [hJoyPressed] + jr z, .asm_a63 + ld a, [hJoyDown] +.asm_a63 + ld [$ffa9], a + ld a, [hJoyPressed] + and a + jr z, .asm_a70 + ld a, 15 + ld [TextDelayFrames], a + ret + +.asm_a70 + ld a, [TextDelayFrames] + and a + jr z, .asm_a7a + xor a + ld [$ffa9], a + ret + +.asm_a7a + ld a, 5 + ld [TextDelayFrames], a + ret +; a80 + +Functiona80: ; a80 + ld a, [$ffaf] + push af + ld a, [$ffb0] + push af + xor a + ld [$ffaf], a + ld a, $6 + ld [$ffb0], a +.asm_a8d + push hl + ld hl, $c606 + call Functionb06 + pop hl + call Functiona57 + ld a, [$ffa9] + and $3 + jr z, .asm_a8d + pop af + ld [$ffb0], a + pop af + ld [$ffaf], a + ret +; aa5 + +Functionaa5: ; aa5 + call Functiona57 + ld a, [$ffa9] + and BUTTON_A | BUTTON_B + jr z, Functionaa5 + ret +; aaf + +Functionaaf: ; aaf + ld a, [InLinkBattle] + and a + jr nz, .asm_ac1 + call Functionac6 + push de + ld de, SFX_READ_TEXT_2 + call StartSFX + pop de + ret + +.asm_ac1 + ld c, 65 + jp DelayFrames +; ac6 + +Functionac6: ; ac6 + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + ld a, [InputType] + or a + jr z, .asm_ad9 + callba Function1de28a +.asm_ad9 + call Functionaf5 + call Functiona57 + ld a, [hJoyPressed] + and $3 + jr nz, .asm_af1 + call RTC + ld a, $1 + ld [hBGMapMode], a + call DelayFrame + jr .asm_ad9 + +.asm_af1 + pop af + ld [hOAMUpdate], a + ret +; af5 + +Functionaf5: ; af5 + ld a, [$ff9b] + and $10 + jr z, .asm_aff + ld a, $ee + jr .asm_b02 + +.asm_aff + ld a, [$c605] + +.asm_b02 + ld [$c606], a + ret +; b06 + +Functionb06: ; b06 + push bc + ld a, [hl] + ld b, a + ld a, $ee + cp b + pop bc + jr nz, .asm_b27 + ld a, [$ffaf] + dec a + ld [$ffaf], a + ret nz + ld a, [$ffb0] + dec a + ld [$ffb0], a + ret nz + ld a, $7a + ld [hl], a + ld a, $ff + ld [$ffaf], a + ld a, $6 + ld [$ffb0], a + ret + +.asm_b27 + ld a, [$ffaf] + and a + ret z + dec a + ld [$ffaf], a + ret nz + dec a + ld [$ffaf], a + ld a, [$ffb0] + dec a + ld [$ffb0], a + ret nz + ld a, $6 + ld [$ffb0], a + ld a, $ee + ld [hl], a + ret +; b40 + diff --git a/engine/lcd.asm b/engine/lcd.asm new file mode 100644 index 000000000..9c86eaa5c --- /dev/null +++ b/engine/lcd.asm @@ -0,0 +1,81 @@ +; LCD handling + + +Function547: ; 547 + ld a, [hLCDStatCustom] + cp rSCX & $ff + ret nz + ld c, a + ld a, [LYOverrides] + ld [$ff00+c], a + ret +; 552 + + +LCD: ; 552 + push af + ld a, [hLCDStatCustom] + and a + jr z, .done + +; At this point it's assumed we're in WRAM bank 5! + push bc + ld a, [rLY] + ld c, a + ld b, LYOverrides >> 8 + ld a, [bc] + ld b, a + ld a, [hLCDStatCustom] + ld c, a + ld a, b + ld [$ff00+c], a + pop bc + +.done + pop af + reti +; 568 + + +DisableLCD: ; 568 +; Turn the LCD off + +; Don't need to do anything if the LCD is already off + ld a, [rLCDC] + bit 7, a ; lcd enable + ret z + + xor a + ld [rIF], a + ld a, [rIE] + ld b, a + +; Disable VBlank + res 0, a ; vblank + ld [rIE], a + +.wait +; Wait until VBlank would normally happen + ld a, [rLY] + cp 145 + jr nz, .wait + + ld a, [rLCDC] + and %01111111 ; lcd enable off + ld [rLCDC], a + + xor a + ld [rIF], a + ld a, b + ld [rIE], a + ret +; 58a + + +EnableLCD: ; 58a + ld a, [rLCDC] + set 7, a ; lcd enable + ld [rLCDC], a + ret +; 591 + diff --git a/engine/palettes.asm b/engine/palettes.asm new file mode 100644 index 000000000..accaa96b5 --- /dev/null +++ b/engine/palettes.asm @@ -0,0 +1,347 @@ +; Functions dealing with palettes. + + +UpdatePalsIfCGB: ; c2f +; update bgp data from BGPals +; update obp data from OBPals +; return carry if successful + +; check cgb + ld a, [hCGB] + and a + ret z + + +UpdateCGBPals: ; c33 +; return carry if successful +; any pals to update? + ld a, [hCGBPalUpdate] + and a + ret z + + +ForceUpdateCGBPals: ; c37 + + ld a, [rSVBK] + push af + ld a, 5 ; BANK(BGPals) + ld [rSVBK], a + + ld hl, BGPals ; 5:d080 + +; copy 8 pals to bgpd + ld a, %10000000 ; auto increment, index 0 + ld [rBGPI], a + ld c, rBGPD % $100 + ld b, 4 ; NUM_PALS / 2 +.bgp + rept $10 + ld a, [hli] + ld [$ff00+c], a + endr + + dec b + jr nz, .bgp + +; hl is now 5:d0c0 OBPals + +; copy 8 pals to obpd + ld a, %10000000 ; auto increment, index 0 + ld [rOBPI], a + ld c, rOBPD - rJOYP + ld b, 4 ; NUM_PALS / 2 +.obp + rept $10 + ld a, [hli] + ld [$ff00+c], a + endr + + dec b + jr nz, .obp + + pop af + ld [rSVBK], a + +; clear pal update queue + xor a + ld [hCGBPalUpdate], a + + scf + ret +; c9f + + +DmgToCgbBGPals: ; c9f +; exists to forego reinserting cgb-converted image data + +; input: a -> bgp + + ld [rBGP], a + push af + + ld a, [hCGB] + and a + jr z, .end + + push hl + push de + push bc + ld a, [rSVBK] + push af + + ld a, 5 + ld [rSVBK], a + +; copy & reorder bg pal buffer + ld hl, BGPals ; to + ld de, Unkn1Pals ; from +; order + ld a, [rBGP] + ld b, a +; all pals + ld c, 8 + call CopyPals +; request pal update + ld a, 1 + ld [hCGBPalUpdate], a + + pop af + ld [rSVBK], a + pop bc + pop de + pop hl +.end + pop af + ret +; ccb + + +DmgToCgbObjPals: ; ccb +; exists to forego reinserting cgb-converted image data + +; input: d -> obp1 +; e -> obp2 + + ld a, e + ld [rOBP0], a + ld a, d + ld [rOBP1], a + + ld a, [hCGB] + and a + ret z + + push hl + push de + push bc + ld a, [rSVBK] + push af + + ld a, 5 + ld [rSVBK], a + +; copy & reorder obj pal buffer + ld hl, OBPals ; to + ld de, Unkn2Pals ; from +; order + ld a, [rOBP0] + ld b, a +; all pals + ld c, 8 + call CopyPals +; request pal update + ld a, 1 + ld [hCGBPalUpdate], a + + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + ret +; cf8 + + +Functioncf8: ; cf8 + ld [rOBP0], a + push af + ld a, [hCGB] + and a + jr z, .asm_d22 + push hl + push de + push bc + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d0c0 + ld de, MartPointer + ld a, [rOBP0] + ld b, a + ld c, $1 + call CopyPals + ld a, $1 + ld [hCGBPalUpdate], a + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + +.asm_d22 + pop af + ret +; d24 + +Functiond24: ; d24 + ld [rOBP1], a + push af + ld a, [hCGB] + and a + jr z, .asm_d4e + push hl + push de + push bc + ld a, [rSVBK] + push af + ld a, $5 + ld [rSVBK], a + ld hl, $d0c8 + ld de, $d048 + ld a, [rOBP1] + ld b, a + ld c, $1 + call CopyPals + ld a, $1 + ld [hCGBPalUpdate], a + pop af + ld [rSVBK], a + pop bc + pop de + pop hl + +.asm_d4e + pop af + ret +; d50 + + + +CopyPals: ; d50 +; copy c palettes in order b from de to hl + + push bc + ld c, 4 ; NUM_PAL_COLORS +.loop + push de + push hl + +; get pal color + ld a, b + and %11 ; color +; 2 bytes per color + add a + ld l, a + ld h, 0 + add hl, de + ld e, [hl] + inc hl + ld d, [hl] + +; dest + pop hl +; write color + ld [hl], e + inc hl + ld [hl], d + inc hl +; next pal color + srl b + srl b +; source + pop de +; done pal? + dec c + jr nz, .loop + +; de += 8 (next pal) + ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal + add e + jr nc, .ok + inc d +.ok + ld e, a + +; how many more pals? + pop bc + dec c + jr nz, CopyPals + ret +; d79 + + +Functiond79: ; d79 + ld a, [hCGB] + and a + ret z + ld a, 1 + ld [rVBK], a + ld hl, VTiles0 + ld bc, $2000 + xor a + call ByteFill + ld a, 0 + ld [rVBK], a + ret +; d90 + + +Functiond90: ; d90 + ret +; d91 + + +Functiond91: ; d91 + ld a, [hCGB] + and a + ret z + ld a, [rSVBK] + push af + ld a, 5 ; BANK(BGPals) + ld [rSVBK], a + ld hl, BGPals + ld bc, $40 + $10 + xor a + call ByteFill + pop af + ld [rSVBK], a + ld a, 1 + ld [hCGBPalUpdate], a + call DelayFrame + ret +; db1 + + +Functiondb1: ; db1 + ld a, [hROMBank] + push af + ld a, BANK(Function4c000) + rst Bankswitch + call Function4c000 + pop af + rst Bankswitch + ret +; dbd + +Functiondbd: ; dbd + ld a, [hROMBank] + push af + ld a, BANK(Function4c03f) + rst Bankswitch + call Function4c03f + pop af + rst Bankswitch + ret +; dc9 + diff --git a/engine/scripting.asm b/engine/scripting.asm index 79fbe69ee..5d44d1a8e 100644 --- a/engine/scripting.asm +++ b/engine/scripting.asm @@ -308,7 +308,7 @@ Script_2writetext: ; 0x96e9b ld h, a ld a, [ScriptBank] ld b, a - call $269a + call Function269a ret ; 0x96eab @@ -323,7 +323,7 @@ Script_3writetext: ; 0x96eab ld l, a call GetScriptByte ld h, a - call $269a + call Function269a ret ; 0x96ebb @@ -348,7 +348,7 @@ Script_repeattext: ; 0x96ebb ld a, [hli] ld h, [hl] ld l, a - call $269a + call Function269a ret .asm_96ed8 ret @@ -357,7 +357,7 @@ Script_repeattext: ; 0x96ebb Script_closetext: ; 0x96ed9 ; script command 0x54 - jp $0a46 + jp Functiona46 ; 0x96edc Script_keeptextopen: ; 0x96edc @@ -367,8 +367,8 @@ Script_keeptextopen: ; 0x96edc push af ld a, $1 ld [$ffd8], a - call $31f6 - call $0aaf + call WaitBGMap + call Functionaaf pop af ld [$ffd8], a ret @@ -377,7 +377,7 @@ Script_keeptextopen: ; 0x96edc Script_yesorno: ; 0x96eed ; script command 0x4e - call $1dcf + call Function1dcf ld a, $0 jr c, .asm_96ef6 ; 0x96ef2 $2 ld a, $1 @@ -397,16 +397,16 @@ Script_loadmenudata: ; 0x96efa ld h, a ld de, $1d35 ld a, [ScriptBank] - call $26b7 - call $1ad2 + call Function26b7 + call Function1ad2 ret ; 0x96f0f Script_writebackup: ; 0x96f0f ; script command 0x50 - call $1c17 - call $1ad2 + call Function1c17 + call Function1ad2 ret ; 0x96f16 @@ -470,7 +470,7 @@ Script_storetext: ; 0x96f52 ; pointer (PointerLabelBeforeBank) ; memory (SingleByteParam) - call $106c + call Function106c call GetScriptByte ld c, a ld a, $47 @@ -539,7 +539,7 @@ Script_verbosegiveitem2: ; 0x96f8e ld a, [de] ld [$d10c], a ld hl, $d892 - call $2f66 + call Function2f66 ld a, $1 jr c, .asm_96fb0 ; 0x96fad $1 xor a @@ -561,7 +561,7 @@ Script_itemnotify: ; 0x96fc6 call CurItemName ld b, BANK(PutItemInPocketText) ld hl, PutItemInPocketText - call $269a + call Function269a ret ; 0x96fd5 @@ -572,7 +572,7 @@ Script_pocketisfull: ; 0x96fd5 call CurItemName ld b, BANK(PocketIsFullText) ld hl, PocketIsFullText - call $269a + call Function269a ret ; 0x96fe4 @@ -732,7 +732,7 @@ Script_askforphonenumber: ; 0x970be ; parameters: ; number (SingleByteParam) - call $1dcf + call Function1dcf jr c, .asm_970d6 ; 0x970c1 $13 call GetScriptByte ld c, a @@ -814,7 +814,7 @@ Script_trainertext: ; 0x9710f ld l, a ld a, [$d03e] ld b, a - call $269a + call Function269a ret ; 0x97125 @@ -843,7 +843,7 @@ Script_trainerstatus: ; 0x97132 ld d, [hl] call GetScriptByte ld b, a - call BitTable1Func + call EventFlagAction ld a, c and a ret z @@ -907,7 +907,7 @@ Script_playrammusic: ; 0x9717a Script_playmapmusic: ; 0x97185 ; script command 0x82 - call $3cdf + call Function3cdf ret ; 0x97189 @@ -988,7 +988,7 @@ Script_cry: ; 0x971d1 jr nz, .asm_971df ; 0x971da $3 ld a, [$c2dd] .asm_971df - call $37ce + call Function37ce ret ; 0x971e3 @@ -1039,7 +1039,7 @@ Function971fa: ; 971fa ld h, a ld a, [ScriptBank] ld b, a - call $26c7 + call Function26c7 ret c ld a, SCRIPT_WAIT_MOVEMENT ld [ScriptMode], a @@ -1145,13 +1145,13 @@ Script_spriteface: ; 0x97274 Unknown_0x9728b: ; 0x9728b ld a, d push de - call $18de + call Function18de jr c, .asm_972b9 ; 0x97290 $27 ld hl, $0000 add hl, bc ld a, [hl] push bc - call $1836 + call Function1836 pop bc jr c, .asm_972b9 ; 0x9729c $1b ld hl, $0004 @@ -1160,13 +1160,13 @@ Unknown_0x9728b: ; 0x9728b jr nz, .asm_972b9 ; 0x972a4 $13 pop de ld a, e - call $1af8 + call Function1af8 ld hl, $d0ed bit 6, [hl] jr nz, .asm_972b5 ; 0x972b0 $3 call Unknown_0x972bc .asm_972b5 - call $1ad2 + call Function1ad2 ret .asm_972b9 pop de @@ -1175,7 +1175,7 @@ Unknown_0x9728b: ; 0x9728b ; 0x972bc Unknown_0x972bc: ; 0x972bc - call $217a + call Function217a ld hl, TileMap ld bc, $0168 .asm_972c5 @@ -1211,7 +1211,7 @@ Script_appear: ; 0x972dd call GetScriptByte call Unknown_0x971e3 - call $1956 + call Function1956 ld a, [$ffaf] ld b, $0 call Unknown_0x9730b @@ -1229,7 +1229,7 @@ Script_disappear: ; 0x972ee jr nz, .asm_972fa ; 0x972f6 $2 ld a, [$ffe0] .asm_972fa - call $199f + call Function199f ld a, [$ffaf] ld b, $1 call Unknown_0x9730b @@ -1241,7 +1241,7 @@ Script_disappear: ; 0x972ee Unknown_0x9730b: ; 0x9730b push bc - call $18d2 + call GetMapObject ld hl, $000c add hl, bc pop bc @@ -1256,7 +1256,7 @@ Unknown_0x9730b: ; 0x9730b xor a ret .asm_97321 - call BitTable1Func + call EventFlagAction ret ; 0x97325 @@ -1497,9 +1497,9 @@ Script_loadtrainer: ; 0x97424 Script_startbattle: ; 0x97436 ; script command 0x5f - call $2879 - ld a, $16 - call $2d83 + call Function2879 + ld a, PREDEF_START_BATTLE + call Predef ld a, [$d0ee] and $3f ld [$c2dd], a @@ -1513,7 +1513,7 @@ Script_catchtutorial: ; 0x97447 call GetScriptByte ld [$d230], a - call $2879 + call Function2879 ld a, $13 ld hl, $6554 rst $8 @@ -1559,7 +1559,7 @@ Script_reloadmap: ; 0x97491 ld a, $f3 ld [$ff9f], a ld a, $1 - call $261b + call Function261b call StopScript ret ; 0x974a2 @@ -1835,7 +1835,7 @@ Script_priorityjump: ; 0x975aa Script_checktriggers: ; 0x975c2 ; script command 0x13 - call $211b + call Function211b jr z, .asm_975cb ; 0x975c5 $4 ld [$c2dd], a ret @@ -1855,7 +1855,7 @@ Script_checkmaptriggers: ; 0x975d1 ld b, a call GetScriptByte ld c, a - call $2147 + call Function2147 ld a, d or e jr z, .asm_975e5 ; 0x975de $5 @@ -1894,7 +1894,7 @@ Script_domaptrigger: ; 0x975f5 ; fallthrough Unknown_975fd: ; 0x975fd - call $2147 + call Function2147 ld a, d or e jr z, .asm_97608 ; 0x97602 $4 @@ -1988,7 +1988,7 @@ Script_random: ; 0x97640 ld b, a .asm_97653 push bc - call $2f8c + call Random pop bc ld a, [$ffe1] cp b @@ -1996,7 +1996,7 @@ Script_random: ; 0x97640 jr .asm_97666 ; 0x9765d $7 .asm_9765f push bc - call $2f8c + call Random pop bc ld a, [$ffe1] .asm_97666 @@ -2004,7 +2004,7 @@ Script_random: ; 0x97640 ld a, [$c2dd] ld c, a pop af - call $3110 + call SimpleDivide ld [$c2dd], a ret ; 0x97673 @@ -2091,7 +2091,7 @@ Script_pokenamemem: ; 0x976ae ld a, [$c2dd] .asm_976b7 ld [$d265], a - call $343b + call GetPokemonName ld de, StringBuffer1 Unknown_976c0: ; 0x976c0 @@ -2205,7 +2205,7 @@ Script_readmoney: ; 0x97732 call Unknown_0x97861 ld hl, StringBuffer1 ld bc, $4306 - call $3198 + call PrintNum ld de, StringBuffer1 jp Unknown_976c0 ; 0x97747 @@ -2217,9 +2217,9 @@ Script_readcoins: ; 0x97747 call Unknown_0x97771 ld hl, StringBuffer1 - ld de, $d855 + ld de, Coins ld bc, $4206 - call $3198 + call PrintNum ld de, StringBuffer1 jp Unknown_976c0 ; 0x9775c @@ -2233,7 +2233,7 @@ Script_RAM2MEM: ; 0x9775c ld de, $c2dd ld hl, StringBuffer1 ld bc, $4103 - call $3198 + call PrintNum ld de, StringBuffer1 jp Unknown_976c0 ; 0x97771 @@ -2320,7 +2320,7 @@ Script_giveitem: ; 0x977ca call GetScriptByte ld [$d10c], a ld hl, $d892 - call $2f66 + call Function2f66 jr nc, .asm_977eb ; 0x977e3 $6 ld a, $1 ld [$c2dd], a @@ -2346,7 +2346,7 @@ Script_takeitem: ; 0x977f0 ld a, $ff ld [$d107], a ld hl, $d892 - call $2f53 + call Function2f53 ret nc ld a, $1 ld [$c2dd], a @@ -2363,7 +2363,7 @@ Script_checkitem: ; 0x97812 call GetScriptByte ld [$d106], a ld hl, $d892 - call $2f79 + call PickUpItem ret nc ld a, $1 ld [$c2dd], a @@ -2677,7 +2677,7 @@ Script_setbit1: ; 0x97988 call GetScriptByte ld d, a ld b, $1 - call BitTable1Func + call EventFlagAction ret ; 0x97996 @@ -2691,7 +2691,7 @@ Script_clearbit1: ; 0x97996 call GetScriptByte ld d, a ld b, $0 - call BitTable1Func + call EventFlagAction ret ; 0x979a4 @@ -2705,7 +2705,7 @@ Script_checkbit1: ; 0x979a4 call GetScriptByte ld d, a ld b, $2 - call BitTable1Func + call EventFlagAction ld a, c and a jr z, .asm_979b7 ; 0x979b3 $2 @@ -2839,7 +2839,7 @@ Script_warp: ; 0x97a1d ld a, $f1 ld [$ff9f], a ld a, $1 - call $261b + call Function261b call StopScript ret .asm_97a4a @@ -2851,7 +2851,7 @@ Script_warp: ; 0x97a1d ld a, $fb ld [$ff9f], a ld a, $1 - call $261b + call Function261b call StopScript ret ; 0x97a65 @@ -2935,8 +2935,8 @@ Script_changemap: ; 0x97ab3 ld [$d1a1], a call GetScriptByte ld [$d1a2], a - call $24e4 - call $2879 + call Function24e4 + call Function2879 ret ; 0x97acc @@ -2953,10 +2953,10 @@ Script_changeblock: ; 0x97acc call GetScriptByte add $4 ld e, a - call $2a66 + call Function2a66 call GetScriptByte ld [hl], a - call $2879 + call Function2879 ret ; 0x97ae3 @@ -2965,19 +2965,19 @@ Script_reloadmappart: ; 0x97ae3 xor a ld [$ffd4], a - call $2173 - call $2914 + call Function2173 + call Function2914 ld a, $41 ld hl, $4061 rst $8 - call $1ad2 + call Function1ad2 ret ; 0x97af6 Script_warpcheck: ; 0x97af6 ; script command 0x8e - call $224a + call Function224a ret nc callba Function966d0 ret @@ -2996,7 +2996,7 @@ Script_newloadmap: ; 0x97b08 call GetScriptByte ld [$ff9f], a ld a, $1 - call $261b + call Function261b call StopScript ret ; 0x97b16 @@ -3011,7 +3011,7 @@ Script_reloadandreturn: ; 0x97b16 Script_loadfont: ; 0x97b1c ; script command 0x47 - call $2e08 + call Function2e08 ret ; 0x97b20 @@ -3020,7 +3020,7 @@ Script_refreshscreen: ; 0x97b20 ; parameters: ; dummy (SingleByteParam) - call $2dba + call ResetWindow call GetScriptByte ret ; 0x97b27 @@ -3043,8 +3043,8 @@ LoadMoveSpritesScript: ; 97b2e Script_loadmovesprites: ; 0x97b2f ; script command 0x49 - call $2e20 - call $2dcf + call Function2e20 + call Function2dcf ret ; 0x97b36 @@ -3206,7 +3206,7 @@ Script_credits: ; 0x97bf3 DisplayCredits: call Script_resetfuncs ld a, $3 - call $261b + call Function261b call StopScript ret ; 0x97c05 diff --git a/engine/serial.asm b/engine/serial.asm new file mode 100644 index 000000000..fca9d82c3 --- /dev/null +++ b/engine/serial.asm @@ -0,0 +1,408 @@ +Serial: ; 6ef +; The serial interrupt. + + push af + push bc + push de + push hl + + ld a, [$ffc9] + and a + jr nz, .asm_71c + + ld a, [$c2d4] + bit 0, a + jr nz, .asm_721 + + ld a, [$ffcb] + inc a + jr z, .asm_726 + + ld a, [rSB] + ld [hSerialReceive], a + + ld a, [hSerialSend] + ld [rSB], a + + ld a, [$ffcb] + cp $2 + jr z, .asm_752 + + ld a, 0 << rSC_ON + ld [rSC], a + ld a, 1 << rSC_ON + ld [rSC], a + jr .asm_752 + +.asm_71c + call Function3e80 + jr .asm_75a + +.asm_721 + call Function2057 + jr .asm_75a + +.asm_726 + ld a, [rSB] + cp $1 + jr z, .asm_730 + cp $2 + jr nz, .asm_752 + +.asm_730 + ld [hSerialReceive], a + ld [$ffcb], a + cp $2 + jr z, .asm_74f + + xor a + ld [rSB], a + ld a, $3 + ld [rDIV], a + +.asm_73f + ld a, [rDIV] + bit 7, a + jr nz, .asm_73f + + ld a, 0 << rSC_ON + ld [rSC], a + ld a, 1 << rSC_ON + ld [rSC], a + jr .asm_752 + +.asm_74f + xor a + ld [rSB], a + +.asm_752 + ld a, $1 + ld [$ffca], a + ld a, $fe + ld [hSerialSend], a + +.asm_75a + pop hl + pop de + pop bc + pop af + reti +; 75f + +Function75f: ; 75f + ld a, $1 + ld [$ffcc], a +.asm_763 + ld a, [hl] + ld [hSerialSend], a + call Function78a + push bc + ld b, a + inc hl + ld a, $30 +.asm_76e + dec a + jr nz, .asm_76e + ld a, [$ffcc] + and a + ld a, b + pop bc + jr z, .asm_782 + dec hl + cp $fd + jr nz, .asm_763 + xor a + ld [$ffcc], a + jr .asm_763 + +.asm_782 + ld [de], a + inc de + dec bc + ld a, b + or c + jr nz, .asm_763 + ret +; 78a + +Function78a: ; 78a + xor a + ld [$ffca], a + ld a, [$ffcb] + cp $2 + jr nz, .asm_79b + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + +.asm_79b + ld a, [$ffca] + and a + jr nz, .asm_7e5 + ld a, [$ffcb] + cp $1 + jr nz, .asm_7c0 + call Function82b + jr z, .asm_7c0 + call .asm_825 + push hl + ld hl, $cf5c + inc [hl] + jr nz, .asm_7b7 + dec hl + inc [hl] + +.asm_7b7 + pop hl + call Function82b + jr nz, .asm_79b + jp Function833 + +.asm_7c0 + ld a, [rIE] + and $f + cp $8 + jr nz, .asm_79b + ld a, [$cf5d] + dec a + ld [$cf5d], a + jr nz, .asm_79b + ld a, [$cf5e] + dec a + ld [$cf5e], a + jr nz, .asm_79b + ld a, [$ffcb] + cp $1 + jr z, .asm_7e5 + ld a, $ff +.asm_7e2 + dec a + jr nz, .asm_7e2 + +.asm_7e5 + xor a + ld [$ffca], a + ld a, [rIE] + and $f + sub $8 + jr nz, .asm_7f8 + ld [$cf5d], a + ld a, $50 + ld [$cf5e], a + +.asm_7f8 + ld a, [hSerialReceive] + cp $fe + ret nz + call Function82b + jr z, .asm_813 + push hl + ld hl, $cf5c + ld a, [hl] + dec a + ld [hld], a + inc a + jr nz, .asm_80d + dec [hl] + +.asm_80d + pop hl + call Function82b + jr z, Function833 + +.asm_813 + ld a, [rIE] + and $f + cp $8 + ld a, $fe + ret z + ld a, [hl] + ld [hSerialSend], a + call DelayFrame + jp Function78a + +.asm_825 + ld a, $f +.asm_827 + dec a + jr nz, .asm_827 + ret +; 82b + +Function82b: ; 82b + push hl + ld hl, $cf5b + ld a, [hli] + or [hl] + pop hl + ret +; 833 + +Function833: ; 833 + dec a + ld [$cf5b], a + ld [$cf5c], a + ret +; 83b + +Function83b: ; 83b + ld hl, $cf56 + ld de, $cf51 + ld c, $2 + ld a, $1 + ld [$ffcc], a +.asm_847 + call DelayFrame + ld a, [hl] + ld [hSerialSend], a + call Function78a + ld b, a + inc hl + ld a, [$ffcc] + and a + ld a, $0 + ld [$ffcc], a + jr nz, .asm_847 + ld a, b + ld [de], a + inc de + dec c + jr nz, .asm_847 + ret +; 862 + +Function862: ; 862 + call Function309d + callab Function4000 + call Function87d + jp Function30b4 +; 871 + + +Function871: ; 871 + call Function309d + callab Function4000 + jp Function87d +; 87d + + + +Function87d: ; 87d + ld a, $ff + ld [$cf52], a +.asm_882 + call Function8c1 + call DelayFrame + call Function82b + jr z, .asm_89e + push hl + ld hl, $cf5c + dec [hl] + jr nz, .asm_89d + dec hl + dec [hl] + jr nz, .asm_89d + pop hl + xor a + jp Function833 + +.asm_89d + pop hl + +.asm_89e + ld a, [$cf52] + inc a + jr z, .asm_882 + ld b, $a +.asm_8a6 + call DelayFrame + call Function8c1 + dec b + jr nz, .asm_8a6 + ld b, $a +.asm_8b1 + call DelayFrame + call Function908 + dec b + jr nz, .asm_8b1 + ld a, [$cf52] + ld [$cf51], a + ret +; 8c1 + +Function8c1: ; 8c1 + push bc + ld b, $60 + ld a, [InLinkBattle] + cp $1 + jr z, .asm_8d7 + ld b, $60 + jr c, .asm_8d7 + cp $2 + ld b, $70 + jr z, .asm_8d7 + ld b, $80 + +.asm_8d7 + call Function8f3 + ld a, [$cf56] + add b + ld [hSerialSend], a + ld a, [$ffcb] + cp $2 + jr nz, .asm_8ee + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + +.asm_8ee + call Function8f3 + pop bc + ret +; 8f3 + +Function8f3: ; 8f3 + ld a, [hSerialReceive] + ld [$cf51], a + and $f0 + cp b + ret nz + xor a + ld [hSerialReceive], a + ld a, [$cf51] + and $f + ld [$cf52], a + ret +; 908 + +Function908: ; 908 + xor a + ld [hSerialSend], a + ld a, [$ffcb] + cp $2 + ret nz + ld a, $1 + ld [rSC], a + ld a, $81 + ld [rSC], a + ret +; 919 + +Function919: ; 919 + ld a, [InLinkBattle] + and a + ret nz + ld a, $2 + ld [rSB], a + xor a + ld [hSerialReceive], a + ld a, $0 + ld [rSC], a + ld a, $80 + ld [rSC], a + ret +; 92e + + diff --git a/engine/time.asm b/engine/time.asm new file mode 100644 index 000000000..fff52b173 --- /dev/null +++ b/engine/time.asm @@ -0,0 +1,311 @@ +; Functions relating to the timer interrupt and the real-time-clock. + + +AskTimer: ; 591 + push af + ld a, [$ffe9] + and a + jr z, .asm_59a + call Timer + +.asm_59a + pop af + reti +; 59c + + +LatchClock: ; 59c +; latch clock counter data + ld a, 0 + ld [MBC3LatchClock], a + ld a, 1 + ld [MBC3LatchClock], a + ret +; 5a7 + + +UpdateTime: ; 5a7 + call GetClock + call FixDays + call FixTime + callba GetTimeOfDay + ret +; 5b7 + + +GetClock: ; 5b7 +; store clock data in hRTCDayHi-hRTCSeconds + +; enable clock r/w + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + +; clock data is 'backwards' in hram + + call LatchClock + ld hl, MBC3SRamBank + ld de, MBC3RTC + + ld [hl], RTC_S + ld a, [de] + and $3f + ld [hRTCSeconds], a + + ld [hl], RTC_M + ld a, [de] + and $3f + ld [hRTCMinutes], a + + ld [hl], RTC_H + ld a, [de] + and $1f + ld [hRTCHours], a + + ld [hl], RTC_DL + ld a, [de] + ld [hRTCDayLo], a + + ld [hl], RTC_DH + ld a, [de] + ld [hRTCDayHi], a + +; unlatch clock / disable clock r/w + call CloseSRAM + ret +; 5e8 + + +FixDays: ; 5e8 +; fix day count +; mod by 140 + +; check if day count > 255 (bit 8 set) + ld a, [hRTCDayHi] ; DH + bit 0, a + jr z, .daylo +; reset dh (bit 8) + res 0, a + ld [hRTCDayHi], a ; DH + +; mod 140 +; mod twice since bit 8 (DH) was set + ld a, [hRTCDayLo] ; DL +.modh + sub 140 + jr nc, .modh +.modl + sub 140 + jr nc, .modl + add 140 + +; update dl + ld [hRTCDayLo], a ; DL + +; unknown output + ld a, $40 ; %1000000 + jr .set + +.daylo +; quit if fewer than 140 days have passed + ld a, [hRTCDayLo] ; DL + cp 140 + jr c, .quit + +; mod 140 +.mod + sub 140 + jr nc, .mod + add 140 + +; update dl + ld [hRTCDayLo], a ; DL + +; unknown output + ld a, $20 ; %100000 + +.set +; update clock with modded day value + push af + call SetClock + pop af + scf + ret + +.quit + xor a + ret +; 61d + + +FixTime: ; 61d +; add ingame time (set at newgame) to current time +; day hr min sec +; store time in CurDay, hHours, hMinutes, hSeconds + +; second + ld a, [hRTCSeconds] ; S + ld c, a + ld a, [StartSecond] + add c + sub 60 + jr nc, .updatesec + add 60 +.updatesec + ld [hSeconds], a + +; minute + ccf ; carry is set, so turn it off + ld a, [hRTCMinutes] ; M + ld c, a + ld a, [StartMinute] + adc c + sub 60 + jr nc, .updatemin + add 60 +.updatemin + ld [hMinutes], a + +; hour + ccf ; carry is set, so turn it off + ld a, [hRTCHours] ; H + ld c, a + ld a, [StartHour] + adc c + sub 24 + jr nc, .updatehr + add 24 +.updatehr + ld [hHours], a + +; day + ccf ; carry is set, so turn it off + ld a, [hRTCDayLo] ; DL + ld c, a + ld a, [StartDay] + adc c + ld [CurDay], a + ret +; 658 + +Function658: ; 658 + xor a + ld [StringBuffer2], a + ld a, $0 + ld [$d089], a + jr .asm_677 + + call UpdateTime + ld a, [hHours] + ld [$d087], a + ld a, [hMinutes] + ld [$d088], a + ld a, [hSeconds] + ld [$d089], a + jr .asm_677 + +.asm_677 + ld a, $5 + ld hl, $40ed + rst FarCall + ret +; 67e + + + +Function67e: ; 67e + call Function685 + call SetClock + ret +; 685 + +Function685: ; 685 + xor a + ld [hRTCSeconds], a + ld [hRTCMinutes], a + ld [hRTCHours], a + ld [hRTCDayLo], a + ld [hRTCDayHi], a + ret +; 691 + + +SetClock: ; 691 +; set clock data from hram + +; enable clock r/w + ld a, SRAM_ENABLE + ld [MBC3SRamEnable], a + +; set clock data +; stored 'backwards' in hram + + call LatchClock + ld hl, MBC3SRamBank + ld de, MBC3RTC + +; seems to be a halt check that got partially commented out +; this block is totally pointless + ld [hl], RTC_DH + ld a, [de] + bit 6, a ; halt + ld [de], a + +; seconds + ld [hl], RTC_S + ld a, [hRTCSeconds] + ld [de], a +; minutes + ld [hl], RTC_M + ld a, [hRTCMinutes] + ld [de], a +; hours + ld [hl], RTC_H + ld a, [hRTCHours] + ld [de], a +; day lo + ld [hl], RTC_DL + ld a, [hRTCDayLo] + ld [de], a +; day hi + ld [hl], RTC_DH + ld a, [hRTCDayHi] + res 6, a ; make sure timer is active + ld [de], a + +; cleanup + call CloseSRAM ; unlatch clock, disable clock r/w + ret +; 6c4 + + +Function6c4: ; 6c4 + xor a + push af + ld a, $0 + call GetSRAMBank + pop af + ld [$ac60], a + call CloseSRAM + ret +; 6d3 + +Function6d3: ; 6d3 + ld hl, $ac60 + push af + ld a, $0 + call GetSRAMBank + pop af + or [hl] + ld [hl], a + call CloseSRAM + ret +; 6e3 + +Function6e3: ; 6e3 + ld a, $0 + call GetSRAMBank + ld a, [$ac60] + call CloseSRAM + ret +; 6ef + diff --git a/engine/vblank.asm b/engine/vblank.asm index 6a319356c..44b3195f8 100644 --- a/engine/vblank.asm +++ b/engine/vblank.asm @@ -6,6 +6,8 @@ ; This prevents the display and audio output from lagging. + +VBlank: ; 283 push af push bc push de @@ -26,7 +28,7 @@ ld l, a ; down to business - call JpHl + call _hl_ ; since this is called once per frame call GameTimer |