home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / texts / boxes / jbox_43.a49 < prev    next >
Text File  |  1993-06-25  |  31KB  |  1,356 lines

  1. ; The Jolly-Box v4.3 (1 Mbit Samplerom, 4 Kb Program ROM).
  2. ; New modifications by Zaphod Beeblebrox of Control Team, Origial
  3. ; Code by Jolly Roger/Int. Tollfree Access
  4. ; Multi-Frequenz-Demon-Dialer for Global Access!!!
  5. ; last update 19.June.1993 12:15.32
  6. ; Code for INTEL 8049 running at 10 Mhz (because timing)
  7. ;
  8. ;  How to Operate:
  9. ;  ===============
  10. ;  Press *0 for samplebank 0 select (DTMF, All 16 Digits).
  11. ;  Press *1 for samplebank 1 select (CCITT #5 -R1- *DEFAULT*).
  12. ;  Press *2 for samplebank 2 select (CCITT #5 -R2-).
  13. ;  Press *3 for CCITT #3 (Not yet implemented!!!).
  14. ;  Press *4 for CCITT #4 (2040 Hz/2400 Hz a.k.a 2VF).
  15. ;  Press *8 for Trunking Freq #1 Customization Menu.
  16. ;  Press *90X to change CCITT #5 R1/R2 M-f Tone Duration.
  17. ;  Press *91X to change CCITT #5 R1/R2 M-f Tone Delay.
  18. ;  Press *# for special tone simulation mode (Dialtone, Busy & Greenbox).
  19. ;  Press **0 to enter a new routing code. The default is KP2+46.
  20. ;  Press **1 to enter RAM memory number #1.
  21. ;  Press **2 to enter RAM memory number #2.
  22. ;  # ends the input and adds ST code if not in DTMF mode.
  23. ;
  24. ; When entering a number on the input line, the first digit must be
  25. ; between 0-3: A "0" means that the prefix in ram should be dialed before
  26. ; the actual number you enter. "1" means that KP1 should be the first tone
  27. ; dialed when the macro is played back. "2" is the same, but KP2 instead of
  28. ; KP1. A ST code is always added at the end of a CCITT number stored in RAM
  29. ; or ROM when it's played back. "3" means that this tone should be ignored
  30. ; and the rest of the dialing should be done in DTMF mode.
  31. ;
  32. ;  Press 0 to dial the entered number #1. (without trunk)
  33. ;  Press 1 to dial the entered number #2. (without trunk)
  34. ;  Press 20-27 for dial in the first phonebook
  35. ;  Press 30-37 for dial in the second phonebook
  36. ;  Press 4 for 1850 Hz DHLS tone
  37. ;  Press 5 for a Redbox "Dime" Tone
  38. ;  Press 6 for a Redbox "Quarter" Tone
  39. ;  Press 7 to send US Local Trunk-Tone (2600 Hz, 1.5 seconds).is KP2-460.
  40. ;  Press 8 to send CCITT International Trunk #1
  41. ;  Press 9 to send CCITT International Trunk #2
  42. ;  Press # to get into whitebox mode, press again to return to bluebox mode.
  43. ;
  44. ;  Example:
  45. ;  ========
  46. ;  "b46018262804c"
  47. ;  Press:* 2 4 6 0 1 8 2 6 2 8 0 4 #
  48. ;  or   :* 0 1 8 2 6 2 8 0 4 #  (b460 will be added for 0)
  49. ;  "a08185585636c"
  50. ;  Press:* 1 0 8 1 8 5 5 8 5 6 3 6 #
  51.  
  52. ; When ist beeps three times:
  53. ; Quarz is ok.
  54. ; Porcessor is ok.
  55. ; All chips on the Sound card are ok.
  56.  
  57. ; Press 1,2,3 or 4  when turning on and you get a test of all tones
  58. ; in the sample bank you selected.
  59.  
  60. ;  Register:
  61. ;  =========
  62. ;  r0 = adress reg #1. (Input-Line & Dialing Loops).
  63. ;  r1 = adress reg #2. (Prefix-Dialing Loop).
  64. ;  r2 = counter for wait routine
  65. ;  r3 = sound to play
  66. ;  r4 = sound pause
  67. ;  r5 = sample bank for autodialing
  68. ;  r6 = sound length
  69. ;  r7 = temporary register
  70. ; r0 II (r24) = unused
  71. ; r1 II (r25) = unused
  72. ; r2 II (r26) = unused
  73. ; r3 II (r27) = unused
  74. ; r4 II (r28) = security code entered status
  75. ; r5 II (r29) = dial duration for C5 R1/R2 M-f Tones
  76. ; r6 II (r30) = dial pause for C5 R1/R2 M-f Tones
  77. ; r7 II (r31) = temporary register II
  78. ; r32-65   = memory for entered number #1 (ends with 32)
  79. ; r66-99   = memory for entered number #2 (ends with 32)
  80. ; r100-115 = memory for entered dialing prefix (ends with 32)
  81. ; r116     = Trunk Select Stage 1
  82. ; r117     = Trunk Duration Stage 1
  83. ; r118     = Trunk Delay Stage 1
  84. ; r119     = Trunk Select Stage 2
  85. ; r120     = Trunk Duration Stage 2
  86. ; r121     = Trunk Delay Stage 2
  87. ; r122     = Trunk Select Stage 3
  88. ; r123     = Trunk Duration Stage 3
  89. ; r124     = Trunk Delay Stage 3
  90. ; r125     = Trunk Select Stage 4
  91. ; r126     = Trunk Duration Stage 4
  92. ; r127     = Trunk Delay Stage 4
  93.  
  94. ; codes in the sample rom:
  95. ; the 128Kb rom is divided in 32 2048 large blocks
  96.  
  97. ; 00 - "0" DTMF touch tones   10 - "0"    CCITT #5 R1
  98. ; 01 - "1" DTMF touch tones   11 - "1"    CCITT #5 R1
  99. ; 02 - "2" DTMF touch tones   12 - "2"    CCITT #5 R1
  100. ; 03 - "3" DTMF touch tones   13 - "3"    CCITT #5 R1
  101. ; 04 - "4" DTMF touch tones   14 - "4"    CCITT #5 R1
  102. ; 05 - "5" DTMF touch tones   15 - "5"    CCITT #5 R1
  103. ; 06 - "6" DTMF touch tones   16 - "6"    CCITT #5 R1
  104. ; 07 - "7" DTMF touch tones   17 - "7"    CCITT #5 R1
  105. ; 08 - "8" DTMF touch tones   18 - "8"    CCITT #5 R1
  106. ; 09 - "9" DTMF touch tones   19 - "9"    CCITT #5 R1
  107. ; 0a - "*" DTMF touch tones   1a - "kp1"  CCITT #5 R1
  108. ; 0b - "#" DTMF touch tones   1b - "kp2"  CCITT #5 R1
  109. ; 0c - "a" DTMF touch tones   1c - "st"   CCITT #5 R1
  110. ; 0d - "b" DTMF touch tones   1d - "C.11" CCITT #5 R1
  111. ; 0e - "c" DTMF touch tones   1e - "C.12" CCITT #5 R1
  112. ; 0f - "d" DTMF touch tones   1f - "DHLS" CCITT #5 R1/R2
  113.  
  114. ; 20 - "0"    CCITT #5 R2     30 - 2400/2600 Hz
  115. ; 21 - "1"    CCITT #5 R2     31 - 2400/2400 Hz
  116. ; 22 - "2"    CCITT #5 R2     32 - 2040/2040 Hz
  117. ; 23 - "3"    CCITT #5 R2     33 - 2040/2400 Hz
  118. ; 24 - "4"    CCITT #5 R2     34 - 2280/2280 Hz
  119. ; 25 - "5"    CCITT #5 R2     35 - 2600/2600 Hz
  120. ; 26 - "6"    CCITT #5 R2     36 - 2100/2100 Hz
  121. ; 27 - "7"    CCITT #5 R2     37 - Spare 2
  122. ; 28 - "8"    CCITT #5 R2     38 - 2100/2100 Hz Guard Tone
  123. ; 29 - "9"    CCITT #5 R2     39 - 480/620 Hz (US Ringing Tone)
  124. ; 2a - "kp1"  CCITT #5 R2     3a - 350/440 Hz (US Dialtone)
  125. ; 2b - "kp2"  CCITT #5 R2     3b - 440/480 Hz (US Busy)
  126. ; 2c - "st"   CCITT #5 R2     3c - 440/440 Hz (Sw. Dialt & Busy).
  127. ; 2d - "C.11" CCITT #5 R2     3d - 460/460 Hz (German Tone).
  128. ; 2e - "C.12" CCITT #5 R2     3e - 1700/2200 Hz (US/DK Redbox)                 
  129. ; 2f - "DHLS" CCITT #5 R2     3f - Silence (Empty!!!).
  130.  
  131. ; port1:    bit  0   = Samplebank Select Low Bit
  132. ;          bit  1   = Samplebank Select High Bit
  133. ;        bits 2-7 = Rows for keyboard
  134. ; port2:     bits 0-3 = Program Address Memory High Address Bits
  135. ;        bits 4-7 = select a sample of the sample rom (CCITT or DTMF)
  136.  
  137. ;BEGIN OF PAGE $000
  138.  
  139. ;Resetroutine:
  140.     nop            ;    lo
  141.     nop            ;    hi-pointer to reset ($000)
  142.     nop            ;    lo
  143.     nop            ;    hi-pointer to nmi ($000)
  144.     nop
  145.     nop
  146.     nop
  147.     nop
  148.     nop
  149.  
  150.     call    init
  151.  
  152. ;give ok status (beep ,delay 300ms, beep, delay 100ms,long beep)
  153. ;end of reset routine
  154.  
  155. wboxb:    mov    r4,=75        ; 150 ms delay
  156.     call    beep        ; beep to show reset
  157.     mov    r4,=25        ; set 50 ms delay
  158.     call    beep        ; beep again
  159.     call    beep        ; a third beep!
  160.  
  161. ;select tone 0, sample-bank 1.
  162.  
  163.     mov    r3,=%00000000
  164.     mov    r5,=%00000001
  165.  
  166. ;  MainMenu
  167. ;  ========
  168. ;  **0 = enter routing code
  169. ;  **1 = enter number #1
  170. ;  **2 = enter number #2
  171. ;   *0 = select sample bank 0 (DTMF Whitebox, all 16 tones).
  172. ;   *1 = select sample bank 1 (CCITT #5 R1 Tones).
  173. ;   *2 = select sample bank 2 (CCITT #5 R2 Tones).
  174. ;   *3 = select CCITT #3 mode (Not yet implemented!!!).
  175. ;   *4 = select CCITT #4 mode.
  176. ;   *9 = select dial/break timing menu.
  177. ;   *# = special tone simulation mode.
  178. ;    0 = dial entered number #1
  179. ;    1 = dial entered number #2
  180. ;    20-17, 30-37 phonebook(s)
  181. ;    4 = DHLS tone
  182. ;    5 = Redbox - Dime Tone
  183. ;    6 = Redbox - Quarter Tone
  184. ;    7 = Local Trunk, 1.0s 2600 Hz
  185. ;    8 = Int. Trunk #1
  186. ;    9 = Int. Trunk #2
  187. ;    # = whitebox, press again to go back to bluebox.
  188.  
  189. start:    mov    r4,=0
  190.     call    beep        ; beep again
  191.  
  192. main:    call    key        ; get a code from key Accu
  193.     jz    dial1        ; if it is 0 goto dial
  194.     anl    A,=%10111111    ; %x0xxxxxx
  195.     jz    command        ; if it is 64 command menu 2
  196.     anl    A,=%01111111    ; %00xxxxxx
  197.     jz    whitebox    ; if it is 128 goto wb
  198.     dec    a        ; so it has to be 1-9
  199.     jz    dial2        ; if it is 1
  200.     dec    a        ; so it has to be 2-9
  201.     jz    dialn1        ; if it is 2
  202.     dec    a        ; so it has to be 3-9
  203.     jz    dialn2        ; if it is 3
  204.     dec    a        ; so it has to be 4-9
  205.     jz    dhls        ; if it is 4
  206.     dec    a        ; so it has to be 5-9
  207.     jz    dime        ; if it is 5
  208.     dec    a        ; so it has to be 6-9
  209.     jz    quart        ; if it is 6
  210.     dec    a        ; so it has to be 7-9
  211.     jz    ltrunk        ; if it is 7
  212.     dec    a        ; so it has to be 8,9
  213.     jz    trunk1        ; if it is 8
  214.     jmp    trunk2        ; so it had to be 9
  215.  
  216. ;Input line
  217. ;Press 0-9 to enter a number.
  218. ;Use * to enter special tones (1-6 = A-E, H).
  219. ;Use # to finish and add ST code.
  220.  
  221. enter_r:mov    r0,=100        ; set start for routing code
  222.     mov    @r0,=32        ; give end code
  223.     jmp    enterl        ; goto enterl
  224.  
  225. enter_1:mov    r0,=32        ; set start for number #1 - 32
  226.     mov    @r0,=32        ; give end code
  227.     jmp    enterl
  228.  
  229. enter_2:mov    r0,=66        ; set start for number #1 - 32
  230.     mov    @r0,=32        ; give end code
  231.     jmp    enterl
  232.  
  233.  
  234. dialn1:    mov    A,r5
  235.     mov    r7,A
  236.     call    key        ; get a key 0-7
  237.     anl    A,=7        ; %00000111
  238.     jmp    dialn        ; goto dial
  239.  
  240. dialn2:    mov    A,r5
  241.     mov    r7,A
  242.     call    key        ; get a key 8-15 (0-7)
  243.     orl    A,=8        ; %00001000
  244.  
  245. ;dial a number from p3 rom out of
  246.  
  247. dialn:    swap    A        ; a=a*16
  248.     mov    r0,a        ; put number to r0
  249.     sel    rb1
  250.     mov    a,r5
  251.     sel    rb0
  252.     mov    r6,a
  253.     sel    rb1
  254.     mov    a,r6
  255.     sel    rb0
  256.     mov    r4,a
  257.     mov    a,r0
  258.     movp3    a,@A        ; hole ersten wert
  259.     inc    r0        ; increment position in rom
  260.     jz    route1        ; when 0 then dial prefix
  261.     dec    a
  262.     mov    r3,=10        ; Sample pointer --> KP1
  263.     jz    touchn        ; If 1 - Dial KP1+Number
  264.     dec    a
  265.     mov    r3,=11        ; Sample pointer --> KP2
  266.     jz    touchn        ; If 2 - Dial KP2+Number
  267.     dec    a
  268.     jnz    main        ; If 3 - Dial in DTMF, else go main.
  269.     mov    r4,=40        ; 80 ms pause between DTMF's
  270.     mov    r6,=40        ; 80 ms duration for DTMF's.
  271.     mov    A,=0
  272.     mov    r5,A        ; Select DTMF Sample-Bank
  273.     jmp    rbackn
  274.  
  275. touchn:    call    sound        ; Play the sample
  276. rbackn:    mov    a,r0        ; get position in rom
  277.     movp3    a,@A        ; Fetch next tone
  278.     inc    r0        ; increment position in rom
  279.     mov    r3,a        ; put next sample in r3
  280.     jz    touchn        ; 0 is also a tone we should output!
  281.     anl    A,=%11011111    ; If it's $20 - End of signalling!
  282.     jz    etouch        ; We have to check if we should play ST code now...
  283.     jmp    touchn
  284.  
  285. ;dial a number from ram (r32 or r66).
  286.  
  287. dial1:    mov    r0,=32        ; Dial RAM Macro #1
  288.     jmp    dial
  289.  
  290. dial2:    mov    r0,=66        ; Dial RAM Macro #2
  291.  
  292. dial:    mov    A,r5
  293.     jz    mfdial
  294.     anl    A,=%11111011
  295.     jnz    mfdial
  296.     jmp    c4_dial
  297.  
  298. mfdial: sel    rb1
  299.     mov    a,r5
  300.     sel    rb0
  301.     mov    r6,a
  302.     sel    rb1
  303.     mov    a,r6
  304.     sel    rb0
  305.     mov    r4,a
  306.     mov    A,r5
  307.     mov    r7,A
  308.     mov    a,@r0        ; hole ersten wert
  309.     inc    r0        ; increment position in ram
  310.     jz    route2        ; If 0 - Dial Routing
  311.     mov    r3,=10        ; Sample pointer --> KP1
  312.     dec    a
  313.     jz    touch        ; If 1 - Dial KP1+Number
  314.     dec    a
  315.     mov    r3,=11        ; Sample Pointer --> KP2
  316.     jz    touch        ; If 2 - Dial KP2+Number
  317.     dec    a
  318.     jnz    main        ; If 3 - Dial in DTMF, else go main.
  319.     mov    r4,=40        ; 80 ms pause between DTMF's
  320.     mov    r6,=40        ; 80 ms duration of DTMF's
  321.     mov    A,=0
  322.     mov    r5,A
  323.     jmp    rback
  324.  
  325. touch:    call    sound        ; play the sample
  326. rback:    mov    a,@r0        ; fetch the next tone
  327.     inc    r0
  328.     mov    r3,a
  329.     jz    touch        ; 0 is also a tone we should play!!
  330.     anl    A,=%11011111    ; check for $20 - End of signalling
  331.     jnz    touch        ; if no end code, goto output
  332. etouch:    mov    A,r5
  333.     jz    endsig        ; Don't add ST code for DTMF mode.
  334.     mov    r3,=12        ; Sample pointer --> ST code
  335.     call    sound        ; play the sample
  336. endsig: mov    A,r7
  337.     mov    r5,A
  338.     jmp    main        ; end to main
  339.  
  340.  
  341. route1: call    dialr        ; and wait
  342.     jmp    rbackn        ; end to main
  343.  
  344. route2:    call    dialr        ; and wait
  345.     jmp    rback        ; end to main
  346.  
  347. trunk1:    jmp    trunk1n
  348. trunk2: jmp     trunk2n
  349. ltrunk:    jmp    ltrunkn
  350. dime:    jmp    dime1
  351. quart:    jmp    quart1
  352. dhls:    jmp    dhls2
  353. whitebox:jmp    white
  354. command:jmp    command2
  355.  
  356.     PAGE    1
  357.  
  358. ;Enter number to ram or select sample bank for bluebox mode.
  359. ;Press 0-3 for the different sample-banks, and # to enter
  360. ;the special tone simulation mode.
  361.  
  362. command2:call    key
  363.     jz    bank0        ; If it's 0 - Samplebank 0 select.
  364.     anl    A,=%10111111    ; If * was pressed check for inputline.
  365.     jz    enterm
  366.     anl    a,=%01111111    ; If # was pressed goto simulation mode.
  367.     jz    simtj
  368.     dec    a
  369.     jz    bank1        ; If it's 1 - Samplebank 1 select.
  370.     dec    a
  371.     jz    bank2        ; If it's 2 - Samplebank 2 select.
  372.     dec    a
  373.     jz    ccitt3        ; If it's 3 - CCITT #3 Mode Enable.
  374.     dec    a
  375.     jz    ccitt4        ; If it's 4 - CCITT #4 Mode Enable.
  376.     dec    a
  377.     jz    command2    ; 5
  378.     dec    a
  379.     jz    command2    ; 6
  380.     dec    a
  381.     jz    command2    ; 7
  382.     dec    a
  383.     jz    trunktj        ; If it's 8 - Trunking Timing Menu.
  384.     dec    a
  385.     jz    timej        ; If it's 9 - Dialing Timing Menu.
  386.     jmp    command2
  387.  
  388. bank0:    mov    A,=0
  389.     jmp    banks
  390.  
  391. bank1:    mov    A,=1
  392.     jmp    banks
  393.  
  394. bank2:    mov    A,=2
  395.     jmp    banks
  396.  
  397. ccitt3:    mov    A,=3
  398.     jmp    banks
  399.  
  400. ccitt4:    mov    A,=4
  401.  
  402. banks:    mov    r5,A
  403.     mov    r4,=0
  404.     call    beep
  405.     jmp    start
  406.  
  407. silence:mov    A,=%11111111
  408.     outl    p1,A
  409.     mov    A,=$f0
  410.     outl    p2,A
  411.     ret
  412.  
  413. enterm:    call    key
  414.     anl    A,=%00000011
  415.     jz    enterr
  416.     dec    a
  417.     jz    enter1
  418.     jmp    enter2
  419.  
  420. enterl:    mov    r4,=0
  421.     call    beep        ; give message, that * was pushed
  422.     call    beep
  423. notspec:call    key        ; get a key
  424.     jz    write        ; test 0
  425.     anl    A,=%10111111    ; %x0xxxxxx
  426.     jz    special        ; * = Enter special tone (1-6 = A-E, H)
  427.     anl    A,=%01111111    ; %00xxxxxx
  428.     jz    startj        ; test #
  429. write:    mov    @r0,a        ; if 0-9, write number
  430.     inc    r0        ; go to next
  431.     mov    @r0,=32        ; set end
  432.     jmp    enterl        ; goto enterl
  433.  
  434. special:call    key
  435.     anl    A,=%00000111
  436.     jz    notspec
  437.     add    A,=9
  438.     jmp    write
  439.  
  440. ;Whitebox routine
  441. ;press keys as log as the tone has to play
  442. ;    1=$10    2=$20    3=$30
  443. ;    4=$40    5=$50    6=$60
  444. ;    7=$70    8=$80    9=$90
  445. ;    *=$a0    0=$00    #=$b0
  446. ;    A=$c0    B=$d0    C=$e0
  447. ;        D=$f0
  448.  
  449. white:    mov    r4,=10
  450.     mov    r6,=20
  451.     call    beep
  452.     call    beep
  453.     mov    a,=%00000011
  454.     outl    p1,A        ; set all rows to output
  455. whitell:call    release
  456.     mov    A,=$f0
  457.     outl    p2,A
  458. whitel:    mov    A,=%11111011    ; set bit 2 low
  459.     outl    p1,A
  460.     mov    a,=$10
  461.     jnt0    wkey        ; jump if key is pressed ...
  462.     mov    a,=$70        ; .....
  463.     jnt1    wkey
  464.     mov    a,=%11110111
  465.     outl    p1,A
  466.     mov    a,=$20
  467.     jnt0    wkey
  468.     mov    a,=$80
  469.     jnt1    wkey
  470.     mov    a,=%11101111
  471.     outl    p1,A
  472.     mov    a,=$30
  473.     jnt0    wkey
  474.     mov    a,=$90
  475.     jnt1    wkey
  476.     mov    a,=%11011111
  477.     outl    p1,A
  478.     mov    a,=$40
  479.     jnt0    wkey
  480.     jnt1    ffake
  481.     mov    a,=%10111111
  482.     outl    p1,A
  483.     mov    a,=$50
  484.     jnt0    wkey
  485.     mov    a,=$00
  486.     jnt1    wkey
  487.     mov    a,=%01111111
  488.     outl    p1,A
  489.     mov    a,=$60
  490.     jnt0    wkey
  491.     jt1    whitel        ; start over if no key is pressed
  492.     sel    rb1
  493.     mov    A,r4
  494.     jz    fake2
  495.     sel    rb0
  496.     jmp    wboxb        ; return to main menu.
  497. ffake:    sel    rb1
  498.     mov    A,r4
  499.     jz    fake1
  500.     sel    rb0
  501.     jmp    wkey2j
  502. fake1:    sel    rb0
  503.     mov    A,=$a0
  504.     jmp    wkey
  505. fake2:    sel    rb0
  506.     mov    A,=$b0    
  507. wkey:    outl    p2,A        ; set tone
  508.     mov    a,=%00000000    ; whitebox tones on
  509.     outl    p1,A
  510.     jmp    whitell
  511.  
  512. ;wait routine for waiting 2*A ms (a=65: 130ms) (set a to 0, to get 512ms delay)
  513. wait:    mov    r2,=166        ; set loop of 5+166*8 cycles
  514. wait1:    nop            ; delay 1 cycle
  515.     nop            ; delay 1 cycle
  516.     nop            ; delay 1 cycle
  517.     nop            ; delay 1 cycle
  518.     nop            ; delay 1 cycle
  519.     nop            ; delay 1 cycle
  520.     djnz    r2,wait1    ; delay 2 cycles
  521.     dec    a        ; after 1 #s, if a>0
  522.     jnz    wait        ; goto wait again
  523.     ret            ; end of wait
  524.  
  525. wkey2j:    jmp    wkey2
  526. enter1:    jmp    enter_1
  527. enter2:    jmp    enter_2
  528. enterr:    jmp    enter_r
  529. simtj:    jmp    simt
  530. startj:    jmp    start
  531. timej:    jmp    timing
  532. trunktj:jmp    trunkt
  533.  
  534.     PAGE    2
  535.  
  536. red:    mov    r7,A
  537.     mov    r3,=$0e        ; select sound 14
  538.     mov    A,r5
  539.     mov    r1,A
  540.     mov    r5,=%00000011    ; select sample bank 03
  541.     call    sound        ; play tone
  542.     mov    A,r1
  543.     mov    r5,A
  544.     mov    A,r7
  545.     dec    A
  546.     jnz    red
  547.     jmp    main
  548.  
  549. dime1:    mov    A,=2
  550.     mov    r4,=33
  551.     mov    r6,=33
  552.     jmp    red
  553.  
  554. quart1:    mov    A,=5
  555.     mov    r4,=17
  556.     mov    r6,=17
  557.     jmp    red
  558.  
  559. ;Enter key
  560. ;gives The Code of pressed Key in Accu and waits for key press.
  561. ;bevore it waits for releasing the key.
  562. ;    1=$01    2=$02    3=$03
  563. ;    4=$04    5=$05    6=$06
  564. ;    7=$07    8=$08    9=$09
  565. ;    *=$40    0=$00    #=$80
  566.  
  567. key:    call    releaseb
  568. keyl:    mov    a,=%11111011    ; set bit 2 low
  569.     outl    p1,A
  570.     mov    a,=1
  571.     jnt0    kkey        ; jump if key is pressed ...
  572.     mov    a,=7        ; .....
  573.     jnt1    kkey
  574.     mov    a,=%11110111
  575.     outl    p1,A
  576.     mov    a,=2
  577.     jnt0    kkey
  578.     mov    a,=8
  579.     jnt1    kkey
  580.     mov    a,=%11101111
  581.     outl    p1,A
  582.     mov    a,=3
  583.     jnt0    kkey
  584.     mov    a,=9
  585.     jnt1    kkey
  586.     mov    a,=%11011111
  587.     outl    p1,A
  588.     mov    a,=4
  589.     jnt0    kkey
  590.     mov    a,=$40
  591.     jnt1    kkey
  592.     mov    a,=%10111111
  593.     outl    p1,A
  594.     mov    a,=5
  595.     jnt0    kkey
  596.     mov    a,=0
  597.     jnt1    kkey
  598.     mov    a,=%01111111
  599.     outl    p1,A
  600.     mov    a,=6
  601.     jnt0    kkey
  602.     mov    a,=$80
  603.     jnt1    kkey
  604.     jmp    keyl        ; start over if no key is pressed
  605. kkey:    ret            ; ret acc.
  606.  
  607. ;test release key
  608.  
  609. releaseb:mov    a,=%00000011
  610.     outl    p1,A        ; set all rows to output
  611. release:jnt0    release        ; wait until there is no key pressed
  612.     jnt1    release        ; (both lines)
  613.     mov    a,=37        ; delay 75ms
  614.     call    wait
  615.     jnt0    release        ; wait if there is no key pressed
  616.     jnt1    release        ; (both lines)
  617.     ret
  618.  
  619. ;make a beep sound with 30ms delay
  620.  
  621. beep:    mov    r3,=$01        ; select sound 01, Bank 3 (good beep sound)
  622.     mov    r6,=15        ; 30 ms beep
  623.      mov    A,r5
  624.     mov    r7,A
  625.     mov    r5,=%00000011    ; set sound dma
  626.     call    sound        ; and wait
  627.     mov    A,r7
  628.     mov    r5,A
  629.     ret
  630.  
  631. ;Sound routine
  632. ;r3 represents the sound which is in the sample rom.
  633. ;r4 is the pause after the sound, r5 the sample bank & r6 the length
  634.  
  635. sound:    mov    A,r6
  636.     jz    nowait
  637.     mov    A,r3        ; get sample to a
  638.     swap    A        ; a=a*16
  639.     outl    p2,A        ; send sample
  640.     mov    A,r5        ; tone bank select
  641.     anl    a,=%00000011    ; only banks 0-3 are valid
  642.     outl    p1,A
  643.     mov    A,r6        ; use R6/2 ms to delay
  644.     call    wait        ; wait
  645.     call    silence        ; stop sound
  646.     mov    A,r4        ; pause
  647.     jz    nowait
  648.     call    wait
  649. nowait:    ret            ; end of sound
  650.  
  651. ;dial prefix from ram (r100)
  652.  
  653. dialr:    mov    r1,=100        ; start
  654.     mov    a,@r1        ; hole ersten wert
  655.     inc    r1        ; increment position in ram
  656.     dec    a
  657.     mov    r3,=10
  658.     jz    touchr
  659.     dec    a
  660.     mov    r3,=11
  661.     jz    touchr
  662.     dec    a
  663.     jnz    dialr2
  664.     mov    r4,=40        ; 80 ms pause between DTMF's
  665.     mov    r6,=40        ; 80 ms duration for DTMF's.
  666.     mov    r5,=0        ; Select DTMF Samplebank.
  667.     jmp    touchr2
  668. touchr: call    sound        ; send the touchtone
  669. touchr2:mov    a,@r1        ; hole nΣchsten wert
  670.     inc    r1
  671.     mov    r3,a
  672.     jz    touchr        ; gebe null aus
  673.     anl    A,=%11011111    ; kein code eingegeben
  674.     jnz    touchr        ; if no end code, goto output
  675. dialr2:    ret
  676.  
  677. wkey2:    call    releaseb
  678. wkey2l:    mov    A,=%11111011
  679.     outl    p1,A
  680.     mov    A,=$a0
  681.     jnt0    wkeyj
  682.     mov    A,=%11110111
  683.     outl    p1,A
  684.     mov    A,=$b0
  685.     jnt0    wkeyj
  686.     mov    A,=%11101111
  687.     outl    p1,A
  688.     mov    A,=$c0
  689.     jnt0    wkeyj
  690.     mov    A,=%11011111
  691.     outl    p1,A
  692.     mov    A,=$d0
  693.     jnt0    wkeyj
  694.     mov    A,=%10111111
  695.     outl    p1,A
  696.     mov    A,=$e0
  697.     jnt0    wkeyj
  698.     mov    A,=%01111111
  699.     outl    p1,A
  700.     mov    A,=$f0
  701.     jt0    wkey2l
  702.  
  703. wkeyj:    jmp    wkey
  704. whitej:    jmp    whitel
  705.  
  706.  
  707.     page    3
  708.  
  709. ; Page 3 contains the 16 stored phonenumber ($300-$3ff).
  710.  
  711.     page    4
  712.  
  713. ; Special tone simulation mode.
  714. ; =============================
  715. ;
  716. ; 1 = Swedish Dialtone.
  717. ; 2 = Swedish Busy Tone.
  718. ; 3 = Swedish Ringtone.
  719. ; 4 = US Dialtone
  720. ; 5 = US Busy Tone.
  721. ; 6 = US Ringtone.
  722. ; 7 = Swedish All Trunks Busy
  723. ; 8 = US All Trunks Busy
  724. ; 9 = Greenbox Ringback. (700 & 1700 Hz, 1 sec).
  725. ; 0 = Greenbox Coin Return (1100 & 1700 Hz, 1 sec).
  726. ; * = 2600 Hz wink (90 ms).
  727. ; # = Jump back to main menu.
  728.  
  729. simt:    mov    a,=%00000011
  730.     outl    p1,A
  731. siml1:    call    release
  732.     mov    A,=$f0
  733.     outl    p2,A
  734. siml2:    mov    A,=%11111011    ; 1 - Swedish Dialtone
  735.     outl    p1,A
  736.     mov    a,=$c0
  737.     jnt0    skey
  738.     jnt1    sbusy        ; 7 - Swedish Slow-Busy
  739.     mov    A,=%11110111    ; 2 - Swedish Busy
  740.     outl    p1,A
  741.     mov    A,=$c0
  742.     jnt0    fbusy
  743.     mov    A,=$b0
  744.     jnt1    fbusy        ; 8 - US Fast-Busy
  745.     mov    a,=%11101111    ; 3 - Swedish Ringtone
  746.     outl    p1,A
  747.     mov    a,=$c0
  748.     jnt0    ringl
  749.     jnt1    rngbck        ; 9 - Greenbox Ringback
  750.     mov    a,=%11011111    ; 4 - US Dialtone
  751.     outl    p1,A
  752.     mov    a,=$a0
  753.     jnt0    skey
  754.     jnt1    wink26        ; * - 2600 Wink (90 ms).
  755.     mov    a,=%10111111    ; 5 - US Busy
  756.     outl    p1,A
  757.     mov    a,=$b0
  758.     jnt0    busy
  759.     jnt1    cretn        ; 0 - Greenbox Coin Return
  760.     mov    a,=%01111111    ; 6 - US Ringtone
  761.     outl    p1,A
  762.     mov    a,=$90
  763.     jnt0    ringl
  764.     jt1    siml2        ; start over if no key is pressed
  765.     jmp    wboxb        ; return to main menu.
  766. skey:    outl    p2,A        ; set tone
  767.     mov    a,=%00000011    ; simulation tones on
  768.     outl    p1,A
  769.     jmp    siml1
  770.  
  771. busy:    mov    r3,=250
  772.     jmp    busyl
  773. fbusy:    mov    r3,=125
  774. busyl:    outl    p2,A
  775.     mov    r7,A
  776.     mov    A,r3
  777.     call    wait
  778.     mov    A,=$f0
  779.     outl    p2,A
  780.     mov    A,r3
  781.     call    wait
  782.     mov    A,r7
  783.     jnt0    busyl
  784.     jnt1    busyl
  785.     jmp    simt
  786.  
  787. sbusy:    outl    p2,A
  788.     mov    r7,A
  789.     mov    A,=250
  790.     call    wait
  791.     mov    A,=$f0
  792.     outl    p2,A
  793.     mov    A,=250
  794.     call    wait
  795.     mov    A,=250
  796.     call    wait
  797.     mov    A,=250
  798.     call    wait
  799.     mov    A,=250
  800.     call    wait
  801.     mov    A,r7
  802.     jnt0    sbusy
  803.     jnt1    sbusy
  804.     jmp    simt
  805.  
  806. ringl:    outl    p2,A
  807.     mov    r7,A
  808.     mov    A,=250
  809.     call    wait
  810.     mov    A,=250
  811.     call    wait
  812.     mov    A,=$f0
  813.     outl    p2,A
  814.     mov    A,=250
  815.     call    wait
  816.     mov    A,=250
  817.     call    wait
  818.     mov    A,=250
  819.     call    wait
  820.     mov    A,=250
  821.     call    wait
  822.     mov    A,r7
  823.     jnt0    ringl
  824.     jnt1    ringl
  825.     jmp    simt
  826.  
  827. wink26:    mov    A,=$50
  828.     outl    p2,A
  829.     mov    A,=45
  830.     call    wait
  831.     mov    A,=$f0
  832.     outl    p2,A
  833.     jmp    simt
  834.  
  835. cretn:    mov    A,=$c0
  836.     outl    p2,A
  837.     mov    A,=%00000001
  838.     outl    p1,A
  839.     mov    A,=250
  840.     call    wait
  841.     mov    A,=250
  842.     call    wait
  843.     mov    A,=$f0
  844.     outl    p2,A
  845.     jmp    simt
  846.  
  847. rngbck:    mov    A,=$a0
  848.     outl    p2,A
  849.     mov    A,=%00000001
  850.     outl    p1,A
  851.     mov    A,=250
  852.     call    wait
  853.     mov    A,=250
  854.     call    wait
  855.     mov    A,=$f0
  856.     outl    p2,A
  857.     jmp    simt
  858.  
  859. ltrunkn:mov    A,=$50        ; select sound 05
  860.     outl    p2,a        ; no pause
  861.     mov    A,=%11111111    ; set sample bank 03
  862.     outl    p1,A
  863.     call    releaseb
  864.     call    silence
  865.     jmp    main        ; goto main loop
  866.  
  867. init:    sel    rb0        ; use old register
  868.     orl    p1,=%11111111    ; %11111111 all bits for output
  869.     orl    p2,=%11111111    ; %11111111 all bits for output
  870.  
  871.     mov    a,=%11111000
  872.     outl    p1,a        ; select 1 key and whitebox-mode
  873.     jnt0    selftj      ; if 1 is pressed while turning on goto selftest
  874.     mov    a,=%11110101
  875.     outl    p1,a        ; select 2 key and bluebox-mode CCITT #5 R1
  876.     jnt0    selftj      ; if 2 is pressed while turning on goto selftest
  877.     mov    a,=%11101110
  878.     outl    p1,a        ; select 3 key and bluebox-mode CCITT #5 R2
  879.     jnt0    selftj      ; if 3 is pressed while turning on goto selftest
  880.     mov    a,=%11011111
  881.     outl    p1,a        ; select 4 key and special signalling tones & trunks.
  882.     jnt0    selftj        ; if 4 is pressed while turning on goto selftest
  883.     jmp    init2
  884.  
  885. selftj:    jmp    selftst
  886.  
  887.     page    5
  888.  
  889. c4_dial:mov    a,@r0        ; hole ersten wert
  890.     inc    r0        ; increment position in ram
  891.     jz    mainj        ; If 0 - Dial Routing
  892.     dec    a
  893.     jz    c4_kp1        ; If 1 - Dial KP1+Number
  894.     dec    a
  895.     jz    c4_kp2        ; If 2 - Dial KP2+Number
  896. mainj:    jmp    main
  897.  
  898. c4_tch:    anl    a,=%00000111
  899.     rl    a
  900.     rl    a
  901.     add    a,=192
  902.     mov    r1,a
  903.     mov    r4,=18
  904.     mov    r5,=$03
  905.     mov    r6,=18
  906.     movp    a,@a
  907.     mov    r3,a
  908.     call    sound
  909.     inc    r1
  910.     mov    a,r1
  911.     movp    a,@a
  912.     mov    r3,a
  913.     call    sound
  914.     inc    r1
  915.     mov    a,r1
  916.     movp    a,@a
  917.     mov    r3,a
  918.     call    sound
  919.     inc    r1
  920.     mov    a,r1
  921.     movp    a,@a
  922.     mov    r3,a
  923.     call    sound
  924.     mov    a,=70        ; 140 ms interdigit delay.
  925.     call    wait
  926. c4_rbk:    mov    a,@r0        ; fetch the next tone
  927.     inc    r0
  928.     jz    c4_tch        ; 0 is also a tone we should play!!
  929.     anl    A,=%11011111    ; check for $20 - End of signalling
  930.     jnz    c4_tch        ; if no end code, goto output
  931.     mov    r3,=$02
  932.     call    sound
  933.     call    sound
  934.     call    sound
  935.     call    sound
  936. c4_end: mov    A,r7
  937.     mov    r5,A
  938.     jmp    main        ; end to main
  939.  
  940. c4_kp1:    mov    A,r5
  941.     mov    r7,A
  942.     mov    r4,=0        ; Delay 0
  943.     mov    r5,=3        ; Samplebank 3
  944.     mov    r3,=$03        ; Sample #03 2040/2400 Hz
  945.     mov    r6,=75        ; Play it for 150 ms
  946.     call    sound
  947.     mov    r3,=$02        ; Sample #02 2040/2040 Hz
  948.     mov    r4,=70        ; 140 ms delay
  949.     mov    r6,=50        ; Play it for 100 ms
  950.     call    sound
  951.     jmp    c4_rbk
  952.  
  953. c4_kp2:    mov    A,r5
  954.     mov    r7,A
  955.     mov    r4,=0        ; Delay 0
  956.     mov    r5,=3        ; Samplebank 3
  957.     mov    r3,=$03        ; Sample #03 2040/2400 Hz
  958.     mov    r6,=75        ; Play it for 150 ms
  959.     call    sound
  960.     mov    r3,=$01        ; Sample #02 2400/2400 Hz
  961.     mov    r4,=70        ; 140 ms delay
  962.     mov    r6,=50        ; Play it for 100 ms
  963.     call    sound
  964.     jmp    c4_rbk
  965.  
  966. c4_clr:    mov    A,r5
  967.     mov    r7,A
  968.     mov    r4,=0        ; Delay 0
  969.     mov    r5,=3        ; Samplebank 3
  970.     mov    r3,=$03        ; Sample #03 2040/2400 Hz
  971.     mov    r6,=75        ; Play it for 150 ms
  972.     call    sound
  973.     mov    r3,=$02        ; Sample #02 2040/2040 Hz
  974.     mov    r4,=60        ; 120 ms delay
  975.     mov    r6,=175        ; Play it for 350 ms
  976.     call    sound
  977.     mov    A,r7
  978.     mov    r5,A
  979.     jmp    main
  980.  
  981. c4_xfr:    mov    A,r5
  982.     mov    r7,A
  983.     mov    r4,=0        ; Delay 0
  984.     mov    r5,=3        ; Samplebank 3
  985.     mov    r3,=$03        ; Sample #03 2040/2400 Hz
  986.     mov    r6,=75        ; Play it for 150 ms
  987.     call    sound
  988.     mov    r3,=$01        ; Sample #02 2400/2400 Hz
  989.     mov    r4,=60        ; 120 ms delay
  990.     mov    r6,=175        ; Play it for 350 ms
  991.     call    sound
  992.     mov    A,r7
  993.     mov    r5,A
  994.     jmp    main
  995.  
  996. dhls2:    mov    A,r5
  997.     mov    r7,A
  998.     mov    r5,=1        ; Samplebank 1
  999.     mov    r3,=$0f        ; Sample #15 DHLS Tone.
  1000.     mov    r6,=250        ; Wait 0.5s
  1001.     call    sound
  1002.     mov    A,r7
  1003.     mov    r5,A
  1004.     jmp    main
  1005.  
  1006.     page    6
  1007.  
  1008. ; Dialing Timing sub-menu.
  1009. ; ========================
  1010. ; *90X = Change M-f Tone Duration, X=20 ms steps. 
  1011. ; *91X = Change M-f Tone Delay, X=20 ms steps.
  1012. ;
  1013. ; 0 = 000 ms      1 = 020 ms   2 = 040 ms
  1014. ; 3 = 060 ms      4 = 080 ms   5 = 100 ms
  1015. ; 6 = 120 ms      7 = 140 ms   8 = 160 ms
  1016. ; 9 = 180 ms      * = 250 ms   # = 500 ms
  1017.  
  1018. timing:    call    beep
  1019.     call    key
  1020.     jz    mf_dur
  1021.     anl    A,=%11111110
  1022.     jz    mf_del
  1023. t_mainj:sel    rb0
  1024.     jmp    main
  1025.  
  1026. mf_dur:    call    time_ch
  1027.     sel    rb1
  1028.     mov    r5,A
  1029.     sel    rb0
  1030.     call    beep
  1031.     jmp    main
  1032.  
  1033. mf_del:    call    time_ch
  1034.     sel    rb1
  1035.     mov    r6,A
  1036.     sel    rb0
  1037.     call    beep
  1038.     jmp    main
  1039.  
  1040. time_ch:call    beep
  1041.     call    key
  1042.     jnz    ch_time
  1043.     clr    a
  1044.     jmp    mfdend
  1045. ch_time:anl    A,=%10111111
  1046.     jnz    not_64
  1047.     mov    A,=$7d
  1048.     jmp    mfdend
  1049. not_64:    anl    A,=%01111111
  1050.     jnz    not_128
  1051.     mov    A,=$fa
  1052.     jmp    mfdend
  1053. not_128:mov    r7,a
  1054.     clr    a
  1055. t_loop2:add    a,=10
  1056.     djnz    r7,t_loop2
  1057. mfdend:    ret
  1058.  
  1059. ; Trunking Timing sub-menu.
  1060. ; =========================
  1061. ; *80X = Change Trunk Tone #1 Duration, X=20 ms steps. 
  1062. ; *81X = Change Trunk Tone #2 Duration, X=20 ms steps. 
  1063. ; *82X = Change Trunk Tone #3 Duration, X=20 ms steps. 
  1064. ; *83X = Change Trunk Tone #4 Duration, X=20 ms steps. 
  1065. ; *84X = Change Trunk Tone #1 Delay, X=20 ms steps. 
  1066. ; *85X = Change Trunk Tone #2 Delay, X=20 ms steps. 
  1067. ; *86X = Change Trunk Tone #3 Delay, X=20 ms steps. 
  1068. ; *87X = Change Trunk Tone #4 Delay, X=20 ms steps. 
  1069. ; *88X = Change Trunk Tone #1 Sample, X=0-15. (#=Skip, no tone!!!)
  1070. ; *89X = Change Trunk Tone #2 Sample, X=0-15. (#=Skip, no tone!!!)
  1071. ; *8*X = Change Trunk Tone #3 Sample, X=0-15. (#=Skip, no tone!!!)
  1072. ; *8#X = Change Trunk Tone #4 Sample, X=0-15. (#=Skip, no tone!!!)
  1073. ;
  1074. ; 0 = 000 ms      1 = 020 ms   2 = 040 ms
  1075. ; 3 = 060 ms      4 = 080 ms   5 = 100 ms
  1076. ; 6 = 120 ms      7 = 140 ms   8 = 160 ms
  1077. ; 9 = 180 ms      * = 250 ms   # = 500 ms
  1078.  
  1079. trunkt:    call    beep
  1080.     call    key
  1081.     jz    tt1dur
  1082.     anl    A,=%01111111
  1083.     jz    tt4splj
  1084.     anl    A,=%10111111
  1085.     jz    tt3splj
  1086.     dec    a
  1087.     jz    tt2dur
  1088.     dec    a
  1089.     jz    tt3dur
  1090.     dec    a
  1091.     jz    tt4dur
  1092.     dec    a
  1093.     jz    tt1del
  1094.     dec    a
  1095.     jz    tt2del
  1096.     dec    a
  1097.     jz    tt3del
  1098.     dec    a
  1099.     jz    tt4del
  1100.     dec    a
  1101.     jz    tt1splj
  1102.     dec    a
  1103.     jz    tt2splj
  1104. trmainj:sel    rb0
  1105.     call    beep
  1106.     jmp    main
  1107.  
  1108. ttim:    call    time_ch
  1109.     mov    @r0,a
  1110.     ret
  1111.  
  1112. tt_spl:    call    key
  1113.     jz    notten
  1114.     anl    A,=%01111111
  1115.     jnz    nquit
  1116.     mov    A,=$0f
  1117. nquit:    anl    A,=%10111111
  1118.     jnz    notten
  1119.     mov    A,=$0a
  1120. notten:    mov    @r0,A
  1121.     ret
  1122.  
  1123. tt1dur:    mov    r0,=116
  1124.     call    ttim
  1125.     jmp    trmainj
  1126.  
  1127. tt2dur:    mov    r0,=117
  1128.     call    ttim
  1129.     jmp    trmainj
  1130.  
  1131. tt3dur:    mov    r0,=118
  1132.     call    ttim
  1133.     jmp    trmainj
  1134.  
  1135. tt4dur:    mov    r0,=119
  1136.     call    ttim
  1137.     jmp    trmainj
  1138.  
  1139. tt1del:    mov    r0,=120
  1140.     call    ttim
  1141.     jmp    trmainj
  1142.  
  1143. tt2del:    mov    r0,=121
  1144.     call    ttim
  1145.     jmp    trmainj
  1146.  
  1147. tt3del:    mov    r0,=122
  1148.     call    ttim
  1149.     jmp    trmainj
  1150.  
  1151. tt4del:    mov    r0,=123
  1152.     call    ttim
  1153.     jmp    trmainj
  1154.  
  1155. tt1splj:mov    r0,=124
  1156.     call    tt_spl
  1157.     jmp    trmainj
  1158.  
  1159. tt2splj:mov    r0,=125
  1160.     call    tt_spl
  1161.     jmp    trmainj
  1162.  
  1163. tt3splj:mov    r0,=126
  1164.     call    tt_spl
  1165.     jmp    trmainj
  1166.  
  1167. tt4splj:mov    r0,=127
  1168.     call    tt_spl
  1169.     jmp    trmainj
  1170.  
  1171. ;Testmode:  All tones will be played!!!
  1172.  
  1173. selftst:mov    r5,a
  1174.     clr    a
  1175.     mov    a,r3
  1176.     mov    a,=250
  1177.     mov    r4,a
  1178.     mov    r6,a
  1179. testloop:
  1180.     call    sound
  1181.     mov    a,r3        ;get it back
  1182.     add    a,=%00010000    ;next sample
  1183.     mov    r3,a        ;keep it
  1184.     jmp    testloop    ;loop
  1185.  
  1186. init2:    mov    a,r5        ; Test M-f Sample Bank is greater than 7
  1187.     anl    a,=%11111000    ;
  1188.     jz    au_cjmp        ; If it is zero - Skip init.
  1189.     mov    r0,=32        ; Address ram memory #1.
  1190.     mov    @r0,=32        ; Write ST code to ram memory #1.
  1191.     mov    r0,=66        ; Address ram memory #2.
  1192.     mov    @r0,=32        ; Write ST code to ram memory #2.
  1193.     mov    r0,=100        ; Address ram prefix memory #3
  1194.     mov    @r0,=2        ; KP2
  1195.     inc    r0        ; increment address pointer
  1196.     mov    @r0,=4        ; 4
  1197.     inc    r0        ; increment address pointer
  1198.     mov    @r0,=6        ; 6
  1199.     inc    r0        ; increment address pointer
  1200.     mov    @r0,=0        ; 0
  1201.     inc    r0        ; increment address pointer
  1202.     mov    @r0,=32        ; end
  1203.     jmp    init3
  1204.  
  1205. au_cjmp:jmp    au_code
  1206.  
  1207.     page    7
  1208.  
  1209. init3:    mov    r0,=116        ; Set Trunk #1 Duration
  1210.     mov    @r0,=65        ; 130 ms duration.
  1211.     inc    r0        ; Set Trunk #2 Duration
  1212.     mov    @r0,=0        ; Not used - Duration 0.
  1213.     inc    r0        ; Set Trunk #3 Duration
  1214.     mov    @r0,=150    ; 300 ms duration.
  1215.     inc    r0        ; Set Trunk #4 Duration
  1216.     mov    @r0,=0        ; Not used - Duration 0.
  1217.     inc    r0        ; Set Trunk #1 Delay
  1218.     mov    @r0,=0        ; No delay.
  1219.     inc    r0        ; Set Trunk #2 Delay
  1220.     mov    @r0,=0        ; No delay (1.5 sec default).
  1221.     inc    r0        ; Set Trunk #3 Delay
  1222.     mov    @r0,=0        ; No delay.
  1223.     inc    r0        ; Set Trunk #4 Delay
  1224.     mov    @r0,=0        ; No delay.
  1225.     inc    r0        ; Set Trunk #1 Sample
  1226.     mov    @r0,=$00    ; 2400/2600 Hz, 130 ms
  1227.     inc    r0        ; Set Trunk #2 Sample
  1228.     mov    @r0,=$0f    ; Not used, set to silence.
  1229.     inc    r0        ; Set Trunk #3 Sample
  1230.     mov    @r0,=$01    ; 2400 Hz, 300 ms
  1231.     inc    r0        ; Set Trunk #4 Sample
  1232.     mov    @r0,=$0f    ; Not used, set to silence.
  1233.  
  1234. au_code:call    beep
  1235.     sel    rb1        ; Power-On Security Access Code
  1236.     mov    r5,=25        ; M-f tone duration = 50 ms
  1237.     mov    r6,=15        ; M-f tone pause = 30 ms
  1238.     mov    r4,=$ff        ; Set disable flag to OK status
  1239.     call    key        ; Read keyboard
  1240.     jz    au_n1        ; If zero - Set disable flag.
  1241.     anl    A,=%11111110    ; Digit #1 = 1
  1242.     jz    au_c1        ; Zero means right code - continue...
  1243. au_n1:    mov    r4,=0        ; Set disable flag=0
  1244. au_c1:    call    key        ; Read keyboard
  1245.     jz    au_n2        ; If zero - Set disable flag.
  1246.     anl    A,=%11111101    ; Digit #2 = 2
  1247.     jz    au_c2        ; Zero means right code - continue...
  1248. au_n2:    mov    r4,=0        ; Set disable flag=0
  1249. au_c2:    call    key        ; Read keyboard
  1250.     jz    au_n3        ; If zero - Set disable flag.
  1251.     anl    A,=%11111100    ; Digit #4 = 3
  1252.     jz    au_c3        ; Zero means right code - continue...
  1253. au_n3:    mov    r4,=0        ; Set disable flag=0
  1254. au_c3:    call    key        ; Read keyboard
  1255.     jz    au_n4        ; If zero - Set disable flag.
  1256.     anl    A,=%11111011    ; Digit #4 = 4
  1257.     jz    au_c4        ; Zero means right code - continue...
  1258. au_n4:    mov    r4,=0        ; Set disable flag=0
  1259. au_c4:    mov    a,r4        ; Check disable flag.
  1260.     jz    c_no        ; If zero - Goto dumb DTMF mode...
  1261.     sel    rb0        ; Else return to main bluebox menu!!!
  1262.     ret
  1263.  
  1264. c_no:    sel    rb0        ; Select ram bank 0.
  1265.     jmp    white        ; Jump to dumb DTMF mode...
  1266.  
  1267. trunk1n:mov    A,r5
  1268.     jz    ntrk1
  1269.     anl    A,=%11111011
  1270.     jnz    ntrk1
  1271.     jmp    c4_clr
  1272.  
  1273. ntrk1:    mov    r0,=116
  1274.     mov    A,@r0
  1275.     mov    r6,a
  1276.     mov    r0,=120
  1277.     mov    A,@r0
  1278.     mov    r4,a
  1279.     mov    r0,=124
  1280.     mov    A,@r0
  1281.     mov    r3,a
  1282.     mov    A,r5
  1283.     mov    r7,A
  1284.     mov    r5,=%00000011    ; select sample bank 03
  1285.     call    sound        ; play tone
  1286.     mov    r0,=117
  1287.     mov    A,@r0
  1288.     mov    r6,a
  1289.     mov    r0,=121
  1290.     mov    A,@r0
  1291.     mov    r4,a
  1292.     mov    r0,=125
  1293.     mov    A,@r0
  1294.     mov    r3,a
  1295.     call    sound        ; play tone
  1296.     mov    A,=250        ; Another 500 ms pause
  1297.     call    wait
  1298.     mov    A,=250        ; Another 500 ms pause
  1299.     call    wait
  1300.     mov    A,=250        ; Another 500 ms pause
  1301.     call    wait
  1302.     mov    r0,=118
  1303.     mov    A,@r0
  1304.     mov    r6,a
  1305.     mov    r0,=122
  1306.     mov    A,@r0
  1307.     mov    r4,a
  1308.     mov    r0,=126
  1309.     mov    A,@r0
  1310.     mov    r3,a
  1311.     call    sound        ; play tone
  1312.     mov    r0,=119
  1313.     mov    A,@r0
  1314.     mov    r6,a
  1315.     mov    r0,=123
  1316.     mov    A,@r0
  1317.     mov    r4,a
  1318.     mov    r0,=127
  1319.     mov    A,@r0
  1320.     mov    r3,a
  1321.     call    sound        ; play tone
  1322.     mov    A,r7
  1323.     mov    r5,A
  1324.     jmp    main
  1325.  
  1326. trunk2n:mov    A,r5
  1327.     jz    ntrk2
  1328.     anl    A,=%11111011
  1329.     jnz    ntrk2
  1330.     jmp    c4_xfr
  1331.  
  1332. ntrk2:    mov    r3,=$00        ; select sound 00
  1333.     mov    r4,=0        ; no pause
  1334.     mov    A,r5
  1335.     mov    r7,A
  1336.     mov    r5,=%00000011    ; select sample bank 03
  1337.     mov    r6,=65        ; 130 ms 2400/2600 Hz
  1338.     call    sound        ; play tone
  1339.     mov    A,=250        ; Another 500 ms pause
  1340.     call    wait
  1341.     mov    A,=250        ; Another 500 ms pause
  1342.     call    wait
  1343.     mov    A,=250        ; Another 500 ms pause
  1344.     call    wait
  1345.     mov    A,=250        ; Another 500 ms pause
  1346.     call    wait
  1347.     mov    r3,=$01        ; select sound 01
  1348.     mov    r4,=0        ; no pause
  1349.     mov    r6,=65        ; 130ms 2400 Hz
  1350.     call    sound        ; play tone
  1351.     mov    A,r7
  1352.     mov    r5,A
  1353.     jmp    main
  1354.  
  1355. ; The End!
  1356.