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-MC10.AQM / MXO-MC10.ASM
Assembly Source File  |  2000-06-30  |  10KB  |  316 lines

  1. ; MXO-MC10.ASM -- MAGIC Computer PC-88 overlay file for MEX10.  04/28/85
  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 MAGIC Computer PC-88 to MEX.
  6. ;
  7. ; Edit this file for your preferences then follow the "TO USE:" example
  8. ; shown below.
  9. ;
  10. ; Use the "SET" command to change the baudrate when desired.  It starts
  11. ; out at 300 baud when the program is first called up.
  12. ;
  13. ;    TO USE: First edit this file filling in answers for your own
  14. ;        equipment.  Then assemble with ASM.COM or equivalent
  15. ;        assembler.  Then use MLOAD to overlay the the results
  16. ;        of this program to the original .COM file.
  17. ;
  18. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  19. ;  04/28/85    MEXified overlay                       - Chris Heuser
  20. ;  10/22/84     Used Ampro overlay and changed
  21. ;           initmod addresses and other minor
  22. ;            equates to work with the MAGIC
  23. ;            computer PC-88.                        - Chris Heuser
  24. ;
  25. ;
  26. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  27. ;
  28. BELL:        EQU    07H        ;bell
  29. CR:        EQU    0DH        ;carriage return
  30. ESC:        EQU    1BH        ;escape
  31. LF:        EQU    0AH        ;linefeed
  32. ;
  33. YES:        EQU    0FFH
  34. NO:        EQU    0
  35. ;
  36. ; MEX service processor stuff
  37. ;
  38. MEX    EQU    0D00H        ;address of the service processor
  39. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  40. TIMER    EQU    254        ;delay 100ms * reg B
  41. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  42. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  43. SNDRDY    EQU    251        ;test for modem-send ready
  44. RCVRDY    EQU    250        ;test for modem-receive ready
  45. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  46. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  47. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  48. PARSFN    EQU    246        ;parse filename from input stream
  49. BDPARS    EQU    245        ;parse baud-rate from input stream
  50. SBLANK    EQU    244        ;scan input stream to next non-blank
  51. EVALA    EQU    243        ;evaluate numeric from input stream
  52. LKAHED    EQU    242        ;get nxt char w/o removing from input
  53. GNC    EQU    241        ;get char from input, cy=1 if none
  54. ILP    EQU    240        ;inline print
  55. DECOUT    EQU    239        ;decimal output
  56. PRBAUD    EQU    238        ;print baud rate
  57. ;
  58. PRINT    EQU    9        ;MEX/BDOS print-string function call
  59. ;
  60. ; Change the following information to match your equipment
  61. ;
  62. PORT:        EQU    8AH
  63. MODCTL1        EQU    PORT        ;MODEM CONTROL PORT
  64. MODDATP:    EQU    88H             ;MODEM DATA IN PORT
  65. MODRCVB:    EQU    1        ;BIT TO TEST FOR RECEIVE
  66. MODRCVR:    EQU    1        ;VALUE WHEN READY
  67. MODSNDB:    EQU    4        ;BIT TO TEST FOR SEND
  68. MODSNDR:    EQU    4        ;VALUE WHEN READY
  69. CTC:        EQU    85H        ;CTC addr;
  70. ;
  71.         ORG    100H
  72. ;
  73. ;
  74. ; Change the clock speed to suit your system
  75. ;
  76.         DS    3    ;(for  "JMP   START" instruction)
  77. ;
  78. PMMIMODEM:    DB    NO    ;yes=PMMI S-100 Modem            103H
  79. SMARTMODEM:    DB    YES    ;yes=HAYES Smartmodem, no=non-PMMI    104H
  80. TOUCHPULSE:    DB    'T'    ;T=touch, P=pulse (Smartmodem-only)    105H
  81. CLOCK:        DB    40    ;clock speed in MHz x10, 25.5 MHz max.    106H
  82.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  83. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  84.                 ;6=2400 7=4800 8=9600 9=19200 default
  85. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  86.                 ;default time to send character in ter-
  87.                 ;minal mode file transfer for slow BBS.
  88. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  89.                 ;default time for extra wait after CRLF
  90.                 ;in terminal mode file transfer
  91. NOOFCOL:    DB    5    ;number of DIR columns shown        10AH
  92. SETUPTST:    DB    YES    ;yes=user-added Setup routine        10BH
  93. SCRNTEST:    DB    YES    ;Cursor control routine         10CH
  94. ACKNAK:        DB    YES    ;yes=resend a record after any non-ACK    10DH
  95.                 ;no=resend a record after a valid NAK
  96. BAKUPBYTE:    DB    NO    ;yes=change any file same name to .BAK    10EH
  97. CRCDFLT:    DB    YES    ;yes=default to CRC checking        10FH
  98. TOGGLECRC:    DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  99. CONVBKSP:    DB    NO    ;yes=convert backspace to rub        111H
  100. TOGGLEBK:    DB    YES    ;yes=allow toggling of bksp to rub    112H
  101. ADDLF:        DB    NO    ;no=no LF after CR to send file in    113H
  102.                 ;terminal mode (added by remote echo)
  103. TOGGLELF:    DB    YES    ;yes=allow toggling of LF after CR    114H
  104. TRANLOGON:    DB    NO    ;yes=allow transmission of logon    115H
  105.                 ;write logon sequence at location LOGON
  106. SAVCCP:        DB    YES    ;yes=do not overwrite CCP        116H
  107. LOCONEXTCHR:    DB    NO    ;yes=local command if EXTCHR precedes    117H
  108.                 ;no=external command if EXTCHR precedes
  109. TOGGLELOC:    DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  110. LSTTST:        DB    YES    ;yes=printer available on printer port    119H
  111. XOFFTST:    DB    NO    ;yes=check for XOFF from remote    while    11AH
  112.                 ;sending a file in terminal mode
  113. XONWAIT:    DB    NO    ;yes=wait for XON after CR while    11BH
  114.                 ;sending a file in terminal mode
  115. TOGXOFF:    DB    YES    ;yes=allow toggling of XOFF checking    11CH
  116. IGNORCTL:    DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  117. EXTRA1:        DB    0    ;for future expansion            11EH
  118. EXTRA2:        DB    0    ;for future expansion            11FH
  119. BRKCHR:        DB    '@'-40H    ;^@ = Send a 300 ms. break tone        120H
  120. NOCONNCT:    DB    'N'-40H    ;^N = Disconnect from the phone line    121H
  121. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  122. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  123. UNSAVE:        DB    'R'-40H    ;^R = Close input text buffer        124H
  124. TRANCHR:    DB    'T'-40H ;^T = Transmit file to remote        125H
  125. SAVECHR:    DB    'Y'-40H    ;^Y = Open input text buffer        126H
  126. EXTCHR:        DB    'W'-40H    ;^W = Send next character        127H
  127. ;
  128. ;
  129.         DS    2        ;                128H
  130. IN$MODCTL1:    IN      MODCTL1 ! RET   ;in modem control port          12AH
  131.         DS    7
  132. ;
  133. OUT$MODDATP:    OUT    MODDATP ! RET    ;out modem data port        134H
  134.         DS    7
  135. IN$MODDATP:    IN    MODDATP ! RET    ;in modem data port        13EH
  136.         DS    7
  137. ANI$MODRCVB:    ANI    MODRCVB    ! RET    ;bit to test for receive ready    148H
  138. CPI$MODRCVR:    CPI    MODRCVR ! RET    ;value of receive bit when rdy    14BH
  139. ANI$MODSNDB:    ANI    MODSNDB    ! RET    ;bit to test for send ready    14EH
  140. CPI$MODSNDR:    CPI    MODSNDR    ! RET    ;value of send bit when ready    151H
  141.         DS    12        ;                156H
  142. ;
  143. ;
  144.         DS    2        ;Not used by MEX        160H
  145.         DS    6        ;                162H
  146. JMP$GOODBYE:    JMP    GOODBYE        ;                168H
  147. JMP$INITMOD:    JMP    INITMOD        ;go to user written routine    16BH
  148. JMP$NEWBAUD    JMP    NEWBAUD        ;Change baudrate        16EH
  149.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    171H
  150.         RET  !    NOP  !    NOP    ;(by-passes PMMI routine)    174H
  151. JMP$SETUPR:    JMP    SETUPR        ;                177H
  152.         DS    3        ;                17AH
  153. JMP$SYSVER:    JMP    SYSVER        ;                17DH
  154. JMP$BREAK:    JMP    SENDBRK        ;                180H
  155. ;
  156. ;
  157. ; Do not change the following six lines.
  158. ;
  159. JMP$ILPRT:    DS    3        ;                183H
  160. JMP$INBUF    DS    3        ;                186H
  161. JMP$INLNCOMP:    DS    3        ;                189H
  162. JMP$INMODEM    DS    3        ;                18CH
  163. JMP$NXTSCRN:    DS    3        ;                18FH
  164. JMP$TIMER:    DS    3        ;                192H
  165. ;
  166. ;
  167. ; Clear sequences -- CLREOS is clear to end of screen, CLRSCRN is clear
  168. ; entire screen.  
  169. ;
  170. CLREOS:        LXI    D,EOSMSG
  171.         MVI    C,PRINT
  172.         CALL    MEX
  173.         RET            
  174. ;
  175. CLRSCRN:    LXI    D,CLSMSG
  176.         MVI    C,PRINT
  177.         CALL    MEX
  178.         RET            
  179. ;
  180. ;
  181. SYSVER:        MVI    C,ILP        ;                1A7H
  182.         CALL    MEX
  183.         DB    'Version for MAGIC COMPUTER PC-88'
  184.         DB    CR,LF,0
  185.         RET
  186. ;
  187. ;
  188. ; This routine allows a 300 ms. break tone to be sent to reset some
  189. ; time-shar computers.
  190. ;
  191. SENDBRK:  MVI    A,5
  192.       OUT    MODCTL1
  193.       MVI    A,0F8H        ;SEND A BREAK TONE
  194.       JMP    GOODBYE1
  195. ;.....
  196. ;
  197. ;
  198. ; This routine sends a 300 ms. break tone and sets DTR low for the same
  199. ; length of time to disconnect some modems such as the Bell 212A, etc.    
  200. ;
  201. GOODBYE:  MVI    A,5
  202.       OUT    MODCTL1        ;SEND TO THE STATUS PORT
  203.       MVI    A,68H        ;TURN OFF DTR
  204. ;
  205. GOODBYE1: OUT    MODCTL1
  206.       MVI    B,3        ;WAIT FOR 300 MS.
  207.       MVI    C,TIMER
  208.       CALL    MEX
  209.       MVI    A,5
  210.       OUT    MODCTL1
  211.       MVI    A,0EAH        ;RESTORE TO NORMAL, 8 BITS, DTR ON, ETC.
  212.       OUT    MODCTL1
  213.       RET
  214. ;.....
  215. ;
  216. ;    
  217. ; MAGIC COMPUTER initialization 
  218. ;
  219. INITMOD:  DI            ;no interupts during setup
  220.       MVI    A,1    ;default transfer speed to 300 baud
  221.       STA    MSPEED     ;
  222.       MVI    A,04H    ;write register 4 of DART 
  223.       OUT    PORT    ;contol port
  224.       MVI    A,44H    ;x16, 1 stop bit, no parity
  225.       OUT    PORT    ;    
  226.       MVI    A,03H    ;write register 3 of DART
  227.       OUT     PORT    ;
  228.       MVI    A,0C1H    ;rcv 8 bits/char, rcv enable
  229.       OUT    PORT    ;
  230.       MVI    A,05H    ;write register 5 of DART
  231.       OUT    PORT    ;
  232.       MVI    A,0EAH    ;8 bits/char, tx enable, rts enable
  233.       OUT    PORT    ;
  234.       MVI    A,47H    ;counter mode,contol word time constant follows
  235.       OUT    CTC    ;CTC channel 1
  236.       MVI    A,128    ;x128
  237.       OUT    CTC    ;CTC channel 1
  238.       EI            ;
  239.           RET
  240. ;.....
  241. ;
  242. ;
  243. ; Setup routine to allow changing modem speed with the SET command.
  244. ;
  245. ;
  246. SETUPR:      MVI    C,SBLANK    ;Any arguments?
  247.       CALL    MEX
  248.       JC    TELL        ;If not, go display baud
  249.       LXI    D,CMDTBL
  250.       MVI    C,LOOKUP
  251.       CALL    MEX        ;Parse argument
  252.       PUSH    H        ;Save any parsed argument addrs on stack
  253.       RNC            ;If we have one, return to it
  254.       POP    H        ;Oops, input not found in table
  255.       MVI    C,ILP
  256.       CALL    MEX        ;Tell user input not valid
  257.       DB    CR,LF,'Only 300 or 1200 allowed on SET command',CR,LF,0
  258.       RET
  259. ;
  260. CMDTBL:      DB    '30','0'+80H
  261.       DW    OK300
  262.       DB    '120','0'+80H
  263.       DW    OK1200
  264.       DB    0
  265. ;
  266. TELL:      MVI    C,ILP
  267.       CALL    MEX        ;Print current baud rate
  268.       DB    CR,LF,'Baud rate is now: ',0
  269.       LDA    MSPEED
  270.       MVI    C,PRBAUD
  271.       CALL    MEX
  272.       RET
  273. ;
  274. ;
  275. OK300:      MVI    A,1
  276.       STA    MSPEED
  277.       CALL    DART
  278.       MVI    A,128
  279.       OUT    CTC
  280.       RET
  281. ;
  282. OK1200:      MVI    A,5
  283.       STA    MSPEED
  284.       CALL    DART
  285.       MVI    A,32
  286.       OUT    CTC
  287.       RET
  288. ;
  289. DART:      MVI    A,04H
  290.       OUT    PORT
  291.       MVI    A,44H
  292.       OUT    PORT
  293.       MVI    A,47H
  294.       OUT    CTC
  295.       RET
  296. ;
  297. ;
  298. NEWBAUD:  CPI    1
  299.       JZ    OK300
  300.       CPI    5
  301.       JZ    OK1200
  302.       RET
  303. ;
  304. ;
  305. BAUDBUF:  DB    10,0
  306.       DS    10
  307. ;
  308. EOSMSG:      DB    27,89,0,0,'$'              ;MAGIC Clear EOS
  309. CLSMSG:      DB    26,160,30,0,'$'            ;MAGIC Clear Screen
  310. ;
  311. ; NOTE:  MUST TERMINATE PRIOR TO 0B00H (with Smartmodem)
  312. ;                 0D00H (without Smartmodem)
  313. ;
  314.       END
  315. ;
  316.