shithub: pokecrystal

Download patch

ref: 6d29673a5fe731e4705f0f11e885d89b47eec927
parent: 64677555685eeeaf6d3d6ae056d93bf2348a0993
author: yenatch <[email protected]>
date: Thu Aug 29 15:32:03 EDT 2013

move time-related asm from main.asm into engine/time.asm

--- /dev/null
+++ b/engine/time.asm
@@ -1,0 +1,311 @@
+; Functions relating to the timer interrupt and the real-time-clock.
+
+
+AskTimer: ; 591
+	push af
+	ld a, [$ffe9]
+	and a
+	jr z, .asm_59a
+	call Timer
+
+.asm_59a
+	pop af
+	reti
+; 59c
+
+
+LatchClock: ; 59c
+; latch clock counter data
+	ld a, 0
+	ld [MBC3LatchClock], a
+	ld a, 1
+	ld [MBC3LatchClock], a
+	ret
+; 5a7
+
+
+UpdateTime: ; 5a7
+	call GetClock
+	call FixDays
+	call FixTime
+	callba GetTimeOfDay
+	ret
+; 5b7
+
+
+GetClock: ; 5b7
+; store clock data in hRTCDayHi-hRTCSeconds
+
+; enable clock r/w
+	ld a, SRAM_ENABLE
+	ld [MBC3SRamEnable], a
+
+; clock data is 'backwards' in hram
+
+	call LatchClock
+	ld hl, MBC3SRamBank
+	ld de, MBC3RTC
+
+	ld [hl], RTC_S
+	ld a, [de]
+	and $3f
+	ld [hRTCSeconds], a
+
+	ld [hl], RTC_M
+	ld a, [de]
+	and $3f
+	ld [hRTCMinutes], a
+
+	ld [hl], RTC_H
+	ld a, [de]
+	and $1f
+	ld [hRTCHours], a
+
+	ld [hl], RTC_DL
+	ld a, [de]
+	ld [hRTCDayLo], a
+
+	ld [hl], RTC_DH
+	ld a, [de]
+	ld [hRTCDayHi], a
+
+; unlatch clock / disable clock r/w
+	call CloseSRAM
+	ret
+; 5e8
+
+
+FixDays: ; 5e8
+; fix day count
+; mod by 140
+
+; check if day count > 255 (bit 8 set)
+	ld a, [hRTCDayHi] ; DH
+	bit 0, a
+	jr z, .daylo
+; reset dh (bit 8)
+	res 0, a
+	ld [hRTCDayHi], a ; DH
+	
+; mod 140
+; mod twice since bit 8 (DH) was set
+	ld a, [hRTCDayLo] ; DL
+.modh
+	sub 140
+	jr nc, .modh
+.modl
+	sub 140
+	jr nc, .modl
+	add 140
+	
+; update dl
+	ld [hRTCDayLo], a ; DL
+
+; unknown output
+	ld a, $40 ; %1000000
+	jr .set
+
+.daylo
+; quit if fewer than 140 days have passed
+	ld a, [hRTCDayLo] ; DL
+	cp 140
+	jr c, .quit
+	
+; mod 140
+.mod
+	sub 140
+	jr nc, .mod
+	add 140
+	
+; update dl
+	ld [hRTCDayLo], a ; DL
+	
+; unknown output
+	ld a, $20 ; %100000
+	
+.set
+; update clock with modded day value
+	push af
+	call SetClock
+	pop af
+	scf
+	ret
+	
+.quit
+	xor a
+	ret
+; 61d
+
+
+FixTime: ; 61d
+; add ingame time (set at newgame) to current time
+;				  day     hr    min    sec
+; store time in CurDay, hHours, hMinutes, hSeconds
+
+; second
+	ld a, [hRTCSeconds] ; S
+	ld c, a
+	ld a, [StartSecond]
+	add c
+	sub 60
+	jr nc, .updatesec
+	add 60
+.updatesec
+	ld [hSeconds], a
+	
+; minute
+	ccf ; carry is set, so turn it off
+	ld a, [hRTCMinutes] ; M
+	ld c, a
+	ld a, [StartMinute]
+	adc c
+	sub 60
+	jr nc, .updatemin
+	add 60
+.updatemin
+	ld [hMinutes], a
+	
+; hour
+	ccf ; carry is set, so turn it off
+	ld a, [hRTCHours] ; H
+	ld c, a
+	ld a, [StartHour]
+	adc c
+	sub 24
+	jr nc, .updatehr
+	add 24
+.updatehr
+	ld [hHours], a
+	
+; day
+	ccf ; carry is set, so turn it off
+	ld a, [hRTCDayLo] ; DL
+	ld c, a
+	ld a, [StartDay]
+	adc c
+	ld [CurDay], a
+	ret
+; 658
+
+Function658: ; 658
+	xor a
+	ld [StringBuffer2], a
+	ld a, $0
+	ld [$d089], a
+	jr .asm_677
+
+	call UpdateTime
+	ld a, [hHours]
+	ld [$d087], a
+	ld a, [hMinutes]
+	ld [$d088], a
+	ld a, [hSeconds]
+	ld [$d089], a
+	jr .asm_677
+
+.asm_677
+	ld a, $5
+	ld hl, $40ed
+	rst FarCall
+	ret
+; 67e
+
+
+
+Function67e: ; 67e
+	call Function685
+	call SetClock
+	ret
+; 685
+
+Function685: ; 685
+	xor a
+	ld [hRTCSeconds], a
+	ld [hRTCMinutes], a
+	ld [hRTCHours], a
+	ld [hRTCDayLo], a
+	ld [hRTCDayHi], a
+	ret
+; 691
+
+
+SetClock: ; 691
+; set clock data from hram
+
+; enable clock r/w
+	ld a, SRAM_ENABLE
+	ld [MBC3SRamEnable], a
+	
+; set clock data
+; stored 'backwards' in hram
+
+	call LatchClock
+	ld hl, MBC3SRamBank
+	ld de, MBC3RTC
+	
+; seems to be a halt check that got partially commented out
+; this block is totally pointless
+	ld [hl], RTC_DH
+	ld a, [de]
+	bit 6, a ; halt
+	ld [de], a
+	
+; seconds
+	ld [hl], RTC_S
+	ld a, [hRTCSeconds]
+	ld [de], a
+; minutes
+	ld [hl], RTC_M
+	ld a, [hRTCMinutes]
+	ld [de], a
+; hours
+	ld [hl], RTC_H
+	ld a, [hRTCHours]
+	ld [de], a
+; day lo
+	ld [hl], RTC_DL
+	ld a, [hRTCDayLo]
+	ld [de], a
+; day hi
+	ld [hl], RTC_DH
+	ld a, [hRTCDayHi]
+	res 6, a ; make sure timer is active
+	ld [de], a
+	
+; cleanup
+	call CloseSRAM ; unlatch clock, disable clock r/w
+	ret
+; 6c4
+
+
+Function6c4: ; 6c4
+	xor a
+	push af
+	ld a, $0
+	call GetSRAMBank
+	pop af
+	ld [$ac60], a
+	call CloseSRAM
+	ret
+; 6d3
+
+Function6d3: ; 6d3
+	ld hl, $ac60
+	push af
+	ld a, $0
+	call GetSRAMBank
+	pop af
+	or [hl]
+	ld [hl], a
+	call CloseSRAM
+	ret
+; 6e3
+
+Function6e3: ; 6e3
+	ld a, $0
+	call GetSRAMBank
+	ld a, [$ac60]
+	call CloseSRAM
+	ret
+; 6ef
+
--- a/main.asm
+++ b/main.asm
@@ -119,313 +119,7 @@
 INCLUDE "engine/lcd.asm"
 
 
