📄 alarm.asm
字号:
tax
lda THSecFuncTable+1,y
pha
phx
rts ; Jump to key process routine.
;[P]--------------------[P]
; 一秒钟事件处理程序 :
;[P]--------------------[P]
TSec: jmp ExitNoUpdate
;[P]--------------------[P]
; 一分钟事件处理程序 :
;[P]--------------------[P]
TMin: bbr0 <AlarmFlag0,TSec ; Skip if alarm menu.
lda ItemNo
dec
cmp #07h
beq tmin1 ; Skip if "AD2000" function.
cmp #04h
bne TSec ; Skip if not "WORLD TIME" function.
;--<< World time function >>--
jsr DisplayWTimeA ; Update world time function screen.
bra TSec
;--<< Multi-Alarm function >>--
tmin1: jsr CalAD2KCounter ; Calculate days between now and AD2000.
jsr DisplayAD2000 ; Update AD2000 function screen.
bra TSec
AlarmLoad:
TLoad:
lsetscreen 1
lda #<alarm_menu
sta StrAddrL
lda #>alarm_menu
sta StrAddrH
stz ItemStart
stz ItemOffset
stz MenuBufNO
TLoad_0:
AlarmLoad1:
ldx #20 ;#19+4
;ldx <Mode ; Ji Ang.
;ldx #Alarm_yiMode
stx <ModeSave ; Save last mode.
lda #MenuMode
sta <Mode ; Enter Menu Select Mode
smb7 <EFlag
stz <SchFlag ;02-4-6 9:16
stz MenuFlag ;02-4-6 9:16
jmp ExitNoUpdate
;[P]-----------------------[P]
; Key Down 事件处理程序 :
;[P]-----------------------[P]
;==================================
include Sched.asm
;==================================
TKeyDown:
lread_key_again
;bbr0 <CData,Firtkeydown ;menu.asm-->OtherFlag[0]
lda MenuFlag ;02-4-6 9:24
beq Firtkeydown ;02-4-6 9:24
stz MenuFlag ;02-4-6 9:25
stz <SchFlag
jmp EnterSub ;First Init
Firtkeydown:
LKeyTone
lda ItemNo
cmp #SchItemNo
bne Un_SchItem
jmp SchAllStateKeyDown
Un_SchItem:
;--<< Check key code and set y = process number >>--
tkeydown7:
lda #00100000b
bit AlarmFlag2
beq tkeydown8 ; Skip if not alarm tone.
lda #11011111b ; Reset multi-alarm go flag.
and AlarmFlag2
sta AlarmFlag2
stz ToneCounter ; Reset multi-alarm tone counter.
jmp ExitNoUpdate
tkeydown8:
ldy #0FFh ; Initial y.
tkeydown9:
iny
lda ActiveKeyTable,y
bmi NullProc ; Skip if invalid key number.
cmp <KeyNo
bne tkeydown9 ; Skip if not active keyin.
;--<< Alarm mode function >>--
tkeydownfunc:
lda ItemNo
dec
asl ; x = Process NO# * 2.
tax
lda KeyProcFuncTab,x ; Load key process routine table to INS.
sta <INSL
lda KeyProcFuncTab+1,x
sta <INSH
;yiadd 2-8-28 9:43
;cpy #7
cpy #9
bcc tkeydownfunc1 ; Skip if valid keyin.
bra NullProc
tkeydownfunc1:
tya ; y = Process NO# * 2.
asl
tay
lda (<INS),y ; Push process routine address to stack.
tax
iny
lda (<INS),y
pha
phx
rts ; Jump to key process routine.
;--<< Don't do anything >>--
NullProc:
jmp ExitNoUpdate
;[P]---------------------[P]
; Key Up 事件处理程序 :
;[P]---------------------[P]
TKeyUp:
;lda itemstart ; Load page register to a.
;clc
;adc itemoffset ; Process NO# = itemstart + itemoffset.
lda ItemNo
dec
cmp #1
bne tkeyup1 ; Skip if not schedule function.
bbs6 <AlarmFlag0,tkeyup3 ; Skip if pass secret code.
bra tkeyup2 ; Return to main program.
tkeyup1: ldx #00h ; Stop timer.
LSetTimer
rmb7 <AlarmFlag0 ; Reset to normal adjust.
tkeyup2:
jmp ExitNoUpdate
tkeyup3: bbs3 <AlarmFlag1,tkeyup1 ; Skip if schedule set screen.
bra tkeyup2 ; Return to main program.
;[P]--------------------[P]
; Timer 事件处理程序 :
;[P]--------------------[P]
TTimer:
lda ItemNo
dec
cmp #1
bne ttimer1 ; Skip if not schedule function.
jmp ExitNoUpdate
ttimer1:
ldx #40h ; Set timer = 7.8125mS x 20h = 250mS.(4Hz)
LSetTimer
jmp (FastReg) ; Jump to operate process routine again.
;[P]--------------------------[P]
; 进入此 Mode 事件处理程序 :
;[P]--------------------------[P]
;[P]-----------------------[P]
; Help 返回事件处理程序 :
;[P]-----------------------[P]
AlarmBack:
lda ItemNo
cmp #SchItemNo
bne alarmback1
;jmp InitScnSche1
lda HelpRtPrc+1
pha
lda HelpRtPrc
pha
rts
alarmback1: jmp EnterSub1 ; Reload alarm function.
;[P]-------------------------------------[P]
; Half-second function for multi-alarm.
;[P]-------------------------------------[P]
THSecMAlarm: bbr1 <AlarmFlag1,THSecHAlarm ; Skip if multi-alarm normal screen.
bbs7 <AlarmFlag0,THSecHalarm ; Skip if fast adjust.
jsr FlashMALM ; Flash multi-alarm's setting item.
THSecSchedule:
THSecHAlarm: jmp ExitNoUpdate ; Return to main program.
;[P]----------------------------------[P]
; Half-second function for calendar.
;[P]----------------------------------[P]
THSecCalendar:
;;bra THSecHAlarm
bbr0 <AlarmFlag1,THSecHAlarm ; Skip if calendar browse stop.
bbs7 <AlarmFlag0,thseccalendar1 ; Skip if fast adjust.
bbr0 <SysF,thseccalendar2 ; Skip if 0.5 second.
thseccalendar1: jsr DisplayDate ; Display calendar date on screen.
jmp THSecAD2K1 ; Return to main program without update screen.
thseccalendar2:
stz <ox
lda #16
sta <oy
ljprintimage nulldraw
lda #8
sta <ox
lda #16
sta <oy
ljprintimage nulldraw
lda #16
sta <ox
lda #16
sta <oy
ljprintimage nulldraw
lda #24
sta <ox
lda #16
sta <oy
ljprintimage nulldraw
lda #8
sta <ox
lda #32
sta <oy
ljprintimage nulldraw
lda #16
sta <ox
lda #32
sta <oy
ljprintimage nulldraw
jmp THSecHAlarm
;[P]------------------------------------[P]
; Half-second function for world time.
;[P]------------------------------------[P]
THSecWTime: lda #SpaceChar ; Blank ":" on TextBuffor.
sta TextBuffor+4ah ;;+2*16+11
bbr0 <SysF,THSecHAlarm00 ; Skip if 0.5 second.
lda #':' ; Display ":" on TextBuffor.
sta TextBuffor+4ah ;;+2*16+11
jmp THSecHAlarm
THSecHAlarm00:
jmp THSecHAlarm
;[P]------------------------------------[P]
; Half-second function for stop-watch.
;[P]------------------------------------[P]
THSecSWatch: ;jsr DisplaySWatch ; Update stop-watch's screen.
;bra THSecAD2K1
;[P]-------------------------------[P]
; Half-second function for timer.
;[P]-------------------------------[P]
THSecTimer: bbr4 <AlarmFlag1,thsectimer1 ; Skip if timer normal screen.
bbs7 <AlarmFlag0,thsectimer1 ; Skip if fast adjust.
jsr FlashTimer ; Flash timer setting item.
bra THSecAD2K1
thsectimer1: jsr DisplayTimer ; Update timer's screen.
bra THSecAD2K1
;[P]--------------------------------[P]
; Half-second function for AD2000.
;[P]--------------------------------[P]
THSecAD2K: bbr3 <AlarmFlag0,THSecAD2K1 ; Skip if AD2000 normal mode.
bbs7 <AlarmFlag0,THSecAD2K1 ; Skip if fast adjust.
jsr FlashAD2K ; Flash AD2000 setting item.
THSecAD2K1: jmp ExitNoUpdate ; Return to main menu without update screen.
;[S]-------------------------------[S]
; Flash multi-alarm setting item.
;[S]-------------------------------[S]
FlashMALM:
lda #01000000b
bit AlarmFlag2
bne flashmalm1
;Skip if setting MALMMinute.
bbs0 <SysF,flashmalm3 ; Skip if complete second.
lda #SpaceChar ; Blank MALMHour.
sta TextBuffor+42H+3 ;;2*16+5
sta TextBuffor+43H+3 ;;2*16+6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -