home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / mex / mxo-lb22.aqm / MXO-LB22.ASM
Assembly Source File  |  1986-10-06  |  22KB  |  789 lines

  1. ;MX0-LB22.ASM -- AMPRO 'LITTLE BOARD' OVERLAY FILE FOR MEX
  2. ;
  3. ;
  4.  
  5. VER    EQU    2    ; Version 
  6. REV    EQU    2    ; Revision Level
  7. ;
  8. ;
  9. ; Modified from Jerry Haigwood's M7LB-2.ASM with inserts from
  10. ;    MXO-KP41.ASM John Smith, et al.. 
  11. ;
  12. ; Modified from the general purpose overlay by Jerry Haigwood, KY4Z
  13. ;
  14. ; This overlay adapts the MEX program by Ronald Fowler to the 
  15. ;   AMPRO Series 100 computer, using the Z80 DART and the 
  16. ;   Z80 CTC.
  17. ;
  18. ; You will want to look this file over carefully. There are a number of
  19. ; options that you can use to configure the program to suit your taste.
  20. ; This file places particular emphasis on using the AMPRO Series 100 
  21. ; computer with the Z80 DART serial port "B" and the Z80 CTC baud rate
  22. ; generator.  If you are not using this equipment then you might still
  23. ; want to look over this file to gain knowledge on how to write your
  24. ; own version of this overlay.  Some other overlays which might help
  25. ; are:
  26. ;
  27. ;     "H8"  Heath H89 overlay for 8250 I/O and programmable baud rates
  28. ;     "HZ"  Zenith 120 overlay for 2661B initialization and baud rates
  29. ;     "XE"  Xerox 820II overlay for Z80-SIO intialization, etc.
  30. ;
  31. ; Edit this file for your preferences then follow the "TO USE:" example
  32. ; shown below.
  33. ;
  34. ;    TO USE: First edit this file filling in answers for your own
  35. ;        equipment.  Then assemble with ASM.COM or equivalent
  36. ;               assembler. Then use MLOADxx to overlay the relulting
  37. ;               .HEX file over the MEXxx.COM.
  38. ;
  39. ;    A>REN MEXxxx.OBJ=MEXxxx.COM <-- THIS PRESERVES THE UNINSTALLED
  40. ;                                       VERSION IN AN UNRUNABLE FORM.
  41. ;       A>ASM MXO-LB01
  42. ;       A>MLOADxx MEXXxx.COM=MEXXxx.OBJ,MXO-LB01.HEX
  43. ;
  44. ;
  45. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  46. ;
  47. ; 12/18/85 - Corrected 2400 Baud problem, 
  48. ;            Neatened up printing routines
  49. ;            Added jump so that SM overlays can set baud rate
  50. ;                                           - Mike Vore
  51. ;
  52. ; 10/02/85 - Cleaned up misc. trash
  53. ;            Added Version and Rev     - Mike Vore
  54. ;
  55. ;
  56. ;
  57. ; 09/30/85 - Added "FULL SETUP"  routines (5-6-7-8 bits
  58. ;                                          No, Even, Odd parity
  59. ;                                          1- 1.5- 2 stopbits)
  60. ;            "BREAK" sent with 'esc' @ in terminal mode.
  61. ;            Disconnects modem with 'esc' N in terminal mode 
  62. ;                 by lowering HSO (Hand Shake Out), J4-P4  (for DTR)
  63. ;                 
  64. ;                                           - Mike Vore, W3CCV
  65. ;
  66. ;
  67. ; 12/23/83 - First version of this file        - Jerry Haigwood
  68. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  69. ;
  70. BELL:        EQU    07H        ;bell
  71. CR:        EQU    0DH        ;carriage return
  72. ESC:        EQU    1BH        ;escape
  73. LF:        EQU    0AH        ;linefeed
  74. TAB:        EQU    09H        ;tab character
  75. ;
  76. YES:        EQU    0FFH
  77. NO:        EQU    0
  78. ;
  79. BRKWT        EQU    3        ;Break Wait Time Hundreds Of mSec
  80. GBYTME        EQU    3        ;Goodbye pause Hundreds of mSec
  81. HNGUPT        EQU    2        ;Hangup  pause Seconds
  82. ;
  83. ; Change the following information to match your equipment
  84. ; This is for the Little Board Serial Port B
  85. ;
  86. PORT:        EQU    8CH
  87. MODCTL1        EQU    PORT        ;MODEM CONTROL PORT
  88. MODDATP:    EQU    PORT-4        ;MODEM DATA IN PORT
  89. MODRCVB:    EQU    1        ;BIT TO TEST FOR RECEIVE
  90. MODRCVR:    EQU    1        ;VALUE WHEN READY
  91. MODSNDB:    EQU    4        ;BIT TO TEST FOR SEND
  92. MODSNDR:    EQU    4        ;VALUE WHEN READY
  93. CTC:        EQU    50H        ;CTC addr
  94. ;
  95. ;
  96. ;
  97. ; MEX SERVICE PROCESSOR
  98. ;
  99. MEX    EQU    0D00H        ;ADDRESS OF THE SERVICE PROCESSOR
  100. INMDM    EQU    255        ;GET CHAR FROM PORT TO A, CY=NO MORE IN 100 MS
  101. TIMER    EQU    254        ;DELAY 100MS * REG B
  102. TMDINP    EQU    253        ;B=# SECS TO WAIT FOR CHAR, CY=NO CHAR
  103. CHEKCC    EQU    252        ;CHECK FOR ^C FROM KBD, Z=PRESENT
  104. SNDRDY    EQU    251        ;TEST FOR MODEM-SEND READY
  105. RCVRDY    EQU    250        ;TEST FOR MODEM-RECEIVE READY
  106. SNDCHR    EQU    249        ;SEND A CHARACTER TO THE MODEM (AFTER SNDRDY)
  107. RCVCHR    EQU    248        ;RECV A CHAR FROM MODEM (AFTER RCVRDY)
  108. LOOKUP    EQU    247        ;TABLE SEARCH: SEE CMDTBL COMMENTS FOR INFO
  109. PARSFN    EQU    246        ;PARSE FILENAME FROM INPUT STREAM
  110. BDPARS    EQU    245        ;PARSE BAUD-RATE FROM INPUT STREAM
  111. SBLANK    EQU    244        ;SCAN INPUT STREAM TO NEXT NON-BLANK
  112. EVALA    EQU    243        ;EVALUATE NUMERIC FROM INPUT STREAM
  113. LKAHED    EQU    242        ;GET NXT CHAR W/O REMOVING FROM INPUT
  114. GNC    EQU    241        ;GET CHAR FROM INPUT, CY=1 IF NONE
  115. ILP    EQU    240        ;INLINE PRINT
  116. DECOUT    EQU    239        ;DECIMAL OUTPUT
  117. PRBAUD    EQU    238        ;PRINT BAUD RATE
  118. ;
  119. CONOUT    EQU    2        ;SIMULATED BDOS FUNCTION 2: CONSOLE CHAR OUt
  120. PRINT    EQU    9        ;simulated BDOS function 9: print string
  121. INBUF    EQU    10        ;input buffer, same structure as BDOS 10
  122. ;
  123.         ORG    100H
  124. ;
  125. ;
  126. ; Change the clock speed if needed, to match your system
  127. ;
  128.         DS    3    ;(for  "JMP   START" instruction)
  129. ;
  130. PMMIMODEM:    DB    NO    ;yes=PMMI S-100 Modem            103H
  131. SMARTMODEM:    DB    YES    ;yes=HAYES Smartmodem, no=non-PMMI    104H
  132. TOUCHPULSE:    DB    'T'    ;T=touch, P=pulse (Smartmodem-only)    105H
  133. CLOCK:        DB    40    ;clock speed in MHz x10, 25.5 MHz max.    106H
  134.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  135. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200   107H
  136.                 ;6=2400 7=4800 8=9600 9=19200 default
  137.                 ;This defines the DEFAULT SPEED when
  138.                 ;loading the program, REG4 and CTC1
  139.                 ;will be set at load time.
  140.                 ;
  141. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms   108H
  142.                 ;default time to send character in ter-
  143.                 ;minal mode file transfer for slow BBS.
  144. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  145.                 ;default time for extra wait after CRLF
  146.                 ;in terminal mode file transfer
  147. NOOFCOL:    DB    5    ;number of DIR columns shown        10AH
  148. SETUPTST:    DB    YES    ;yes=user-added Setup routine        10BH
  149. SCRNTEST:    DB    NO    ;Cursor control routine         10CH
  150. ACKNAK:        DB    YES    ;yes=resend a record after any non-ACK    10DH
  151.                 ;no=resend a record after a valid-NAK
  152. BAKUPBYTE:    DB    NO    ;yes=change any file same name to .BAK    10EH
  153. CRCDFLT:    DB    YES    ;yes=default to CRC checking        10FH
  154. TOGGLECRC:    DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  155. CONVBKSP:    DB    NO    ;yes=convert backspace to rub        111H
  156. TOGGLEBK:    DB    YES    ;yes=allow toggling of bksp to rub    112H
  157. ADDLF:        DB    YES    ;no=no LF after CR to send file in    113H
  158.                 ;terminal mode (added by remote echo)
  159. TOGGLELF:    DB    YES    ;yes=allow toggling of LF after CR    114H
  160. TRANLOGON:    DB    NO    ;yes=allow transmission of logon    115H
  161.                 ;write logon sequence at location LOGON
  162. SAVCCP:        DB    NO    ;yes=do not overwrite CCP        116H
  163.                                 ;no=overwrite CCP, Large ASCII captures
  164.                                 ; might need this set to NO
  165. LOCONEXTCHR:    DB    NO    ;yes=local command if EXTCHR precedes    117H
  166.                 ;no=external command if EXTCHR precedes
  167. TOGGLELOC:    DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  168. LSTTST:        DB    YES    ;yes=printer available on printer port    119H
  169. XOFFTST:    DB    NO    ;yes=checks for XOFF from remote while    11AH
  170.                 ;sending a file in terminal mode
  171. XONWAIT:    DB    NO    ;yes=wait for XON after CR while    11BH
  172.                 ;sending a file in terminal mode
  173. TOGXOFF:    DB    YES    ;yes=allow toggling of XOFF checking    11CH
  174. IGNORCTL:    DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  175. EXTRA1:        DB    0    ;for future expansion            11EH
  176. EXTRA2:        DB    0    ;for future expansion            11FH
  177. ;
  178. ;
  179. ;    Next 8 DBs used in MDM7xx not by MEXxxx, kept here for 
  180. ;       reference only.
  181. ;         'esc'=Escape character defined with STAT ESC command.
  182. ;
  183. BRKCHR:        DB    '@' ;'esc'-@ = Send 300 ms. break tone        120H
  184. NOCONNCT:    DB    'N' ;'esc'-N = Disconnect from the phone line    121H
  185. LOGCHR:        DB    'x' ;'esc'-x = Send Key 'x' (defined by KEY)     122H
  186. LSTCHR:        DB    'P' ;'esc'-P = Toggle printer            123H
  187. UNSAVE:        DB    'U' ;'esc'-U = Unstart input text capture    124H
  188. TRANCHR:    DB    'T' ;'esc'-T = Transmit file to remote        125H
  189. SAVECHR:    DB    'S' ;'esc'-S = Start input text capture        126H
  190. EXTCHR:        DB    ' ' ;'esc' - 'esc'  = Send escape character    127H
  191. ;
  192. ;
  193.         DS    2        ;                128H
  194. ;
  195. IN$MODCTL1:    IN    MODCTL1 ! RET    ;in modem control port             12AH
  196.         DS    7
  197. OUT$MODDATP:    OUT    MODDATP ! RET    ;out modem data port        134H
  198.         DS    7
  199. IN$MODDATP:    IN    MODDATP ! RET    ;in modem data port        13EH
  200.         DS    7
  201. ANI$MODRCVB:    ANI    MODRCVB    ! RET    ;bit to test for receive ready    148H
  202. CPI$MODRCVR:    CPI    MODRCVR    ! RET    ;value of rcv. bit when ready    14BH
  203. ANI$MODSNDB:    ANI    MODSNDB    ! RET    ;bit to test for send ready    14EH
  204. CPI$MODSNDR:    CPI    MODSNDR    ! RET    ;value of send bit when ready    151H
  205.         DS    12        ;                156H
  206. ;
  207. ;
  208. LOGONPTR    DS    2        ;FOR USER MESSAGE, NOT USED
  209. ;
  210. ;  DIALV will be overwritten by SM overlays
  211. ;
  212. DIALV        DS    3        ;reserved for dial routine jump
  213. ;  DISCV May be modified by SM overlays, depending on method of disconnect.
  214. DISCV        JMP    DISCON        ;disconnect modem
  215. JMP$GOODBYE:    JMP    GOODBYE        ;                168H
  216. JMP$INITMOD:    JMP    INITMOD        ;go to user written routine    16BH
  217. JMP$SETBAUD     JMP     STBAUD2        ;set baud from dial overlay
  218.         RET  !  NOP  !  NOP    ;(by-passes PMMI routine)    171H
  219.         RET  !  NOP  !  NOP    ;(by-passes PMMI routine)    174H
  220. JMP$SETUPR:    JMP    SETCMD        ;                177H
  221. JMP$SPCLMENU    RET ! NOP ! NOP        ;
  222. JMP$SYSVER:    JMP    SYSVER        ;                17DH
  223. JMP$BREAK:    JMP    SENDBRK        ;                180H
  224. ;
  225. ;
  226. ; Do not change the following six lines.
  227. ;
  228. JMP$ILPRT:    DS    3        ;                183H
  229. JMP$INBUF    DS    3        ;                186H
  230. JMP$INLNCOMP:    DS    3        ;                189H
  231. JMP$INMODEM    DS    3        ;                18CH
  232. JMP$NXTSCRN:    DS    3        ;                18FH
  233. JMP$TIMER    DS    3        ;                192H
  234. ;
  235. ; Routine to clear to end of screen.  If using CLREOS and CLRSCRN, set
  236. ; SCRNTEST to YES at 010AH (above).
  237. ;
  238. CLREOS:        LXI     D,CLRLIN     ; To clear to End Of Screen
  239.         MVI    C,PRINT            ; Put Terminal Data at CLRLIN
  240.         CALL    MEX
  241.         RET
  242. ;
  243. ;
  244. CLRSCN:        LXI    D,CLS        ; Put Terminal Sequence for
  245.         MVI    C,PRINT        ; Screen Clear at CLS
  246.         CALL    MEX
  247.         RET
  248. ;
  249. ; END OF FIXED ADDRESS ----------------------------------
  250. ;
  251.  
  252. SYSVER:        LXI    D,VERSMSG
  253.         MVI    C,PRINT
  254.         CALL    MEX
  255.         RET
  256. ;
  257. VERSMSG:
  258.         DB    'AMPRO LITTLE BOARD AND SERIES 100 COMPUTER'
  259.         DB    ' VERSION ',VER+'0','.', REV+'0',CR, LF,LF
  260.         DB    'FULL SET COMMANDS !',CR,LF,LF,'$'
  261. ;
  262. CLS          DB    0,0,0,0,0,'$'   ; <<- set this and the next for
  263.                     ;     your screen clear and line
  264.                     ;     clear sequences.
  265. CLRLIN        DB    0,0,0,0,0,'$'
  266. ;.....
  267. ;
  268. ;
  269. ;-----------------------------------------------------------------------
  270. ;.....
  271. ;
  272. ;
  273. ;
  274. SENDBRK:    MVI    A,5
  275.         OUT    PORT
  276.         MVI    A,0FAh    ; Send 'BREAK' command to DART
  277.         OUT    PORT
  278.         MVI    B,BRKWT    ; Wait 
  279.         CALL    MTIME
  280.         MVI    A,5
  281.         OUT    PORT
  282.         LDA    REG5    ; Send setup back to DART
  283.         OUT    PORT
  284.         RET
  285. ;.....
  286. ;
  287. ;
  288. ;
  289. ;.....
  290. ;
  291. ;
  292. ; The following is used to initialize the AMPRO Z80 DART port "B".
  293. ; Baud rate is initially set from MSPEED value
  294. ;
  295. INITMOD:  DI        ;no interupts during setup
  296.       LDA     MSPEED    ; get the initial MSPEED value and go
  297.             ; set the baud rate with it
  298.       CALL    PBAUD
  299. ;
  300. NITSIO:      DI        ; All DART sets go here
  301. ;
  302.       MVI    A,04H    ;write register 4 of DART 
  303.       OUT    PORT    ;contol port
  304.       LDA    REG4    ; mult, stop bits, parity bits
  305.       OUT    PORT    ;    
  306. ;
  307.       MVI    A,03H    ;write register 3 of DART
  308.       OUT     PORT    ;
  309.       LDA    REG3    ; rcv n bits/char, rcv enable
  310.       OUT    PORT    ;
  311. ;
  312.       MVI    A,05H    ;write register 5 of DART
  313.       OUT    PORT    ;
  314.       LDA    REG5    ; BITS/CHAR, TX ENABLE, RTS ENABLE
  315.       OUT    PORT    ;
  316. ;
  317.       MVI    A,45H    ;counter mode,contol word time constant follows
  318.       OUT    CTC    ;CTC channel 1
  319. ;
  320.       LDA    CTC1    ; MULTIPLIER
  321.       OUT    CTC    ;CTC channel 1
  322.       EI        ;
  323.       RET
  324. ;
  325. ;------------------------------------------------------------
  326. ;
  327. ;;
  328. ;
  329. ; Disconnect Routine
  330. ;
  331. ; Disconnects by lowering J4-P4 (Hand Shake Out) -connect
  332. ;  to DTR on semi-smart modems like Novation J-Cat
  333. ;
  334. ;  Hangs up modem for 2 seconds
  335. ;
  336. ;
  337. DISCON:      MVI    A,5        ;OUTPUT TXOFF,RXOFF,DTROFF TO 
  338.       OUT    PORT        ;TO DART PORT 5
  339.       MVI    A,0
  340.       OUT   PORT
  341.        MVI    B,HNGUPT*10        ; WAIT 2 SEC
  342.       CALL  MTIME
  343.       MVI    A,5        ; THEN RESET DART TO ORIGINAL STATUS
  344.       OUT    PORT
  345.       LDA    REG5
  346.       OUT    PORT
  347.       RET
  348. ;
  349. ;
  350. ;
  351. ; GOODBYE routines are called by MEX prior to exit to CP/M
  352. ;
  353. GOODBYE:  MVI    B,GBYTME        ;DELAY 300 MS.
  354.       CALL  MTIME
  355.       RET
  356. ;
  357. ;  SET COMMAND PROCESSOR
  358. ;
  359. SETCMD:      MVI    C,SBLANK    ;ANY ARGUMENTS?
  360.       CALL    MEX
  361.       JC    SETSHO        ;IF NOT, DISPLAY DEFAULTS
  362.       LXI    D,CMDTBL    
  363.       MVI    C,LOOKUP    
  364.       CALL  MEX        ;PARSE THE ARGUMENT
  365.       PUSH    H        ;SAVE ANY PARSED ARGUMENTS ON STACK
  366.       RNC            ;IF WE HAVE ONE, RETURN TO IT
  367.       POP    H        ;OOPS, INPUT NOT FOUND IN TABLE
  368. SETERR:      LXI    D,SETEMS
  369.       MVI    C,PRINT
  370.       CALL    MEX
  371.       CALL  CRLF
  372.       RET
  373. SETEMS:      DB    CR,LF,'SET command error',CR,LF,'$'
  374. ;
  375. SETBAD:      LXI    D,SETEMS
  376.       MVI    C,PRINT
  377.       CALL    MEX
  378. ;
  379. CMDTBL:   DB    '?'+80H            ; HELP
  380.       DW    SETHELP
  381.       DB    'BAU','D'+80H        ; SET BAUD
  382.       DW    STBAUD
  383.       DB    'PARIT','Y'+80H        ; SET PARITY
  384.       DW    STPRTY
  385.       DB    'STOPBIT','S'+80H    ; SET STOPBITS
  386.       DW    STSTOP
  387.       DB    'LENGT','H'+80H        ; SET LENGTH
  388.       DW    STBITS
  389.       DB     'PULS','E'+80H        ;SET PULSE FOR SM OVERLAY
  390.       DW    SWPULSE
  391.       DB    'TON','E'+80H        ;SET TONE FOR SM OVERLAY
  392.       DW    SWTONE
  393.       DB    '$'            ;TABLE TERMINATOR
  394. ;
  395. ;
  396. ;  "SET (no args): PRINT CURRENT STATISTICS
  397. ;
  398. SETSHO:      CALL  MILP
  399.       DB    CR,LF
  400.       DB    'SET values:',CR,LF,0
  401.           CALL    CRLF
  402.       CALL    MILP
  403.       DB    'Baud Rate: ',TAB,0
  404.       CALL    BDSHOW
  405.       CALL    CRLF
  406.       CALL  SHPRTY
  407.       CALL    CRLF
  408.       CALL    SHSTOP
  409.       CALL    CRLF
  410.       CALL  SHBITS
  411.       CALL    CRLF
  412.       CALL    SHDIAL
  413.       CALL  CRLF
  414.       CALL  CRLF
  415.       RET
  416. ;
  417. ; "SET ?" processor
  418. ;
  419. SETHELP:  CALL    MILP
  420.       DB    CR,LF,'SET PARITY    - OFF, EVEN or ODD'
  421.       DB    CR,LF,'SET STOPBITS  - 1, 1.5 or 2'
  422.       DB    CR,LF,'SET LENGTH    - 5, 6, 7 or 8'
  423.       DB    CR,LF,'SET BAUD      - 300, 450, 600, 1200, 2400, '
  424.       DB    '4800, 9600'
  425.       DB    CR,LF,'SET PULSE     - For Pulse Dialing'
  426.           DB    CR,LF,'SET TONE      - For Tone Dialing'
  427.       DB    CR,LF,CR,LF,0
  428.       RET
  429. ;
  430. ;
  431. ; "SET BAUD" processor
  432. ;
  433. STBAUD:    MVI    C,BDPARS    ;FUNCTION CODE: PARSE A BAUDRATE
  434.       CALL    MEX        ;LET MEX LOOK UP CODE
  435.       JC    SETERR        ;JUMP IF INVALID CODE
  436. STBAUD2      CALL    PBAUD        ;NO, TRY TO SET IT
  437.       JC    SETERR        ;IF NOT ONE OF OURS, BOMB OUT
  438.       CALL    NITSIO
  439. BDSHOW:      LDA    MSPEED        ;GET CURRENT BAUD RATE
  440.       MVI    C,PRBAUD    ;LET MEX PRINT IT
  441.       CALL    MEX
  442.       RET 
  443. ;
  444. ; This routine sets baud rate passed as MSPEED code in A.
  445. ; Returns CY=1 if baud rate not supported.
  446. ;
  447. PBAUD:      PUSH    H        ;DON'T ALTER ANYBODY
  448.       PUSH    D
  449.       PUSH     B
  450.       STA    TSPEED        ;put it in a safe spot
  451.       ADD    A        ;double it for offset into table
  452.       MOV    E,A        ;MSPEED CODE TO DE
  453.       MVI    D,0
  454.       LXI    H,BAUDTB    ;OFFSET INTO TABLE
  455.       DAD    D
  456.       MOV    A,M        ;FETCH CODE
  457.       ORA    A        ;0 MEANS UNSUPPORTED CODE
  458.       STC            ;PREP CARRY IN CASE UNSUPPORTED
  459.       JZ    PBEXIT        ;EXIT IF BAD
  460.       STA    CTC1        ;
  461.       INX    H
  462.       LDA    REG4
  463.       ANI    0FH
  464.       ORA    M
  465.       STA    REG4
  466.       LDA    TSPEED
  467.       STA    MSPEED
  468.       ORA    A        ;RETURN NO ERRORS
  469. PBEXIT:      POP    B
  470.       POP    D
  471.       POP    H
  472.       RET
  473. ;
  474. BAUDTB    DB    0,0        ;110 (NOT SUPPORTED)
  475.     DB    208,080H    ;300
  476.     DB    156,080h    ;450 
  477.     DB    208,040H    ;600
  478.     DB    0,0
  479.     DB    104,040H    ;1200
  480.     DB    52,040H        ;2400
  481.     DB    26,040H        ;4800
  482.     DB    13,040H        ;9600
  483.       DB    0FH        ;19200 (Not Supported) 
  484.       RET
  485. ;
  486. ;    SET PARITY command: reset transmit/receive parity
  487. ;
  488. ;        Parity is controlled by bits 0 and 1 of
  489. ;        the byte sent to the SIO write-register
  490. ;        4 as follows:
  491. ;
  492. ;           Parity    Bit 1       Bit 0
  493. ;                 Off          -          0
  494. ;              Odd      0         1
  495. ;             Even      1         1
  496. ;
  497. STPRTY:      MVI    C,SBLANK    ;check for parity code
  498.       CALL    MEX        ;
  499.       JC    SETERR        ;if none, print error
  500.       LXI    D,PARTBL    ;check for proper syntax
  501.       MVI    C,LOOKUP
  502.       CALL    MEX
  503.       PUSH    H        ;match found, go do it!
  504.       RNC            ;
  505.       POP    H        ;no match: fix stack and
  506.       JMP    SETERR        ;  print error
  507. ;
  508. PROFF:      LDA    REG4        ;get register 4 byte
  509.       ANI    0FEH        ;reset bit 0
  510.       JMP    PARTB1        ;
  511. PREVEN:      LDA    REG4        ;
  512.       ORI    003H        ;set bits 0 & 1
  513.       JMP    PARTB1        ;
  514. PRODD:      LDA    REG4        ;
  515.       ORI    001H        ;set bit 0
  516.       ANI    0FDH        ;reset bit 1
  517. PARTB1:      STA    REG4        ;
  518.       CALL    NITSIO        ;re-initialize the USART
  519.       CALL    SHPRTY        ;print the result
  520.       RET             ;
  521. SHPRTY:      CALL    MILP        ;display parity
  522.       DB    'Parity:  ',TAB,' ',0
  523.       LDA    REG4        ;
  524.       ANI    001H        ;test bit 0
  525.       CPI    0        ;if bit0=0 then parity off
  526.       JNZ    SHPRT1        ;
  527.       CALL    MILP        ;
  528.       DB    'Off',0        ;
  529.       RET
  530. SHPRT1:      LDA    REG4        ;
  531.       ANI    002H        ;test bit 1
  532.       CPI    0        ;if bit1=0 then parity odd
  533.       JNZ    SHPRT2        ;
  534.       CALL    MILP        ;
  535.       DB    'Odd',0        ;
  536.       RET            ;
  537. SHPRT2:      CALL    MILP        ;
  538.       DB    'Even',0    ;
  539.       RET
  540. ;
  541. ;    SET PARITY command table
  542. ;
  543. PARTBL:      DB    'OF','F'+80H    ;"set parity off"
  544.       DW    PROFF
  545.       DB    'EVE','N'+80H    ;"set parity even"
  546.       DW    PREVEN
  547.       DB    'OD','D'+80H    ;"set parity odd"
  548.       DW    PRODD
  549.       DB    0        ;<<== end of parity table
  550. ;
  551. ;    SET STOPBITS command: reset number of stop bits
  552. ;
  553. ;        The number of stop bits is controlled by bits
  554. ;        2 and 3 of the byte sent to the SIO write-
  555. ;        register 4, as follows:
  556. ;
  557. ;            Stop bits       Bit 3    Bit 2
  558. ;            1         0            1
  559. ;               1.5         1          0
  560. ;            2         1          1
  561. ;
  562. ;
  563. STSTOP:      MVI    C,SBLANK    ;check for stop bits
  564.       CALL    MEX        ;
  565.       JC    SETERR        ;if none, print error
  566.       LXI    D,STPTBL    ;check for proper syntax
  567.       MVI   C,LOOKUP
  568.       CALL    MEX        ;
  569.       PUSH    H        ;match found, go do it!
  570.       RNC            ;
  571.       POP    H        ;no match: fix stack and
  572.       JMP    SETERR        ;  print error
  573. ;
  574. STOP01:      LDA    REG4        ;get register 4 byte
  575.       ANI    0F7H        ;reset bit 3
  576.       ORI    004H        ;set bit 2
  577.       JMP    STSTP1        ;
  578. STOP02:      LDA    REG4        ;
  579.       ORI    00CH        ;set bits 2 and 3
  580.       JMP    STSTP1        ;
  581. STOP15:      LDA    REG4        ;
  582.       ORI    008H        ;set bit 3
  583.       ANI    0FBH        ;reset bit 2
  584. STSTP1:      STA    REG4        ;
  585.       CALL    NITSIO        ;
  586.       CALL    SHSTOP        ;print the result
  587.       RET
  588. SHSTOP:      CALL    MILP        ;display stop-bits
  589.       DB    'Stop bits:',TAB,' ',0
  590.       LDA    REG4        ;
  591.       ANI    004H        ;test bit 2
  592.       CPI    0        ;if bit2=0 then 1.5
  593.       JNZ    SHSTP1        ;
  594.       CALL    MILP        ;
  595.       DB    '1.5',0        ;
  596.       RET
  597. SHSTP1:      LDA    REG4        ;
  598.       ANI    008H        ;test bit 3
  599.       CPI    0        ;if bit3=0 then 1
  600.       JNZ    SHSTP2        ;
  601.       CALL    MILP        ;
  602.       DB    '1',0        ;
  603.       RET
  604. SHSTP2:      CALL    MILP        ;
  605.       DB    '2',0        ;
  606.       RET
  607. ;
  608. ;    SET STOPBITS command table
  609. ;
  610. STPTBL:      DB    '1'+80H        ;"set stop 1"
  611.       DW    STOP01
  612.       DB    '2'+80H        ;"set stop 2"
  613.       DW    STOP02
  614.       DB    '1.','5'+80H    ;"set stop 1.5"
  615.       DW    STOP15
  616.       DB    0        ;<<== End of stop-bits table
  617. ;
  618. ;    SET LENGTH command: set bits per character
  619. ;
  620. ;        The number of bits per character is controlled for
  621. ;        the receiver circuit by bits 6 and 7 of the byte
  622. ;        sent to the SIO write-register 3 and for the trans-
  623. ;        mitter circuit by bits 5 and 6 of the byte sent to
  624. ;        the SIO write-register 5.  The assumption has been
  625. ;        made here that both transmission and reception will
  626. ;        be carried on at the same number of bits per charac-
  627. ;        ter.  The bit configurations are shown for register
  628. ;        3 only, but are the same for register 5:
  629. ;
  630. ;                       REG5--->Bit 6           Bit 5
  631. ;            BPC    REG3--->Bit 7        Bit 6
  632. ;             5          0          0
  633. ;             6          1             0
  634. ;             7          0          1
  635. ;             8          1          1
  636. ;
  637. STBITS:      MVI    C,SBLANK    ;check for bits/char
  638.       CALL    MEX        ;
  639.       JC    SETERR        ;if none, print error
  640.       LXI    D,BITTBL    ;check for proper syntax
  641.       MVI    C,LOOKUP
  642.       CALL    MEX
  643.       PUSH    H        ;match found, go do it!
  644.       RNC            ;
  645.       POP    H        ;no match: fix stack and
  646.       JMP    SETERR        ;  print error
  647. ;
  648. BIT5:      LDA    REG3        ;
  649.       ANI    0BFH        ;reset bit 6
  650.       ANI    07FH        ;reset bit 7
  651.       STA    REG3        ;
  652.       LDA    REG5        ;
  653.       ANI    0DFH        ;reset bit 5
  654.       ANI    0BFH        ;reset bit 6
  655.       JMP    STBTS1        ;
  656. BIT6:      LDA    REG3        ;
  657.       ANI    0BFH        ;reset bit 6
  658.       ORI    080H        ;set bit 7
  659.       STA    REG3        ;
  660.       LDA    REG5        ;
  661.       ANI    0DFH        ;reset bit 5
  662.       ORI    040H        ;set bit 6
  663.       JMP    STBTS1        ;
  664. BIT7:      LDA    REG3        ;
  665.       ORI    040H        ;set bit 6
  666.       ANI    07FH        ;reset bit 7
  667.       STA    REG3        ;
  668.       LDA    REG5        ;
  669.       ORI    020H        ;set bit 5
  670.       ANI    0BFH        ;reset bit 6
  671.       JMP    STBTS1        ;
  672. BIT8:      LDA    REG3        ;
  673.       ORI    040H        ;set bit 6
  674.       ORI    080H        ;set bit 7
  675.       STA    REG3        ;
  676.       LDA    REG5        ;
  677.       ORI    020H        ;set bit 5
  678.       ORI    040H        ;set bit 6
  679. STBTS1:      STA    REG5        ;
  680.       CALL    NITSIO        ;
  681.       CALL    SHBITS        ;print the result
  682.       RET
  683. SHBITS:      CALL    MILP        ;display bits/char
  684.       DB    'Bits/char:',TAB,' ',0
  685.       LDA    REG5        ;
  686.       ANI    040H        ;test bit 6
  687.       CPI    0        ;if bit6=0 then 6 bpc
  688.       JNZ    SHBTS2        ;
  689.       LDA    REG5        ;
  690.       ANI    020H        ;test bit 5
  691.       CPI    0        ;if bit5=0 then 5 bpc
  692.       JNZ    SHBTS1        ;
  693.       CALL    MILP        ;
  694.       DB    '5',0        ;
  695.       RET            ;
  696. SHBTS1:      CALL    MILP        ;
  697.       DB    '7',0        ;
  698.       RET            ;
  699. SHBTS2:      LDA    REG5        ;
  700.       ANI    020H        ;test bit 5
  701.       CPI    0        ;if bit5=0 then 6 bpc
  702.       JNZ    SHBTS3        ;
  703.       CALL    MILP        ;
  704.       DB    '6',0        ;
  705.       RET            ;
  706. SHBTS3:      CALL    MILP        ;
  707.       DB    '8',0        ;
  708.       RET
  709. ;
  710. ;    SET LENGTH command table
  711. ;
  712. BITTBL:      DB    '5'+80H        ;"set bits 5"
  713.       DW    BIT5
  714.       DB    '6'+80H        ;"set bits 6"
  715.       DW    BIT6
  716.       DB    '7'+80H        ;"set bits 7"
  717.       DW    BIT7
  718.       DB    '8'+80H        ;"set bits 8"
  719.       DW    BIT8
  720.       DB    0        ;<<== end of bit table
  721. ;
  722.       RET
  723. ;
  724. ;
  725. ;
  726. SWPULSE:  MVI    A,'P'        ; Put 'P' into Touch/Pulse byte
  727.       STA    TOUCHPULSE    ; for SM Overlay to grab    
  728.       JMP    SHDIAL
  729. ;
  730. SWTONE      MVI    A,'T'        ; Or put 'T' there
  731.       STA    TOUCHPULSE
  732.       
  733. ;
  734. SHDIAL:      LDA    TOUCHPULSE    ; Grab Flag 
  735.       CPI    'T'        ; if Tone then say so
  736.       JZ    TONED
  737.       CPI    'P'        ; likewise if pulse
  738.       JZ    PULSED
  739.       LXI    D,BADFLA    ; But if bad say so
  740.       MVI   C,PRINT        ; should never get here, just for 
  741.       CALL    MEX        ; safety
  742.       RET
  743. TONED:      LXI    D,TONEFLF
  744.       MVI    C,PRINT
  745.       CALL    MEX
  746.       RET
  747. PULSED      LXI    D,PULSEF
  748.       MVI    C,PRINT
  749.       CALL    MEX
  750.       RET
  751. BADFLA:      DB    'BAD TOUCH/PULSE FLAG',CR,LF,'$'
  752. TONEFLF      DB    'Tone Dial','$'
  753. PULSEF    DB    'Pulse Dial','$'
  754. ;
  755. ; General utility routines
  756. ;
  757. MILP:      MVI    C,ILP        ;IN-LINE PRINT
  758.       JMP    MEX
  759.       RET
  760. ;
  761. MTIME:      MVI    C,TIMER        ;MEX TIMER
  762.       JMP    MEX
  763.       RET
  764. ;
  765. CRLF:      CALL    MILP        ;PRINT CARRIAGE RETURN, LINE FEED
  766.       DB    CR,LF,0
  767.       RET
  768. ;
  769. ;
  770. ;==========================================================================
  771. ;                            Data Area
  772. ;==========================================================================
  773. ;
  774. ; Default UART parameters (Initalized for  RS-232 port B)
  775. ;
  776. REG3:      DB    0C1H    ;ENABLE RECEIVE AT 8 BITS/CHAR
  777. REG4:      DB    004H    ;NO PARITY, 1 STOP, CLOCK RATE SET AT INITALIZE TIME
  778. REG5:      DB    06AH    ;ENABLE TRANSMIT AT 8 BITS/CHAR
  779. CTC1      DB     0    ;Also set at initalize time
  780. ;
  781. ; Miscellaneous Default Data
  782. ;
  783. ;
  784. TSPEED      DB    1        ;TEMP SPEED AREA
  785. ;
  786. ;
  787.       END
  788.