📄 ct0bu05.src
字号:
JPS LOD_RET
;LOD_UID3: REF PUSHSB
; PUSH EA
; REF SEL_0
; LD EA,UID3_H ; BSC0,1,2,3 <-- UID3
; LD TID_H,EA
; REF SEL_15
; LD BSC2,EA
; REF SEL_0
; LD EA,UID3_L
; LD TID_L,EA
; REF SEL_15
; LD BSC0,EA
; JPS LOD_RET
;POP EA
;REF POPSB
;RET
LOD_A5A5: REF PUSHSB ; USED IN ANSWERING REGISTRATION REQUEST
PUSH EA
REF SEL_0
LD EA,#0A5H ; BSC0,1,2,3 <-- A5A5h
LD TID_H,EA
LD TID_L,EA
REF SEL_15
LD BSC2,EA
LD BSC0,EA
; POP EA
; REF POPSB
; RET
LOD_RET:
REF SEL_0
LD EA,TID_H
LD TBUF_H,EA
LD EA,TID_L
LD TBUF_L,EA
POP EA
REF POPSB
RET
; <<< MARCO 001018 ASSUEM ALL UID1 >>>
CMP_UID1: ;LD HL,#RXDBUF+2 ; IF RXDBUF=UID1, LOAD UID1 AS TID
;LD EA,UID1_L
;CPSE EA,@HL
;RET
;LD HL,#RXDBUF+4
;LD EA,UID1_H
;CPSE EA,@HL
;RET
CALLS LOD_UID1 ; SEND FROM HANDSET 1
SRET
;CMP_UID2: LD HL,#RXDBUF+2 ; IF RXDBUF=UID2, LOAD UID2 AS TID
; LD EA,UID2_L
; CPSE EA,@HL
; RET
; LD HL,#RXDBUF+4
; LD EA,UID2_H
; CPSE EA,@HL
; RET
; CALLS LOD_UID2 ; SEND FROM HANDSET 2
; SRET
;
;CMP_UID3: LD HL,#RXDBUF+2 ; IF RXDBUF=UID3, LOAD UID3 AS TID
; LD EA,UID3_L
; CPSE EA,@HL
; RET
; LD HL,#RXDBUF+4
; LD EA,UID3_H
; CPSE EA,@HL
; RET
; CALLS LOD_UID3 ; SEND FROM HANDSET 3
; SRET
; WAIT UNTIL TRANSMISSION OVER ================================================
; WAITXOVR: LOCAL WAIT UNTIL DATA PACKET TRANSMISSION IS FINISHED, TMRSDEC IS
; CALLED SO THAT SYSTEM TIME IS KEPT RUNNING DURING WAIT PERIOD.
; INPUT : NONE
; OUTPUT: F_ENDTX=1
; NO REGISTER IS CHANGED AT RETURN
WAITXOVR: REF TIMRDEC ; KEEP SYSTEM TIME RUNNING
BTST F_ENDTX ; CHECK IF TRANSMISSION OVER
JR WAITXOVR
RET
; KEY PRESS DETECTION =========================================================
; KEY_SCAN: KEY MATRIX SCAN ROUTINE, KEY PRESS DEBOUNCE IS DONE, KEY RELEASE DEBOUNCE IS
; DONE IN TMRSDEC ROUTINE. WHEN A VALID KEY IS DETECTED, KEYCODE IS SAVED AT
; KEYCODE LOCATION AND RETURN SKIP TO MAIN PROGRAM. OTHERWISE, RETURN.
; e.g.
; CALL KEY_SCAN
; JPS NO_KEY_PRESS
; PROCESS PAGE KEY EVENT
; :
; INPUT : NONE
; OUTPUT: KSEQ
; A WILL BE CHANGED AT RETURN
KEY_SCAN: BTST F_WAITFLAG
JR KSCN3
LD EA,T_LKCNT ; CHECK IF KEY IS PRESSED FOR 2sec
REF DECSEA
JR KSCN11
JR KSCN12
KSCN11: CALLS READ_KIN
CPSE A,#1111B
RET
KSCN12: BITR F_WAITFLAG
SRET ; RETURN SKIP IF KEY IS DETECTED
KSCN3: LD A,KSEQ
DECS A ; CHECK IF KSEQ = 0
RET ; RETURN IF KSEQ <> 0
BTST F_KYSN ; ENTRY @6ms INTERVAL
RET
BITR F_KYSN
CALLS READ_KIN
CPSE A,#1111B
JR KSCN4
RET ; RETURN IF NO KEY DOWN
KSCN4: ;BTST F_KEYEN
; RET ; IGNORE IF KEY SCAN DISABLED
LD A,#KEYDEB ; START KEY DEBOUNCING
LD KSEQ,A
BITS F_WAITFLAG
LD EA,#50 ; LOAD 5sec KEY PRESS TIMER
LD T_LKCNT,EA
RET
; INPUT : NONE
; OUTPUT: A=1,1,1,KEYIN
READ_KIN: LD A,#1111B
BTST KEYIN
AND A,#1110B
RET
; SPECIAL KEY SCAN USED IN TEST MODE ONLY
TKEY_SCAN: LD A,KSEQ
DECS A ; CHECK IF KSEQ = 0
RET ; RETURN IF KSEQ <> 0
BTST F_KYSN ; ENTRY @6ms INTERVAL
RET
BITR F_KYSN
CALLS READ_KIN
CPSE A,#1111B
JR TKSCN4
RET ; RETURN IF NO KEY DOWN
TKSCN4: LD A,#KEYDEB ; START KEY DEBOUNCING
LD KSEQ,A
SRET
; DO DIALLING IF DIGIT(S) QUEUEING IN DIAL BUFFER =============================
; INPUT : NONE
; OUTPUT: F_TONEEXC,F_PULSEXC,T_IDIGPAU,T_PAUDIG,END_DPTR,F_FLASHING,F_TONMODE,
; T_MAKCNT,
; EA,HL WILL BE CHANGED AT RETURN
CHK_DIAL: BTSF F_TONEEXC
RET ; QUIT IF IN DIALLING TONE
BTSF F_PULSEXC
RET ; QUIT IF IN DIALLING PULSE
LD EA,T_IDIGPAU
REF DECSEA
RET ; QUIT IF IN INTERDIGIT-PAUSE TIME
LD EA,T_PAUDIG
REF DECSEA
RET ; QUIT IF IN PAUSE TIME
LD EA,END_DPTR
REF DECSEA
JR CKDIAL1
BTST F_HOLDNOW
BITR DTOUT ; DTMF OUTPUT COMPLETED
RET ; QUIT IF NO DIGIT TO DIAL
CKDIAL1: LD EA,END_DPTR
REF DECSEA ; END_DPTR --
LD END_DPTR,EA
PUSH WX
REF PUSHSB
REF SEL_1
LD A,DIAL_BUF
XCH A,E ; E=CURRENT DIGIT
LD WX,#BUFLEN-2
LD HL,#DIAL_BUF+1
CKDIAL2: LD A,@HL ; LEFT SHIFT DIAL BUFFER BY 1 NIBBLE
DECS HL
LD @HL,A
INCS HL
INCS HL
DECS WX
JR CKDIAL2
LD A,#0FH
DECS HL
LD @HL,A ; KEEP THE LAST DIGIT IN BUFFER BE 0Fh
XCH A,E ; A=CURRENT DIGIT
REF POPSB
POP WX
CPSE A,#PAUSE ; CHECK IF PAUSE KEY
JR CKDIAL8
LD EA,#PAUSETM
LD T_PAUDIG,EA ; LOAD PAUSE TIME
RET
CKDIAL8: CPSE A,#FLASH ; CHECK IF FLASH COMMAND
JR CKDIAL4
BITS F_FLASHING ; SET FLASH FLAG
RET
CKDIAL4: CPSE A,#TONE ; CHECK IF TONE COMMAND
JR CKDIAL9
JPS CKDIALA ; CHANGE TO TONE MODE UNCONDITIONALLY
CKDIAL9: LD E,A
ADS A,#4 ; CHECK IF A <= Bh
JR CKDIAL5
RET ; INVALID DIGIT, SKIP IT !!!
CKDIAL5: BTSF F_TONMODE ; 1=TONE, 0=PULSE
JPS CKDIAL3
XCH A,E
CPSE A,#KEYHASH ; CHECK IF # KEY
JR CKDIAL6
RET ; IGNORE BECAUSE IN PULSE MODE
CKDIAL6: CPSE A,#KEYSTAR ; CHECK IF * KEY
JR CKDIAL7
CKDIALA: BITS F_TONMODE ; CHANGE TO TONE MODE ONWARD
RET ; AND IGNORE THIS * DIGIT
CKDIAL7: LD E,#0H ; CALCULATE NUMPLUSE VALUE
LD HL,#0EH
XCH EA,HL
SBS EA,HL
NOP
LD NUMPULSE,A
REF ZERO2EA
LD T_MAKCNT,EA
BITS F_PULSEXC ; SET PULSE BURSTING FLAG
RET
CKDIAL3: INCS E ; E=1,2,3,...C (DTMF CODE)
XCH A,E
CKDIAL3A:
LD CURR_DTMF,A ; SAVE DTMF CODE TO CURR_DTMF
REF ZERO2EA
LD T_MAKCNT,EA
BTSF DTOUT ; CHECK IF NOT YET IN MUTE STATUS
JR CKDIALB
BITS DTOUT ; START SELECT DTMF OUTPUT
LD EA,#0FFH
LD T_MAKCNT,EA ; T_MAKCNT MUST BE > T_IDIGPAU
LD EA,#PRETNTM ; LOAD PRE-DTMF MUTE
CKDIALB: LD T_IDIGPAU,EA
BITS F_TONEEXC ; SET DTMF BURSTING FLAG
RET
; HOLD TONE GENERATION ROUTINE ================================================
; INPUT : F_HOLDNOW,F_HTONEON,F_HTNSTAGE,T_IDIGPAU
; OUTPUT: F_HTONEON,F_HTNSTAGE,T_IDIGPAU
;
; (1) F_HTONEON=1,F_HTNSTAGE=0,BURST=500ms
; (2) F_HTONEON=0,F_HTNSTAGE=0,PAUSE=500ms
; (3) F_HTONEON=1,F_HTNSTAGE=1,BURST=500ms
; (4) F_HTONEON=0,F_HTNSTAGE=1,PAUSE=1500ms
HOLDTON: BTST F_HOLDNOW
RET
LD EA,T_IDIGPAU
REF DECSEA
RET
BTST F_HTNSTAGE
JPS HTON3
BTSF F_HTONEON
JR HTON1
BITR F_HTNSTAGE ; (4) -> (1)
BITS F_HTONEON
LD EA,#84 ; LOAD 500ms TONE ON TIME
JPS HTON7
HTON1: BITR F_HTONEON ; (3) -> (4)
LD EA,#250 ; LOAD 1500ms TONE OFF TIME
JR HTON4
HTON3: BTST F_HTONEON
JR HTON5
BITR F_HTONEON ; (1) -> (2)
LD EA,#84 ; LOAD 500ms TONE OFF TIME
HTON4: LD T_IDIGPAU,EA
REF ZERO2EA
JR HTON6
HTON5: BITS F_HTNSTAGE ; (2) -> (3)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -