SNES menu: add time setting dialog + begin work on main menu
This commit is contained in:
713
snes/time.a65
Normal file
713
snes/time.a65
Normal file
@@ -0,0 +1,713 @@
|
||||
#include "memmap.i65"
|
||||
#include "dma.i65"
|
||||
|
||||
timebox_data
|
||||
; string offset, selection width, bcdtime offset, 1s limit, 10s limit
|
||||
.byt 0, 4, 9
|
||||
.byt 5, 2, 8
|
||||
.byt 8, 2, 6
|
||||
.byt 11, 2, 4
|
||||
.byt 14, 2, 2
|
||||
.byt 17, 2, 0
|
||||
|
||||
time_month
|
||||
.byt 3, 1
|
||||
.byt 2, 8
|
||||
.byt 3, 1
|
||||
.byt 3, 0
|
||||
.byt 3, 1
|
||||
.byt 3, 0
|
||||
.byt 3, 1
|
||||
.byt 3, 1
|
||||
.byt 3, 0
|
||||
.byt 3, 1
|
||||
.byt 3, 0
|
||||
.byt 3, 1
|
||||
|
||||
time_init:
|
||||
php
|
||||
sep #$20 : .as
|
||||
; save text area
|
||||
jsr backup_screen
|
||||
; draw window + current time setting
|
||||
lda #^text_clkset
|
||||
sta window_tbank
|
||||
ldx #!text_clkset
|
||||
stx window_taddr
|
||||
lda @time_win_x
|
||||
sta window_x
|
||||
lda @time_win_w
|
||||
sta window_w
|
||||
lda @time_win_y
|
||||
sta window_y
|
||||
lda @time_win_h
|
||||
sta window_h
|
||||
jsr draw_window
|
||||
jsr gettime
|
||||
stz time_sel
|
||||
stz time_exit
|
||||
lda #^text_buttonB
|
||||
sta print_bank
|
||||
ldx #!text_buttonB
|
||||
stx print_src
|
||||
lda @time_win_x
|
||||
inc
|
||||
inc
|
||||
sta print_x
|
||||
lda @time_win_y
|
||||
clc
|
||||
adc #$5
|
||||
sta print_y
|
||||
lda #$01
|
||||
sta print_pal
|
||||
jsr hiprint
|
||||
time_update
|
||||
jsr rendertime
|
||||
lda #^stringbuf
|
||||
sta print_bank
|
||||
ldx #!stringbuf
|
||||
stx print_src
|
||||
lda @time_win_x
|
||||
clc
|
||||
adc #$04
|
||||
sta print_x
|
||||
lda @time_win_y
|
||||
clc
|
||||
adc #$03
|
||||
sta print_y
|
||||
stz print_pal
|
||||
jsr hiprint
|
||||
lda time_sel
|
||||
asl
|
||||
clc
|
||||
adc time_sel
|
||||
xba
|
||||
lda #$00
|
||||
xba
|
||||
tax
|
||||
lda !timebox_data, x
|
||||
clc
|
||||
adc #$04
|
||||
adc @time_win_x
|
||||
sta bar_xl
|
||||
lda @time_win_y
|
||||
adc #$02
|
||||
sta bar_yl
|
||||
inx
|
||||
lda !timebox_data, x
|
||||
sta bar_wl
|
||||
inx
|
||||
lda !timebox_data, x
|
||||
sta time_ptr
|
||||
timeloop1
|
||||
lda isr_done
|
||||
lsr
|
||||
bcc timeloop1
|
||||
stz isr_done
|
||||
jsr read_pad
|
||||
lda #$01
|
||||
and pad1trig+1
|
||||
bne tkey_right
|
||||
lda #$02
|
||||
and pad1trig+1
|
||||
bne tkey_left
|
||||
lda #$04
|
||||
and pad1trig+1
|
||||
bne tkey_down
|
||||
lda #$08
|
||||
and pad1trig+1
|
||||
bne tkey_up
|
||||
lda #$80
|
||||
and pad1trig+1
|
||||
bne tkey_b
|
||||
; do stuff
|
||||
lda time_exit
|
||||
beq timeloop1
|
||||
; set clock
|
||||
jsr settime
|
||||
; restore text area
|
||||
jsr restore_screen
|
||||
plp
|
||||
rts
|
||||
|
||||
tkey_b
|
||||
inc time_exit
|
||||
jmp time_update
|
||||
|
||||
tkey_left
|
||||
jsr time_key_left
|
||||
jmp time_update
|
||||
|
||||
tkey_right
|
||||
jsr time_key_right
|
||||
jmp time_update
|
||||
|
||||
tkey_up
|
||||
jsr time_key_up
|
||||
jmp time_update
|
||||
|
||||
tkey_down
|
||||
jsr time_key_down
|
||||
jmp time_update
|
||||
|
||||
time_key_left
|
||||
lda time_sel
|
||||
beq +
|
||||
dec time_sel
|
||||
+
|
||||
rts
|
||||
|
||||
time_key_right
|
||||
lda time_sel
|
||||
cmp #5
|
||||
beq +
|
||||
inc time_sel
|
||||
+
|
||||
rts
|
||||
|
||||
time_key_up
|
||||
lda time_ptr
|
||||
cmp #4
|
||||
beq time_inc_hour_jmp
|
||||
cmp #6
|
||||
beq time_inc_day_jmp
|
||||
cmp #8
|
||||
beq time_inc_mon_jmp
|
||||
cmp #9
|
||||
beq time_inc_year_jmp
|
||||
xba
|
||||
lda #$00
|
||||
xba
|
||||
tax
|
||||
lda !time_s1, x
|
||||
inc
|
||||
cmp #$0a
|
||||
bmi time_inc_minsec1_normal
|
||||
stz !time_s1, x
|
||||
lda !time_s10, x
|
||||
inc
|
||||
cmp #$06
|
||||
bmi time_inc_minsec10_normal
|
||||
stz !time_s10, x
|
||||
bra +
|
||||
time_inc_minsec10_normal
|
||||
sta !time_s10, x
|
||||
bra +
|
||||
time_inc_minsec1_normal
|
||||
sta !time_s1, x
|
||||
+
|
||||
rts
|
||||
|
||||
time_inc_hour_jmp
|
||||
jsr time_inc_hour
|
||||
rts
|
||||
|
||||
time_inc_day_jmp
|
||||
jsr time_inc_day
|
||||
rts
|
||||
|
||||
time_inc_mon_jmp
|
||||
jsr time_inc_mon
|
||||
rts
|
||||
|
||||
time_inc_year_jmp
|
||||
jsr time_inc_year
|
||||
lda time_mon
|
||||
jsr time_adjust_mon
|
||||
rts
|
||||
|
||||
time_inc_hour
|
||||
lda time_h10
|
||||
cmp #$02
|
||||
bne time_inc_hour_normal
|
||||
lda time_h1
|
||||
inc
|
||||
cmp #$04
|
||||
bmi +
|
||||
stz time_h1
|
||||
stz time_h10
|
||||
rts
|
||||
+
|
||||
sta time_h1
|
||||
rts
|
||||
time_inc_hour_normal
|
||||
lda time_h1
|
||||
inc
|
||||
cmp #$0a
|
||||
bmi +
|
||||
stz time_h1
|
||||
inc time_h10
|
||||
rts
|
||||
+
|
||||
sta time_h1
|
||||
rts
|
||||
|
||||
time_inc_day
|
||||
lda time_mon
|
||||
dec
|
||||
asl
|
||||
xba
|
||||
lda #$00
|
||||
xba
|
||||
tax
|
||||
lda !time_month, x
|
||||
cmp time_d10
|
||||
bne time_inc_day_normal
|
||||
inx
|
||||
jsr is_leapyear_feb
|
||||
lda !time_month, x
|
||||
dec
|
||||
adc #$00
|
||||
cmp time_d1
|
||||
bpl +
|
||||
stz time_d1
|
||||
stz time_d10
|
||||
+
|
||||
inc time_d1
|
||||
rts
|
||||
time_inc_day_normal
|
||||
lda time_d1
|
||||
inc
|
||||
cmp #$0a
|
||||
bmi +
|
||||
stz time_d1
|
||||
inc time_d10
|
||||
rts
|
||||
+
|
||||
sta time_d1
|
||||
rts
|
||||
|
||||
time_inc_mon
|
||||
lda time_mon
|
||||
inc
|
||||
cmp #13
|
||||
bmi +
|
||||
lda #$01
|
||||
+
|
||||
jsr time_adjust_mon
|
||||
rts
|
||||
|
||||
time_adjust_mon
|
||||
sta time_mon
|
||||
dec
|
||||
asl
|
||||
xba
|
||||
lda #$00
|
||||
xba
|
||||
tax
|
||||
lda time_d10
|
||||
cmp !time_month, x
|
||||
bcs time_mon_adjust
|
||||
rts
|
||||
time_mon_adjust
|
||||
php
|
||||
inx
|
||||
lda !time_month, x
|
||||
pha
|
||||
jsr is_leapyear_feb ; c=1 -> a leapyear february
|
||||
pla
|
||||
adc #$00
|
||||
plp
|
||||
bne time_mon_doadjust
|
||||
cmp time_d1
|
||||
bcs +
|
||||
time_mon_doadjust
|
||||
sta time_d1
|
||||
dex
|
||||
lda !time_month, x
|
||||
sta time_d10
|
||||
+
|
||||
rts
|
||||
|
||||
time_inc_year
|
||||
lda time_y1
|
||||
inc
|
||||
cmp #$0a
|
||||
bmi time_inc_y1_normal
|
||||
stz time_y1
|
||||
lda time_y10
|
||||
inc
|
||||
cmp #$0a
|
||||
bmi time_inc_y10_normal
|
||||
stz time_y10
|
||||
inc time_y100
|
||||
rts
|
||||
time_inc_y10_normal
|
||||
sta time_y10
|
||||
rts
|
||||
time_inc_y1_normal
|
||||
sta time_y1
|
||||
rts
|
||||
|
||||
|
||||
time_key_down
|
||||
lda time_ptr
|
||||
cmp #4
|
||||
beq time_dec_hour_jmp
|
||||
cmp #6
|
||||
beq time_dec_day_jmp
|
||||
cmp #8
|
||||
beq time_dec_mon_jmp
|
||||
cmp #9
|
||||
beq time_dec_year_jmp
|
||||
xba
|
||||
lda #$00
|
||||
xba
|
||||
tax
|
||||
lda !time_s1, x
|
||||
dec
|
||||
cmp #$ff
|
||||
bne time_dec_minsec1_normal
|
||||
lda #$09
|
||||
sta !time_s1, x
|
||||
lda !time_s10, x
|
||||
dec
|
||||
cmp #$ff
|
||||
bne time_dec_minsec10_normal
|
||||
lda #$05
|
||||
sta !time_s10, x
|
||||
bra +
|
||||
time_dec_minsec10_normal
|
||||
sta !time_s10, x
|
||||
bra +
|
||||
time_dec_minsec1_normal
|
||||
sta !time_s1, x
|
||||
+
|
||||
rts
|
||||
|
||||
time_dec_hour_jmp
|
||||
jsr time_dec_hour
|
||||
rts
|
||||
|
||||
time_dec_day_jmp
|
||||
jsr time_dec_day
|
||||
rts
|
||||
|
||||
time_dec_mon_jmp
|
||||
jsr time_dec_mon
|
||||
rts
|
||||
|
||||
time_dec_year_jmp
|
||||
jsr time_dec_year
|
||||
lda time_mon
|
||||
jsr time_adjust_mon
|
||||
rts
|
||||
|
||||
time_dec_hour
|
||||
lda time_h1
|
||||
dec
|
||||
cmp #$ff
|
||||
bne time_dec_h1_normal
|
||||
lda time_h10
|
||||
bne time_dec_h10_normal
|
||||
lda #$02
|
||||
sta time_h10
|
||||
lda #$03
|
||||
sta time_h1
|
||||
rts
|
||||
time_dec_h10_normal
|
||||
lda #$09
|
||||
sta time_h1
|
||||
dec time_h10
|
||||
rts
|
||||
time_dec_h1_normal
|
||||
sta time_h1
|
||||
rts
|
||||
|
||||
time_dec_day
|
||||
lda time_d10
|
||||
beq +
|
||||
lda time_d1
|
||||
dec
|
||||
cmp #$ff
|
||||
bne time_dec_d1_normal
|
||||
bra time_dec_cont
|
||||
+ lda time_d1
|
||||
dec
|
||||
bne time_dec_d1_normal
|
||||
time_dec_cont
|
||||
lda time_d10
|
||||
bne time_dec_d10_normal
|
||||
lda time_mon
|
||||
dec
|
||||
asl
|
||||
ldx #$0000
|
||||
tax
|
||||
lda !time_month, x
|
||||
sta time_d10
|
||||
inx
|
||||
lda !time_month, x
|
||||
pha
|
||||
jsr is_leapyear_feb
|
||||
pla
|
||||
adc #$00
|
||||
sta time_d1
|
||||
rts
|
||||
time_dec_d10_normal
|
||||
lda #$09
|
||||
sta time_d1
|
||||
dec time_d10
|
||||
rts
|
||||
time_dec_d1_normal
|
||||
sta time_d1
|
||||
rts
|
||||
|
||||
time_dec_mon
|
||||
lda time_mon
|
||||
dec
|
||||
bne +
|
||||
lda #12
|
||||
+
|
||||
jsr time_adjust_mon
|
||||
rts
|
||||
|
||||
time_dec_year
|
||||
lda time_y1
|
||||
dec
|
||||
cmp #$ff
|
||||
bne time_dec_y1_normal
|
||||
lda #$09
|
||||
sta time_y1
|
||||
lda time_y10
|
||||
dec
|
||||
cmp #$ff
|
||||
bne time_dec_y10_normal
|
||||
lda #$09
|
||||
sta time_y10
|
||||
dec time_y100
|
||||
rts
|
||||
time_dec_y10_normal
|
||||
sta time_y10
|
||||
rts
|
||||
time_dec_y1_normal
|
||||
sta time_y1
|
||||
rts
|
||||
|
||||
rts
|
||||
|
||||
gettime
|
||||
lda #$0d
|
||||
sta $2801
|
||||
lda $2800
|
||||
lda $2800
|
||||
sta time_s1
|
||||
lda $2800
|
||||
sta time_s10
|
||||
lda $2800
|
||||
sta time_m1
|
||||
lda $2800
|
||||
sta time_m10
|
||||
lda $2800
|
||||
sta time_h1
|
||||
lda $2800
|
||||
sta time_h10
|
||||
lda $2800
|
||||
sta time_d1
|
||||
lda $2800
|
||||
sta time_d10
|
||||
lda $2800
|
||||
sta time_mon
|
||||
lda $2800
|
||||
sta time_y1
|
||||
lda $2800
|
||||
sta time_y10
|
||||
lda $2800
|
||||
sta time_y100
|
||||
rts
|
||||
|
||||
rendertime
|
||||
ldx #!stringbuf
|
||||
lda time_y100
|
||||
and #$0f
|
||||
cmp #$0a
|
||||
bpl y_skip1
|
||||
clc
|
||||
adc #$30
|
||||
sta !1,x
|
||||
lda #$31
|
||||
sta !0,x
|
||||
bra y_skip2
|
||||
y_skip1
|
||||
clc
|
||||
adc #$26
|
||||
sta !1,x
|
||||
lda #$32
|
||||
sta !0,x
|
||||
y_skip2
|
||||
inx
|
||||
inx
|
||||
lda time_y10
|
||||
and #$0f
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_y1
|
||||
and #$0f
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda #$2d
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_mon
|
||||
and #$0f
|
||||
cmp #$0a
|
||||
bpl mon_skip1
|
||||
clc
|
||||
adc #$30
|
||||
sta !1,x
|
||||
lda #$30
|
||||
sta !0,x
|
||||
bra mon_skip2
|
||||
mon_skip1
|
||||
clc
|
||||
adc #$26
|
||||
sta !1,x
|
||||
lda #$31
|
||||
sta !0,x
|
||||
mon_skip2
|
||||
inx
|
||||
inx
|
||||
lda #$2d
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_d10
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_d1
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda #$20
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_h10
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_h1
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda #$3a
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_m10
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_m1
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda #$3a
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_s10
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
inx
|
||||
lda time_s1
|
||||
clc
|
||||
adc #$30
|
||||
sta !0,x
|
||||
stz !1,x
|
||||
rts
|
||||
|
||||
is_leapyear_feb
|
||||
lda time_mon
|
||||
cmp #$02
|
||||
bne is_leapyear_feb_no
|
||||
lda time_y10
|
||||
asl
|
||||
sta time_tmp
|
||||
asl
|
||||
asl
|
||||
clc
|
||||
adc time_tmp
|
||||
clc
|
||||
adc time_y1
|
||||
sta time_tmp
|
||||
and #$03
|
||||
beq is_leapyear_4th ; every 4th year
|
||||
is_leapyear_feb_no
|
||||
clc
|
||||
rts
|
||||
|
||||
is_leapyear_4th ; leapyear candidate
|
||||
lda time_tmp ; year=00?
|
||||
beq + ; then check century
|
||||
sec ; else it's always a leapyear
|
||||
rts
|
||||
+
|
||||
lda time_y100 ; century divisible by 4?
|
||||
clc
|
||||
adc #10
|
||||
and #$03
|
||||
beq is_leapyear_400th
|
||||
clc
|
||||
rts
|
||||
|
||||
is_leapyear_400th
|
||||
sec
|
||||
rts
|
||||
|
||||
settime
|
||||
lda time_y100
|
||||
sta @AVR_PARAM
|
||||
lda time_y10
|
||||
sta @AVR_PARAM+1
|
||||
lda time_y1
|
||||
sta @AVR_PARAM+2
|
||||
lda time_mon
|
||||
sta @AVR_PARAM+3
|
||||
lda time_d10
|
||||
sta @AVR_PARAM+4
|
||||
lda time_d1
|
||||
sta @AVR_PARAM+5
|
||||
lda time_h10
|
||||
sta @AVR_PARAM+6
|
||||
lda time_h1
|
||||
sta @AVR_PARAM+7
|
||||
lda time_m10
|
||||
sta @AVR_PARAM+8
|
||||
lda time_m1
|
||||
sta @AVR_PARAM+9
|
||||
lda time_s10
|
||||
sta @AVR_PARAM+10
|
||||
lda time_s1
|
||||
sta @AVR_PARAM+11
|
||||
lda #$02 ; set clock
|
||||
sta @AVR_CMD
|
||||
rts
|
||||
|
||||
printtime:
|
||||
jsr gettime
|
||||
jsr rendertime
|
||||
lda listdisp
|
||||
clc
|
||||
adc #$0a
|
||||
clc
|
||||
adc vidmode
|
||||
sta print_y
|
||||
lda #$2b
|
||||
sta print_x
|
||||
lda #$40
|
||||
sta print_count
|
||||
lda #^stringbuf
|
||||
sta print_bank
|
||||
ldx #!stringbuf
|
||||
stx print_src
|
||||
stz print_pal
|
||||
jsr hiprint
|
||||
rts
|
||||
Reference in New Issue
Block a user