📄 tf9925b.src
字号:
RRC A
XCH A,W
;
XCH A,X
RRC A
XCH A,X
RET
;
;**************************************
; Send command routine
; i/p : EA - command code
; o/p : enable transmit data
;**************************************
SENDCMD:
REF SMB1
LD TXCODE_BUF,EA ; tx code
;
SENDCMD2:
REF SMB0
LD EA,#3
LD TXDATA_PTR,EA
;
SENDCMD1:
BITS TXFGH.TX_START
BITS TXFG.S_PREAMBLE
BITS TXFGH.S_DUMMY
BITR TXFGH.TX_CONT
BITS TXFG.TXEN ; enable data transmit
RET
;
;******************************
; Send command N times routine
; i/p : YZ - number of times
; EA - tx code
;******************************
SEND_NCMD:
REF SMB1
LD TXCODE_BUF,EA
;
SEND_NCMD1:
CALLS SENDCMD2 ; enable data transmit
;
WAIT_SEND_END:
REF TIMERDEC ; === 00/09/06
;
BTSF TXFG.TXEN ; wait until finish sending before
JR WAIT_SEND_END ; send next frame
;
INCS SCAN_CNT
JPS SEND_NCMD1
RET
;
;*****************************************************
; Send command frame preceded with 1 sync bit gap
; i/p : EA - txcode
;*****************************************************
SEND_SYNC_CMD:
REF SMB1
LD TXCODE_BUF,EA ; tx code
;
REF SMB0
LD EA,#3
LD TXDATA_PTR,EA
;
SEND_SYNC_CMD1:
JPS SENDCMD1 ; tx frame gap = 1 sync bit
;
;**************************************
; Set send code continously routine
; i/p : EA - transmit code
;**************************************
SEND_C_CODE:
REF SMB1
LD TXCODE_BUF,EA ; tx code
;
REF SMB0
REF STOP_TX
LD EA,#3
LD TXDATA_PTR,EA
;
BITS TXFGH.TX_START
BITS TXFG.S_PREAMBLE
BITS TXFGH.TX_CONT ; enable continously send
BITS TXFGH.S_DUMMY
BITS TXFG.TXEN ; enable data transmit
RET
;
;*****************************************
; Resend data routine ( @45ms )
; i/p : TXCODE_BUF - tx command
; : RETRY - set if enable retry send
; o/p :
;*****************************************
RESEND_CHK:
BTST TIME_FLAG.TIMER2FG ; 45ms arrive ?
RET
BITR TIME_FLAG.TIMER2FG
;
;*****************************************************************************
; Auto disconnect check (30 sec)
; note: send out range command for every 3 sec. during out of range
; : release line when channel noise has been continously exist for 30 sec.
; ram : OUTRNG_CNT - out of range command send count (@45ms)
; : CUTLINE_CNT - auto cut line counter (@3sec)
; flag: CH_NOISE - set if channel noise is detected
;*****************************************************************************
AUTOCUT_CHK:
BTST MODEFG.TALK_MODE
RET
BTSF MODEFG.CHGCH_MODE
RET
;
BTSF SIGOUTPORT.SIGOUT
JR AUTOCUT1
BITR STSFG1.CH_NOISE
RET
;
AUTOCUT1:
BTSF STSFG1.CH_NOISE ; channel noise detected
JR AUTOCUT4
BITS STSFG1.CH_NOISE
JPS AUTOCUT2
;
AUTOCUT4:
LD EA,OUTRNG_CNT
REF EAEQZERO
JR AUTOCUT6
LD OUTRNG_CNT,EA
RET
;
AUTOCUT6:
BITR TXFG.TXEN ; 2000-04-27
LD EA,#OUTRNG_CMD ; send out of range command
REF SMB1
LD TXCODE_BUF,EA
REF SMB0
;
SRB 2
LD YZ,#20+1-1
LD EA,#3
LD TXDATA_PTR,EA
CALLS SEND_SYNC_CMD1
;
LD EA,CUTLINE_CNT ; @3sec.
REF INCSEA
LD CUTLINE_CNT,EA
ADS EA,#0F6H
JR AUTOCUT3
JPS TALKOFF_JOB ; 30 sec. (10 out range tone)
;
AUTOCUT2:
REF ZERO2EA ; reset noise detect count
LD CUTLINE_CNT,EA
AUTOCUT3:
LD EA,#66-1 ; reload 3 sec. send out range value (@45ms)
LD OUTRNG_CNT,EA
AUTOCUT_QUIT:
RET
;
;**********************************************************
; Start connect routine (Page connect / Ring connect)
; - Init. send CONNECT command continuously and
; set maximum send data timeout for one channel = 3 sec.
; relevant routine : CONNECT_CHK
; : TIMERDEC
;**********************************************************
CONNECT:
BITR TXPWRPORT.TX_PWR ; on TX power
CALLS TXRX_HIGH_INIT ; set PLL to high charge pump current
REF CURCH2EA
LD CONNECT_CH,EA ; start with last channel to connect
CALLS PROG_PLL
LD EA,#10/2
REF WAIT_SETTLE
;
CALLS TXRX_ON_INIT
LD EA,#20/2
REF WAIT_SETTLE
;
BITS LINKFGH.CON_SCAN ; start connect scan
BITR LINKFG.CONNECTED
BITR LINKFG.CH_SCAN ; disable multi-channel scan
LD EA,#BS_CONNECT
CALLS SEND_C_CODE ; send connect command continuosly
LD EA,#30
CALLS SET_LPTOC ; start 3 sec. loop timer
RET
;
;********************************
; Set loop timeout count
; i/p : EA - loop time (@100ms)
;********************************
SET_LPTOC:
LD LOOP_CNT,EA
BITS TIMERFGH.LPTMR_EN
RET
;
;********************
; Change channel job
;********************
CHANNEL_JOB:
BITS MODEFG.CHGCH_MODE
;
CALLS MUTE_TXRX
JPS CON_RESP2
;
;***************************************
; Skip to next channel routine (by 13)
; i/p : A - channel no.
; o/p : (A+7)mod(40) - new channel no.
;***************************************
NEXTCHAN:
ADS EA,#13
LD WX,EA
DECS WX
ADS EA,#255-MAX_40CHAN
LD EA,WX
REF INCSEA
RET
;
;**********************************
; Wait settle time expire routine
; i/p : EA - settle time (@1ms)
;**********************************
WAIT_NMS:
LD TIMER1,EA
WAIT_SETTLE1:
REF TIMERDEC
LD EA,TIMER1
REF EAEQZERO
JPS Q_WAIT_SETTLE
;
BTST TIME_FLAGH.T4MS
JR WAIT_SETTLE1
BITR TIME_FLAGH.T4MS
CALL FSKTMROUT_CHK
CALL FSK_DATARX ; detect FSK code for connecting every 4ms
CALL DTMF_DATARX
JPS WAIT_SETTLE1
;
Q_WAIT_SETTLE:
RET
;
;***********************************************************
; ND check routine
; o/p : carry set - channel free, carry clr. - channel busy
; reg.: HL - channel busy count
; EA - ND check loop time
;***********************************************************
ND_CHECK:
LD HL,#ND_CHK_TIME-1 ; 15 loops
REF ZERO2EA
ND_CHECK_LP:
INCS A
BTSF SIGOUTPORT.SIGOUT ; SIGOUT=1=free, 0=busy
REF ZERO2EA ; clr. channel busy count
ND_CHK_LP1:
DECS L
JR ND_CHECK_LP
LD HL,#(ND_CHK_TIME+1)/2 ; busy count >= 8 ?
RCF
SBC EA,HL
NOP
RET
;
;***************************************************
; Stop tx data transmission
; o/p : TX_DISABLE = 0 ( disable timeout counter )
; RETRY = 0 ( disable resend data )
; TXEN = 0 ( disable data sending )
;***************************************************
STP_TX:
REF ZERO2EA
LD TXFG,EA
RET
;
;****************************************************************************
; Check received data ID routine
; o/p : carry clr. - data received with correct ID and stored in register A
; carry set - data rcvd with incorrect ID or no valid data rcvd
;****************************************************************************
CHECK_RXD:
BTST RXFGH.DATA_RCVD
RET
BITR RXFGH.DATA_RCVD
CHK_RXDID:
LD HL,#RXD_BUF ; check security code match ?
REF SMB1
LD EA,SECODEL
REF SMB0
CPSE EA,@HL
RET
REF SMB1
LD EA,SECODEH
REF SMB0
REF INCS2HL
CPSE EA,@HL
CHKRXD_END:
RET
;
REF INCS2HL
LD EA,@HL ; get received data
SRET
;
;********************************
; Rx data decoding routine (B/U)
; i/p : RXD_BUF,DATA_RCVD
; o/p :
;********************************
RXDATA_CHK:
REF CHK_RXD ; check security code match or not
JPS RXD_CHK_QUIT
;
;---------------
; RXDATA Decode
;---------------
LD WX,EA
LD HL,#11100000B ; mask out code header
AND EA,HL
LD HL,EA
REF EAEQZERO
;
;----------------------
; Check code header
;----------------------
JPS RX_ACK_CON ; connect ACK code ? (ring/page link)
;
LD EA,#CMD_CODE
REF CPEAHL ; command code ?
JR RXDATA_CHK2
JPS CMD_DECODE
RXDATA_CHK2:
LD EA,#DIAL_CODE
REF CPEAHL ; dial code ?
JPS RXD_CHK_QUIT
;
;----------------
; Dial code rcvd.
;----------------
DIAL_DECODE:
LD EA,WX
LD HL,#0FH
AND EA,HL ; mask out lower nibbles
LD HL,#PAUSE_KEY
SBS HL,EA
JR DIAL_DECODE1
RET
;
DIAL_DECODE1:
; BTSF DIAL_FG.FIRSTKEY
; JR STORE_DIGIT
; BITS DIAL_FG.FIRSTKEY
; CALLS RESET_DIAL_PAR ; reset dial pointer, bufferfull flag
STORE_DIGIT:
LD REDIAL_BUF,A ; store digit code to dial buffer
CALLS RXMUTE_CHK
LD EA,#5
LD MUTE_TMR,EA
RET
;
;-----------------------
; read dial mode option
;-----------------------
READ_TP:
BITS TONEPULPORT.TP_SW
;
REF SMB15
LD EA,#01110110B
LD PMG1,EA
REF SMB0
BITR STSFG1.F_TONESOFT ; read T/P status,
BITR STSFG1.F_TONEMODE
;
BTST TONEPULPORT.TP_SW ; pulse (L) , tone (H)
JR IN_TALK
BITS STSFG1.F_TONEMODE
BITS STSFG1.F_TONESOFT
IN_TALK:
REF SMB15
LD EA,#01110111B
LD PMG1,EA
REF SMB0
;
RXD_CHK_QUIT:
RET
;
;--------------------------
; connect ACK code handler
;--------------------------
RX_ACK_CON:
LD EA,WX
LD HL,#ACK
REF CPEAHL ; connect ack (10H) ?
RET
;
BITS LINKFG.CONNECTED ; connect request has been acknowledgedRX_ACK_QUIT:
CALLS Q_CONSCAN ; quit connect scan
RET
;
;-------------------
; Command code rcvd.
;-------------------
CMD_DECODE: ; decode command
LD EA,WX
LD HL,#0F0H
AND EA,HL
LD HL,#CMD_CODE
REF CPEAHL
RET
;
LD EA,WX
LD HL,#0FH
AND EA,HL
REF EAEQZERO ; EA <- EA-1
RET
;
LD HL,#4
SBS HL,EA
JR CMD_DECODE2
RET
CMD_DECODE2: ; EA <= 5
REF MUL2EA ; ADS EA,EA
ADS EA,#(COMMAND_TBL&0FFH)
JR @EA
;
COMMAND_TBL:
JPS CON_ACK_QUIT ; "61H" -- TALKON
;
JPS TALKOFF_JOB ; "62H" -- TALKOFF
;
JPS CHAN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -