home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / hamradio / morsetxt.lbr / MRS-LB10.AZM / MRS-LB10.ASM
Assembly Source File  |  1987-10-31  |  9KB  |  266 lines

  1. .he MRS-LB10.* --CHR$(13)24AUG85                                 -#-
  2. ;MORSETXT system-specific overlay for the Ampro Little Board, and 
  3. ;    master model for other overlays, with hardware notes.
  4. ;
  5. ; AMPRO USERS NOTE: 
  6. ;    The release version of MORSETXT.* v1.0 was written on and
  7. ; for an Ampro Little Board. If that's what you have,  just build
  8. ; the noisemaker, plug it and go.  Read on,  but  be dragging out 
  9. ; your soldering iron, not MLOAD.
  10. ;
  11. ;Required hardware extension:
  12. ;This  program  keys  the  HSO (or equivalent) pin  on  the  DB25 
  13. ;    connector of your computer's serial-B (modem) port.
  14. ;
  15. ;To use it as a Morse code learning aid,  you'll need to  connect 
  16. ;    an  audio noise-maker (something you can stand to listen  to 
  17. ;    for long periods of time) to that pin.
  18. ;
  19. ;The cheapest method of doing this requires the following
  20. ; parts:
  21. ;
  22. ;1. DB25P connector. Radio Shack # 276-1547 or equivalent
  23. ;
  24. ;2. Piezo oscillator.  RS # 273-060 is a little raucous, but good 
  25. ;    for  short periods.  A 2 kilohertz tone would be  ideal  for 
  26. ;    this;  some  Mallory Sonalerts may oscillate there.  Get one 
  27. ;    that outputs a continuous (NOT pulsing) tone.
  28. ;
  29. ;3. Silicon diode.  1N914 (pkg.  RS 276-1620,  276-1122) is  okay 
  30. ;    electrically,  but  somewhat fragile.  1N4001 (RS  276-1101) 
  31. ;    rectifier  is  a lot sturdier.  If you use a  signal  diode, 
  32. ;    consider  mounting the whole circuit either on perfboard  or 
  33. ;    inside a DB25 hood.
  34. ;
  35. ;4. Optional 10k-plus pot, volume control. RS 271-1711 or equiv.
  36. ;
  37. ;(I have  no special love for Radio Shack,  but they do have  the 
  38. ;    advantage  of being virtually everywhere,  hence the use  of 
  39. ;    their catalog numbers.)
  40. ;
  41. ; Schematic:
  42. ;
  43. ; DB25 pin        diode... the UNBANDED end of the diode 
  44. ;                 connects to the DB25 pin. The BANDED end
  45. ;             |\ | goes to the oscillator.
  46. ;  [7]--------| >|-----------------------+
  47. ;  GND        |/ |                       | "plus" lead...
  48. ;                                        | red wire.
  49. ;                +--------+---------+
  50. ;                | PIEZO OSCILLATOR |    
  51. ;                               +--------+---------+
  52. ;         10k - 50k pot                  | "minus" lead...
  53. ;                                        |  black wire.    
  54. ;  [5]----/\/\/\/------+-----------------+    
  55. ; HSO    1   ^2  3     |
  56. ;            |         |
  57. ;            +---------+
  58. ;     (optional volume control)
  59. ;
  60. ;The above  pinout  is valid according to the Ampro  manual.  The 
  61. ;    circuit actually is powered when the HSO line is turned OFF. 
  62. ;    It's done this way because the boot routines on  disk,  when 
  63. ;    loaded, initialize the serial-B port with HSO turned on. The 
  64. ;    machine-specific  routine (and this design) are both adapted 
  65. ;    to this.
  66. ;This means  that the oscillator will be on when you first  power 
  67. ;    up,  and  every time you reset.  That's one way to find  out 
  68. ;    that it's plugged in (experience)...  
  69. ;
  70. ;The diode is needed because the HSO line, when on, swings  above 
  71. ;    ground. The oscillator must be protected from that.
  72. ;The optional pot probably won't silence the oscillator,  but  it 
  73. ;    will  quiet it substantially.  In factory  environments,  my 
  74. ;    experience suggests leaving it out.
  75. ;
  76. ;This circuit  is  unique in that the piezo oscillator can   make 
  77. ;    (more than) enough noise,  powered only by the HSO   output. 
  78. ;    Any  other  circuit  will probably require a  small   power-
  79. ;    supply or a battery, and extra control circuitry.
  80. ;
  81. ;                        --Carroll R. Bryan III WB1HKU/6
  82. ;
  83. ;
  84. ;Assemble with ASM. Any major improvements or new overlays should
  85. ; be uploaded to Ampro1 @ (408)258-8128, unless somone else would
  86. ; rather hub this. 
  87. ;
  88. LF    equ    10
  89. CR    equ    13
  90. FX    equ    0FFh
  91. ;
  92. CLOCK    equ    40    ;CPU clockspeed in hundreds of kilohertz
  93. ;
  94. ;
  95. PORTAS    equ    84h    ;console status and control port
  96. CINMSK    equ    1    ;character-is-input mask
  97. CINMCH    equ    1    ;character-is-input match
  98. PORTBS    equ    8Ch    ;port B status and control port
  99. ;
  100. ;
  101. ;Title block. It's sent to screen by ILPRT, so keep it  
  102. ; the same size. Use the bottom open line for your own
  103. ; overlay credit. If need be, move the text up a line
  104. ; to bring that top open line down.
  105. ;ILPRT returns when it finds a null. The 1Ah which 
  106. ; follows that is an EOF character (a meaningless ldax d
  107. ; instruction as far as the CPU is concerned), so that
  108. ; a console command of TYPE MORSETXT.COM will bring up
  109. ; only the title block (and whatever 'call ILPRT'
  110. ; happens to mean as ASCII).
  111.  
  112.     org    103h
  113. ;
  114.     db    CR,LF,9,'***----MORSETXT.COM v1.0-----***'
  115.     db    CR,LF,9,'*                              *'
  116.     db    CR,LF,9,'*   International Morse Code   *'
  117.     db    CR,LF,9,'*  transmitter for text files  *'
  118.     db    CR,LF,9,'*  Ampro Little Board version  *'
  119.     db    CR,LF,9,'*    via Port B''s HSO line     *'
  120.     db    CR,LF,9,'*                              *'
  121.     db    CR,LF,9,'***-- --CHR$(13)23AUG85------***'
  122.     db    CR,LF,LF,0,1Ah
  123. ;
  124. ;
  125.     org    235h
  126. ;
  127. DELCON:    db    0,0    ;32-bit value stored in byte-serial
  128.     db    4,0A6h    ;form. Delay constant for 0.1 wpm
  129.             ;when running a Z80 at 0.1 MHz. This
  130.             ;value is adjusted for declared
  131.             ;clockrate in the first routine 
  132.             ;called. DITCNT will be calculated
  133.             ;immediately afterwards. 
  134. ;
  135. DITCNT:    ds    2    ;the key delay variable.
  136. ;
  137. DAHCNT:    ds    2    ;no longer directly used by program.
  138.             ;(It cut down on the range too much.)
  139.             ;If you're retweaking after an over-
  140.             ;haul, though, you'll want to see
  141.             ;what various values of delay and
  142.             ;DELCNT do to it and DITCNT. That's
  143.             ;why I left it in the COMfile.
  144. ;
  145. CLKBYT:    db    CLOCK    ;clock frequency in 100 KHz increments
  146. ;
  147. ;WSPACE, XTNFLG and PRETTY are copied into WSPBYT, XTNBYT and PRYBYT
  148. ; just before every filename line's arguments are brought down and 
  149. ; plugged in. However you set them will be the default condition. If
  150. ; the just-loaded command line has switch-commands in it, they will
  151. ; toggle running conditions away from your default.
  152. ;The advantage is in rearranging the sending commands in wildcard
  153. ; expansions, where no command switches are possible.
  154. ;
  155. ;
  156. WSPACE:    db    0    ;if non-zero, space out the characters.
  157. XTNFLG:    db    0    ;if non-zero, only ARRL characters. 
  158. PRETTY:    db    0    ;if zero,an excess period becomes <bt>,
  159.             ;only one space in a row is sent.
  160. ;
  161. KEY:    jmp    KEYR
  162. UNKEY:    jmp    UNKEYR     ;Hooks for the three hardware-dependent
  163. CONSEN:    jmp    CSEN    ;routines, allowing for overlays.
  164. SEIKON:    ds    3    ;jmp CONSAY...and one for calling out again. 
  165. ;
  166. ;@ 024Dh:
  167. ;
  168. ;These are the hardware-specific sending routines.
  169. ;As written, KEYSTB works with the Ampro's DART. The callers,
  170. ; KEY and UNKEY,  differ in that KEY calls with A=0FFh, while
  171. ; UNKEY calls with A=0. The Ampro initialization routines set
  172. ; the HSO line  on serial-B,  so this routine-set resets that 
  173. ; line in order to key the oscillator.
  174. ;Don't trash anything but A, and be as quick as you can.  The 
  175. ; massive delays in KEY and UNKEY  will mask  a  lot of fixed 
  176. ; delay,  but you want to be able to  really hear  an  honest 
  177. ; 45 wpm, don't you?  
  178. ;
  179. ;If you have to rewrite KEY and UNKEY, pay attention to
  180. ; the CPU's T-states. Those delays were tweaked to yield
  181. ; true clear-text codespeed with the extrapolated constant
  182. ; in DELCON. 
  183. ;DELCON should be left at its present value if possible.
  184. ; Too big, and slow-speed delay increments get defaulted
  185. ; to FFFF. Too small, and the upper speed increments get
  186. ; grossly off.
  187. ;
  188. KEYR:    mvi    a,FX    ;delay-count is in hl
  189.     call    KEYSTB
  190. KELP:    nop! nop! nop! nop! nop    ;If you mess with these
  191.     nop! nop! nop! nop! nop    ;delays, you'll have to
  192.     nop! nop! nop! nop! nop    ;retune the master delay
  193.     nop! nop! nop! nop! nop    ;count. Try to put it in
  194.     nop! nop! nop! nop! nop    ;the same general range.
  195.     nop! nop         ;Otherwise, you'll run
  196.     mov    a,a        ;out of arithmetic range
  197.     dcx    h        ;one way or the other.
  198.     mov    a,l
  199.     ora    h
  200.     jnz    KELP
  201.     ret
  202. ;
  203. UNKEYR:    xra    a    ;ditto
  204.     call    KEYSTB
  205. UKELP:    nop! nop! nop! nop! nop
  206.     nop! nop! nop! nop! nop
  207.     nop! nop! nop! nop! nop
  208.     nop! nop! nop! nop! nop
  209.     nop! nop! nop! nop! nop
  210.     nop! nop
  211.     mov    a,a
  212.     dcx    h
  213.     mov    a,l
  214.     ora    h
  215.     jnz    UKELP
  216.     ret
  217. ;
  218. ;Hopefully, this is the only routine in the code-timing
  219. ; nest that you'll have to tweak. 
  220. ;
  221. ;
  222. KEYSTB:    cma        ;Reverse the sense to deal with preset. 
  223.             ;Now it's 00 to sound the note, 0FFh to
  224.             ;silence it.
  225.     push    psw    ;Hide it. 
  226.     mvi    a,5    ;Vector the DART to register 5...
  227.     out    PORTBS    ;where we find the RTS assertion bit.
  228.     pop    psw    ;Now we're ready to put together a 
  229.             ;control word.
  230.     push    b    ;Copy bc out before we clobber it...
  231.     mvi    b,68h    ;Default condition in the register,
  232.             ;which we must preserve...
  233.             ;(8-bit transmission, transmit enabled)
  234.             ;
  235.     ani    2    ;Expose just the bit we want to change.
  236.     add    b    ;Slam 'em together, and shove the pair
  237.     out    PORTBS    ;out the airlock.
  238.     pop    b    ;Get back whatever's in b
  239.     ret        ;and go home.
  240. ;
  241. ;This is the direct port status call. It is called by
  242. ; ILMORS and GOCHAR on their way back from sending a
  243. ; character. If CON: has a freshly typed character,
  244. ; go play with it. Otherwise, as you were.   
  245. ;
  246. CSEN:    in    PORTAS    ;console port
  247.     ani    CINMSK
  248.     cpi    CINMCH    ;Here's where we break off if
  249.     cz    SEIKON    ;CON: is sending.
  250.     ret
  251. ;
  252. ;@ 02B7h as written:
  253. ;
  254. ;I trust this is enough room for whatever you have to do.
  255.     org    400h
  256. ;
  257. ;
  258.     end
  259. ;
  260.  
  261. eof MRS-LB10.ASM/Ampro[stuff.933]--CHR$(13)30JUN85
  262.  
  263.