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-SP2.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  12KB  |  382 lines

  1. ; MXO-SP2.ASM  -  Spectravideo SV328 overlay for MEX        01/28/87
  2. ;
  3. ; You will want to look over this file as there are a number of options
  4. ; that you can use to reconfigure the overlay to suit different equipment.
  5. ; This overlay is a modification of MXOH8.14 of 04/06/85, changed to suit
  6. ; the SV328 using the SV805 RS232 card having the 8250 I/O, driving a
  7. ; Hayes - protocol external modem.  The SET command is active to change
  8. ; baudrate when desired (but stay within the modem limits though).
  9. ; The word is fixed at 8 bits, 1 stop bit, no parity, in this overlay.
  10. ;
  11. ; Use the appropriate modem overlay next.
  12. ;
  13. ; Edit this file for your preferences then follow the "TO USE:" example
  14. ; shown below.
  15. ;
  16. ;
  17. ;       TO USE: First edit this file filling in answers for your own
  18. ;               equipment.  Then assemble with ASM.COM or equivalent
  19. ;               assembler. Then use MLOAD to overlay the the results
  20. ;               of this program to the original .COM file.
  21. ;
  22. ;
  23. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  24. ; 01/28/87 - Modified to suit SV328 (8250 I/O) ports and clock.
  25. ;            Renamed MXO-SP2 from MXOH8.14              O. Bilharz
  26. ; 06/20/84 - Added routines for 2661 I/O,       - Jim McAfee
  27. ;          - renamed MXO-H814 (4/6/85)
  28. ; 05/28/84 - MEXify labels/Change disconnect.   - Biff Bueffel
  29. ; 05/23/84 - Corrected clear-screen error       - Biff Bueffel
  30. ; 05/19/84 - Converted for MEX10                - Biff Bueffel
  31. ; 11/11/83 - Renamed to M7H8-1.ASM, no changes  - Irv Hoff
  32. ; 07/27/83 - Renamed to work with MDM712        - Irv Hoff
  33. ; 07/01/83 - Revised to work with MDM711        - Irv Hoff
  34. ; 06/22/83 - Revised to work with MDM710        - Irv Hoff
  35. ; 05/27/83 - Revised to work with MDM709        - Irv Hoff
  36. ; 05/15/83 - Revised to work with MDM708        - Irv Hoff
  37. ; 04/17/83 - Revised to work with MDM707        - Irv Hoff
  38. ; 04/04/83 - Updated to work with MDM706        - Irv Hoff
  39. ; 02/27/83 - Updated to work with MDM705        - Irv Hoff
  40. ; 02/17/83 - Updated to work with MDM704        - Irv Hoff
  41. ; 02/07/83 - Updated to work with MDM703        - Irv Hoff
  42. ; 01/27/83 - Updated to work with MDM702        - Irv Hoff
  43. ; 01/10/83 - Updated to work with MDM701        - Irv Hoff
  44. ; 10/03/82 - First version of this file
  45. ;
  46. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  47. ;
  48. BELL:           EQU     07H             ;bell
  49. CR:             EQU     0DH             ;carriage return
  50. ESC:            EQU     1BH             ;escape
  51. LF:        EQU    0AH        ;linefeed
  52. ;
  53. YES:        EQU    0FFH
  54. NO:        EQU    0
  55. ;
  56. ;
  57. ; Change the value at MODDATP if it does not match what you are using.
  58. ;
  59. DPORT:        EQU    028H        ; Modem Data Port
  60. SPORT:        EQU    DPORT+5        ; Modem Status Port
  61. MDRCVB:     EQU    1        ;bit to test for received data
  62. MDRCVR:     EQU    1        ;modem receive ready
  63. MDSNDB:     EQU    20H        ;bit to test for ready to send
  64. MDSNDR:     EQU    20H        ;modem send ready bit
  65. ;
  66. ;
  67. ; MEX service processor stuff
  68. ;
  69. MEX    EQU    0D00H        ;address of the service processor
  70. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  71. TIMER    EQU    254        ;delay 100ms * reg B
  72. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  73. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  74. SNDRDY    EQU    251        ;test for modem-send ready
  75. RCVRDY    EQU    250        ;test for modem-receive ready
  76. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  77. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  78. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  79. PARSFN    EQU    246        ;parse filename from input stream
  80. BDPARS    EQU    245        ;parse baud-rate from input stream
  81. SBLANK    EQU    244        ;scan input stream to next non-blank
  82. EVALA    EQU    243        ;evaluate numeric from input stream
  83. LKAHED    EQU    242        ;get nxt char w/o removing from input
  84. GNC    EQU    241        ;get char from input, cy=1 if none
  85. ILP    EQU    240        ;inline print
  86. DECOUT    EQU    239        ;decimal output
  87. PRBAUD    EQU    238        ;print baud rate
  88. ;
  89. PRINT    EQU    9        ;BDOS print-string function
  90. ;
  91.         ORG    100H
  92. ;
  93. ; Change the clock speed if needed, to match your system
  94. ;
  95.         DS    3    ;(for  "JMP   START" instruction)
  96. ;
  97. PMODEM:        DB    NO    ;yes=PMMI S-100 Modem            103H
  98. SMODEM:        DB    YES    ;yes=HAYES Smartmodem, no=non-Hayes    104H
  99. TPULSE:        DB    'P'    ;T=Touch, P=Pulse (Smartmodem only)
  100. CLOCK:        DB    37    ;clock speed in MHz x 10, 25.5 MHz max    106H
  101.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  102. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  103.                 ;6=2400 7=4800 8=9600 9=19200 default
  104. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  105.                 ;default time to send character in ter-
  106.                 ;minal mode file transfer for slow BBS.
  107. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  108.                 ;default time for extra wait after CRLF
  109.                 ;in terminal mode file transfer
  110. COLUMS:        DB    5    ;number of DIR columns shown        10AH
  111. SETFLG:        DB    YES    ;yes=user-added Setup routine        10BH
  112. SCRTST:        DB    YES    ;Cursor control routine         10CH
  113.         DB    YES    ;yes=resend a record after any non-ACK    10DH
  114.                 ;no=resend a record after a valid NAK
  115. BAKFLG:        DB    YES    ;yes=change any file same name to .BAK    10EH
  116. CRCFLG:        DB    YES    ;yes=default to CRC checking        10FH
  117. TOGCRC:        DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  118. CVTBS:        DB    NO    ;yes=convert backspace to rub        111H
  119. TOGLBK:        DB    YES    ;yes=allow toggling of bksp to rub    112H
  120. ADDLF:        DB    NO    ;no=no LF after CR to send file in    113H
  121.                 ;terminal mode (added by remote echo)
  122. TOGLF:        DB    YES    ;yes=allow toggling of LF after CR    114H
  123.         DB    NO    ;yes=allow transmission of logon    115H
  124.                 ;write logon sequence at location LOGON
  125. SAVCCP:        DB    YES    ;yes=do not overwrite CCP        116H
  126.         DB    NO    ;yes=local command if EXTCHR precedes    117H
  127.                 ;no=external command if EXTCHR precedes
  128.         DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  129. LSTTST:        DB    YES    ;yes=printer available on printer port    119H
  130. XOFTST:        DB    NO    ;yes=checks for XOFF from remote while    11AH
  131.                 ;sending a file in terminal mode
  132. XONWT:        DB    NO    ;yes=wait for XON after CR while    11BH
  133.                 ;sending a file in terminal mode
  134. TOGXOF:        DB    YES    ;yes=allow toggling of XOFF checking    11CH
  135. IGNCTL:        DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  136. EXTRA1:        DB    0    ;for future expansion            11EH
  137. ;
  138. ;       The following CTRL- sequences are active in Terminal mode
  139. ;
  140. EXITCHR:    DB    'E'-40H    ;^E = Exit to main menu            11FH
  141. BRKCHR:        DB    '@'-40H    ;^@ = Send a 300 ms. break tone        120H
  142. NOCONN:        DB    'N'-40H    ;^N = Disconnect from the phone line    121H
  143. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  144. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  145. UNSAVE:        DB    'R'-40H    ;^R = Close input text buffer        124H
  146. TRNCHR:        DB    'T'-40H ;^T = Transmit file to remote        125H
  147. SAVCHR:        DB    'Y'-40H    ;^Y = Open input text buffer        126H
  148. EXTCHR:        DB    '^'-40H    ;^^ = Send next character        127H
  149. ;
  150. ;
  151.         DS    2        ;                128H
  152. ;
  153. INCTL1:        IN    SPORT ! RET    ;in modem control port        12AH
  154.         DS    7
  155. OTDATA:        OUT    DPORT ! RET    ;out modem data port        134H
  156.         DS    7
  157. INPORT:        IN    DPORT ! RET    ;in modem data port        13EH
  158.         DS    7
  159. MASKR:        ANI    MDRCVB ! RET    ;bit to test for receive ready    148H
  160. TESTR:        CPI    MDRCVR ! RET    ;value of rcv. bit when ready    14BH
  161. MASKS:        ANI    MDSNDB ! RET    ;bit to test for send ready    14EH
  162. TESTS:        CPI    MDSNDR ! RET    ;value of send bit when ready    151H
  163.         DS    12        ;PMMI only calls        154H
  164. ;
  165. ;
  166.         DS    2        ;Not used by MEX        160H
  167.         DS    3        ;                162H
  168. DISCV:        JMP    DISCON        ;disconnect            
  169. GOODBV:        JMP    GOODBY        ;                168H
  170. INMODV:        JMP    NITMOD        ;go to user written routine    16BH
  171. NEWBDV:        JMP    NEWBAUD        ;Change baudrate        16EH
  172.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    171H
  173.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    174H
  174. SETUPV:        JMP    SETCMD        ;                177H
  175.         DS    3        ;Not used by MEX        17AH
  176. VERSNV:        JMP    SYSVER        ;                17DH
  177. BREAKV:        JMP    SBREAK        ;                180H
  178. ;
  179. ; -----------------------------------------------------------------
  180. ;
  181. ; Do not change the following six lines.
  182. ;
  183. ILPRTV:        DS    3        ;                183H
  184. INBUFV:        DS    3        ;                186H
  185. INCMPV:        DS    3        ;                189H
  186. INMDMV:        DS    3        ;                18CH
  187.         DS    3        ;                18FH
  188. TIMERV:        DS    3        ;                192H
  189. ;
  190. ; ---------------------------------------------------------------------
  191. ;
  192. ; The following are screen clearing routines
  193. ;
  194. CLREOS:      LXI     D,EOSMSG
  195.         MVI    C,PRINT
  196.         CALL    MEX
  197.         RET            
  198. ;
  199. CLS:        LXI    D,CLSMSG
  200.         MVI    C,PRINT
  201.         CALL    MEX
  202.         RET            
  203. ;
  204. ; -----------
  205. ;
  206. SYSVER:        MVI    C,ILP
  207.         CALL    MEX
  208.         DB    'Version for SV328 with 8250 I/O.',CR,LF,0
  209.         RET
  210. ;.....
  211. ;
  212. ;
  213. ;-----------------------------------------------------------------------
  214. ;
  215. ; NOTE:  You can change the SYSVER message to be longer or shorter.  The
  216. ;     end of your last routine should terminate by 0B00H (601 bytes
  217. ;     available after start of SYSVER) if using the Hayes Smartmodem
  218. ;     or by address 0D00H (2659 bytes) otherwise.
  219. ;
  220. ;-----------------------------------------------------------------------
  221. ;
  222. ;
  223. GOODBY:      RET            ;Not done here
  224. ;
  225. ;
  226. ; This routine sends a 300 ms. break tone to reset some time-share
  227. ; computers.
  228. ;
  229. ;
  230. SBREAK:   MVI    A,40H        ;SET BREAK TONE
  231.       OUT    DPORT+3
  232.       JMP    DISC1        ;SEND A 300 MS. BREAK TONE
  233. ;.....
  234. ;
  235. ;                Disconnect modem
  236. DISCON:      XRA    A
  237. ;
  238. DISC1:      OUT    DPORT+4        ;SET DTR AND RTS LOW
  239.       MVI    B,3        ;WAIT 300 MS.
  240.       MVI    C,TIMER
  241.       CALL    MEX    
  242.       MVI    A,03H        ;RESET TO NORMAL 8 BITS
  243.       OUT    DPORT+3
  244.       MVI    A,01H
  245.       OUT    DPORT+4        ;RESET DTR HIGH
  246.       RET
  247. ;
  248. ;.....
  249. ;
  250. ;
  251. ; The following is used to initialize the I/O port
  252. ;
  253. NITMOD: MVI    A,1        ;default transfer speed to 300 baud
  254.     STA    MSPEED
  255.      DI            ;turn off interrupts for init.
  256. ;
  257. ;                 ;initialize the 8250
  258.       XRA    A
  259.       OUT    DPORT+1        ;interrupt enable register
  260.     MVI    A,80H        ;Set LCR bit 7 to access divisor
  261.       OUT    DPORT+3        ;line control register
  262.       OUT    DPORT+3
  263. ;
  264. LSPSPD:      MVI    A,80H        ;default 'LSP' speed for 300 baud
  265.       OUT    DPORT        ;register for 'LSP' speed if enabled
  266. ;
  267. MSPSPD:      MVI    A,01H        ;default 'MSP' speed for 300 baud
  268.       OUT    DPORT+1        ;register for 'MSP' speed if enabled
  269. ;
  270.       MVI    A,03H        ;8-level, 1 stop bit, no parity
  271.       OUT    DPORT+3        ;line control register
  272.       MVI    A,01H        ;set 'DTR' for proper modem output level
  273.       OUT    DPORT+4        ;modem control register
  274. ;
  275.       EI            ;restore interrupts to normal
  276.       RET
  277. ;.....
  278. ;
  279. ;
  280. ; The following changes the baud rate with the SET command.
  281. ;
  282. ;
  283. SETCMD:      MVI    C,SBLANK    ;Any arguments?
  284.       CALL    MEX
  285.       JC    TELL        ;If not, go display baud
  286.       LXI    D,CMDTBL
  287.       MVI    C,LOOKUP
  288.       CALL    MEX        ;Parse argument
  289.       PUSH    H        ;Save any parsed argument addrs on stack
  290.       RNC            ;If we have one, return to it
  291.       POP    H        ;Oops, input not found in table
  292.       MVI    C,ILP
  293.       CALL    MEX        ;Tell user input not valid
  294.       DB    CR,LF,'Only 300, 600, 1200, 2400, or 9600'
  295.           DB    ' allowed on SET command',CR,LF,0
  296.       RET
  297. ;
  298. CMDTBL:      DB    '30','0'+80H
  299.       DW    OK300
  300.       DB    '60','0'+80H
  301.       DW    OK600
  302.       DB    '120','0'+80H
  303.       DW    OK1200
  304.       DB    '240','0'+80H
  305.       DW    OK2400
  306.       DB    '960','0'+80H
  307.       DW    OK9600
  308.       DB    0
  309. ;
  310. TELL:      MVI    C,ILP
  311.       CALL    MEX        ;Print current baud rate
  312.       DB    CR,LF,'Baud rate is now: ',0
  313.       LDA    MSPEED
  314.       MVI    C,PRBAUD
  315.       CALL    MEX
  316.       RET
  317. ;
  318. ;
  319. ;
  320. OK300:      MVI    A,1        ;MSPEED 300 baud value
  321.       LHLD    BD300        ;get 300 baud parameters in HL
  322.       JMP    LOADBD        ;go load them
  323. ;
  324. OK600:      MVI    A,3
  325.       LHLD    BD600
  326.       JMP     LOADBD
  327. ;
  328. OK1200:      MVI    A,5
  329.       LHLD    BD1200
  330.       JMP    LOADBD
  331. ;
  332. OK2400:      MVI    A,6
  333.       LHLD    BD2400
  334.       JMP    LOADBD
  335. ;
  336. OK9600:      MVI    A,8
  337.       LHLD    BD9600
  338. ;
  339. ;
  340. LOADBD:      STA    NITMOD+1    ;store speed to show transfer time
  341. ;
  342.       MOV    A,L        ;get least significant baud rate byte
  343.       STA    LSPSPD+1    ;store in NITMOD
  344.       MOV    A,H        ;get most signifcant baud rate byte
  345.       STA    MSPSPD+1    ;store in NITMOD
  346.       JMP    NITMOD        ;reset H89 8250
  347. ;
  348. ;
  349. NEWBAUD:  CPI    1
  350.       JZ    OK300
  351.       CPI    3
  352.       JZ    OK600
  353.       CPI    5
  354.       JZ    OK1200
  355.       CPI    6
  356.       JZ    OK2400
  357.       CPI    8
  358.       JZ     OK9600
  359.       RET
  360. ;
  361. ;
  362. ; Table of baud rate parameters
  363. ;    8250  with 3.072 MHz Xtal
  364. ;
  365. BD300:    DW    0280H
  366. BD600:    DW    0140H
  367. BD1200:    DW    00A0H
  368. BD2400:    DW    0050H
  369. BD9600:    DW    0014H
  370. ;
  371. BAUDBUF:  DB    10,0
  372.       DS    10
  373. ;
  374. EOSMSG:      DB    ESC,'J',0,0,0,'$'              
  375. CLSMSG:      DB    ESC,'E',0,0,0,'$'
  376. ;------------------------------------------------------------------
  377. ;
  378. ; NOTE:  MUST TERMINATE PRIOR TO 0B00H (with Smartmodem)
  379. ;
  380.       END
  381. ;
  382.