1356 lines
30 KiB
Plaintext
1356 lines
30 KiB
Plaintext
![]() |
; The Jolly-Box v4.3 (1 Mbit Samplerom, 4 Kb Program ROM).
|
|||
|
; New modifications by Zaphod Beeblebrox of Control Team, Origial
|
|||
|
; Code by Jolly Roger/Int. Tollfree Access
|
|||
|
; Multi-Frequenz-Demon-Dialer for Global Access!!!
|
|||
|
; last update 19.June.1993 12:15.32
|
|||
|
; Code for INTEL 8049 running at 10 Mhz (because timing)
|
|||
|
;
|
|||
|
; How to Operate:
|
|||
|
; ===============
|
|||
|
; Press *0 for samplebank 0 select (DTMF, All 16 Digits).
|
|||
|
; Press *1 for samplebank 1 select (CCITT #5 -R1- *DEFAULT*).
|
|||
|
; Press *2 for samplebank 2 select (CCITT #5 -R2-).
|
|||
|
; Press *3 for CCITT #3 (Not yet implemented!!!).
|
|||
|
; Press *4 for CCITT #4 (2040 Hz/2400 Hz a.k.a 2VF).
|
|||
|
; Press *8 for Trunking Freq #1 Customization Menu.
|
|||
|
; Press *90X to change CCITT #5 R1/R2 M-f Tone Duration.
|
|||
|
; Press *91X to change CCITT #5 R1/R2 M-f Tone Delay.
|
|||
|
; Press *# for special tone simulation mode (Dialtone, Busy & Greenbox).
|
|||
|
; Press **0 to enter a new routing code. The default is KP2+46.
|
|||
|
; Press **1 to enter RAM memory number #1.
|
|||
|
; Press **2 to enter RAM memory number #2.
|
|||
|
; # ends the input and adds ST code if not in DTMF mode.
|
|||
|
;
|
|||
|
; When entering a number on the input line, the first digit must be
|
|||
|
; between 0-3: A "0" means that the prefix in ram should be dialed before
|
|||
|
; the actual number you enter. "1" means that KP1 should be the first tone
|
|||
|
; dialed when the macro is played back. "2" is the same, but KP2 instead of
|
|||
|
; KP1. A ST code is always added at the end of a CCITT number stored in RAM
|
|||
|
; or ROM when it's played back. "3" means that this tone should be ignored
|
|||
|
; and the rest of the dialing should be done in DTMF mode.
|
|||
|
;
|
|||
|
; Press 0 to dial the entered number #1. (without trunk)
|
|||
|
; Press 1 to dial the entered number #2. (without trunk)
|
|||
|
; Press 20-27 for dial in the first phonebook
|
|||
|
; Press 30-37 for dial in the second phonebook
|
|||
|
; Press 4 for 1850 Hz DHLS tone
|
|||
|
; Press 5 for a Redbox "Dime" Tone
|
|||
|
; Press 6 for a Redbox "Quarter" Tone
|
|||
|
; Press 7 to send US Local Trunk-Tone (2600 Hz, 1.5 seconds).is KP2-460.
|
|||
|
; Press 8 to send CCITT International Trunk #1
|
|||
|
; Press 9 to send CCITT International Trunk #2
|
|||
|
; Press # to get into whitebox mode, press again to return to bluebox mode.
|
|||
|
;
|
|||
|
; Example:
|
|||
|
; ========
|
|||
|
; "b46018262804c"
|
|||
|
; Press:* 2 4 6 0 1 8 2 6 2 8 0 4 #
|
|||
|
; or :* 0 1 8 2 6 2 8 0 4 # (b460 will be added for 0)
|
|||
|
; "a08185585636c"
|
|||
|
; Press:* 1 0 8 1 8 5 5 8 5 6 3 6 #
|
|||
|
|
|||
|
; When ist beeps three times:
|
|||
|
; Quarz is ok.
|
|||
|
; Porcessor is ok.
|
|||
|
; All chips on the Sound card are ok.
|
|||
|
|
|||
|
; Press 1,2,3 or 4 when turning on and you get a test of all tones
|
|||
|
; in the sample bank you selected.
|
|||
|
|
|||
|
; Register:
|
|||
|
; =========
|
|||
|
; r0 = adress reg #1. (Input-Line & Dialing Loops).
|
|||
|
; r1 = adress reg #2. (Prefix-Dialing Loop).
|
|||
|
; r2 = counter for wait routine
|
|||
|
; r3 = sound to play
|
|||
|
; r4 = sound pause
|
|||
|
; r5 = sample bank for autodialing
|
|||
|
; r6 = sound length
|
|||
|
; r7 = temporary register
|
|||
|
; r0 II (r24) = unused
|
|||
|
; r1 II (r25) = unused
|
|||
|
; r2 II (r26) = unused
|
|||
|
; r3 II (r27) = unused
|
|||
|
; r4 II (r28) = security code entered status
|
|||
|
; r5 II (r29) = dial duration for C5 R1/R2 M-f Tones
|
|||
|
; r6 II (r30) = dial pause for C5 R1/R2 M-f Tones
|
|||
|
; r7 II (r31) = temporary register II
|
|||
|
; r32-65 = memory for entered number #1 (ends with 32)
|
|||
|
; r66-99 = memory for entered number #2 (ends with 32)
|
|||
|
; r100-115 = memory for entered dialing prefix (ends with 32)
|
|||
|
; r116 = Trunk Select Stage 1
|
|||
|
; r117 = Trunk Duration Stage 1
|
|||
|
; r118 = Trunk Delay Stage 1
|
|||
|
; r119 = Trunk Select Stage 2
|
|||
|
; r120 = Trunk Duration Stage 2
|
|||
|
; r121 = Trunk Delay Stage 2
|
|||
|
; r122 = Trunk Select Stage 3
|
|||
|
; r123 = Trunk Duration Stage 3
|
|||
|
; r124 = Trunk Delay Stage 3
|
|||
|
; r125 = Trunk Select Stage 4
|
|||
|
; r126 = Trunk Duration Stage 4
|
|||
|
; r127 = Trunk Delay Stage 4
|
|||
|
|
|||
|
; codes in the sample rom:
|
|||
|
; the 128Kb rom is divided in 32 2048 large blocks
|
|||
|
|
|||
|
; 00 - "0" DTMF touch tones 10 - "0" CCITT #5 R1
|
|||
|
; 01 - "1" DTMF touch tones 11 - "1" CCITT #5 R1
|
|||
|
; 02 - "2" DTMF touch tones 12 - "2" CCITT #5 R1
|
|||
|
; 03 - "3" DTMF touch tones 13 - "3" CCITT #5 R1
|
|||
|
; 04 - "4" DTMF touch tones 14 - "4" CCITT #5 R1
|
|||
|
; 05 - "5" DTMF touch tones 15 - "5" CCITT #5 R1
|
|||
|
; 06 - "6" DTMF touch tones 16 - "6" CCITT #5 R1
|
|||
|
; 07 - "7" DTMF touch tones 17 - "7" CCITT #5 R1
|
|||
|
; 08 - "8" DTMF touch tones 18 - "8" CCITT #5 R1
|
|||
|
; 09 - "9" DTMF touch tones 19 - "9" CCITT #5 R1
|
|||
|
; 0a - "*" DTMF touch tones 1a - "kp1" CCITT #5 R1
|
|||
|
; 0b - "#" DTMF touch tones 1b - "kp2" CCITT #5 R1
|
|||
|
; 0c - "a" DTMF touch tones 1c - "st" CCITT #5 R1
|
|||
|
; 0d - "b" DTMF touch tones 1d - "C.11" CCITT #5 R1
|
|||
|
; 0e - "c" DTMF touch tones 1e - "C.12" CCITT #5 R1
|
|||
|
; 0f - "d" DTMF touch tones 1f - "DHLS" CCITT #5 R1/R2
|
|||
|
|
|||
|
; 20 - "0" CCITT #5 R2 30 - 2400/2600 Hz
|
|||
|
; 21 - "1" CCITT #5 R2 31 - 2400/2400 Hz
|
|||
|
; 22 - "2" CCITT #5 R2 32 - 2040/2040 Hz
|
|||
|
; 23 - "3" CCITT #5 R2 33 - 2040/2400 Hz
|
|||
|
; 24 - "4" CCITT #5 R2 34 - 2280/2280 Hz
|
|||
|
; 25 - "5" CCITT #5 R2 35 - 2600/2600 Hz
|
|||
|
; 26 - "6" CCITT #5 R2 36 - 2100/2100 Hz
|
|||
|
; 27 - "7" CCITT #5 R2 37 - Spare 2
|
|||
|
; 28 - "8" CCITT #5 R2 38 - 2100/2100 Hz Guard Tone
|
|||
|
; 29 - "9" CCITT #5 R2 39 - 480/620 Hz (US Ringing Tone)
|
|||
|
; 2a - "kp1" CCITT #5 R2 3a - 350/440 Hz (US Dialtone)
|
|||
|
; 2b - "kp2" CCITT #5 R2 3b - 440/480 Hz (US Busy)
|
|||
|
; 2c - "st" CCITT #5 R2 3c - 440/440 Hz (Sw. Dialt & Busy).
|
|||
|
; 2d - "C.11" CCITT #5 R2 3d - 460/460 Hz (German Tone).
|
|||
|
; 2e - "C.12" CCITT #5 R2 3e - 1700/2200 Hz (US/DK Redbox)
|
|||
|
; 2f - "DHLS" CCITT #5 R2 3f - Silence (Empty!!!).
|
|||
|
|
|||
|
; port1: bit 0 = Samplebank Select Low Bit
|
|||
|
; bit 1 = Samplebank Select High Bit
|
|||
|
; bits 2-7 = Rows for keyboard
|
|||
|
; port2: bits 0-3 = Program Address Memory High Address Bits
|
|||
|
; bits 4-7 = select a sample of the sample rom (CCITT or DTMF)
|
|||
|
|
|||
|
;BEGIN OF PAGE $000
|
|||
|
|
|||
|
;Resetroutine:
|
|||
|
nop ; lo
|
|||
|
nop ; hi-pointer to reset ($000)
|
|||
|
nop ; lo
|
|||
|
nop ; hi-pointer to nmi ($000)
|
|||
|
nop
|
|||
|
nop
|
|||
|
nop
|
|||
|
nop
|
|||
|
nop
|
|||
|
|
|||
|
call init
|
|||
|
|
|||
|
;give ok status (beep ,delay 300ms, beep, delay 100ms,long beep)
|
|||
|
;end of reset routine
|
|||
|
|
|||
|
wboxb: mov r4,=75 ; 150 ms delay
|
|||
|
call beep ; beep to show reset
|
|||
|
mov r4,=25 ; set 50 ms delay
|
|||
|
call beep ; beep again
|
|||
|
call beep ; a third beep!
|
|||
|
|
|||
|
;select tone 0, sample-bank 1.
|
|||
|
|
|||
|
mov r3,=%00000000
|
|||
|
mov r5,=%00000001
|
|||
|
|
|||
|
; MainMenu
|
|||
|
; ========
|
|||
|
; **0 = enter routing code
|
|||
|
; **1 = enter number #1
|
|||
|
; **2 = enter number #2
|
|||
|
; *0 = select sample bank 0 (DTMF Whitebox, all 16 tones).
|
|||
|
; *1 = select sample bank 1 (CCITT #5 R1 Tones).
|
|||
|
; *2 = select sample bank 2 (CCITT #5 R2 Tones).
|
|||
|
; *3 = select CCITT #3 mode (Not yet implemented!!!).
|
|||
|
; *4 = select CCITT #4 mode.
|
|||
|
; *9 = select dial/break timing menu.
|
|||
|
; *# = special tone simulation mode.
|
|||
|
; 0 = dial entered number #1
|
|||
|
; 1 = dial entered number #2
|
|||
|
; 20-17, 30-37 phonebook(s)
|
|||
|
; 4 = DHLS tone
|
|||
|
; 5 = Redbox - Dime Tone
|
|||
|
; 6 = Redbox - Quarter Tone
|
|||
|
; 7 = Local Trunk, 1.0s 2600 Hz
|
|||
|
; 8 = Int. Trunk #1
|
|||
|
; 9 = Int. Trunk #2
|
|||
|
; # = whitebox, press again to go back to bluebox.
|
|||
|
|
|||
|
start: mov r4,=0
|
|||
|
call beep ; beep again
|
|||
|
|
|||
|
main: call key ; get a code from key Accu
|
|||
|
jz dial1 ; if it is 0 goto dial
|
|||
|
anl A,=%10111111 ; %x0xxxxxx
|
|||
|
jz command ; if it is 64 command menu 2
|
|||
|
anl A,=%01111111 ; %00xxxxxx
|
|||
|
jz whitebox ; if it is 128 goto wb
|
|||
|
dec a ; so it has to be 1-9
|
|||
|
jz dial2 ; if it is 1
|
|||
|
dec a ; so it has to be 2-9
|
|||
|
jz dialn1 ; if it is 2
|
|||
|
dec a ; so it has to be 3-9
|
|||
|
jz dialn2 ; if it is 3
|
|||
|
dec a ; so it has to be 4-9
|
|||
|
jz dhls ; if it is 4
|
|||
|
dec a ; so it has to be 5-9
|
|||
|
jz dime ; if it is 5
|
|||
|
dec a ; so it has to be 6-9
|
|||
|
jz quart ; if it is 6
|
|||
|
dec a ; so it has to be 7-9
|
|||
|
jz ltrunk ; if it is 7
|
|||
|
dec a ; so it has to be 8,9
|
|||
|
jz trunk1 ; if it is 8
|
|||
|
jmp trunk2 ; so it had to be 9
|
|||
|
|
|||
|
;Input line
|
|||
|
;Press 0-9 to enter a number.
|
|||
|
;Use * to enter special tones (1-6 = A-E, H).
|
|||
|
;Use # to finish and add ST code.
|
|||
|
|
|||
|
enter_r:mov r0,=100 ; set start for routing code
|
|||
|
mov @r0,=32 ; give end code
|
|||
|
jmp enterl ; goto enterl
|
|||
|
|
|||
|
enter_1:mov r0,=32 ; set start for number #1 - 32
|
|||
|
mov @r0,=32 ; give end code
|
|||
|
jmp enterl
|
|||
|
|
|||
|
enter_2:mov r0,=66 ; set start for number #1 - 32
|
|||
|
mov @r0,=32 ; give end code
|
|||
|
jmp enterl
|
|||
|
|
|||
|
|
|||
|
dialn1: mov A,r5
|
|||
|
mov r7,A
|
|||
|
call key ; get a key 0-7
|
|||
|
anl A,=7 ; %00000111
|
|||
|
jmp dialn ; goto dial
|
|||
|
|
|||
|
dialn2: mov A,r5
|
|||
|
mov r7,A
|
|||
|
call key ; get a key 8-15 (0-7)
|
|||
|
orl A,=8 ; %00001000
|
|||
|
|
|||
|
;dial a number from p3 rom out of
|
|||
|
|
|||
|
dialn: swap A ; a=a*16
|
|||
|
mov r0,a ; put number to r0
|
|||
|
sel rb1
|
|||
|
mov a,r5
|
|||
|
sel rb0
|
|||
|
mov r6,a
|
|||
|
sel rb1
|
|||
|
mov a,r6
|
|||
|
sel rb0
|
|||
|
mov r4,a
|
|||
|
mov a,r0
|
|||
|
movp3 a,@A ; hole ersten wert
|
|||
|
inc r0 ; increment position in rom
|
|||
|
jz route1 ; when 0 then dial prefix
|
|||
|
dec a
|
|||
|
mov r3,=10 ; Sample pointer --> KP1
|
|||
|
jz touchn ; If 1 - Dial KP1+Number
|
|||
|
dec a
|
|||
|
mov r3,=11 ; Sample pointer --> KP2
|
|||
|
jz touchn ; If 2 - Dial KP2+Number
|
|||
|
dec a
|
|||
|
jnz main ; If 3 - Dial in DTMF, else go main.
|
|||
|
mov r4,=40 ; 80 ms pause between DTMF's
|
|||
|
mov r6,=40 ; 80 ms duration for DTMF's.
|
|||
|
mov A,=0
|
|||
|
mov r5,A ; Select DTMF Sample-Bank
|
|||
|
jmp rbackn
|
|||
|
|
|||
|
touchn: call sound ; Play the sample
|
|||
|
rbackn: mov a,r0 ; get position in rom
|
|||
|
movp3 a,@A ; Fetch next tone
|
|||
|
inc r0 ; increment position in rom
|
|||
|
mov r3,a ; put next sample in r3
|
|||
|
jz touchn ; 0 is also a tone we should output!
|
|||
|
anl A,=%11011111 ; If it's $20 - End of signalling!
|
|||
|
jz etouch ; We have to check if we should play ST code now...
|
|||
|
jmp touchn
|
|||
|
|
|||
|
;dial a number from ram (r32 or r66).
|
|||
|
|
|||
|
dial1: mov r0,=32 ; Dial RAM Macro #1
|
|||
|
jmp dial
|
|||
|
|
|||
|
dial2: mov r0,=66 ; Dial RAM Macro #2
|
|||
|
|
|||
|
dial: mov A,r5
|
|||
|
jz mfdial
|
|||
|
anl A,=%11111011
|
|||
|
jnz mfdial
|
|||
|
jmp c4_dial
|
|||
|
|
|||
|
mfdial: sel rb1
|
|||
|
mov a,r5
|
|||
|
sel rb0
|
|||
|
mov r6,a
|
|||
|
sel rb1
|
|||
|
mov a,r6
|
|||
|
sel rb0
|
|||
|
mov r4,a
|
|||
|
mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov a,@r0 ; hole ersten wert
|
|||
|
inc r0 ; increment position in ram
|
|||
|
jz route2 ; If 0 - Dial Routing
|
|||
|
mov r3,=10 ; Sample pointer --> KP1
|
|||
|
dec a
|
|||
|
jz touch ; If 1 - Dial KP1+Number
|
|||
|
dec a
|
|||
|
mov r3,=11 ; Sample Pointer --> KP2
|
|||
|
jz touch ; If 2 - Dial KP2+Number
|
|||
|
dec a
|
|||
|
jnz main ; If 3 - Dial in DTMF, else go main.
|
|||
|
mov r4,=40 ; 80 ms pause between DTMF's
|
|||
|
mov r6,=40 ; 80 ms duration of DTMF's
|
|||
|
mov A,=0
|
|||
|
mov r5,A
|
|||
|
jmp rback
|
|||
|
|
|||
|
touch: call sound ; play the sample
|
|||
|
rback: mov a,@r0 ; fetch the next tone
|
|||
|
inc r0
|
|||
|
mov r3,a
|
|||
|
jz touch ; 0 is also a tone we should play!!
|
|||
|
anl A,=%11011111 ; check for $20 - End of signalling
|
|||
|
jnz touch ; if no end code, goto output
|
|||
|
etouch: mov A,r5
|
|||
|
jz endsig ; Don't add ST code for DTMF mode.
|
|||
|
mov r3,=12 ; Sample pointer --> ST code
|
|||
|
call sound ; play the sample
|
|||
|
endsig: mov A,r7
|
|||
|
mov r5,A
|
|||
|
jmp main ; end to main
|
|||
|
|
|||
|
|
|||
|
route1: call dialr ; and wait
|
|||
|
jmp rbackn ; end to main
|
|||
|
|
|||
|
route2: call dialr ; and wait
|
|||
|
jmp rback ; end to main
|
|||
|
|
|||
|
trunk1: jmp trunk1n
|
|||
|
trunk2: jmp trunk2n
|
|||
|
ltrunk: jmp ltrunkn
|
|||
|
dime: jmp dime1
|
|||
|
quart: jmp quart1
|
|||
|
dhls: jmp dhls2
|
|||
|
whitebox:jmp white
|
|||
|
command:jmp command2
|
|||
|
|
|||
|
PAGE 1
|
|||
|
|
|||
|
;Enter number to ram or select sample bank for bluebox mode.
|
|||
|
;Press 0-3 for the different sample-banks, and # to enter
|
|||
|
;the special tone simulation mode.
|
|||
|
|
|||
|
command2:call key
|
|||
|
jz bank0 ; If it's 0 - Samplebank 0 select.
|
|||
|
anl A,=%10111111 ; If * was pressed check for inputline.
|
|||
|
jz enterm
|
|||
|
anl a,=%01111111 ; If # was pressed goto simulation mode.
|
|||
|
jz simtj
|
|||
|
dec a
|
|||
|
jz bank1 ; If it's 1 - Samplebank 1 select.
|
|||
|
dec a
|
|||
|
jz bank2 ; If it's 2 - Samplebank 2 select.
|
|||
|
dec a
|
|||
|
jz ccitt3 ; If it's 3 - CCITT #3 Mode Enable.
|
|||
|
dec a
|
|||
|
jz ccitt4 ; If it's 4 - CCITT #4 Mode Enable.
|
|||
|
dec a
|
|||
|
jz command2 ; 5
|
|||
|
dec a
|
|||
|
jz command2 ; 6
|
|||
|
dec a
|
|||
|
jz command2 ; 7
|
|||
|
dec a
|
|||
|
jz trunktj ; If it's 8 - Trunking Timing Menu.
|
|||
|
dec a
|
|||
|
jz timej ; If it's 9 - Dialing Timing Menu.
|
|||
|
jmp command2
|
|||
|
|
|||
|
bank0: mov A,=0
|
|||
|
jmp banks
|
|||
|
|
|||
|
bank1: mov A,=1
|
|||
|
jmp banks
|
|||
|
|
|||
|
bank2: mov A,=2
|
|||
|
jmp banks
|
|||
|
|
|||
|
ccitt3: mov A,=3
|
|||
|
jmp banks
|
|||
|
|
|||
|
ccitt4: mov A,=4
|
|||
|
|
|||
|
banks: mov r5,A
|
|||
|
mov r4,=0
|
|||
|
call beep
|
|||
|
jmp start
|
|||
|
|
|||
|
silence:mov A,=%11111111
|
|||
|
outl p1,A
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
ret
|
|||
|
|
|||
|
enterm: call key
|
|||
|
anl A,=%00000011
|
|||
|
jz enterr
|
|||
|
dec a
|
|||
|
jz enter1
|
|||
|
jmp enter2
|
|||
|
|
|||
|
enterl: mov r4,=0
|
|||
|
call beep ; give message, that * was pushed
|
|||
|
call beep
|
|||
|
notspec:call key ; get a key
|
|||
|
jz write ; test 0
|
|||
|
anl A,=%10111111 ; %x0xxxxxx
|
|||
|
jz special ; * = Enter special tone (1-6 = A-E, H)
|
|||
|
anl A,=%01111111 ; %00xxxxxx
|
|||
|
jz startj ; test #
|
|||
|
write: mov @r0,a ; if 0-9, write number
|
|||
|
inc r0 ; go to next
|
|||
|
mov @r0,=32 ; set end
|
|||
|
jmp enterl ; goto enterl
|
|||
|
|
|||
|
special:call key
|
|||
|
anl A,=%00000111
|
|||
|
jz notspec
|
|||
|
add A,=9
|
|||
|
jmp write
|
|||
|
|
|||
|
;Whitebox routine
|
|||
|
;press keys as log as the tone has to play
|
|||
|
; 1=$10 2=$20 3=$30
|
|||
|
; 4=$40 5=$50 6=$60
|
|||
|
; 7=$70 8=$80 9=$90
|
|||
|
; *=$a0 0=$00 #=$b0
|
|||
|
; A=$c0 B=$d0 C=$e0
|
|||
|
; D=$f0
|
|||
|
|
|||
|
white: mov r4,=10
|
|||
|
mov r6,=20
|
|||
|
call beep
|
|||
|
call beep
|
|||
|
mov a,=%00000011
|
|||
|
outl p1,A ; set all rows to output
|
|||
|
whitell:call release
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
whitel: mov A,=%11111011 ; set bit 2 low
|
|||
|
outl p1,A
|
|||
|
mov a,=$10
|
|||
|
jnt0 wkey ; jump if key is pressed ...
|
|||
|
mov a,=$70 ; .....
|
|||
|
jnt1 wkey
|
|||
|
mov a,=%11110111
|
|||
|
outl p1,A
|
|||
|
mov a,=$20
|
|||
|
jnt0 wkey
|
|||
|
mov a,=$80
|
|||
|
jnt1 wkey
|
|||
|
mov a,=%11101111
|
|||
|
outl p1,A
|
|||
|
mov a,=$30
|
|||
|
jnt0 wkey
|
|||
|
mov a,=$90
|
|||
|
jnt1 wkey
|
|||
|
mov a,=%11011111
|
|||
|
outl p1,A
|
|||
|
mov a,=$40
|
|||
|
jnt0 wkey
|
|||
|
jnt1 ffake
|
|||
|
mov a,=%10111111
|
|||
|
outl p1,A
|
|||
|
mov a,=$50
|
|||
|
jnt0 wkey
|
|||
|
mov a,=$00
|
|||
|
jnt1 wkey
|
|||
|
mov a,=%01111111
|
|||
|
outl p1,A
|
|||
|
mov a,=$60
|
|||
|
jnt0 wkey
|
|||
|
jt1 whitel ; start over if no key is pressed
|
|||
|
sel rb1
|
|||
|
mov A,r4
|
|||
|
jz fake2
|
|||
|
sel rb0
|
|||
|
jmp wboxb ; return to main menu.
|
|||
|
ffake: sel rb1
|
|||
|
mov A,r4
|
|||
|
jz fake1
|
|||
|
sel rb0
|
|||
|
jmp wkey2j
|
|||
|
fake1: sel rb0
|
|||
|
mov A,=$a0
|
|||
|
jmp wkey
|
|||
|
fake2: sel rb0
|
|||
|
mov A,=$b0
|
|||
|
wkey: outl p2,A ; set tone
|
|||
|
mov a,=%00000000 ; whitebox tones on
|
|||
|
outl p1,A
|
|||
|
jmp whitell
|
|||
|
|
|||
|
;wait routine for waiting 2*A ms (a=65: 130ms) (set a to 0, to get 512ms delay)
|
|||
|
wait: mov r2,=166 ; set loop of 5+166*8 cycles
|
|||
|
wait1: nop ; delay 1 cycle
|
|||
|
nop ; delay 1 cycle
|
|||
|
nop ; delay 1 cycle
|
|||
|
nop ; delay 1 cycle
|
|||
|
nop ; delay 1 cycle
|
|||
|
nop ; delay 1 cycle
|
|||
|
djnz r2,wait1 ; delay 2 cycles
|
|||
|
dec a ; after 1 #s, if a>0
|
|||
|
jnz wait ; goto wait again
|
|||
|
ret ; end of wait
|
|||
|
|
|||
|
wkey2j: jmp wkey2
|
|||
|
enter1: jmp enter_1
|
|||
|
enter2: jmp enter_2
|
|||
|
enterr: jmp enter_r
|
|||
|
simtj: jmp simt
|
|||
|
startj: jmp start
|
|||
|
timej: jmp timing
|
|||
|
trunktj:jmp trunkt
|
|||
|
|
|||
|
PAGE 2
|
|||
|
|
|||
|
red: mov r7,A
|
|||
|
mov r3,=$0e ; select sound 14
|
|||
|
mov A,r5
|
|||
|
mov r1,A
|
|||
|
mov r5,=%00000011 ; select sample bank 03
|
|||
|
call sound ; play tone
|
|||
|
mov A,r1
|
|||
|
mov r5,A
|
|||
|
mov A,r7
|
|||
|
dec A
|
|||
|
jnz red
|
|||
|
jmp main
|
|||
|
|
|||
|
dime1: mov A,=2
|
|||
|
mov r4,=33
|
|||
|
mov r6,=33
|
|||
|
jmp red
|
|||
|
|
|||
|
quart1: mov A,=5
|
|||
|
mov r4,=17
|
|||
|
mov r6,=17
|
|||
|
jmp red
|
|||
|
|
|||
|
;Enter key
|
|||
|
;gives The Code of pressed Key in Accu and waits for key press.
|
|||
|
;bevore it waits for releasing the key.
|
|||
|
; 1=$01 2=$02 3=$03
|
|||
|
; 4=$04 5=$05 6=$06
|
|||
|
; 7=$07 8=$08 9=$09
|
|||
|
; *=$40 0=$00 #=$80
|
|||
|
|
|||
|
key: call releaseb
|
|||
|
keyl: mov a,=%11111011 ; set bit 2 low
|
|||
|
outl p1,A
|
|||
|
mov a,=1
|
|||
|
jnt0 kkey ; jump if key is pressed ...
|
|||
|
mov a,=7 ; .....
|
|||
|
jnt1 kkey
|
|||
|
mov a,=%11110111
|
|||
|
outl p1,A
|
|||
|
mov a,=2
|
|||
|
jnt0 kkey
|
|||
|
mov a,=8
|
|||
|
jnt1 kkey
|
|||
|
mov a,=%11101111
|
|||
|
outl p1,A
|
|||
|
mov a,=3
|
|||
|
jnt0 kkey
|
|||
|
mov a,=9
|
|||
|
jnt1 kkey
|
|||
|
mov a,=%11011111
|
|||
|
outl p1,A
|
|||
|
mov a,=4
|
|||
|
jnt0 kkey
|
|||
|
mov a,=$40
|
|||
|
jnt1 kkey
|
|||
|
mov a,=%10111111
|
|||
|
outl p1,A
|
|||
|
mov a,=5
|
|||
|
jnt0 kkey
|
|||
|
mov a,=0
|
|||
|
jnt1 kkey
|
|||
|
mov a,=%01111111
|
|||
|
outl p1,A
|
|||
|
mov a,=6
|
|||
|
jnt0 kkey
|
|||
|
mov a,=$80
|
|||
|
jnt1 kkey
|
|||
|
jmp keyl ; start over if no key is pressed
|
|||
|
kkey: ret ; ret acc.
|
|||
|
|
|||
|
;test release key
|
|||
|
|
|||
|
releaseb:mov a,=%00000011
|
|||
|
outl p1,A ; set all rows to output
|
|||
|
release:jnt0 release ; wait until there is no key pressed
|
|||
|
jnt1 release ; (both lines)
|
|||
|
mov a,=37 ; delay 75ms
|
|||
|
call wait
|
|||
|
jnt0 release ; wait if there is no key pressed
|
|||
|
jnt1 release ; (both lines)
|
|||
|
ret
|
|||
|
|
|||
|
;make a beep sound with 30ms delay
|
|||
|
|
|||
|
beep: mov r3,=$01 ; select sound 01, Bank 3 (good beep sound)
|
|||
|
mov r6,=15 ; 30 ms beep
|
|||
|
mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov r5,=%00000011 ; set sound dma
|
|||
|
call sound ; and wait
|
|||
|
mov A,r7
|
|||
|
mov r5,A
|
|||
|
ret
|
|||
|
|
|||
|
;Sound routine
|
|||
|
;r3 represents the sound which is in the sample rom.
|
|||
|
;r4 is the pause after the sound, r5 the sample bank & r6 the length
|
|||
|
|
|||
|
sound: mov A,r6
|
|||
|
jz nowait
|
|||
|
mov A,r3 ; get sample to a
|
|||
|
swap A ; a=a*16
|
|||
|
outl p2,A ; send sample
|
|||
|
mov A,r5 ; tone bank select
|
|||
|
anl a,=%00000011 ; only banks 0-3 are valid
|
|||
|
outl p1,A
|
|||
|
mov A,r6 ; use R6/2 ms to delay
|
|||
|
call wait ; wait
|
|||
|
call silence ; stop sound
|
|||
|
mov A,r4 ; pause
|
|||
|
jz nowait
|
|||
|
call wait
|
|||
|
nowait: ret ; end of sound
|
|||
|
|
|||
|
;dial prefix from ram (r100)
|
|||
|
|
|||
|
dialr: mov r1,=100 ; start
|
|||
|
mov a,@r1 ; hole ersten wert
|
|||
|
inc r1 ; increment position in ram
|
|||
|
dec a
|
|||
|
mov r3,=10
|
|||
|
jz touchr
|
|||
|
dec a
|
|||
|
mov r3,=11
|
|||
|
jz touchr
|
|||
|
dec a
|
|||
|
jnz dialr2
|
|||
|
mov r4,=40 ; 80 ms pause between DTMF's
|
|||
|
mov r6,=40 ; 80 ms duration for DTMF's.
|
|||
|
mov r5,=0 ; Select DTMF Samplebank.
|
|||
|
jmp touchr2
|
|||
|
touchr: call sound ; send the touchtone
|
|||
|
touchr2:mov a,@r1 ; hole n<>chsten wert
|
|||
|
inc r1
|
|||
|
mov r3,a
|
|||
|
jz touchr ; gebe null aus
|
|||
|
anl A,=%11011111 ; kein code eingegeben
|
|||
|
jnz touchr ; if no end code, goto output
|
|||
|
dialr2: ret
|
|||
|
|
|||
|
wkey2: call releaseb
|
|||
|
wkey2l: mov A,=%11111011
|
|||
|
outl p1,A
|
|||
|
mov A,=$a0
|
|||
|
jnt0 wkeyj
|
|||
|
mov A,=%11110111
|
|||
|
outl p1,A
|
|||
|
mov A,=$b0
|
|||
|
jnt0 wkeyj
|
|||
|
mov A,=%11101111
|
|||
|
outl p1,A
|
|||
|
mov A,=$c0
|
|||
|
jnt0 wkeyj
|
|||
|
mov A,=%11011111
|
|||
|
outl p1,A
|
|||
|
mov A,=$d0
|
|||
|
jnt0 wkeyj
|
|||
|
mov A,=%10111111
|
|||
|
outl p1,A
|
|||
|
mov A,=$e0
|
|||
|
jnt0 wkeyj
|
|||
|
mov A,=%01111111
|
|||
|
outl p1,A
|
|||
|
mov A,=$f0
|
|||
|
jt0 wkey2l
|
|||
|
|
|||
|
wkeyj: jmp wkey
|
|||
|
whitej: jmp whitel
|
|||
|
|
|||
|
|
|||
|
page 3
|
|||
|
|
|||
|
; Page 3 contains the 16 stored phonenumber ($300-$3ff).
|
|||
|
|
|||
|
page 4
|
|||
|
|
|||
|
; Special tone simulation mode.
|
|||
|
; =============================
|
|||
|
;
|
|||
|
; 1 = Swedish Dialtone.
|
|||
|
; 2 = Swedish Busy Tone.
|
|||
|
; 3 = Swedish Ringtone.
|
|||
|
; 4 = US Dialtone
|
|||
|
; 5 = US Busy Tone.
|
|||
|
; 6 = US Ringtone.
|
|||
|
; 7 = Swedish All Trunks Busy
|
|||
|
; 8 = US All Trunks Busy
|
|||
|
; 9 = Greenbox Ringback. (700 & 1700 Hz, 1 sec).
|
|||
|
; 0 = Greenbox Coin Return (1100 & 1700 Hz, 1 sec).
|
|||
|
; * = 2600 Hz wink (90 ms).
|
|||
|
; # = Jump back to main menu.
|
|||
|
|
|||
|
simt: mov a,=%00000011
|
|||
|
outl p1,A
|
|||
|
siml1: call release
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
siml2: mov A,=%11111011 ; 1 - Swedish Dialtone
|
|||
|
outl p1,A
|
|||
|
mov a,=$c0
|
|||
|
jnt0 skey
|
|||
|
jnt1 sbusy ; 7 - Swedish Slow-Busy
|
|||
|
mov A,=%11110111 ; 2 - Swedish Busy
|
|||
|
outl p1,A
|
|||
|
mov A,=$c0
|
|||
|
jnt0 fbusy
|
|||
|
mov A,=$b0
|
|||
|
jnt1 fbusy ; 8 - US Fast-Busy
|
|||
|
mov a,=%11101111 ; 3 - Swedish Ringtone
|
|||
|
outl p1,A
|
|||
|
mov a,=$c0
|
|||
|
jnt0 ringl
|
|||
|
jnt1 rngbck ; 9 - Greenbox Ringback
|
|||
|
mov a,=%11011111 ; 4 - US Dialtone
|
|||
|
outl p1,A
|
|||
|
mov a,=$a0
|
|||
|
jnt0 skey
|
|||
|
jnt1 wink26 ; * - 2600 Wink (90 ms).
|
|||
|
mov a,=%10111111 ; 5 - US Busy
|
|||
|
outl p1,A
|
|||
|
mov a,=$b0
|
|||
|
jnt0 busy
|
|||
|
jnt1 cretn ; 0 - Greenbox Coin Return
|
|||
|
mov a,=%01111111 ; 6 - US Ringtone
|
|||
|
outl p1,A
|
|||
|
mov a,=$90
|
|||
|
jnt0 ringl
|
|||
|
jt1 siml2 ; start over if no key is pressed
|
|||
|
jmp wboxb ; return to main menu.
|
|||
|
skey: outl p2,A ; set tone
|
|||
|
mov a,=%00000011 ; simulation tones on
|
|||
|
outl p1,A
|
|||
|
jmp siml1
|
|||
|
|
|||
|
busy: mov r3,=250
|
|||
|
jmp busyl
|
|||
|
fbusy: mov r3,=125
|
|||
|
busyl: outl p2,A
|
|||
|
mov r7,A
|
|||
|
mov A,r3
|
|||
|
call wait
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
mov A,r3
|
|||
|
call wait
|
|||
|
mov A,r7
|
|||
|
jnt0 busyl
|
|||
|
jnt1 busyl
|
|||
|
jmp simt
|
|||
|
|
|||
|
sbusy: outl p2,A
|
|||
|
mov r7,A
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,r7
|
|||
|
jnt0 sbusy
|
|||
|
jnt1 sbusy
|
|||
|
jmp simt
|
|||
|
|
|||
|
ringl: outl p2,A
|
|||
|
mov r7,A
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,r7
|
|||
|
jnt0 ringl
|
|||
|
jnt1 ringl
|
|||
|
jmp simt
|
|||
|
|
|||
|
wink26: mov A,=$50
|
|||
|
outl p2,A
|
|||
|
mov A,=45
|
|||
|
call wait
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
jmp simt
|
|||
|
|
|||
|
cretn: mov A,=$c0
|
|||
|
outl p2,A
|
|||
|
mov A,=%00000001
|
|||
|
outl p1,A
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
jmp simt
|
|||
|
|
|||
|
rngbck: mov A,=$a0
|
|||
|
outl p2,A
|
|||
|
mov A,=%00000001
|
|||
|
outl p1,A
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=250
|
|||
|
call wait
|
|||
|
mov A,=$f0
|
|||
|
outl p2,A
|
|||
|
jmp simt
|
|||
|
|
|||
|
ltrunkn:mov A,=$50 ; select sound 05
|
|||
|
outl p2,a ; no pause
|
|||
|
mov A,=%11111111 ; set sample bank 03
|
|||
|
outl p1,A
|
|||
|
call releaseb
|
|||
|
call silence
|
|||
|
jmp main ; goto main loop
|
|||
|
|
|||
|
init: sel rb0 ; use old register
|
|||
|
orl p1,=%11111111 ; %11111111 all bits for output
|
|||
|
orl p2,=%11111111 ; %11111111 all bits for output
|
|||
|
|
|||
|
mov a,=%11111000
|
|||
|
outl p1,a ; select 1 key and whitebox-mode
|
|||
|
jnt0 selftj ; if 1 is pressed while turning on goto selftest
|
|||
|
mov a,=%11110101
|
|||
|
outl p1,a ; select 2 key and bluebox-mode CCITT #5 R1
|
|||
|
jnt0 selftj ; if 2 is pressed while turning on goto selftest
|
|||
|
mov a,=%11101110
|
|||
|
outl p1,a ; select 3 key and bluebox-mode CCITT #5 R2
|
|||
|
jnt0 selftj ; if 3 is pressed while turning on goto selftest
|
|||
|
mov a,=%11011111
|
|||
|
outl p1,a ; select 4 key and special signalling tones & trunks.
|
|||
|
jnt0 selftj ; if 4 is pressed while turning on goto selftest
|
|||
|
jmp init2
|
|||
|
|
|||
|
selftj: jmp selftst
|
|||
|
|
|||
|
page 5
|
|||
|
|
|||
|
c4_dial:mov a,@r0 ; hole ersten wert
|
|||
|
inc r0 ; increment position in ram
|
|||
|
jz mainj ; If 0 - Dial Routing
|
|||
|
dec a
|
|||
|
jz c4_kp1 ; If 1 - Dial KP1+Number
|
|||
|
dec a
|
|||
|
jz c4_kp2 ; If 2 - Dial KP2+Number
|
|||
|
mainj: jmp main
|
|||
|
|
|||
|
c4_tch: anl a,=%00000111
|
|||
|
rl a
|
|||
|
rl a
|
|||
|
add a,=192
|
|||
|
mov r1,a
|
|||
|
mov r4,=18
|
|||
|
mov r5,=$03
|
|||
|
mov r6,=18
|
|||
|
movp a,@a
|
|||
|
mov r3,a
|
|||
|
call sound
|
|||
|
inc r1
|
|||
|
mov a,r1
|
|||
|
movp a,@a
|
|||
|
mov r3,a
|
|||
|
call sound
|
|||
|
inc r1
|
|||
|
mov a,r1
|
|||
|
movp a,@a
|
|||
|
mov r3,a
|
|||
|
call sound
|
|||
|
inc r1
|
|||
|
mov a,r1
|
|||
|
movp a,@a
|
|||
|
mov r3,a
|
|||
|
call sound
|
|||
|
mov a,=70 ; 140 ms interdigit delay.
|
|||
|
call wait
|
|||
|
c4_rbk: mov a,@r0 ; fetch the next tone
|
|||
|
inc r0
|
|||
|
jz c4_tch ; 0 is also a tone we should play!!
|
|||
|
anl A,=%11011111 ; check for $20 - End of signalling
|
|||
|
jnz c4_tch ; if no end code, goto output
|
|||
|
mov r3,=$02
|
|||
|
call sound
|
|||
|
call sound
|
|||
|
call sound
|
|||
|
call sound
|
|||
|
c4_end: mov A,r7
|
|||
|
mov r5,A
|
|||
|
jmp main ; end to main
|
|||
|
|
|||
|
c4_kp1: mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov r4,=0 ; Delay 0
|
|||
|
mov r5,=3 ; Samplebank 3
|
|||
|
mov r3,=$03 ; Sample #03 2040/2400 Hz
|
|||
|
mov r6,=75 ; Play it for 150 ms
|
|||
|
call sound
|
|||
|
mov r3,=$02 ; Sample #02 2040/2040 Hz
|
|||
|
mov r4,=70 ; 140 ms delay
|
|||
|
mov r6,=50 ; Play it for 100 ms
|
|||
|
call sound
|
|||
|
jmp c4_rbk
|
|||
|
|
|||
|
c4_kp2: mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov r4,=0 ; Delay 0
|
|||
|
mov r5,=3 ; Samplebank 3
|
|||
|
mov r3,=$03 ; Sample #03 2040/2400 Hz
|
|||
|
mov r6,=75 ; Play it for 150 ms
|
|||
|
call sound
|
|||
|
mov r3,=$01 ; Sample #02 2400/2400 Hz
|
|||
|
mov r4,=70 ; 140 ms delay
|
|||
|
mov r6,=50 ; Play it for 100 ms
|
|||
|
call sound
|
|||
|
jmp c4_rbk
|
|||
|
|
|||
|
c4_clr: mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov r4,=0 ; Delay 0
|
|||
|
mov r5,=3 ; Samplebank 3
|
|||
|
mov r3,=$03 ; Sample #03 2040/2400 Hz
|
|||
|
mov r6,=75 ; Play it for 150 ms
|
|||
|
call sound
|
|||
|
mov r3,=$02 ; Sample #02 2040/2040 Hz
|
|||
|
mov r4,=60 ; 120 ms delay
|
|||
|
mov r6,=175 ; Play it for 350 ms
|
|||
|
call sound
|
|||
|
mov A,r7
|
|||
|
mov r5,A
|
|||
|
jmp main
|
|||
|
|
|||
|
c4_xfr: mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov r4,=0 ; Delay 0
|
|||
|
mov r5,=3 ; Samplebank 3
|
|||
|
mov r3,=$03 ; Sample #03 2040/2400 Hz
|
|||
|
mov r6,=75 ; Play it for 150 ms
|
|||
|
call sound
|
|||
|
mov r3,=$01 ; Sample #02 2400/2400 Hz
|
|||
|
mov r4,=60 ; 120 ms delay
|
|||
|
mov r6,=175 ; Play it for 350 ms
|
|||
|
call sound
|
|||
|
mov A,r7
|
|||
|
mov r5,A
|
|||
|
jmp main
|
|||
|
|
|||
|
dhls2: mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov r5,=1 ; Samplebank 1
|
|||
|
mov r3,=$0f ; Sample #15 DHLS Tone.
|
|||
|
mov r6,=250 ; Wait 0.5s
|
|||
|
call sound
|
|||
|
mov A,r7
|
|||
|
mov r5,A
|
|||
|
jmp main
|
|||
|
|
|||
|
page 6
|
|||
|
|
|||
|
; Dialing Timing sub-menu.
|
|||
|
; ========================
|
|||
|
; *90X = Change M-f Tone Duration, X=20 ms steps.
|
|||
|
; *91X = Change M-f Tone Delay, X=20 ms steps.
|
|||
|
;
|
|||
|
; 0 = 000 ms 1 = 020 ms 2 = 040 ms
|
|||
|
; 3 = 060 ms 4 = 080 ms 5 = 100 ms
|
|||
|
; 6 = 120 ms 7 = 140 ms 8 = 160 ms
|
|||
|
; 9 = 180 ms * = 250 ms # = 500 ms
|
|||
|
|
|||
|
timing: call beep
|
|||
|
call key
|
|||
|
jz mf_dur
|
|||
|
anl A,=%11111110
|
|||
|
jz mf_del
|
|||
|
t_mainj:sel rb0
|
|||
|
jmp main
|
|||
|
|
|||
|
mf_dur: call time_ch
|
|||
|
sel rb1
|
|||
|
mov r5,A
|
|||
|
sel rb0
|
|||
|
call beep
|
|||
|
jmp main
|
|||
|
|
|||
|
mf_del: call time_ch
|
|||
|
sel rb1
|
|||
|
mov r6,A
|
|||
|
sel rb0
|
|||
|
call beep
|
|||
|
jmp main
|
|||
|
|
|||
|
time_ch:call beep
|
|||
|
call key
|
|||
|
jnz ch_time
|
|||
|
clr a
|
|||
|
jmp mfdend
|
|||
|
ch_time:anl A,=%10111111
|
|||
|
jnz not_64
|
|||
|
mov A,=$7d
|
|||
|
jmp mfdend
|
|||
|
not_64: anl A,=%01111111
|
|||
|
jnz not_128
|
|||
|
mov A,=$fa
|
|||
|
jmp mfdend
|
|||
|
not_128:mov r7,a
|
|||
|
clr a
|
|||
|
t_loop2:add a,=10
|
|||
|
djnz r7,t_loop2
|
|||
|
mfdend: ret
|
|||
|
|
|||
|
; Trunking Timing sub-menu.
|
|||
|
; =========================
|
|||
|
; *80X = Change Trunk Tone #1 Duration, X=20 ms steps.
|
|||
|
; *81X = Change Trunk Tone #2 Duration, X=20 ms steps.
|
|||
|
; *82X = Change Trunk Tone #3 Duration, X=20 ms steps.
|
|||
|
; *83X = Change Trunk Tone #4 Duration, X=20 ms steps.
|
|||
|
; *84X = Change Trunk Tone #1 Delay, X=20 ms steps.
|
|||
|
; *85X = Change Trunk Tone #2 Delay, X=20 ms steps.
|
|||
|
; *86X = Change Trunk Tone #3 Delay, X=20 ms steps.
|
|||
|
; *87X = Change Trunk Tone #4 Delay, X=20 ms steps.
|
|||
|
; *88X = Change Trunk Tone #1 Sample, X=0-15. (#=Skip, no tone!!!)
|
|||
|
; *89X = Change Trunk Tone #2 Sample, X=0-15. (#=Skip, no tone!!!)
|
|||
|
; *8*X = Change Trunk Tone #3 Sample, X=0-15. (#=Skip, no tone!!!)
|
|||
|
; *8#X = Change Trunk Tone #4 Sample, X=0-15. (#=Skip, no tone!!!)
|
|||
|
;
|
|||
|
; 0 = 000 ms 1 = 020 ms 2 = 040 ms
|
|||
|
; 3 = 060 ms 4 = 080 ms 5 = 100 ms
|
|||
|
; 6 = 120 ms 7 = 140 ms 8 = 160 ms
|
|||
|
; 9 = 180 ms * = 250 ms # = 500 ms
|
|||
|
|
|||
|
trunkt: call beep
|
|||
|
call key
|
|||
|
jz tt1dur
|
|||
|
anl A,=%01111111
|
|||
|
jz tt4splj
|
|||
|
anl A,=%10111111
|
|||
|
jz tt3splj
|
|||
|
dec a
|
|||
|
jz tt2dur
|
|||
|
dec a
|
|||
|
jz tt3dur
|
|||
|
dec a
|
|||
|
jz tt4dur
|
|||
|
dec a
|
|||
|
jz tt1del
|
|||
|
dec a
|
|||
|
jz tt2del
|
|||
|
dec a
|
|||
|
jz tt3del
|
|||
|
dec a
|
|||
|
jz tt4del
|
|||
|
dec a
|
|||
|
jz tt1splj
|
|||
|
dec a
|
|||
|
jz tt2splj
|
|||
|
trmainj:sel rb0
|
|||
|
call beep
|
|||
|
jmp main
|
|||
|
|
|||
|
ttim: call time_ch
|
|||
|
mov @r0,a
|
|||
|
ret
|
|||
|
|
|||
|
tt_spl: call key
|
|||
|
jz notten
|
|||
|
anl A,=%01111111
|
|||
|
jnz nquit
|
|||
|
mov A,=$0f
|
|||
|
nquit: anl A,=%10111111
|
|||
|
jnz notten
|
|||
|
mov A,=$0a
|
|||
|
notten: mov @r0,A
|
|||
|
ret
|
|||
|
|
|||
|
tt1dur: mov r0,=116
|
|||
|
call ttim
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt2dur: mov r0,=117
|
|||
|
call ttim
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt3dur: mov r0,=118
|
|||
|
call ttim
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt4dur: mov r0,=119
|
|||
|
call ttim
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt1del: mov r0,=120
|
|||
|
call ttim
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt2del: mov r0,=121
|
|||
|
call ttim
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt3del: mov r0,=122
|
|||
|
call ttim
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt4del: mov r0,=123
|
|||
|
call ttim
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt1splj:mov r0,=124
|
|||
|
call tt_spl
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt2splj:mov r0,=125
|
|||
|
call tt_spl
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt3splj:mov r0,=126
|
|||
|
call tt_spl
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
tt4splj:mov r0,=127
|
|||
|
call tt_spl
|
|||
|
jmp trmainj
|
|||
|
|
|||
|
;Testmode: All tones will be played!!!
|
|||
|
|
|||
|
selftst:mov r5,a
|
|||
|
clr a
|
|||
|
mov a,r3
|
|||
|
mov a,=250
|
|||
|
mov r4,a
|
|||
|
mov r6,a
|
|||
|
testloop:
|
|||
|
call sound
|
|||
|
mov a,r3 ;get it back
|
|||
|
add a,=%00010000 ;next sample
|
|||
|
mov r3,a ;keep it
|
|||
|
jmp testloop ;loop
|
|||
|
|
|||
|
init2: mov a,r5 ; Test M-f Sample Bank is greater than 7
|
|||
|
anl a,=%11111000 ;
|
|||
|
jz au_cjmp ; If it is zero - Skip init.
|
|||
|
mov r0,=32 ; Address ram memory #1.
|
|||
|
mov @r0,=32 ; Write ST code to ram memory #1.
|
|||
|
mov r0,=66 ; Address ram memory #2.
|
|||
|
mov @r0,=32 ; Write ST code to ram memory #2.
|
|||
|
mov r0,=100 ; Address ram prefix memory #3
|
|||
|
mov @r0,=2 ; KP2
|
|||
|
inc r0 ; increment address pointer
|
|||
|
mov @r0,=4 ; 4
|
|||
|
inc r0 ; increment address pointer
|
|||
|
mov @r0,=6 ; 6
|
|||
|
inc r0 ; increment address pointer
|
|||
|
mov @r0,=0 ; 0
|
|||
|
inc r0 ; increment address pointer
|
|||
|
mov @r0,=32 ; end
|
|||
|
jmp init3
|
|||
|
|
|||
|
au_cjmp:jmp au_code
|
|||
|
|
|||
|
page 7
|
|||
|
|
|||
|
init3: mov r0,=116 ; Set Trunk #1 Duration
|
|||
|
mov @r0,=65 ; 130 ms duration.
|
|||
|
inc r0 ; Set Trunk #2 Duration
|
|||
|
mov @r0,=0 ; Not used - Duration 0.
|
|||
|
inc r0 ; Set Trunk #3 Duration
|
|||
|
mov @r0,=150 ; 300 ms duration.
|
|||
|
inc r0 ; Set Trunk #4 Duration
|
|||
|
mov @r0,=0 ; Not used - Duration 0.
|
|||
|
inc r0 ; Set Trunk #1 Delay
|
|||
|
mov @r0,=0 ; No delay.
|
|||
|
inc r0 ; Set Trunk #2 Delay
|
|||
|
mov @r0,=0 ; No delay (1.5 sec default).
|
|||
|
inc r0 ; Set Trunk #3 Delay
|
|||
|
mov @r0,=0 ; No delay.
|
|||
|
inc r0 ; Set Trunk #4 Delay
|
|||
|
mov @r0,=0 ; No delay.
|
|||
|
inc r0 ; Set Trunk #1 Sample
|
|||
|
mov @r0,=$00 ; 2400/2600 Hz, 130 ms
|
|||
|
inc r0 ; Set Trunk #2 Sample
|
|||
|
mov @r0,=$0f ; Not used, set to silence.
|
|||
|
inc r0 ; Set Trunk #3 Sample
|
|||
|
mov @r0,=$01 ; 2400 Hz, 300 ms
|
|||
|
inc r0 ; Set Trunk #4 Sample
|
|||
|
mov @r0,=$0f ; Not used, set to silence.
|
|||
|
|
|||
|
au_code:call beep
|
|||
|
sel rb1 ; Power-On Security Access Code
|
|||
|
mov r5,=25 ; M-f tone duration = 50 ms
|
|||
|
mov r6,=15 ; M-f tone pause = 30 ms
|
|||
|
mov r4,=$ff ; Set disable flag to OK status
|
|||
|
call key ; Read keyboard
|
|||
|
jz au_n1 ; If zero - Set disable flag.
|
|||
|
anl A,=%11111110 ; Digit #1 = 1
|
|||
|
jz au_c1 ; Zero means right code - continue...
|
|||
|
au_n1: mov r4,=0 ; Set disable flag=0
|
|||
|
au_c1: call key ; Read keyboard
|
|||
|
jz au_n2 ; If zero - Set disable flag.
|
|||
|
anl A,=%11111101 ; Digit #2 = 2
|
|||
|
jz au_c2 ; Zero means right code - continue...
|
|||
|
au_n2: mov r4,=0 ; Set disable flag=0
|
|||
|
au_c2: call key ; Read keyboard
|
|||
|
jz au_n3 ; If zero - Set disable flag.
|
|||
|
anl A,=%11111100 ; Digit #4 = 3
|
|||
|
jz au_c3 ; Zero means right code - continue...
|
|||
|
au_n3: mov r4,=0 ; Set disable flag=0
|
|||
|
au_c3: call key ; Read keyboard
|
|||
|
jz au_n4 ; If zero - Set disable flag.
|
|||
|
anl A,=%11111011 ; Digit #4 = 4
|
|||
|
jz au_c4 ; Zero means right code - continue...
|
|||
|
au_n4: mov r4,=0 ; Set disable flag=0
|
|||
|
au_c4: mov a,r4 ; Check disable flag.
|
|||
|
jz c_no ; If zero - Goto dumb DTMF mode...
|
|||
|
sel rb0 ; Else return to main bluebox menu!!!
|
|||
|
ret
|
|||
|
|
|||
|
c_no: sel rb0 ; Select ram bank 0.
|
|||
|
jmp white ; Jump to dumb DTMF mode...
|
|||
|
|
|||
|
trunk1n:mov A,r5
|
|||
|
jz ntrk1
|
|||
|
anl A,=%11111011
|
|||
|
jnz ntrk1
|
|||
|
jmp c4_clr
|
|||
|
|
|||
|
ntrk1: mov r0,=116
|
|||
|
mov A,@r0
|
|||
|
mov r6,a
|
|||
|
mov r0,=120
|
|||
|
mov A,@r0
|
|||
|
mov r4,a
|
|||
|
mov r0,=124
|
|||
|
mov A,@r0
|
|||
|
mov r3,a
|
|||
|
mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov r5,=%00000011 ; select sample bank 03
|
|||
|
call sound ; play tone
|
|||
|
mov r0,=117
|
|||
|
mov A,@r0
|
|||
|
mov r6,a
|
|||
|
mov r0,=121
|
|||
|
mov A,@r0
|
|||
|
mov r4,a
|
|||
|
mov r0,=125
|
|||
|
mov A,@r0
|
|||
|
mov r3,a
|
|||
|
call sound ; play tone
|
|||
|
mov A,=250 ; Another 500 ms pause
|
|||
|
call wait
|
|||
|
mov A,=250 ; Another 500 ms pause
|
|||
|
call wait
|
|||
|
mov A,=250 ; Another 500 ms pause
|
|||
|
call wait
|
|||
|
mov r0,=118
|
|||
|
mov A,@r0
|
|||
|
mov r6,a
|
|||
|
mov r0,=122
|
|||
|
mov A,@r0
|
|||
|
mov r4,a
|
|||
|
mov r0,=126
|
|||
|
mov A,@r0
|
|||
|
mov r3,a
|
|||
|
call sound ; play tone
|
|||
|
mov r0,=119
|
|||
|
mov A,@r0
|
|||
|
mov r6,a
|
|||
|
mov r0,=123
|
|||
|
mov A,@r0
|
|||
|
mov r4,a
|
|||
|
mov r0,=127
|
|||
|
mov A,@r0
|
|||
|
mov r3,a
|
|||
|
call sound ; play tone
|
|||
|
mov A,r7
|
|||
|
mov r5,A
|
|||
|
jmp main
|
|||
|
|
|||
|
trunk2n:mov A,r5
|
|||
|
jz ntrk2
|
|||
|
anl A,=%11111011
|
|||
|
jnz ntrk2
|
|||
|
jmp c4_xfr
|
|||
|
|
|||
|
ntrk2: mov r3,=$00 ; select sound 00
|
|||
|
mov r4,=0 ; no pause
|
|||
|
mov A,r5
|
|||
|
mov r7,A
|
|||
|
mov r5,=%00000011 ; select sample bank 03
|
|||
|
mov r6,=65 ; 130 ms 2400/2600 Hz
|
|||
|
call sound ; play tone
|
|||
|
mov A,=250 ; Another 500 ms pause
|
|||
|
call wait
|
|||
|
mov A,=250 ; Another 500 ms pause
|
|||
|
call wait
|
|||
|
mov A,=250 ; Another 500 ms pause
|
|||
|
call wait
|
|||
|
mov A,=250 ; Another 500 ms pause
|
|||
|
call wait
|
|||
|
mov r3,=$01 ; select sound 01
|
|||
|
mov r4,=0 ; no pause
|
|||
|
mov r6,=65 ; 130ms 2400 Hz
|
|||
|
call sound ; play tone
|
|||
|
mov A,r7
|
|||
|
mov r5,A
|
|||
|
jmp main
|
|||
|
|
|||
|
; The End!
|