home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MEX / MXO-R213.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  17KB  |  673 lines

  1. ; MXO-R213.ASM -- TRS-80 Model II overlay file for Mex.  1/11/87
  2. ;
  3. ; You will want to look this file over carefully. There are a number of
  4. ; options that you can use to configure the program to suit your taste.
  5. ; This file adapts the TRS-80 Model II (and probably Models 12 and 16)
  6. ; computers to MEX.    Requires Pickles & Trout CP/M.
  7. ;
  8. ;
  9. ; Use the "SET" command to change the baudrate when desired.  It starts
  10. ; out at 1200 baud when the program is first called up.    
  11. ;
  12. ;
  13. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  14. ; 01/11/87 - Added Parity,Stopbit,Length SET    - Biff Bueffel
  15. ; 01/26/86 - Added Mex Set command        - Biff Bueffel
  16. ; 06/07/85 - Corrected 9600 baud error {p&t pg. 16.8} - Bob Perigo
  17. ; 04/20/85 - Baud change with P&T 2.2m system functions - Bob Perigo
  18. ; 11/11/83 - Renamed to M7R2-1.ASM, no changes    - Irv Hoff
  19. ; 09/18/83 - Modified M712XE.ASM for 
  20. ;         TRS-80 Model II and Pickles
  21. ;         & Trout CP/M (should also 
  22. ;         work on Mods 12 and 16)            - Joseph Katz
  23. ;
  24. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  25. ;
  26. BELL:        EQU    07H        ;bell
  27. CR:        EQU    0DH        ;carriage return
  28. ESC:        EQU    1BH        ;escape
  29. LF:        EQU    0AH        ;linefeed
  30. TAB:        EQU    09H        ;HORIZONTAL TAB
  31. ;
  32. YES:        EQU    0FFH
  33. NO:        EQU    0
  34. ;
  35. ; MEX service processor stuff
  36. ;
  37. MEX    EQU    0D00H        ;address of the service processor
  38. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  39. TIMER    EQU    254        ;delay 100ms * reg B
  40. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  41. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  42. SNDRDY    EQU    251        ;test for modem-send ready
  43. RCVRDY    EQU    250        ;test for modem-receive ready
  44. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  45. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  46. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  47. PARSFN    EQU    246        ;parse filename from input stream
  48. BDPARS    EQU    245        ;parse baud-rate from input stream
  49. SBLANK    EQU    244        ;scan input stream to next non-blank
  50. EVALA    EQU    243        ;evaluate numeric from input stream
  51. LKAHED    EQU    242        ;get nxt char w/o removing from input
  52. GNC    EQU    241        ;get char from input, cy=1 if none
  53. ILP    EQU    240        ;inline print
  54. DECOUT    EQU    239        ;decimal output
  55. PRBAUD    EQU    238        ;print baud rate
  56. ;
  57. PRINT    EQU    9        ;MEX/BDOS print-string function call
  58. ;
  59. ;
  60. PORT:        EQU    0F4H        ;TRS-80 II serial output port A
  61. MODCTL1:    EQU    PORT+2        ;Modem control port
  62. MODDATP:    EQU    PORT        ;Modem data port
  63. MODCTL2:    EQU    PORT+2        ;Modem status port
  64. MODRCVB:    EQU    01H        ;Bit to test for receive
  65. MODRCVR:    EQU    01H        ;Value when receive ready
  66. MODSNDB:    EQU    04H        ;Bit to test for send
  67. MODSNDR:    EQU    04H        ;Value when send ready        
  68. ;
  69. SDB8            EQU     01100000B       ;set data bits to 8
  70. SDB7            EQU     01000000B       ;... and 7
  71. SDB6            EQU     00100000B       ;... and 6
  72. SDB5            EQU     0               ;... and 5
  73. RDB             EQU     10011111B       ;reset data bits
  74. DATBITM         EQU     01100000B       ;data bit mask
  75. ;
  76. SPOFF           EQU     0               ;set parity to off
  77. SPODD           EQU     00000001B       ;set parity to odd
  78. SPEVEN          EQU     00000011B       ;set parity to even
  79. RPOFF           EQU     11111100B       ;reset parity bits (to off)
  80. PARITYM         EQU     00000011B       ;parity mask
  81. ;
  82. SSB1            EQU     00000100B       ;set stop bits to 1
  83. SSB15           EQU     00001000B       ;... and 1.5
  84. SSB2            EQU     00001100B       ;... and 2
  85. RSB             EQU     11110011B       ;reset stop bits
  86. STPBITM         EQU     00001100B       ;stop bit mask
  87. ;
  88.         ORG    100H
  89. ;
  90. ;
  91. ; Change the clock speed to suit your system
  92. ;
  93.         DS    3    ;(for  "JMP   START" instruction)
  94. ;
  95.         DB    NO    ;yes=PMMI S-100 Modem            103H
  96.         DB    NO    ;yes=HAYES Smartmodem, no=non-PMMI    104H
  97. TPULSE:        DB    'P'     ;T=touch, P=pulse (Smartmodem-only)     105H
  98. CLOCK:        DB    40    ;clock speed in MHz x10, 25.5 MHz max.    106H
  99.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  100. MSPEED:     DB    5    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  101.                 ;6=2400 7=4800 8=9600 9=19200 default
  102. BYTDLY:     DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  103.                 ;default time to send character in ter-
  104.                 ;minal mode file transfer for slow BBS.
  105. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  106.                 ;default time for extra wait after CRLF
  107.                 ;in terminal mode file transfer
  108. COLUMS:        DB    5    ;number of DIR columns shown        10AH
  109. SETFLG:        DB    YES    ;yes=user-added Setup routine        10BH
  110. SCRTST:        DB    NO    ;cursor control routine         10CH
  111.         DB    YES    ;yes=resend a record after any non-ACK    10DH
  112.                 ;no=resend a record after a valid NAK
  113. BAKFLG:        DB    NO    ;yes=change any file same name to .BAK    10EH
  114. CRCDFL:        DB    YES    ;yes=default to CRC checking        10FH
  115. TOGCRC:        DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  116. CVTBS:        DB    NO    ;yes=convert backspace to rub        111H
  117. TOGLBK:        DB    YES    ;yes=allow toggling of bksp to rub    112H
  118. ADDLF:        DB    NO    ;no=no LF after CR to send file in    113H
  119.                 ;terminal mode (added by remote echo)
  120. TOGLF:        DB    YES    ;yes=allow toggling of LF after CR    114H
  121.         DB    NO    ;yes=allow transmission of logon    115H
  122.                 ;write logon sequence at location LOGON
  123. SAVCCP:     DB    YES    ;yes=do not overwrite CCP        116H
  124.         DB    NO    ;yes=local command if EXTCHR precedes    117H
  125.                 ;no=external command if EXTCHR precedes
  126.         DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  127. LSTTST:     DB    YES    ;yes=printer available on printer port    119H
  128. XOFTST:        DB    NO    ;yes=check for XOFF from remote while    11AH
  129.                 ;sending a file in terminal mode
  130. XONWT:        DB    NO    ;yes=wait for XON after CR while    11BH
  131.                 ;sending a file in terminal mode
  132. TOGXOF:        DB    YES    ;yes=allow toggling of XOFF checking    11CH
  133. IGNCTL:        DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  134. NDELAY:     DB    30    ;for future expansion            11EH
  135. EXITCHR:     DB    'E'-40H    ;^E=Exit to Main menu            11FH
  136. BRKCHR:     DB    '@'-40H ;^@ = Send a 300 ms. break tone         120H
  137. NOCONN:        DB    'N'-40H ;^N = Disconnect from the phone line    121H
  138. LOGCHR:     DB    'L'-40H ;^L = Send logon                        122H
  139. LSTCHR:     DB    'P'-40H ;^P = Toggle printer                    123H
  140. UNSAVE:     DB    'R'-40H ;^R = Close input text buffer           124H
  141. TRNCHR:        DB    'T'-40H ;^T = Transmit file to remote           125H
  142. SAVCHR:        DB    'Y'-40H ;^Y = Open input text buffer            126H
  143. EXTCHR:     DB    '^'-40H ;^^ = Send next character               127H
  144. ;
  145. ;
  146.         DS    2        ;                
  147. IN$MODCTL1:    MVI    A,10H        ;channel 0, reset interrupts    
  148.         OUT    MODCTL1
  149.         IN    MODCTL1        ;get the status bits
  150.         RET
  151.         DS    3
  152. ;
  153. OUT$MODDATP:    OUT    MODDATP ! RET    ;out modem data port        
  154.         DS    7
  155. IN$MODDATP:    IN    MODDATP ! RET    ;in modem data port        
  156.         DS    7
  157. ANI$MODRCVB:    ANI    MODRCVB    ! RET    ;bit to test for receive ready    
  158. CPI$MODRCVR:    CPI    MODRCVR ! RET    ;value of receive bit when rdy    
  159. ANI$MODSNDB:    ANI    MODSNDB    ! RET    ;bit to test for send ready    
  160. CPI$MODSNDR:    CPI    MODSNDR    ! RET    ;value of send bit when ready    
  161.         DS    6        ;                
  162. OUT$MODCTL1:    OUT    MODCTL1    ! RET    ;out modem control port     
  163. OUT$MODCTL2:    OUT    MODCTL2    ! RET    ;out modem status port        
  164. ;
  165. ;
  166.         DS    2        ;Not used by MEX.        160H
  167.         DS    6        ;                162H
  168. GOODBV:        JMP    GOODBY         ;                168H
  169. INMODV:        JMP    NITMOD         ;go to user written routine    16BH
  170. NEWBDV:        JMP      NEWBAUD        ;Change baudrate        16EH
  171.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    171H
  172.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    174H
  173. SETUPV:        JMP    SETCMD        ;                177H
  174.         DS    3        ;Not used by MEX        17AH
  175. VERSNV:        JMP    SYSVER        ;                17DH
  176. BREAKV:        JMP    SBREAK         ;                180H
  177. ;
  178. ;
  179. ; Do not change the following six lines.
  180. ;
  181. ILPRTV:        DS    3        ;                183H
  182. INBUFV:        DS    3        ;                186H
  183. ILCMPV:        DS    3        ;                189H
  184. INMDMV        DS    3        ;                18CH
  185.         DS    3        ;                18FH
  186. TIMERV:        DS    3        ;                192H
  187. ;
  188. ;
  189. ; Clear sequences -- CLREOS is clear to end of screen, CLRSCRN is clear
  190. ; entire screen.  
  191. ;
  192. CLREOS:        LXI    D,EOSMSG
  193.         MVI    C,PRINT
  194.         CALL    MEX
  195.         RET            
  196. ;
  197. CLS:    LXI    D,CLSMSG
  198.         MVI    C,PRINT
  199.         CALL    MEX
  200.         RET            
  201. ;
  202. SYSVER:        MVI    C,ILP        ;                1A7H
  203.         CALL    MEX
  204.         DB    'TRS-2 VERSION (FOR P&T & SERIAL PORT A)'
  205.         DB    CR,LF,0
  206.         RET
  207. ;
  208. ;
  209. SBREAK:  MVI    A,5
  210.       OUT    MODCTL1
  211.       MVI    A,0F8H        ;SEND A BREAK TONE
  212.       JMP    GOODBY1
  213. ;
  214. ;
  215. ; This routine sends a 300 ms. break tone and sets DTR low for the same
  216. ; length of time to disconnect some modems such as the Bell 212A, etc.    
  217. ;
  218. GOODBY:   MVI    A,5
  219.       OUT    MODCTL1        ;SEND TO THE STATUS PORT
  220.       MVI    A,78H        ;TURN OFF DTR
  221. ;
  222. GOODBY1:  OUT    MODCTL1
  223.       MVI    B,3        ;WAIT FOR 300 MS.
  224.       MVI    C,TIMER
  225.       CALL    MEX
  226.       MVI    A,5
  227.       OUT    MODCTL1
  228.       MVI    A,0E8H        ;RESTORE TO NORMAL, 8 BITS, DTR ON, ETC.
  229.       OUT    MODCTL1
  230.       RET
  231. ;
  232. ;    
  233. ; TRS-80 II initialization -- Uses P&T service calls for baud change
  234. ;
  235. NITMOD:  MVI    B,0        ;PORT CALL
  236.       MVI    C,0        ;SETUP A NO PARITY
  237.       MVI    D,0E6H        ;RTS HI, 1 STOP, 8 BITS, DTR HI
  238. PTCODE:      MVI    E,5H        ;P&T'S SPEED CODE DEFAULT {1200}
  239.       LXI    H,0        ;NO PROTOCOL
  240.       CALL    40H        ;DO IT
  241.       RET
  242. ;
  243. ;
  244. ;
  245. ; Setup routine to allow changing modem speed with the SET command.
  246. ;
  247. ;
  248. ;Set command processor
  249. ;
  250. SETCMD:      MVI    C,SBLANK    ;ANY ARGUMENTS?
  251.       CALL  MEX
  252.       JC    SETSHO        ;IF NOT, DISPLAY DEFAULT(S)
  253.       LXI    D,CMDTBL
  254.           MVI    C,LOOKUP
  255.       CALL  MEX        ;PARSE THE ARGUMENT
  256.       PUSH    H        ;SAVE ANY PARSED ARGUMENTS ON STACK
  257.       RNC            ;IF WE HAVE ONE, RETURN TO IT
  258.       POP    H        ;OOPS, INPUT NOT FOUND IN TABLE
  259. SETERR:   CALL     MILP
  260.       DB    CR,LF,'SET command error',CR,LF,0
  261.       RET
  262. ;
  263. ;Argument table
  264. ;
  265. CMDTBL:   DB    '?'+80H            ;HELP
  266.       DW    SETHELP
  267.       DB    'ORI','G'+80H        ;ORIGINATE MODE
  268.       DW    ORIG
  269.       DB    'ANSWE','R'+80H        ;ANSWER MODE
  270.       DW    ANS
  271.       DB    'TON','E'+80H        ;TONE DIALING
  272.       DW    STTONE
  273.       DB    'PULS','E'+80H        ;PULSE DIALING
  274.       DW    STPULSE
  275.       DB    'DELA','Y'+80H        ;SET DELAY
  276.       DW    DELAY
  277.       DB    'BAU','D'+80H        ;SET BAUD
  278.       DW    STBAUD
  279.       DB    'PARIT','Y'+80H        ;SET PARITY
  280.       DW    STPRTY
  281.       DB    'STOPBIT','S'+80H    ;SET STOPBITS
  282.       DW    STSTOP
  283.       DB    'LENGT','H'+80H        ;SET LENGTH
  284.       DW    STBITS
  285.       DB    0            ;TABLE TERMINATOR
  286. ; "SET (no args): PRINT CURRENT STATISTICS
  287. ;
  288. SETSHO:      CALL  MILP    
  289.       DB    CR,LF
  290.       DB    'SET values:',CR,LF,CR,LF,0
  291.       CALL    MDSHOW
  292.       CALL    CRLF
  293.       CALL    TPSHOW
  294.       CALL    CRLF
  295.       CALL    DLSHOW
  296.       CALL    CRLF        
  297.       CALL    BDSHOW
  298.       CALL    CRLF
  299.       CALL  SHPRTY
  300.       CALL    CRLF
  301.       CALL    SHSTOP
  302.       CALL    CRLF
  303.       CALL  SHBITS
  304.       CALL    CRLF
  305.       RET
  306. ;"SET ?" processor
  307. ;
  308. SETHELP:  CALL    MILP
  309.  
  310.       DB    CR,LF,'SET ORIG'
  311.       DB    CR,LF,'SET ANSWER'
  312.       DB    CR,LF,'SET TONE'
  313.       DB    CR,LF,'SET PULSE'
  314.       DB    CR,LF,'SET DELAY     - <N> seconds'
  315.       DB    CR,LF,'SET BAUD      - 300, 600, 1200, 2400, '
  316.       DB    '4800, 9600'
  317.       DB    CR,LF,'SET PARITY    - OFF, EVEN or ODD'
  318.       DB    CR,LF,'SET STOPBITS  - 1, 1.5 or 2'
  319.       DB    CR,LF,'SET LENGTH    - 5, 6, 7 or 8'
  320.       DB    CR,LF,CR,LF,0
  321.       RET
  322. ;"SET BAUD" processor
  323. ;
  324. STBAUD:      MVI    C,SBLANK    ;
  325.       CALL    MEX
  326.       JC    SETERR        ;
  327.       LXI    D,BDTBL
  328.       MVI    C,LOOKUP
  329.       CALL    MEX        ;Parse argument
  330.       PUSH    H        ;Save any parsed argument addrs on stack
  331.       RNC            ;If we have one, return to it
  332.       POP    H        ;Oops, input not found in table
  333.       CALL    MILP        ;Tell user input not valid
  334.       DB    CR,LF,'That baudrate not supported by SET command',CR,LF,0
  335.       RET
  336. ;
  337. BDTBL:      DB    '30','0'+80H
  338.       DW    OK300
  339.       DB    '60','0'+80H
  340.       DW    OK600
  341.       DB    '120','0'+80H
  342.       DW    OK1200
  343.       DB    '240','0'+80H
  344.       DW    OK2400
  345.       DB    '480','0'+80H
  346.       DW    OK4800
  347.       DB    '960','0'+80H
  348.       DW    OK9600
  349.       DB    0
  350. ;
  351. ;
  352. OK300:      MVI    A,1
  353.       MVI    H,BD300
  354.       JMP    LOADBD
  355. ;
  356. OK600:      MVI    A,3
  357.       MVI    H,BD600
  358.       JMP    LOADBD
  359. ;
  360. OK1200:      MVI    A,5
  361.       MVI    H,BD1200
  362.       JMP    LOADBD
  363. ;
  364. OK2400:      MVI    A,6
  365.       MVI    H,BD2400
  366.       JMP    LOADBD
  367. ;
  368. OK4800:      MVI    A,7
  369.       MVI    H,BD4800
  370.       JMP    LOADBD
  371. ;
  372. OK9600:      MVI    A,8
  373.       MVI    H,BD9600
  374. ;
  375. LOADBD:      STA    MSPEED        ;CHANGE TIME-TO-SEND TO MATCH BAUDRATE
  376.       MOV    A,H        ;GET P&T PARAMETER
  377.       STA    PTCODE+1    ;PUT IT TO USE
  378.       JMP    NITMOD        ;REINITIALIZE TO NEW BAUDRATE, THEN DONE
  379. ;
  380. NEWBAUD:  CPI    1
  381.       JZ    OK300
  382.       CPI    3
  383.       JZ    OK600
  384.       CPI    5
  385.       JZ    OK1200
  386.       CPI    6
  387.       JZ    OK2400
  388.       CPI    7
  389.       JZ    OK4800
  390.       CPI    8
  391.       JZ    OK9600
  392.       RET
  393. ;
  394. ;    TABLE OF P&T BAUDRATE PARAMETERS
  395. ;
  396. BD300:      EQU    3H
  397. BD600:      EQU    4H
  398. BD1200:      EQU    5H
  399. BD2400:      EQU    6H
  400. BD4800:      EQU    7H
  401. BD9600:      EQU    8H    ;the 9 on pg 16.8 of p&t 2.2m manual is typo.
  402. ;
  403. BDSHOW:      LDA    MSPEED        ;GET CURRENT BAUD RATE
  404.       MVI    C,PRBAUD    ;LET MEX PRINT IT
  405.       CALL    MEX
  406.       RET 
  407. ;
  408. ;
  409. ;SET MODE PROCESSOR 
  410. ;
  411. ORIG:      XRA    A
  412.       STA    ANSFLG        ;SET ORIG FLAG
  413.       LXI    H,SMO        ;SEND OUT ATS0=0
  414.       CALL    SMSEND
  415.       RET
  416. ;
  417. ANS:      MVI    A,0FFH
  418.       STA    ANSFLG        ;SET ANS FLAG
  419.       LXI    H,SMA        ;SEND OUT ATS0=1
  420.       CALL    SMSEND
  421.       RET            ;EXIT 
  422. ;
  423. ;Send string to the SmartModem
  424. ;
  425. SMSEND:      MVI    C,SNDRDY    ;WAIT FOR MODEM READY
  426.       CALL    MEX
  427.       JNZ    SMSEND
  428.       MOV    A,M        ;FETCH NEXT CHARACTER
  429.       INX    H
  430.       ORA    A        ;END?
  431.       RZ            ;DONE IF SO
  432.       MOV    B,A        ;NO, POSITION FOR SENDING
  433.       MVI    C,SNDCHR    ;NOPE, SEND THE CHARACTER
  434.       CALL    MEX
  435.       JMP    SMSEND
  436. ;
  437. MDSHOW:      LDA    ANSFLG
  438.       ORA    A
  439.       JZ    MDORIG        
  440.       CALL    MILP
  441.       DB    'Auto-answer mode',0
  442.       RET
  443. MDORIG:      CALL    MILP
  444.       DB    'Originate mode',0
  445.       RET
  446. ;
  447. SMO:      DB    'ATS0=0',CR,0
  448. SMA:      DB    'ATS0=1',CR,0
  449. SMD:      DB    'ATS7=60',CR,0
  450. ;
  451. ;Set dial processor
  452. ;
  453. STTONE:      MVI    A,'T'
  454.       JMP    SDIAL1
  455. STPULSE:  MVI    A,'P'
  456. SDIAL1:   STA    TPULSE
  457.       RET
  458. TPSHOW:      LDA    TPULSE
  459.       CPI    'T'
  460.       JZ    TPTONE
  461.       CALL    MILP
  462.       DB    'Pulse Dial',0
  463.       RET
  464. TPTONE:      CALL    MILP
  465.       DB    'Tone Dial',0      
  466.       RET
  467. ;
  468. ;Set delay processor
  469. ;
  470. DELAY:      MVI    C,EVALA
  471.       CALL    MEX
  472.       MOV    A,H
  473.       ORA    A
  474.       JNZ    SETERR
  475.       MOV    A,L
  476.       STA    NDELAY
  477.       LXI    H,SMD
  478.       CALL    SMSEND
  479.       RET
  480. DLSHOW:      CALL    MILP
  481.       DB    'Answer Delay is ',0
  482.       LHLD    NDELAY
  483.       MVI    H,0
  484.       MVI    C,DECOUT
  485.       CALL    MEX
  486.       CALL    MILP
  487.       DB    ' seconds',0
  488.       RET
  489. ;
  490. ;    SET PARITY command: reset transmit/receive parity
  491. ;
  492. STPRTY:      MVI    C,SBLANK    ;check for parity code
  493.       CALL    MEX        ;
  494.       JC    SETERR        ;if none, print error
  495.       LXI    D,PARTBL    ;check for proper syntax
  496.       MVI    C,LOOKUP
  497.       CALL    MEX
  498.       JC    SETERR
  499.        LDA    NITMOD+3
  500.       ANI    RPOFF        ;Reset parity bits (also sets parity off)
  501.       PCHL            ;go to the proper section
  502. ;
  503. PREVEN:      ORI    SPEVEN
  504.       JMP    PARTB1
  505. PRODD:      ORI    SPODD
  506. PARTB1:      STA    NITMOD+3    ;Also comes to this point if set parity to off
  507.       JMP    NITMOD
  508. ;
  509. SHPRTY:      CALL    MILP
  510.       DB    'Parity:  ',TAB,' ',0
  511.       LDA    NITMOD+3
  512.       ANI    PARITYM
  513.       CPI    SPOFF    ;parity off?
  514.       JNZ    SHPRT1
  515.       CALL    MILP
  516.       DB    'Off',0
  517.       RET
  518. SHPRT1:      CPI    SPODD    ;parity odd?
  519.       JNZ    SHPRT2
  520.       CALL    MILP
  521.        DB    'Odd',0
  522.       RET
  523. SHPRT2:      CALL    MILP        ;
  524.       DB    'Even',0    ;
  525.       RET
  526. ;
  527. ;    SET PARITY command table
  528. ;
  529. PARTBL:      DB    'OF','F'+80H    ;"set parity off"
  530.       DW    PARTB1
  531.       DB    'EVE','N'+80H    ;"set parity even"
  532.       DW    PREVEN
  533.       DB    'OD','D'+80H    ;"set parity odd"
  534.       DW    PRODD
  535.       DB    0        ;<<== end of parity table
  536. ;
  537. ;-------
  538. ;    SET STOPBITS command: reset number of stop bits
  539. ;
  540.  
  541. STSTOP:      MVI    C,SBLANK    ;check for stop bits
  542.       CALL    MEX        ;
  543.       JC    SETERR        ;if none, print error
  544.       LXI    D,STPTBL    ;check for proper syntax
  545.       MVI   C,LOOKUP
  546.       CALL    MEX        ;
  547.       JC    SETERR        ;print error
  548.       LDA    NITMOD+5
  549.       ANI    RSB        ;reset stop bits
  550.       PCHL            ;go do it
  551.  
  552. STOP01:      ORI    SSB1
  553.       JMP    STSTP1
  554. STOP15:      ORI    SSB15
  555.       JMP    STSTP1
  556. STOP02:      ORI    SSB2
  557. STSTP1:      STA    NITMOD+5
  558.       JMP    NITMOD
  559. ;
  560. ;
  561. SHSTOP:      CALL    MILP        ;display stop-bits
  562.       DB    'Stop bits:',TAB,' ',0
  563.       LDA    NITMOD+5        ;
  564.       ANI    STPBITM
  565.       CPI    SSB1
  566.       JNZ    SHSTP2
  567.       CALL    MILP
  568.       DB    '1',0
  569.       RET
  570. SHSTP2:      CPI    SSB2
  571.           JNZ    SHSTP15
  572.       CALL    MILP
  573.       DB    '2',0
  574.       RET
  575. SHSTP15:    
  576.       CALL    MILP
  577.       DB    '1.5',0
  578.       RET
  579.  
  580. ;
  581. ;    SET STOPBITS command table
  582. ;
  583. STPTBL:      DB    '1'+80H        ;"set stop 1"
  584.       DW    STOP01
  585.       DB    '2'+80H        ;"set stop 2"
  586.       DW    STOP02
  587.       DB    '1.','5'+80H    ;1.5 stop bits
  588.       DW    STOP15
  589.       DB    0        ;<<== End of stop-bits table
  590. ;
  591. ;-------
  592. ;    SET LENGTH command: set bits per character
  593.  
  594.  
  595. STBITS:      MVI    C,SBLANK    ;check for bits/char
  596.       CALL    MEX        ;
  597.       JC    SETERR        ;if none, print error
  598.       LXI    D,BITTBL    ;check for proper syntax
  599.       MVI    C,LOOKUP
  600.       CALL    MEX
  601.       JC    SETERR
  602.       LDA    NITMOD+5
  603.       ANI    RDB        ;reset data bits (also = 5 bit)
  604.           PCHL            ;go do function
  605.  
  606. BIT6:      ORI    SDB6    ;6 bits
  607.       JMP    STBTS1      
  608. BIT7:      ORI    SDB7    ;7 bits
  609.       JMP    STBTS1
  610. BIT8:      ORI    SDB8    ;8 bits
  611. STBTS1:      STA    NITMOD+5    ;also comes here if set bits to 5
  612.       JMP    NITMOD
  613.  
  614. SHBITS:      CALL    MILP        ;display bits/char
  615.       DB    'Bits/char:',TAB,' ',0
  616.       LDA    NITMOD+5        ;
  617.       ANI    DATBITM
  618.       JZ    SHDB5
  619.       CPI    SDB6
  620.       JZ    SHDB6
  621.       CPI    SDB7
  622.       JZ    SHDB7
  623.       CALL    MILP
  624.       DB    '8',0
  625.       RET
  626. SHDB7:      CALL     MILP
  627.       DB    '7',0
  628.       RET
  629. SHDB6:      CALL    MILP
  630.       DB    '6',0
  631.       RET
  632. SHDB5:      CALL    MILP
  633.       DB    '5',0
  634.       RET
  635.  
  636. ;
  637. ;    SET LENGTH command table
  638.  
  639. BITTBL:      DB    '5'+80H        ;"set bits 5"
  640.       DW    STBTS1
  641.       DB    '6'+80H        ;"set bits 6"
  642.       DW    BIT6
  643.           DB    '7'+80H        ;7 BITS
  644.       DW    BIT7
  645.              DB    '8'+80h        ;8 bits
  646.       DW    BIT8
  647.       DB    0        ;<<== end of bpc table
  648. ;
  649. ;General utility routines
  650. ;
  651. MILP:      MVI    C,ILP        ;IN-LINE PRINT
  652.       JMP    MEX
  653.       RET
  654. ;
  655. CRLF:     CALL  MILP            ;PRINT CARRIAGE RETURN, LINE FEED
  656.           DB    CR,LF,0
  657.           RET
  658. ;
  659. ;------
  660. ;
  661. ANSFLG:   DB    0    
  662. EOSMSG:      DB    0FH,14H,16H,1AH,02H,'$'              
  663. CLSMSG:      DB    0FH,14H,16H,1AH,0CH,'$'
  664. BAUDBUF:  DB    10,0
  665.       DS    10
  666. ;
  667. ;-----------------------------------------------------------------------
  668. ;
  669. ;
  670. ; NOTE:  MUST TERMINATE PRIOR TO 0B00H (with Smartmodem)
  671. ;
  672.       END
  673.