-AskTimer: ; 591
-	push af
-	ld a, [$ffe9]
-	and a
-	jr z, .asm_59a
-	call Timer
-
-.asm_59a
-	pop af
-	reti
-; 59c
-
-
-LatchClock: ; 59c
-; latch clock counter data
-	ld a, 0
-	ld [MBC3LatchClock], a
-	ld a, 1
-	ld [MBC3LatchClock], a
-	ret
-; 5a7
-
-
-UpdateTime: ; 5a7
-	call GetClock
-	call FixDays
-	call FixTime
-	callba GetTimeOfDay
-	ret
-; 5b7
-
-
-GetClock: ; 5b7
-; store clock data in hRTCDayHi-hRTCSeconds
-
-; enable clock r/w
-	ld a, SRAM_ENABLE
-	ld [MBC3SRamEnable], a
-
-; clock data is 'backwards' in hram
-
-	call LatchClock
-	ld hl, MBC3SRamBank
-	ld de, MBC3RTC
-
-	ld [hl], RTC_S
-	ld a, [de]
-	and $3f
-	ld [hRTCSeconds], a
-
-	ld [hl], RTC_M
-	ld a, [de]
-	and $3f
-	ld [hRTCMinutes], a
-
-	ld [hl], RTC_H
-	ld a, [de]
-	and $1f
-	ld [hRTCHours], a
-
-	ld [hl], RTC_DL
-	ld a, [de]
-	ld [hRTCDayLo], a
-
-	ld [hl], RTC_DH
-	ld a, [de]
-	ld [hRTCDayHi], a
-
-; unlatch clock / disable clock r/w
-	call CloseSRAM
-	ret
-; 5e8
-
-
-FixDays: ; 5e8
-; fix day count
-; mod by 140
-
-; check if day count > 255 (bit 8 set)
-	ld a, [hRTCDayHi] ; DH
-	bit 0, a
-	jr z, .daylo
-; reset dh (bit 8)
-	res 0, a
-	ld [hRTCDayHi], a ; DH
-	
-; mod 140
-; mod twice since bit 8 (DH) was set
-	ld a, [hRTCDayLo] ; DL
-.modh
-	sub 140
-	jr nc, .modh
-.modl
-	sub 140
-	jr nc, .modl
-	add 140
-	
-; update dl
-	ld [hRTCDayLo], a ; DL
-
-; unknown output
-	ld a, $40 ; %1000000
-	jr .set
-
-.daylo
-; quit if fewer than 140 days have passed
-	ld a, [hRTCDayLo] ; DL
-	cp 140
-	jr c, .quit
-	
-; mod 140
-.mod
-	sub 140
-	jr nc, .mod
-	add 140
-	
-; update dl
-	ld [hRTCDayLo], a ; DL
-	
-; unknown output
-	ld a, $20 ; %100000
-	
-.set
-; update clock with modded day value
-	push af
-	call SetClock
-	pop af
-	scf
-	ret
-	
-.quit
-	xor a
-	ret
-; 61d
-
-
-FixTime: ; 61d
-; add ingame time (set at newgame) to current time
-;				  day     hr    min    sec
-; store time in CurDay, hHours, hMinutes, hSeconds
-
-; second
-	ld a, [hRTCSeconds] ; S
-	ld c, a
-	ld a, [StartSecond]
-	add c
-	sub 60
-	jr nc, .updatesec
-	add 60
-.updatesec
-	ld [hSeconds], a
-	
-; minute
-	ccf ; carry is set, so turn it off
-	ld a, [hRTCMinutes] ; M
-	ld c, a
-	ld a, [StartMinute]
-	adc c
-	sub 60
-	jr nc, .updatemin
-	add 60
-.updatemin
-	ld [hMinutes], a
-	
-; hour
-	ccf ; carry is set, so turn it off
-	ld a, [hRTCHours] ; H
-	ld c, a
-	ld a, [StartHour]
-	adc c
-	sub 24
-	jr nc, .updatehr
-	add 24
-.updatehr
-	ld [hHours], a
-	
-; day
-	ccf ; carry is set, so turn it off
-	ld a, [hRTCDayLo] ; DL
-	ld c, a
-	ld a, [StartDay]
-	adc c
-	ld [CurDay], a
-	ret
-; 658
-
-Function658: ; 658
-	xor a
-	ld [StringBuffer2], a
-	ld a, $0
-	ld [$d089], a
-	jr .asm_677
-
-	call UpdateTime
-	ld a, [hHours]
-	ld [$d087], a
-	ld a, [hMinutes]
-	ld [$d088], a
-	ld a, [hSeconds]
-	ld [$d089], a
-	jr .asm_677
-
-.asm_677
-	ld a, $5
-	ld hl, $40ed
-	rst FarCall
-	ret
-; 67e
-
-
-
-Function67e: ; 67e
-	call Function685
-	call SetClock
-	ret
-; 685
-
-Function685: ; 685
-	xor a
-	ld [hRTCSeconds], a
-	ld [hRTCMinutes], a
-	ld [hRTCHours], a
-	ld [hRTCDayLo], a
-	ld [hRTCDayHi], a
-	ret
-; 691
-
-
-SetClock: ; 691
-; set clock data from hram
-
-; enable clock r/w
-	ld a, SRAM_ENABLE
-	ld [MBC3SRamEnable], a
-	
-; set clock data
-; stored 'backwards' in hram
-
-	call LatchClock
-	ld hl, MBC3SRamBank
-	ld de, MBC3RTC
-	
-; seems to be a halt check that got partially commented out
-; this block is totally pointless
-	ld [hl], RTC_DH
-	ld a, [de]
-	bit 6, a ; halt
-	ld [de], a
-	
-; seconds
-	ld [hl], RTC_S
-	ld a, [hRTCSeconds]
-	ld [de], a
-; minutes
-	ld [hl], RTC_M
-	ld a, [hRTCMinutes]
-	ld [de], a
-; hours
-	ld [hl], RTC_H
-	ld a, [hRTCHours]
-	ld [de], a
-; day lo
-	ld [hl], RTC_DL
-	ld a, [hRTCDayLo]
-	ld [de], a
-; day hi
-	ld [hl], RTC_DH
-	ld a, [hRTCDayHi]
-	res 6, a ; make sure timer is active
-	ld [de], a
-	
-; cleanup
-	call CloseSRAM ; unlatch clock, disable clock r/w
-	ret
-; 6c4
-
-
-Function6c4: ; 6c4
-	xor a
-	push af
-	ld a, $0
-	call GetSRAMBank
-	pop af
-	ld [$ac60], a
-	call CloseSRAM
-	ret
-; 6d3
-
-Function6d3: ; 6d3
-	ld hl, $ac60
-	push af
-	ld a, $0
-	call GetSRAMBank
-	pop af
-	or [hl]
-	ld [hl], a
-	call CloseSRAM
-	ret
-; 6e3
-
-Function6e3: ; 6e3
-	ld a, $0
-	call GetSRAMBank
-	ld a, [$ac60]
-	call CloseSRAM
-	ret
-; 6ef
+INCLUDE "engine/time.asm"
 
 
 INCLUDE "engine/serial.asm"