📄 kclock.ms
字号:
;
.org 0x104
.stabn 974, 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 990, LineInfo
ld x,(0x0EF)
.stabn 991, LineInfo
ld a,mx ; read and clear any interrupt request flags
.stabn 992, LineInfo
fan a,0b0010 ; chk 1/8 sec
.stabn 993, LineInfo
jp z,TimeSet00
.stabn 994, LineInfo
inc (M0) ; inc the keyhold time
.stabn 995, LineInfo
call KeyScan
TimeSet00:
.stabn 997, LineInfo
fan a,0b0100 ; chk 1/2 sec
.stabn 998, LineInfo
jp z,TimeSet01
.stabn 999, LineInfo
call ToggleHalfSecFlag
.stabn 1000, LineInfo
ld x,(0x16)
.stabn 1001, LineInfo
fan mx,(2)
TimeSet01:
.stabn 1003, LineInfo
jp z,TimeS0 ; br if just 0.5 sec
;
.stabn 1005, LineInfo
and mx,0x0f-(2) ; clear the bit
; update the clock per 1 min
;
.stabn 1008, LineInfo
calz IncSecond
.stabn 1009, LineInfo
jp nc,TimeS0 ; No display update if change in second only
.stabn 1010, LineInfo
calz IncMinute
.stabn 1011, LineInfo
jp nc,TimeS0
.stabn 1012, LineInfo
calz IncHour
TimeS0:
.stabn 1014, LineInfo
ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : toggle the half sec flag
; Desc : ToggleHalfSecFlag
; I/P : --
; O/P : --
; Destroy:
; Note :
ToggleHalfSecFlag:
.stabn 1026, LineInfo
ld x,(0x16)
.stabn 1027, LineInfo
xor mx,(1)
.stabn 1028, LineInfo
fan mx,(1)
.stabn 1029, LineInfo
jp nz,xToggleHalfS
.stabn 1030, LineInfo
or mx,(2) ; set flag if from 1->0
xToggleHalfS:
.stabn 1032, LineInfo
ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : inc setting HOUR
; Desc : IncSetHour
; I/P : --
; O/P : --
; Destroy:
; Note :
IncSetHour:
.stabn 1044, LineInfo
ld x,(0x1A)
.stabn 1045, LineInfo
calz IncByteD
.stabn 1046, LineInfo
ld x,(0x1A)
.stabn 1047, LineInfo
calz IsEqu24
.stabn 1048, LineInfo
jp nc,IncSet0
.stabn 1049, LineInfo
ld x,(0x1A)
.stabn 1050, LineInfo
call ClrByte
IncSet0:
.stabn 1052, LineInfo
ld y,(0x1a)
.stabn 1053, LineInfo
calz DspHour
.stabn 1054, 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 1066, LineInfo
ld a,4
Copy0:
.stabn 1068, LineInfo
ld my,mx
.stabn 1069, LineInfo
inc x
.stabn 1070, LineInfo
inc y
.stabn 1071, LineInfo
add a,0x0f ; dec a
.stabn 1072, LineInfo
jp nz,Copy0
.stabn 1073, LineInfo
ret
;-------------------------------------
; Cate : communication
; By : Hcy
; Func : reload the communication variable
; Desc : ReloadCommVar
; I/P : --
; O/P : --
; Destroy:
; Note :
ReloadCommVar:
.stabn 1085, LineInfo
ld y,(0x1c)
.stabn 1086, LineInfo
ld my,0 ; clr the communication buffer
.stabn 1087, LineInfo
ld y,(0x17)
.stabn 1088, LineInfo
ld my,0x04 ; reload the communication bit counter
.stabn 1089, LineInfo
ret
;-------------------------------------
; Cate : communication
; By : Hcy
; Func : store to the receive buffer
; Desc : ToRecBuffer
; I/P : --
; O/P : --
; Destroy:
; Note :
ToRecBuffer:
.stabn 1100, LineInfo
ld y,(0x20)
.stabn 1101, LineInfo
ld x,(0x1d)
.stabn 1102, LineInfo
ld a,mx
Prog1:
.stabn 1104, LineInfo
ld YL,a
Prog2:
.stabn 1106, LineInfo
ld x,(0x1c)
.stabn 1107, LineInfo
ld my,mx ; store receive data to receive buffer
.stabn 1108, LineInfo
ret
;;-------------------------------------
; Cate : Display
; By : Kwan
; Func : Clear the LCD ram including digits/icons
; Desc :
; I/P :
; O/P :
; Destroy:
; Note :
LCDClr:
.stabn 1119, LineInfo
LD x,0x90
LCDClr0:
.stabn 1121, LineInfo
ldpx mx,0
.stabn 1122, LineInfo
cp xh,0x0b ; LCD ram from 90 to AFH
.stabn 1123, LineInfo
jp nz, LCDClr0
.stabn 1124, LineInfo
ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : inc setting minute
; Desc : IncSetMinute
; I/P : --
; O/P : --
; Destroy:
; Note :
IncSetMinute:
.stabn 1136, LineInfo
ld x,(0x18)
.stabn 1137, LineInfo
calz IncByteD
.stabn 1138, LineInfo
ld x,(0x18)
.stabn 1139, LineInfo
calz IsEqu60
.stabn 1140, LineInfo
ld y,(0x18)
.stabn 1141, LineInfo
calz DspMinute
.stabn 1142, LineInfo
ret
;-------------------------------------
; Cate : Application
; By : Hcy
; Func :
; Desc : CopyByte
; I/P : y(ram address)
; O/P :
; Destroy:
; Note :
CopyByte:
.stabn 1154, LineInfo
ld x,(0x34)
.stabn 1155, LineInfo
ld mx,my
.stabn 1156, LineInfo
inc y
.stabn 1157, LineInfo
inc x
.stabn 1158, LineInfo
ld mx,my ; ram --> dsphourbuf
.stabn 1159, LineInfo
ret
;-------------------------------------
; Cate : Application
; By : Hcy
; Func : -0ch by decimal
; Desc : Sub12D
; I/P : y(address of buffer)
; O/P :
; Destroy:
; Note :
Sub12D:
.stabn 1170, LineInfo
push yl
.stabn 1171, LineInfo
call CopyByte
.stabn 1172, LineInfo
pop yl
.stabn 1173, LineInfo
ld x,(0x34)
.stabn 1174, LineInfo
SET F,0b0100
.stabn 1175, LineInfo
RCF
.stabn 1176, LineInfo
sbc Mx,0x02
.stabn 1177, LineInfo
inc x
.stabn 1178, LineInfo
sbc Mx,0x01
.stabn 1179, LineInfo
RST F,0b1011
.stabn 1180, LineInfo
RET
;
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : is che memory equ 12h
; Desc : IsEqu24
; I/P : --
; O/P : --
; Destroy:
; Note :
IsEqu12:
.stabn 1193, LineInfo
cp my,0x02
.stabn 1194, LineInfo
jp z,IsEqu120
.stabn 1195, LineInfo
rcf
.stabn 1196, LineInfo
ret
IsEqu120:
.stabn 1199, LineInfo
push yl
.stabn 1200, LineInfo
inc y
.stabn 1201, LineInfo
cp my,0x01
.stabn 1202, LineInfo
pop yl
.stabn 1203, LineInfo
jp z,IsEqu121 ; jmp if 1 minute time out
.stabn 1204, LineInfo
rcf
.stabn 1205, LineInfo
ret
IsEqu121:
.stabn 1207, LineInfo
call CopyByte
.stabn 1208, LineInfo
scf
.stabn 1209, LineInfo
ret
;
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : is che memory equ 0
; Desc : IsEqu24
; I/P : --
; O/P : --
; Destroy:
; Note :
IsEquZero:
.stabn 1222, LineInfo
cp my,0
.stabn 1223, LineInfo
jp z,IsEqu00
.stabn 1224, LineInfo
rcf
.stabn 1225, LineInfo
ret
IsEqu00:
.stabn 1228, LineInfo
push yl
.stabn 1229, LineInfo
inc y
.stabn 1230, LineInfo
cp my,0
.stabn 1231, LineInfo
pop yl
.stabn 1232, LineInfo
jp z,IsEqu01 ; jmp if 1 minute time out
.stabn 1233, LineInfo
rcf
.stabn 1234, LineInfo
ret
IsEqu01:
.stabn 1236, LineInfo
ld x,(0x34)
.stabn 1237, LineInfo
ld a,0x02
.stabn 1238, LineInfo
ld mx,a
.stabn 1239, LineInfo
inc x
.stabn 1240, LineInfo
ld a,0x01
.stabn 1241, LineInfo
ld mx,a
.stabn 1242, LineInfo
scf
.stabn 1243, LineInfo
ret
;-------------------------------------
; Cate : Display
; By : Hcy
; Func : display the icons from the samsung
; Desc : DspIcons
; I/P : --
; O/P : --
; Destroy:
; Note :
DspIcons:
.stabn 1255, LineInfo
ld y,(0x29)
.stabn 1256, LineInfo
ld x,0x09c
.stabn 1257, LineInfo
ld b,4
DspI0:
.stabn 1259, LineInfo
ld mx,my
.stabn 1260, LineInfo
inc y
.stabn 1261, LineInfo
inc x
.stabn 1262, LineInfo
ADD b,0x0F ; b-1
.stabn 1263, LineInfo
jp nz,DspI0
; add by hcy 03-11-24 12:02
.stabn 1265, LineInfo
ld y,(0x2a)
.stabn 1266, LineInfo
fan my,0b0010
.stabn 1267, LineInfo
jp nz,DspI1
; ld y,0a0h
; and my,1110b
.stabn 1271, LineInfo
calz DspColonOff
.stabn 1272, LineInfo
ret
DspI1:
; ld y,0a0h
; or my,01h ; display ':'
.stabn 1276, LineInfo
calz DspColonOn
.stabn 1277, LineInfo
ret
;
SendKeyData:
.stabn 1282, LineInfo
ld x,(0x0E0)
.stabn 1283, LineInfo
fan mx,0b0100
.stabn 1284, LineInfo
jp nz,Send0 ; BR IF D_CLK is high
SendCalKey:
.stabn 1286, LineInfo
LD X,(0x0F3)
; LD MX,0001b ; D_out low
.stabn 1288, LineInfo
and mx,0b0001 ; D_out low
.stabn 1290, LineInfo
CALL SendKey
.stabn 1291, LineInfo
LD X,(0x16)
.stabn 1292, LineInfo
AND MX,0x0f-(4) ; clear the flag after sending
.stabn 1293, LineInfo
ld x,(0x17)
.stabn 1294, LineInfo
ld mx,4
Send0:
.stabn 1296, LineInfo
RET
;
;-------------------------------------
; Cate : delay
; By : Hcy
; Func : delay 2.5s
; Desc : Dly250
; I/P : --
; O/P : --
; Destroy:
; Note :
Dly125:
.stabn 1308, LineInfo
ld y,0x0ef
Dly250:
.stabn 1310, LineInfo
ld y,0x0d8
Dly1:
.stabn 1312, LineInfo
call Dly125ms
.stabn 1313, LineInfo
inc y
.stabn 1314, LineInfo
cp yh,0x0f
.stabn 1315, LineInfo
jp nz,Dly1
.stabn 1316, LineInfo
ret
;-------------------------------------
; Cate : Delay
; By : Hcy
; Func : delay 125ms
; Desc : Dly125ms
; I/P : --
; O/P : --
; Destroy:
; Note :
;
Dly125ms:
.stabn 1329, LineInfo
ld x,0
Dlym0:
.stabn 1331, LineInfo
inc x
.stabn 1332, LineInfo
cp xh,0x0f
.stabn 1333, LineInfo
jp nz,Dlym0
.stabn 1334, LineInfo
ret
;-------------------------------------
; Cate : Clock
; By : Hcy
; Func : clear the byte
; Desc : ClrByte
; I/P : x(ram address)
; O/P : --
; Destroy:
; Note :
ClrByte:
.stabn 1345, LineInfo
ld a,0
.stabn 1346, LineInfo
ld mx,a
.stabn 1347, LineInfo
inc x
.stabn 1348, LineInfo
ld mx,a
.stabn 1349, LineInfo
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 0bh, c=0 if equal 1bh
IsEquStartCode:
.stabn 1361, LineInfo
ld y,(0x20)
.stabn 1362, LineInfo
cp my,0x0B
.stabn 1363, LineInfo
jp z,IsEquEE
.stabn 1364, LineInfo
scf
.stabn 1365, LineInfo
ret
IsEquEE:
.stabn 1367, LineInfo
rcf
.stabn 1368, LineInfo
ret
Init:
.stabn 1371, LineInfo
DI ; reset interrupt mask
.stabn 1372, LineInfo
RST F,0b0011
; LD A,0
; LD xp,a ; reset XP
; LD YP,A
.stabn 1377, LineInfo
LD A,0x0f ; define SP
.stabn 1378, LineInfo
LD B,0x04
.stabn 1379, LineInfo
LD SPL,A
.stabn 1380, LineInfo
LD SPH,B
;
.stabn 1382, LineInfo
NOP5
.stabn 1383, LineInfo
NOP5
;
; Cold start from here
;
.stabn 1387, LineInfo
call LCDClr
; LD x,90h
;LCDClr0:
; ldpx mx,0
; cp xh,0bh ; LCD ram from 90 to AFH
; jp nz, LCDClr0
;
; Check the warm start words if necessary
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -