[VoIP] MF tone generator

Donald Froula dfroula at sbcglobal.net
Fri Jun 15 18:42:25 CDT 2007


It's written in assembly, I'm afraid. The timer
routines are very specific to the chip.

Not very elegant, but it works.

Don

==================================================


*THESE EQUATES DEFINE VARIOUS CONTROL REGISTERS

*INTERRUPT/RESET VECTORS
RESVEC	EQU	$1FFE	HARD RESET VECTOR
SCIVEC	EQU	$1FF6	SCI SERIAL PORT INTERRUPT VECTOR
TIMVEC	EQU	$1FF8	TIMER INTERRUPT VECTOR

*MEMORY CONFIGURATION
OPTREG	EQU	$1FDF	OPTION REGISTER TO SET MEMORY
CONFIGURATION

*I/O PORTS
PORTA	EQU	$00	PORT A DATA REGISTER
PORTB	EQU	$01	PORT B DATA REGISTER
PORTC	EQU	$02	PORT C DATA REGISTER
PORTD	EQU	$03	PORT D FIXED INPUT REGISTER
DDRA	EQU	$04	PORT A DATA DIRECTION REGISTER
DDRB	EQU	$05	PORT B DATA DIRECTION REGISTER
DDRC	EQU	$06	PORT C DATA DIRECTION REGISTER

*SCI SERIAL PORT
BAUDRG	EQU	$0D	SCI BAUD RATE REGISTER
SCICT1	EQU	$0E	SCI CONTROL REGISTER 1
SCICT2	EQU	$0F	SCI CONTROL REGISTER 2
SCISTA	EQU	$10	SCI COMMUNICATIONS STATUS REGISTER
SCIDAT	EQU	$11	SCI COMMUNICATIONS DATA REGISTER

*TIMER
*WITH A 4 MHz CLOCK, EACH FREE RUNNING TIMER COUNTER
DECREMENT TAKES
*2 MICROSECONDS (BEST RESOLUTION)
TIMCNT	EQU	$19	TIMER COUNTER REGISTER, READ ONLY (LOW
BYTE)
ACHR	EQU	$1A	ALTERNATE COUNTER HIGH REGISTER
ACLR	EQU	$1B	ALTERNATE COUNTER LOW REGISTER
OCHR	EQU	$16	OUTPUT COMPARE HIGH REGISTER
OCLR	EQU	$17	OUTPUT COMPARE LOW REGISTER 
TSR	EQU	$13	TIMER STATUS REGISTER
TCR	EQU	$12	TIMER CONTROL REGISTER

SAMCNT	EQU	$25	NUMBER OF TIMER COUNTS BETWEEN
INTERRUPTS FOR 12 KHZ

SEIZE	EQU	$20	PRESS VALUE FOR BUTTON 2600
KEYP	EQU	$40	PRESS VALUE FOR BUTTON KEY PULSE 1
STRT	EQU	$80	PRESS VALUE FOR BUTTON START
MF1	EQU	$01	PRESS VALUE FOR BUTTON 1
MF2	EQU	$02	PRESS VALUE FOR BUTTON 2
MF3	EQU	$04	PRESS VALUE FOR BUTTON 3

MF4	EQU	$02	PRESS VALUE FOR BUTTON 4
MF5	EQU	$04	PRESS VALUE FOR BUTTON 5
MF6	EQU	$08	PRESS VALUE FOR BUTTON 6
MF7	EQU	$10	PRESS VALUE FOR BUTTON 7
MF8	EQU	$20	PRESS VALUE FOR BUTTON 8
MF9	EQU	$40	PRESS VALUE FOR BUTTON 9
MF0	EQU	$80	PRESS VALUE FOR BUTTON 0

DIAL	EQU	$03	PRESS VALUE FOR DIAL TONE
RING	EQU	$06	PRESS VALUE FOR RINGBACK
BUSY	EQU	$06	PRESS VALUE FOR BUSY
REORD	EQU	$0C	PRESS VALUE FOR REORDER
DTMF	EQU	$A0	PRESS VALUE TO TOGGLE DTMF MODE
AA	EQU	$05	PRESS VALUE FOR DTMF A
DD	EQU	$C0	PRESS VALUE FOR DTMF D
BB	EQU	$0A	PRESS VALUE FOR DTMF B
CC	EQU	$50	PRESS VALUE FOR DTMF C
BRST	EQU	$30	PRESS VALUE TO TOGGLE MF BURST MODE
CAL	EQU	$60	PRESS VALUE TO TOGGLE CALIBRATION MODE
SITIN	EQU	$12	PRESS VALUE FOR INTERCEPT SIT TONE
SITNC	EQU	$24	PRESS VALUE FOR NO CIRCUIT SIT TONE
SITRO	EQU	$48	PRESS VALUE FOR REORDER SIT TONE

*RAM STORAGE
PTR1LO	EQU	$30	POINTER INTO SINE TABLE FOR TONE 1
PTR1HI	EQU	$31
PTR2LO	EQU	$32	POINTER INTO SINE TABLE FOR TONE 2
PTR2HI	EQU	$33
INC1LO	EQU	$34	INCREMENT INTO SINE TABLE FOR TONE 1
INC1HI	EQU	$35
INC2LO	EQU	$36	INCREMENT INTO SINE TABLE FOR TONE 2
INC2HI	EQU	$37
SAMPLO	EQU	$38	12KHZ SAMPLE CYCLE COUNTER
SAMPHI	EQU	$39
TIMLO	EQU	$40	STORAGE FOR LOW TIMER COUNT
TIMHI	EQU	$41	STORAGE FOR HIGH TIMER COUNT
BURCNT	EQU	$42	BURST COUNTER
CTLO	EQU	$43	HIGH BYTE OF SAMPLE COUNT
CTHI	EQU	$44	LOW BYTE OF SAMPLE COUNT
TEMP	EQU	$45	TEMPORARY BYTE STORAGE FOR TIMER
SERVICING
PRESS	EQU	$46	STORAGE FOR LAST KEY PRESS
MODE	EQU	$47	STORAGE FOR MF/DTMF MODE FLAG
BSTFLG	EQU	$48	STORAGE FOR MF BURST MODE FLAG
TEMP1	EQU	$49	TEMPORARY STORAGE FOR DEBOUNCE DELAY
PWRTIM	EQU	$50	COUNTER FOR POWER OFF TIMER
CALFLG	EQU	$51	STORAGE FOR CALIBRATION MODE FLAG

*******************************************************************************

