📄 tf9925b.src
字号:
CH_NOISE EQU 3 ; set if ND is activated
STSFG1H EQU 57H ; status flag 1
TEST1 EQU 0 ; tone/pulse change status (test mode)
TEST2 EQU 1 ; tx data status (test mode)
TEST3 EQU 2 ; muting control (test mode)
KEYHOLD EQU 3 ; set if key is in hold
;***********************
; RAM declaration
;***********************
;
RDIAL_PTR EQU 58H ; read dial buffer pointer
WDIAL_PTR EQU 5AH ; write dial buffer pointer
PULSE_CNT EQU 5CH ; dial pulse number
TIMER1 EQU 5EH ; 1ms timer register
;
DTMFTMR_CNT EQU 60H ; 100ms DTMF data singal
LOFREQ_BUF EQU 62H ; low freq. group address buffer
HIFREQ_BUF EQU 64H ; high freq. group address buffer
LOFREQ_CNT EQU 66H ; low freq. sample address buffer
HIFREQ_CNT EQU 68H ; high freq. sample address buffer
LOFEND_BUF EQU 6AH ; low freq. group end address buffer
HIFEND_BUF EQU 6CH ; high freq. group end address buffer
;
RXD_BUF EQU 70H ; (009D) - (00A0) data storage buffer
RXD_BUF1 EQU 72H ; rf data storage byte 2
RXD_BUF2 EQU 74H ; rf data storage byte 3
RXD_BUF3 EQU 76H ; rf data storage byte 4
;
RETRY_CNT EQU 78H ; resend data counter
TX_TIMER2 EQU 7AH ; retramsmit slot timer
SCAN_TBL EQU 7CH ; channel scan result table
;
RINGCNTL EQU 7EH ; ring state counter (low byte)
RINGCNTH EQU 80H ; ring state counter (high byte)
RING_PULSE EQU 82H ; ring pulse counter
T20MS_BUF EQU 84H ; 20ms time buffer ; 1 nibble
PAGE_TIMER EQU 86H ; page timer
CUTLINE_CNT EQU 88H ; auto cut line count (30sec)
TIMER4 EQU 8AH ; auto cut line timer
SCAN_CNT EQU 8CH ; scan rssi channel count
SCAN_STS EQU 8EH ; scan channel status table
;
DEBOUN_CNT EQU 90H ; cradle debounce counter
OUTRNG_CNT EQU 92H ; out of range counter (3sec)
CONNECT_CH EQU 94H ; connect channel number buffer
;
;************************************
; Warm boot flag & ram declaration
;************************************
OPTION_FG EQU 96H ; mask option flag
RECRAD_FG EQU 0 ; set if require recradle
FLASH_OPT EQU 1 ; 1:600ms 0:300ms
MKBRK_OPT EQU 2 ; 1:40/60 0:33/67
MODEL_OPT EQU 3 ; GE/AIWA option (L:GE ; H:AIWA)
;
CIDLED_FG EQU 97H ; Caller ID led status
BLK_MSGLED EQU 0 ; set when a message in mail box
BLK_NEWLED EQU 1 ; set when new calls haven't received
;
TXDATA_PTR EQU 98H ; send txdata length counter
T10MS_BUF EQU 9AH ; 10ms time buffer
T4MS_BUF EQU 9BH ; 4ms timer buffer
;
CURCH EQU 9EH ; last channel buffer
MAGIC_CODE EQU 0A0H ; warm start check code
RANDOM_SECL EQU 0A2H ; secode code random generate buffer (low)
RANDOM_SEC0 EQU 0A3H
RANDOM_SECH EQU 0A4H ; secode code random generate buffer (high)
RANDOM_SEC1 EQU 0A5H
;
SECLOW_REG EQU 0A6H ; security code low byte register
SECHIGH_REG EQU 0A8H ; security code low byte register
;
RX_BUFF EQU 0AAH
TX_BUFF EQU 0ACH
;
REDIAL_BUF EQU 0AEH ; dial buffer (one btyes)
;
CIDERR_TMR EQU 0B0H ; CID timeout timer
FREE_CHBUF EQU 0B2H
;
RECRAD_CNT EQU 0B4H ; recradle counter
;
;*******************************
; Ram declaration for CID part
;*******************************
;BANK1
;
DTMFRX_FG EQU 00H
DTMF_ENABLE EQU 0 ; enable DTMF detect
CHK_DTMF EQU 1 ; enable DTMF decoded
FIRST_DTMF EQU 2 ; first DTMF data singal
DTMFON_START EQU 3 ; set if DTMF signal period
;
DTMFRX_BUF EQU 01H ; received DTMF code buffer
;
DTMFON_CNT EQU 02H ; DTMF on time counter @10ms
DTMFCNTL EQU 04H ; DTMF off time counter (low byte @10ms)
DTMFCNTH EQU 06H ; DTMF off time counter (high byte)
TEMP_BUF EQU 06H
;
FSKRX_FG EQU 08H
START_BIT EQU 0 ; set if start bit has been detected
FSK_FOUND EQU 1 ; set if start bit has been detected
IN_SYNC EQU 2 ; set if channel seizure is found
IRQ_ACTIVE EQU 3 ; set if a byte FSK code is received
;
CIDRX_FG EQU 09H
MDMF_TYPE EQU 0 ; set if message header is MDMF format
MDMTYPE_ERR EQU 1 ; set if invalid MDMF message type
DTMF_RCVD EQU 2 ; set for FSK format,clr for DTMF format
CID_RCVD EQU 3 ; set if whole CID data is received
;
CIDDATA_FG EQU 0AH ; CID rxdata flag
;FRAME_ERR EQU 0 ; set if stop bit error
;NO_DATA EQU 1 ; set if no data is received
DTMF_STATE EQU 0 ; DTMF state (L:DTMF on,H:DTMF off)
DTMFON_VALID EQU 1 ; set after a enough DTMF data time
DTMF_VALID EQU 2 ; set if DTMF on, clr if DTMF stop
DTMF_STOP EQU 3 ; end of received DTMF data
;
SYNC_CNT EQU 0BH ; sync char. (chan. seizure) counter
TMR_840US EQU 0CH ; 840uS timer
FSKDLY_CNT EQU 0DH ; half FSK bit timer
FSKBIT_CNT EQU 0EH ; received FSK bit counter
FSKEVT_CNT EQU 0FH ; FSK detect event counter
;
MSGTYPE_BUF EQU 12H ; message header buffer
BYTE_CNT EQU 14H ; CID receive byte counter
MDMFLEN_CNT EQU 16H ; MDMF message "n" length
CKSUM_CNT EQU 18H ; FSK rxdata checksum
FSK_BYTE EQU 1AH ; FSK byte receive buffer
WRBUF_PTR EQU 1CH ; FSK rx code poiter
FSKCODE_BUF EQU 1EH ; received FSK code buffer
;
SECODEL EQU 20H ; secode code low byte buffer
SECODEH EQU 22H ; secode code high byte buffer
TXCODE_BUF EQU 24H ; tx code buffer
CID_BUF EQU 26H ; FSK rx code buffer
DTMFRX_PTR EQU 26H ; DTMF rx code pointer
DTMF_BUF EQU 28H ; DTMF rx code buffer
;
.list on
.ORG 0000H
VENT0 1,1,RESET ; EMB <-- 1,ERB <-- 1,branch START
VENT1 1,1,TBTINT ; timer int. (int. interval = 2.048ms )
VENT2 1,0,RING_INT ; INT0
VENT3 0,0,UNUSED ; INT1
VENT4 0,0,UNUSED ; INTS
VENT5 1,1,TC0INT ; timer int. (int. interval = 150us)
;
.ORG 0010H
RESET:
NOP
DI ; All interrupt disable
SRB 0
SMB 15
LD A,#3 ; Enable normal CPU operating mode
LD PCON,A ; and set clock gear = fx/4
;
LD EA,#00H
LD SP,EA ;Init. stack pointer
JPS START
;
;********************************************************
ORG 0020H
SMB0 SMB 0
SMB1 SMB 1
SMB15 SMB 15
DECSEA DECS EA
ZERO2EA LD EA,#00H
INCSEA ADS EA,#01H
CPEAHL CPSE EA,HL
EAEQZERO ADS EA,#0FFH
;
LODCODE TCALL LCODE
STOP_TX TCALL STP_TX
WAIT_SETTLE TCALL WAIT_NMS
OFF_TLKLED TCALL OFF_TALKLED
TIMERDEC TCALL TMRSDEC
CHK_RXD TCALL CHECK_RXD
CURCH2EA LD EA,CURCH
MUL2EA ADS EA,EA
INCS2HL INCS HL
INCS HL
;
;********************************************************
; .ORG 0080H ; constant table
DTMFTMR_TBL:
DB 41 ; dialling DTMF signal timer
DB 67
DB 30
;
LOFREQ_TBL:
DB F697&0FFH ; DTMF low group freq. table address
DB F770&0FFH
DB F852&0FFH
DB F941&0FFH
;
HIFREQ_TBL:
DB F1209&0FFH ; DTMF high group freq. table address
DB F1336&0FFH
DB F1477&0FFH
;
LOFEND_TBL:
DB F770&0FFH ; DTMF low group freq. end address
DB F852&0FFH
DB F941&0FFH
DB F1209&0FFH
;
HIFEND_TBL:
DB F1336&0FFH ; DTMF high group freq. end address
DB F1477&0FFH
DB DTMF_START&0FFH
;
TFKEYTBL:
DB 00H,01H,02H ; DTMF digit key table
DB 10H,11H,12H
DB 20H,21H,22H
DB 31H,30H,32H
;
TESTCH_TBL:
DB 10-1 ; ch.1 -> 10 -> 20 -> 30 -> 40
DB 20-1
DB 30-1
DB 40-1
DB 0FFH
;
;************************
; Get ROM constant table
;************************
LCODE:
LDC EA,@EA
RET
;
;***********************************************************
; Connect scan check routine (Page connect or Ring connect)
;***********************************************************
CONNECT_CHK:
BTST LINKFGH.CON_SCAN ; entry if connect scan
RET
BTSF TIMERFGH.LPTMR_EN ; loop timer expired ?
RET
LD EA,CONNECT_CH
LD HL,EA
REF CURCH2EA
REF CPEAHL
JPS CONCHK2
CALLS NEXTCHAN ; connect at next channel
CONCHK1:
LD CONNECT_CH,EA
CALLS PROG_PLL1
LD EA,#30 ; restart 3 sec. timer
CALLS SET_LPTOC
CONCHK_QUIT:
RET
;----------------------
; Page connect timeout
;----------------------
CONCHK2:
BTST MODEFG.PAGE_MODE ; for page connect, if 2 channel
JPS CONCHK1 ; connect has been tried,
CALLS STOP_PAGE ; quit page mode
CALLS Q_CONSCAN ; quit connect scan
JPS BACK_2_STDBY ; off TX power, stop data sending, enable channel scan
;
;**********************
; Quit connect scan
;**********************
Q_CONSCAN:
BITR LINKFGH.CON_SCAN ; quit connect scan mode
RET
;
;***************************
; Ring Job routine
;***************************
RNG_JOB:
BTSF MODEFG.TALK_MODE ; standby check only
RET
;
BTSF CHK_FLAGH.HW_RESET ; if already H/W reset & wait for security change, skip
RET
;
BTST RING_FLAG.RING_VALID ; ringing mode ?
RET
;
;---------------
; first ring in
;---------------
BTST CHK_FLAGH.FIRST_RING ; first ring in ?
JPS RNG_JOB4
BITR CHK_FLAGH.FIRST_RING
;
BTSF MODEFG.PAGE_MODE
CALLS STOP_PAGE ; quit page mode
;
;----------------------------------------------------------
; Init. to send CONNECT command continuously to H/S,
; set maximum send command timeout for one channel = 3 sec.
;----------------------------------------------------------
CALLS CONNECT ; init. send BS_CONNECT command
;
RNG_JOB4:
BTSF TXFGH.TX_CID ; CID data enable to send to H/S ?
RET ; Yes,CID data is sending !
;
BTST RING_FLAGH.RING_ON ; valid ring on ?
JPS RNG_JOB2
;----------------
; ring on start
;----------------
BTST RING_FLAGH.RNGON_START ; ring on start ?
JR RNG_JOB1
BITR RING_FLAGH.RNGON_START
LD EA,#5 ; init. ring parameter
CALLS BLINK_TKLED ; blink In-Use led 100ms on/off
;
;----------------
; ring on period
;----------------
RNG_JOB1:
;--------------------------------------------------------
; If linked up, init. to send RINGON command continuously,
; otherwise skip
;--------------------------------------------------------
BTST LINKFG.CONNECTED
RET
;
;------------------------------
; Send CID data if data ready
;------------------------------
REF SMB1
BTSF CIDRX_FG.DTMF_RCVD
JPS SEND_DTMF_CID
;
BTST CIDRX_FG.CID_RCVD ; CID data ready ?
JPS SEND_RINGON
SEND_CID:
BITR CIDRX_FG.CID_RCVD
;
;-----------------------
; calc. FSK data length
;-----------------------
SEND_FSK_CID:
REF SMB0
REF STOP_TX ; stop old continous command first !
;
REF SMB1
LD EA,#BS_CID ; send FSK format cid command
LD TXCODE_BUF,EA
;
LD HL,#CID_BUF+2 ; load total length into byte counter
LD EA,@HL
ADS EA,#6 ; include ID,command,type,length,end code
;
SEND_CID_CMD:
REF SMB0
LD TXDATA_PTR,EA
BITS TXFGH.TX_CID ; set send CID flag
JPS SEND_SYNC_CMD1 ; set 100 preamble bits
;
;-------------------
; Send RINGON code
;-------------------
SEND_RINGON:
LD EA,TXCODE_BUF
REF SMB0
LD HL,EA
LD EA,#RINGON
REF CPEAHL
CALLS SEND_C_CODE ; yes, send RINGON command continuosly
RET
;
;----------------
; ring off period
;----------------
RNG_JOB2:
BTST RING_FLAG.RING_OFF ; already ring off ?
JR RNG_JOB6
BITR RING_FLAG.RING_OFF
REF OFF_TLKLED ; ring pause, stop blink In-Use led
;----------------------------------------------------------
; If linked up, init. to send RINGOFF command continuously,
; otherwise skip
;----------------------------------------------------------
RNG_JOB6:
BTST LINKFG.CONNECTED ; already linked up ?
JPS RNG_JOB3
;
;------------------------------
; Send CID data if data ready
;------------------------------
REF SMB1
BTSF CIDRX_FG.DTMF_RCVD
JPS SEND_DTMF_CID
;
BTSF CIDRX_FG.CID_RCVD ; CID data ready ?
JPS SEND_CID
;
;--------------------
; Send RINGOFF code
;--------------------
SEND_RINGPAU:
LD EA,TXCODE_BUF
REF SMB0
LD HL,EA
LD EA,#RINGOFF
REF CPEAHL
CALLS SEND_C_CODE ; yes, send RINGOFF command continuosly
;
;-----------
; ring stop
;-----------
RNG_JOB3:
BTST RING_FLAGH.RING_STOP ; 5 sec. ring timeout expired
RET
;
REF OFF_TLKLED
CALLS STOP_RING ; quit ringing mode
;
SEND_RINGEND:
REF STOP_TX ; stop tx first ! 2002-03-10
LD A,#16-2
LD SCAN_CNT,A
LD EA,#RINGSTOP
CALLS SEND_NCMD
;
;-----------------------------------------------------------------
; Stop command send, off TX power, enable channel scan & ring int.
;-----------------------------------------------------------------
BACK_2_STDBY:
REF STOP_TX ; stop command sending
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -