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-RP10.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  13KB  |  388 lines

  1. ; MXO-R+10.ASM -- Tandy TRS-80 Mod 4 under Digital Research's CP/M Plus.  
  2. ;            Overlay file for MEX -- 06/11/84
  3. ;
  4. ; This file is based on the M7R4-1 overlay for the Montezuma Micro 
  5. ; CP/M 2.2. It is heavily based on the Tandy Radio Shack Model I with
  6. ; Omicron CP/M 'Mapper' originally by Phil Becker and is credited as 
  7. ; such. 
  8. ;
  9. ; You will want to look this file over carefully. There are a number of
  10. ; options that you can use to configure the program to suit your taste.
  11. ; This file adapts the Tandy Model 4 computer to the modem program.
  12. ; Much of the information contained here is not in the main file.
  13. ;
  14. ; Edit this file for your preferences then follow the "TO USE:" example
  15. ; shown below.
  16. ;
  17. ; Use the "SET" command to change the baud rate.  The program 
  18. ; starts out at 300 baud when the program is first called up.
  19. ;
  20. ;    TO USE: First edit this file filling in answers for your own
  21. ;        equipment.  Assemble with ASM, MAC or equivalent
  22. ;        assembler.  Then use MLOAD to overlay the results
  23. ;        of this program to the original .COM file:
  24. ;
  25. ;    A>MLOAD MEX.COM=MEX10.COM,MXO-R+10.HEX
  26. ;    A>
  27. ;    
  28. ;
  29. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  30. ;
  31. ; 06/11/84 - Modified for MEX10            - Len Moskowitz
  32. ; 02/02/84 - Modified to MDM724 with CP/M+      - Richard Press, M.D.
  33. ; 11/26/83 - Modified for the TRS80 Mod 4    - Steven J. Davidson, M.D.
  34. ;                        & Richard Press, M.D.
  35. ; 08/27/83 - Renamed to work with MDM712    - Irv Hoff
  36. ; 07/25/83 - Adapted for TRS-80 (zero ORG CP/M)    - Phil Becker
  37. ; 06/22/83 - Revised to work with MDM710    - Irv Hoff
  38. ; 05/25/83 - Updated to work with MDM709    - Irv Hoff
  39. ; 05/15/83 - Revised to work with MDM708    - Irv Hoff
  40. ; 04/11/83 - Updated to work with MDM707    - Irv Hoff
  41. ; 04/04/83 - First version of this file        - Irv Hoff
  42. ;
  43. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  44. ;
  45. BELL:        EQU    07H        ;bell
  46. CR:        EQU    0DH        ;carriage return
  47. ESC:        EQU    1BH        ;escape
  48. LF:        EQU    0AH        ;linefeed
  49. ;
  50. YES:        EQU    0FFH
  51. NO:        EQU    0
  52. ;
  53. ;
  54. PORT:        EQU    0EAH        ;TRS80 Mod 4 Modem Status Port
  55. MODCT1:        EQU    PORT        ;Modem status port
  56. MODCT2:        EQU    PORT        ;Modem control port
  57. MODDAT:        EQU    PORT+1        ;Modem data port
  58. MDDCDB:        EQU    20H        ;carrier detect bit
  59. MDDCDA:        EQU    20H        ;value when active
  60. BAUDRP:        EQU    PORT-1        ;Baud rate port
  61. MDRCVB:        EQU    80H        ;Recv. Ready Mask bit
  62. MDRCVR:        EQU    80H        ; -value when ready
  63. MDSNDB:        EQU    40H        ;xmit. ready mask bit
  64. MDSNDR:        EQU    40H        ; -value when ready
  65. ;
  66. ; MEX service processor stuff.  Use instead of BDOS calls.  More detail
  67. ; in PM overlay.
  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. SNNDRDY    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. ;
  92.         ORG    100H
  93. ;
  94. ;
  95.         DS    3    ;(for  "JMP   START" instruction)
  96. PMODEM:        DB    NO    ;not used by MEX             103H
  97. SMODEM:        DB    NO    ;not used by MEX            104H
  98. TPULSE:        DB    'T'    ;T=tone, P=Pulse(Smartmodem-only)    105H
  99. CLOCK:        DB    40    ;clock speed in MHz x10, 25.5 MHz max.    106H
  100.                 ;20=2 MHh, 37=3.8 MHz, 40=4 MHz, etc.
  101. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200   107H
  102.                 ;6=2400 7=4800 8=9600 9=19200 default
  103. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms   108H
  104.                 ;default time to send character in ter-
  105.                 ;minal mode file transfer for slow BBS.
  106. CRDLY:        DB    3    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  107.                 ;default time for extra wait after CRLF
  108.                 ;in terminal mode file transfer
  109. COLUMS:        DB    5    ;number of DIR columns shown        10AH
  110. SETFL:        DB    YES    ;yes=user-added Setup routine        10BH
  111. SCRTST:        DB    YES    ;cursor control routine         10CH
  112.         DB    YES    ;spare
  113. BAKFLG:        DB    NO    ;yes=change any file same name to .BAK    10EH
  114. CRCDFL:        DB    YES    ;yes=default to CRC checking        10FH
  115.                 ;no=default to Checksum checking
  116. TOGCRC:        DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  117. CVTBS:        DB    NO    ;yes=convert backspace to rub        111H
  118. TOGLBK:        DB    YES    ;yes=allow toggling of bksp to rub    112H
  119. ADDLF:        DB    YES    ;no=no LF after CR to send file in    113H
  120.                 ;terminal mode (added by remote echo)
  121. TOGLF:        DB    YES    ;yes=allow toggling of LF after CR    114H
  122. TRNLOG:        DB    YES    ;yes=allow transmission of logon    115H
  123.                 ;write logon sequence at location LOGON
  124. SAVCCP:        DB    YES    ;yes=do not overwrite CCP        116H
  125. LOCNXT:        DB    YES    ;yes=local command if EXTCHR precedes    117H
  126.                 ;no=external command if EXTCHR precedes
  127. TOGLOC:        DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  128. LSTTST:        DB    YES    ;yes=printer available on printer port    19H
  129. XOFTST:        DB    YES    ;yes=chcks for XOFF from remote    while    11AH
  130.                 ;sending a file in terminal mode
  131. XONWT:        DB    NO    ;yes=wait for XON after CR while    11BH
  132.                 ;sending a file in terminal mode
  133. TOGXOF:        DB    YES    ;yes=allow toggling of XOFF checking    11CH
  134. IGNCTL:        DB    YES    ;yes=CTL-chars above ^M not displayed    11DH
  135. EXTRA1:        DB    0    ;for future expansion            11EH
  136. EXTRA2:        DB    0    ;for future expansion            11FH
  137. BRKCHR:        DB    'B'-40H    ;Send a 300 ms. break tone        120H
  138. NOCONN:        DB    'N'-40H    ;^N = Disconnect from phone line    121H
  139. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  140. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  141. UNSVCH:        DB    'T'-40H    ;^R = Close input text buffer        124H
  142. TRNCHR:        DB    'Y'-40H ;^T = Transmit file to remote        125H
  143. SAVCHR:        DB    'R'-40H    ;^Y = Open input text buffer        126H
  144. EXTCHR:        DB    'K'-40H    ;^K = Send next character        127H
  145. ;
  146. PRATE:        DS    2    ;PMMI equates (see PMMI overlay)    128H
  147. ;
  148. INCTL1:        IN    MODCT1         ;in modem control port        12AH
  149.         PUSH    B
  150.         ANI    0DFH
  151.         MOV    B,A        ;save status
  152.         JMP    CTLPT2        ;continue
  153.         DS    1
  154. ;
  155. OTDATA:        OUT    MODDAT ! RET    ;out modem data port        134H
  156. ;
  157. ;
  158. ; CONTINUE STATUS READ
  159. ;
  160. CTLPT2:        IN    0E8H        ;read CD port
  161.         ANI    20H        ;isolate CD
  162.         ORA    B        ;merge status
  163.         POP    B
  164.         RET
  165. ;
  166. INPORT:        IN    MODDAT ! RET    ;in modem data port        13EH
  167.         DS    7
  168. MASKR:        ANI    MDRCVB ! RET    ;bit to test for receive ready    148H
  169.  
  170. TESTR:        CPI    MDRCVR ! RET    ;value of rcv. bit when ready    14BH
  171. MASKS:        ANI    MDSNDB ! RET    ;bit to test for send ready    14EH
  172. TESTS:        CPI    MDSNDR ! RET    ;value of send bit when ready    151H
  173.         DS    12        ;not used by MEX        156H
  174. ;
  175. LOGON:        DS    2        ;not used by MEX        160H
  176. DIALV:        DS    3        ;dials digit (not implemented)    162H
  177. DISCV:        DS    3        ;disconnects modem (not impl.)    165H
  178. GOODBV:        JMP    GOODBYE        ;called before exit to CP/M    168H
  179. INMODV:        JMP    INITMOD        ;Called at cold start        16BH
  180. NEWBDV:        DS    3        ;not implemented        16EH
  181. NOPARV:        DS    3        ;not implemented        171H
  182. PARITV:        DS    3        ;not implemented        174H
  183. SETUPV:        JMP    SETUPR        ;SET command            177H
  184. SPMENV:        DS    3        ;not used with MEX        17AH
  185. VERSNV:        JMP    SYSVER        ;overlay's voice in sign-on    17DH
  186. BREAKV:        JMP    SENDBRK        ;send a break            180H
  187. ;
  188. ;
  189. ; These six lines are an artifact of MDMXXX. They are not used with MEX
  190. ;
  191. ILPRTV:        DS    3    ;replace with MEX function 9        183H
  192. INBUFV:        DS    3    ;replace with MEX function 10        186H
  193. ILCMPV:        DS    3    ;replace with table lookup funct. 247    189H
  194. INMDMV:        DS    3    ;replace with MEX function 255        18CH
  195. NXSCRV:        DS    3    ;not supported by MEX            18FH
  196. TIMERV:        DS    3    ;replace with MEX function 254        192H
  197. ;
  198. ; Clear sequences -- CLREOS is clear to end of screen, CLRSCRN is clear
  199. ; entire screen.  Last entry must be 0.  Any other 0's act as NOP's.
  200. ;
  201. CLREOS:        MVI    C,ILP        ;                195H
  202.         CALL    MEX        ;                 197H
  203.         DB    01BH,04AH,0    ;                19AH
  204.         RET            ;                19DH
  205. ;
  206. CLRSCRN:    MVI    C,ILP        ;                19EH
  207.         CALL    MEX        ;                1A0H
  208.         DB    01BH,045H,0    ;                1A3H
  209.         RET            ;                1A6H
  210. ;
  211. ;
  212. ;    End of the fixed format area
  213. ;
  214. ;
  215. SYSVER:        MVI    C,ILP        ;
  216.         CALL    MEX        ;
  217.         DB    '*** Version for Tandy TRS80 Mod 4 ***'    
  218.                 DB      CR,LF
  219.          DB    '***  with Tandy/DRI CP/M Plus   ***'
  220.         DB    CR,LF,0
  221.         RET
  222. ;.....
  223. ;
  224. ;
  225. ;-----------------------------------------------------------------------
  226. ;
  227. ; NOTE:  You can change the SYSVER message to be longer or shorter.  The
  228. ;     end of your last routine should terminate by 0400H (601 bytes
  229. ;     available after start of SYSVER) if using the Hayes Smartmodem
  230. ;     or by address 0C00H (2659 bytes) otherwise.
  231. ;
  232. ;-----------------------------------------------------------------------
  233. ;
  234. ; This routine allows a 300 ms. break tone to be sent to reset some
  235. ; time-share computers.
  236. ;
  237. SENDBRK:
  238.     MVI    A,0E8H        ; 8 bit words, 1 stop bit, no parity,
  239.     JMP    GOODBYE1    ; DTR & RTS disabled, *BREAK bit SET*
  240. ;
  241. ;.....
  242. ;
  243. ; The Goodbye routine is the last routine run before exiting to CP/M.
  244. ; If you share the serial port between the modem and some other device,
  245. ; you can use Goodbye to change the characteristics of the port.
  246. ; This routine sends a 300 ms. break tone and sets DTR low for the same
  247. ; length of time to disconnect some modems such as the Bell 212A, etc.
  248. ;
  249. GOODBYE:
  250. ;
  251.     MVI    A,0EBH            ;send break, turn off DTR
  252. ;
  253. GOODBYE1:
  254. ;
  255.     OUT    MODCT1        ;send to status port
  256.     MVI    B,3        ;delay about 300 ms.
  257.     MVI    C,TIMER
  258.     CALL    MEX
  259.     MVI    A,0ECH        ;normal send/receive with DTR
  260.     OUT    MODCT1        ;send to status port
  261.     RET
  262. ;
  263. ;
  264. ; TRS80 Mod 4 initialization -- sets CTC timer 0 for baudrate in/out.
  265. ;
  266. ; TRS80 Mod 4 specific equates for initialization.
  267. ;
  268. CTCCMD:      EQU    0E8H        ;Master Reset, UART cntrl. register
  269. CTC0:      EQU    0E9H        ;BR19411 Timer control Timer 0 (port A)
  270. IB300      EQU    55H        ;Default 300 baud
  271. ;
  272. INITMOD:  MVI    A,1        ;Reset UART and enable it
  273.       OUT    CTCCMD        
  274. ;
  275.       MVI    A,0ECH        ;8 bits, no parity, 1 stop bit, enable DTR
  276.       OUT    MODCT1        ;                and RTS
  277. ;
  278. LSBD:      MVI    A,IB300
  279.       OUT    CTC0  
  280. ;
  281. INITMOD1: MVI    A,1        ;default transfer time to 300 baud
  282.       STA    MSPEED
  283.       RET
  284. ;
  285. ;.....
  286. ;
  287. ;
  288. SETUPR:      MVI    C,SBLANK    ;any parameters?
  289.       CALL  MEX
  290.       JC    TELL        ;if not, go display current baud rate
  291.       LXI    D,CMDTBL    ;use MEX LOOKUP function to get a jump
  292.       MVI    C,LOOKUP    ; vector if the parameter is valid
  293.       CALL    MEX        ;parse parameter to SET
  294.       PUSH    H        ;MEX LOOKUP returns with the address of the
  295.                 ; baud rate change routine in HL.  Save it 
  296.                 ; on the stack.
  297.       RNC            ;return to the baud rate change routine
  298.       POP    H        ;oops, the parameter to SET was not in our
  299.                 ; table. 
  300.       MVI    C,ILP        ;
  301.       CALL    MEX        ;tell the user that the baud rate he asked
  302.                 ; for is illegal
  303.       DB    CR,LF,'Only 300, 600, 1200, 4800, 9600, and 19200 allowed in'
  304.       DB    'SET command',CR,LF,0
  305.       RET
  306. ;
  307. ; SET command table - this table is used by the MEX LOOKUP routine.  Note
  308. ;    that the first part of each entry is the string we match against.
  309. ;    Its last character must have its MSBit set.  The second part of
  310. ;    the entry is the value we want returned in HL.  This is a painless
  311. ;    way to do a string comparison and branch function. 
  312. CMDTBL:      DB    '30','0'+80H
  313.       DW    OK300
  314.       DB    '60','0'+80H
  315.       DW    OK600
  316.       DB    '120','0'+80H
  317.       DW    OK1200
  318.       DB    '480','0'+80H
  319.       DW    OK4800
  320.       DB    '960','0'+80H
  321.       DW    OK9600
  322.       DB    '1920','0'+80H
  323.       DW    OK19200
  324. ;
  325. ;
  326. TELL:      MVI    C,ILP
  327.       CALL    MEX        ;print current baud rate
  328.       DB    CR,LF,'Baud rate is now: ',0
  329.       LDA    MSPEED
  330.       MVI    C,PRBAUD
  331.       CALL    MEX
  332.       RET
  333. ;
  334. ;
  335. ;
  336. OK300:      MVI    A,1        ;MSPEED 300 baud value
  337.       LHLD    BD300        ;get 300 baud parameters in 'HL'
  338.       JMP    LOADBD        ;go load them
  339. ;
  340. OK600:    MVI    A,3
  341.       LHLD    BD600
  342.       JMP    LOADBD
  343. ;
  344. OK1200:      MVI    A,5
  345.       LHLD    BD1200
  346.       JMP   LOADBD
  347. ;
  348. OK4800:      MVI    A,7
  349.       LHLD    BD4800
  350.       JMP    LOADBD
  351. ;
  352. OK9600:      MVI    A,8
  353.       LHLD    BD9600
  354.       JMP    LOADBD
  355. ;
  356. OK19200:  MVI    A,9
  357.       LHLD    BD19200        ;fall thru.....
  358. ;
  359. LOADBD:      STA    INITMOD1+1    ;change time-to-send to match baudrate
  360.       MOV    A,L        ;get baudrate byte
  361.       STA    LSBD+1        ;store in INITMOD
  362.       JMP    LSBD        ;reinitialize to new baudrate, then done
  363.       RET        
  364. ;
  365. ;
  366. ; TABLE OF BAUDRATE PARAMETERS
  367. ;
  368. BD300:    DB    55H        ;  300 baud
  369. BD600:    DB    66H        ;  600 baud
  370. BD1200:    DB    77H        ; 1200 baud
  371. BD4800:    DB    0CCH        ; 4800 baud
  372. BD9600:    DB    0EEH        ; 9600 baud
  373. BD19200:
  374. ;
  375.     DB    0FFH        ;19200 baud
  376. ;
  377. ;
  378. ;           (END OF INITMOD AND SETUP ROUTINES)
  379. ;=======================================================================
  380. ;
  381. ;    Your overlays may use memory up to 0CFFH, unless you are
  382. ;    using the MEX Smartmodem overlay (MXO-SMxx.ASM).  Then
  383. ;    you have only up to 0AFFH.
  384. ;
  385. ;=======================================================================
  386. ;
  387.       END
  388.