* INITIALIZATION

	ORG	$1FF4	BEGINNING OF INTERRUPT VECTORS

	FDB	START	SPI VECTOR POINTS TO INIT
	FDB	START	SCI VECTOR POINTS TO INIT
	FDB	TIMISR	TIMER VECTOR POINTS TO TIMER ISR
	FDB	SWITCH	IRQ LINE VECTOR POINTS TO ISR
	FDB	START	SWI VECTOR POINTS TO INIT
	FDB	START	RESET VECTOR POINTS TO INIT

	ORG	$0160	BEGINNING OF USER EPROM, MEMORY MAP 4

START	EQU	*
	SEI		DISABLE INTERRUPTS
	LDA	#$C0	SET FOR MEMORY MAP 4, EDGE IRQ DETECT
	STA	OPTREG
	LDA	#$10	SET PORTA FOR SWITCHES AND AMPLIFIER SWITCH
	STA	DDRA
	BSET	3,PORTA	PRESET LATCH FOR PULL-UP V SOURCE
	LDA	#$FF	INITIALIZE PORT B FOR D/A
	STA	DDRB
	CLR	PORTB	INITIALIZE D/A FOR NO OUTPUT
	LDA	#$01	INITIALIZE SECOND SWITCH PORT FOR 7 INPUTS
	STA	DDRC	SET 2ND SWITCH PORT FOR 7 INPUTS
	CLR	MODE	INITIALIZE TO MF MODE
	CLR	BSTFLG	INITIALIZE TO MF BURST MODE
	CLR	CALFLG	INITIALIZE CALIBRATION MODE OFF
INIT	CLI		ENABLE INTERRUPTS

MAIN	EQU	*

* WAIT FOR KEY RELEASE
	BSET	3,DDRA	TURN ON PULL-UP VOLTAGE
	BSET	3,PORTA
	LDA	#$FF	WAIT FOR VOLTAGE TO STABILIZE
AGAIN	DECA
	BNE	AGAIN
NONE	LDA	PORTA	GET INPUTS FROM SWITCH PORT
	COMA		TAKE THE COMPLEMENT FOR EASIER PROCESSING
	AND	#$E7	MASK ALL BUT THE SWITCH INPUTS
	BNE	NONE	STILL PRESSED, WAIT
NONE2	LDA	PORTC	GET INPUTS FROM SECOND SWITCH PORT
	COMA		TAKE THE COMPLEMENT FOR EASIER PROCESSING
	AND	#$FE	MASK ALL BUT THE SWITCH INPUTS
	BNE	NONE2	STILL PRESSED, WAIT
	BCLR	3,DDRA	IF RELEASED, SHUT OFF PULL-UP VOLTAGE
	
* 5 SECOND POWER DOWN TIMER ROUTINE
	LDA	#$25	SET UP OVERFLOW EVENT COUNTER
	STA	PWRTIM	SAVE IT
PWRDWN	LDA	TSR	CLEAR TIMER OVERFLOW FLAG
	LDA	TIMCNT
HOLD	BIL	PWRUP	IF IRQ LOW, CONTINUE
	BRCLR	5,TSR,HOLD	LOOP UNTIL OVERFLOW SET
	DEC	PWRTIM	DECREMENT POWER OFF TIMER
	BNE	PWRDWN	DO AGAIN, IF NOT 5 SECONDS
	

	CLR	PORTB	SET D/A PORT FOR NO OUTPUT
	BSET	4,PORTA TURN OFF AMPLIFIER
	CLR	CALFLG	TURN CALIBRATION MODE OFF
	STOP		ENTER LOW POWER MODE AND WAIT FOR IRQ
	
PWRUP	SEI		DISABLE INTERRUPTS
	BCLR	4,PORTA TURN ON AMPLIFIER
	BSET	3,DDRA	TURN ON PULL-UP VOLTAGE
	BSET	3,PORTA
	LDA	#$FF	WAIT FOR VOLTAGE TO STABILIZE
AGAIN1	DECA
	BNE	AGAIN1
	
* GET AND DEBOUNCE SWITCH INPUTS
DBNCE	LDA	PORTA	GET INPUTS FROM SWITCH PORT
	COMA		TAKE THE COMPLEMENT FOR EASIER PROCESSING
	AND	#$E7	MASK ALL BUT THE SWITCH INPUTS
	BEQ	DBNCE2	NO PRESS, CHECK NEXT SWITCH PORT
	STA	PRESS	OTHERWISE, STORE VALUE IN REGISTER
	JSR	WAIT	WAIT FOR DEBOUNCE TIME
	LDA	PORTA	GET SWITCH VALUE AGAIN
	COMA		TAKE THE COMPLEMENT FOR EASIER PROCESSING
	AND	#$E7	MASK ALL BUT THE SWITCH INPUTS
	CMP	PRESS	SEE IF VALUE IS THE SAME AFTER DEBOUNCE
	BNE	DBNCE	IF NOT, TRY AGAIN UNTIL NONE PRESSED
	BCLR	3,DDRA	IF GOOD PRESS, SHUT OFF PULL-UP VOLTAGE
	CLI		RE-ENABLE INTERRUPTS
	BRA	DECODE	GO TO KEY DECODE

DBNCE2	LDA	PORTC	GET INPUTS FROM SWITCH PORT
	COMA		TAKE THE COMPLEMENT FOR EASIER PROCESSING
	AND	#$FE	MASK ALL BUT THE SWITCH INPUTS
	BEQ	MAIN	NO PRESS, START OVER
	STA	PRESS	OTHERWISE, STORE VALUE IN REGISTER
	JSR	WAIT	WAIT FOR DEBOUNCE TIME
	LDA	PORTC	GET SWITCH VALUE AGAIN
	COMA		TAKE THE COMPLEMENT FOR EASIER PROCESSING
	AND	#$FE	MASK ALL BUT THE SWITCH INPUTS
	CMP	PRESS	SEE IF VALUE IS THE SAME AFTER DEBOUNCE
	BNE	DBNCE2	IF NOT, TRY AGAIN UNTIL NONE PRESSED
	BCLR	3,DDRA	IF GOOD PRESS, SHUT OFF PULL-UP VOLTAGE
	CLI		RE-ENABLE INTERRUPTS
	JMP	NEXT10	JUMP TO KEY DECODE FOR PORTC
		
* DECODE BUTTON 2600
DECODE	CMP	#SEIZE	SEE IF THE 2600 BUTTON IS PRESSED
	BNE	NEXT01	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL08	CONTINUE IF NOT CAL MODE
	JSR	BEEP	PLAY 2600
	BRA	SKIP01
NCAL08	LDA	MODE	GET MF/DTMF MODE
	BNE	SKIP01	DO NOTHING IF IN DTMF MODE
	JSR	BEEP	PLAY 2600
SKIP01	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON KEY PULSE 1
NEXT01	CMP	#KEYP	SEE IF THE TWO BUTTON IS PRESSED
	BNE	NEXT02	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL09	CONTINUE IF NOT CAL MODE
	JSR	NICK	PLAY NICKEL TONE
	BRA	SKIP03
NCAL09	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP02
	JSR	STAR	PLAY DTMF * IF DTMF MODE
	BRA	SKIP03	BRANCH AROUND MF IF DTMF MODE
SKIP02	JSR	KP1	PLAY MF KP1
SKIP03	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON START
NEXT02	CMP	#STRT	SEE IF THE START BUTTON IS PRESSED
	BNE	NEXT03	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL10	CONTINUE IF NOT CAL MODE
	JSR	QUART	PLAY QUARTER TONE
	BRA	SKIP05
NCAL10	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP04
	JSR	POUND	PLAY DTMF # if DTMF MODE
	BRA	SKIP05	BRANCH AROUND MF IF DTMF MODE
SKIP04	JSR	ST	PLAY MF ST
SKIP05	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF1
NEXT03	CMP	#MF1	SEE IF THE PORTA 0 BUTTON IS PRESSED
	BNE	NEXT04	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL01	CONTINUE IF NOT CAL MODE
	JSR	T0700	PLAY 700 CAL TONE
	BRA	SKIP07	
NCAL01	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP06
	JSR	DIONE	PLAY DTMF 1 if DTMF MODE
	BRA	SKIP07	BRANCH AROUND MF IF DTMF MODE
SKIP06	JSR	MFONE	PLAY MF ONE
SKIP07	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF2
NEXT04	CMP	#MF2	SEE IF THE PORT A 1 BUTTON IS PRESSED
	BNE	NEXT05	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL02	CONTINUE IF NOT CAL MODE
	JSR	T0900	PLAY 900 CAL TONE
	BRA	SKIP09	
NCAL02	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP08
	JSR	DITWO	PLAY DTMF 2 if DTMF MODE
	BRA	SKIP09	BRANCH AROUND MF IF DTMF MODE
SKIP08	JSR	MFTWO	PLAY MF TWO
SKIP09	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF3
NEXT05	CMP	#MF3	SEE IF THE PORT A 2 BUTTON IS PRESSED
	BNE	NEXT06	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL03	CONTINUE IF NOT CAL MODE
	JSR	T1100	PLAY 1100 CAL TONE
	BRA	SKIP11	
NCAL03	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP10
	JSR	DITHREE	PLAY DTMF 3 if DTMF MODE
	BRA	SKIP11	BRANCH AROUND MF IF DTMF MODE
SKIP10	JSR	MFTHREE	PLAY MF THREE
SKIP11	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON DTMF A
NEXT06	CMP	#AA	SEE IF THE PORT A 1 AND 3 BUTTON IS
PRESSED
	BNE	NEXT07	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION MODE FLAG
	BNE	SKIP12	DO NOTHING IF IN CALIBRATION MODE
	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	HOP01
	JSR	AAA	PLAY DTMF A IF DTMF MODE
	BRA	SKIP12	BRANCH AROUND DTMF IF MF MODE
HOP01	JSR	STP	PLAY MF STP
SKIP12	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON DTMF D
NEXT07	CMP	#DD	SEE IF THE PORT A KP AND ST BUTTON IS
PRESSED
	BNE	NEXT08	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION MODE FLAG
	BNE	SKIP99	DO NOTHING IF IN CALIBRATION MODE
	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	HOP02
	JSR	DDD	PLAY DTMF D if DTMF MODE
	BRA	SKIP99	BRANCH AROUND DTMF IF MF MODE
HOP02	JSR	BEEP	PLAY 2600
SKIP99	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

*DECODE BUTTON FOR DIALTONE
NEXT08	CMP	#DIAL	SEE IF THE PORT A 1 AND 2 BUTTON IS
PRESSED
	BNE	NEXT09	IF NOT, TRY THE NEXT
	JSR	DIALTN	PLAY DIAL TONE
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

*DECODE BUTTON FOR RINGBACK
NEXT09	CMP	#RING	SEE IF THE PORT A 2 BUTTON IS PRESSED
	BNE	NEXT99	IF NOT, TRY THE NEXT
	JSR	RINGBK	PLAY RINGBACK
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

NEXT99	JMP	MAIN	INVALID KEY PRESS, POWER DOWN AND WAIT
FOR NEXT

*END OF DECODE SCAN FOR PORTA

* DECODE BUTTON MF4
NEXT10	CMP	#MF4	SEE IF THE PORTC BIT1 BUTTON IS
PRESSED
	BNE	NEXT11	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL04	CONTINUE IF NOT CAL MODE
	JSR	T1300	PLAY 1300 CAL TONE
	BRA	SKIP14	
NCAL04	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP13
	JSR	DIFOUR	PLAY DTMF 4 if DTMF MODE
	BRA	SKIP14	BRANCH AROUND MF IF DTMF MODE
SKIP13	JSR	MFFOUR	PLAY MF FOUR
SKIP14	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF5
NEXT11	CMP	#MF5	SEE IF THE PORTC BIT2 BUTTON IS
PRESSED
	BNE	NEXT12	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL05	CONTINUE IF NOT CAL MODE
	JSR	T1500	PLAY 1500 CAL TONE
	BRA	SKIP16	
NCAL05	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP15
	JSR	DIFIVE	PLAY DTMF 5 if DTMF MODE
	BRA	SKIP16	BRANCH AROUND MF IF DTMF MODE
SKIP15	JSR	MFFIVE	PLAY MF FIVE
SKIP16	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF6
NEXT12	CMP	#MF6	SEE IF THE PORTC BIT3 BUTTON IS
PRESSED
	BNE	NEXT13	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL06	CONTINUE IF NOT CAL MODE
	JSR	T1700	PLAY 1700 CAL TONE
	BRA	SKIP18	
NCAL06	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP17
	JSR	DISIX	PLAY DTMF 6 if DTMF MODE
	BRA	SKIP18	BRANCH AROUND MF IF DTMF MODE
SKIP17	JSR	MFSIX	PLAY MF SIX
SKIP18	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF7
NEXT13	CMP	#MF7	SEE IF THE PORTC BIT4 BUTTON IS
PRESSED
	BNE	NEXT14	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION MODE FLAG
	BNE	SKIP20	DO NOTHING IF IN CALIBRATION MODE
	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP19
	JSR	DISEVEN	PLAY DTMF 7 if DTMF MODE
	BRA	SKIP20	BRANCH AROUND MF IF DTMF MODE
SKIP19	JSR	MFSEVEN	PLAY MF SEVEN
SKIP20	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF8
NEXT14	CMP	#MF8	SEE IF THE PORTC BIT5 BUTTON IS
PRESSED
	BNE	NEXT15	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION MODE FLAG
	BEQ	HOP05	
	JSR	T1004	PLAY 1004 HZ CAL TONE
	BRA	SKIP22
HOP05	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP21
	JSR	DIEIGHT	PLAY DTMF 8 if DTMF MODE
	BRA	SKIP22	BRANCH AROUND MF IF DTMF MODE
SKIP21	JSR	MFEIGHT	PLAY MF EIGHT
SKIP22	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF9
NEXT15	CMP	#MF9	SEE IF THE PORTC BIT6 BUTTON IS
PRESSED
	BNE	NEXT16	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION MODE FLAG
	BNE	SKIP24	DO NOTHING IF IN CALIBRATION MODE
	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP23
	JSR	DININE	PLAY DTMF 9 if DTMF MODE
	BRA	SKIP24	BRANCH AROUND MF IF DTMF MODE
SKIP23	JSR	MFNINE	PLAY MF NINE
SKIP24	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON MF0
NEXT16	CMP	#MF0	SEE IF THE PORTC BIT7 BUTTON IS
PRESSED
	BNE	NEXT17	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION FLAG
	BEQ	NCAL07	CONTINUE IF NOT CAL MODE
	JSR	DIME	PLAY DIME TONE IN CAL MODE
	BRA	SKIP26
NCAL07	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	SKIP25
	JSR	DIZERO	PLAY DTMF 0 if DTMF MODE
	BRA	SKIP26	BRANCH AROUND MF IF DTMF MODE
SKIP25	JSR	MFZERO	PLAY MF ZERO
SKIP26	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON BUSY
NEXT17	CMP	#BUSY	SEE IF THE BUTTONS 4 AND 5 ARE
PRESSED
	BNE	NEXT18	IF NOT, TRY THE NEXT
	JSR	BUSYTN	PLAY BUSY SIGNAL
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON REORDER
NEXT18	CMP	#REORD	SEE IF THE BUTTONS 5 AND 6 ARE
PRESSED
	BNE	NEXT19	IF NOT, TRY THE NEXT
	JSR	REORDTN	PLAY REORDER
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON DTMF B
NEXT19	CMP	#BB	SEE IF THE PORT A KP AND ST BUTTON IS
PRESSED
	BNE	NEXT20	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION MODE FLAG
	BNE	SKIP27	DO NOTHING IF IN CALIBRATION MODE
	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	HOP03	BRANCH AROUND DTMF IF MF MODE
	JSR	BBB	PLAY DTMF B if DTMF MODE
	BRA	SKIP27
HOP03	JSR	ST2P	PLAY MF ST2P
SKIP27	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON DTMF C
NEXT20	CMP	#CC	SEE IF THE PORT A KP AND ST BUTTON IS
PRESSED
	BNE	NEXT21	IF NOT, TRY THE NEXT
	LDA	CALFLG	GET CALIBRATION MODE FLAG
	BNE	SKIP28	DO NOTHING IF IN CALIBRATION MODE
	LDA	MODE	CHECK MF/DTMF MODE
	BEQ	HOP04	BRANCH AROUND DTMF IF MF MODE
	JSR	CCC	PLAY DTMF C if DTMF MODE
	BRA	SKIP28
HOP04	JSR	ST3P	PLAY MF ST3P
SKIP28	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON FOR MF/DTMF TOGGLE
NEXT21	CMP	#DTMF	SEE IF THE BUTTONS 5 AND 6 ARE
PRESSED
	BNE	NEXT22	IF NOT, TRY THE NEXT
	JSR	TOGGLE	TOGGLE MF/DTMF MODE
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON FOR MF BURST MODE
NEXT22	CMP	#BRST	SEE IF THE BUTTONS 7 AND 8 ARE
PRESSED
	BNE	NEXT23	IF NOT, TRY THE NEXT
	JSR	BURST	TOGGLE MF BURST MODE
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON FOR CALIBRATION MODE
NEXT23	CMP	#CAL	SEE IF THE BUTTONS 8 AND 9 ARE PRESSED
	BNE	NEXT24	IF NOT, TRY THE NEXT
	JSR	CALIB	TOGGLE CALIBRATION MODE
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON SIT1
NEXT24	CMP	#SITIN	SEE IF THE BUTTONS 4 AND 7 ARE
PRESSED
	BNE	NEXT25	IF NOT, TRY THE NEXT
	JSR	SIT1	PLAY SIT1
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON SIT2
NEXT25	CMP	#SITNC	SEE IF THE BUTTONS 5 AND 8 ARE
PRESSED
	BNE	NEXT26	IF NOT, TRY THE NEXT
	JSR	SIT2	PLAY SIT2
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT

* DECODE BUTTON SIT3
NEXT26	CMP	#SITRO	SEE IF THE BUTTONS 6 AND 9 ARE
PRESSED
	BNE	NEXT27	IF NOT, TRY THE NEXT
	JSR	SIT3	PLAY SIT3
	JMP	MAIN	POWER DOWN AND WAIT FOR NEXT
	
NEXT27	JMP	MAIN	INVALID KEY PRESS, POWER DOWN AND WAIT
FOR NEXT

* SUBROUTINE TO PLAY A TONE OF SPECIFIED FREQUENCIES
AND DURATION
PLAY	EQU	*
	JSR	CLRTON	CLEAR TONE COUNTERS
	JSR	SETTIM	SET UP TIMER FOR SAMPLING AT 12 KHZ
	BSET	6,TCR	ENABLE TIMER INTERRUPTS
	JSR	CHKCNT	SEE IF CORRECT NUMBER OF SAMPLES TIMED
	BCLR	6,TCR	DISABLE INTERRUPTS WHEN COUNT COMPLETE
	RTS

* SUBROUTINE TO PLAY A TONE OF SPECIFIED FREQUENCIES
AND DURATION + SILENCE
PLAY2	EQU	*
	JSR	CLRTON	CLEAR TONE COUNTERS
	JSR	SETTIM	SET UP TIMER FOR SAMPLING AT 12 KHZ
	BSET	6,TCR	ENABLE TIMER INTERRUPTS
	JSR	CHKCNT	SEE IF CORRECT NUMBER OF SAMPLES TIMED
	BCLR	6,TCR	DISABLE INTERRUPTS WHEN COUNT COMPLETE
	
	JSR	CLRTON	CLEAR TONE COUNTERS
	JSR	NOTONE	SET FOR SILENCE
	JSR	SETTIM	SET UP TIMER FOR SAMPLING AT 12 KHZ
	BSET	6,TCR	ENABLE TIMER INTERRUPTS
	JSR	CHKCNT	SEE IF CORRECT NUMBER OF SAMPLES TIMED
	BCLR	6,TCR	DISABLE INTERRUPTS WHEN COUNT COMPLETE
	RTS

* SUBROUTINE TO PLAY A TONE OF SPECIFIED FREQUENCIES
WHILE BUTTON DOWN
PLAY3	EQU	*
	JSR	CLRTON	CLEAR TONE COUNTERS
	JSR	SETTIM	SET UP TIMER FOR SAMPLING AT 12 KHZ
	BSET	6,TCR	ENABLE TIMER INTERRUPTS
HOLD2	BIL	HOLD2	PLAY WHILE BUTTON IS DOWN
	BCLR	6,TCR	DISABLE INTERRUPTS WHEN COUNT COMPLETE
	RTS
	
*TIMER INTERRUPT SERVICE ROUIINE

*SET UP TIMER FOR NEXT SAMPLING PERIOD
TIMISR	EQU	*
	LDA	TSR	CLEAR OUTPUT COMPARE FLAG
	LDA	ACHR	GET HIGH BYTE OF CURRENT TIMER COUNT
	STA	TIMHI	SAVE IT
	LDA	ACLR	GET LOW BYTE OF CURRENT TIMER COUNT
	ADD	#SAMCNT ADD OFFSET FOR 12KHZ SAMPLING RATE
	STA	TIMLO	SAVE IT
	CLRA
	ADC	TIMHI	ADD CARRY BIT TO HIGH COUNT
	STA	OCHR	STORE HIGH BYTE OF COMPARE REG
	LDA	TIMLO	GET LOW TIMER VALUE
	STA	OCLR	FINISH OUTPUT COMPARE WRITE
	
*DON'T MESS WITH ANYTHING IN THE ISR ABOVE THIS LINE!

	LDA	INC1LO	GET LO INCREMENT FOR TONE 1
	ADD	PTR1LO	ADD IT TO THE LO TONE 1 COUNTER
	STA	PTR1LO	SAVE IT BACK
	LDA	INC1HI	GET HI INCREMENT FOR TONE 1
	ADC	PTR1HI	ADD IT TO THE HI TONE 1 COUNTER
	STA	PTR1HI	SAVE IT BACK

	LDA	INC2LO	GET LO INCREMENT FOR TONE 2
	ADD	PTR2LO	ADD IT TO THE LO TONE 2 COUNTER
	STA	PTR2LO	SAVE IT BACK
	LDA	INC2HI	GET HI INCREMENT FOR TONE 2
	ADC	PTR2HI	ADD IT TO THE HI TONE 2 COUNTER
	STA	PTR2HI	SAVE IT BACK

	LDX	PTR1HI		GET THE TONE 1 TABLE INDEX
	LDA	SINTBL,X	GET TONE 1 TABLE VALUE
	STA	TEMP		SAVE IT
	LDX	PTR2HI		GET THE TONE 2 TABLE INDEX
	LDA	SINTBL,X	GET TONE 2 TABLE VALUE
	ADD	TEMP		SUM THE VALUES
	RORA			DIVIDE BY TWO FOR THE MEAN VALUE
	STA	PORTB		SEND IT TO THE D/A PORT

	INC	SAMPLO	INCREMENT THE SAMPLE COUNTER
	BNE	NEXT	RETURN, IF NOT GREATER THAN FF
	INC	SAMPHI	IF ROLLED OVER, INC HI BYTE
NEXT	RTI
	
*SEE IF CORRECT NUMBER OF SAMPLES COUNTED FOR TONE
BURST
CHKCNT	EQU	*
	LDA	SAMPHI	GET HI BYTE OF SAMPLING COUNT
	CMP	CTHI	CHECK WITH HI BYTE OF LIMIT
	BLO	CHKCNT	DO AGAIN IF NO MATCH		
CHKLO	LDA	SAMPLO	GET LO BYTE OF SAMPLING COUNT
	CMP	CTLO	CHECK WITH LO BYTE OF LIMIT
	BLO	CHKLO	DO AGAIN IF NO MATCH
	RTS		RETURN WHEN CYCLE COUNTS MATCH

*SET UP TIMER FOR NEXT SAMPLING PERIOD
SETTIM	EQU	*
	LDA	TSR	CLEAR OUTPUT COMPARE FLAG
	LDA	ACHR	GET HIGH BYTE OF CURRENT TIMER COUNT
	STA	TIMHI	SAVE IT
	LDA	ACLR	GET LOW BYTE OF CURRENT TIMER COUNT
	ADD	#SAMCNT ADD OFFSET FOR 12KHZ SAMPLING RATE	
	STA	TIMLO	SAVE IT
	CLRA
	ADC	TIMHI	ADD CARRY BIT TO HIGH COUNT
	STA	OCHR	STORE HIGH BYTE OF COMPARE REG
	LDA	TIMLO	GET LOW TIMER VALUE
	STA	OCLR	FINISH OUTPUT COMPARE WRITE
	RTS

* CLEAR TONE GENERATION REGISTERS
CLRTON	EQU	*
	CLR	PTR1LO	CLEAR TONE 1 POINTER
	CLR	PTR1HI
	CLR	PTR2LO	CLEAR TONE 2 POINTER
	CLR	PTR2HI
	CLR	SAMPLO	CLEAR SAMPLING COUNTER
	CLR	SAMPHI
	RTS

NOTONE	EQU	*
	CLR	INC1LO
	CLR	INC1HI
	CLR	INC2LO
	CLR	INC2HI
	RTS

SWITCH	EQU	*	IRQ ISR FOR SWITCH PRESS DETECT
	RTI		JUST RESTORE THE STACK AND CONTINUE

WAIT	EQU	*	37 MS DELAY FOR SWITCH DEBOUNCE
	LDA	#$63	SET OUTER LOOP VALUE
	STA	TEMP1
LOOP1	LDA	#$FF	SET INNER LOOP VALUE
LOOP	DECA		DECREMENT
	BNE	LOOP	LOOP TO ZERO
	DEC	TEMP1	DECREMENT OUTER LOOP
	BNE	LOOP1	LOOP TO ZERO
	RTS

TOGGLE	EQU	*	SUBROUTINE TO TOGGLE BETWEEN MF and DTMF
MODES
	LDA	MODE	GET CURRENT MODE
	BEQ	TODTMF	SET TO DTMF IF MF MODE
	CLR	MODE	SET TO MF IF DTMF MODE
	JSR	HILO	BEEP TO INDICATE MODE CHANGE
	RTS
TODTMF	LDA	#$01	SET TO DTMF MODE
	STA	MODE
	JSR	LOHI	BEEP TO INDICATE MODE CHANGE
	RTS

BURST	EQU	*	ROUTINE TO TOGGLE MF BURST MODE
	LDA	BSTFLG	GET CURRENT MODE
	BEQ	TOCONT	SET TO CONTINUOUS IF BURST MODE
	CLR	BSTFLG	SET TO BURST IF CONTINUOUS MODE
	JSR	HILO	BEEP TO INDICATE MODE CHANGE
	RTS
TOCONT	LDA	#$01	SET TO CONTINUOUS MODE
	STA	BSTFLG
	JSR	LOHI	BEEP TO INDICATE MODE CHANGE
	RTS

CALIB	EQU	*	ROUTINE TO TOGGLE CALIBRATION MODE
	LDA	CALFLG	GET CURRENT MODE
	BEQ	TOCAL	SET TO CALIBRATE MODE IF NOT
	CLR	CALFLG	SET TO MF IF DTMF MODE
	JSR	HILO	BEEP TO INDICATE MODE CHANGE
	RTS
TOCAL	LDA	#$01	SET TO CALIBRATE MODE
	STA	CALFLG
	JSR	LOHI	BEEP TO INDICATE MODE CHANGE
	RTS
	
MF	EQU	*	ROUTINE TO PLAY MF DIGIT AT 75 MS DURATION
	LDA	#$7E
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$03	OF 75 MS (VALID RANGE IS 58 TO 75 MS):
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	LDA	BSTFLG	GET MF BURST MODE FLAG
	BEQ	PLAYBST	PLAY BURST IF IN BURST MODE
	JSR	PLAY3	IF IN CONTINUOUS MODE, PLAY WHILE KEY DOWN
	RTS
PLAYBST	JSR	PLAY	PLAY IT
	RTS

BLEEP	EQU	*	ROUTINE TO PLAY TONE AT 75 MS DURATION
	LDA	#$7E
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$03	OF 75 MS (VALID RANGE IS 58 TO 75 MS):
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	RTS
	
MFONE	LDA	#$0A	LOW BYTE FOR TONE 1, 700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0F	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$57	LOW BYTE FOR TONE 2, 900 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$13	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
MFTWO	LDA	#$0A	LOW BYTE FOR TONE 1, 700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0F	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$A3	LOW BYTE FOR TONE 2, 1100 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$17	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
MFTHREE	LDA	#$57	LOW BYTE FOR TONE 1, 900 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$13	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$A3	LOW BYTE FOR TONE 2, 1100 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$17	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
MFFOUR	LDA	#$0A	LOW BYTE FOR TONE 1, 700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0F	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$EF	LOW BYTE FOR TONE 2, 1300 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1B	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
MFFIVE	LDA	#$57	LOW BYTE FOR TONE 1, 900 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$13	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$EF	LOW BYTE FOR TONE 2, 1300 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1B	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
MFSIX	LDA	#$A3	LOW BYTE FOR TONE 1, 1100 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$17	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$EF	LOW BYTE FOR TONE 2, 1300 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1B	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
MFSEVEN	LDA	#$0A	LOW BYTE FOR TONE 1, 700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0F	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$3B	LOW BYTE FOR TONE 2, 1500 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$20	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
MFEIGHT	LDA	#$57	LOW BYTE FOR TONE 1, 900 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$13	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$3B	LOW BYTE FOR TONE 2, 1500 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$20	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
MFNINE	LDA	#$A3	LOW BYTE FOR TONE 1, 1100 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$17	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$3B	LOW BYTE FOR TONE 2, 1500 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$20	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
		
KP1	LDA	#$A3	LOW BYTE FOR TONE 1, 1100 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$17	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$87	LOW BYTE FOR TONE 2, 1700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$24	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$96
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$05	OF 120 MS (VALID KP RANGE IS 90 TO 120 MS)
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	LDA	BSTFLG	GET MF BURST MODE FLAG
	BEQ	BST	PLAY BURST IF IN BURST MODE
	JSR	PLAY3	IF IN CONTINUOUS MODE, PLAY WHILE KEY DOWN
	RTS
BST	JSR	PLAY	PLAY IT
	RTS
	
MFZERO	LDA	#$EF	LOW BYTE FOR TONE 1, 1300 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$1B	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$3B	LOW BYTE FOR TONE 2, 1500 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$20	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS
	
ST	LDA	#$3B	LOW BYTE FOR TONE 1, 1500 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$20	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$87	LOW BYTE FOR TONE 2, 1700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$24	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS

STP	LDA	#$57	LOW BYTE FOR TONE 1, 900 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$13	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$87	LOW BYTE FOR TONE 2, 1700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$24	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS

ST2P	LDA	#$EF	LOW BYTE FOR TONE 1, 1300 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$1B	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$87	LOW BYTE FOR TONE 2, 1700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$24	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS

ST3P	LDA	#$0A	LOW BYTE FOR TONE 1, 700 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$0F	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$87	LOW BYTE FOR TONE 2, 1700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$24	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	MF
	RTS

* 2600 BEEP ROUTINE
BEEP	EQU	*	BEEP ROUTINE, 2600 HZ
	LDA	#$DE	LOW BYTE FOR TONE 1, 2600 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$37	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$DE	LOW BYTE FOR TONE 2, 2600 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$37	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$8A
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION (NOT
USED)
	LDA	#$2E	OF 1000 MS:
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY3	PLAY IT WHILE BUTTON DOWN
	RTS

* DIALTONE ROUTINE
DIALTN	LDA	#$85	LOW BYTE FOR TONE 1, 350 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$07	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$74	LOW BYTE FOR TONE 2, 440 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$09	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

* RING TONE ROUTINE
RINGBK	LDA	#$74	LOW BYTE FOR TONE 1, 440 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$09	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$50	LOW BYTE FOR TONE 2, 480 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$0A	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$15
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$5D	OF 2000 MS:
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	JSR	NOTONE	SET FOR SILENCE
	LDA	#$29
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$BA	OF 4000 MS:
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	BIL	RINGBK	REPEAT UNTIL KEY RELEASED
	RTS

* BUSY TONE ROUTINE
BUSYTN	LDA	#$50	LOW BYTE FOR TONE 1, 480 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0A	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$52	LOW BYTE FOR TONE 2, 620 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$0D	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$45
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$17	OF 500 MS:
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY2
	BIL	BUSYTN	REPEAT UNTIL KEY RELEASED
	RTS

* REORDER TONE ROUTINE
REORDTN	LDA	#$50	LOW BYTE FOR TONE 1, 480 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0A	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$52	LOW BYTE FOR TONE 2, 620 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$0D	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$A3
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$0B	OF 250 MS:
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY2
	BIL	REORDTN	REPEAT UNTIL KEY RELEASED
	RTS

DIONE	LDA	#$FA	LOW BYTE FOR TONE 1, 697 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0E	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$FA	LOW BYTE FOR TONE 2, 1209 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$19	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DITWO	LDA	#$FA	LOW BYTE FOR TONE 1, 697 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0E	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$B5	LOW BYTE FOR TONE 2, 1336 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1C	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DITHREE	LDA	#$FA	LOW BYTE FOR TONE 1, 697 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0E	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$BC	LOW BYTE FOR TONE 2, 1477 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1F	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
AAA	LDA	#$FA	LOW BYTE FOR TONE 1, 697 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$0E	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$16	LOW BYTE FOR TONE 2, 1633 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$23	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DIFOUR	LDA	#$8B	LOW BYTE FOR TONE 1, 770 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$10	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$FA	LOW BYTE FOR TONE 2, 1209 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$19	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DIFIVE	LDA	#$8B	LOW BYTE FOR TONE 1, 770 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$10	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$B5	LOW BYTE FOR TONE 2, 1336 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1C	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DISIX	LDA	#$8B	LOW BYTE FOR TONE 1, 770 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$10	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$BC	LOW BYTE FOR TONE 2, 1477 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1F	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
BBB	LDA	#$8B	LOW BYTE FOR TONE 1, 770 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$10	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$16	LOW BYTE FOR TONE 2, 1633 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$23	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DISEVEN	LDA	#$4F	LOW BYTE FOR TONE 1, 852 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$12	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$FA	LOW BYTE FOR TONE 2, 1209 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$19	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DIEIGHT	LDA	#$4F	LOW BYTE FOR TONE 1, 852 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$12	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$B5	LOW BYTE FOR TONE 2, 1336 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1C	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DININE	LDA	#$4F	LOW BYTE FOR TONE 1, 852 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$12	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$BC	LOW BYTE FOR TONE 2, 1477 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1F	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
CCC	LDA	#$4F	LOW BYTE FOR TONE 1, 852 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$12	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$16	LOW BYTE FOR TONE 2, 1633 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$23	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
STAR	LDA	#$38	LOW BYTE FOR TONE 1, 941 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$14	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$FA	LOW BYTE FOR TONE 2, 1209 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$19	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DIZERO	LDA	#$38	LOW BYTE FOR TONE 1, 941 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$14	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$B5	LOW BYTE FOR TONE 2, 1336 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1C	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
POUND	LDA	#$38	LOW BYTE FOR TONE 1, 941 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$14	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$BC	LOW BYTE FOR TONE 2, 1477 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1F	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS
	
DDD	LDA	#$38	LOW BYTE FOR TONE 1, 941 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$14	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$16	LOW BYTE FOR TONE 2, 1633 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$23	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

LOHI	LDA	#$EF	LOW BYTE FOR TONE 1, 1300 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$1B	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$EF	LOW BYTE FOR TONE 2, 1300 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1B	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	BLEEP
	LDA	#$87	LOW BYTE FOR TONE 1, 1700 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$24	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$87	LOW BYTE FOR TONE 2, 1700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$24	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	BLEEP
	RTS

HILO	LDA	#$87	LOW BYTE FOR TONE 1, 1700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$24	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$87	LOW BYTE FOR TONE 2, 1700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$24	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	BLEEP
	LDA	#$EF	LOW BYTE FOR TONE 1, 1300 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$1B	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$EF	LOW BYTE FOR TONE 2, 1300 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1B	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	BLEEP
	RTS

T0700	LDA	#$0A	LOW BYTE FOR TONE 1, 700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$0F	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$0A	LOW BYTE FOR TONE 2, 700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$0F	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

T0900	LDA	#$57	LOW BYTE FOR TONE 1, 900 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$13	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$57	LOW BYTE FOR TONE 2, 900 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$13	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

T1100	LDA	#$A3	LOW BYTE FOR TONE 1, 1100 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$17	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$A3	LOW BYTE FOR TONE 2, 1100 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$17	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

T1300	LDA	#$EF	LOW BYTE FOR TONE 1, 1300 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$1B	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$EF	LOW BYTE FOR TONE 2, 1300 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1B	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

T1500	LDA	#$3B	LOW BYTE FOR TONE 1, 1500 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$20	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$3B	LOW BYTE FOR TONE 2, 1500 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$20	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

T1700	LDA	#$87	LOW BYTE FOR TONE 1, 1700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$24	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$87	LOW BYTE FOR TONE 2, 1700 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$24	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

T1004	LDA	#$93	LOW BYTE FOR TONE 1, 1004 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$15	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$93	LOW BYTE FOR TONE 2, 1004 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$15	HI BYTE FOR TONE 2
	STA	INC2HI
	JSR	PLAY3
	RTS

NICK	EQU	*
	LDA	#$87	LOW BYTE FOR TONE 1, 1700 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$24	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$45	LOW BYTE FOR TONE 2, 2200 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$2F	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$06
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$03	OF 65 MS :
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY2	PLAY IT
	RTS

DIME	EQU	*
	LDA	#$02	SET UP BURST COUNTER
	STA	BURCNT
MORE1	LDA	#$87	LOW BYTE FOR TONE 1, 1700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$24	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$45	LOW BYTE FOR TONE 2, 2200 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$2F	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$06 
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$03	OF 65 MS :
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY2	PLAY IT
	DEC	BURCNT	PLAY AGAIN, IF NEEDED
	BNE	MORE1
	RTS

QUART	EQU	*
	LDA	#$05	SET UP BURST COUNTER
	STA	BURCNT
MORE2	LDA	#$87	LOW BYTE FOR TONE 1, 1700 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$24	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$45	LOW BYTE FOR TONE 2, 2200 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$2F	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$DD
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$01	OF 40 MS :
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY2	PLAY IT
	DEC	BURCNT	PLAY AGAIN, IF NEEDED
	BNE	MORE2
	RTS

*ROUTINE TO PLAY INTERCEPT SIT TONES
SIT1	LDA	#$A2	LOW BYTE FOR TONE 1, 913.8 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$13	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$A2	LOW BYTE FOR TONE 2, 913.8 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$13	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$C1
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$0C	OF 274 MS
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	LDA	#$73	LOW BYTE FOR TONE 1, 1370.6 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$1D	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$73	LOW BYTE FOR TONE 2, 1370.6 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1D	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$C1
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$0C	OF 274 MS
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	LDA	#$2D	LOW BYTE FOR TONE 1, 1776.7 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$26	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$2D	LOW BYTE FOR TONE 2, 1776.7 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$26	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$AF
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$11	OF 380 MS (VALID KP RANGE IS 90 TO 120 MS)
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	RTS

*ROUTINE TO PLAY INTER-LATA NO CIRCUIT SIT TONES
SIT2	LDA	#$A2	LOW BYTE FOR TONE 1, 913.8 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$13	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$A2	LOW BYTE FOR TONE 2, 913.8 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$13	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$AF
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$11	OF 380 MS
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	LDA	#$73	LOW BYTE FOR TONE 1, 1370.6 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$1D	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$73	LOW BYTE FOR TONE 2, 1370.6 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1D	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$AF
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$11	OF 380 MS
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	LDA	#$2D	LOW BYTE FOR TONE 1, 1776.7 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$26	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$2D	LOW BYTE FOR TONE 2, 1776.7 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$26	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$AF
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$11	OF 380 MS (VALID KP RANGE IS 90 TO 120 MS)
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	RTS

