From 24115bc3abdf6a9bb959f278e9741bc9ead354d2 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 19 Jul 2020 17:40:06 +0200 Subject: [PATCH] fixed TI$ values and UDTIM rollover --- src/basic/assets/table_ti_hi.s | 12 +++++----- src/basic/assets/table_ti_lo.s | 12 +++++----- src/basic/assets/table_ti_mid.s | 12 +++++----- src/kernal/time/settim.s | 2 +- src/kernal/time/udtim.s | 42 +++++++++++++++++---------------- 5 files changed, 41 insertions(+), 39 deletions(-) diff --git a/src/basic/assets/table_ti_hi.s b/src/basic/assets/table_ti_hi.s index 44e3b388..becbe187 100644 --- a/src/basic/assets/table_ti_hi.s +++ b/src/basic/assets/table_ti_hi.s @@ -8,9 +8,9 @@ table_TI_hi: - .byte $36 // 10 hours = 3600000 ticks - .byte $05 // 1 hour = 360000 ticks - .byte $00 // 10 minutes = 30000 ticks - .byte $00 // 1 minute = 3000 ticks - .byte $00 // 10 seconds = 500 ticks - .byte $00 // 1 second = 50 ticks + .byte $20 // 10 hours = 2169000 ticks + .byte $03 // 1 hour = 216000 ticks + .byte $00 // 10 minutes = 36000 ticks + .byte $00 // 1 minute = 3600 ticks + .byte $00 // 10 seconds = 600 ticks + .byte $00 // 1 second = 60 ticks diff --git a/src/basic/assets/table_ti_lo.s b/src/basic/assets/table_ti_lo.s index 5f09b6ac..5b3368cb 100644 --- a/src/basic/assets/table_ti_lo.s +++ b/src/basic/assets/table_ti_lo.s @@ -8,9 +8,9 @@ table_TI_lo: - .byte $80 // 10 hours = 3600000 ticks - .byte $40 // 1 hour = 360000 ticks - .byte $30 // 10 minutes = 30000 ticks - .byte $B8 // 1 minute = 3000 ticks - .byte $F4 // 10 seconds = 500 ticks - .byte $32 // 1 second = 50 ticks + .byte $80 // 10 hours = 2169000 ticks + .byte $C0 // 1 hour = 216000 ticks + .byte $A0 // 10 minutes = 36000 ticks + .byte $10 // 1 minute = 3600 ticks + .byte $58 // 10 seconds = 600 ticks + .byte $3C // 1 second = 60 ticks diff --git a/src/basic/assets/table_ti_mid.s b/src/basic/assets/table_ti_mid.s index ccecd6ff..5515a733 100644 --- a/src/basic/assets/table_ti_mid.s +++ b/src/basic/assets/table_ti_mid.s @@ -8,9 +8,9 @@ table_TI_mid: - .byte $EE // 10 hours = 3600000 ticks - .byte $7E // 1 hour = 360000 ticks - .byte $75 // 10 minutes = 30000 ticks - .byte $0B // 1 minute = 3000 ticks - .byte $01 // 10 seconds = 500 ticks - .byte $00 // 1 second = 50 ticks + .byte $F5 // 10 hours = 2169000 ticks + .byte $4B // 1 hour = 216000 ticks + .byte $8C // 10 minutes = 36000 ticks + .byte $0E // 1 minute = 3600 ticks + .byte $02 // 10 seconds = 600 ticks + .byte $00 // 1 second = 60 ticks diff --git a/src/kernal/time/settim.s b/src/kernal/time/settim.s index 7c07eb5c..c42b8627 100644 --- a/src/kernal/time/settim.s +++ b/src/kernal/time/settim.s @@ -21,7 +21,7 @@ SETTIM: sty TIME + 0 stx TIME + 1 sta TIME + 2 - +.break // Enable interrupts. More elegant solution would be pha + sei + ... + pla, // but (checked by running a test program) original ROM routine always // leaves IRQs enabled. diff --git a/src/kernal/time/udtim.s b/src/kernal/time/udtim.s index b2e2dcc8..1e52cae2 100644 --- a/src/kernal/time/udtim.s +++ b/src/kernal/time/udtim.s @@ -17,32 +17,34 @@ UDTIM: // (24 hours * 60 minutes * 60 seconds * 60 jiffies), // after this time we have to reset the clock. -#if !HAS_OPCODES_65CE02 inc TIME+2 - bne udtim_time_done // done with clock + bne udtim_rollover_check inc TIME+1 -#else - inw TIME+2 -#endif - bne udtim_clock_rollover + bne udtim_rollover_check inc TIME+0 // FALLTROUGH +udtim_rollover_check: + + lda TIME+0 + cmp #$4F + bcc udtim_time_done + lda TIME+1 + cmp #$1A + bcc udtim_time_done + + // FALLTROUGH + +udtim_clock_reset: + + lda #$00 + sta TIME+0 + sta TIME+1 + sta TIME+2 + + // FALLTROUGH + udtim_time_done: jmp udtim_keyboard - -udtim_clock_rollover: - - // At this point TIME+0 contains 0 - lda TIME+1 - cmp #$1A - bne udtim_time_done // done with clock - lda TIME+0 - cmp #$4F - bne udtim_time_done // done with clock - lda #$00 - sta TIME+0 - sta TIME+1 - beq udtim_time_done // done with clock - will always jump