diff options
Diffstat (limited to 'home')
-rw-r--r-- | home/init.asm | 202 | ||||
-rw-r--r-- | home/lcd.asm | 61 | ||||
-rw-r--r-- | home/time.asm | 233 |
3 files changed, 148 insertions, 348 deletions
diff --git a/home/init.asm b/home/init.asm index dacc5ff7..0dc19063 100644 --- a/home/init.asm +++ b/home/init.asm @@ -1,45 +1,25 @@ -Reset:: ; 150 - di - call MapSetup_Sound_Off +Reset:: ; 5b0 (0:05b0) + call Function3d4f xor a ld [hMapAnims], a - call ClearPalettes - xor a - ld [rIF], a - ld a, 1 ; VBlank int - ld [rIE], a + call Function3564 ei - - ld hl, wcfbe + ld hl, wd8ba set 7, [hl] - ld c, 32 call DelayFrames - jr Init -; 16e - - -_Start:: ; 16e +_Start:: ; 5c6 (0:05c6) cp $11 jr z, .cgb xor a jr .load - .cgb ld a, $1 - .load ld [hCGB], a - ld a, $1 - ld [hFFEA], a -; 17d - - -Init:: ; 17d - +Init:: ; 5d1 (0:05d1) di - xor a ld [rIF], a ld [rIE], a @@ -55,168 +35,112 @@ Init:: ; 17d ld [rOBP1], a ld [rTMA], a ld [rTAC], a - ld [$d000], a - - ld a, %100 ; Start timer at 4096Hz + ld [wceeb], a + ld a, $4 ld [rTAC], a - .wait ld a, [rLY] cp 145 jr nz, .wait - xor a ld [rLCDC], a -; Clear WRAM bank 0 +; Clear WRAM ld hl, wc000 - ld bc, wd000 - wc000 + ld bc, $2000 .ByteFill - ld [hl], 0 + ld [hl], $0 inc hl dec bc ld a, b or c jr nz, .ByteFill - ld sp, Stack + ld sp, wStackTop -; Clear HRAM + call ClearVRAM ld a, [hCGB] push af - ld a, [hFFEA] - push af xor a ld hl, HRAM_START ld bc, HRAM_END - HRAM_START - call ByteFill - pop af - ld [hFFEA], a + call Function314c pop af ld [hCGB], a - - call ClearWRAM - ld a, 1 - ld [rSVBK], a - call ClearVRAM - call ClearSprites - call Function270 - - - ld a, BANK(LoadPushOAM) + call Function30ff + ld a, $1 rst Bankswitch - - call LoadPushOAM - + call Function4032 xor a ld [hMapAnims], a ld [hSCX], a ld [hSCY], a ld [rJOYP], a - - ld a, $8 ; HBlank int enable + ld a, $8 ld [rSTAT], a - ld a, $90 ld [hWY], a ld [rWY], a - - ld a, 7 + ld a, $7 ld [hWX], a ld [rWX], a - - ld a, %11100011 - ; LCD on - ; Win tilemap 1 - ; Win on - ; BG/Win tiledata 0 - ; BG Tilemap 0 - ; OBJ 8x8 - ; OBJ on - ; BG on - ld [rLCDC], a - - ld a, -1 + ld a, $ff ld [hLinkPlayerNumber], a + ld h, $98 + call Function699 + ld h, $9c + call Function699 - callba Function9890 + callab Function9cfd + ld a, $9c - ld a, VBGMap1 / $100 ld [hBGMapAddress + 1], a - xor a ; VBGMap1 % $100 - ld [hBGMapAddress], a - - callba StartClock - xor a + ld [hBGMapAddress], a + callba Function14089 + ld a, $a + ld [MBC3SRamEnable], a + ld a, $0 ld [MBC3LatchClock], a ld [MBC3SRamEnable], a - - ld a, [hCGB] - and a - jr z, .asm_22b - call NormalSpeed -.asm_22b - - xor a - ld [rIF], a - ld a, %1111 ; VBlank, LCDStat, Timer, Serial interrupts + ld a, $e3 + ld [rLCDC], a + ld a, $1f ld [rIE], a ei - call DelayFrame - - predef Function9853 - - call MapSetup_Sound_Off - xor a - ld [wMapMusic], a - jp GameInit -; 245 - - -ClearVRAM:: ; 245 -; Wipe VRAM banks 0 and 1 - - ld a, 1 - ld [rVBK], a - call .clear - + ld a, $30 + call Function2e49 + call Function3d4f xor a - ld [rVBK], a -.clear - ld hl, VTiles0 + ld [wc1c0], a +IF DEF(GOLD) + jp Function6545 +ENDC +IF DEF(SILVER) + jp Function650b +ENDC + +ClearVRAM:: ; 68e (0:068e) + ld hl, $8000 ld bc, $2000 xor a - call ByteFill + call Function314c ret -; 25a -ClearWRAM:: ; 25a -; Wipe swappable WRAM banks (1-7) - - ld a, 1 -.asm_25c - push af - ld [rSVBK], a - xor a - ld hl, $d000 - ld bc, $1000 - call ByteFill - pop af - inc a - cp 8 - jr nc, .asm_25c - ret -; 270 - -Function270:: ; 270 - ld a, $0 - call GetSRAMBank - ld hl, $a000 - ld bc, $0020 - xor a - call ByteFill - call CloseSRAM +Function699:: ; 699 (0:0699) + ld a, $7f + jr asm_69e + +Function69d:: ; 69d + ld a, l +asm_69e + ld de, $400 + ld l, e +.loop + ld [hli], a + dec e + jr nz, .loop + dec d + jr nz, .loop ret -; 283 diff --git a/home/lcd.asm b/home/lcd.asm index 875043bc..b488cbec 100644 --- a/home/lcd.asm +++ b/home/lcd.asm @@ -1,58 +1,38 @@ -; LCD handling - - -Function547:: ; 547 -; Unreferenced - ld a, [hFFC6] - cp rSCX - $ff00 - ret nz - ld c, a - ld a, [LYOverrides] - ld [$ff00+c], a - ret -; 552 - - -LCD:: ; 552 +LCD:: ; 41b (0:041b) push af - ld a, [hFFC6] + ld a, [hLCDCPointer] and a jr z, .done - -; At this point it's assumed we're in WRAM bank 5! - push bc + push hl ld a, [rLY] - ld c, a - ld b, LYOverrides >> 8 - ld a, [bc] - ld b, a - ld a, [hFFC6] - ld c, a - ld a, b - ld [$ff00+c], a - pop bc - + ld l, a + ld h, wLYOverrides >> 8 + ld h, [hl] + ld a, [hLCDCPointer] + ld l, a + ld a, h + ld h, rSCY >> 8 + ld [hl], a + pop hl .done pop af reti -; 568 - -DisableLCD:: ; 568 +DisableLCD:: ; Turn the LCD off ; Don't need to do anything if the LCD is already off ld a, [rLCDC] - bit 7, a ; lcd enable + bit 7, a ret z xor a ld [rIF], a ld a, [rIE] ld b, a - + ; Disable VBlank - res 0, a ; vblank + res 0, a ld [rIE], a .wait @@ -62,7 +42,7 @@ DisableLCD:: ; 568 jr nz, .wait ld a, [rLCDC] - and %01111111 ; lcd enable off + and %01111111 ld [rLCDC], a xor a @@ -70,12 +50,9 @@ DisableLCD:: ; 568 ld a, b ld [rIE], a ret -; 58a - -EnableLCD:: ; 58a +EnableLCD:: ld a, [rLCDC] - set 7, a ; lcd enable + set 7, a ld [rLCDC], a ret -; 591 diff --git a/home/time.asm b/home/time.asm index 2d432be3..309daa01 100644 --- a/home/time.asm +++ b/home/time.asm @@ -1,95 +1,54 @@ -; Functions relating to the timer interrupt and the real-time-clock. - - -AskTimer:: ; 591 - push af - ld a, [hMobile] - and a - jr z, .not_mobile - call Timer - -.not_mobile - pop af +AskTimer:: ; 45b (0:045b) reti -; 59c - -LatchClock:: ; 59c -; latch clock counter data - ld a, 0 +LatchClock:: ; 45c (0:045c) + ld a, $0 ld [MBC3LatchClock], a - ld a, 1 + ld a, $1 ld [MBC3LatchClock], a ret -; 5a7 - -UpdateTime:: ; 5a7 +UpdateTime:: ; 467 (0:0467) call GetClock call FixDays call FixTime - callba GetTimeOfDay + callba Function14032 ret -; 5b7 - - -GetClock:: ; 5b7 -; store clock data in hRTCDayHi-hRTCSeconds -; enable clock r/w +GetClock:: ; 477 (0:0477) ld a, SRAM_ENABLE ld [MBC3SRamEnable], a - -; clock data is 'backwards' in hram - call LatchClock ld hl, MBC3SRamBank ld de, MBC3RTC - ld [hl], RTC_S ld a, [de] and $3f ld [hRTCSeconds], a - ld [hl], RTC_M ld a, [de] and $3f ld [hRTCMinutes], a - ld [hl], RTC_H ld a, [de] and $1f ld [hRTCHours], a - ld [hl], RTC_DL ld a, [de] ld [hRTCDayLo], a - ld [hl], RTC_DH ld a, [de] ld [hRTCDayHi], a - -; unlatch clock / disable clock r/w call CloseSRAM ret -; 5e8 - - -FixDays:: ; 5e8 -; fix day count -; mod by 140 -; check if day count > 255 (bit 8 set) - ld a, [hRTCDayHi] ; DH +FixDays:: ; 4a8 (0:04a8) + ld a, [hRTCDayHi] bit 0, a jr z, .daylo -; reset dh (bit 8) res 0, a - ld [hRTCDayHi], a ; DH - -; mod 140 -; mod twice since bit 8 (DH) was set - ld a, [hRTCDayLo] ; DL + ld [hRTCDayHi], a + ld a, [hRTCDayLo] .modh sub 140 jr nc, .modh @@ -97,127 +56,95 @@ FixDays:: ; 5e8 sub 140 jr nc, .modl add 140 - -; update dl - ld [hRTCDayLo], a ; DL - -; flag for sRTCStatusFlags - ld a, %01000000 + ld [hRTCDayLo], a + ld a, $40 jr .set - .daylo -; quit if fewer than 140 days have passed - ld a, [hRTCDayLo] ; DL + ld a, [hRTCDayLo] cp 140 jr c, .quit - -; mod 140 .mod sub 140 jr nc, .mod add 140 - -; update dl - ld [hRTCDayLo], a ; DL - -; flag for sRTCStatusFlags - ld a, %00100000 - + ld [hRTCDayLo], a + ld a, $20 .set -; update clock with modded day value push af call SetClock pop af scf ret - .quit + ccf xor a ret -; 61d - - -FixTime:: ; 61d -; add ingame time (set at newgame) to current time -; day hr min sec -; store time in CurDay, hHours, hMinutes, hSeconds -; second - ld a, [hRTCSeconds] ; S +FixTime:: ; 4de (0:04de) + ld a, [hRTCSeconds] ld c, a - ld a, [StartSecond] + ld a, [wd1df] add c sub 60 - jr nc, .updatesec + jr nc, .asm_4eb add 60 -.updatesec +.asm_4eb ld [hSeconds], a - -; minute - ccf ; carry is set, so turn it off - ld a, [hRTCMinutes] ; M + ccf + ld a, [hRTCMinutes] ld c, a - ld a, [StartMinute] + ld a, [wd1de] adc c sub 60 - jr nc, .updatemin + jr nc, .asm_4fb add 60 -.updatemin +.asm_4fb ld [hMinutes], a - -; hour - ccf ; carry is set, so turn it off - ld a, [hRTCHours] ; H + ccf + ld a, [hRTCHours] ld c, a - ld a, [StartHour] + ld a, [wd1dd] adc c sub 24 - jr nc, .updatehr + jr nc, .asm_50b add 24 -.updatehr +.asm_50b ld [hHours], a - -; day - ccf ; carry is set, so turn it off - ld a, [hRTCDayLo] ; DL + ccf + ld a, [hRTCDayLo] ld c, a - ld a, [StartDay] + ld a, [wd1dc] adc c - ld [CurDay], a + ld [wd1f2], a ret -; 658 -SetTimeOfDay:: ; 658 +SetTimeOfDay:: xor a - ld [StringBuffer2], a - ld a, $0 ; useless - ld [StringBuffer2 + 3], a + ld [wStringBuffer2], a + ld a, $0 + ld [wStringBuffer2 + 3], a jr InitTime -SetDayOfWeek:: ; 663 +SetDayOfWeek:: call UpdateTime ld a, [hHours] - ld [StringBuffer2 + 1], a + ld [wStringBuffer2 + 1], a ld a, [hMinutes] - ld [StringBuffer2 + 2], a + ld [wStringBuffer2 + 2], a ld a, [hSeconds] - ld [StringBuffer2 + 3], a - jr InitTime ; useless + ld [wStringBuffer2 + 3], a + jr InitTime -InitTime:: ; 677 - callba _InitTime +InitTime:: + callba Function140ff ret -; 67e - - -PanicResetClock:: ; 67e - call .ClearhRTC +PanicResetClock:: + call ClearhRTC call SetClock ret -; 685 -.ClearhRTC ; 685 +ClearhRTC:: ; 546 (0:0546) xor a ld [hRTCSeconds], a ld [hRTCMinutes], a @@ -225,88 +152,60 @@ PanicResetClock:: ; 67e ld [hRTCDayLo], a ld [hRTCDayHi], a ret -; 691 - -SetClock:: ; 691 -; set clock data from hram - -; enable clock r/w +SetClock:: ; 552 (0:0552) ld a, SRAM_ENABLE ld [MBC3SRamEnable], a - -; set clock data -; stored 'backwards' in hram - call LatchClock ld hl, MBC3SRamBank ld de, MBC3RTC - -; seems to be a halt check that got partially commented out -; this block is totally pointless ld [hl], RTC_DH ld a, [de] - bit 6, a ; halt + bit 6, a ld [de], a - -; seconds ld [hl], RTC_S ld a, [hRTCSeconds] ld [de], a -; minutes ld [hl], RTC_M ld a, [hRTCMinutes] ld [de], a -; hours ld [hl], RTC_H ld a, [hRTCHours] ld [de], a -; day lo ld [hl], RTC_DL ld a, [hRTCDayLo] ld [de], a -; day hi ld [hl], RTC_DH ld a, [hRTCDayHi] - res 6, a ; make sure timer is active + res 6, a ld [de], a - -; cleanup - call CloseSRAM ; unlatch clock, disable clock r/w + call CloseSRAM ret -; 6c4 - -ClearRTCStatus:: ; 6c4 -; clear sRTCStatusFlags +ClearRTCStatus:: xor a push af - ld a, BANK(sRTCStatusFlags) - call GetSRAMBank + ld a, BANK(s0_ac60) + call OpenSRAM pop af - ld [sRTCStatusFlags], a + ld [s0_ac60], a call CloseSRAM ret -; 6d3 -RecordRTCStatus:: ; 6d3 -; append flags to sRTCStatusFlags - ld hl, sRTCStatusFlags +RecordRTCStatus:: + ld hl, s0_ac60 push af - ld a, BANK(sRTCStatusFlags) - call GetSRAMBank + ld a, BANK(s0_ac60) + call OpenSRAM pop af or [hl] ld [hl], a call CloseSRAM ret -; 6e3 -CheckRTCStatus:: ; 6e3 -; check sRTCStatusFlags - ld a, BANK(sRTCStatusFlags) - call GetSRAMBank - ld a, [sRTCStatusFlags] +CheckRTCStatus:: + ld a, BANK(s0_ac60) + call OpenSRAM + ld a, [s0_ac60] call CloseSRAM ret -; 6ef |