*ROUTINE TO PLAY INTER-LATA REORDER SIT TONES
SIT3	LDA	#$2B	LOW BYTE FOR TONE 1, 985.2 HZ (5.5006 x
f)
	STA	INC1LO
	LDA	#$15	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$2B	LOW BYTE FOR TONE 2, 985.2 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$15	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$C1
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$0C	OF 274 MS
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	LDA	#$73	LOW BYTE FOR TONE 1, 1370.6 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$1D	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$73	LOW BYTE FOR TONE 2, 1370.6 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$1D	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$AF
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$11	OF 380 MS
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	LDA	#$2D	LOW BYTE FOR TONE 1, 1776.7 HZ (5.5006 x f)
	STA	INC1LO
	LDA	#$26	HI BYTE FOR TONE 1
	STA	INC1HI
	LDA	#$2D	LOW BYTE FOR TONE 2, 1776.7 HZ (5.5006 x f)
	STA	INC2LO
	LDA	#$26	HI BYTE FOR TONE 2
	STA	INC2HI
	LDA	#$AF
	STA	CTLO	SAMPLE COUNT FOR REQUIRED TONE DURATION
	LDA	#$11	OF 380 MS (VALID KP RANGE IS 90 TO 120 MS)
	STA	CTHI	COUNT = TIME / 83.933 MICROSECS
	JSR	PLAY	PLAY IT
	RTS

* Sine wave table: 256 elements, beginning at 2.5
volts, to 5 volts to 0, then
SINTBL	EQU	*
	FCB	128 
	FCB	131 
	FCB	134 
	FCB	137 
	FCB	140 
	FCB	144 
	FCB	147 
	FCB	150 
	FCB	153 
	FCB	156 
	FCB	159 
	FCB	162 
	FCB	165 
	FCB	168 
	FCB	171 
	FCB	174 
	FCB	177 
	FCB	179 
	FCB	182 
	FCB	185 
	FCB	188 
	FCB	191 
	FCB	193 
	FCB	196 
	FCB	199 
	FCB	201 
	FCB	204 
	FCB	206 
	FCB	209 
	FCB	211 
	FCB	213 
	FCB	216 
	FCB	218 
	FCB	220 
	FCB	222 
	FCB	224 
	FCB	226 
	FCB	228 
	FCB	230 
	FCB	232 
	FCB	234 
	FCB	235 
	FCB	237 
	FCB	239 
	FCB	240 
	FCB	241 
	FCB	243 
	FCB	244 
	FCB	245 
	FCB	246 
	FCB	248 
	FCB	249 
	FCB	250 
	FCB	250 
	FCB	251 
	FCB	252 
	FCB	253 
	FCB	253 
	FCB	254 
	FCB	254 
	FCB	254 
	FCB	255 
	FCB	255 
	FCB	255 
	FCB	255 
	FCB	255 
	FCB	255 
	FCB	255 
	FCB	254 
	FCB	254 
	FCB	254 
	FCB	253 
	FCB	253 
	FCB	252 
	FCB	251 
	FCB	250 
	FCB	250 
	FCB	249 
	FCB	248 
	FCB	246 
	FCB	245 
	FCB	244 
	FCB	243 
	FCB	241 
	FCB	240 
	FCB	239 
	FCB	237 
	FCB	235 
	FCB	234 
	FCB	232 
	FCB	230 
	FCB	228 
	FCB	226 
	FCB	224 
	FCB	222 
	FCB	220 
	FCB	218 
	FCB	216 
	FCB	213 
	FCB	211 
	FCB	209 
	FCB	206 
	FCB	204 
	FCB	201 
	FCB	199 
	FCB	196 
	FCB	193 
	FCB	191 
	FCB	188 
	FCB	185 
	FCB	182 
	FCB	179 
	FCB	177 
	FCB	174 
	FCB	171 
	FCB	168 
	FCB	165 
	FCB	162 
	FCB	159 
	FCB	156 
	FCB	153 
	FCB	150 
	FCB	147 
	FCB	144 
	FCB	140 
	FCB	137 
	FCB	134 
	FCB	131 
	FCB	128 
	FCB	125 
	FCB	122 
	FCB	119 
	FCB	116 
	FCB	112 
	FCB	109 
	FCB	106 
	FCB	103 
	FCB	100 
	FCB	97 
	FCB	94 
	FCB	91 
	FCB	88 
	FCB	85 
	FCB	82 
	FCB	79 
	FCB	77 
	FCB	74 
	FCB	71 
	FCB	68 
	FCB	65 
	FCB	63 
	FCB	60 
	FCB	57 
	FCB	55 
	FCB	52 
	FCB	50 
	FCB	47 
	FCB	45 
	FCB	43 
	FCB	40 
	FCB	38 
	FCB	36 
	FCB	34 
	FCB	32 
	FCB	30 
	FCB	28 
	FCB	26 
	FCB	24 
	FCB	22 
	FCB	21 
	FCB	19 
	FCB	17 
	FCB	16 
	FCB	15 
	FCB	13 
	FCB	12 
	FCB	11 
	FCB	10 
	FCB	8 
	FCB	7 
	FCB	6 
	FCB	6 
	FCB	5 
	FCB	4 
	FCB	3 
	FCB	3 
	FCB	2 
	FCB	2 
	FCB	2 
	FCB	1 
	FCB	1 
	FCB	1 
	FCB	1 
	FCB	1 
	FCB	1 
	FCB	1 
	FCB	2 
	FCB	2 
	FCB	2 
	FCB	3 
	FCB	3 
	FCB	4 
	FCB	5 
	FCB	6 
	FCB	6 
	FCB	7 
	FCB	8 
	FCB	10 
	FCB	11 
	FCB	12 
	FCB	13 
	FCB	15 
	FCB	16 
	FCB	17 
	FCB	19 
	FCB	21 
	FCB	22 
	FCB	24 
	FCB	26 
	FCB	28 
	FCB	30 
	FCB	32 
	FCB	34 
	FCB	36 
	FCB	38 
	FCB	40 
	FCB	43 
	FCB	45 
	FCB	47 
	FCB	50 
	FCB	52 
	FCB	55 
	FCB	57 
	FCB	60 
	FCB	63 
	FCB	65 
	FCB	68 
	FCB	71 
	FCB	74 
	FCB	77 
	FCB	79 
	FCB	82 
	FCB	85 
	FCB	88 
	FCB	91 
	FCB	94 
	FCB	97 
	FCB	100 
	FCB	103 
	FCB	106 
	FCB	109 
	FCB	112 
	FCB	116 
	FCB	119 
	FCB	122 
	FCB	125
	


More information about the VoIP mailing list