home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol220 / mxo-r211.aqm / MXO-R211.ASM
Encoding:
Assembly Source File  |  1986-02-11  |  10.6 KB  |  367 lines

  1. ; MXO-R210.ASM -- TRS-80 MODEL II OVERLAY FILE FOR MEX10.  05/25/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 ADAPTS THE TRS-80 MODEL II/12/16.
  6. ; COMPUTERS TO MEX10.                     
  7. ;
  8. ;
  9. ; EDIT THIS FILE FOR YOUR PREFERENCES THEN FOLLOW THE "TO USE:" EXAMPLE
  10. ; SHOWN BELOW.
  11. ;
  12. ; USE THE "SET" COMMAND TO CHANGE THE BAUDRATE WHEN DESIRED.  IT STARTS
  13. ; OUT AT THE BAUD RATE THAT WAS LAST SET BY CP/M OR THIS PROGRAM.
  14. ;
  15. ;
  16. ;    TO USE: FIRST EDIT THIS FILE FILLING IN ANSWERS FOR YOUR OWN
  17. ;        EQUIPMENT.  THEN ASSEMBLE WITH ASM.COM OR EQUIVALENT
  18. ;        ASSEMBLER.  THEN USE MLOAD TO OVERLAY THE THE RESULTS
  19. ;        OF THIS PROGRAM TO THE ORIGINAL .COM FILE.
  20. ;
  21. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  22. ; 05/25/84 - MEXIFIED THE OVERLAY.        - BIFF BUEFFEL
  23. ; 11/11/83 - RENAMED TO M7R2-1.ASM, NO CHANGES    - IRV HOFF
  24. ; 09/18/83 - MODIFIED M712XE.ASM FOR 
  25. ;         TRS-80 MODEL II AND PICKLES
  26. ;         & TROUT CP/M (SHOULD ALSO 
  27. ;         WORK ON MODS 12 AND 16)        - JOSEPH KATZ
  28. ; 03/20/84 - MODIFIED OVERLAY TO WORK WITH ANY CP/M
  29. ;         AVAILABLE FOR MODS 2/12/16     - LARRY WINKLER
  30. ;
  31. ; 10/17/84 - MODIFIED OVERLAY SO THAT THE 'DTR' WOULD STAY ON
  32. ;                           BOB WILLIAMS
  33. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  34. ;
  35. BELL:        EQU    07H        ;BELL
  36. CR:        EQU    0DH        ;CARRIAGE RETURN
  37. ESC:        EQU    1BH        ;ESCAPE
  38. LF:        EQU    0AH        ;LINEFEED
  39. ;
  40. YES:        EQU    0FFH
  41. NO:        EQU    0
  42. ;
  43. ; MEX service processor stuff
  44. ;
  45. MEX    EQU    0D00H        ;address of the service processor
  46. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  47. TIMER    EQU    254        ;delay 100ms * reg B
  48. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  49. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  50. SNDRDY    EQU    251        ;test for modem-send ready
  51. RCVRDY    EQU    250        ;test for modem-receive ready
  52. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  53. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  54. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  55. PARSFN    EQU    246        ;parse filename from input stream
  56. BDPARS    EQU    245        ;parse baud-rate from input stream
  57. SBLANK    EQU    244        ;scan input stream to next non-blank
  58. EVALA    EQU    243        ;evaluate numeric from input stream
  59. LKAHED    EQU    242        ;get nxt char w/o removing from input
  60. GNC    EQU    241        ;get char from input, cy=1 if none
  61. ILP    EQU    240        ;inline print
  62. DECOUT    EQU    239        ;decimal output
  63. PRBAUD    EQU    238        ;print baud rate
  64. ;
  65. PRINT    EQU    9        ;MEX/BDOS print-string function call
  66.  
  67. ;
  68. PORT:        EQU    0F4H        ;TRS-80 II SERIAL OUTPUT PORT A
  69. MODCTL1:    EQU    PORT+2        ;MODEM CONTROL PORT
  70. MODDATP:    EQU    PORT        ;MODEM DATA PORT
  71. MODCTL2:    EQU    PORT+2        ;MODEM STATUS PORT
  72. MODRCVB:    EQU    01H        ;BIT TO TEST FOR RECEIVE
  73. MODRCVR:    EQU    01H        ;VALUE WHEN RECEIVE READY
  74. MODSNDB:    EQU    04H        ;BIT TO TEST FOR SEND
  75. MODSNDR:    EQU    04H        ;VALUE WHEN SEND READY        
  76. ;
  77. ;
  78.         ORG    100H
  79. ;
  80. ;
  81. ; CHANGE THE CLOCK SPEED TO SUIT YOUR SYSTEM
  82. ;
  83.         DS    3    ;(FOR  "JMP   START" INSTRUCTION)
  84. ;
  85.         DB    NO    ;YES=PMMI S-100 MODEM            103H
  86.         DB    NO    ;YES=HAYES SMARTMODEM, NO=NON-PMMI    104H
  87. TOUCHPULSE:    DB    'T'    ;T=TOUCH, P=PULSE (SMARTMODEM-ONLY)    105H
  88. CLOCK:        DB    40    ;CLOCK SPEED IN MHZ X10, 25.5 MHZ MAX.    106H
  89.                 ;20=2 MHH, 37=3.68 MHZ, 40=4 MHZ, ETC.
  90. MSPEED:     DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  91.                 ;6=2400 7=4800 8=9600 9=19200 DEFAULT
  92. BYTDLY:     DB    0    ;0=0 DELAY  1=10MS  5=50 MS - 9=90 MS    108H
  93.                 ;DEFAULT TIME TO SEND CHARACTER IN TER-
  94.                 ;MINAL MODE FILE TRANSFER FOR SLOW BBS.
  95. CRDLY:        DB    0    ;0=0 DELAY 1=100 MS 5=500 MS - 9=900 MS 109H
  96.                 ;DEFAULT TIME FOR EXTRA WAIT AFTER CRLF
  97.                 ;IN TERMINAL MODE FILE TRANSFER
  98. NOOFCOL:    DB    5    ;NUMBER OF DIR COLUMNS SHOWN        10AH
  99. SETUPTST:    DB    YES    ;YES=USER-ADDED SETUP ROUTINE        10BH
  100. SCRNTEST:    DB    YES    ;CURSOR CONTROL ROUTINE         10CH
  101. ACKNAK:     DB    YES    ;YES=RESEND A RECORD AFTER ANY NON-ACK    10DH
  102.                 ;NO=RESEND A RECORD AFTER A VALID NAK
  103. BAKUPBYTE:    DB    YES    ;YES=CHANGE ANY FILE SAME NAME TO .BAK    10EH
  104. CRCDFLT:    DB    YES    ;YES=DEFAULT TO CRC CHECKING        10FH
  105. TOGGLECRC:    DB    YES    ;YES=ALLOW TOGGLING OF CRC TO CHECKSUM    110H
  106. CONVBKSP:    DB    NO    ;YES=CONVERT BACKSPACE TO RUB        111H
  107. TOGGLEBK:    DB    YES    ;YES=ALLOW TOGGLING OF BKSP TO RUB    112H
  108. ADDLF:        DB    NO    ;NO=NO LF AFTER CR TO SEND FILE IN    113H
  109.                 ;TERMINAL MODE (ADDED BY REMOTE ECHO)
  110. TOGGLELF:    DB    YES    ;YES=ALLOW TOGGLING OF LF AFTER CR    114H
  111. TRANLOGON:    DB    NO     ;YES=ALLOW TRANSMISSION OF LOGON        115H
  112.                 ;WRITE LOGON SEQUENCE AT LOCATION LOGON
  113. SAVCCP:     DB    YES    ;YES=DO NOT OVERWRITE CCP        116H
  114. LOCONEXTCHR:    DB    NO    ;YES=LOCAL COMMAND IF EXTCHR PRECEDES    117H
  115.                 ;NO=EXTERNAL COMMAND IF EXTCHR PRECEDES
  116. TOGGLELOC:    DB    YES    ;YES=ALLOW TOGGLING OF LOCONEXTCHR    118H
  117. LSTTST:     DB    YES    ;YES=PRINTER AVAILABLE ON PRINTER PORT    119H
  118. XOFFTST:    DB    NO    ;YES=CHECK FOR XOFF FROM REMOTE WHILE    11AH
  119.                 ;SENDING A FILE IN TERMINAL MODE
  120. XONWAIT:    DB    NO    ;YES=WAIT FOR XON AFTER CR WHILE    11BH
  121.                 ;SENDING A FILE IN TERMINAL MODE
  122. TOGXOFF:    DB    YES    ;YES=ALLOW TOGGLING OF XOFF CHECKING    11CH
  123. IGNORCTL:    DB    YES    ;YES=CTL-CHARS ABOVE ^M NOT DISPLAYED    11DH
  124. EXTRA1:     DB    0    ;FOR FUTURE EXPANSION            11EH
  125. EXTRA2:     DB    0    ;FOR FUTURE EXPANSION            11FH
  126. BRKCHR:     DB    '@'-40H ;^@ = SEND A 300 MS. BREAK TONE     120H
  127. NOCONNCT:    DB    'N'-40H ;^N = DISCONNECT FROM THE PHONE LINE    121H
  128. LOGCHR:     DB    'L'-40H ;^L = SEND LOGON            122H
  129. LSTCHR:     DB    'P'-40H ;^P = TOGGLE PRINTER            123H
  130. UNSAVE:     DB    'R'-40H ;^R = CLOSE INPUT TEXT BUFFER        124H
  131. TRANCHR:    DB    'T'-40H ;^T = TRANSMIT FILE TO REMOTE        125H
  132. SAVECHR:    DB    'Y'-40H ;^Y = OPEN INPUT TEXT BUFFER        126H
  133. EXTCHR:     DB    '^'-40H ;^^ = SEND NEXT CHARACTER        127H
  134. ;
  135. ;
  136.         DS    2        ;                128H
  137. IN$MODCTL1:    MVI    A,10H        ;CHANNEL 0, RESET INTERRUPTS    12AH
  138.         OUT    MODCTL1
  139.         IN    MODCTL1     ;GET THE STATUS BITS
  140.         RET
  141.         DS    3
  142. ;
  143. OUT$MODDATP:    OUT    MODDATP ! RET    ;OUT MODEM DATA PORT        134H
  144.         DS    7
  145. IN$MODDATP:    IN    MODDATP ! RET    ;IN MODEM DATA PORT        13EH
  146.         DS    7
  147. ANI$MODRCVB:    ANI    MODRCVB ! RET    ;BIT TO TEST FOR RECEIVE READY    148H
  148. CPI$MODRCVR:    CPI    MODRCVR ! RET    ;VALUE OF RECEIVE BIT WHEN RDY    14BH
  149. ANI$MODSNDB:    ANI    MODSNDB ! RET    ;BIT TO TEST FOR SEND READY    14EH
  150. CPI$MODSNDR:    CPI    MODSNDR ! RET    ;VALUE OF SEND BIT WHEN READY    151H
  151.         DS    6        ;                154H
  152. OUT$MODCTL1:    OUT    MODCTL1 ! RET    ;OUT MODEM CONTROL PORT     15AH
  153. OUT$MODCTL2:    OUT    MODCTL2 ! RET    ;OUT MODEM STATUS PORT        15DH
  154. ;
  155. ;
  156.         DS    2        ;NOT USED BY MEX        160H
  157.         DS    6        ;                162H
  158. JMP$GOODBYE:    JMP    GOODBYE     ;                168H
  159. JMP$INITMOD:    JMP    INITMOD     ;GO TO USER WRITTEN ROUTINE    16BH
  160. JMP$NEWBAUD    JMP    NEWBAUD     ;CHANGE BAUDRATE        16EH
  161.         RET  !    NOP  !    NOP    ;(BY-PASSES PMMI ROUTINE)    171H
  162.         RET  !    NOP  !    NOP    ;(BY-PASSES PMMI ROUTINE)    174H
  163. JMP$SETUPR:    JMP    SETUPR        ;                177H
  164.         DS    3        ;                17AH
  165. JMP$SYSVER:    JMP    SYSVER        ;                17DH
  166. JMP$BREAK:    JMP    SENDBRK     ;                180H
  167. ;
  168. ;
  169. ; DO NOT CHANGE THE FOLLOWING SIX LINES.
  170. ;
  171. JMP$ILPRT:    DS    3        ;                183H
  172. JMP$INBUF    DS    3        ;                186H
  173. JMP$INLNCOMP:    DS    3        ;                189H
  174. JMP$INMODEM    DS    3        ;                18CH
  175. JMP$NXTSCRN:    DS    3        ;                18FH
  176. JMP$TIMER:    DS    3        ;                192H
  177. ;
  178. ;
  179. ; CLEAR SEQUENCES -- CLREOS IS CLEAR TO END OF SCREEN, CLRSCRN IS CLEAR
  180. ; ENTIRE SCREEN.  
  181. ;
  182. ;
  183. CLREOS:     LXI    D,EOSMSG
  184.         MVI    C,PRINT
  185.         CALL    MEX
  186.         RET            
  187. ;
  188. CLRSCRN:    LXI    D,CLSMSG
  189.         MVI    C,PRINT
  190.         CALL    MEX
  191.         RET            
  192. ;
  193. SYSVER:     MVI    C,ILP           ;                   1A7H
  194.         CALL    MEX
  195.         DB    'TRS-80 VERSION (FOR SERIAL PORT A)',CR,LF
  196.         DB    CR,LF,0
  197.         RET
  198. ;
  199. ;
  200. ; THIS ROUTINE ALLOWS A 300 MS. BREAK TONE TO BE SENT TO RESET SOME
  201. ; TIME-SHAR COMPUTERS.
  202. ;
  203. SENDBRK:  MVI    A,5
  204.       OUT    MODCTL1
  205.       MVI    A,0F8H        ;SEND A BREAK TONE
  206.       JMP    GOODBYE1
  207. ;.....
  208. ;
  209. ;
  210. ; THIS ROUTINE SENDS A 300 MS. BREAK TONE AND SETS DTR LOW FOR THE SAME
  211. ; LENGTH OF TIME TO DISCONNECT SOME MODEMS SUCH AS THE BELL 212A, ETC.    
  212. ;
  213. GOODBYE:  MVI    A,5
  214.       OUT    MODCTL1     ;SEND TO THE STATUS PORT
  215.       MVI    A,68H        ;TURN OFF DTR
  216. ;
  217. GOODBYE1: OUT    MODCTL1
  218.       MVI    B,3        ;WAIT FOR 300 MS.
  219.       MVI    C,TIMER
  220.       CALL    MEX
  221.       MVI    A,5
  222.       OUT    MODCTL1
  223.       MVI    A,0E8H        ;RESTORE TO NORMAL, 8 BITS, DTR ON, ETC.
  224.       OUT    MODCTL1
  225.       RET
  226. ;.....
  227. ;
  228. ;    
  229. ; TRS-80 II INITIALIZATION -- SETS CTC TIMER F0H FOR SEND AND RECEIVE
  230. ; BAUDRATE.
  231. ;
  232. ;
  233. INITMOD1: MVI    A,1        ;DEFAULT TRANSFER TIME TO 300 BAUD
  234.       STA    MSPEED
  235.       CPI    6
  236.       JNC    G2400
  237.       MVI    A,07H        ;USED IF <2400 BAUD
  238.       JMP    DOIT
  239. G2400:      MVI    A,47H        ;IF >= 2400 BAUD
  240. DOIT:      OUT    0F0H        ;SEND TO 'CTC' TIMER
  241.       OUT    0F1H
  242. ;
  243. INITMOD2: MVI    A,34H        ;INITIALIZE TO 300 BAUD
  244.       OUT    0F0H
  245.       OUT    0F1H
  246. ;.....
  247. INITMOD:  MVI    A,18H        ;THROW OUT OF MODE
  248.       OUT    MODCTL1
  249.       MVI    A,04H        ;SELECT REGISTER
  250.       OUT    MODCTL1
  251.       MVI    A,44H        ;SET ASCII PARAMETERS
  252.       OUT    MODCTL1
  253.       MVI    A,01H
  254.       OUT    MODCTL1
  255.       MVI    A,00H
  256.       OUT    MODCTL1
  257.       MVI    A,03H        ;SELECT REG.
  258.       OUT    MODCTL1
  259.       MVI    A,0C1H        ;ENABLE RECEIVE
  260.       OUT    MODCTL1
  261.       MVI    A,05H        ;SELECT REG.
  262.       OUT    MODCTL1
  263. ;      MVI    A,068H        ;COMMENTED OUT BY BOB WILLIAMS
  264. ;                 NEXT LINE ADDED WAS DROPPING 'DTR'
  265.       MVI    A,0E8H        ;ENABLE SEND, 'DTR', 'RTS'
  266.       OUT    MODCTL1
  267.       RET
  268. ;
  269. ;
  270. ; SETUP ROUTINE TO ALLOW CHANGING MODEM SPEED WITH THE SET COMMAND.
  271. ;
  272. ;
  273. SETUPR:   MVI    C,SBLANK    ;Any arguments?
  274.       CALL    MEX
  275.       JC    TELL        ;If not, go display baud
  276.       LXI    D,CMDTBL
  277.       MVI    C,LOOKUP
  278.       CALL    MEX        ;Parse argument
  279.       PUSH    H        ;Save any parsed argument addrs on stack
  280.       RNC            ;If we have one, return to it
  281.       POP    H        ;Oops, input not found in table
  282.       MVI    C,ILP
  283.       CALL    MEX        ;Tell user input not valid
  284.       DB    CR,LF,'Only 300 or 1200 allowed on SET command',CR,LF,0
  285.       RET
  286. ;
  287. CMDTBL:   DB    '30','0'+80H
  288.       DW    OK300
  289.       DB    '120','0'+80H
  290.       DW    OK1200
  291.       DB    0
  292. ;
  293. TELL:      MVI    C,ILP
  294.       CALL    MEX        ;Print current baud rate
  295.       DB    CR,LF,'Baud rate is now: ',0
  296.       LDA    MSPEED
  297.       MVI    C,PRBAUD
  298.       CALL    MEX
  299.       RET
  300. ;
  301. ;
  302. OK110:      MVI    A,0
  303.       LHLD    BD110
  304.       JMP    LOADBD
  305. ;
  306. OK300:      MVI    A,1
  307.       LHLD    BD300
  308.       JMP    LOADBD
  309. ;
  310. OK600:      MVI    A,3
  311.       LHLD    BD600
  312.       JMP    LOADBD
  313. ;
  314. OK1200:   MVI    A,5
  315.       LHLD    BD1200
  316.       JMP    LOADBD
  317. ;
  318. OK2400:   MVI    A,6
  319.       LHLD    BD2400
  320.       JMP    LOADBD
  321. ;
  322. OK4800:   MVI    A,7
  323.       LHLD    BD4800
  324.       JMP    LOADBD
  325. ;
  326. OK9600:   MVI    A,8
  327.       LHLD    BD9600
  328. ;
  329. LOADBD:   STA    INITMOD1+1    ;CHANGE TIME-TO-SEND TO MATCH BAUDRATE
  330.       MOV    A,L        ;GET BAUDRATE BYTE
  331.       STA    INITMOD2+1    ;SEND TO 'CTC' TIMER FOR NEW BAUDRATE
  332.       JMP    INITMOD1    ;REINITIALIZE TO NEW BAUDRATE, THEN DONE
  333. ;
  334. ;
  335. NEWBAUD:  CPI    1
  336.       JZ    OK300
  337.       CPI    5
  338.       JZ    OK1200
  339.       RET
  340. ;
  341. ;
  342. ; TABLE OF BAUDRATE PARAMETERS
  343. ;
  344. BD110:      DW    008EH ; THESE USE THE 07H COMMAND FIRST TO CTC
  345. BD300:      DW    0034H
  346. BD600:      DW    001AH    
  347. BD1200:   DW    000DH
  348. ;--------------------------------------------------------------------
  349. BD2400:   DW    0034H ; THESE USE THE 47H COMMAND FIRST TO CTC
  350. BD4800:   DW    001AH
  351. BD9600:   DW    000DH
  352. ;
  353. BAUDBUF:  DB    10,0
  354.       DS    10
  355. ;
  356. EOSMSG:   DB    0CH,0,0,0,'$'            
  357. CLSMSG:   DB    0CH,0,0,0,'$'        ;1AH IF NOT P&T
  358. ;
  359. ; NOTE:  MUST TERMINATE PRIOR TO 0B00H (WITH SMARTMODEM)
  360. ;                 0D00H (WITHOUT SMARTMODEM)
  361. ;
  362.       END
  363. ;
  364.     ;1AH IF NOT P&T
  365. ;
  366. ; NOTE:  MUST TERMINATE PRIOR TO 0B00H (WITH SMARTMODEM)
  367. ;                 0D00H (WITHOUT SMA