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-VT11.ASM < prev    next >
Assembly Source File  |  2000-06-30  |  16KB  |  381 lines

  1. ;MXO-VT10.ASM - Overlay file for MEXxx
  2. ;
  3. REV     EQU     11      ;V 1.0    
  4. ;
  5. ;This  overlay file supports the DEC Micro VT180 running  CP/M  or 
  6. ;Bernie Eiben's implementation of ZCPR2.
  7. ;
  8. ;We use the COMM Port of the VT180.   Baud rates are set from the 
  9. ;VT100 keyboard and stored in the VT100's nonvolatile RAM.   There 
  10. ;is  no  need for  a  "special"  baud-rate routine.    Since   the 
  11. ;COMM port is referred to RDR:  and PUN:,  we use MEX calls (which 
  12. ;in turn calls the BDOS).
  13. ;
  14. ;To test for COMM status, we use IObyte redirection in conjunction 
  15. ;with direct BIOS CONSTAT call.
  16. ;
  17. ;This  technique,  although  slower  than direct handling  of  the 
  18. ;hardware,  takes advantage of the BIOS routines already built in, 
  19. ;thereby making our code smaller.
  20. ;
  21. ;***********************************************************************
  22. ;
  23. ; 6-JUN-1985   Fixed problem with INDP routine that prevented
  24. ;           SENDOUT from working (Ron Fowler)
  25. ;
  26. ;  5-Jun-1984   Adapted from M7VT-2.ASM by Bernie Eiben.  Removed 
  27. ;   Rev 1.0     the  Rainbow conditionals.   This  overlay  won't 
  28. ; Stuart Fuller work  on a Rainbow in file transfer mode  without 
  29. ;               some bit twiddling on the 8088 side.  Added tests 
  30. ;               for   running   under  ZCPR2  and   bit   twiddle 
  31. ;               accordingly.
  32. ;
  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. TRUE:           EQU     0FFH
  41. FALSE:          EQU     0
  42. YES:            EQU     0FFH
  43. NO:             EQU     0
  44. ;
  45. ;
  46. ; MEX service processor stuff
  47. ;
  48. MEX     EQU     0D00H           ;address of the service processor
  49. INMDM   EQU     255             ;get char from port to A, CY=none in 100 ms
  50. TIMER   EQU     254             ;delay 100ms * reg B
  51. TMDINP  EQU     253             ;B=# secs to wait for char, cy=no char
  52. CHEKCC  EQU     252             ;check for ^C from KBD, Z=present
  53. SNDRDY  EQU     251             ;test for modem-send ready
  54. RCVRDY  EQU     250             ;test for modem-receive ready
  55. SNDCHR  EQU     249             ;send a character to the modem (after sndrdy)
  56. RCVCHR  EQU     248             ;recv a char from modem (after rcvrdy)
  57. LOOKUP  EQU     247             ;table search: see CMDTBL comments for info
  58. PARSFN  EQU     246             ;parse filename from input stream
  59. BDPARS  EQU     245             ;parse baud-rate from input stream
  60. SBLANK  EQU     244             ;scan input stream to next non-blank
  61. EVALA   EQU     243             ;evaluate numeric from input stream
  62. LKAHED  EQU     242             ;get nxt char w/o removing from input
  63. GNC     EQU     241             ;get char from input, cy=1 if none
  64. ILP     EQU     240             ;inline print
  65. DECOUT  EQU     239             ;decimal output
  66. PRBAUD  EQU     238             ;print baud rate
  67. ;
  68. PUNCH:  EQU     4               ;BDOS/MEX punch function
  69. READER: EQU     3               ;BDOS/MEX reader function
  70. PRINT   EQU     9               ;BDOS/MEX print-string function call
  71. ;
  72. ;       Miscellanea for VT180
  73. ;
  74. IOBYTE  EQU     3               ; for I/O redirection
  75. BATIO   EQU     56H             ;
  76. AALOAD  EQU     0EA39H          ; ZCPR2 Bios sub-version
  77. CALOAD  EQU     AALOAD + 1      ; Safety check location
  78. LODNUM  EQU     28              ; Current version - should be in AALOAD
  79. CLDNUM  EQU     NOT LODNUM AND 0FFH     ; This should be in CALOAD
  80. CRTCB   EQU     0EA3BH          ; CRT control block addr - flags are at +1
  81. PTRCB   EQU     0EA59H          ; Likewise for PTR
  82. QMRCVFL EQU     01H     ; Mask to allow me to send XON/XOFF
  83. QMXOFFD EQU     02H     ; Mask indicating I sent an XOFF
  84. QMXMTFL EQU     04H     ; Mask to allow other end to stop me
  85. QMSUSP  EQU     08H     ; Mask indicating I got an XOFF
  86. QMARROW EQU     10H     ; Mask for arrow xlate bit
  87. QMBIT7  EQU     20H     ; Mask for "use only 7 bits"
  88. QMCCFLS EQU     40H     ; Mask for "flush buffer if 2 ^C's seen"
  89. QM1STCC EQU     80H     ; Mask for "first ^C seen"
  90. ;
  91. BELL    EQU     7               ;bell
  92. TAB     EQU     9
  93. CR      EQU     13              ;carriage return
  94. LF      EQU     10              ;linefeed
  95. ESC     EQU     1BH             ;escape
  96. YES     EQU     0FFH
  97. NO      EQU     0
  98. ;
  99. DAV     EQU     0FFH            ;bit(s) to test for ready
  100. TBMT    EQU     0FFH            ;
  101. ;
  102.         ORG     100H
  103. ;
  104. ; Change the clock speed to suit your system
  105. ;
  106.         DS      3               ;(for  "JMP   START" instruction)
  107.  
  108.         DB      NO              ;yes=PMMI S-100 Modem                   103H
  109.         DB      YES              ;yes=HAYES Smartmodem, no=non-PMMI      104H
  110.         DB      'T'             ;T=touch, P=pulse (Smartmodem-only)     105H
  111. CLOCK:  DB      40              ;clock speed in MHz x10, 25.5 MHz max.  106H
  112.                                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  113. MSPEED: DB      5               ;0=110 1=300 2=450 3=600 4=710 5=1200   107H
  114.                                 ;6=2400 7=4800 8=9600 9=19200 default
  115. BYTDLY: DB      5               ;0=0 delay  1=10ms  5=50 ms - 9=90 ms   108H
  116.                                 ;default time to send character in ter-
  117.                                 ;minal mode file transfer for slow BBS.
  118. CRDLY:  DB      5               ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  119.                                 ;default time for extra wait after CRLF
  120.                                 ;in terminal mode file transfer
  121. COLUMS: DB      5               ;number of DIR columns shown            10AH
  122. SETFLG: DB      NO              ;yes=user-added Setup routine           10BH
  123. SCRTST: DB      YES             ;Cursor control routine                 10CH
  124.         DB      YES             ;yes=resend a record after any non-ACK  10DH
  125.                                 ;no=resend a record after a valid-NAK
  126. BAKFLG: DB      YES             ;yes=change any file same name to .BAK  10EH
  127. CRCDFL: DB      YES             ;yes=default to CRC checking            10FH
  128. TOGCRC: DB      YES             ;yes=allow toggling of CRC to Checksum  110H
  129. CVTBS:  DB      NO              ;yes=convert backspace to rub           111H
  130. TOGLBK: DB      YES             ;yes=allow toggling of bksp to rub      112H
  131. ADDLF:  DB      NO              ;no=no LF after CR to send file in      113H
  132.                                 ;terminal mode (added by remote echo)
  133. TOGLF:  DB      YES             ;yes=allow toggling of LF after CR      114H
  134.         DB      YES             ;yes=allow transmission of logon        115H
  135.                                 ;write logon sequence at location LOGON
  136. SAVCCP: DB      YES             ;yes=do not overwrite CCP               116H
  137.         DB      NO              ;yes=local command if EXTCHR precedes   117H
  138.                                 ;no=external command if EXTCHR precedes
  139.         DB      YES             ;yes=allow toggling of LOCONEXTCHR      118H
  140. LSTTST: DB      YES             ;yes=printer available on printer port  119H
  141. XOFTST: DB      NO              ;yes=checks for XOFF from remote while  11AH
  142.                                 ;sending a file in terminal mode
  143. XONWT:  DB      NO              ;yes=wait for XON after CR while        11BH
  144.                                 ;sending a file in terminal mode
  145. TOGXOF: DB      YES             ;yes=allow toggling of XOFF checking    11CH
  146. IGNCTL: DB      NO              ;yes=CTL-chars above ^M not displayed   11DH
  147. EXTRA1: DB      0               ;for future expansion                   11EH
  148. EXITCHR DB      'E'-40H         ;^E = Exit to main menu                 11FH
  149. BRKCHR: DB      '@'-40H         ;^@ = Send 300 ms. break tone           120H
  150. NOCONN: DB      'N'-40H         ;^N = Disconnect from the phone line    121H
  151. LOGCHR: DB      'L'-40H         ;^L = Send logon                        122H
  152. LSTCHR: DB      'P'-40H         ;^P = Toggle printer                    123H
  153. UNSAVE: DB      'R'-40H         ;^R = Close input text buffer           124H
  154. TRNCHR: DB      'T'-40H         ;^T = Transmit file to remote           125H
  155. SAVCHR: DB      'Y'-40H         ;^Y = Open input text buffer            126H
  156. EXTCHR: DB      '^'-40H         ;^^ = Send next character               127H
  157.         DS      2               ;unused by MEX                          128H
  158. ;
  159. INCTL1: JMP     INSP            ;go input status port                   12AH
  160.         DS      7
  161. ;
  162. OTDATA: JMP     OUTDP           ;go output data port                    134H
  163.         DS      7
  164. ;
  165. INPORT: JMP     INDP            ;go input data port                     13EH
  166.         DS      7
  167. ;
  168. MASKR:  ANI     DAV     ! RET   ;bit to test for receive ready          148H
  169. TESTR:  CPI     DAV     ! RET   ;value of rcv. bit when ready           14BH
  170. ; Note: most overlays will use ANI TBMT at MASKS.
  171. ; However, we don't bother with it here.  TESTS: will always return ready
  172. MASKS:  MVI     A,TBMT  ! RET   ;bit to test for send ready             14EH
  173. TESTS:  CPI     TBMT    ! RET   ;value of send bit when ready           151H
  174.         DS      14              ;                                       156H
  175. ;
  176. ;
  177. DIALV:  DS      3               ;DIALV not done here (maybe MXO-SM)     162H
  178. DISCV:  DS      3               ;DISCV likewise
  179. GOODBV: JMP     GOODBY          ;                                       168H
  180. INMODV: JMP     NITMOD          ;go to user written routine             16BH
  181.         RET ! NOP ! NOP         ;NEWBDV                                 16EH
  182.         RET ! NOP ! NOP         ;NOPARV                                 171H
  183.         RET ! NOP ! NOP         ;PARITV                                 174H
  184. SETUPV: JMP     SETCMD          ;                                       177H
  185.         DS      3               ;not used by MEX                        17AH
  186. VERSNV: JMP     SYSVER          ;                                       17DH
  187. BREAKV: JMP     SBREAK          ;                                       180H
  188. ;
  189. ; Do not change the following six lines (they provide access to routines
  190. ; in MEX that are present to support MDM7 overlays -- they will likely
  191. ; be gone by MEX v2.0).
  192. ;
  193. ILPRTV: DS      3               ;                                       183H
  194. INBUFV  DS      3               ;                                       186H
  195. ILCMPV: DS      3               ;                                       189H
  196. INMDMV: DS      3               ;                                       18CH
  197.         DS      3               ;                                       18FH
  198. TIMERV  DS      3               ;                                       192H
  199. ;
  200. ; Routine to clear to end of screen.  If using CLREOS and CLRSCRN, set
  201. ; SCRTEST to YES at 010AH (above).
  202. ;
  203. ;
  204. CLREOS:         LXI     D,EOSMSG        ;                               195H
  205.                 MVI     C,PRINT
  206.                 CALL    MEX
  207.                 RET
  208. ;
  209. CLS:            LXI     D,CLSMSG        ;                               19EH
  210.                 MVI     C,PRINT
  211.                 CALL    MEX
  212.                 RET
  213. ;
  214. ;       End of fixed areas
  215. ;
  216. ;.....
  217. ;
  218. ;
  219. ; Modem I/O primitive
  220. ;
  221. ; Subroutine to output a character to the modem.
  222. ; This routine does it's own status checking.
  223. ;
  224. OUTDP:  PUSH    B               ;save...
  225.         PUSH    D               ;...the...
  226.         PUSH    H               ;...registers.
  227.         MOV     E,A             ;move output byte into E
  228.         MVI     C,PUNCH         ;use the BDOS function
  229.         CALL    MEX             ;go
  230.         POP     H               ;restore...  
  231.         POP     D               ;...the...
  232.         POP     B               ;...registers.
  233.         RET
  234. ;.....
  235. ;
  236. ;
  237. ; Subroutine to input a character from the modem.
  238. ; This routine will wait until one becomes available.
  239. ;
  240. INDP:    CALL    INSP
  241.     ORA    A
  242.     JZ    INDPNR        ;if no char, go return last    
  243.     PUSH    B               ;save...
  244.         PUSH    D               ;...the...
  245.         PUSH    H               ;...regesters.
  246.         MVI     C,READER        ;use the BDOS function
  247.         CALL    MEX             ;go
  248.         POP     H               ;restore...
  249.         POP     D               ;...the...
  250.         POP     B               ;...registers.
  251.     STA    LASTCH        ;always save most recent char
  252.         RET
  253. INDPNR:    LDA    LASTCH        ;return old char
  254.     RET
  255. ;
  256. ; The Check for characters at COMM Port using I/O redirection
  257. ;
  258. INSP:   PUSH    B
  259.         PUSH    D
  260.         PUSH    H               ; save the environment
  261.         LDA     IOBYTE          ; Including the IOByte
  262.         STA     SAVEIO          ;
  263.         MVI     A,BATIO         ; change I/O byte
  264.         STA     IOBYTE
  265.         CALL    BCONST          ; call BIOS direct - see INITMOD
  266.         PUSH    A
  267.         LDA     SAVEIO          ; change I/O byte back
  268.         STA     IOBYTE
  269.         POP     A
  270.         POP     H               ; restore environment
  271.         POP     D
  272.         POP     B
  273.         RET
  274. ;               
  275. NITMOD: LHLD    1               ; Get BIOS Jump-table adress
  276.         LXI     D,3
  277.         DAD     D               ; CONSTAT routine in BIOS
  278.         SHLD    BCONST+1        ; modify our "routine"
  279.         RET
  280. ;
  281. BCONST: JMP     $-$             ; address "filled in" by above code
  282. ;
  283. SBREAK: RET
  284. ;
  285. GOODBY: LDA     ZCPR2
  286.         ORA     A
  287.         RZ                      ; If running CP/M, then just return
  288.         LDA     CRTSAV          ; Else, we gotta put things back again.
  289.         STA     CRTCB+1
  290.         LDA     PTRSAV
  291.         STA     PTRCB+1
  292.         RET
  293. ;
  294. SETCMD: RET
  295. ;
  296. SYSVER: PUSH    B
  297.         PUSH    D
  298.         PUSH    H
  299.         LXI     D,DECMSG
  300.         MVI     C,PRINT
  301.         CALL    MEX
  302. ; Gotta do the check for ZCPR2 here, SYSVER gets called before INMODV
  303.         MVI     A,NO            ; zero A
  304.         STA     ZCPR2           ; assume CP/M
  305.         LDA     AALOAD          ; get "load number" from BIOS
  306.         CPI     LODNUM          ; and see if it's right
  307.         JNZ     NOTZCP          ; nope, go
  308.         LDA     CALOAD          ; next check its complement
  309.         CPI     CLDNUM
  310.         JNZ     NOTZCP
  311.         MVI     A,YES           ; must be ZCPR2
  312.         STA     ZCPR2
  313.         LXI     H,CRTCB+1       ; get CRT's flag byte
  314.         MOV     A,M
  315.         STA     CRTSAV          ; save it
  316.         ANI     0FFH XOR QMARROW        ; and zap the arrow xlate flag
  317.         MOV     M,A
  318.         LXI     H,PTRCB+1       ; do the same for the PTR
  319.         MOV     A,M
  320.         STA     PTRSAV
  321.         MVI     M,QMRCVFL       ; keep only RCVFLOW bit
  322. ; Finished with check for ZCPR2
  323. NOTZCP: LDA     ZCPR2
  324.         ORA     A
  325.         JZ      SYSVE1
  326.         LXI     D,ZCPMSG
  327.         MVI     C,PRINT
  328.         CALL    MEX
  329. SYSVE1: LXI     D,CRLF
  330.         MVI     C,PRINT
  331.         CALL    MEX
  332.         POP     H
  333.         POP     D
  334.         POP     B
  335.         RET
  336. ;
  337. ;       Miscellaneous storage
  338. ;
  339. SAVEIO: DB      0               ; Save the original IObyte here
  340. CRTSAV: DB      0               ; Save the CRT flags from ZCPR2's Bios
  341. PTRSAV: DB      0               ; Likewise for the PTR flags
  342. ZCPR2:  DB      0               ; Indicates running ZCPR2
  343. ;
  344. ;       Various text messages
  345. ;
  346. XSO     EQU     14                      ;"shift out" character
  347. XSI     EQU     15                      ;"shift in" character
  348. ;
  349. DECMSG: DB      'Version for: ',ESC,'[7m',ESC,')0'
  350.         DB      'd',XSO,'x',XSI
  351.         DB      'i',XSO,'x',XSI
  352.         DB      'g',XSO,'x',XSI
  353.         DB      'i',XSO,'x',XSI
  354.         DB      't',XSO,'x',XSI
  355.         DB      'a',XSO,'x',XSI
  356.         DB      'l',ESC,'[m '
  357.         DB      'DEC VT180'
  358.         DB      '  Overlay V'
  359.         DB      REV/10+'0'
  360.         DB      '.'
  361.         DB      REV MOD 10+'0'
  362.         DB      '$'
  363. ;
  364. ZCPMSG: DB      ' running ZCPR2.','$'
  365. CRLF:   DB      CR,LF,'$'
  366. ;
  367. CLSMSG: DB      ESC,'[2J',ESC,'[H','$'
  368. EOSMSG: DB      ESC,'[0J','$'
  369. ;
  370. ;
  371. OVREND: EQU     $               ; See if it'll fit
  372.         IF OVREND / 0B00H
  373.         +++ VT180 OVERLAY TOO LARGE - OVREND >= 0B00H +++
  374.         ENDIF
  375. ;
  376. LASTCH:    DB    0
  377. ;
  378.           END
  379. ;
  380.  
  381.