Merge branch 'main' into kara
This commit is contained in:
170
timer.asm
170
timer.asm
@@ -1,42 +1,31 @@
|
||||
;================================================================================
|
||||
; Challenge Timer
|
||||
;================================================================================
|
||||
!Temp = "$7F5020"
|
||||
;--------------------------------------------------------------------------------
|
||||
!CLOCK_HOURS = "$7F5080" ; $7F5080 - $7F5083 - Clock Hours
|
||||
!CLOCK_MINUTES = "$7F5084" ; $7F5084 - $7F5087 - Clock Minutes
|
||||
!CLOCK_SECONDS = "$7F5088" ; $7F5088 - $7F508B - Clock Seconds
|
||||
!CLOCK_TEMPORARY = "$7F508C" ; $7F508C - $7F508F - Clock Temporary
|
||||
;--------------------------------------------------------------------------------
|
||||
!FRAMES_PER_SECOND = #60
|
||||
!FRAMES_PER_MINUTE = #60*60
|
||||
!FRAMES_PER_HOUR = #60*60*60
|
||||
;--------------------------------------------------------------------------------
|
||||
!Status = "$7F507E"
|
||||
; ---- --dn
|
||||
; d - dnf
|
||||
; n - negative
|
||||
!FRAMES_PER_SECOND = 60
|
||||
!FRAMES_PER_MINUTE = 60*60
|
||||
!FRAMES_PER_HOUR = 60*60*60
|
||||
;--------------------------------------------------------------------------------
|
||||
macro DecIncr(value)
|
||||
LDA.l <value> : INC
|
||||
LDA.w <value> : INC
|
||||
CMP.w #$000A : !BLT ?noIncr
|
||||
LDA.l <value>+2 : INC : STA.l <value>+2
|
||||
LDA.w <value>+2 : INC : STA.w <value>+2
|
||||
LDA.w #$0000
|
||||
?noIncr:
|
||||
STA.l <value>
|
||||
STA.w <value>
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro Sub32(minuend,subtrahend,result)
|
||||
LDA.l <minuend>
|
||||
!SUB.l <subtrahend> ; perform subtraction on the LSBs
|
||||
STA.l <result>
|
||||
STA.w <result>
|
||||
LDA.l <minuend>+2 ; do the same for the MSBs, with carry
|
||||
SBC.l <subtrahend>+2 ; set according to the previous result
|
||||
STA.l <result>+2
|
||||
STA.w <result>+2
|
||||
endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
macro Blt32(value1,value2)
|
||||
LDA.l <value1>+2
|
||||
LDA.w <value1>+2
|
||||
CMP.l <value2>+2
|
||||
!BLT ?done
|
||||
BNE ?done
|
||||
@@ -47,33 +36,33 @@ endmacro
|
||||
;--------------------------------------------------------------------------------
|
||||
CalculateTimer:
|
||||
LDA.w #$0000
|
||||
STA.l !CLOCK_HOURS ; clear digit storage
|
||||
STA.l !CLOCK_HOURS+2
|
||||
STA.l !CLOCK_MINUTES
|
||||
STA.l !CLOCK_MINUTES+2
|
||||
STA.l !CLOCK_SECONDS
|
||||
STA.l !CLOCK_SECONDS+2
|
||||
STA.w ClockHours ; clear digit storage
|
||||
STA.w ClockHours+2
|
||||
STA.w ClockMinutes
|
||||
STA.w ClockMinutes+2
|
||||
STA.w ClockSeconds
|
||||
STA.w ClockSeconds+2
|
||||
|
||||
LDA.l TimerStyle : AND.w #$00FF : CMP.w #$0002 : BNE + ; Stopwatch Mode
|
||||
%Sub32(NMIFrames,ChallengeTimer,!CLOCK_TEMPORARY)
|
||||
%Sub32(NMIFrames,ChallengeTimer,ClockBuffer)
|
||||
BRA ++
|
||||
+ CMP.w #$0001 : BNE ++ ; Countdown Mode
|
||||
%Sub32(ChallengeTimer,NMIFrames,!CLOCK_TEMPORARY)
|
||||
%Sub32(ChallengeTimer,NMIFrames,ClockBuffer)
|
||||
++
|
||||
|
||||
%Blt32(!CLOCK_TEMPORARY,.halfCycle) : !BLT +
|
||||
%Blt32(ClockBuffer,.halfCycle) : !BLT +
|
||||
LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF
|
||||
LDA.w #$0002 : STA.l !Status ; Set DNF Mode
|
||||
LDA.w #$0002 : STA.l ClockStatus ; Set DNF Mode
|
||||
LDA.l NMIFrames : STA.l ChallengeTimer
|
||||
LDA.l NMIFrames+2 : STA.l ChallengeTimer+2
|
||||
RTS
|
||||
++ CMP.w #$0001 : BNE ++ ; Negative Time
|
||||
LDA.l !CLOCK_TEMPORARY : EOR.w #$FFFF : !ADD.w #$0001 : STA.l !CLOCK_TEMPORARY
|
||||
LDA.l !CLOCK_TEMPORARY+2 : EOR.w #$FFFF : ADC.w #$0000 : STA.l !CLOCK_TEMPORARY+2
|
||||
LDA.w #$0001 : STA.l !Status ; Set Negative Mode
|
||||
LDA.w ClockBuffer : EOR.w #$FFFF : !ADD.w #$0001 : STA.w ClockBuffer
|
||||
LDA.w ClockBuffer+2 : EOR.w #$FFFF : ADC.w #$0000 : STA.w ClockBuffer+2
|
||||
LDA.w #$0001 : STA.l ClockStatus ; Set Negative Mode
|
||||
BRA .prepDigits
|
||||
++ CMP.w #$0002 : BNE ++ ; OHKO
|
||||
LDA.w #$0002 : STA.l !Status ; Set DNF Mode
|
||||
LDA.w #$0002 : STA.l ClockStatus ; Set DNF Mode
|
||||
LDA.l NMIFrames : STA.l ChallengeTimer
|
||||
LDA.l NMIFrames+2 : STA.l ChallengeTimer+2
|
||||
RTS
|
||||
@@ -85,30 +74,30 @@ CalculateTimer:
|
||||
+
|
||||
|
||||
LDA.l TimerRestart : AND.w #$00FF : BEQ +
|
||||
LDA.w #$0000 : STA.l !Status ; Set Positive Mode
|
||||
LDA.w #$0000 : STA.l ClockStatus ; Set Positive Mode
|
||||
+
|
||||
.prepDigits
|
||||
|
||||
-
|
||||
%Blt32(!CLOCK_TEMPORARY,.hour) : !BLT +
|
||||
%DecIncr(!CLOCK_HOURS)
|
||||
%Sub32(!CLOCK_TEMPORARY,.hour,!CLOCK_TEMPORARY) : BRA -
|
||||
%Blt32(ClockBuffer,.hour) : !BLT +
|
||||
%DecIncr(ClockHours)
|
||||
%Sub32(ClockBuffer,.hour,ClockBuffer) : BRA -
|
||||
+ -
|
||||
%Blt32(!CLOCK_TEMPORARY,.minute) : !BLT +
|
||||
%DecIncr(!CLOCK_MINUTES)
|
||||
%Sub32(!CLOCK_TEMPORARY,.minute,!CLOCK_TEMPORARY) : BRA -
|
||||
%Blt32(ClockBuffer,.minute) : !BLT +
|
||||
%DecIncr(ClockMinutes)
|
||||
%Sub32(ClockBuffer,.minute,ClockBuffer) : BRA -
|
||||
+ -
|
||||
%Blt32(!CLOCK_TEMPORARY,.second) : !BLT +
|
||||
%DecIncr(!CLOCK_SECONDS)
|
||||
%Sub32(!CLOCK_TEMPORARY,.second,!CLOCK_TEMPORARY) : BRA -
|
||||
%Blt32(ClockBuffer,.second) : !BLT +
|
||||
%DecIncr(ClockSeconds)
|
||||
%Sub32(ClockBuffer,.second,ClockBuffer) : BRA -
|
||||
+
|
||||
|
||||
LDA !CLOCK_HOURS : !ADD.w #$2490 : STA !CLOCK_HOURS ; convert decimal values to tiles
|
||||
LDA !CLOCK_HOURS+2 : !ADD.w #$2490 : STA !CLOCK_HOURS+2
|
||||
LDA !CLOCK_MINUTES : !ADD.w #$2490 : STA !CLOCK_MINUTES
|
||||
LDA !CLOCK_MINUTES+2 : !ADD.w #$2490 : STA !CLOCK_MINUTES+2
|
||||
LDA !CLOCK_SECONDS : !ADD.w #$2490 : STA !CLOCK_SECONDS
|
||||
LDA !CLOCK_SECONDS+2 : !ADD.w #$2490 : STA !CLOCK_SECONDS+2
|
||||
LDA.w ClockHours : !ADD.w #$2490 : STA.w ClockHours ; convert decimal values to tiles
|
||||
LDA.w ClockHours+2 : !ADD.w #$2490 : STA.w ClockHours+2
|
||||
LDA.w ClockMinutes : !ADD.w #$2490 : STA.w ClockMinutes
|
||||
LDA.w ClockMinutes+2 : !ADD.w #$2490 : STA.w ClockMinutes+2
|
||||
LDA.w ClockSeconds : !ADD.w #$2490 : STA.w ClockSeconds
|
||||
LDA.w ClockSeconds+2 : !ADD.w #$2490 : STA.w ClockSeconds+2
|
||||
RTS
|
||||
;--------------------------------------------------------------------------------
|
||||
.hour
|
||||
@@ -121,65 +110,64 @@ dw #$003C, #$0000
|
||||
dw #$FFFF, #$7FFF
|
||||
;--------------------------------------------------------------------------------
|
||||
DrawChallengeTimer:
|
||||
LDA TemporaryOHKO : AND.w #$00FF : BEQ +
|
||||
LDA.w #$2807 : STA $7EC790
|
||||
LDA.w #$280A : STA $7EC792
|
||||
LDA.w #$280B : STA $7EC794
|
||||
LDA.w #$280C : STA $7EC796
|
||||
LDA.l OHKOFlag : AND.w #$00FF : BEQ +
|
||||
LDA.w #$2807 : STA.l HUDTileMapBuffer+$90
|
||||
LDA.w #$280A : STA.l HUDTileMapBuffer+$92
|
||||
LDA.w #$280B : STA.l HUDTileMapBuffer+$94
|
||||
LDA.w #$280C : STA.l HUDTileMapBuffer+$96
|
||||
RTL
|
||||
+
|
||||
LDA.w #$247F : STA $7EC790
|
||||
STA $7EC792
|
||||
STA $7EC794
|
||||
STA $7EC796
|
||||
LDA.w #$247F : STA.l HUDTileMapBuffer+$90
|
||||
STA.l HUDTileMapBuffer+$92
|
||||
STA.l HUDTileMapBuffer+$94
|
||||
STA.l HUDTileMapBuffer+$96
|
||||
++
|
||||
|
||||
LDA.l TimerStyle : BNE + : RTL : + ; Hud Timer
|
||||
LDA.w #$2807 : STA $7EC792
|
||||
|
||||
LDA.l !Status : AND.w #$0002 : BEQ + ; DNF / OKHO
|
||||
LDA.l TimerStyle : BNE + : RTL : + ; Hud Timer
|
||||
LDA.w #$2807 : STA.l HUDTileMapBuffer+$92
|
||||
LDA.l ClockStatus : AND.w #$0002 : BEQ + ; DNF / OKHO
|
||||
|
||||
LDA.l TimeoutBehavior : AND.w #$00FF : BNE ++ ; DNF
|
||||
LDA.w #$2808 : STA $7EC794
|
||||
LDA.w #$2809 : STA $7EC796
|
||||
LDA.w #$247F : STA $7EC798
|
||||
STA $7EC79A
|
||||
LDA.w #$2808 : STA.l HUDTileMapBuffer+$94
|
||||
LDA.w #$2809 : STA.l HUDTileMapBuffer+$96
|
||||
LDA.w #$247F : STA.l HUDTileMapBuffer+$98
|
||||
STA.l HUDTileMapBuffer+$9A
|
||||
BRA +++
|
||||
++ ; OHKO
|
||||
LDA.w #$280A : STA $7EC794
|
||||
LDA.w #$280B : STA $7EC796
|
||||
LDA.w #$280C : STA $7EC798
|
||||
LDA.w #$247F : STA $7EC79A
|
||||
LDA.w #$280A : STA.l HUDTileMapBuffer+$94
|
||||
LDA.w #$280B : STA.l HUDTileMapBuffer+$96
|
||||
LDA.w #$280C : STA.l HUDTileMapBuffer+$98
|
||||
LDA.w #$247F : STA.l HUDTileMapBuffer+$9A
|
||||
+++
|
||||
STA $7EC79C
|
||||
STA $7EC79E
|
||||
STA $7EC7A0
|
||||
STA $7EC7A2
|
||||
STA $7EC7A4
|
||||
STA.l HUDTileMapBuffer+$9C
|
||||
STA.l HUDTileMapBuffer+$9E
|
||||
STA.l HUDTileMapBuffer+$A0
|
||||
STA.l HUDTileMapBuffer+$A2
|
||||
STA.l HUDTileMapBuffer+$A4
|
||||
LDA.l TimerRestart : BNE +++ : RTL : +++
|
||||
BRA ++
|
||||
+ ; Show Timer
|
||||
LDA.l !Status : AND.w #$0001 : !ADD.w #$2804 : STA $7EC794
|
||||
LDA !CLOCK_HOURS+2 : STA $7EC796
|
||||
LDA !CLOCK_HOURS : STA $7EC798
|
||||
LDA.w #$2806 : STA $7EC79A
|
||||
LDA !CLOCK_MINUTES+2 : STA $7EC79C
|
||||
LDA !CLOCK_MINUTES : STA $7EC79E
|
||||
LDA.w #$2806 : STA $7EC7A0
|
||||
LDA !CLOCK_SECONDS+2 : STA $7EC7A2
|
||||
LDA !CLOCK_SECONDS : STA $7EC7A4
|
||||
LDA.l ClockStatus : AND.w #$0001 : !ADD.w #$2804 : STA.l HUDTileMapBuffer+$94
|
||||
LDA.w ClockHours+2 : STA.l HUDTileMapBuffer+$96
|
||||
LDA.w ClockHours : STA.l HUDTileMapBuffer+$98
|
||||
LDA.w #$2806 : STA.l HUDTileMapBuffer+$9A
|
||||
LDA.w ClockMinutes+2 : STA.l HUDTileMapBuffer+$9C
|
||||
LDA.w ClockMinutes : STA.l HUDTileMapBuffer+$9E
|
||||
LDA.w #$2806 : STA.l HUDTileMapBuffer+$A0
|
||||
LDA.w ClockSeconds+2 : STA.l HUDTileMapBuffer+$A2
|
||||
LDA.w ClockSeconds : STA.l HUDTileMapBuffer+$A4
|
||||
++
|
||||
LDA $1A : AND.w #$001F : BNE + : JSR CalculateTimer : +
|
||||
LDA.b FrameCounter : AND.w #$001F : BNE + : JSR CalculateTimer : +
|
||||
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
OHKOTimer:
|
||||
LDA TemporaryOHKO : BNE .kill
|
||||
LDA.l TimeoutBehavior : CMP #$02 : BNE +
|
||||
LDA !Status : AND.b #$02 : BEQ +
|
||||
LDA.l OHKOFlag : BNE .kill
|
||||
LDA.l TimeoutBehavior : CMP.b #$02 : BNE +
|
||||
LDA.l ClockStatus : AND.b #$02 : BEQ +
|
||||
.kill
|
||||
LDA.b #$00 : STA CurrentHealth ; kill link
|
||||
LDA.b #$00 : STA.l CurrentHealth ; kill link
|
||||
+
|
||||
LDA CurrentHealth
|
||||
LDA.l CurrentHealth
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user