📄 kclkr08.ms
字号:
RCF
.stabn 569, LineInfo
ADD MX,0x01
.stabn 570, LineInfo
inc x
.stabn 571, LineInfo
ADC MX,0x00
.stabn 572, LineInfo
RST F,0b1011
.stabn 573, LineInfo
RET
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : toggle the half sec flag
; Desc : ToggleHalfSecFlag
; I/P : --
; O/P : --
; Destroy:
; Note :
;ToggleHalfSecFlag:
; ld x,AppFlags
; xor mx,HalfSecFlag
; fan mx,HalfSecFlag
; jp nz,xToggleHalfS
; or mx,SecClickFlag ; set flag if from 1->0
;xToggleHalfS:
; ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : check if up to 1 minute
; Desc : IncSecond
; I/P : --
; O/P : --
; Destroy:
; Note : c=0 if not up to 1 minute, c=1 if up to 1 minute
IncSecond:
.stabn 603, LineInfo
ld x,(0x10)
.stabn 604, LineInfo
calz IncByteD
.stabn 605, LineInfo
ld x,(0x10)
.stabn 606, LineInfo
calz IsEqu60
.stabn 607, LineInfo
ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : is che memory equ 60h
; Desc : IsEqu60
; I/P : --
; O/P : --
; Destroy:
; Note :
IsEqu60:
.stabn 619, LineInfo
cp mx,0x00
.stabn 620, LineInfo
jp z,IsEqu0
; rcf
; ret
; jp IsEqu2
.stabn 624, LineInfo
jp IsRight8
IsEqu0:
.stabn 626, LineInfo
inc x
.stabn 627, LineInfo
cp mx,0x06
.stabn 628, LineInfo
jp z,IsEqu1 ; jmp if 1 minute time out
IsRight8:
.stabn 630, LineInfo
rcf
.stabn 631, LineInfo
ret
IsEqu1:
.stabn 633, LineInfo
ld mx,0 ; clr the memory
IsEquE:
.stabn 635, LineInfo
scf
.stabn 636, LineInfo
ret
;
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : is che memory equ 24h
; Desc : IsEqu24
; I/P : --
; O/P : --
; Destroy:
; Note :
IsEqu24:
.stabn 649, LineInfo
cp mx,0x04
.stabn 650, LineInfo
jp z,IsEqu240
.stabn 651, LineInfo
jp IsRight8
IsEqu240:
.stabn 653, LineInfo
push xl
.stabn 654, LineInfo
inc x
.stabn 655, LineInfo
cp mx,0x02
.stabn 656, LineInfo
pop xl
.stabn 657, LineInfo
jp z,IsEqu241 ; jmp if 1 minute time out
.stabn 658, LineInfo
jp IsRight8
IsEqu241:
.stabn 660, LineInfo
ldpx mx,0
.stabn 661, LineInfo
ld mx,0
.stabn 662, LineInfo
jp IsEquE
FlashTimeFormat:
.stabn 665, LineInfo
ld x,(0x16)
.stabn 666, LineInfo
FAN mx,(1)
.stabn 667, LineInfo
Jp z,DspHourOff
;-------------------------------------
; Cate : display
; By : Hcy
; Func : display '24:H' or '12:H'
; Desc : DspTimeFormat
; I/P : --
; O/P : --
; Destroy:
; Note :
DspTimeFormat:
.stabn 678, LineInfo
ld x,(1)
.stabn 679, LineInfo
fan mx,(8)
.stabn 680, LineInfo
jp nz,DspTime0 ; jmp if 24 hour
.stabn 681, LineInfo
ld a,1
; remark for 60r08
; ld x,090h
.stabn 684, LineInfo
ld x,0x040
.stabn 685, LineInfo
calz DspPattern
.stabn 686, LineInfo
ld a,2
.stabn 687, LineInfo
calz DspPattern
.stabn 688, LineInfo
jp DspTime1
DspTime0:
.stabn 690, LineInfo
ld a,2
;; remark for 60r08
; ld x,090h
.stabn 693, LineInfo
ld x,0x040
.stabn 694, LineInfo
calz DspPattern
.stabn 695, LineInfo
ld a,4
.stabn 696, LineInfo
calz DspPattern
DspTime1:
.stabn 698, LineInfo
ld a,0
.stabn 699, LineInfo
calz DspPattern1 ; display 'H'
.stabn 700, LineInfo
ld a,7
.stabn 701, LineInfo
calz DspPattern1 ; display ' '
.stabn 702, LineInfo
jp DspColonOn
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : check if up to 1 hour
; Desc : IncMinute
; I/P : --
; O/P : --
; Destroy:
; Note : c=0 if not up to 1 minute, c=1 if up to 1 minute
IncMinute:
.stabn 713, LineInfo
ld x,(0x12)
.stabn 714, LineInfo
calz IncByteD
.stabn 715, LineInfo
ld x,(0x12)
.stabn 716, LineInfo
calz IsEqu60
.stabn 717, LineInfo
ret
;
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : check if up to 1 hour
; Desc : IncHour
; I/P : --
; O/P : --
; Destroy:
; Note : c=0 if not up to 24 hour, c=1 if up to 24 hour
IncHour:
.stabn 729, LineInfo
ld x,(0x14)
.stabn 730, LineInfo
calz IncByteD
.stabn 731, LineInfo
ld x,(0x14)
.stabn 732, LineInfo
calz IsEqu24
.stabn 733, LineInfo
ret
;
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : clear the byte
; Desc : ClrByte
; I/P : x(ram address)
; O/P : --
; Destroy:
; Note :
;ClrByte:
; ld a,0
; ld mx,a
; inc x
; ld mx,a
; ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : inc setting HOUR
; Desc : IncSetHour
; I/P : --
; O/P : --
; Destroy:
; Note :
;IncSetHour:
; ld x,TmpRTCHour
; calz IncByteD
; ld x,TmpRTCHour
; calz IsEqu24
; jp nc,IncSet0
; ld x,TmpRTCHour
; calz ClrByte
;IncSet0:
; ld y,TmpRTCHourL
; calz DspHour
; ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : inc setting minute
; Desc : IncSetMinute
; I/P : --
; O/P : --
; Destroy:
; Note :
;IncSetMinute:
; ld x,TmpRTCMinute
; calz IncByteD
; ld x,TmpRTCMinute
; calz IsEqu60
; ld y,TmpRTCMinuteL
; calz DspMinute
; ret
;-------------------------------------
; Cate : Common
; By : Hcy
; Func : copy 2-byte to other memory, (buffer1) --> (buffer2)
; Desc : Copy2Byte
; I/P : x(buffer 1 low address), y(buffer 2 low address)
; O/P :
; Destroy:
; Note :
;Copy2Byte:
; ld a,4
;Copy0:
; ld my,mx
; inc x
; inc y
; add a,0fh ; dec a
; jp nz,Copy0
; ret
;---------------------------------------
;---------------------------------------
; Communication Routine
;---------------------------------------
;---------------------------------------
;-------------------------------------
; Cate : communication
; By : Hcy
; Func : reload the communication variable
; Desc : ReloadCommVar
; I/P : --
; O/P : --
; Destroy:
; Note :
;ReloadCommVar:
; ld y,CommBufferL
; ld my,0 ; clr the communication buffer
; ld y,CommCount
; ld my,04h ; reload the communication bit counter
; ret
;-------------------------------------
; Cate : communication
; By : Hcy
; Func : store to the receive buffer
; Desc : ToRecBuffer
; I/P : --
; O/P : --
; Destroy:
; Note :
;ToRecBuffer:
; ld y,RxStartBufL
; ld x,RxNibbleCnt
; ld a,mx
;Prog1:
; ld YL,a
;Prog2:
; ld x,CommBufferL
; ld my,mx ; store receive data to receive buffer
; ret
;-------------------------------------
; Cate : communication
; By : Hcy
; Func : is che memory equ 1bh
; Desc : IsEquStartCode
; I/P : Y(start code address)
; O/P : --
; Destroy:
; Note : c=1 if not equal 1bh, c=0 if equal 1bh
;IsEquStartCode:
; ld y,RxStartBufL
; cp my,0Bh
; jp z,IsEquEE
;IsEquE:
; scf
; ret
;IsEquEE:
; rcf
; ret
;-------------------------------------
; Cate : communication
; By : Hcy
; Func : is receive command right ?
; Desc : IsRightCmd
; I/P : --
; O/P : --
; Destroy:
; Note : c=1 if undefined command, c=0 if defined command
;IsRightCmd:
; ld x,RxCommand
; cp mx,SHOWLDIGITCMD
; jp nz,IsRight0
; ; show Ldigit command
; ld x,SumNumRxNibble
; ld mx,0ch
; jp IsRight8
;IsRight0:
; cp mx,SHOWSDIGITCMD
; jp nz,IsRight1
; ; show Sdigit command
; ld x,SumNumRxNibble
; ld mx,1
;IsRight8:
; rcf
; ret
;IsRight1:
; cp mx,SHOWICONCMD
; jp nz,IsRight2
; ; show icon command
; ld x,SumNumRxNibble
; ld mx,4
; ld x,RxNibbleCnt
; ld mx,0ch ;
; jp IsRight8
;IsRight2:
; cp mx,SHOWMSGCMD
; jp nz,IsEquE
; ; show msg command
; jp IsRight8
;;-------------------------------------
; Cate : Display
; By : Kwan
; Func : Clear the LCD ram including digits/icons
; Desc :
; I/P :
; O/P :
; Destroy:
; Note :
;LCDClr:
; LD x,90h
;LCDClr0:
; ldpx mx,0
; cp xh,0bh ; LCD ram from 90 to AFH
; jp nz, LCDClr0
; ret
;
;;-------------------------------------
; Cate : KeyBoard
; By : Kwan
; Func : Key board scan, set NewKey flag if new key found
; set keyhold flag if the new key is still in-held
; Desc :
; I/P :
; O/P :
; Destroy:
; Note : After calling subr, the newkey flag should be
; checked.
; For MaB key, the Keyholdkey should be cleared before
; activating the corresponding function
; For MbB key, no need to check the KeyHoldFlag before
; activating the corr. function
; For MaH, the hold time must be checked to be 255 before
; activating the corr. function.
;
KeyScan:
.stabn 947, LineInfo
ld b,(0b0111)
.stabn 948, LineInfo
ld x,(0x2E3)
.stabn 949, LineInfo
fan mx,(1)
.stabn 950, LineInfo
jp nz,KeyFound ; br if Key_on is preseed (=1)
.stabn 952, LineInfo
ld b,(0b1110)
.stabn 953, LineInfo
fan mx,(2)
.stabn 954, LineInfo
jp nz,KeyFound ; br if Key_off is preseed
;
.stabn 956, LineInfo
ld b,(0b1101)
.stabn 957, LineInfo
ld x,(0x2ED)
.stabn 958, LineInfo
fan mx,(1)
.stabn 959, LineInfo
jp nz,KeyFound ; br if Key_Kg is preseed
;
.stabn 961, LineInfo
ld b,(0b1011)
.stabn 962, LineInfo
fan mx,(2)
.stabn 963, LineInfo
jp nz,KeyFound ; br if Key_ml is preseed
;
.stabn 965, LineInfo
LD X,(1)
.stabn 966, LineInfo
AND MX, 0x0f-(1)
NotNewKey:
.stabn 968, LineInfo
RZF ; return with Z=0
.stabn 969, LineInfo
RET
KeyFound:
.stabn 971, LineInfo
LD X,(1)
.stabn 972, LineInfo
FAN MX,(1)
.stabn 973, LineInfo
JP nz,NotNewKey ; br if not new Key
.stabn 974, LineInfo
OR MX,(2)+(1) ; set key flag
.stabn 975, LineInfo
LD (M3),B
.stabn 976, LineInfo
SZF ; return with Z-1 if new key MbB
.stabn 977, LineInfo
RET
;===============================================
; Reset vectors are located at page 1
.org 0x100
.stabn 982, LineInfo
JP Init ; reset vector
.stabn 983, LineInfo
JP IntRTC ; clock interrupt -- may only be used to set flag
;
.org 0x104
.stabn 986, LineInfo
JP IntKPort ; Key port interrupt
; JP IntRTC_KPort ; timer and key port interrupt both
;
; All reset, clock and Key port interrupt should be located in 100H page
.org 0x110
;-------------------------------------
; Cate : System
; By : Hcy
; Func : check the interrupt timer 1/8 sec and 1/2 sec
; Desc : ChkTimer
; I/P : --
; O/P : --
; Destroy:
; Note :
ChkTimer:
.stabn 1002, LineInfo
ld x,(0x2E9)
.stabn 1003, LineInfo
ld a,mx ; read and clear any interrupt request flags
.stabn 1004, LineInfo
fan a,0b0010 ; chk 1/8 sec
.stabn 1005, LineInfo
jp z,TimeSet00
.stabn 1006, LineInfo
inc (M0) ; inc the keyhold time
.stabn 1007, LineInfo
calz KeyScan
TimeSet00:
.stabn 1009, LineInfo
fan a,0b0100 ; chk 1/2 sec
.stabn 1010, LineInfo
jp z,TimeSet01
.stabn 1011, LineInfo
call ToggleHalfSecFlag
.stabn 1012, LineInfo
ld x,(0x16)
.stabn 1013, LineInfo
fan mx,(2)
TimeSet01:
.stabn 1015, LineInfo
jp z,TimeS0 ; br if just 0.5 sec
;
.stabn 1017, LineInfo
and mx,0x0f-(2) ; clear the bit
; update the clock per 1 min
;
.stabn 1020, LineInfo
calz IncSecond
.stabn 1021, LineInfo
jp nc,TimeS0 ; No display update if change in second only
.stabn 1022, LineInfo
calz IncMinute
.stabn 1023, LineInfo
jp nc,TimeS0
.stabn 1024, LineInfo
calz IncHour
TimeS0:
.stabn 1026, LineInfo
ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : toggle the half sec flag
; Desc : ToggleHalfSecFlag
; I/P : --
; O/P : --
; Destroy:
; Note :
ToggleHalfSecFlag:
.stabn 1038, LineInfo
ld x,(0x16)
.stabn 1039, LineInfo
xor mx,(1)
.stabn 1040, LineInfo
fan mx,(1)
.stabn 1041, LineInfo
jp nz,xToggleHalfS
.stabn 1042, LineInfo
or mx,(2) ; set flag if from 1->0
xToggleHalfS:
.stabn 1044, LineInfo
ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : inc setting HOUR
; Desc : IncSetHour
; I/P : --
; O/P : --
; Destroy:
; Note :
IncSetHour:
.stabn 1056, LineInfo
ld x,(0x1A)
.stabn 1057, LineInfo
calz IncByteD
.stabn 1058, LineInfo
ld x,(0x1A)
.stabn 1059, LineInfo
calz IsEqu24
.stabn 1060, LineInfo
jp nc,IncSet0
.stabn 1061, LineInfo
ld x,(0x1A)
.stabn 1062, LineInfo
call ClrByte
IncSet0:
.stabn 1064, LineInfo
ld y,(0x1a)
.stabn 1065, LineInfo
calz DspHour
.stabn 1066, LineInfo
ret
;-------------------------------------
; Cate : Common
; By : Hcy
; Func : copy 2-byte to other memory, (buffer1) --> (buffer2)
; Desc : Copy2Byte
; I/P : x(buffer 1 low address), y(buffer 2 low address)
; O/P :
; Destroy:
; Note :
Copy2Byte:
.stabn 1078, LineInfo
ld a,4
Copy0:
.stabn 1080, LineInfo
ld my,mx
.stabn 1081, LineInfo
inc x
.stabn 1082, LineInfo
inc y
.stabn 1083, LineInfo
add a,0x0f ; dec a
.stabn 1084, LineInfo
jp nz,Copy0
.stabn 1085, LineInfo
ret
;-------------------------------------
; Cate : communication
; By : Hcy
; Func : reload the communication variable
; Desc : ReloadCommVar
; I/P : --
; O/P : --
; Destroy:
; Note :
ReloadCommVar:
.stabn 1097, LineInfo
ld y,(0x1c)
.stabn 1098, LineInfo
ld my,0 ; clr the communication buffer
.stabn 1099, LineInfo
ld y,(0x17)
.stabn 1100, LineInfo
ld my,0x04 ; reload the communication bit counter
.stabn 1101, LineInfo
ret
;-------------------------------------
; Cate : communication
; By : Hcy
; Func : store to the receive buffer
; Desc : ToRecBuffer
; I/P : --
; O/P : --
; Destroy:
; Note :
ToRecBuffer:
.stabn 1112, LineInfo
ld y,(0x20)
.stabn 1113, LineInfo
ld x,(0x1d)
.stabn 1114, LineInfo
ld a,mx
Prog1:
.stabn 1116, LineInfo
ld YL,a
Prog2:
.stabn 1118, LineInfo
ld x,(0x1c)
.stabn 1119, LineInfo
ld my,mx ; store receive data to receive buffer
.stabn 1120, LineInfo
ret
;;-------------------------------------
; Cate : Display
; By : Kwan
; Func : Clear the LCD ram including digits/icons
; Desc :
; I/P :
; O/P :
; Destroy:
; Note :
LCDClr:
.stabn 1131, LineInfo
LD x,0x90
LCDClr0:
.stabn 1133, LineInfo
ldpx mx,0
.stabn 1134, LineInfo
cp xh,0x0b ; LCD ram from 90 to AFH
.stabn 1135, LineInfo
jp nz, LCDClr0
.stabn 1136, LineInfo
ret
;-------------------------------------
; Cate : Clock
; By : Hcy
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -