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-IN13.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  9KB  |  281 lines

  1. ; MXO-IN13.ASM -- INTEL 8251 I/O mapped overlay for MEX10-12. 12/31/84
  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 places particular emphasis on using the Intel 8251 I/O chip.
  6. ; Much of the information contained here is not in the main file.
  7. ;
  8. ; Edit this file for your preferences then follow the "TO USE:" example
  9. ; shown below.
  10. ;
  11. ; Use the MEX "SET" command to change the baudrate when desired.  When
  12. ; the program is first called up the baud rate is set to 300.  The
  13. ; initial baud rate can be changed by setting to the desired baud rate
  14. ; and "CLONEing".
  15. ;
  16. ; The baud rate switch for the modem port must be set to 1200 baud, even
  17. ; if the port will only be used at 300 baud.
  18. ;
  19. ;     TO USE: First edit this file filling in answers for your own
  20. ;         equipment.  Then assemble with ASM.COM or equivalent
  21. ;         assembler.  Then use MLOAD to overlay the the results
  22. ;         of this program to the original .COM file.
  23. ;
  24. ;
  25. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  26. ; 12/31/84 - Adapted for Intel 8251 from    - David Miles
  27. ;          MXO-HZ13                
  28. ; 05/22/84 - Rewritten for MEX10        - Biff Bueffel
  29. ; 07/27/83 - Renamed to work with MDM712    - Irv Hoff
  30. ; 07/01/83 - Revised to work with MDM711    - Irv Hoff
  31. ; 06/22/83 - Revised to work with MDM710    - Irv Hoff
  32. ; 05/27/83 - Revised to work with MDM709    - Irv Hoff
  33. ; 05/15/83 - Revised to work with MDM708    - Irv Hoff
  34. ; 04/11/83 - Updated to work with MDM707    - Irv Hoff
  35. ; 04/04/83 - Updated to work with MDM706    - Irv Hoff
  36. ; 02/27/83 - Updated to work with MDM705    - Irv Hoff
  37. ;
  38. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  39. ;
  40. ; MEX service processor stuff
  41. ;
  42. MEX    EQU    0D00H        ; address of the service processor
  43. INMDM    EQU    255        ; get char from port to A, CY=no more in 100 ms
  44. TIMER    EQU    254        ; delay 100ms * reg B
  45. TMDINP    EQU    253        ; B=# secs to wait for char, cy=no char
  46. CHEKCC    EQU    252        ; check for ^C from KBD, Z=present
  47. SNDRDY    EQU    251        ; test for modem-send ready
  48. RCVRDY    EQU    250        ; test for modem-receive ready
  49. SNDCHR    EQU    249        ; send a character to the modem (after sndrdy)
  50. RCVCHR    EQU    248        ; recv a char from modem (after rcvrdy)
  51. LOOKUP    EQU    247        ; table search: see CMDTBL comments for info
  52. PARSFN    EQU    246        ; parse filename from input stream
  53. BDPARS    EQU    245        ; parse baud-rate from input stream
  54. SBLANK    EQU    244        ; scan input stream to next non-blank
  55. EVALA    EQU    243        ; evaluate numeric from input stream
  56. LKAHED    EQU    242        ; get nxt char w/o removing from input
  57. GNC    EQU    241        ; get char from input, cy=1 if none
  58. ILP    EQU    240        ; inline print
  59. DECOUT    EQU    239        ; decimal output
  60. PRBAUD    EQU    238        ; print baud rate
  61. ;
  62. PRINT    EQU    9        ; MEX/BDOS print-string function call
  63. ;
  64. BELL    EQU    07H        ; bell
  65. CR    EQU    0DH        ; carriage return
  66. ESC    EQU    1BH        ; escape
  67. LF    EQU    0AH        ; linefeed
  68. ;
  69. YES    EQU    0FFH
  70. NO    EQU    0
  71. ;
  72. ;
  73. MODDATP    EQU    12H        ; data port for 8251
  74. MODCTL1    EQU    MODDATP+1    ; status port for 8251
  75. MODRCVB    EQU    2        ; bit to test for received data
  76. MODRCVR    EQU    2        ; modem receive ready
  77. MODSNDB    EQU    1        ; bit to test for ready to send
  78. MODSNDR    EQU    1        ; modem send ready bit
  79. ;
  80.         ORG    100H
  81. ;
  82.         DS    3    ; (for  "JMP   START" instruction)
  83. ;
  84. PMMIMODEM:      DB    NO    ; yes=PMMI S-100 Modem            103H
  85. SMARTMODEM:     DB    NO    ; yes=HAYES Smartmodem, no=non-Hayes    104H
  86. TOUCHPULSE:     DB    'T'    ; T=touch, P=pulse (Smartmodem-only)    105H
  87. CLOCK:        DB    40    ; clock speed in MHz x10, 25.5 MHz max.    106H
  88.                 ; 20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  89. MSPEED:        DB    5    ; 0=110 1=300 2=450 3=600 4=710 5=1200    107H
  90.                 ; 6=2400 7=4800 8=9600 9=19200 default
  91. BYTDLY:        DB    5    ; 0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  92.                 ; default time to send character in ter-
  93.                 ; minal mode file transfer for slow BBS.
  94. CRDLY:        DB    5    ; 0=0 delay 1=100 ms 5=500 ms 9=900 ms  109H
  95.                 ; default time for extra wait after CRLF
  96.                 ; in terminal mode file transfer
  97. NOOFCOL:        DB    5    ; number of DIR columns shown        10AH
  98. SETUPTST:       DB    YES    ; yes=user-added Setup routine        10BH
  99. SCRNTEST:       DB    YES    ; Cursor control routine        10CH
  100. ACKNAK:        DB    YES    ; yes=resend a record after any non-ACK    10DH
  101.                 ; no=resend a record after a valid NAK
  102. BAKUPBYTE:      DB    NO    ; yes=change any file same name to .BAK    10EH
  103. CRCDFLT:        DB    YES    ; yes=default to CRC checking        10FH
  104. TOGGLECRC:      DB    YES    ; yes=allow toggling of CRC to Checksum    110H
  105. CONVBKSP:       DB    NO    ; yes=convert backspace to rub        111H
  106. TOGGLEBK:       DB    NO    ; yes=allow toggling of bksp to rub    112H
  107. ADDLF:        DB    NO    ; no=no LF after CR to send file in    113H
  108.                 ; terminal mode (added by remote echo)
  109. TOGGLELF:       DB    YES    ; yes=allow toggling of LF after CR    114H
  110. TRANLOGON:      DB    NO    ; yes=allow transmission of logon    115H
  111.                 ; write logon sequence at location LOGON
  112. SAVCCP:        DB    YES    ; yes=do not overwrite CCP        116H
  113. LOCONEXTCHR:    DB    NO    ; yes=local command if EXTCHR precedes    117H
  114.                 ; no=external command if EXTCHR precedes
  115. TOGGLELOC:      DB    YES    ; yes=allow toggling of LOCONEXTCHR    118H
  116. LSTTST:        DB    YES    ; yes=printer available on printer port    119H
  117. XOFFTST:        DB    NO    ; yes=checks for XOFF from remote while    11AH
  118.                 ; sending a file in terminal mode
  119. XONWAIT:        DB    NO    ; yes=wait for XON after CR while    11BH
  120.                 ; sending a file in terminal mode
  121. TOGXOFF:        DB    YES    ; yes=allow toggling of XOFF checking    11CH
  122. IGNORCTL:       DB    YES    ; yes=CTL-chars above ^M not displayed    11DH
  123. EXTRA1:        DB    0    ; for future expansion            11EH
  124. EXTRA2:        DB    0    ; for future expansion            11FH
  125. BRKCHR:        DB    '@'-40H    ; ^@ = Send a 300 ms. break tone        120H
  126. NOCONNCT:       DB    'N'-40H    ; ^N = Disconnect from the phone line    121H
  127. LOGCHR:        DB    'L'-40H    ; ^L = Send logon            122H
  128. LSTCHR:        DB    'P'-40H    ; ^P = Toggle printer            123H
  129. UNSAVE:         DB    'R'-40H    ; ^R = Close input text buffer        124H
  130. TRANCHR:        DB    'T'-40H ; ^T = Transmit file to remote        125H
  131. SAVECHR:        DB    'Y'-40H    ; ^Y = Open input text buffer        125H
  132. EXTCHR:        DB    '^'-40H    ; ^^ = Send next character        126H
  133. ;
  134.         DS    2    ;                     128H
  135. ;
  136. IN$MODCTL1:     IN    MODCTL1 ! RET    ; in modem control port        12AH
  137.         DS    7
  138. OUT$MODDATP:    OUT    MODDATP ! RET    ; out modem data port        134H
  139.         DS    7
  140. IN$MODDATP:     IN    MODDATP ! RET    ; in modem data port        13EH
  141.         DS    7
  142. ANI$MODRCVB:    ANI     MODRCVB ! RET   ; bit to test rec ready
  143. CPI$MODRCVR:    CPI     MODRCVR ! RET   ; value when ready
  144. ANI$MODSNDB:    ANI     MODSNDB ! RET   ; bit to test snd ready
  145. CPI$MODSNDR:    CPI     MODSNDR ! RET   ; value when ready
  146.         DS    12
  147. ;
  148.         DS    2        ; for user message.        160H
  149.         DS    6        ;                 162H
  150. JMP$GOODBYE:    JMP    GOODBYE        ;                 168H
  151. JMP$INITMOD:    JMP    INITMOD        ; go to user written routine    16BH
  152. JMP$NEWBAUD    JMP    NEWBAUD        ; Reset baudrate            16EH
  153.         RET  !    NOP  !    NOP    ; (by-passes PMMI routine)    171H
  154.         RET  !    NOP  !    NOP    ; (by-passes PMMI routine)    174H
  155. JMP$SETUPR:    JMP    SETUPR        ;                 177H
  156.         DS    3        ;                 17AH
  157. JMP$SYSVER:    JMP    SYSVER        ;                 17DH
  158. JMP$BREAK:    JMP    SENDBRK        ;                 180H
  159. ;
  160. ; Do not change the following six lines.
  161. ;
  162. JMP$ILPRT:    DS    3        ;                 183H
  163. JMP$INBUF    DS    3        ;                 186H
  164. JMP$INLNCOMP:    DS    3        ;                 189H
  165. JMP$INMODEM    DS    3        ;                 18CH
  166. JMP$NXTSCRN:    DS    3        ;                 18FH
  167. JMP$TIMER:    DS    3        ;                 192H
  168. ; .....
  169. ;
  170. ;
  171. CLREOS:     LXI    D,EOSMSG
  172.      MVI    C,PRINT
  173.      CALL    MEX
  174.      RET
  175. ;
  176. CLRSCRN: LXI    D,CLSMSG
  177.      MVI    C,PRINT
  178.      CALL    MEX
  179.      RET
  180. ;
  181. EOSMSG:     DB    '$'
  182. CLSMSG:     DB    '$'
  183. ;.....
  184. ;
  185. ;
  186. SYSVER:    MVI    C,ILP
  187.     CALL    MEX
  188.     DB    'Version for 8251 I/O port'
  189.     DB    CR,LF,0
  190.     RET
  191. ; .....
  192. ;
  193. ;
  194. ; This routine allows a 300 ms. break tone to be send to reset some
  195. ; time-share computers.
  196. ;
  197. SENDBRK: RET
  198. ; .....
  199. ;
  200. ;
  201. ; This routine sends a 300 ms. break tone and sets DTR low for the same
  202. ; length of time to disconnect some modems such as the Bell 212A, etc.
  203. ;
  204. GOODBYE: RET
  205. ; .....
  206. ;
  207. ;
  208. ; The following is used in setting up the 8251 I/O port.
  209. ;
  210. INITMOD: LDA    MSPEED        ; initialize port using old rate code
  211. ;
  212. NEWBAUD: CPI    1        ; 300 baud code?
  213.      LXI    H,CTL300    ; load pointer to 300 baud ctl byte
  214.      JZ    SETBAUD        ; do it to it.
  215.      CPI    5        ; check for 1200 baud
  216.      LXI    H,CTL1200
  217.      RNZ            ; return now if none of above
  218. ;
  219. SETBAUD: STA    MSPEED        ; save new baud rate
  220.      MVI    A,0AAH        ; dummy command
  221.      OUT    MODCTL1        ; send to port to get attention
  222.      NOP !    NOP        ; wait for slow ports
  223.      MVI    A,40H        ; reset command
  224.      OUT    MODCTL1
  225.      NOP !    NOP
  226.      MOV    A,M        ; get command byte
  227.      OUT    MODCTL1
  228.      NOP !    NOP
  229.      MVI    A,37H        ; reset RTS, ERR, DTR. enable XMT and REC
  230.      OUT    MODCTL1
  231.      NOP !    NOP
  232.      IN    MODDATP        ; wake up port
  233. ;
  234. TELL:     MVI    C,ILP
  235.      CALL    MEX        ; Print current baud rate
  236.      DB    CR,LF,'Baud rate is now: ',0
  237.      LDA    MSPEED
  238.      MVI    C,PRBAUD
  239.      CALL    MEX
  240.      MVI    C,ILP
  241.      CALL    MEX
  242.      DB    CR,LF,0
  243.      XRA    A
  244.      RET
  245. ;
  246. ; The following changes the baud rate with the SET command.
  247. ;
  248. SETUPR:     MVI    C,SBLANK    ; Any arguments?
  249.      CALL    MEX
  250.      JC    TELL        ; If not, go display baud
  251.      LXI    D,CMDTBL
  252.      MVI    C,LOOKUP
  253.      CALL    MEX        ; Parse argument
  254.      MOV    A,L        ; put baud code in accum
  255.      JNC    NEWBAUD        ; set baud if argument good
  256.      MVI    C,ILP        ; Tell user input not valid
  257.      CALL    MEX
  258.      DB    CR,LF,'Only 300 and 1200 allowed on SET command',CR,LF,0
  259.      RET
  260. ;
  261. CMDTBL:     DB    '30','0'+80H
  262.      DW    0001        ; 300 baud code
  263.      DB    '120','0'+80H
  264.      DW    0005        ; 1200 baud code
  265.      DB    0
  266. ;
  267. ; TABLE OF BAUDRATE PARAMETERS FOR 8251
  268. ;
  269. CTL300:     DB    0CFH        ; control byte for 300 baud
  270. CTL1200: DB    0CEH        ; control byte for 1200 baud
  271. ;
  272. BAUDBUF: DB    10,0
  273.      DS    10
  274. ;.....
  275. ;
  276. ;
  277. ; NOTE:  MUST TERMINATE PRIOR TO 0B00H (with Smartmodem)
  278. ;
  279.      END
  280. ;
  281.