diff options
Diffstat (limited to 'main.asm')
-rwxr-xr-x | main.asm | 7723 |
1 files changed, 58 insertions, 7665 deletions
@@ -2,7614 +2,7 @@ INCLUDE "charmap.asm" INCLUDE "macros.asm" INCLUDE "constants.asm" -SECTION "rst 00", ROM0 [$00] - di - jp Entry - -SECTION "rst 10", ROM0 [$10] - jp DelayFrame - -SECTION "rst 18", ROM0 [$18] - jp JumpToFuncInTable - -SECTION "rst 20", ROM0 [$20] - jp Func_486 - -SECTION "VBlankInt", ROM0 [$40] - jp VBlank - -SECTION "HBlankInt", ROM0 [$48] - jp LCD - -SECTION "TimerInt", ROM0 [$50] - jp Timer - -SECTION "SerialInt", ROM0 [$58] - jp Serial - -SECTION "JoypadInt", ROM0 [$60] - jp Joypad - -SECTION "Entry", ROM0 [$100] - -Entry: ; 0x100 - nop - jp Start - -SECTION "Header", ROM0 [$104] - - ; The header is generated by rgbfix. - ; The space here is allocated to prevent code from being overwritten. - ds $150 - $104 - -SECTION "Main", ROM0 [$150] - -Start: ; 0x150 - ld [hGameBoyColorFlag], a - ld sp, hGameBoyColorFlag - di - xor a - ld [rIF], a - ld a, [rLCDC] ; LCD Control - bit 7, a ; Check if LCD Display is enabled - jr nz, .LCDDisplayEnabled - set 7, a - ld [rLCDC], a -.LCDDisplayEnabled - ld bc, $0002 - call Func_948 -.waitForVBlank - ld a, [rLY] ; LY register (LCDC Y-Coordinate) - cp 145 ; > 144 means V-Blank - jr c, .waitForVBlank - ld a, $81 - ld [rLCDC], a ; Enable LCD Display - xor a - ld [rBGP], a ; Clear Palette Data - ld [rOBP0], a - ld [rOBP1], a - ld bc, $0002 - call Func_948 -.waitForVBlank2 - ld a, [rLY] ; LY register (LCDC Y-Coordinate) - cp 145 ; > 144 means V-Blank - jr c, .waitForVBlank2 - xor a - ld [rLCDC], a ; Disable LCD Display - ld hl, wc000 - ld bc, $2000 - call ClearData ; Clear WRAM Bank 0 - ld hl, vTiles0 - ld bc, $1000 - call ClearData ; Clear First half of VRAM - ld a, $a - ld [MBC5SRamEnable], a ; Enable RAM - ld a, $1 - ld [MBC5RomBank], a ; Load ROM Bank $1 - ld a, $0 - ld [MBC5RomBankOn], a ; Enable ROM Banking Mode - ld a, $0 - ld [MBC5SRamBank], a ; Set bits 5 and 6 of ROM Bank Number - ld a, $1 - ld [hLoadedROMBank], a - ld a, $1 - ld [MBC5RomBankOn], a ; Enable RAM Banking Mode - ld a, $0 - ld [MBC5SRamBank], a ; Load RAM Bank $0 - ld sp, wdfff ; Initialize stack pointer to the end of WRAM Bank $1 - ld hl, hPushOAM - ld bc, $007e - call ClearData ; Clear High RAM (HRAM) - call WriteDMACodeToHRAM - call ClearOAMBuffer - xor a - ld [wd7fb], a - ld [wd7fc], a - ld [wd7fd], a - ld [hHBlankRoutine], a - ld [$ffb1], a - ld [wd8e1], a - ld [wd7fe], a - ld [$fffc], a - ld hl, hLCDC - xor a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld a, $8f - ld [hli], a - ld a, $a6 - ld [hli], a - ld a, $0 - ld [wd849], a - ld [wd84a], a - ld a, Bank(PlaySong_BankF) - call SetSongBank - call Func_23b - ld a, [hGameBoyColorFlag] - and a - jr nz, .asm_222 - call Func_12f8 - rl a - and $1 - ld [$fffb], a - call Func_13a8 - ld a, [$fffb] - and a - jr z, .asm_222 - ld a, $1 - ld [wd917], a -.asm_222 - ld a, $1 - ld [rIE], a ; Only enable LCD Status interrupt - ei - ld a, $ff - ld [wd810], a - call Func_97a - xor a - ld [wdaa3], a - ld a, BANK(Func_1ffc) - ld hl, Func_1ffc - call BankSwitchSimple -Func_23b: ; 0x23b - ld a, [hGameBoyColorFlag] - cp $11 - jr nz, .asm_248 - ld a, $1 - ld [hGameBoyColorFlag], a - ld [$fffd], a - ret - -.asm_248 - xor a - ld [hGameBoyColorFlag], a - ld [$fffd], a - ret - -SoftReset: - di - ld sp, hGameBoyColorFlag - xor a - ld [rIF], a - ld bc, $2 - call Func_948 - ld hl, wc000 - ld bc, $2000 - call ClearData - ld hl, $8000 - ld bc, $1000 - call ClearData - ld a, $a - ld [MBC5SRamEnable], a - ld a, $1 - ld [MBC5RomBank], a - ld a, $0 - ld [MBC5RomBankOn], a - ld a, $0 - ld [MBC5SRamBank], a - ld a, $1 - ld [hLoadedROMBank], a - ld a, $1 - ld [MBC5RomBankOn], a - ld a, $0 - ld [MBC5SRamBank], a - ld sp, wdfff - call WriteDMACodeToHRAM - call ClearOAMBuffer - xor a - ld [wd7fb], a - ld [wd7fc], a - ld [wd7fd], a - ld [hHBlankRoutine], a - ld [$ffb1], a - ld [wd8e1], a - ld [wd7fe], a - ld hl, hLCDC - xor a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ld a, $8f - ld [hli], a - ld a, $a6 - ld [hli], a - ld a, $0 - ld [wd849], a - ld [wd84a], a - ld a, $f - call SetSongBank - ld a, [$fffb] - and a - jr z, .asm_02d5 - ld a, $1 - ld [wd917], a -.asm_02d5 - ld a, $1 - ld [rIE], a - ei - ld a, $ff - ld [wd810], a - call Func_97a - ld a, [hGameBoyColorFlag] - ld [$fffd], a - xor a - ld [wdaa3], a - ld a, $0 - ld hl, Func_1ffc - call BankSwitchSimple - ; fallthrough - -VBlank: ; 0x2f2 - push af - push bc - push de - push hl - call hPushOAM ; OAM DMA transfer - ld a, [hLCDC] - ld [rLCDC], a - call Func_113a - ei - ld a, [rLY] - cp $90 - jr c, .asm_328 - ld hl, hSTAT - ld c, rSTAT - $ff00 - ld a, [hli] - ld [$ff00+c], a - inc c - ld a, [hli] - ld [$ff00+c], a - inc c - ld a, [hli] - ld [$ff00+c], a - inc c - inc c - ld a, [hli] - ld [$ff00+c], a - inc c - inc c - ld a, [hli] - ld [$ff00+c], a - inc c - ld a, [hli] - ld [$ff00+c], a - inc c - ld a, [hli] - ld [$ff00+c], a - inc c - ld a, [hli] - ld [$ff00+c], a - inc c - ld a, [hli] - ld [$ff00+c], a -.asm_328 - ld a, [hLYC] - ld [hLastLYC], a - ld a, [hNextLYCSub] - ld [hLYCSub], a - ld a, [hNextFrameHBlankSCX] - ld [hHBlankSCX], a - ld a, [hNextFrameHBlankSCY] - ld [hHBlankSCY], a - call ReadJoypad - ld a, [wdaa3] - and a - jr nz, .asm_359 - ld a, [hJoypadState] - cp $f - jr nz, .asm_359 - ld a, [hNewlyPressedButtons] - and $f - jr z, .asm_359 - ld hl, [sp+$8] - ld [hl], $c3 - inc hl - ld [hl], $3 - ld a, $1 - ld [wdaa3], a -.asm_359 - ld hl, hNumFramesSinceLastVBlank - ld a, [hl] - inc [hl] - and a - jr nz, .asm_365 - ld hl, hNumFramesDropped - inc [hl] -.asm_365 - ld hl, hVBlankCount - inc [hl] - ld a, [wd8e1] - and a - call nz, Func_167b - ld a, [wd849] - and a - jr nz, .asm_37d - ld a, [wd85d] - and a - call nz, Func_504 -.asm_37d - ld a, [wd84a] - and a - jr z, .asm_39d - xor a - ld [wd84a], a - ld a, $1 - ld [wd849], a - ld a, $bc - ld [rTMA], a - ld a, $0 - ld [rTAC], a - ld hl, rIE - set 2, [hl] - ld a, $4 - ld [rTAC], a -.asm_39d - ld hl, MBC5SRamBank - ld a, [wd917] - and a - jr nz, .asm_3b5 - ld a, [wd803] - rrca - ld [wd803], a - and $1 - jr z, .asm_3b5 - set 3, [hl] - jr .asm_3b7 - -.asm_3b5 - res 3, [hl] -.asm_3b7 - ld a, [wd4aa] - and a - call nz, Func_e69 - pop hl - pop de - pop bc - pop af - reti - -Func_3c3: - ld a, [rLCDC] - bit 7, a - jr z, .asm_03cf - call Func_cb5 - call Func_576 -.asm_03cf - ld hl, hSTAT - res 6, [hl] - ld hl, rIE - res 1, [hl] - xor a - ld [MBC5SRamEnable], a - ld [rSB], a - ld [rSC], a - ld [rIE], a - ld [rNR52], a - ld a, [$fffd] - ld [hGameBoyColorFlag], a - jp SoftReset - -LCD: ; 0x3ec - push af - push bc - push de - push hl - ld a, [hHBlankRoutine] - sla a - ld c, a - ld b, $0 - ld hl, PointerTable_408 - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - jp [hl] - -Func_3ff: ; 0x3ff - ld a, $1 - ld [$ffb5], a - pop hl - pop de - pop bc - pop af - reti - -PointerTable_408: ; 0x408 - dw Func_fbc - dw Func_fbf - dw Func_fea - dw Func_105d - dw Func_109e - dw Func_10a1 - dw Func_10a4 - dw Func_10a7 - -Timer: ; 0x418 - ei - push af - push bc - push de - push hl - ld a, [wd849] - and a - jr z, .asm_42a - ld a, [wd85d] - and a - call nz, Func_504 -.asm_42a - ld a, [wd84a] - and a - jr z, .asm_440 - xor a - ld [wd84a], a - ld [wd849], a - ld a, $0 - ld [rTAC], a - ld hl, rIE - res 2, [hl] -.asm_440 - pop hl - pop de - pop bc - pop af - reti - -Serial: ; 0x445 - push af - push bc - push de - push hl - ld hl, Data_45d ; todo - push hl - ld a, [$ffb1] - sla a - ld c, a - ld b, $0 - ld hl, Data_462 ; todo - add hl, bc - ld c, [hl] - inc hl - ld b, [hl] - push bc - ret - -Data_45d: - db $e1, $d1, $c1, $f1, $d9 - -Data_462: - db $64, $16, $66, $04, $c9 - -Joypad: ; 0x467 - reti - -DelayFrame: ; 0x468 - ld a, [rLCDC] - bit 7, a - ret z - ld hl, hNumFramesSinceLastVBlank - xor a - ld [hl], a -.asm_472 - ld a, [hl] - and a - jr z, .asm_472 - ret - -JumpToFuncInTable: ; 0x477 -; Jumps to a function in the pointer table immediately following -; a "rst JumpTable" call. Function must be in the same Bank as the pointer table. -; input: a = index of function in table - sla a - pop hl - push de - ld e, a - ld d, $0 - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - ld l, e - ld h, d - pop de - jp [hl] - -Func_486: ; 0x486 - rlca - add l - ld l, a - jr nc, .noCarry - inc h -.noCarry - ld a, [hli] - ld h, [hl] - ld l, a - ret - -PlaySong: ; 0x490 - ld a, [hLoadedROMBank] - push af - ld a, [wCurrentSongBank] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, e - ld [wd7bf], a - ld a, [wCurrentSongBank] - ld [wd7c0], a - call PlaySong_BankF ; this function is replicated in multiple banks. - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -PlaySoundEffect: ; 0x4af -; input: de = sound effect id? I think d specifies something special and e holds the id - ld a, [wdead] - and a - ret nz - ld a, [wd800] - and a - jr z, .asm_4bd - ld a, d - and a - ret z -.asm_4bd - ld a, d - ld [wd800], a - ld d, $0 - ld a, [hLoadedROMBank] - push af - ld a, [wCurrentSongBank] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - call PlaySoundEffect_BankF ; this function is replicated in multiple banks - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -Func_4d8: ; 0x4d8 - push bc - push de - push hl - ld a, [wddcb] - ld hl, wddfd - or [hl] - ld hl, wde2f - or [hl] - and $1 - call z, PlaySoundEffect - pop hl - pop de - pop bc - ret - -PlayCry: ; 0x4ef -; Plays a Pokemon cry. -; Input: e = mon id - ld a, [hLoadedROMBank] - push af - ld a, [wCurrentSongBank] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - call PlayCry_BankF ; this function is replicated in multiple banks - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -Func_504: ; 0x504 - ld a, [hLoadedROMBank] - push af - ld a, [wCurrentSongBank] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - call $4180 ; todo - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, [wd801] - inc a - ld [wd801], a - and $3 - ret nz - ld a, [wd800] - and a - ret z - dec a - ld [wd800], a - ret - -SetSongBank: ; 0x52c - di - ld [wCurrentSongBank], a - ei - ret - -CallInFollowingTable: ; 0x532 -; Calls a function in a table located immediately after a call to this function. -; Inputs: a = entry in the table - ld e, a - ld d, $0 - sla e - rl d - sla e - rl d ; multiplied a by 4 because entries in the table are 4 bytes each - pop hl - add hl, de - ld e, [hl] - inc hl - ld d, [hl] - inc hl - ld a, [hl] - ld h, d - ld l, e - jp BankSwitch - -BankSwitchSimple: ; 0x549 -; Switches to Bank in register a and jumps to hl. - ld [hLoadedROMBank], a - ld [MBC5RomBank], a ; Load Bank - jp [hl] - -BankSwitch: ; 0x54f - ld e, a - ld a, [hLoadedROMBank] ; currently-loaded Bank - cp e - jr z, .doJump - push af - ld a, e - call .loadNewBank - call .doJump - pop de - ld a, d -.loadNewBank - push hl - push de - ld hl, rIE - ld d, [hl] - ld [hl], $0 - ld [MBC5RomBank], a - ld [hLoadedROMBank], a - ld [hl], d - pop de - pop hl - ret - -.doJump - ld a, [hFarCallTempE] - ld e, a - ld a, [hFarCallTempA] - jp [hl] - -Func_576: ; 0x576 - ld a, [rLCDC] - bit 7, a - ret z - ld a, [hLCDC] - res 7, a - ld [hLCDC], a -.asm_581 - ld a, [rLCDC] - bit 7, a - jr nz, .asm_581 - ret - -Func_588: ; 0x588 - ld a, [hFFC4] - and a - call nz, Func_597 - ld a, [hLCDC] - set 7, a - ld [rLCDC], a - ld [hLCDC], a - ret - -Func_597: ; 0x597 - ld de, rBGPI - ld a, $80 - ld [de], a - inc de - ld b, $8 -.asm_5a0 - ld a, [wd80c] - call Func_5c2 - dec b - jr nz, .asm_5a0 - ld de, rOBPI - ld a, $80 - ld [de], a - inc de - ld b, $4 -.asm_5b2 - ld a, [wd80d] - call Func_5c2 - ld a, [wd80e] - call Func_5c2 - dec b - jr nz, .asm_5b2 - ret - -Func_5c2: ; 0x5c2 - push bc - ld b, $4 -.asm_5c5 - push af - push bc - and $3 - sla a - ld c, a - ld b, $0 - ld hl, Data_5e1 - add hl, bc - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - pop bc - pop af - srl a - srl a - dec b - jr nz, .asm_5c5 - pop bc - ret - -Data_5e1: - dr $5e1, $5e9 - -Func_5e9: - ld a, [rIE] - res 0, a - ld [rIE], a - ret - -Func_5f0: - ld a, [rIE] - set 0, a - ld [rIE], a - ret - -WriteDMACodeToHRAM: ; 0x5f7 -; Initializes registers hPushOAM - hFarCallTempA - ld c, $80 - ld b, $a ; number of bytes to load - ld hl, DMARoutine -.loop - ld a, [hli] - ld [$ff00+c], a ; add register c to $ff00, and store register a into the resulting address - inc c - dec b - jr nz, .loop - ret - -DMARoutine: -; This routine is initially loaded into hPushOAM - hFarCallTempA by WriteDMACodeToHRAM. - ld a, (wOAMBuffer >> 8) - ld [rDMA], a ; start DMA - ld a, $28 -.waitLoop ; wait for DMA to finish - dec a - jr nz, .waitLoop - ret - -WaitForLCD: ; 0x60f -; Wait for LCD controller to stop reading from both OAM and VRAM because -; CPU can't access OAM, VRAM, or palette data ($ff69, $ff6b) during this time. - ld a, [rSTAT] ; LCDC Status register - and $3 - jr nz, WaitForLCD - ld a, $a -.delay10Cycles - dec a - jr nz, .delay10Cycles - ret - -Func_61b: ; 0x61b - ld a, [rLY] ; LY register (LCDC Y-Coordinate) - cp $40 - jr c, .asm_625 - cp $80 - jr c, .asm_63d -.asm_625 - ld a, [rLY] ; LY register (LCDC Y-Coordinate) - cp $40 - jr c, .asm_625 - cp $80 - jr nc, .asm_625 -.asm_62f - ld a, [rSTAT] - and $3 - jr nz, .asm_62f ; wait for lcd controller to finish transferring data - ld a, $15 -.wait - dec a - jr nz, .wait - nop - nop - nop -.asm_63d - ret - -Func_63e: ; 0xc3e - dec bc -.asm_63f - ld [hli], a - dec bc - bit 7, b - jr z, .asm_63f - ret - -Func_646: - srl b - rr c -.asm_064a - ld a, e - ld [hli], a - ld a, d - ld [hli], a - dec bc - ld a, b - or c - jr nz, .asm_064a - ret - -ClearData: ; 0x654 -; Clears bc bytes starting at hl. -; bc can be a maximum of $7fff, since it checks bit 7 of b when looping. - xor a - dec bc -.clearLoop - ld [hli], a - dec bc - bit 7, b - jr z, .clearLoop - ret - -LocalCopyData: ; 0x65d - ld a, [hli] - ld [de], a - inc de - dec bc - ld a, c - or b - jr nz, LocalCopyData - ret - -FarCopyData: ; 0x666 spooky -; Copies data from any bank to either working RAM or video RAM -; Input: hl = address of data to copy -; a = bank of data to copy -; de = destination for data -; bc = number of bytes to copy - bit 7, h - jr nz, .copyFromSRAM - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - scf - jr .copyData - -.copyFromSRAM - ld [MBC5SRamBank], a - and a -.copyData - push af -.copyLoop - ld a, [hli] - ld [de], a - inc de - dec bc - ld a, c - or b - jr nz, .copyLoop - pop af - ret nc - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -ReadByteFromBank: ; 0x68f -; Input: a = bank -; hl = address of byte to read -; Output: a = byte at a:hl - push de - ld d, a - ld a, [hLoadedROMBank] - ld e, a - ld a, d - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld d, [hl] - ld a, e - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, d - pop de - ret - -LoadVideoData: ; 0x6a4 -; Input: -; hl = address of pointer table -; a = index of item to load in pointer table -; This needs more documentation. It loads things like graphics and palettes. - sla a - ld c, a - ld b, $0 - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a -.loadItem - ld a, [hli] - ld c, a - and [hl] - cp $ff ; two consecutive $ff bytes terminate the array - ret z - ld a, [hli] - ld b, a ; bc contains pointer to data to be loaded - push hl - push bc - ld a, [hli] ; a contains bank of data to be loaded - ld e, [hl] - inc hl - ld d, [hl] ; de contains destination address for data - inc hl - ld c, [hl] - inc hl - ld b, [hl] ; bc contains last word of data struct - inc hl ; this is a wasted instruction - pop hl - call Func_6cb - pop hl - ld bc, $0005 - add hl, bc - jr .loadItem - -Func_6cb: ; 0x6cb - srl b - rr c - jp c, Func_6fd ; if lowest bit of bc is set - jp Func_6d5 ; This jumps to the next instruction... Strange. - -Func_6d5: ; 0x6d5 - ld [hROMBankBuffer], a ; save bank of data to be loaded - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] ; a contains bank of data to be loaded - ld [hLoadedROMBank], a - ld [MBC5RomBank], a ; switch bank to the bank of data to be loaded - srl b - rr c - rl a - and $1 ; checks bit 1 of the last word in the data struct - ld [rVBK], a ; set VRAM Bank -.copyByte - ld a, [hli] - ld [de], a - inc de - dec bc - ld a, c - or b ; does bc = 0? - jr nz, .copyByte - xor a - ld [rVBK], a ; set VRAM Bank to Bank 0 - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a ; reload the previous ROM Bank - ret - -Func_6fd: ; 0x6fd - ld [hROMBankBuffer], a ; save bank of data to be loaded - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] ; a contains bank of data to be loaded - ld [hLoadedROMBank], a - ld [MBC5RomBank], a ; switch bank to the bank of data to be loaded - ld a, e - bit 6, a - jr nz, .asm_717 - ld de, rBGPI - call Func_724 - jr z, .asm_71d - xor a -.asm_717 - ld de, rOBPI - call Func_724 -.asm_71d - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -Func_724: ; 0x724 - res 6, a - ld b, a - set 7, a - ld [de], a - inc de -.copyByte - ld a, [hli] - ld [de], a - inc b - dec c - ret z - bit 6, b - jr z, .copyByte - ret - -LoadOrCopyVRAMData: ; 0x735 - push hl - ld hl, rLCDC - bit 7, [hl] - pop hl - jp z, FarCopyData - ; fall through -LoadVRAMData: ; 0x73f -; This loads some data into VRAM. It waits for the LCD H-Blank to copy the data 4 bytes at a time. -; input: hl = source of data -; a = bank of data to load -; de = destination of data -; bc = number of bytes to copy - bit 7, h - jr nz, .asm_752 - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - scf - jr .asm_756 - -.asm_752 - ld [MBC5SRamBank], a - and a -.asm_756 - push af - call WaitForLCD -.loop - call Func_61b -.waitForHBlank - ld a, [rSTAT] - and $3 - jr nz, .waitForHBlank - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - dec bc - dec bc - dec bc - dec bc - nop - nop - nop - nop - ld a, b - or c - jr nz, .loop - pop af - ret nc - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -FarCopyPalettes: ; 0x790 - push hl - ld hl, rLCDC - bit 7, [hl] - pop hl - jp nz, Func_7dc - bit 7, h - jr nz, .asm_7ad - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - scf - jr .asm_7b1 - -.asm_7ad - ld [MBC5SRamBank], a - and a -.asm_7b1 - push af - ld a, e - bit 6, e - ld de, rBGPI - jr z, .asm_7bf - res 6, a - ld de, rOBPI -.asm_7bf - set 7, a - ld [de], a - inc de -.asm_7c3 - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - dec bc - dec bc - dec bc - dec bc - ld a, b - or c - jr nz, .asm_7c3 - pop af - ret nc - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -Func_7dc: ; 0x7dc - bit 7, h - jr nz, .asm_7ef - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - scf - jr .asm_7f3 - -.asm_7ef - ld [MBC5SRamBank], a - and a -.asm_7f3 - push af - ld a, e - bit 6, e - ld de, rBGPI - jr z, .asm_801 - res 6, a - ld de, rOBPI -.asm_801 - push hl - ld h, d - ld l, e - set 7, a - call PutTileInVRAM - inc de - pop hl - call WaitForLCD -.asm_80e - call Func_61b -.asm_811 - ld a, [rSTAT] - and $3 - jr nz, .asm_811 - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - dec bc - dec bc - dec bc - dec bc - nop - nop - nop - nop - ld a, b - or c - jr nz, .asm_80e - pop af - ret nc - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -PutTileInVRAM: ; 0x848 -; Puts a tile in VRAM. -; input: a = tile number -; hl = pointer to VRAM location where tile should be placed - push af - call WaitForLCD - call Func_61b -.asm_84f - ld a, [rSTAT] - and $3 - jr nz, .asm_84f ; wait for lcd controller to finish transferring data - pop af - ld [hl], a ; Store tile number in VRAM background map - ret - -Func_858: ; 0x858 - push af - call WaitForLCD - call Func_61b -.asm_85f - ld a, [rSTAT] - and $3 - jr nz, .asm_85f - ld a, $1 - ld [rVBK], a - pop af - ld [hl], a - xor a - ld [rVBK], a - ret - -Func_86f: ; 0x86f - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, [rLCDC] - bit 7, a - jr nz, .asm_8ac - ld a, $1 - ld [rVBK], a - ld b, $4 -.asm_887 - push bc - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld bc, $001a - add hl, bc - pop bc - dec b - jr nz, .asm_887 - xor a - ld [rVBK], a - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -.asm_8ac - ld b, $4 -.asm_8ae - push bc - ld a, [de] - call Func_858 - inc hl - inc de - ld a, [de] - call Func_858 - inc hl - inc de - ld a, [de] - call Func_858 - inc hl - inc de - ld a, [de] - call Func_858 - inc hl - inc de - ld a, [de] - call Func_858 - inc hl - inc de - ld a, [de] - call Func_858 - inc de - ld bc, $001b - add hl, bc - pop bc - dec b - jr nz, .asm_8ae - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -Func_8e1: ; 0x8e1 - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, [rLCDC] - bit 7, a - jr nz, .asm_902 - ld a, c - ld [hli], a -.asm_8f5 - ld a, [de] - ld [hl], a - inc de - dec b - jr nz, .asm_8f5 - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -.asm_902 - ld a, c - call PutTileInVRAM - inc hl -.asm_907 - ld a, [de] - call PutTileInVRAM - inc de - dec b - jr nz, .asm_907 - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -ClearOAMBuffer: ; 0x916 -; Clears the OAM buffer by loading $f0 into all of the entries. - ld hl, wOAMBuffer ; 0xd000 - ld b, 4 * 40 ; wOAMBuffer is 4 * 40 bytes long (40 OAM entries, 4 bytes each) - ld a, $f0 ; byte to write -.loop - ld [hli], a - dec b - jr nz, .loop - xor a - ld [wd802], a - ret - -Func_926: ; 0x926 - ld a, [wd802] - cp $a0 - jr nc, .asm_93a - ld l, a - ld h, $d0 - cpl - add $a1 - ld b, a - ld a, $f0 -.asm_936 - ld [hli], a - dec b - jr nz, .asm_936 -.asm_93a - xor a - ld [wd802], a - ret - -Func_93f: ; 0x93f - push bc - rst AdvanceFrame - pop bc - dec bc - ld a, c - or b - jr nz, Func_93f - ret - -Func_948: ; 0x948 - ld de, $06d6 -.asm_94b - nop - nop - nop - dec de - ld a, d - or e - jr nz, .asm_94b - dec bc - ld a, b - or c - jr nz, Func_948 - ret - -GenRandom: ; 0x959 - push bc - push de - push hl - ld a, [wd811] - ld c, a - ld b, $0 - inc a - cp $37 - jr nz, .asm_96e - call Func_9fa - xor a - ld bc, $0000 -.asm_96e - ld [wd811], a - ld hl, wd812 - add hl, bc - ld a, [hl] - pop hl - pop de - pop bc - ret - -Func_97a: ; 0x97a - ld a, [wd810] - ld d, a - ld a, $0 - ld a, [$afff] -.asm_983 - cp d - jr c, .asm_989 - sub d - jr .asm_983 - -.asm_989 - ld [wd80f], a - ld [wd848], a - ld e, $1 - ld hl, Data_9c4 ; todo - ld a, $36 -.asm_996 - push af - ld c, [hl] - inc hl - ld b, $0 - push hl - ld hl, wd812 - add hl, bc - ld [hl], e - ld a, [wd80f] - sub e - jr nc, .asm_9a8 - add d -.asm_9a8 - ld e, a - ld a, [hl] - ld [wd80f], a - pop hl - pop af - dec a - jr nz, .asm_996 - call Func_9fa - call Func_9fa - call Func_9fa - ld a, $0 - call GenRandom - ld [$afff], a - ret - -Data_9c4: - db $14, $29, $07, $1c, $31, $0f, $24, $02, $17 - db $2c, $0a, $1f, $34, $12, $27, $05, $1a, $2f - db $0d, $22, $00, $15, $2a, $08, $1d, $32, $10 - db $25, $03, $18, $2d, $0b, $20, $35, $13, $28 - db $06, $1b, $30, $0e, $23, $01, $16, $2b, $09 - db $1e, $33, $11, $26, $04, $19, $2e, $0c, $21 - -Func_9fa: ; 0x9fa - ld a, [wd810] - ld d, a - ld bc, wd812 - ld hl, wd831 - ld e, $18 -.asm_a06 - ld a, [bc] - sub [hl] - jr nc, .asm_a0b - add d -.asm_a0b - ld [bc], a - dec e - jr nz, .asm_a06 - ld bc, wd82a - ld hl, wd812 - ld e, $1f -.asm_a17 - ld a, [bc] - sub [hl] - jr nc, .asm_a1c - add d -.asm_a1c - ld [bc], a - dec e - jr nz, .asm_a17 - ret - -Func_a21: ; 0xa21 - push bc - push hl - ld c, a - ld b, $0 - ld hl, Data_a38 - add hl, bc - ld l, [hl] - call GenRandom - call Func_dd4 - inc h - srl h - ld a, h - pop hl - pop bc - ret - -Data_a38: -x = 0 -REPT 128 - db x -x = x + 2 -IF x == $80 -x = x + 1 -ENDC -ENDR - -ReadJoypad: ; 0xab8 -; Reads the current state of the joypad and saves the state into -; some registers the game uses during gameplay. It remembers the joypad state -; from the current frame, previous frame, and two frames ago. - ld a, $20 - ld [rJOYP], a - ld a, [rJOYP] - ld a, [rJOYP] - and $f - swap a - ld b, a - ld a, $30 - ld [rJOYP], a - ld a, $10 - ld [rJOYP], a - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - and $f - or b - cpl ; a contains currently-pressed buttons - ld [hJoypadState], a - ld a, $30 - ld [rJOYP], a - ld a, [hJoypadState] - ld hl, hPreviousJoypadState - xor [hl] ; a contains buttons that are different from previous frame - push af - ld hl, hJoypadState - and [hl] ; a contains newly-pressed buttons compared to last frame - ld [hNewlyPressedButtons], a - ld [hPressedButtons], a - pop af - ld hl, hPreviousJoypadState - and [hl] ; a contains newly-pressed buttons compared to two frames ago - ld [hPrevPreviousJoypadState], a - ld a, [hJoypadState] - and a - jr z, .asm_b15 - ld hl, hPreviousJoypadState - cp [hl] - jr nz, .asm_b15 - ; button(s) is pressed, and they're identical to the buttons pressed last frame. - ; this code is related to holding down a button for an extended period of time. - ld hl, hJoyRepeatDelay - dec [hl] - jr nz, .asm_b1a - ld a, [hJoypadState] - ld [hPressedButtons], a - ld a, [wd807] - ld [hJoyRepeatDelay], a - jr .asm_b1a - -.asm_b15 - ld a, [wd806] - ld [hJoyRepeatDelay], a -.asm_b1a - ld a, [hJoypadState] - ld [hPreviousJoypadState], a - ld hl, wd808 - ld a, [hJoypadState] - or [hl] - ld [hli], a - ld a, [hNewlyPressedButtons] - or [hl] - ld [hli], a - ld a, [hPressedButtons] - or [hl] - ld [hli], a - ret - -Func_b2e: ; 0xb2e - ld hl, wd808 - xor a - ld [hli], a - ld [hli], a - ld [hl], a - ret - -IsKeyPressed2: ; 0xb36 - ld a, [hJoypadState] - and [hl] - jr z, .asm_b3e - cp [hl] - jr z, .asm_b48 -.asm_b3e - inc hl - ld a, [hJoypadState] - and [hl] - ret z - cp [hl] - jr z, .asm_b48 - xor a - ret - -.asm_b48 - ld a, $1 - and a - ret - -IsKeyPressed: ; 0xb4c -; Checks if a key for the specified key config is pressed. -; input: hl = pointer to key config byte pair (e.g. wKeyConfigLeftFlipper) -; output: zero flag is set if a corresponding key is pressed -; zero flag is reset if no corresponding key is pressed - ld a, [hJoypadState] - and [hl] - jr z, .asm_b58 - cp [hl] - jr nz, .asm_b58 - ld a, [hNewlyPressedButtons] - and [hl] - ret nz -.asm_b58 - inc hl - ld a, [hJoypadState] - and [hl] - ret z - cp [hl] - jr nz, .asm_b64 - ld a, [hNewlyPressedButtons] - and [hl] - ret - -.asm_b64 - xor a - ret - -Func_b66: ; 0xb66 - ld a, [hGameBoyColorFlag] - and a - jr nz, .asm_b73 - xor a - ld [hBGP], a - ld [hOBP0], a - ld [hOBP1], a - ret - -.asm_b73 - ld de, rBGPI - ld hl, wPaletteData ; todo - ld b, $0 - ld c, $20 -.asm_b7d - ld a, b - ld [rBGPI], a - inc b - ld a, [rBGPD] - ld [hli], a - ld a, b - ld [rBGPI], a - inc b - ld a, [rBGPD] - ld [hli], a - dec c - jr nz, .asm_b7d - ld b, $0 - ld c, $20 -.asm_b92 - ld a, b - ld [rOBPI], a - inc b - ld a, [rOBPD] - ld [hli], a - ld a, b - ld [rOBPI], a - inc b - ld a, [rOBPD] - ld [hli], a - dec c - jr nz, .asm_b92 - ld de, rBGPI - ld b, $2 -.asm_ba8 - ld a, $80 - ld [de], a - inc de - ld c, $20 -.asm_bae - ld a, $ff - ld [de], a - ld [hli], a - ld a, $7f - ld [de], a - ld [hli], a - dec c - jr nz, .asm_bae - inc de - dec b - jr nz, .asm_ba8 - ret - -Func_bbe: ; 0xbbe - ld a, [hGameBoyColorFlag] - and a - jp nz, Func_c19 - ld hl, hBGP - ld de, wd80c - ld b, $3 -.asm_bcc - ld a, [de] - and $55 - ld c, a - ld a, [de] - and $aa - srl a - and c - ld [hli], a - inc de - dec b - jr nz, .asm_bcc - ld bc, $0002 - call Func_93f - ld hl, hBGP - ld de, wd80c - ld b, $3 -.asm_be9 - ld a, [de] - and $aa - srl a - add [hl] - ld [hli], a - inc de - dec b - jr nz, .asm_be9 - ld bc, $0002 - call Func_93f - ld hl, hBGP - ld de, wd80c - ld b, $3 -.asm_c02 - ld a, [de] - and $55 - ld c, a - ld a, [de] - and $aa - srl a - or c - add [hl] - ld [hli], a - inc de - dec b - jr nz, .asm_c02 - ld bc, $0002 - call Func_93f - ret - -Func_c19: ; 0xc19 - ld b, $10 -.asm_c1b - push bc - ld de, wPaletteData - ld hl, wd280 - call Func_c2d - call Func_d61 - pop bc - dec b - jr nz, .asm_c1b - ret - -Func_c2d: ; 0xc2d - ld a, b - cp $1 - jr z, .asm_c49 - ld c, $40 -.asm_c34 - push bc - ld a, [hli] - sub $42 - ld c, a - ld a, [hld] - sbc $8 - ld b, a - call Func_c60 - ld a, c - ld [hli], a - ld a, b - ld [hli], a - pop bc - dec c - jr nz, .asm_c34 - ret - -.asm_c49 - ld c, $40 -.asm_c4b - push bc - ld a, [hli] - sub $21 - ld c, a - ld a, [hld] - sbc $4 - ld b, a - call Func_c60 - ld a, c - ld [hli], a - ld a, b - ld [hli], a - pop bc - dec c - jr nz, .asm_c4b - ret - -Func_c60: ; 0xc60 - push hl - ld a, [de] - and $1f - ld l, a - ld a, c - and $1f - cp l - jr nc, .asm_c70 - ld a, c - and $e0 - or l - ld c, a -.asm_c70 - ld a, [de] - and $e0 - ld l, a - inc de - ld a, [de] - srl a - rr l - srl a - rr l - ld a, c - and $e0 - ld h, a - ld a, b - srl a - rr h - srl a - rr h - ld a, h - cp l - jr nc, .asm_ca3 - ld h, $0 - sla l - rl h - sla l - rl h - ld a, c - and $1f - or l - ld c, a - ld a, b - and $7c - or h - ld b, a -.asm_ca3 - ld a, [de] - and $7c - ld l, a - ld a, b - and $7c - cp l - jr nc, .asm_cb2 - ld a, b - and $3 - or l - ld b, a -.asm_cb2 - inc de - pop hl - ret - -Func_cb5: ; 0xcb5 - ld a, [hGameBoyColorFlag] - and a - jp nz, Func_cee - ld hl, hBGP - ld b, $3 -.asm_cc0 - push bc - push hl - ld b, $3 -.asm_cc4 - ld a, [hl] - and $55 - ld c, a - ld a, [hl] - and $aa - srl a - or c - cpl - inc a - add [hl] - ld [hli], a - dec b - jr nz, .asm_cc4 - ld bc, $0002 - call Func_93f - pop hl - pop bc - dec b - jr nz, .asm_cc0 - xor a - ld hl, hBGP - ld [hli], a - ld [hli], a - ld [hl], a - ld bc, $0002 - call Func_93f - ret - -Func_cee: ; 0xcee - ld hl, wd280 - ld de, rBGPI - call Func_d9d - ld hl, wd2c0 - ld de, rOBPI - call Func_d9d - ld b, $10 -.asm_d02 - push bc - ld hl, wd280 - call Func_d11 - call Func_d61 - pop bc - dec b - jr nz, .asm_d02 - ret - -Func_d11: ; 0xd11 - ld b, $40 -.asm_d13 - ld a, [hl] - and $1f - add $2 - ld e, a - cp $1f - jr c, .asm_d1f - ld e, $1f -.asm_d1f - ld a, [hl] - and $e0 - or e - ld [hl], a - ld a, [hli] - and $e0 - ld e, [hl] - dec hl - srl e - rr a - srl e - rr a - add $10 - ld e, a - jr nc, .asm_d38 - ld e, $f8 -.asm_d38 - ld d, $0 - sla e - rl d - sla e - rl d - ld a, [hl] - and $1f - or e - ld [hli], a - ld a, [hl] - and $7c - or d - ld [hl], a - ld a, [hl] - and $7c - add $8 - ld e, a - cp $7c - jr c, .asm_d58 - ld e, $7c -.asm_d58 - ld a, [hl] - and $3 - or e - ld [hli], a - dec b - jr nz, .asm_d13 - ret - -Func_d61: ; 0d61 - ld a, [rIE] - res 0, a - ld [rIE], a - ld hl, wd280 - ld de, rBGPI - ld a, $80 - ld [de], a - inc de -.asm_d71 - ld a, [rLY] - cp $90 - jr c, .asm_d71 - ld b, $10 -.asm_d79 - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - dec b - jr nz, .asm_d79 - inc de - ld a, $80 - ld [de], a - inc de - ld b, $10 -.asm_d8b - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - dec b - jr nz, .asm_d8b - ld a, [rIE] - set 0, a - ld [rIE], a - ret - -Func_d9d: ; 0xd9d - ld b, $0 - ld c, e - inc c - call WaitForLCD -.asm_da4 - call Func_61b -.asm_da7 - ld a, [rSTAT] - and $3 - jr nz, .asm_da7 ; wait for lcd controller to finish transferring data - ld a, b - ld [de], a - ld a, [$ff00+c] - ld [hli], a - inc b - ld a, b - ld [de], a - ld a, [$ff00+c] - ld [hli], a - inc b - ld a, b - ld [de], a - ld a, [$ff00+c] - ld [hli], a - inc b - ld a, b - ld [de], a - ld a, [$ff00+c] - ld [hli], a - inc b - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - nop - ld a, b - cp $40 - jr nz, .asm_da4 - ret - -Func_dd4: ; 0xdd4 -; Return a * l to hl -; Stupid waste of space - push bc - ld c, l - ld b, $0 - ld hl, $0000 - bit 0, a - jr z, .asm_de0 - add hl, bc -.asm_de0 - sla c - rl b - bit 1, a - jr z, .asm_de9 - add hl, bc -.asm_de9 - sla c - rl b - bit 2, a - jr z, .asm_df2 - add hl, bc -.asm_df2 - sla c - rl b - bit 3, a - jr z, .asm_dfb - add hl, bc -.asm_dfb - sla c - rl b - bit 4, a - jr z, .asm_e04 - add hl, bc -.asm_e04 - sla c - rl b - bit 5, a - jr z, .asm_e0d - add hl, bc -.asm_e0d - sla c - rl b - bit 6, a - jr z, .asm_e16 - add hl, bc -.asm_e16 - sla c - rl b - bit 7, a - jr z, .asm_e1f - add hl, bc -.asm_e1f - pop bc - ret - -ConvertHexByteToDecWord: ; 0xe21 -; Convert the base-16 value in register a into a Binary Coded Decimal (base-10) word. -; Example: If a = $97, de = $0151. - ld b, a - ld hl, PowersOfTwo ; todo - ld de, $0000 -.asm_e28 - srl b - ld a, [hli] - jr nc, .asm_e34 - add e - daa - ld e, a - ld a, [hl] - adc d - daa - ld d, a -.asm_e34 - inc hl - ld a, b - and a - jr nz, .asm_e28 - ret - -PowersOfTwo: ; 0xe3a - dw $0001 - dw $0002 - dw $0004 - dw $0008 - dw $0016 - dw $0032 - dw $0064 - dw $0128 - -Func_e4a: ; 0xe4a - ld a, [hl] - cp $64 - jr z, .asm_e53 - inc a - ld [hl], a - scf - ret - -.asm_e53 - and a - ret - -Func_e55: ; 0xe55 - cp c - jr c, .asm_e5b - sub c - jr Func_e55 - -.asm_e5b - and a - ret - -Func_e5d: ; 0xe5d - ld a, $1 - ld [wd84a], a -.asm_e62 - ld a, [wd84a] - and a - jr nz, .asm_e62 - ret - -Func_e69: ; 0xe69 - ld a, [rLY] - cp $90 - jr nc, Func_e69 -.asm_e6f - ld a, [rSTAT] - and $3 - jr nz, .asm_e6f - ld a, $a -.asm_e77 - dec a - jr nz, .asm_e77 - ld hl, wcBottomMessageText + $140 - call Func_eef - push hl - ld hl, $9c00 - call Func_ef8 - pop hl - call Func_eef - push hl - ld hl, $9c04 - call Func_ef8 - pop hl - call Func_eef - push hl - ld hl, $9c08 - call Func_ef8 - pop hl - call Func_eef - push hl - ld hl, $9c0c - call Func_ef8 - pop hl - call Func_eef - push hl - ld hl, $9c10 - call Func_ef8 - pop hl - ld hl, wcBottomMessageText + $1c0 - call Func_eef - push hl - ld hl, $9c20 - call Func_ef8 - pop hl - call Func_eef - push hl - ld hl, $9c24 - call Func_ef8 - pop hl - call Func_eef - push hl - ld hl, $9c28 - call Func_ef8 - pop hl - call Func_eef - push hl - ld hl, $9c2c - call Func_ef8 - pop hl - call Func_eef - push hl - ld hl, $9c30 - call Func_ef8 - pop hl - ret - -Func_eef: ; 0xeef - ld a, [hli] - ld b, a - ld a, [hli] - ld c, a - ld a, [hli] - ld d, a - ld a, [hli] - ld e, a - ret - -Func_ef8: ; 0xef8 - ld a, [rSTAT] - and $3 - jr nz, Func_ef8 - ld a, b - ld [hli], a - ld a, c - ld [hli], a - ld a, d - ld [hli], a - ld a, e - ld [hli], a - ld a, $a -.asm_f08 - dec a - jr nz, .asm_f08 - ret - -Func_f0c: ; 0xf0c - call Func_f34 - ret nc -.asm_f10 - ld a, [hli] - ld [de], a - inc de - dec bc - ld a, b - or c - jr nz, .asm_f10 - scf - ret - -SaveData: ; 0xf1a -; Input: hl = data to save -; bc = number of bytes to save -; de = destination for saved data - push bc - push de - push hl -.asm_f1d - ld a, [hli] - ld [de], a - inc de - dec bc - ld a, b - or c - jr nz, .asm_f1d - pop hl - pop de - pop bc - ld h, d - ld l, e - call Func_f74 - call Func_fa1 - call Func_f4c - ret - -Func_f34: ; 0xf34 - call Func_f62 - jr nc, .asm_f3f - call Func_f7e - jr nc, .asm_f3f - ret - -.asm_f3f - add hl, bc - inc hl - inc hl - inc hl - inc hl - call Func_f62 - ret nc - call Func_f7e - ret - -Func_f4c: ; 0xf4c - push bc - push hl - push de - inc bc - inc bc - inc bc - inc bc - ld d, h - ld e, l - add hl, bc -.asm_f56 - ld a, [de] - ld [hli], a - inc de - dec bc - ld a, b - or c - jr nz, .asm_f56 - pop de - pop hl - pop bc - ret - -Func_f62: ; 0xf62 - push hl - add hl, bc - ld a, [hli] - cp $4e - jr nz, .asm_f71 - ld a, [hl] - cp $54 - jr nz, .asm_f71 - scf - jr .asm_f72 - -.asm_f71 - and a -.asm_f72 - pop hl - ret - -Func_f74: ; 0xf74 - push hl - add hl, bc - ld a, $4e - ld [hli], a - ld a, $54 - ld [hl], a - pop hl - ret - -Func_f7e: ; 0xf7e - push bc - push de - push hl - inc bc - inc bc - ld de, $0000 -.asm_f86 - ld a, [hli] - add e - ld e, a - jr nc, .asm_f8c - inc d -.asm_f8c - dec bc - ld a, b - or c - jr nz, .asm_f86 - ld a, [hli] - cp e - jr nz, .asm_f9c - ld a, [hl] - cp d - jr nz, .asm_f9c - scf - jr .asm_f9d - -.asm_f9c - and a -.asm_f9d - pop hl - pop de - pop bc - ret - -Func_fa1: ; 0xfa1 - push bc - push de - push hl - inc bc - inc bc - ld de, $0000 -.asm_fa9 - ld a, [hli] - add e - ld e, a - jr nc, .asm_faf - inc d -.asm_faf - dec bc - ld a, b - or c - jr nz, .asm_fa9 - ld a, e - ld [hli], a - ld a, d - ld [hl], a - pop hl - pop de - pop bc - ret - -Func_fbc: ; 0xfbc - jp Func_3ff - -Func_fbf: ; 0xfbf - ld hl, hLastLYC - ld c, [hl] - ld a, [rLY] - cp c - jp c, Func_3ff - inc c - inc c - cp c - jp nc, Func_3ff - ld a, [hLCDCMask] - ld c, a - ld a, [hLCDC] - xor $10 - and c - ld c, a - ld hl, rSTAT -.asm_fdb - ld a, [hl] - and $3 - jr nz, .asm_fdb - ld a, [rLCDC] - and $80 - or c - ld [rLCDC], a - jp Func_3ff - -Func_fea: ; 0xfea - ld hl, hLastLYC - ld a, [hLYCSub] - cp [hl] - jr nz, .asm_1015 - ld a, [rLY] - cp [hl] - jp nz, Func_3ff - ld a, [hLCDC] - xor $18 - ld c, a - ld a, [hHBlankSCX] - ld b, a - ld hl, rSTAT -.asm_1003 - ld a, [hl] - and $3 - jr nz, .asm_1003 - ld a, [rLCDC] - and $80 - or c - ld [rLCDC], a - ld a, b - ld [rSCY], a - jp Func_3ff - -.asm_1015 - ld a, [rLY] - cp [hl] - jr nz, .asm_1037 - ld a, [hLastLYC] - ld hl, hLYCSub - sub [hl] - add $40 - ld c, a - ld a, [hLYCSub] - ld b, a - ld hl, rSTAT -.asm_1029 - ld a, [hl] - and $3 - jr nz, .asm_1029 - ld a, c - ld [rSCY], a - ld a, b - ld [rLYC], a - jp Func_3ff - -.asm_1037 - ld hl, hLYCSub - ld a, [rLY] - cp [hl] - jp nz, Func_3ff - ld a, [hLCDC] - xor $18 - ld c, a - ld a, [hHBlankSCX] - ld b, a - ld hl, rSTAT -.asm_104b - ld a, [hl] - and $3 - jr nz, .asm_104b - ld a, [rLCDC] - and $80 - or c - ld [rLCDC], a - ld a, b - ld [rSCY], a - jp Func_3ff - -Func_105d: ; 0x105d - ld hl, hLastLYC - ld a, [rLY] - cp [hl] - jr z, .asm_1069 - dec a - cp [hl] - jr nz, .asm_1080 -.asm_1069 - ld a, [hLYCSub] - ld c, a - ld a, [hHBlankSCX] - ld b, a - ld hl, rSTAT -.asm_1072 - ld a, [hl] - and $3 - jr nz, .asm_1072 - ld a, b - ld [rSCY], a - ld a, c - ld [rLYC], a - jp Func_3ff - -.asm_1080 - ld hl, hLYCSub - ld a, [rLY] - cp [hl] - jr z, .asm_108d - dec a - cp [hl] - jp nz, Func_3ff -.asm_108d - ld a, [hHBlankSCY] - ld b, a - ld hl, rSTAT -.asm_1093 - ld a, [hl] - and $3 - jr nz, .asm_1093 - ld a, b - ld [rSCY], a - jp Func_3ff - -Func_109e: ; 0x109e - jp Func_3ff - -Func_10a1: ; 0x10a1 - jp Func_3ff - -Func_10a4: ; 0x10a4 - jp Func_3ff - -Func_10a7: ; 0x10a7 - jp Func_3ff - -Func_10aa: ; 0x10aa - ld c, a - ld a, [hli] - ld b, a -.asm_10ad - push bc - ld a, c - ld c, [hl] - inc hl - ld b, [hl] - inc hl - push af - ld a, [bc] - ld e, a - inc bc - ld a, [bc] - ld d, a - inc bc - pop af - push hl - call Func_10c5 - pop hl - pop bc - dec b - jr nz, .asm_10ad - ret - -Func_10c5: ; 0x10c5 - push af - ld a, [rLCDC] - bit 7, a - jr z, .asm_10d2 -.asm_10cc - ld a, [rLY] - cp $88 - jr nc, .asm_10cc -.asm_10d2 - pop af - ld hl, wd7fb - ld l, [hl] - ld h, wcb00 / $100 - inc bc - ld [hl], c - inc h - ld [hl], b - inc h - ld [hl], a - inc h - ld [hl], e - inc h - ld [hl], d - ld e, $ff - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - dec bc - ld a, [bc] - ld hl, wd7fa - add [hl] - cp $30 - jr c, .asm_10fe - ld a, [bc] - ld e, $0 -.asm_10fe - add $4 - ld [hl], a - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, wd7fb - ld l, [hl] - ld h, wca00 / $100 - inc l - ld [hl], $0 - dec l - ld [hl], e - ld hl, wd7fb - inc [hl] - ld a, [rLCDC] - bit 7, a - ret nz - ld a, [rIE] - push af - res 0, a - ld [rIE], a - call Func_113a - pop af - ld [rIE], a - ret - -Func_1129: ; 0x1129 - ld a, [wd7fb] - ld [wd7fc], a - ret - -Func_1130: ; 0x1130 - push hl - ld a, [wd7fb] - ld hl, wd7fc - cp [hl] - pop hl - ret - -Func_113a: ; 0x113a - ld hl, wd7fc - ld a, [wd7fb] - cp [hl] - ret z - ld l, [hl] - ld h, $ca - ld [hl], $ff -.loop - ld a, [hl] - and a - jr z, .done - push hl - inc h - ld e, [hl] - inc h - ld d, [hl] - inc h - ld a, [hLoadedROMBank] - push af - ld a, [hl] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - inc h - ld a, [hl] - inc h - ld h, [hl] - ld l, a - call Func_117a - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - pop hl - inc l - jr .loop - -.done - ld a, l - ld [wd7fc], a - ld hl, wd7fb - cp [hl] - ret nz - xor a - ld [wd7fa], a - ret - -Func_117a: ; 0x117a - jp [hl] - -LoadTileLists: ; 0x117b -; Loads a series of defined tile ids into VRAM -; input: de = pointer to data structure -; data structure: list of VRAM tile data with the following format -; [num tiles][destination pointer][list of tile ids] - ld h, d - ld l, e -.loadTileSequence - ld a, [hli] - and a - ret z - ld b, a - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a ; de = destination for tile data -.loadTileData - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .loadTileData - jr .loadTileSequence - -LoadTileListsBank1: ; 0x118d - ld a, $1 - ld [rVBK], a - call LoadTileLists - xor a - ld [rVBK], a - ret - -Func_1198: - ld h, d - ld l, e -.asm_119a - ld a, [hli] - and a - ret z - ld b, a - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - srl b - jr nc, .asm_11a8 - ld a, [hli] - ld c, a -.asm_11a8 - push hl - ld h, d - ld l, e - ld a, c -.asm_11ac - ld [hli], a - inc a - dec b - jr nz, .asm_11ac - ld c, a - pop hl - jr .asm_119a - -Func_11b5: ; 11b5 (0:11b5) - ld h, d - ld l, e -.asm_11b7 - ld a, [hli] - and a - ret z - ld b, a - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] -.asm_11c0 - ld [de], a - inc de - dec b - jr nz, .asm_11c0 - jr .asm_11b7 - -Func_11c7: - ld a, $1 - ld [rVBK], a - call Func_11b5 - xor a - ld [rVBK], a - ret - -Func_11d2: - ld h, d - ld l, e - ld a, [hLoadedROMBank] - ld [$ff94], a -.asm_11d8 - ld a, [hli] - and a - ret z - ld [$ff95], a - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, [hli] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - push hl - ld h, b - ld l, c - ld a, [$ff95] - ld b, a -.asm_11f1 - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .asm_11f1 - pop hl - ld a, [$ff94] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - jr .asm_11d8 - -Func_122e: - ld a, $1 - ld [rVBK], a - ld h, d - ld l, e - ld a, [hLoadedROMBank] - ld [$ff94], a -.asm_1238 - ld a, [hli] - and a - jr nz, .asm_1240 - xor a - ld [rVBK], a - ret - -.asm_1240 - ld [$ff95], a - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, [hli] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - push hl - ld h, b - ld l, c - ld a, [$ff95] - ld b, a -.asm_1256 - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .asm_1256 - pop hl - ld a, [$ff94] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - jr .asm_1238 - -Func_1266: - ld h, d - ld l, e -.asm_1268 - ld a, [hli] - and a - ret z - ld [$ff94], a - ld a, [hli] - bit 6, a - ld de, rBGPI - jr z, .asm_127a - res 6, a - ld de, rOBPI -.asm_127a - set 7, a - ld [de], a - inc de - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, [hLoadedROMBank] - push af - ld a, [hli] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - push hl - ld h, b - ld l, c - ld a, [$ff94] - ld b, a -.asm_1291 - ld a, [hli] - ld [de], a - ld a, [hli] - ld [de], a - dec b - jr nz, .asm_1291 - pop hl - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - jr .asm_1268 - -Func_12a1: ; 0x12a1 - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, [hl] - and $7 - jr z, .asm_12e5 - ld b, a - ld c, $0 -.asm_12b5 - push bc - ld a, $0 - ld [$ff00+c], a - ld a, $30 - ld [$ff00+c], a - ld b, $10 -.asm_12be - ld e, $8 - ld a, [hli] - ld d, a -.asm_12c2 - bit 0, d - ld a, $10 - jr nz, .asm_12ca - ld a, $20 -.asm_12ca - ld [$ff00+c], a - ld a, $30 - ld [$ff00+c], a - rr d - dec e - jr nz, .asm_12c2 - dec b - jr nz, .asm_12be - ld a, $20 - ld [$ff00+c], a - ld a, $30 - ld [$ff00+c], a - pop bc - dec b - jr z, .asm_12e5 - call Func_12ec - jr .asm_12b5 - -.asm_12e5 - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -Func_12ec ; 0x12ec - ld de, 7000 -.asm_12ef - nop - nop - nop - dec de - ld a, d - or e - jr nz, .asm_12ef - ret - -Func_12f8: ; 0x12f8 - ld a, BANK(Data_38010) - ld hl, Data_38010 - call Func_12a1 - call Func_12ec - ld a, [rJOYP] - and $3 - cp $3 - jr nz, .asm_1346 - ld a, $20 - ld [rJOYP], a - ld a, [rJOYP] - ld a, [rJOYP] - ld a, $30 - ld [rJOYP], a - ld a, $10 - ld [rJOYP], a - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, $30 - ld [rJOYP], a - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - ld a, [rJOYP] - and $3 - cp $3 - jr nz, .asm_1346 - ld a, BANK(Data_38000) - ld hl, Data_38000 - call Func_12a1 - call Func_12ec - and a - ret - -.asm_1346 - ld a, BANK(Data_38000) - ld hl, Data_38000 - call Func_12a1 - call Func_12ec - scf - ret - -Func_1353: ; 0x1353 - ld [hROMBankBuffer], a - ld a, [hLoadedROMBank] - push af - ld a, [hROMBankBuffer] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - push af - push hl - ld a, $e4 - ld [rBGP], a - ld de, $0010 - add hl, de - ld de, vTiles1 ; tiles - call LocalCopyData - ld hl, vBGMap0 ; bgmap - ld de, $000c - ld a, $80 - ld c, $d -.asm_1379 - ld b, $14 -.asm_137b - ld [hli], a - inc a - dec b - jr nz, .asm_137b - add hl, de - dec c - jr nz, .asm_1379 - ld a, $81 - ld [rLCDC], a - ld bc, $0005 - call Func_948 - pop hl - pop af - call Func_12a1 - ld bc, $0006 - call Func_948 - ld a, [hBGP] - ld [rBGP], a - ld a, [hLCDC] - ld [rLCDC], a - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -Func_13a8: ; 0x13a8 - ld a, [$fffb] - and a - ret z - ld bc, $0078 - call Func_948 - call Func_1489 - ld a, BANK(Data_3a9e6) - ld hl, Data_3a9e6 - call Func_12a1 - ld bc, $0004 - call Func_948 - ld a, BANK(Data_3a9f6) - ld hl, Data_3a9f6 - call Func_12a1 - ld bc, $0004 - call Func_948 - ld a, BANK(Data_3aa06) - ld hl, Data_3aa06 - call Func_12a1 - ld bc, $0004 - call Func_948 - ld a, BANK(Data_3aa16) - ld hl, Data_3aa16 - call Func_12a1 - ld bc, $0004 - call Func_948 - ld a, BANK(Data_3aa26) - ld hl, Data_3aa26 - call Func_12a1 - ld bc, $0004 - call Func_948 - ld a, BANK(Data_3aa36) - ld hl, Data_3aa36 - call Func_12a1 - ld bc, $0004 - call Func_948 - ld a, BANK(Data_3aa46) - ld hl, Data_3aa46 - call Func_12a1 - ld bc, $0004 - call Func_948 - ld a, BANK(Data_3aa56) - ld hl, Data_3aa56 - call Func_12a1 - ld bc, $0004 - call Func_948 - ld bc, Data_39166 - Data_38156 - $10 - ld a, BANK(Data_38156) - ld hl, Data_38156 ; todo - call Func_1353 - ld bc, $0004 - call Func_948 - ld bc, Data_3a176 - Data_39166 - $10 - ld a, BANK(Data_39166) - ld hl, Data_39166 ; todo - call Func_1353 - ld bc, $0004 - call Func_948 - ld bc, Data_3a9e6 - Data_3a176 - $10 - ld a, BANK(Data_3a176) - ld hl, Data_3a176 ; todo - call Func_1353 - ld bc, $0004 - call Func_948 - ld bc, Data_38156 - Data_380a6 - $10 - ld a, BANK(Data_380a6) - ld hl, Data_380a6 ; todo - call Func_1353 - ld bc, $0004 - call Func_948 - ld bc, Data_3809a - Data_38030 - $10 - ld a, BANK(Data_38030) - ld hl, Data_38030 - call Func_1353 - ld bc, $0004 - call Func_948 - ld a, BANK(Data_38020) - ld hl, Data_38020 - call Func_12a1 - ld bc, $0004 - call Func_948 - ret - -Func_1489: ; 0x1489 - ld a, [$fffb] - and a - ret z - ld a, [$fffc] - and a - ret nz - ld a, BANK(Data_3aa66) - ld hl, Data_3aa66 ; todo - call Func_12a1 - ld bc, $0004 - call Func_948 - ld a, $ff - ld [$fffc], a - ret - -Func_14a4: ; 0x14a4 - ld a, [$fffb] - and a - ret z - ld bc, $0002 - call Func_948 - ld a, [$fffc] - and a - ret z - ld a, BANK(Data_3aa76) - ld hl, Data_3aa76 - call Func_12a1 - ld bc, $0004 - call Func_948 - xor a - ld [$fffc], a - ret - -Func_14c4: ; 14c4 (0:14c4) - ld a, [wd8dc] - and a - jp nz, Func_165f - ld a, [wd8ad] - cp $7 - jp z, Func_1612 - ld a, [wd8af] - and a - jr nz, .asm_14df - call Func_1502 - jp Func_1663 - -.asm_14df - ld a, [wd8b0] - and a - jr z, .asm_14fc - ld a, [wd8b1] - and a - jr z, .asm_14fc - ld a, [wd8b2] - cp $2 - jr z, .asm_14f7 - call Func_15e1 - jr .asm_14ff - -.asm_14f7 - call Func_15f8 - jr .asm_14ff - -.asm_14fc - call Func_1527 -.asm_14ff - jp Func_1663 - -Func_1502: ; 1502 (0:1502) - ld hl, wd8b9 - ld c, [hl] - inc [hl] - ld b, $0 - ld hl, Data_18ff - add hl, bc - ld a, [hl] - ld [rSB], a - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ld a, [wd8b9] - cp $2 - ret nz - xor a - ld [wd8b9], a - inc a - ld [wd8af], a - ret - -Func_1527: ; 1527 (0:1527) - ld a, [wd8b9] - ld c, a - ld a, [wd8ba] - ld b, a - ld a, [wd8bb] - ld l, a - ld a, [wd8bc] - ld h, a - add hl, bc - ld a, [rSB] - ld [wd8c8 + 1], a - ld a, [hl] - ld [rSB], a - ld l, a - ld a, [wd8c3] - add l - ld [wd8c3], a - ld a, [wd8c4] - adc $0 - ld [wd8c4], a - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ld hl, wd8b9 - inc [hl] - jr nz, .asm_1560 - inc hl - inc [hl] -.asm_1560 - ld hl, wd8b9 - ld a, [wd8b3] - cp [hl] - jr nz, .asm_1570 - inc hl - ld a, [wd8b4] - cp [hl] - jr z, .asm_1572 -.asm_1570 - jr .asm_15b0 - -.asm_1572 - ld hl, wd8b0 - ld a, [hl] - and a - jr z, .asm_157c - ld hl, wd8b1 -.asm_157c - inc [hl] - ld a, [wd8cc] - and a - jr z, .asm_15b5 - ld a, [wd8ad] - cp $6 - jr z, .asm_15b5 - ld hl, wd8b1 - ld a, [hl] - and a - jr nz, .asm_15b1 - xor a - ld [wd8b9], a - ld [wd8ba], a - ld a, [wd8bf] - ld [wd8bb], a - ld a, [wd8c0] - ld [wd8bc], a - ld a, [wd8b7] - ld [wd8b3], a - ld a, [wd8b8] - ld [wd8b4], a -.asm_15b0 - ret - -.asm_15b1 - call Func_15c8 - ret - -.asm_15b5 - ld a, [wd8c8 + 1] - ld [wd8c8], a -asm_15bb - ld a, $7 - ld [wd8ad], a - ld a, $1 - ld [wd8c5], a - call Func_16bf -Func_15c8: ; 15c8 (0:15c8) - ld a, [wd8b5] - ld [wd8b3], a - ld a, [wd8b6] - ld [wd8b4], a - ld a, [wd8bd] - ld [wd8bb], a - ld a, [wd8be] - ld [wd8bc], a - ret - -Func_15e1: ; 15e1 (0:15e1) - ld c, a - ld b, $0 - ld hl, wd8c3 - add hl, bc - ld a, [hl] - ld [rSB], a - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ld hl, wd8b2 - inc [hl] - ret - -Func_15f8: ; 15f8 (0:15f8) - ld a, [rSB] - ld [wd8c8], a - xor a - ld [rSB], a - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ld hl, wd8c6 - inc [hl] - ld a, [hl] - cp $2 - jr z, asm_15bb - ret - -Func_1612: ; 1612 (0:1612) - ld a, [wd8cb] - ld [wd8ae], a - ld a, [wd8c7] - ld [wd86e + 2], a - cp $ff - jr z, .asm_1625 - ld [wd86e + 1], a -.asm_1625 - ld a, [rSB] - ld [wd8c7], a - cp $ff - jr nz, .asm_163a - ld a, $0 - ld [wd8db], a - ld [wd8ad], a - ld a, $2 - jr .asm_1652 - -.asm_163a - bit 1, a - jr z, .asm_1643 - ld a, $1 - ld [wd8e2], a -.asm_1643 - bit 4, a - ld a, $0 - ld [wd8ad], a - ld a, $1 - jr nz, .asm_1651 - ld [wd8ad], a -.asm_1651 - inc a -.asm_1652 - ld [wd8c5], a - ld a, [wd8cc] - and a - jr nz, Func_165f - xor a - ld [wd8db], a -Func_165f: ; 165f (0:165f) - ret - -Func_1660: - xor a - ld [rSC], a -Func_1663: ; 1663 (0:1663) - ret - -Func_1664: - push af - ld a, [rSC] - bit 7, a - jr nz, .asm_1679 - push bc - push de - push hl - ld a, $1 - ld [wd8ca], a - call Func_14c4 - pop hl - pop de - pop bc -.asm_1679 - pop af - reti -Func_167b: ; 0x167b - ld a, [wd8ad] - cp $1 - ret nz - ld a, [wd8c7] - cp $ff - ret z - ld a, [wd8db] - and a - ret nz - ld hl, wd8e0 - inc [hl] - ld a, [hl] - cp $6 - ret c - xor a - ld [hl], a - ld [wd8e2], a - call Func_18ac - ret - -Func_169d: - xor a - ld [rSC], a - ld [rSB], a - ; fallthrough - -Func_16a2: ; 0x16a2 - xor a - ld [rSB], a - ld [rSC], a - ld [wd8ad], a - dec a - ld [wd8c7], a - ld [wd8c8], a - call Func_16b5 - ret - -Func_16b5: ; 0x16b5 - xor a - ld [wd8c5], a - ld [wd8ca], a - ld [wd8db], a - ; fall through -Func_16bf: ; 0x16bf - xor a - ld [wd8af], a - ld [wd8b0], a - ld [wd8b1], a - ld [wd8b2], a - ld [wd8c6], a - ld [wd8c3], a - ld [wd8c4], a - ld [wd8b9], a - ld [wd8ba], a - ld [wd8dc], a - ld [wd8e2], a - ret - -Func_16e2: ; 0x16e2 - ld a, [wd8db] - and a - jr z, .asm_16ec - call Func_16fd - ret nc -.asm_16ec - ld a, [wd8ae] - cp $1 - jr nz, .asm_16f7 - call Func_16fd - ret nc -.asm_16f7 - call Func_1925 - jp Func_19e5 - -Func_16fd: ; 0x16fd - ld a, [wd8c5] - cp $2 - jr nz, .asm_173c - xor a - ld [wd8e0], a - ld [wd8ae], a - inc a - ld [wd8ad], a - ld a, [wd8c7] - cp $ff - jr z, .asm_1735 - bit 0, a - jr nz, .asm_172e - bit 1, a - jr nz, .asm_172e - bit 4, a - jr z, .asm_173a - xor a - ld [wd8ad], a - ld [wd8ae], a - ld a, [wd8c7] - jr .asm_173a - -.asm_172e - scf - ret - -.asm_1730 - xor a - ld [wd8ae], a - dec a -.asm_1735 - inc a - ld [wd8ad], a - dec a -.asm_173a - and a - ret - -.asm_173c - xor a - ld a, $f0 - ret - -Func_1740: ; 0x1740 - ld a, [wd8ad] - cp $1 - jr z, .asm_1752 - cp $2 - jr z, .asm_1752 - and a - ld a, $ff - ret z -.asm_174f - ld a, $f0 - ret - -.asm_1752 - ld a, [wd8e2] - and a - jr nz, .asm_174f - ld a, [wd8db] - and a - jr z, .asm_1762 - call Func_16fd - ret nc -.asm_1762 - ld a, [wd8ae] - cp $2 - jr nz, .asm_176d - call Func_16fd - ret nc -.asm_176d - ld a, [wd8c7] - cp $ff - ret z - call Func_1932 - jp Func_19e5 - -Func_1779: ; 0x1779 - ld c, a - ld a, [wd8ad] - and a - ld a, [wd8c7] - ret z - ld a, [wd8ad] - cp $1 - jr z, .asm_1790 - cp $3 - jr z, .asm_1790 - ld a, $f0 - ret - -.asm_1790 - ld a, [wd8db] - and a - jr nz, .asm_17df - ld a, c - inc a - ld [wd8de], a - ld a, l - ld [wd8c1], a - ld a, h - ld [wd8c2], a - ld a, [wd8c7] - cp $ff - ret z - ld a, [wd8ab] - ld [wd8ac], a - and a - jr z, .asm_17d6 - ld a, [wd8de] - dec a - dec a - push af - ld c, a - ld b, $0 - push hl - ld hl, wd89d - add hl, bc - ld a, [hl] - pop hl - ld [wd8ac], a - pop af - add a - ld c, a - ld b, $0 - push hl - ld hl, wd88b - add hl, bc - ld a, [hli] - ld b, [hl] - pop hl - ld c, a - jp .asm_17d9 - -.asm_17d6 - ld bc, $0280 -.asm_17d9 - call Func_1989 - jp Func_19e5 - -.asm_17df - ld a, [wd8c5] - cp $2 - ld a, $f0 - jp nz, .asm_1869 - ld hl, wd8de - ld a, [wd8c7] - bit 4, a - jp nz, .asm_1859 - bit 1, a - jp nz, .asm_1804 - bit 0, a - jp nz, .asm_1804 - dec [hl] - ld a, [wd8c7] - jr z, .asm_1860 -.asm_1804 - ld a, [hl] - cp $1 - jr z, .asm_186a - ld bc, $0280 - ld a, [wd8ab] - ld [wd8ac], a - and a - jr z, .asm_1836 - ld a, [wd8de] - dec a - dec a - push af - ld c, a - ld b, $0 - push hl - ld hl, wd89d - add hl, bc - ld a, [hl] - pop hl - ld [wd8ac], a - pop af - add a - ld c, a - ld b, $0 - push hl - ld hl, wd88b - add hl, bc - ld a, [hli] - ld b, [hl] - pop hl - ld c, a -.asm_1836 - ld a, [wd8c7] - bit 1, a - jp nz, .asm_184e - ld a, [wd8bf] - add $80 - ld [wd8bf], a - ld a, [wd8c0] - adc $2 - ld [wd8c0], a -.asm_184e - ld a, [wd8bf] - ld l, a - ld a, [wd8c0] - ld h, a - jp .asm_17d9 - -.asm_1859 - push af - ld a, $1 - ld [wd8dc], a - pop af -.asm_1860 - push af - xor a - ld [wd8cc], a - ld [wd8db], a - pop af -.asm_1869 - ret - -.asm_186a - ld a, [wd8dd] - and a - ld a, [wd8c7] - jr z, .asm_1860 - call Func_19d7 - jp Func_19e5 - -Func_1879: - ld a, [wd8ad] - cp $1 - jr z, .asm_188b - cp $3 - jr z, .asm_188b - and a - ld a, $ff - ret z - ld a, $f0 - ret - -.asm_188b - ld a, [wd8db] - and a - jr z, .asm_1895 - call Func_16fd - ret nc -.asm_1895 - ld a, [wd8ae] - cp $4 - jr nz, .asm_18a0 - call Func_16fd - ret nc -.asm_18a0 - ld a, [wd8c7] - cp $ff - ret z - call Func_19bd - jp Func_19e5 - -Func_18ac: ; 0x18ac - ld a, [wd8ad] - cp $1 - jr z, .asm_18be - cp $3 - jr z, .asm_18be - and a - ld a, $ff - ret z - ld a, $f0 - ret - -.asm_18be - ld a, [wd8db] - and a - jr z, .asm_18c8 - call Func_16fd - ret nc -.asm_18c8 - ld a, [wd8c7] - cp $ff - ret z - call Func_19ca - jp Func_19e5 - -Func_18d4: ; 0x18d4 - ld [wd8cb], a - ld a, d - ld [wd8cc], a - ld a, l - ld [wd8bb], a - ld [wd8bd], a - ld a, h - ld [wd8bc], a - ld [wd8be], a - ld a, c - ld [wd8b3], a - ld [wd8b5], a - ld a, b - ld [wd8b4], a - ld [wd8b6], a - xor a - ld [wd8c5], a - call Func_16bf - ret - -Data_18ff: - dr $18ff, $1901 - -Data_1901: - dr $1901, $1909 - -Data_1909: - dr $1909, $190d - -Data_190d: - dr $190d, $1915 - -Data_1915: - dr $1915, $191d - -Data_191d: - dr $191d, $1925 - -Func_1925: ; 0x1925 - ld a, $1 - ld d, $0 - ld hl, Data_1901 ; todo - ld bc, $0008 - jp Func_18d4 - -Func_1932: ; 0x19332 - ld a, $2 - ld d, $0 - ld hl, wd8cd - ld bc, $000c - call Func_18d4 - ld hl, Data_1909 - ld de, wd8cd - ld bc, $0004 - call LocalCopyData - ld de, $0006 - ld a, [wd8a8] - ld [wd8d1], a - call Func_1982 - ld a, [wd8a9] - ld [wd8d2], a - call Func_1982 - ld a, [wd8aa] - ld [wd8d3], a - call Func_1982 - ld a, [wd8a7] - ld [wd8d4], a - call Func_1982 - ld a, e - ld [wd8d5], a - ld a, d - ld [wd8d6], a - xor a - ld [wd8d7], a - ld [wd8d8], a - ret - -Func_1982: ; 0x1982 - add e - ld e, a - ld a, d - adc $0 - ld d, a - ret - -Func_1989: ; 0x1989 - ld a, l - ld [wd8bf], a - ld a, h - ld [wd8c0], a - ld a, c - ld [wd8b7], a - ld a, b - ld [wd8b8], a - push bc - ld a, $3 - ld d, $1 - ld hl, wd8cd - ld bc, $0004 - call Func_18d4 - ld a, [$190d] - ld [wd8cd], a - ld a, [wd8ac] - ld [wd8ce], a - pop bc - ld a, c - ld [wd8cf], a - ld a, b - ld [wd8d0], a - ret - -Func_19bd: ; 19bd (0:19bd) - ld a, $4 - ld d, $0 - ld hl, Data_1915 - ld bc, $8 - jp Func_18d4 - -Func_19ca: ; 0x19ca - ld a, $5 - ld d, $0 - ld hl, Data_191d ; todo - ld bc, $0008 - jp Func_18d4 - -Func_19d7: ; 0x19d7 - ld a, $6 - ld d, $1 - ld hl, Data_190d ; todo - ld bc, $0008 - jp Func_18d4 - -; XXX - ret - -Func_19e5: ; 0x19e5 - ld a, [wd8ad] - cp $1 - jr z, .asm_19f8 - and a - jr nz, .asm_19f6 - ld a, [wd8cb] - cp $1 - jr z, .asm_1a02 -.asm_19f6 - scf - ret - -.asm_19f8 - ld a, [wd8cb] - cp $1 - jr z, .asm_19f6 - ld [wd8ad], a -.asm_1a02 - xor a - ld [wd8c5], a - ld [wd8ae], a - ld a, $1 - ld [wd8b9], a - ld [wd8db], a - ld a, [$18ff] - ld [rSB], a - ld a, $1 - ld [rSC], a - ld a, $81 - ld [rSC], a - ld a, $f0 - ret - -Func_1a21: ; 0x1a21 - call Func_1a59 - call Func_1a89 - jr c, .asm_1a3f -.asm_1a29 - call Func_1aa9 - call Func_1b3d - jr c, .asm_1a3f - ld a, [wd86c] - and a - jr z, .asm_1a29 - call Func_1b60 - jr c, .asm_1a3f - call Func_1b88 -.asm_1a3f - call Func_1ba7 - ret - -Func_1a43: ; 0x1a43 - xor a - ld [wd86e], a - call Func_1a59 - call Func_1a89 - jr c, .asm_1a54 - ld a, $1 - ld [wd86e], a -.asm_1a54 - call Func_1ba7 - ret - - ret ; unused instruction? - -Func_1a59: ; 0x1a59 - ld [wd86a], a - ld a, h - ld [wd869], a - ld a, l - ld [wd868], a - ld a, $80 - ld [wd866], a - ld a, $c2 - ld [wd867], a - xor a - ld [wd86b], a - ld [wd86c], a - ld [wd86d], a - call Func_16a2 - ld hl, rIE - set 3, [hl] - xor a - ld [$ffb1], a - ld a, $1 - ld [wd8e1], a - ret - -Func_1a89: ; 0x1a89 - call Func_16e2 - cp $f0 - jr z, .asm_1a9f - cp $ff - jp z, Func_1bb2 - ld a, [wd8c8] - cp $81 - jp nz, Func_1bb2 - and a - ret - -.asm_1a9f - ld a, [hNewlyPressedButtons] - bit 1, a - jp nz, Func_1bd3 - rst AdvanceFrame - jr Func_1a89 - -Func_1aa9: ; 0x1aa9 - ld a, [wd866] - ld l, a - ld a, [wd867] - ld h, a - ld de, wc000 - ld b, $2 -.asm_1ab6 - ld c, $14 -.asm_1ab8 - ld a, [hli] - call Func_1ae2 - dec c - jr nz, .asm_1ab8 - ld a, l - add $c - ld l, a - jr nc, .asm_1ac6 - inc h -.asm_1ac6 - dec b - jr nz, .asm_1ab6 - ld a, l - ld [wd866], a - ld a, h - ld [wd867], a - ld a, [wd86b] - inc a - ld [wd86b], a - cp $9 - jr nz, .asm_1ae1 - ld a, $1 - ld [wd86c], a -.asm_1ae1 - ret - -Func_1ae2: ; 0x1ae2 - push bc - push hl - xor $80 - swap a - ld c, a - and $f - ld b, a - ld a, c - and $f0 - ld c, a - ld a, [wd868] - ld l, a - ld a, [wd869] - ld h, a - add hl, bc - ld a, [hLoadedROMBank] - push af - ld a, [wd86a] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc e - ld a, [hli] - ld [de], a - inc de - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - pop hl - pop bc - ret - -Func_1b3d: ; 0x1b3d - ld a, [wd86c] - ld [wd8dd], a - ld hl, wc000 - ld a, $1 - call Func_1779 - cp $ff - jp z, Func_1bb2 - cp $f0 - jr z, .asm_1b56 - and a - ret - -.asm_1b56 - ld a, [hNewlyPressedButtons] - bit BIT_B_BUTTON, a - jp nz, Func_1bd3 - rst AdvanceFrame - jr Func_1b3d - -Func_1b60: ; 0x1b60 - ld a, $1 - ld [wd8a8], a - ld a, $13 - ld [wd8a9], a - call Func_1740 - cp $ff - jp z, Func_1bb2 - cp $f0 - jr z, .asm_1b7e - ld bc, $001e - call Func_93f - and a - ret - -.asm_1b7e - ld a, [hNewlyPressedButtons] - bit BIT_B_BUTTON, a - jp nz, Func_1bd3 - rst AdvanceFrame - jr Func_1b60 - -Func_1b88: ; 0x1b88 - ld a, [wd8c7] - ld b, a - cp $ff - jr z, Func_1bb2 - and $f0 - jr nz, Func_1bb2 - bit 1, b - jr nz, .asm_1b9d - call Func_16a2 - and a - ret - -.asm_1b9d - ld a, [hNewlyPressedButtons] - bit BIT_B_BUTTON, a - jp nz, Func_1bd3 - rst AdvanceFrame - jr Func_1b88 - -Func_1ba7: ; 0x1ba7 - ld hl, rIE - res 3, [hl] - xor a - ld [wd8e1], a - and a - ret - -Func_1bb2: ; 0x1bb2 - ld hl, Data_1bcf - ld a, [wd8c7] - cp $ff - jr z, .asm_1bc6 - ld b, $3 -.asm_1bbe - inc hl - sla a - jr c, .asm_1bc6 - dec b - jr nz, .asm_1bbe -.asm_1bc6 - ld a, [hl] - ld [wd86d], a - call Func_16a2 - scf - ret - -Data_1bcf: - dr $1bcf, $1bd3 - -Func_1bd3: ; 0x1bd3 - ld de, $0001 - call PlaySoundEffect - ld a, $5 - ld [wd86d], a - call Func_16a2 - scf - ret - -Func_1be3: ; 0x1be3 - ld a, $c0 - ld [rRP], a - ld a, $ff - ld [wd8ea], a - xor a - ld b, a -.asm_1bee - inc a - jr nz, .asm_1bee - inc b - jr nz, .asm_1bee - ld hl, wd8eb - ld a, [rKEY1] - bit 7, a - jr z, .asm_1c0c - ld [hl], $e - inc hl - ld [hl], $12 - inc hl - ld [hl], $8 - inc hl - ld [hl], $c - inc hl - ld [hl], $c - ret - -.asm_1c0c - ld [hl], $6 - inc hl - ld [hl], $8 - inc hl - ld [hl], $2 - inc hl - ld [hl], $4 - inc hl - ld [hl], $5 - ret - -Func_1c1b: ; 0x1c1b - inc d - ret z - ld a, [$ff00+c] - bit 1, a - jr z, Func_1c1b - ret - -Func_1c23: ; 0x1c23 - inc d - ret z - ld a, [$ff00+c] - bit 1, a - jr nz, Func_1c23 - ret - -Func_1c2b: ; 0x1c2b - ld a, $c1 - ld [$ff00+c], a -.asm_1c2e - dec d - jr nz, .asm_1c2e - ret - -Func_1c32: ; 0x1c32 - ld a, $c0 - ld [$ff00+c], a -.asm_1c35 - dec d - jr nz, .asm_1c35 - ret - -Func_1c39: - xor a - ld [hNumFramesSinceLastVBlank], a - ld a, $1 - ld [wd8e9], a -.asm_1c41 - ld b, $2 - ld c, rRP % $100 - ld a, [$ff00+c] - and b - jr z, Func_1c50 - ld a, [hNumFramesSinceLastVBlank] - and a - jr nz, Func_1ca1 - jr .asm_1c41 - -Func_1c50: ; 0x1c50 - ld a, $1 - ld [wd8e9], a - ld b, $1a - ld c, rRP % $100 - ld d, $0 - ld e, d - call Func_1c23 - ld a, d - and a - jp z, Func_1dc2 - ld d, e - call Func_1c1b - ld a, d - and a - jp z, Func_1dc2 - call Func_1c23 - ld a, d - and a - jp z, Func_1dc2 - call Func_1c1b - ld a, d - and a - jp z, Func_1dc2 - cp $8 - jp c, Func_1dc2 - cp $2a - jp nc, Func_1dc2 - ld a, $0 - ld [wd8ea], a - ld d, b - call Func_1c32 - ld d, b - call Func_1c2b - ld d, b - call Func_1c32 - ld d, b - call Func_1c2b - ld d, b - call Func_1c32 - ret - -Func_1ca1: ; 0x1ca1 - ld a, $2 - ld [wd8e9], a - ld b, $1a - ld c, rRP % $100 - ld d, b - ld e, $0 - call Func_1c32 - ld d, b - call Func_1c2b - ld d, b - call Func_1c32 - ld d, b - call Func_1c2b - ld d, b - call Func_1c32 - ld d, e - call Func_1c23 - ld a, d - and a - jp z, Func_1dc2 - ld d, e - call Func_1c1b - ld a, d - and a - jp z, Func_1dc2 - ld d, e - call Func_1c23 - ld a, d - and a - jp z, Func_1dc2 - ld d, e - call Func_1c1b - ld a, d - and a - jp z, Func_1dc2 - ld d, $1a - call Func_1c32 - ld a, $0 - ld [wd8ea], a - ret - -Func_1cef: - xor a - ld [rRP], a - ld a, $ff - ld [wd8ea], a - ret - -Func_1cf8: ; 0x1cf8 - xor a - ld [wd8e4], a - ld [wd8e5], a - push hl - push bc - ld hl, wd8e6 - ld a, $5a - ld [hli], a - ld [hl], b - dec hl - ld b, $2 - ld d, $1e - call Func_1c32 - call Func_1d44 - pop bc - pop hl - call Func_1ed3 - call Func_1d44 - ld a, [wd8e4] - ld [wd8e6], a - ld a, [wd8e5] - ld [wd8e7], a - ld hl, wd8e6 - ld b, $2 - call Func_1d44 - ld hl, wd8ea - ld b, $1 - call Func_1e3b - ld a, [wd8e6] - ld [wd8e4], a - ld a, [wd8e7] - ld [wd8e5], a - ret - -Func_1d44: ; 0x1d44 - ld a, [wd8ea] - cp $0 - ret nz - ld c, rRP % $100 - ld d, $16 - call Func_1c2b - ld d, $16 - call Func_1c32 - ld a, b - cpl - ld b, a -.asm_1d59 - inc b - jr z, .asm_1dae - ld a, $8 - ld [wd8e3], a - ld a, [hli] - ld e, a - ld a, [wd8e4] - add e - ld [wd8e4], a - jr nc, .asm_1d75 - ld a, [wd8e5] - inc a - ld [wd8e5], a - jr .asm_1d78 - -.asm_1d75 - call Func_1ed3 -.asm_1d78 - ld a, e - rlca - ld e, a - jr nc, .asm_1d8d - ld a, [wd8eb] - ld d, a - call Func_1c2b - ld a, [wd8ec] - ld d, a - call Func_1c32 - jr .asm_1d9b - -.asm_1d8d - ld a, [wd8ed] - ld d, a - call Func_1c2b - ld a, [wd8ee] - ld d, a - call Func_1c32 -.asm_1d9b - ld a, [wd8e3] - dec a - ld [wd8e3], a - jr z, .asm_1dac - call Func_1ed4 - call Func_1ed4 - jr .asm_1d78 - -.asm_1dac - jr .asm_1d59 - -.asm_1dae - call Func_1ed3 - call Func_1ed3 - call Func_1ed4 - ld d, $16 - call Func_1c2b - ld d, $16 - call Func_1c32 - ret - -Func_1dc2: ; 0x1dc2 - ld a, $2 - ld [wd8ea], a - ret - -Func_1dc8: - ld a, [wd8ea] - or $1 - ld [wd8ea], a - ret - -Func_1dd1: ; 0x1dd1 - ld a, [wd8ea] - or $4 - ld [wd8ea], a - ret - -Func_1dda: ; 0x1dda - xor a - ld [wd8e4], a - ld [wd8e5], a - push hl - ld hl, wd8e6 - ld b, $2 - call Func_1e3b - ld a, [wd8e7] - ld [wd8e8], a - ld b, a - pop hl - ld a, [wd8e6] - cp $5a - jp nz, Func_1dd1 - call Func_1e3b - ld a, [wd8e4] - ld d, a - ld a, [wd8e5] - ld e, a - push de - ld hl, wd8e6 - ld b, $2 - call Func_1e3b - pop de - ld hl, wd8e6 - ld a, [hli] - xor d - ld b, a - ld a, [hl] - xor e - or b - jr z, .asm_1e22 - ld a, [wd8ea] - or $1 - ld [wd8ea], a -.asm_1e22 - push de - ld hl, wd8ea - ld b, $1 - call Func_1d44 - pop de - ld a, d - ld [wd8e4], a - ld a, e - ld [wd8e5], a - ld a, [wd8e8] - cp $82 - ret z - ret - -Func_1e3b: ; 0x1e3b - ld a, [wd8ea] - cp $0 - ret nz - ld c, rRP % $100 - ld d, $0 - call Func_1c23 - ld a, d - or a - jp z, Func_1dc2 - ld d, $0 - call Func_1c1b - ld a, d - or a - jp z, Func_1dc2 - ld d, $0 - call Func_1c23 - ld a, d - or a - jp z, Func_1dc2 - call Func_1ed4 - call Func_1ed4 - push af - pop af - ld a, b - cpl - ld b, a -.asm_1e6c - inc b - jr z, .asm_1eb9 - ld a, $8 - ld [wd8e3], a -.asm_1e74 - ld d, $0 - call Func_1c1b - call Func_1c23 - ld a, [wd8ef] - cp d - jr nc, .asm_1e88 - ld a, e - set 0, a - ld e, a - jr .asm_1e8c - -.asm_1e88 - ld a, e - res 0, a - ld e, a -.asm_1e8c - ld a, [wd8e3] - dec a - ld [wd8e3], a - jr z, .asm_1ea0 - ld a, e - rlca - ld e, a - call Func_1ed4 - call Func_1ed4 - jr .asm_1e74 - -.asm_1ea0 - ld a, e - ld [hli], a - ld a, [wd8e4] - add e - ld [wd8e4], a - jr nc, .asm_1eb4 - ld a, [wd8e5] - inc a - ld [wd8e5], a - jr .asm_1eb7 - -.asm_1eb4 - call Func_1ed3 -.asm_1eb7 - jr .asm_1e6c - -.asm_1eb9 - ld d, $0 - call Func_1c1b - ld a, d - and a - jp z, Func_1dc2 - ld d, $11 - call Func_1c32 - ret - -Func_1ec9: - ld b, $00 - jp Func_1cf8 - -Func_1ece: - ld b, $00 - jp Func_1dda - -Func_1ed3: ; 0x1ed3 - ret - -Func_1ed4: ; 0x1ed4 - jr z, .asm_1ed6 -.asm_1ed6 - jr nz, .asm_1ed8 -.asm_1ed8 - ret - -Func_1ed9: - push bc - push de - push hl - ld e, a - ld d, $0 - sla e - rl d - ld a, [hLoadedROMBank] - push af - ld a, BANK(Data_8f06) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, Data_8f06 - jr asm_1f3b - -Func_1ef2: - push bc - push de - push hl - ld e, a - ld d, $0 - sla e - rl d - ld a, [hLoadedROMBank] - push af - ld a, BANK(Data_8f06) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, Data_8f06 - jr asm_1f3b - -LoadOAMData2: ; 0x1f0b -; This function loads OAM data, but it adds b and c to the x and y values -; input: a = OAM data id (see OAMDataPointers2) - push bc - push de - push hl - ld e, a - ld d, $0 - sla e - rl d - ld a, [hLoadedROMBank] - push af - ld a, Bank(OAMDataPointers2) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, OAMDataPointers2 - jr asm_1f3b - -LoadOAMData: ; 0x1f24 -; This function loads OAM data, but it adds b and c to the x and y values -; input: a = OAM data id (see OAMDataPointers) - push bc - push de - push hl - ld e, a - ld d, $0 - sla e - rl d ; multiply de by 2 - ld a, [hLoadedROMBank] - push af - ld a, Bank(OAMDataPointers) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, OAMDataPointers -asm_1f3b: ; 0x1f3b - add hl, de ; hl points to oam pointer in OAMDataPointers - ld a, [hli] - ld e, a - ld a, [hl] - ld d, a ; de points to OAM data - ld a, [wd802] - ld l, a - ld h, (wOAMBuffer >> 8) -.loadOAMDataLoop - ld a, [de] - cp $80 ; OAM data list terminator - jr z, .doneReadingOAMData - add c - ld [hli], a - inc de - ld a, [de] - add b - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - jr .loadOAMDataLoop - -.doneReadingOAMData - ld a, l - ld [wd802], a - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - pop hl - pop de - pop bc - ret - -Func_1f68: - push bc - push de - push hl - ld e, a - ld d, $0 - sla e - rl d - ld a, [hLoadedROMBank] - push af - ld a, BANK(Data_8f06) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, Data_8f06 ; all 0s - jr asm_1fca - -Func_1f81: - push bc - push de - push hl - ld e, a - ld d, $0 - sla e - rl d - ld a, [hLoadedROMBank] - push af - ld a, BANK(Data_8f06) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, Data_8f06 ; all 0s - jr asm_1fca - -Func_1f9a: - push bc - push de - push hl - ld e, a - ld d, $0 - sla e - rl d - ld a, [hLoadedROMBank] - push af - ld a, BANK(OAMDataPointers2) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, OAMDataPointers2 - jr asm_1fca - -Func_1fb3: - push bc - push de - push hl - ld e, a - ld d, $0 - sla e - rl d - ld a, [hLoadedROMBank] - push af - ld a, BANK(OAMDataPointers) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, OAMDataPointers -asm_1fca - add hl, de - ld a, [hli] - ld e, a - ld a, [hl] - ld d, a - ld a, [wd802] - ld l, a - ld h, $d0 -.asm_1fd5 - ld a, [de] - cp $80 - jr z, .asm_1fee - add c - ld [hli], a - inc de - ld a, [de] - add b - ld [hli], a - inc de - ld a, [de] - push hl - ld hl, sp+$7 - add [hl] - pop hl - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - jr .asm_1fd5 - -.asm_1fee - ld a, l - ld [wd802], a - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - pop hl - pop de - pop bc - ret - -Func_1ffc: ; 0x1ffc - ld a, $b - ld [wd806], a - ld a, $4 - ld [wd807], a - ld [hFarCallTempA], a - callba Func_3c000 - ld a, $1 - ld [wd85d], a - ld a, $37 - ld [wd470], a - ld [wd471], a - ld [wd472], a - ld a, SCREEN_ERASE_ALL_DATA - ld [wCurrentScreen], a -.asm_2025 - call Func_2034 - call Func_2043 - call Func_926 - call Func_b2e - rst AdvanceFrame - jr .asm_2025 - -Func_2034: ; 0x2034 - ld a, [wd804] - and a - jr z, .asm_203f - dec a - ld [wd804], a - ret - -.asm_203f - ld [wd803], a - ret - -Func_2043: ; 0x2043 - ld a, [wCurrentScreen] - call CallInFollowingTable -CallTable_2049: ; 0x2049 -; First two bytes is function pointer. -; Third byte is bank of function. -; Fourth byte seems to be unused. - padded_dab Func_8000 - - ; SCREEN_ERASE_ALL_DATA - padded_dab HandleEraseAllDataMenu - - ; SCREEN_COPYRIGHT - padded_dab HandleCopyrightScreen - - ; SCREEN_TITLESCREEN - padded_dab HandleTitlescreen - - ; SCREEN_PINBALL_GAME - padded_dab HandlePinballGame - - ; SCREEN_POKEDEX - padded_dab HandlePokedexScreen - - ; SCREEN_OPTIONS - padded_dab HandleOptionsScreen - - ; SCREEN_HIGH_SCORES - padded_dab HandleHighScoresScreen - - ; SCREEN_FIELD_SELECT - padded_dab HandleFieldSelectScreen - ; end of call table - -Func_206d: ; 0x206d - ld a, [hLoadedROMBank] - push af - ld a, Bank(Func_8d17) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - call Func_8d17 - jr c, .asm_2084 - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - and a - ret - -.asm_2084 - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - scf - ret - -Func_208c: ; 0x208c - ld a, [hLoadedROMBank] - push af - ld a, Bank(Func_8ee0) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - call Func_8ee0 - jr c, .asm_20a3 - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - and a - ret - -.asm_20a3 - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - scf - ret - -Func_20ab: ; 0x20ab - push af - xor a - ld [$ffb6], a - jr .asm_20c6 - - push af - ld a, b - xor c - ld [$ffb6], a - bit 7, b - jr z, .asm_20be - ld a, b - cpl - inc a - ld b, a -.asm_20be - bit 7, c - jr z, .asm_20c6 - ld a, c - cpl - inc a - ld c, a -.asm_20c6 - push de - push hl - ld a, b - cp c - jr nc, .asm_20ce - ld b, c - ld c, a -.asm_20ce - ld h, $3e - ld l, c - ld e, [hl] - inc h - ld d, [hl] - ld l, b - ld a, [hl] - dec h - ld l, [hl] - ld h, a - add hl, de - push af - ld d, $3e - ld a, b - sub c - ld e, a - ld a, [de] - ld c, a - inc d - ld a, [de] - ld b, a - ld a, l - sub c - ld l, a - ld a, h - sbc b - ld h, a - jr nc, .asm_20f1 - pop af - ccf - jr .asm_20f2 - -.asm_20f1 - pop af -.asm_20f2 - rr h - rr l - ld b, h - ld c, l - ld a, [$ffb6] - rlca - jr nc, .asm_2107 - ld a, c - cpl - add $1 - ld c, a - ld a, b - cpl - adc $0 - ld b, a -.asm_2107 - pop hl - pop de - pop af - ret - -Func_210b: ; 0x210b - push af - push hl - ld a, b - xor d - ld [$ffb7], a - bit 7, b - jr z, .asm_211f - ld a, c - cpl - add $1 - ld c, a - ld a, b - cpl - adc $0 - ld b, a -.asm_211f - push bc - ld b, e - call Func_20ab - ld l, c - ld h, b - ld bc, $0080 - add hl, bc - ld l, h - ld h, $0 - pop bc - ld c, e - call Func_20ab - add hl, bc - ld a, [$ffb7] - rlca - jr nc, .asm_2142 - ld a, l - cpl - add $1 - ld l, a - ld a, h - cpl - adc $0 - ld h, a -.asm_2142 - ld c, l - ld b, h - pop hl - pop af - ret - -Func_2147: ; 0x2147 - add $40 - ; fall through -Func_2149: ; 0x2149 - push hl - ld [$ffb6], a - and $7f - cp $40 - jr c, .asm_2155 - cpl - add $81 -.asm_2155 - ld hl, Data_26be ; todo - ld e, a - ld d, $0 - add hl, de - ld e, [hl] - pop hl - ld d, $0 - ld a, [$ffb6] - sla a - ret nc - ld d, $ff - ret - -ApplyGravityToBall: ; 0x2168 -; Adds a constant to the pinball's y velocity. - ld a, [wd549] - and a - ret z - ld de, $000b ; gravity added to y velocity every frame - ld hl, wBallYVelocity - ld a, [hli] - ld h, [hl] - ld l, a - add hl, de - ld a, l - ld [wBallYVelocity], a - ld a, h - ld [wBallYVelocity + 1], a - ret - -LimitBallVelocity: ; 0x2180 -; Ensures that the ball's x and y velocity are kept under a threshold. -; The ball can travel at a higher max speed when moving diagonally, since it -; limits the x and y components independently. - ld hl, wBallXVelocity + 1 - call _LimitBallVelocity - ld hl, wBallYVelocity + 1 - ; fall through -_LimitBallVelocity: ; 0x2189 - ld a, [hl] - bit 7, a ; is it negative velocity? (left or up) - jr nz, .negativeVelocity - cp $8 - ret c - ld a, $7 ; max positive velocity - ld [hl], a - ret - -.negativeVelocity - cp $f9 - ret nc - ld a, $f9 ; max negative velocity - ld [hl], a - ret - -MoveBallPosition: ; 0x219c -; Updates the ball's position according to its velocity - ld a, [wBallXPos] - ld [wPreviousBallXPos], a - ld a, [wBallXPos + 1] - ld [wPreviousBallXPos + 1], a - ld a, [wBallYPos] - ld [wPreviousBallYPos], a - ld a, [wBallYPos + 1] - ld [wPreviousBallYPos + 1], a - ld de, wBallXVelocity + 1 - ld hl, wBallXPos - call AddVelocityToPosition - ld de, wBallYVelocity + 1 - ld hl, wBallYPos - ; fall through - -AddVelocityToPosition: ; 0x21c3 - ld a, [de] - bit 7, a - jr nz, .asm_21d1 - cp 1+4 - jr c, .asm_21da - ld bc, $04ff - jr .asm_21de - -.asm_21d1 - cp -4 - jr nc, .asm_21da - ld bc, -$04ff - jr .asm_21de - -.asm_21da - ld b, a - dec de - ld a, [de] - ld c, a -.asm_21de - ld a, [hl] - add c - ld [hli], a - ld a, [hl] - adc b - ld [hl], a - ret - -Func_21e5: ; 0x21e5 - cpl - inc a - ; fall through -Func_21e7: ; 0x21e7 - push hl - push bc - push de - ld [$ff8c], a - call Func_2147 - ld a, e - ld [$ff8d], a - ld a, d - ld [$ff8e], a - call Func_210b - ld l, c - ld h, b - pop bc - push bc - ld a, [$ff8c] - call Func_2149 - ld a, e - ld [$ff8f], a - ld a, d - ld [$ff90], a - call Func_210b - add hl, bc - pop de - pop bc - push hl - push de - ld a, [$ff8f] - ld e, a - ld a, [$ff90] - cpl - ld d, a - call Func_210b - ld l, c - ld h, b - pop bc - ld a, [$ff8d] - ld e, a - ld a, [$ff8e] - ld d, a - call Func_210b - add hl, bc - ld d, h - ld e, l - pop bc - pop hl - ret - -Func_222b: ; 0x222b - push hl - ld hl, wd7f8 - ld [hl], $ff - bit 7, d - jr nz, .asm_2297 - ld [hl], $0 - ld a, d - cp $3 - jr c, .asm_2254 - ld a, $ff - ld [wd803], a - ld a, $1 - ld [wd804], a - ld a, [wFlipperCollision] - and a - jr nz, .asm_2254 - push de - ld de, $0008 - call Func_4d8 - pop de -.asm_2254 - srl d - rr e - srl d - rr e - ld h, d - ld l, e - srl d - rr e - ld a, [wd7eb] - and a - jr z, .asm_226c -.asm_2268 - add hl, de - dec a - jr nz, .asm_2268 -.asm_226c - ld d, h - ld e, l - ld a, e - cpl - add $1 - ld e, a - ld a, d - cpl - adc $0 - ld d, a - ld a, [wBallSpin] - sra a - ld l, a - ld h, $0 - bit 7, l - jr z, .asm_2286 - ld h, $ff -.asm_2286 - add hl, bc - ld b, h - ld c, l - push bc - sla c - rl b - sla c - rl b - ld a, b - ld [wBallSpin], a - pop bc -.asm_2297 - pop hl - ret - -LoadBallVelocity: ; 0x2299 -; Loads velocity of the ball into bc and de -; bc = x velocity -; de = y velocity - push hl - ld hl, wBallXVelocity - ld a, [hli] - ld c, a - ld a, [hli] - ld b, a - ld a, [hli] - ld e, a - ld a, [hl] - ld d, a - pop hl - ret - -SetBallVelocity: ; 0x22a7 -; Sets the x and y velocities of the ball. -; bc = x velocity -; de = y velocity - push hl - ld hl, wBallXVelocity - ld a, c - ld [hli], a - ld a, b - ld [hli], a - ld a, e - ld [hli], a - ld a, d - ld [hl], a - pop hl - ret - -Func_22b5: ; 0x22b5 - ld a, [wBallXPos + 1] - sub $4 - push af - and $7 - ld [wSubTileBallXPos], a ; sub-tile position - pop af - and $f8 - ld c, a - ld a, [wBallYPos + 1] - sub $4 - push af - and $7 - ld [wSubTileBallYPos], a - pop af - and $f8 - ld b, a - ld l, b ; bc contains tile coords of ball position - ld h, $0 - sla l - rl h - sla l - rl h ; b was multiplied by 4 (y tile position) - srl c - srl c - srl c ; c was divided by 8 (x tile position) - ld b, $0 - add hl, bc - ld a, l - ld [wd7f3], a - ld a, h - ld [wd7f4], a - ld a, [wStageCollisionMapPointer] - ld c, a - ld a, [wStageCollisionMapPointer + 1] - ld b, a - add hl, bc ; hl = address of upper-left collision byte - ld a, [hLoadedROMBank] - push af - ld a, [wStageCollisionMapBank] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld bc, $001f ; number of tiles wide - 1 - ld a, [hli] - ld [wUpperLeftCollisionAttribute], a - ld a, [hl] - ld [wUpperRightCollisionAttribute], a - add hl, bc - ld a, [hli] - ld [wLowerLeftCollisionAttribute], a - ld a, [hl] - ld [wLowerRightCollisionAttribute], a - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, [hLoadedROMBank] - push af - ld a, [wStageCollisionMasksBank] - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, [wSubTileBallXPos] - sla a - ld c, a - ld b, $0 - ld hl, SubTileXPos_CollisionDataPointers - add hl, bc - ld e, [hl] - inc hl - ld d, [hl] - ld a, [wSubTileBallYPos] - ld c, a - ld b, $10 ; number of times to loop over .asm_233d -.asm_233d - push bc - ld a, [de] - inc de - add c ; add the sub tile y pos - push af - srl a - srl a - srl a - ld c, a - ld b, $0 - ld hl, wUpperLeftCollisionAttribute - add hl, bc - ld a, [hl] - call Func_248a - jr nc, .asm_235e - pop af - and $7 - ld c, a - ld b, $0 - add hl, bc - jr .asm_237b - -.asm_235e - ld c, a - ld b, $0 - sla c - rl b - sla c - rl b - sla c - rl b - ld hl, wStageCollisionMasksPointer - ld a, [hli] - ld h, [hl] - ld l, a - add hl, bc - pop af - and $7 - ld c, a - ld b, $0 - add hl, bc -.asm_237b - ld a, [de] - inc de - and [hl] - push af - ld a, [de] - inc de - ld c, a - ld hl, wd7c9 - add hl, bc - pop af - ld [hl], a - pop bc - dec b - jr nz, .asm_233d - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld hl, wd7c9 - ld de, wd7d9 - ld b, $4 -.asm_239a - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .asm_239a - ld hl, wd7c9 - ld de, $0000 - ld b, $0 - ld a, [hl] - and a - jr z, .asm_23c1 -.asm_23b5 - ld a, [hli] - inc b - and a - jr z, .asm_23c1 - ld a, b - cp $11 - jr nc, .asm_23ee - jr .asm_23b5 - -.asm_23c1 - ld a, [hli] - inc b - and a - jr nz, .asm_23cd - ld a, b - cp $11 - jr nc, .asm_23ee - jr .asm_23c1 - -.asm_23cd - push de - ld d, $1 - ld c, b - dec c -.asm_23d2 - ld a, [hli] - inc b - inc d - and a - jr nz, .asm_23d2 - dec d - ld a, b - dec a - dec a - and $f - swap c - or c - ld c, a - ld a, d - cp e - pop de - jr c, .asm_23e9 - ld e, a - ld d, c -.asm_23e9 - ld a, b - cp $10 - jr c, .asm_23c1 -.asm_23ee - ld a, e - ld [wd7e9], a - and a - ret z - ld a, [hLoadedROMBank] - push af - ld a, Bank(Data_8817) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - push de - ld e, d - ld d, $0 - ld hl, Data_8817 - add hl, de - ld a, [hl] - ld [wd7ea], a - sla e - rl d - ld hl, Data_8917 - add hl, de - ld a, [wBallYPos] - add [hl] - ld [wBallYPos], a - inc hl - ld a, [wBallYPos + 1] - adc [hl] - ld [wBallYPos + 1], a - ld hl, Data_8b17 - add hl, de - ld a, [wBallXPos] - add [hl] - ld [wBallXPos], a - inc hl - ld a, [wBallXPos + 1] - adc [hl] - ld [wBallXPos + 1], a - pop de - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, d - swap a - and $f - ld e, a - ld a, d - and $f - sub e - jr nc, .asm_2449 - add $10 -.asm_2449 - add e - add e - inc a - and $1e - ld c, a - ld b, $0 - ld hl, Data_250e ; todo - add hl, bc - ld a, [wSubTileBallXPos] - add $4 - add [hl] - bit 3, a - ld c, b - jr z, .asm_2462 - ld c, $2 -.asm_2462 - ld a, [wSubTileBallYPos] - add $4 - inc hl - add [hl] - bit 3, a - jr z, .asm_246e - inc c -.asm_246e - ld hl, wUpperLeftCollisionAttribute - add hl, bc - ld a, [hl] - ld [wd7f5], a - ld hl, Data_250a ; todo - add hl, bc - ld a, [wd7f3] - add [hl] - ld [wd7f6], a - ld a, [wd7f4] - adc $0 - ld [wd7f7], a - ret - -Func_248a: ; 0x248a - push af - ld a, [wCurrentStage] - bit 0, a - jr nz, .asm_2495 - pop af - and a - ret - -.asm_2495 - pop af - cp $d0 - ccf - ret nc - cp $e0 - jr nc, .asm_24ab - sub $d0 - sla a - sla a - sla a - ld l, a - ld h, $c4 - scf - ret - -.asm_24ab - push de - sub $e0 - ld b, a - ld a, [wCurrentStage] - cp $6 ; gengar stage buggy? - jr nc, .asm_24e0 - bit 4, b - ld hl, Data_3800 - ld a, [wd7af] - jr z, .asm_24c8 - res 4, b - ld hl, Data_3980 - ld a, [wd7b3] -.asm_24c8 - ld de, $0080 - cp $7 - jr c, .asm_24d5 - add hl, de - cp $e - jr c, .asm_24d5 - add hl, de -.asm_24d5 - ld e, b - sla e - sla e - sla e - add hl, de - pop de - scf - ret - -.asm_24e0 - bit 4, b - ld hl, Data_3b00 - ld a, [wd7af] - jr z, .asm_24f2 - res 4, b - ld hl, Data_3c80 - ld a, [wd7b3] -.asm_24f2 - ld de, $0080 - cp $7 - jr c, .asm_24ff - add hl, de - cp $e - jr c, .asm_24ff - add hl, de -.asm_24ff - ld e, b - sla e - sla e - sla e - add hl, de - pop de - scf - ret - -Data_250a: - dr $250a, $250e - -Data_250e: - dr $250e, $252e - -SubTileXPos_CollisionDataPointers: ; 0x252e - dw SubTileXPos_CollisionData0 - dw SubTileXPos_CollisionData1 - dw SubTileXPos_CollisionData2 - dw SubTileXPos_CollisionData3 - dw SubTileXPos_CollisionData4 - dw SubTileXPos_CollisionData5 - dw SubTileXPos_CollisionData6 - dw SubTileXPos_CollisionData7 - -SubTileXPos_CollisionData0: ; 0x253e - db $00, $10, $0B - db $00, $08, $0C - db $00, $04, $0D - db $01, $40, $0A - db $01, $01, $0E - db $03, $80, $09 - db $13, $80, $0F - db $04, $80, $08 - db $14, $80, $00 - db $05, $80, $07 - db $15, $80, $01 - db $07, $40, $06 - db $07, $01, $02 - db $08, $10, $05 - db $08, $08, $04 - db $08, $04, $03 - -SubTileXPos_CollisionData1: ; 0x256e - db $00, $08, $0B - db $00, $04, $0C - db $00, $02, $0D - db $01, $20, $0A - db $11, $80, $0E - db $03, $40, $09 - db $13, $40, $0F - db $04, $40, $08 - db $14, $40, $00 - db $05, $40, $07 - db $15, $40, $01 - db $07, $20, $06 - db $17, $80, $02 - db $08, $08, $05 - db $08, $04, $04 - db $08, $02, $03 - -SubTileXPos_CollisionData2: ; 0x259e - db $00, $04, $0B - db $00, $02, $0C - db $00, $01, $0D - db $01, $10, $0A - db $11, $40, $0E - db $03, $20, $09 - db $13, $20, $0F - db $04, $20, $08 - db $14, $20, $00 - db $05, $20, $07 - db $15, $20, $01 - db $07, $10, $06 - db $17, $40, $02 - db $08, $04, $05 - db $08, $02, $04 - db $08, $01, $03 - -SubTileXPos_CollisionData3: ; 0x25ce - db $00, $02, $0B - db $00, $01, $0C - db $10, $80, $0D - db $01, $08, $0A - db $11, $20, $0E - db $03, $10, $09 - db $13, $10, $0F - db $04, $10, $08 - db $14, $10, $00 - db $05, $10, $07 - db $15, $10, $01 - db $07, $08, $06 - db $17, $20, $02 - db $08, $02, $05 - db $08, $01, $04 - db $18, $80, $03 - -SubTileXPos_CollisionData4: ; 0x25fe - db $00, $01, $0B - db $10, $80, $0C - db $10, $40, $0D - db $01, $04, $0A - db $11, $10, $0E - db $03, $08, $09 - db $13, $08, $0F - db $04, $08, $08 - db $14, $08, $00 - db $05, $08, $07 - db $15, $08, $01 - db $07, $04, $06 - db $17, $10, $02 - db $08, $01, $05 - db $18, $80, $04 - db $18, $40, $03 - -SubTileXPos_CollisionData5: ; 0x262e - db $10, $80, $0B - db $10, $40, $0C - db $10, $20, $0D - db $01, $02, $0A - db $11, $08, $0E - db $03, $04, $09 - db $13, $04, $0F - db $04, $04, $08 - db $14, $04, $00 - db $05, $04, $07 - db $15, $04, $01 - db $07, $02, $06 - db $17, $08, $02 - db $18, $80, $05 - db $18, $40, $04 - db $18, $20, $03 - -SubTileXPos_CollisionData6: ; 0x265e - db $10, $40, $0B - db $10, $20, $0C - db $10, $10, $0D - db $01, $01, $0A - db $11, $04, $0E - db $03, $02, $09 - db $13, $02, $0F - db $04, $02, $08 - db $14, $02, $00 - db $05, $02, $07 - db $15, $02, $01 - db $07, $01, $06 - db $17, $04, $02 - db $18, $40, $05 - db $18, $20, $04 - db $18, $10, $03 - -SubTileXPos_CollisionData7: ; 0x268e - db $10, $20, $0B - db $10, $10, $0C - db $10, $08, $0D - db $11, $80, $0A - db $11, $02, $0E - db $03, $01, $09 - db $13, $01, $0F - db $04, $01, $08 - db $14, $01, $00 - db $05, $01, $07 - db $15, $01, $01 - db $17, $80, $06 - db $17, $02, $02 - db $18, $20, $05 - db $18, $10, $04 - db $18, $08, $03 - -Data_26be: - dr $26be, $2720 - -Func_2720: ; 0x2720 - ld a, $ff - ld [wd4ea], a - call Func_272f - ld a, [wd4ea] - ld [wd4ec], a - ret - -Func_272f: ; 0x272f -; not collisions - ld a, [wCurrentStage] - call CallInFollowingTable -CallTable_2735: ; 0x2735 - ; STAGE_RED_FIELD_TOP - padded_dab Func_143e1 - - ; STAGE_RED_FIELD_BOTTOM - padded_dab Func_143f9 - - padded_dab Func_18061 - - padded_dab Func_18062 - - ; STAGE_BLUE_FIELD_TOP - padded_dab Func_1c520 - - ; STAGE_BLUE_FIELD_BOTTOM - padded_dab Func_1c536 - - ; STAGE_GENGAR_BONUS - padded_dab Func_181b1 - - ; STAGE_GENGAR_BONUS - padded_dab Func_181b1 - - ; STAGE_MEWTWO_BONUS - padded_dab Func_19330 - - ; STAGE_MEWTWO_BONUS - padded_dab Func_19330 - - ; STAGE_MEOWTH_BONUS - padded_dab Func_2414d - - ; STAGE_MEOWTH_BONUS - padded_dab Func_2414d - - ; STAGE_DIGLETT_BONUS - padded_dab Func_19ab3 - - ; STAGE_DIGLETT_BONUS - padded_dab Func_19ab3 - - ; STAGE_SEEL_BONUS - padded_dab Func_25bbc - - ; STAGE_SEEL_BONUS - padded_dab Func_25bbc - -Func_2775: ; 0x2775 - ld a, [wd4ea] - inc a - jr nz, .asm_27a2 - ld a, [bc] - bit 7, a - jr nz, .asm_27a2 - push bc - push de - call nc, Func_27da - pop hl - call c, Func_27a4 - ld a, [wd4ea] - ld b, a - pop hl - ld [hl], $0 - jr nc, .asm_27a2 - ld a, [wd4ec] - cp b - jr z, .asm_27a2 - ld a, [wd4eb] - ld [hli], a - ld a, [wd4ea] - ld [hl], a - scf - ret - -.asm_27a2 - and a - ret - -Func_27a4: ; 0x27a4 - xor a - ld [wd4eb], a - ld a, [hli] - ld d, a - ld a, [hli] - ld e, a - ld a, [wBallXPos + 1] - ld b, a - ld a, [wBallYPos + 1] - ld c, a -.asm_27b4 - ld a, [wd4eb] - inc a - ld [wd4eb], a - ld a, [hli] - ld [wd4ea], a - cp $ff - ret z - ld a, [hli] - sub b - bit 7, a - jr z, .asm_27ca - cpl - inc a -.asm_27ca - cp d - ld a, [hli] - jr nc, .asm_27b4 - sub c - bit 7, a - jr z, .asm_27d5 - cpl - inc a -.asm_27d5 - cp e - jr nc, .asm_27b4 - scf - ret - -Func_27da: ; 0x27da - ld a, [hli] - and a - jr z, .asm_27e8 - dec hl - ld a, [wStageCollisionState] - ld c, a - ld b, $0 - add hl, bc - ld c, [hl] - add hl, bc -.asm_27e8 - ld a, [wd7e9] - and a - ret z - ld a, [wd7f5] - ld b, a - ld c, $ff -.asm_27f3 - inc c - ld a, [hli] - cp $ff - ret z - cp b - jr nz, .asm_27f3 - scf - ret - -PinballCollideWithPoints: ; 0x27fd -; Checks if pinball collides with any of the (x, y) points in the given list. -; Saves the index of the collided point. -; Input: hl = pointer to array of (x, y) points -; Output: Saves index of collided point in wd578 - ld a, [wBallXPos + 1] - ld b, a - ld a, [wBallYPos + 1] - ld c, a - ld d, $0 -.nextPoint - ld a, [hli] - and a - ret z - inc d - ld a, [hli] - sub b - cp $e8 - ld a, [hli] - jr c, .nextPoint - sub c - cp $e8 - jr c, .nextPoint - ld a, d - ld [wd578], a - ret - -Func_281c: ; 0x281c - ld a, [wCurrentStage] - call CallInFollowingTable -CallTable_2822: ; 0x2822 -; not collisions - ; STAGE_RED_FIELD_TOP - padded_dab Func_1460e - - ; STAGE_RED_FIELD_BOTTOM - padded_dab Func_14652 - - padded_dab Func_1806d - - padded_dab Func_1806e - - ; STAGE_BLUE_FIELD_TOP - padded_dab Func_1c715 - - ; STAGE_BLUE_FIELD_BOTTOM - padded_dab Func_1c769 - - ; STAGE_GENGAR_BONUS - padded_dab Func_18377 - - ; STAGE_GENGAR_BONUS - padded_dab Func_18377 - - ; STAGE_MEWTWO_BONUS - padded_dab Func_19451 - - ; STAGE_MEWTWO_BONUS - padded_dab Func_19451 - - ; STAGE_MEOWTH_BONUS - padded_dab Func_2442a - - ; STAGE_MEOWTH_BONUS - padded_dab Func_2442a - - ; STAGE_DIGLETT_BONUS - padded_dab Func_19b88 - - ; STAGE_DIGLETT_BONUS - padded_dab Func_19b88 - - ; STAGE_SEEL_BONUS - padded_dab Func_25c5a - - ; STAGE_SEEL_BONUS - padded_dab Func_25c5a - -Func_2862: ; 0x2862 - ld a, [wd7be] - and a - jr nz, .asm_287c - ld a, [hGameBoyColorFlag] - and a - jr z, .asm_287b - ld a, $0 - ld hl, Data_2890 - ld de, $0052 - ld bc, $0004 - call FarCopyPalettes -.asm_287b - ret - -.asm_287c - ld a, [hGameBoyColorFlag] - and a - jr z, .asm_288f - ld a, $0 - ld hl, Data_2894 - ld de, $0052 - ld bc, $0004 - call FarCopyPalettes -.asm_288f - ret - -Data_2890: - RGB 31, 31, 31 - RGB 21, 21, 27 - -Data_2894: - RGB 27, 10, 10 - RGB 20, 04, 04 - -Data_2898: - dr $2898, $28a0 - -CopyHLToDE: ; 0x28a0 -; Places [hl] into [de] -; Also places $0 into [de + 2] - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - xor a - ld [de], a - ret - -UpdateAnimation: ; 0x28a9 -; Updates an animation struct. (See wDugtrioAnimationFrameCounter) -; Input: de = pointer to 3-byte animation struct -; hl = pointer to animation frames data -; Sets carry flag if the animation is over. - ld a, [de] - and a - ret z ; return, if counter is zero - dec a - ld [de], a - ret nz ; return if counter is not zero after the decrement - push de - inc de - inc de - ld a, [de] ; a = current frame index - inc a - ld [de], a - ld c, a - ld b, $0 - sla c - rl b - add hl, bc ; hl = pointer to two-byte entry in the frames data table - ld a, [hli] - pop de - and a - scf - ret z ; return if the next entry is $00 - push de - ld [de], a ; save the animation duration - inc de - ld a, [hli] - ld [de], a ; save the next animation frame id - pop de - ret - -INCLUDE "text.asm" - -Func_30db: ; 0x30db - ld a, $86 - ld [hWY], a - ld a, $1 - ld [wd5ca], a - ld [wd5cb], a - ret - -Func_30e8: ; 0x30e8 - ld a, $81 - ld hl, wcBottomMessageText + $100 - ld b, $40 -.asm_30ef - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - dec b - jr nz, .asm_30ef - xor a - ld [wd5cc], a - ld [wd5d4], a - ld [wd5dc], a - ld [wd5e4], a - ld [wd5e9], a - ld [wd5ee], a - ret - -Func_310a: ; 0x310a - ld a, $81 - ld hl, wc600 + $40 - ld b, $5 -.asm_3111 - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - dec b - jr nz, .asm_3111 - ld hl, wc600 + $c0 - ld b, $5 -.asm_311d - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - dec b - jr nz, .asm_311d - ret - -Func_3125: ; 0x3125 - ld b, $1 - jr asm_312b - -Func_3129: ; 0x3129 - ld b, $0 -asm_312b: ; 0x312b - ld a, [wd805] - and a - jp nz, Func_3268 -.next_char - ld a, [hli] - and a - ret z - ld c, $81 - cp " " - jr z, .space - cp "," - jr z, .comma - cp "♂" - jr z, .male - cp "♀" - jr z, .female - cp "`" - jr z, .apostrophe - cp "!" - jr z, .exclamation - cp "x" - jr z, .little_x - cp "e" - jr z, .e_acute - cp "*" - jr z, .asterisk - cp "." - jr z, .period - cp ":" - jr z, .colon - cp "0" - jr c, .check_atoz - cp "9" + 1 - jr c, .digit -.check_atoz - cp "A" - jr c, .invalid - cp "Z" + 1 - jr c, .alphabet -.invalid - jr .next_char - -.space - ld a, c - jr .load_char - -.comma - inc c - dec e - jr .check_special_load - -.male - xor a - call Func_31e1 - ld a, $83 - jr .load_char - -.female - ld a, $1 - call Func_31e1 - ld a, $84 - jr .load_char - -.apostrophe - ld a, $2 - call Func_31e1 - ld a, $85 - jr .load_char - -.e_acute - ld a, $3 - call Func_31e1 - ld a, $83 - jr .load_char - -.asterisk - ld a, $4 - call Func_31e1 - ld a, $87 - jr .load_char - -.exclamation - ld a, $5 - call Func_31e1 - ld a, $85 - jr .load_char - -.little_x - ld a, $6 - call Func_31e1 - ld a, $85 - jr .load_char - -.period - ld a, $7 - call Func_31e1 - ld a, $86 - jr .load_char - -.colon - ld a, $8 - call Func_31e1 - ld a, $83 - jr .load_char - -.digit - add $56 - jr .load_char - -.alphabet - add $bf -.load_char - ld [de], a -.check_special_load - bit 0, b - jr nz, .no_special_load - set 7, e - ld a, c - ld [de], a - res 7, e -.no_special_load - inc e - jp .next_char - -Func_31e1: ; 0x31e1 - push bc - push de - push hl - ld c, a - ld a, [hGameBoyColorFlag] - and a - ld a, c - jr z, .asm_31ed - add $9 -.asm_31ed - ld c, a - sla a - sla a - add c - ld c, a - ld b, $0 - ld hl, Data_320e ; todo - add hl, bc - ld a, [hli] - ld e, a - ld a, [hli] - ld d, a - ld a, [hli] - ld b, a - ld a, [hli] - ld h, [hl] - ld l, a - ld a, b - ld bc, $0010 - call LoadVRAMData - pop hl - pop de - pop bc - ret - -Data_320e: - dr $320e, $3268 - -Func_3268: ; 0x3268 - ld a, [hli] - and a - ret z - ld c, $81 - cp $20 - jr z, .asm_3297 - cp $2c - jr z, .asm_329a - cp $30 - jr c, .asm_327d - cp $3a - jr c, .asm_329e -.asm_327d - cp $a0 - jr c, .asm_3285 - cp $e0 - jr c, .asm_328f -.asm_3285 - cp $e0 - jr c, .asm_328d - cp $f4 - jr c, .asm_3293 -.asm_328d - jr Func_3268 - -.asm_328f - sub $80 - jr .asm_32a0 - -.asm_3293 - sub $50 - jr .asm_32a0 - -.asm_3297 - ld a, c - jr .asm_32a0 - -.asm_329a - inc c - dec e - jr .asm_32a1 - -.asm_329e - add $56 -.asm_32a0 - ld [de], a -.asm_32a1 - set 7, e - ld a, c - ld [de], a - res 7, e - inc e - jr Func_3268 - -LoadTextHeader: ; 0x32aa - ld a, $1 - ld [hli], a - ld a, [de] - ld [hli], a - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - push af - inc de - ld a, [de] - ld [hli], a - inc de - pop af - ld l, a - ld h, wcBottomMessageText / $100 -.asm_32c5 - ld a, [de] - ld [hli], a - inc de - and a - jr nz, .asm_32c5 - ret - -Func_32cc: ; 0x32cc - ld a, $1 - ld [hli], a - ld a, [de] - ld [hli], a - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - push af - inc de - ld a, [de] - ld [hli], a - inc de - pop af - ld e, a - ld d, wcBottomMessageText / $100 - ld hl, [sp+$5] - lb bc, 8, 1 -.asm_32ec - ld a, [hl] - swap a - and $f - call Func_3309 - dec b - ld a, [hld] - and $f - call Func_3309 - dec b - jr nz, .asm_32ec - ld a, "0" - ld [de], a - inc de - ld a, " " - ld [de], a - inc de - xor a - ld [de], a - ret - -Func_3309: ; 0x3309 - jr nz, .asm_3312 - ld a, b - dec a - jr z, .asm_3312 - ld a, c - and a - ret nz -.asm_3312 - add $30 - ld [de], a - inc de - ld c, $0 - ld a, b - cp $6 - jr z, .asm_3320 - cp $3 - ret nz -.asm_3320 - ld a, $2c - ld [de], a - inc de - ret - -Func_3325: ; 0x3325 - ld a, [hli] - and a - ret z - ld a, [hl] - dec a - ld [hli], a - ret nz - ld a, [hld] - ld [hl], a - inc hl - inc hl - push hl - ld a, [hli] - ld e, a - cp [hl] - inc hl - jr nz, .asm_333c - ld a, [hl] - dec a - ld [hl], a - jr nz, .asm_333d -.asm_333c - dec e -.asm_333d - push de - ld d, wc600 / $100 - inc hl - push hl - ld l, [hl] - ld h, wcBottomMessageText / $100 - call Func_3129 - pop hl - inc hl - ld a, [hl] - dec a - ld [hl], a - pop de - pop hl - ld [hl], e - ret nz - dec hl - dec hl - dec hl - ld [hl], $0 - ret - -Func_3357: ; 0x3357 - ld a, $1 - ld [hli], a - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - push af - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - inc de - pop af - ld l, a - ld h, wcBottomMessageText / $100 -.asm_336b - ld a, [de] - ld [hli], a - inc de - and a - jr nz, .asm_336b - ret - -Func_3372: ; 0x3372 - ld a, $1 - ld [hli], a - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - push af - inc de - ld a, [de] - ld [hli], a - inc de - ld a, [de] - ld [hli], a - pop af - ld e, a - ld d, wcBottomMessageText / $100 - ld hl, [sp+$5] - lb bc, 8, 1 -.asm_338a - ld a, [hl] - swap a - and $f - call Func_33a7 - dec b - ld a, [hld] - and $f - call Func_33a7 - dec b - jr nz, .asm_338a - ld a, $30 - ld [de], a - inc de - ld a, $20 - ld [de], a - inc de - xor a - ld [de], a - ret - -Func_33a7: ; 0x33a7 - jr nz, .asm_33b0 - ld a, b - dec a - jr z, .asm_33b0 - ld a, c - and a - ret nz -.asm_33b0 - add $30 - ld [de], a - inc de - ld c, $0 - ld a, b - cp $6 - jr z, .asm_33be - cp $3 - ret nz -.asm_33be - ld a, $2c - ld [de], a - inc de - ret - -Func_33c3: ; 0x33c3 - ld a, [hli] - and a - ret z - ld a, [hli] - ld e, a - ld d, wc600 / $100 - push hl - ld l, [hl] - ld h, wcBottomMessageText / $100 - call Func_3129 - pop hl - inc hl - ld a, [hl] - dec a - ld [hli], a - ret nz - ld a, [hl] - dec a - ld [hld], a - bit 7, a - ret z - dec hl - dec hl - dec hl - ld [hl], $0 - ret - -Func_33e3: ; 0x33e3 - ld a, [wd5ca] - and a - jr nz, .asm_33ed - ld [wd5cb], a - ret - -.asm_33ed - ld c, $0 - ld a, [wd5cc] - and a - jr z, .asm_33fe - push bc - ld hl, wd5cc - call Func_3325 - pop bc - inc c -.asm_33fe - ld a, [wd5d4] - and a - jr z, .asm_340d - push bc - ld hl, wd5d4 - call Func_3325 - pop bc - inc c -.asm_340d - ld a, [wd5dc] - and a - jr z, .asm_341c - push bc - ld hl, wd5dc - call Func_3325 - pop bc - inc c -.asm_341c - ld a, [wd5e4] - and a - jr z, .asm_342b - push bc - ld hl, wd5e4 - call Func_33c3 - pop bc - inc c -.asm_342b - ld a, [wd5e9] - and a - jr z, .asm_343a - push bc - ld hl, wd5e9 - call Func_33c3 - pop bc - inc c -.asm_343a - ld a, [wd5ee] - and a - jr z, .asm_3449 - push bc - ld hl, wd5ee - call Func_33c3 - pop bc - inc c -.asm_3449 - ld a, c - and a - ret nz - ld [wd5ca], a - call Func_30e8 - ld a, [hGameBoyColorFlag] - and a - jr nz, .gameboyColor - ld a, Bank(StageRedFieldTopStatusBarSymbolsGfx_GameBoy) - ld hl, $30 + StageRedFieldTopStatusBarSymbolsGfx_GameBoy - ld de, $8830 - ld bc, $0040 - call LoadOrCopyVRAMData - ret - -.gameboyColor - ld a, Bank(StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor) - ld hl, $30 + StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor - ld de, $8830 - ld bc, $0040 - call LoadOrCopyVRAMData - ret - -Func_3475: ; 0x3475 - xor a - ld [hJoypadState], a - ld [hNewlyPressedButtons], a - ld [hPressedButtons], a - call HandleTilts - ld a, [wCurrentStage] - bit 0, a - ld [hFarCallTempA], a - ld a, Bank(HandleFlippers) - ld hl, HandleFlippers - call nz, BankSwitch - ld [hFarCallTempA], a - callba Func_84b7 - call Func_33e3 - call Func_926 - rst AdvanceFrame - ld a, [wd5ca] - and a - jr nz, Func_3475 - ret - -FivePoints: ; 34a6 - bigBCD6 000000000005 -TenPoints: ; 34ac - bigBCD6 000000000010 -OneHundredPoints: ; 34b2 - bigBCD6 000000000100 -FourHundredPoints: ; 34b8 - bigBCD6 000000000400 -FiveHundredPoints: ; 34be - bigBCD6 000000000500 -OneThousandPoints: ; 34c4 - bigBCD6 000000001000 -FiveThousandPoints: ; 34ca - bigBCD6 000000005000 -TenThousandPoints: ; 34d0 - bigBCD6 000000010000 -OneHundredThousandPoints: ; 34d6 - bigBCD6 000000100000 -ThreeHundredThousandPoints: ; 34dc - bigBCD6 000000300000 -FiveHundredThousandPoints: ; 34e2 - bigBCD6 000000500000 -OneMillionPoints: ; 34e8 - bigBCD6 000001000000 -FiveMillionPoints: ; 34ee - bigBCD6 000005000000 -TenMillionPoints: ; 34f4 - bigBCD6 000010000000 -OneHundredMillionPoints: ; 34fa - bigBCD6 000100000000 - -Func_3500: - ld hl, wd464 - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ld a, c - ld [hli], a - ld a, b - ld [hli], a - xor a - ld [hli], a - ld [hl], a - ld bc, wd464 - ldh [hFarCallTempA], a - callba AddBCDScore - ret - -Func_351c: ; 0x351c - ld hl, wd464 - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ld a, c - ld [hli], a - ld a, b - ld [hli], a - xor a - ld [hli], a - ld [hl], a - ld bc, wd464 - ld [hFarCallTempA], a - callba Func_8588 - ret - -Func_3538: ; 0x3538 -; Add BCD value bcde to [wd47a]. Cap at $99999999. - ld hl, wd47a - ld a, [hl] - add e - daa - ld [hli], a - ld a, [hl] - adc d - daa - ld [hli], a - ld a, [hl] - adc c - daa - ld [hli], a - ld a, [hl] - adc b - daa - ld [hli], a - ret nc - ld hl, wd47a - ld a, $99 - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ret - -Func_3556: ; 0x3556 - ld a, [wd47a] - ld e, a - ld a, [wd47a + 1] - ld d, a - ld a, [wd47a + 2] - ld c, a - ld a, [wd47a + 3] - ld b, a - ret - -Func_3567: - ld a, l - add c - daa - ld l, a - ld a, h - adc b - daa - ld h, a - ret - -Func_3570: - ld a, l - add e - daa - ld l, a - ld a, h - adc d - daa - ld h, a - ret - -Func_3579: ; 0x3579 - ld hl, wd47a - xor a - ld [hli], a - ld [hli], a - ld [hli], a - ld [hli], a - ret - -HandleTilts: ; 0x3582 - call HandleLeftTilt - call HandleRightTilt - call HandleUpperTilt - ret - -HandleLeftTilt: ; 0x358c - ld a, [wLeftTiltReset] - and a - jr nz, .tiltCoolDown - ld hl, wKeyConfigLeftTilt - call IsKeyPressed2 - jr z, .tiltCoolDown - ld a, [wLeftTiltCounter] - cp $3 - jr z, .startCoolDown - inc a - ld [wLeftTiltCounter], a - cp $1 - jr nz, .skipSoundEffect - ld de, $003f - call PlaySoundEffect -.skipSoundEffect - ld a, [wd548] - ld hl, wd549 - and [hl] - jr z, .skipBallMovement - ld a, [wBallXPos + 1] - dec a ; move ball's position to the left by 1 pixel - ld [wBallXPos + 1], a -.skipBallMovement - ld a, [wd79f] - inc a - ld [wd79f], a - ld a, $1 - ld [wLeftTiltPushing], a - ret - -.startCoolDown - ld a, $1 - ld [wLeftTiltReset], a -.tiltCoolDown - xor a - ld [wLeftTiltPushing], a - ld a, [wLeftTiltCounter] - and a - jr z, .done - dec a - ld [wLeftTiltCounter], a - ld a, [wd79f] - dec a - ld [wd79f], a - ret - -.done - ld hl, wKeyConfigLeftTilt - call IsKeyPressed2 - ret nz - xor a - ld [wLeftTiltReset], a - ret - -HandleRightTilt: ; 0x35f3 - ld a, [wRightTiltReset] - and a - jr nz, .tiltCoolDown - ld hl, wKeyConfigRightTilt - call IsKeyPressed2 - jr z, .tiltCoolDown - ld a, [wRightTiltCounter] - cp $3 - jr z, .startCoolDown - inc a - ld [wRightTiltCounter], a - cp $1 - jr nz, .skipSoundEffect - ld de, $003f - call PlaySoundEffect -.skipSoundEffect - ld a, [wd548] - ld hl, wd549 - and [hl] - jr z, .skipBallMovement - ld a, [wBallXPos + 1] - inc a ; move ball's position to the right by 1 pixel - ld [wBallXPos + 1], a -.skipBallMovement - ld a, [wd79f] - dec a - ld [wd79f], a - ld a, $1 - ld [wRightTiltPushing], a - ret - -.startCoolDown - ld a, $1 - ld [wRightTiltReset], a -.tiltCoolDown - xor a - ld [wRightTiltPushing], a - ld a, [wRightTiltCounter] - and a - jr z, .done - dec a - ld [wRightTiltCounter], a - ld a, [wd79f] - inc a - ld [wd79f], a - ret - -.done - ld hl, wKeyConfigRightTilt - call IsKeyPressed2 - ret nz - xor a - ld [wRightTiltReset], a - ret - -HandleUpperTilt: ; 0x365a - ld a, [wUpperTiltReset] - and a - jr nz, .tiltCoolDown - ld hl, wKeyConfigUpperTilt - call IsKeyPressed2 - jr z, .tiltCoolDown - ld a, [wUpperTiltCounter] - cp $4 - jr z, .startCoolDown - inc a - ld [wUpperTiltCounter], a - cp $1 - jr nz, .skipSoundEffect - ld de, $003f - call PlaySoundEffect -.skipSoundEffect - ld a, [wd548] - ld hl, wd549 - and [hl] - jr z, .skipBallMovement - ld a, [wBallYPos + 1] - inc a ; move ball's position down by 1 pixel - ld [wBallYPos + 1], a -.skipBallMovement - ld a, [wd7a0] - dec a - ld [wd7a0], a - ld a, $1 - ld [wUpperTiltPushing], a - ret - -.startCoolDown - ld a, $1 - ld [wUpperTiltReset], a -.tiltCoolDown - xor a - ld [wUpperTiltPushing], a - ld a, [wUpperTiltCounter] - and a - jr z, .done - dec a - ld [wUpperTiltCounter], a - ld a, [wd7a0] - inc a - ld [wd7a0], a - ret - -.done - ld hl, wKeyConfigUpperTilt - call IsKeyPressed2 - ret nz - xor a - ld [wUpperTiltReset], a - ret - -ApplyTiltForces: ; 0x36c1 - ld a, [wd548] - ld hl, wd549 - and [hl] - ret z - ld c, $0 - ld a, [wUpperTiltPushing] - srl a - rl c - ld a, [wRightTiltPushing] - srl a - rl c - ld a, [wLeftTiltPushing] - srl a - rl c - ld b, $0 - sla c - ld hl, Data_372d - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - bit 7, h - ret nz - ld a, [wd7ea] - ld c, a - ld b, $0 - sla c - rl b - sla c - rl b - add hl, bc - ld a, [hLoadedROMBank] - push af - ld a, BANK(TiltLeftOnlyForce) - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ld a, [wBallXVelocity] - add [hl] - ld [wBallXVelocity], a - inc hl - ld a, [wBallXVelocity + 1] - adc [hl] - ld [wBallXVelocity + 1], a - inc hl - ld a, [wBallYVelocity] - add [hl] - ld [wBallYVelocity], a - inc hl - ld a, [wBallYVelocity + 1] - adc [hl] - ld [wBallYVelocity + 1], a - pop af - ld [hLoadedROMBank], a - ld [MBC5RomBank], a - ret - -Data_372d: - dw -1 ; no tilt - dw TiltLeftOnlyForce - dw TiltRightOnlyForce - dw -1 ; left + right (cancel) - dw TiltUpOnlyForce - dw TiltUpLeftForce - dw TiltUpRightForce - dw TiltUpOnlyForce - -SECTION "bank0.2", ROM0 [$3800] - -Data_3800: - dr $3800, $3980 - -Data_3980: - dr $3980, $3b00 - -Data_3b00: - dr $3b00, $3c80 - -Data_3c80: - dr $3c80, $3e00 - -SquaresLow: -x = 0 -rept 256 - db (x * x) % $100 -x = x + 1 -endr - -SquaresHigh: -x = 0 -rept 256 - db (x * x) / $100 -x = x + 1 -endr +INCLUDE "home.asm" SECTION "bank1", ROMX, BANK[$1] @@ -11274,14 +3667,14 @@ Func_8104: ; 0x8104 jr nz, .asm_812e ld a, Bank(Data_813a) ld bc, Data_813a - ld de, LoadTileLists ; todo + ld de, LoadTileLists call Func_10c5 ret .asm_812e ld a, Bank(Data_8144) ld bc, Data_8144 - ld de, LoadTileLists ; todo + ld de, LoadTileLists call Func_10c5 ret @@ -11348,7 +3741,7 @@ CheckForResetButtonCombo: ; 0x8167 call ClearOAMBuffer call Func_b66 call Func_588 - call Func_14a4 + call SGBNormal call Func_bbe ld hl, wScreenState inc [hl] @@ -11456,9 +3849,9 @@ FadeInCopyrightScreen: ; 0x8228 call ClearOAMBuffer call Func_b66 call Func_588 - call Func_14a4 + call SGBNormal ld bc, $0050 - call Func_93f + call AdvanceFrames call Func_bbe ld hl, wScreenState inc [hl] @@ -11630,7 +4023,7 @@ Func_8388: ; 0x8388 ld hl, wPartyMons ld bc, $0170 call ClearData - ld hl, wd473 ; todo + ld hl, wd473 ld bc, $0039 call ClearData ld hl, wd4ad @@ -12251,7 +4644,7 @@ HandleInGameMenu: ; 0x86d7 ld [wd804], a .pickedCancel ld bc, $003c - call Func_93f + call AdvanceFrames ld a, $86 ld [hWY], a ld a, $83 @@ -13602,7 +5995,7 @@ TitlescreenLoop: ; 0xc089 ld de, $0027 call PlaySoundEffect ld bc, $0037 - call Func_93f + call AdvanceFrames ld a, $3 ld [wScreenState], a ret @@ -13657,7 +6050,7 @@ Func_c10e: ; 0xc10e ld de, $0027 call PlaySoundEffect ld bc, $0041 - call Func_93f + call AdvanceFrames ld a, [wTitleScreenGameStartCursorSelection] and a jr z, .asm_c177 @@ -13800,7 +6193,7 @@ HandleTitlescreenPikachuBlinkingAnimation: ; 0xc21e ld b, $0 ld hl, TitleScreenBlinkAnimation add hl, bc - ld bc, $3810 + lb bc, $38, $10 ld a, [hl] cp $5a ; blink animation frame 1 OAM id call nz, LoadOAMData @@ -14100,7 +6493,7 @@ Func_c447: ; 0xc447 ld a, [wd916] and a jr nz, .asm_c465 - ld a, [$fffb] + ld a, [hSGBFlag] and a ret nz call Func_c4f4 @@ -14265,7 +6658,7 @@ Func_c55a: ; 0xc55a ld de, $0001 call PlaySoundEffect ld bc, $001e - call Func_93f + call AdvanceFrames ld a, [wd918] dec a sla a @@ -14310,7 +6703,7 @@ Func_c55a: ; 0xc55a call Func_c639 push hl ld bc, $001e - call Func_93f + call AdvanceFrames pop hl ld bc, $0020 add hl, bc @@ -15424,12 +7817,12 @@ Func_ccb6: ; 0xccb6 call PlaySoundEffect call CopyInitialHighScores ld a, BANK(HighScoresTilemap) - ld hl, HighScoresTilemap + $40 ; todo + ld hl, HighScoresTilemap + $40 ld de, $9840 ld bc, $01c0 call LoadVRAMData ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $40 ; todo + ld hl, HighScoresTilemap2 + $40 ld de, $9c40 ld bc, $01c0 call LoadVRAMData @@ -15716,7 +8109,7 @@ Func_cf58: ; 0xcf58 call ClearOAMBuffer rst AdvanceFrame pop af - ld bc, $473b ; todo + ld bc, $473b add $8f call LoadOAMData .asm_cf6f @@ -15919,7 +8312,7 @@ Func_d042: ; 0xd042 ret c .asm_d0a2 ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $3c0 ; todo + ld hl, HighScoresTilemap2 + $3c0 ld de, wc280 ld bc, $0040 call FarCopyData @@ -15929,7 +8322,7 @@ Func_d042: ; 0xd042 ld bc, $01c0 call LoadVRAMData ld a, BANK(HighScoresTilemap2) - ld hl, HighScoresTilemap2 + $280 ; todo + ld hl, HighScoresTilemap2 + $280 ld de, wc480 ld bc, $0040 call FarCopyData @@ -16887,7 +9280,7 @@ FieldSelectGfx_GameBoyColor: ; 0xd730 ChooseFieldToPlay: ; 0xd74e call MoveFieldSelectCursor - ld hl, Data_d83d ; todo + ld hl, Data_d83d call AnimateBlinkingFieldSelectBorder ld a, [hNewlyPressedButtons] and (A_BUTTON | B_BUTTON) @@ -16991,7 +9384,7 @@ AnimateBlinkingFieldSelectBorder: ; 0xd7fb sla a ld c, a ld b, $0 - ld hl, Data_d84f ; todo + ld hl, Data_d84f add hl, bc ld a, [hli] ld c, a @@ -17230,7 +9623,7 @@ SaveGame: ; 0xda05 ld de, $0000 call PlaySong ld bc, $0004 - call Func_93f + call AdvanceFrames call Func_cb5 ld a, [wd849] and a @@ -17330,7 +9723,7 @@ Func_dab2: ; 0xdab2 ld de, $0000 call PlaySong ld bc, $0004 - call Func_93f + call AdvanceFrames call Func_cb5 ld a, [wd849] and a @@ -17357,7 +9750,7 @@ Func_dab2: ; 0xdab2 ld de, $0000 call PlaySong ld bc, $0004 - call Func_93f + call AdvanceFrames call Func_cb5 ld a, [wd849] and a @@ -17381,7 +9774,7 @@ TransitionToHighScoresScreen: ; 0xdb5d ld de, $0000 call PlaySong ld bc, $0004 - call Func_93f + call AdvanceFrames call Func_cb5 call Func_576 ld hl, hSTAT @@ -17723,7 +10116,7 @@ Func_dd76: ; 0xdd76 ld de, $0000 call PlaySong ld bc, $001e - call Func_93f + call AdvanceFrames ld de, $2524 call PlaySoundEffect call Func_dbba @@ -17830,7 +10223,7 @@ Func_de4f: ; 0xde4f ld de, $0000 call PlaySong ld bc, $001e - call Func_93f + call AdvanceFrames ld de, $2524 call PlaySoundEffect call Func_dbba @@ -20521,7 +12914,7 @@ Func_f57f: ; 0xf57f Func_f5a0: ; 0xf5a0 ld de, wcBottomMessageText + $40 - ld hl, Data_3069 ; todo + ld hl, Data_3069 call PrintTextNoHeader ld de, wcBottomMessageText + $80 ld hl, Data_3070 @@ -20602,7 +12995,7 @@ CallTable_f60d: ; 0xf60d Func_f626: ; 0xf626 ld de, wcBottomMessageText + $01 - ld hl, Data_3006 ; todo + ld hl, Data_3006 call PrintTextNoHeader ld hl, wcBottomMessageText + $01 ld a, [wd628] @@ -20618,7 +13011,7 @@ Func_f626: ; 0xf626 Func_f64e: ; 0xf64e ld de, wcBottomMessageText - ld hl, Data_3019 ; todo + ld hl, Data_3019 call PrintTextNoHeader ld hl, wcBottomMessageText ld a, [wd629] @@ -20657,10 +13050,10 @@ Func_f676: ; 0xf676 dec b jr nz, .asm_f678 ld de, wcBottomMessageText + $40 - ld hl, Data_307a ; todo + ld hl, Data_307a call PrintTextNoHeader ld de, wcBottomMessageText + $80 - ld hl, Data_3086 ; todo + ld hl, Data_3086 call PrintTextNoHeader ld hl, wcBottomMessageText + $50 ld a, [wd482] @@ -22302,8 +14695,8 @@ Func_106b6: ; 0x106b6 rl b ; bc was just multiplied by 16 ld hl, PokemonNames + 1 add hl, bc - ld de, YouGotAnText ; todo "You got an" - ld bc, Data_2a91 ; todo + ld de, YouGotAnText ; "You got an" + ld bc, Data_2a91 ld a, [hl] ; check if mon's name starts with a vowel, so it can print "an", instead of "a" cp "A" @@ -22316,7 +14709,7 @@ Func_106b6: ; 0x106b6 jr z, .asm_106f1 cp "O" jr z, .asm_106f1 - ld de, YouGotAText ; todo "You got a" + ld de, YouGotAText ; "You got a" ld bc, Data_2a79 .asm_106f1 push hl @@ -25777,8 +18170,8 @@ Func_14467: ; 0x14467 jp Func_2775 Func_14474: ; 0x14474 - ld de, Data_14515 ; todo - ld hl, Data_144fd ; todo + ld de, Data_14515 + ld hl, Data_144fd ld bc, wd4cb and a jp Func_2775 @@ -25797,7 +18190,7 @@ Func_1448e: ; 0x1448e jp Func_2775 Func_14498: ; 0x14498 - ld de, Data_1453c ; todo + ld de, Data_1453c ld bc, wd507 scf jp Func_2775 @@ -25815,14 +18208,14 @@ Func_144ac: ; 0x144ac jp Func_2775 Func_144b6: ; 0x144b6 - ld de, Data_1455d ; todo + ld de, Data_1455d ld bc, wd51f scf jp Func_2775 Func_144c0: ; 0x144c0 - ld de, Data_1457d ; todo - ld hl, Data_14578 ; todo + ld de, Data_1457d + ld hl, Data_14578 ld bc, wd500 and a jp Func_2775 @@ -27840,10 +20233,10 @@ Func_161e0: ; 0x161e0 sla c add hl, bc asm_1620f: ; 0x1620f - ld bc, $4000 + ld bc, Data_f0000 add hl, bc ld de, wBallXVelocity - ld a, $3c + ld a, BANK(Data_f0000) call ReadByteFromBank ld c, a ld a, [de] @@ -27851,7 +20244,7 @@ asm_1620f: ; 0x1620f ld [de], a inc de inc hl - ld a, $3c + ld a, BANK(Data_f0000) call ReadByteFromBank ld b, a ld a, [de] @@ -27860,7 +20253,7 @@ asm_1620f: ; 0x1620f inc de inc hl push bc - ld a, $3c + ld a, BANK(Data_f0000) call ReadByteFromBank ld c, a ld a, [de] @@ -27868,7 +20261,7 @@ asm_1620f: ; 0x1620f ld [de], a inc de inc hl - ld a, $3c + ld a, BANK(Data_f0000) call ReadByteFromBank ld b, a ld a, [de] @@ -29532,7 +21925,7 @@ Func_17e81: ; 0x17e81 ld a, [hGameBoyColorFlag] and a ret nz - ld a, [$fffb] + ld a, [hSGBFlag] and a ret nz ld a, [wd4c5] @@ -29790,16 +22183,16 @@ InitGengarBonusStage: ; 0x18099 ld [wd4c8], a ld [wBallType], a ld [wd49a], a - ld hl, Data_18121 ; todo + ld hl, Data_18121 ld de, wd659 call Func_18112 call Func_18112 call Func_18112 - ld hl, Data_1813c ; todo + ld hl, Data_1813c ld de, wd67e call Func_18112 call Func_18112 - ld hl, Data_1814e ; todo + ld hl, Data_1814e ld de, wd698 call Func_18112 xor a @@ -32452,7 +24845,7 @@ Func_19aba: ; 0x19aba ret nc ld c, a ld b, $0 - ld hl, Data_19b18 ; todo + ld hl, Data_19b18 add hl, bc ld a, [hl] cp $a @@ -34504,7 +26897,7 @@ Func_1cb1c: ; 0x1cb1c ld a, [wd517] ld c, a ld b, $0 - ld hl, Data_1cb33 ; todo + ld hl, Data_1cb33 add hl, bc ld a, [hl] ld e, a @@ -34520,11 +26913,11 @@ Func_1cb43: ; 0x1cb43 ld c, a sla c ld b, $0 - ld hl, Data_1cb60 ; todo + ld hl, Data_1cb60 ld a, [hGameBoyColorFlag] and a jr z, .asm_1cb56 - ld hl, Data_1cd10 ; todo + ld hl, Data_1cd10 .asm_1cb56 add hl, bc ld a, [hli] @@ -38233,9 +30626,9 @@ Func_20230: ; 0x20230 ld a, [wd5b6] add $4 cp $18 - jr c, .asm_20259 + jr c, .master_loop9 ld a, $18 -.asm_20259 +.master_loop9 ld [wd5b6], a cp $18 jr nz, .asm_20264 @@ -43432,7 +35825,7 @@ Func_26137: ; 0x26137 sla a ld c, a ld b, $0 - ld hl, Data_2614f ; todo + ld hl, Data_2614f add hl, bc ld a, [hli] ld h, [hl] @@ -45251,7 +37644,7 @@ Func_28add: ; 0x28add and a ret z push bc - ld hl, MonBillboardPaletteMapPointers ; todo + ld hl, MonBillboardPaletteMapPointers add hl, bc ld a, Bank(MonBillboardPaletteMapPointers) call ReadByteFromBank |