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

  1. ; MEXP1-1.ASM - MEX OVERLAY FOR PMC MICROMATE 101
  2. ;   Version 1.0
  3. ;
  4. ; History:
  5. ;
  6. ; 84/11/02 Created from M7P1-1.ASM
  7. ;       Ian Cottrell, Dept Energy, Mines and Resources, Ottawa, Canada
  8. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  9. ;    /////////////////////////////////////////
  10. ;    /                    /
  11. ;    /    - - W A R N I N G - -        /
  12. ;    /                    /
  13. ;    /    This code uses CP/M 3 dependent    /
  14. ;    /    stuff.                /
  15. ;    /                    /
  16. ;    /////////////////////////////////////////
  17. ;
  18. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  19. ;
  20. ; Use the "SET" command to change the baudrate when desired. 
  21. ;
  22. ;    To use:    First edit this file, filling in answers for your own
  23. ;        equipment. Then assemble with MAC.COM or equivalent
  24. ;        assembler. Use MLOAD21 to overlay the results of this
  25. ;        program on the original .COM file:
  26. ;
  27. ;        MLOAD21 MEX.COM=MEX112.COM,MXO-P1-1.HEX
  28. ;
  29. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  30. ;
  31. BELL:        EQU    07H        ;bell
  32. CR:        EQU    0DH        ;carriage return
  33. ESC:        EQU    1BH        ;escape
  34. LF:        EQU    0AH        ;linefeed
  35. ;
  36. YES:        EQU    0FFH
  37. NO:        EQU    0
  38. ;
  39. ; PMC Micromate Model 101 dependant stuff 
  40. ;
  41. PORT:        EQU    89H    ;PMC SERIAL MODEM PORT
  42. MODCTL1:    EQU    PORT+2    ;Modem control port             gts
  43. MODCTL2:    EQU    PORT+2    ;Modem control port             gts
  44. MODDATP:    EQU    PORT    ;Modem data port
  45. MODRCVB:    EQU    01H    ;Your bit to test for receive
  46. MODRCVR:    EQU    01H    ;Your value when receive ready.
  47. MODSNDB:    EQU    04H    ;Your bit to test for send.
  48. MODSNDR:    EQU    04H    ;Your value when xmitter available.
  49. ;
  50. P$BAUD        EQU    93H    ;Upper nibble = TERMNL
  51. P$GETBAUD    EQU    95H    ;Lower nibble = MODEM
  52. ;
  53. ; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  54. ; MEX Service Processor
  55. ;
  56. MEX    EQU    0D00H        ;address of the service processor
  57. INMDM    EQU    255        ;get char from port to A, CY=no more in 100 ms
  58. TIMER    EQU    254        ;delay 100ms * reg B
  59. TMDINP    EQU    253        ;B=# secs to wait for char, cy=no char
  60. CHEKCC    EQU    252        ;check for ^C from KBD, Z=present
  61. SNDRDY    EQU    251        ;test for modem-send ready
  62. RCVRDY    EQU    250        ;test for modem-receive ready
  63. SNDCHR    EQU    249        ;send a character to the modem (after sndrdy)
  64. RCVCHR    EQU    248        ;recv a char from modem (after rcvrdy)
  65. LOOKUP    EQU    247        ;table search: see CMDTBL comments for info
  66. PARSFN    EQU    246        ;parse filename from input stream
  67. BDPARS    EQU    245        ;parse baud-rate from input stream
  68. SBLANK    EQU    244        ;scan input stream to next non-blank
  69. EVALA    EQU    243        ;evaluate numeric from input stream
  70. LKAHED    EQU    242        ;get nxt char w/o removing from input
  71. GNC    EQU    241        ;get char from input, cy=1 if none
  72. ILP    EQU    240        ;inline print
  73. DECOUT    EQU    239        ;decimal output
  74. PRBAUD    EQU    238        ;print baud rate
  75. ;
  76. CONOUT    EQU    2        ;simulated BDOS function 2: console char out
  77. PRINT    EQU    9        ;simulated BDOS function 9: print string
  78. INBUF    EQU    10        ;input buffer, same structure as BDOS 10
  79. ;
  80.         ORG    100H
  81. ;
  82. ;
  83. ; Change the clock speed to suit your system
  84. ;
  85.         DS    3    ;(for  "JMP   START" instruction)
  86. ;
  87. PMMIMODEM:    DB    NO    ;yes=PMMI S-100 Modem            103H
  88. SMARTMODEM:    DB    YES    ;yes=HAYES Smartmodem, no=non-PMMI    104H
  89. TOUCHPULSE:    DB    'P'    ;T=touch, P=pulse (Smartmodem-only)    105H
  90. CLOCK:        DB    40    ;clock speed in MHz x10, 25.5 MHz max.    106H
  91.                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  92. MSPEED:        DB    1    ;0=110 1=300 2=450 3=600 4=710 5=1200    107H
  93.                 ;6=2400 7=4800 8=9600 9=19200 default
  94. BYTDLY:        DB    5    ;0=0 delay  1=10ms  5=50 ms - 9=90 ms    108H
  95.                 ;default time to send character in ter-
  96.                 ;minal mode file transfer for slow BBS.
  97. CRDLY:        DB    5    ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  98.                 ;default time for extra wait after CRLF
  99.                 ;in terminal mode file transfer
  100. NOOFCOL:    DB    5    ;number of DIR columns shown        10AH
  101. SETUPTST:    DB    YES    ;yes=user-added Setup routine        10BH jw
  102. SCRNTEST:    DB    YES    ;Cursor control routine         10CH
  103. ACKNAK:        DB    YES    ;yes=resend a record after any non-ACK    10DH
  104.                 ;no=resend a record after a valid-NAK
  105. BAKUPBYTE:    DB    NO    ;yes=change any file same name to .BAK    10EH
  106. CRCDFLT:    DB    YES    ;yes=default to CRC checking        10FH wcw
  107. TOGGLECRC:    DB    YES    ;yes=allow toggling of CRC to Checksum    110H
  108. CONVBKSP:    DB    NO    ;yes=convert backspace to rub        111H
  109. TOGGLEBK:    DB    YES    ;yes=allow toggling of bksp to rub    112H
  110. ADDLF:        DB    NO    ;no=no LF after CR to send file in    113H
  111.                 ;terminal mode (added by remote echo)
  112. TOGGLELF:    DB    YES    ;yes=allow toggling of LF after CR    114H
  113. TRANLOGON:    DB    YES    ;yes=allow transmission of logon    115H
  114.                 ;write logon sequence at location LOGON
  115. SAVCCP:        DB    YES    ;yes=do not overwrite CCP        116H
  116. LOCONEXTCHR:    DB    NO    ;yes=local command if EXTCHR precedes    117H
  117.                 ;no=external command if EXTCHR precedes
  118. TOGGLELOC:    DB    YES    ;yes=allow toggling of LOCONEXTCHR    118H
  119. LSTTST:        DB    NO    ;yes=printer available on printer port    119H
  120. XOFFTST:    DB    YES    ;yes=checks for XOFF from remote while    11AH wcw
  121.                 ;sending a file in terminal mode
  122. XONWAIT:    DB    NO    ;yes=wait for XON after CR while    11BH
  123.                 ;sending a file in terminal mode
  124. TOGXOFF:    DB    YES    ;yes=allow toggling of XOFF checking    11CH
  125. IGNORCTL:    DB    YES    ;yes=CTL-chars above ^M not displayed    11DH wcw
  126. EXTRA1:        DB    0    ;for future expansion            11EH
  127. EXTRA2:        DB    0    ;for future expansion            11FH
  128. BRKCHR:        DB    '@'-40H    ;^@ = Send 300 ms. break tone        120H
  129. NOCONNCT:    DB    'D'-40H    ;^D = Disconnect from the phone line    121H
  130. LOGCHR:        DB    'L'-40H    ;^L = Send logon            122H
  131. LSTCHR:        DB    'P'-40H    ;^P = Toggle printer            123H
  132. UNSAVE:        DB    'R'-40H    ;^R = Close input text buffer        124H
  133. TRANCHR:    DB    'T'-40H ;^T = Transmit file to remote        125H
  134. SAVECHR:    DB    'Y'-40H    ;^Y = Open input text buffer        126H
  135. EXTCHR:        DB    '^'-40H    ;^^ = Send next character        127H
  136. ;
  137. ;
  138.         DS    2        ;                128H
  139. ;
  140. ; IN$MODCTL1:    IN    MODCTL1     ;in modem control port        12AH
  141. ;        RET    
  142. ;        DS    7
  143. ;
  144. IN$MODCTL1:    XRA    A        ;Output 00H to command port    12AH wcw
  145.         OUT    MODCTL1         ;                               12BH wcw
  146.         MVI    A,10H        ;Output 10H to command port     12DH jw
  147.         OUT    MODCTL1         ;                               12FH jw
  148.         IN    MODCTL1        ;Get status bits.               131H jw
  149.         RET                     ;                               133H
  150. ;
  151. OUT$MODDATP:    OUT    MODDATP     ;out modem data port        134H
  152.         RET    
  153.         DS    7               ;                               137H
  154. IN$MODDATP:    IN    MODDATP     ;in modem data port        13EH
  155.         RET    
  156.         DS    7               ;                               141H
  157. ANI$MODRCVB:    ANI    MODRCVB        ;bit to test for receive ready    148H
  158.         RET    
  159.  
  160. CPI$MODRCVR:    CPI    MODRCVR        ;value of rcv. bit when ready    14BH
  161.         RET
  162. ANI$MODSNDB:    ANI    MODSNDB        ;bit to test for send ready    14EH
  163.         RET
  164. CPI$MODSNDR:    CPI    MODSNDR        ;value of send bit when ready    151H
  165.         RET    
  166.         DS    6        ;                154H
  167. ;
  168. OUT$MODCTL1:    OUT    MODCTL1        ;out modem control port #2    15AH
  169.         RET
  170. OUT$MODCTL2:    OUT    MODCTL2        ;out modem control port #1    15DH
  171.         RET
  172. ;
  173.         DS    2        ;not used by MEX        160H
  174.         DS    6        ;                162H
  175. JMP$GOODBYE:    JMP    GOODBYE        ;                168H
  176. JMP$INITMOD:    JMP    INITMOD        ;go to user written routine    16BH
  177. JMP$NEWBAUD:    JMP    NEWBAUD        ;change baud rate
  178.         RET            ;(by-passes PMMI routine)    171H
  179.         NOP
  180.         NOP
  181.         RET            ;(by-passes PMMI routine)    174H
  182.         NOP
  183.         NOP
  184. JMP$SETUPR:    JMP    SETUPR        ;                177H
  185.         DS    3        ;not used by MEX        17AH
  186. JMP$SYSVER:    JMP    SYSVER        ;                17DH
  187. JMP$BREAK:    JMP    SENDBRK        ;                180H
  188. ;
  189. ;
  190. ; Do not change the following six lines.
  191. ;
  192. JMP$ILPRT:    DS    3        ;                183H
  193. JMP$INBUF    DS    3        ;                186H
  194. JMP$INLNCOMP:    DS    3        ;                189H
  195. JMP$INMODEM    DS    3        ;                18CH
  196. JMP$NXTSCRN:    DS    3        ;                18FH
  197. JMP$TIMER    DS    3        ;                192H
  198. ;
  199. ;
  200. ; Routine to clear to end of screen.  If using CLREOS and CLRSCRN, set
  201. ; SCRNTEST to YES at 010AH (above).
  202. ;
  203. CLREOS:        LXI    D,EOSMSG
  204.         MVI    C,PRINT
  205.         CALL    MEX
  206.         RET
  207. ;
  208. CLRSCRN:    LXI    D,CLSMSG
  209.         MVI    C,PRINT
  210.         CALL    MEX
  211.         RET
  212.     
  213. ;
  214. ;
  215. SYSVER:        MVI    C,ILP        ;                1A7H
  216.         CALL    MEX
  217.         DB    'Version for PMC Micromate Model 101 - '
  218.         DB    CR,LF
  219.         DB    'With external Hayes Smartmodem 1200'
  220.         DB    CR,LF,0
  221.         RET
  222. ;-----------------------------------------------------------------------
  223. ;
  224. ; NOTE:  You can change the SYSVER message to be longer or shorter.  The
  225. ;     end of your last routine should terminate by 0400H (601 bytes
  226. ;     available after start of SYSVER) if using the Hayes Smartmodem
  227. ;     or by address 0C00H (2659 bytes) otherwise.
  228. ;
  229. ;-----------------------------------------------------------------------
  230. ;
  231. ; Add your own routine here to send a break tone to reset some time-sharing
  232. ; computers, if desired.
  233. SENDBRK:    RET
  234. ;.....
  235. ;
  236. ;
  237. ; Add your own routine here to put DTR low and/or send a break tone.
  238. ; Check other routines such as MDM709DP.ASM (M7DP-1.ASM) which is
  239. ;    using this feature.
  240. ;
  241. GOODBYE:    RET
  242. ;.....
  243. ;
  244. ;
  245. ; You can use this area for any special initialization or setup you may
  246. ; wish to include.  Each must stop with a RET. You can check the other
  247. ; available overlays for ideas how to write your own routines if that
  248. ; may be of some help.
  249. ;
  250. INITMOD:MVI    L,8            ;set baud rate to 1200
  251.     CALL    BAUDMCH
  252.     MVI    A,5
  253.     STA    MSPEED            ;set MSPEED to match
  254.     RET
  255. ;
  256. ;Allow baud rate change w SET cmd
  257. SETUPR:    MVI    C,SBLANK        ;any arguments
  258.     CALL    MEX
  259.     JC    TELL            ;if not, go display baud
  260.     LXI    D,CMDTBL
  261.     MVI    C,LOOKUP
  262.     CALL    MEX            ;parse argument
  263.     PUSH    H            ;save any arg addrs on stack
  264.     RNC                ;if we have one, return to it
  265.     POP    H            ;oops, input not found in table
  266.     MVI    C,ILP
  267.     CALL    MEX            ;tell user input not valid
  268.     DB    '++ Incorrect Entry ++',CR,LF,BELL,0
  269.     RET
  270.  
  271. CMDTBL:    DB    '30','0'+80H
  272.     DW    OK300
  273.     DB    '60','0'+80H
  274.     DW    OK600
  275.     DB    '120','0'+80H
  276.     DW    OK1200
  277.     DB    '240','0'+80H
  278.     DW    OK2400
  279.     DB    '480','0'+80H
  280.     DW    OK4800
  281.     DB    '960','0'+80H
  282.     DW    OK9600
  283.     DB    '1920','0'+80H
  284.     DW    OK1920
  285. ;
  286. TELL    MVI    C,ILP
  287.     CALL    MEX            ;print current baud rate
  288.     DB    CR,LF,'Baud rate is now: ',0
  289.     LDA    MSPEED
  290.     MVI    C,PRBAUD
  291.     CALL    MEX
  292.     RET
  293.  
  294. OK300:    MVI    A,1            ;MSPEED 300 baud value
  295.     LHLD    BD300            ;300 baud value in 'HL'
  296.     JMP    BAUDMCH            ;go do it
  297.  
  298. OK600:    MVI    A,3
  299.     LHLD    BD600
  300.     JMP    BAUDMCH
  301.  
  302. OK1200:    MVI    A,5
  303.     LHLD    BD1200
  304.     JMP    BAUDMCH
  305.  
  306. OK2400:    MVI    A,6
  307.     LHLD    BD2400
  308.     JMP    BAUDMCH
  309.  
  310. OK4800:    MVI    A,7
  311.     LHLD    BD4800
  312.     JMP    BAUDMCH
  313.  
  314. OK9600:    MVI    A,8
  315.     LHLD    BD9600
  316.     JMP    BAUDMCH
  317.  
  318. OK1920:    MVI    A,9
  319.     LHLD    BD1920
  320.     JMP    BAUDMCH
  321.  
  322. BAUDMCH:PUSH    PSW        ;save MSPEED value
  323.     PUSH    H        ;Save baud code
  324.     MVI    C,32H        ;Function: direct bios call.
  325.     LXI    D,BIOSPB    ;BIOS parameter block
  326.     CALL    5
  327.     LXI    D,8+7        ;Index to BAUD rate in 2nd
  328.     DAD    D        ; entry. (i.e. MODEM)
  329.     POP    D        ;Get new code back.
  330.     MOV    A,M        ;Best not to change high
  331.     ANI    0F0H        ; nibble, whatever it is.
  332.     ORA    E        ;Put new code in table.
  333.     MOV    M,A
  334. ;
  335.     MVI    C,32H        ;Function: direct bios call.
  336.     LXI    D,BIOSPB1    ;Initialize device means to
  337.     CALL    5        ; set BAUD rate to PMC.
  338.     POP    PSW        ;restore MSPEED value
  339.     STA    MSPEED        ;set it
  340.     RET
  341.  
  342. NEWBAUD:CPI    1
  343.     JZ    OK300
  344.     CPI    3
  345.     JZ    OK600
  346.     CPI    5
  347.     JZ    OK1200
  348.     CPI    6
  349.     JZ    OK2400
  350.     CPI    7
  351.     JZ    OK4800
  352.     CPI    8
  353.     JZ    OK9600
  354.     CPI    9
  355.     JZ    OK1920
  356.     RET
  357. ;
  358. ; Table of Baud Rate Parameters
  359. ;
  360. BD300    DW    0006H
  361. BD600    DW    0007H
  362. BD1200    DW    0008H
  363. BD2400    DW    000AH
  364. BD4800    DW    000CH
  365. BD9600    DW    000EH
  366. BD1920    DW    000FH
  367. ;
  368. BIOSPB        DB    20    ;BIOS fcn: return devtbl address
  369.         DB    0    ;A-reg contents
  370.         DW    0    ;BC-reg contents
  371.         DW    0    ;DE-reg contents
  372.         DW    0    ;HL-reg contents
  373. ;
  374. BIOSPB1        DB    21    ;BIOS fcn: initialize device in c-reg
  375.         DB    0    ;A-reg contents
  376.         DB    1    ;C-reg=1 for MODEM
  377.         DB    0    ;B-reg
  378.         DW    0    ;DE-reg
  379.         DW    0    ;HL-reg
  380. ;
  381. SPCLMENU:    RET
  382. ;.....
  383. ;
  384. ;    
  385. ;
  386. BAUDBUF:    DB    10,0
  387.         DS    10
  388.  
  389. EOSMSG:    DB    23,0,0,0,0,'$'    ;clear to eos for Cybernex XL-87
  390. CLSMSG:    DB    24,0,0,0,0,'$'    ;clear screen for Cybernex XL-87
  391.  
  392. ;-----------------------------------------------------------------------
  393. ;
  394. ; NOTE:  MUST TERMINATE PRIOR TO 0B00H (with Smartmodem)
  395. ;                 0D00H (without Smartmodem)
  396. ;.....
  397. ;
  398.       END
  399. ;
  400.