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 / MXH-VT36.AZM / MXH-VT36.ASM
Assembly Source File  |  2000-06-30  |  21KB  |  638 lines

  1. ; Title - Overlay file for MEXxx
  2. ;
  3. REV     EQU     36    ; V 3.6 
  4. ;
  5. ;
  6. ;This  Overlay  File  supports  the DEC Micro VT180 with CP/M.
  7. ;
  8. ;We  use the COMM-Port of the Micro's.  Baud-rates are "parallel"
  9. ;to the console Baud-rates - no need for  a  "special"  baud-rate
  10. ;routine.   Since  the COMM-port is I/O-wise Reader/Punch, we use
  11. ;the BDOS calls.
  12. ;
  13. ;To  test  for  COMM-status  ,  we  use  I/O  byte redirection in
  14. ;conjunction with direct BIOS-CONSTAT call.
  15. ;
  16. ;This  technique  although  a  little  bit slower than direct I/O
  17. ;using  Interrupt  on  INPUT  is  general  enough  to  be  system
  18. ;independent.
  19. ;
  20. ;       - B. Eiben DEC Large System Marketing Marlboro Mass
  21. ;
  22. ; And more or less bios version independant.--Bill Pechter
  23. ;
  24. ;***********************************************************************
  25. ;
  26. ;  5-Jun-1984   Adapted from M7VT-2.ASM by Bernie Eiben.  
  27. ;   Rev 1.0     
  28. ;  Stu Fuller
  29. ;
  30. ; 17-Mar-86    Version 3.4 removed ZCPR2/3 bit manipulation.  That will
  31. ; Bill Pechter    now be done by poke commands in Mex/Mexplus Ini.Mex.
  32. ; 22-Aug-86     Version 3.5 test to fix sendout.  Added test for status
  33. ; Bill Pechter    and RETJNK to avoid hanging.
  34. ;
  35. ; 29-Aug-86     Final Version 3.6 supports full Remote operation.
  36. ; Bill Pechter  Support for future versions from me not available
  37. ;        as they will be made specifically for my modified Robin.
  38. ;
  39. ;______________________________________________________________________________
  40. ;
  41. ;            ZCPR2            ZCPR3        ZCPR3 with RCP
  42. ;______________________________________________________________________________
  43. ;
  44. ; change contents     EA3CH            EAFEH        E240H
  45. ; at this address
  46. ; to 64H from 74H to
  47. ; disable wordstar
  48. ; ^x^s cursor key
  49. ; translation.
  50. ;______________________________________________________________________________
  51. ;
  52. ; change contents    EA60H            EB1CH        E31CH
  53. ; at this address to 
  54. ; 01 from 05H to
  55. ; disable the 
  56. ; automatic xoff-xon
  57. ; transmission.
  58. ;
  59. ;------------------------------------------------------------------------------
  60. ;
  61. ;bios code looks like this--example using ZCPR3 without RCP
  62. ;
  63. ;        Port#        Port control       data
  64. ;            block    
  65. ;
  66. ;contents:  41H        74H          00
  67. ;address   eafdH    eafeH          eaff
  68. ;
  69. ; QMRCVFL EQU     01H     ; Mask to allow me to send XON/XOFF
  70. ; QMXOFFD EQU     02H     ; Mask indicating I sent an XOFF
  71. ; QMXMTFL EQU     04H     ; Mask to allow other end to stop me
  72. ; QMSUSP  EQU     08H     ; Mask indicating I got an XOFF
  73. ; QMARROW EQU     10H     ; Mask for arrow xlate bit
  74. ; QMBIT7  EQU     20H     ; Mask for "use only 7 bits"
  75. ; QMCCFLS EQU     40H     ; Mask for "flush buffer if 2 ^C's seen"
  76. ; QM1STCC EQU     80H     ; Mask for "first ^C seen"
  77. ;
  78. ;NOTE:  DO NOT poke any bits with CP/M80 (STANDARD DEC DISTRIBUTION) or
  79. ;    MultiSystem 180 (by Ken Heyda)...poking of random bits would
  80. ;    be disasterous.
  81. ;
  82. ;****************************************************************************
  83. ;
  84. ;
  85. TRUE:           EQU     0FFH
  86. FALSE:          EQU     0
  87. YES:            EQU     0FFH
  88. NO:             EQU     0
  89. ;
  90. BELL    EQU     07H             ;bell
  91. TAB    EQU     9
  92. CR    EQU     13              ;carriage return
  93. LF    EQU     10              ;linefeed
  94. ESC    EQU     1BH             ;escape
  95. ;
  96. ;
  97. ;
  98. I8080    equ    yes
  99. I8086    equ     no
  100. CPM    equ     yes
  101. PCDOS    equ     no
  102. ;
  103. ;
  104. ;
  105. ;    SET ONE (and only one) OF EACH SET OF THE FOLLOWING CONDITIONALS
  106. ;    DEPENDING ON VERSION OF SOFTWARE and CPU TYPE
  107. ;
  108. ;
  109. ;        Mex Type
  110. ;
  111. MEXONE         EQU FALSE    ; version 1.10 through 1.14
  112. MEXTWO         EQU TRUE     ; version 1.24 through 1.63 (MexPlus)
  113. ;
  114. ;
  115.  
  116. ;
  117. DAV     EQU     0FFH            ;bit(s) to test for ready
  118. TBMT    EQU     0FFH            ;
  119. ;*****************************************************************************; =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =   =
  120. ;
  121. ;
  122. ; The Check for characters at COMM-Port using I/O redirection
  123. ;
  124. IOBYTE  EQU     3               ; some definitions
  125. ;
  126. ;
  127. DEFIO    EQU    95H        ;
  128. BATIO   EQU     56H             ;
  129. ;
  130. ; MEX service processor stuff
  131. ;
  132. MEX     EQU     0D00H           ;address of the service processor
  133. INMDM   EQU     255             ;get char from port to A, CY=none in 100 ms
  134. TIMER   EQU     254             ;delay 100ms * reg B
  135. TMDINP  EQU     253             ;B=# secs to wait for char, cy=no char
  136. CHEKCC  EQU     252             ;check for ^C from KBD, Z=present
  137. SNDRDY  EQU     251             ;test for modem-send ready
  138. RCVRDY  EQU     250             ;test for modem-receive ready
  139. SNDCHR  EQU     249             ;send a character to the modem (after sndrdy)
  140. RCVCHR  EQU     248             ;recv a char from modem (after rcvrdy)
  141. LOOKUP  EQU     247             ;table search: see CMDTBL comments for info
  142. PARSFN  EQU     246             ;parse filename from input stream
  143. BDPARS  EQU     245             ;parse baud-rate from input stream
  144. SBLANK  EQU     244             ;scan input stream to next non-blank
  145. EVALA   EQU     243             ;evaluate numeric from input stream
  146. LKAHED  EQU     242             ;get nxt char w/o removing from input
  147. GNC     EQU     241             ;get char from input, cy=1 if none
  148. ILP     EQU     240             ;inline print
  149. DECOUT  EQU     239             ;decimal output
  150. PRBAUD  EQU     238             ;print baud rate
  151. ;
  152. PUNCH:  EQU     4               ;BDOS/MEX punch function
  153. READER: EQU     3               ;BDOS/MEX reader function
  154. PRINT   EQU     9               ;BDOS/MEX print-string function call
  155. ;
  156. ;
  157. ;
  158. ORG    100H
  159. ;
  160. IF MEXTWO
  161. ;
  162. ;  LINE BELOW ADDED FOR MEX V1.24 TO MAKE LOADABLE OVERLAY
  163. ;
  164. DB    0C3H    
  165. ;
  166. ;
  167. ;
  168. ;
  169.         DS      2               ;(for  "JMP   START" instruction)
  170. ENDIF;MEXTWO
  171. ;
  172. IF MEXONE
  173. ;
  174.     DS    3
  175. ;
  176. ;
  177. ENDIF;MEXONE
  178. ;
  179. ; Change the clock speed to suit your system
  180. ;
  181. PMMIMODEM:  DB  NO              ;yes=PMMI S-100 Modem                   103H
  182. SMARTMODEM: DB  YES        ;yes=HAYES Smartmodem, no=non-PMMI      104H
  183. TONE    DB      'P'             ;T=touch, P=pulse (Smartmodem-only)     105H
  184. CLOCK:  DB      40              ;clock speed in MHz x10, 25.5 MHz max.  106H
  185.                                 ;20=2 MHh, 37=3.68 MHz, 40=4 MHz, etc.
  186. MSPEED: DB      5               ;0=110 1=300 2=450 3=600 4=710 5=1200   107H
  187.                                 ;6=2400 7=4800 8=9600 9=19200 default
  188.                 ;set to 300 baud...
  189. BYTDLY: DB      5               ;0=0 delay  1=10ms  5=50 ms - 9=90 ms   108H
  190.                                 ;default time to send character in ter-
  191.                                 ;minal mode file transfer for slow BBS.
  192. CRDLY:  DB      5               ;0=0 delay 1=100 ms 5=500 ms - 9=900 ms 109H
  193.                                 ;default time for extra wait after CRLF
  194.                                 ;in terminal mode file transfer
  195. COLUMS: DB      5               ;number of DIR columns shown            10AH
  196. SETFLG: DB      YES             ;yes=user-added Setup routine           10BH
  197. SCRTST: DB      YES             ;Cursor control routine                 10CH
  198. ACKNAK: DB      YES             ;yes=resend a record after any non-ACK  10DH
  199.                                 ;no=resend a record after a valid-NAK
  200. BAKFLG: DB      YES             ;yes=change any file same name to .BAK  10EH
  201. CRCDFL: DB      YES             ;yes=default to CRC checking            10FH
  202. TOGCRC: DB      YES             ;yes=allow toggling of CRC to Checksum  110H
  203. CVTBS:  DB      NO              ;yes=convert backspace to rub           111H
  204. TOGLBK: DB      YES             ;yes=allow toggling of bksp to rub      112H
  205. ADDLF:  DB      NO              ;no=no LF after CR to send file in      113H
  206.                                 ;terminal mode (added by remote echo)
  207. TOGLF:  DB      YES             ;yes=allow toggling of LF after CR      114H
  208. TRANLOGON:  DB     YES             ;yes=allow transmission of logon        115H
  209.                                 ;write logon sequence at location LOGON
  210. SAVCCP: DB      YES             ;yes=do not overwrite CCP               116H
  211. LOCONEXTCHR: DB NO              ;yes=local command if EXTCHR precedes   117H
  212.                                 ;no=external command if EXTCHR precedes
  213. TOGGLELOC:      DB      YES             ;yes=allow toggling of LOCONEXTCHR      118H
  214. LSTTST: DB      YES             ;yes=printer available on printer port  119H
  215. XOFTST: DB      NO              ;yes=checks for XOFF from remote while  11AH
  216.                                 ;sending a file in terminal mode
  217. XONWT:  DB      NO              ;yes=wait for XON after CR while        11BH
  218.                                 ;sending a file in terminal mode
  219. TOGXOF: DB      YES             ;yes=allow toggling of XOFF checking    11CH
  220. IGNCTL: DB      NO              ;yes=CTL-chars above ^M not displayed   11DH
  221. EXTRA1: DB      0               ;for future expansion                   11EH
  222. EXITCHR DB      'E'-40H         ;^E = Exit to main menu                 11FH
  223. BRKCHR:    DB    'B'-40H        ;^B = Send 300 ms. break tone        120H
  224. NOCONN:    DB    'N'-40H        ;^N = Disconnect from the phone line    121H
  225. LOGCHR: DB      'L'-40H         ;^L = Send logon                        122H
  226. LSTCHR: DB      'P'-40H         ;^P = Toggle printer                    123H
  227. UNSAVE: DB      'R'-40H         ;^R = Close input text buffer           124H
  228. TRNCHR: DB      'T'-40H         ;^T = Transmit file to remote           125H
  229. SAVCHR: DB      'Y'-40H         ;^Y = Open input text buffer            126H
  230. EXTCHR: DB      '^'-40H         ;^^ = Send next character               127H
  231.         DS      2               ;unused by MEX                          128H
  232. ;
  233. INCTL1: JMP     INSP            ;go input status port                   12AH
  234.         DS      7
  235. ;
  236. OTDATA: JMP     OUTDP           ;go output data port                    134H
  237.         DS      7
  238. ;
  239. INPORT: JMP     INDP            ;go input data port                     13EH
  240.         DS      7
  241. ;
  242. MASKR:  ANI     DAV     ! RET   ;bit to test for receive ready          148H
  243. TESTR:  CPI     DAV     ! RET   ;value of rcv. bit when ready           14BH
  244. ; Note: most overlays will use ANI TBMT at MASKS.
  245. ; However, we don't bother with it here.  TESTS: will always return ready
  246. MASKS:  MVI     A,TBMT  ! RET   ;bit to test for send ready             14EH
  247. TESTS:  CPI     TBMT    ! RET   ;value of send bit when ready           151H
  248. ;
  249. ;
  250. ;
  251. IF MEXTWO
  252. ;
  253. DCDTST:    JMP DCDVEC        ;DATA CARIER DETECT             154H
  254. RNGDET:    JMP RNGVEC        ;RING DETECT VECTOR            157H
  255. DS    5
  256. ENDIF;MEXTWO
  257. ;
  258. ;
  259. IF MEXONE
  260. ;
  261. DS    11
  262. ENDIF;MEXONE
  263. ;
  264. DIALV:  DS      3               ;DIALV not done here (maybe MXO-SM)     162H
  265. SMDISC: DS      3               ; smartmodem overlay DISCV likewise 
  266.                 ; (dumb modem...now we do discon below)
  267. DISCV:  JMP    DISCON        ;here's where we goto on DSC cmd.
  268. GOODBV: JMP     GOODBY          ;                                       168H
  269. INMODV: JMP     NITMOD          ;go to user written routine             16BH
  270.         RET ! NOP ! NOP         ;NEWBDV                                 16EH
  271.         RET ! NOP ! NOP         ;NOPARV                                 171H
  272.         RET ! NOP ! NOP         ;PARITV                                 174H
  273. SETUPV: JMP     SETCMD          ;                                       177H
  274.         DS      3               ;not used by MEX                        17AH
  275. VERSNV: JMP     SYSVER          ;                                       17DH
  276. BREAKV: JMP     SBREAK          ;                                       180H
  277. ;
  278. ; Do not change the following six lines (they provide access to routines
  279. ; in MEX that are present to support MDM7 overlays -- they will likely
  280. ; be gone by MEX v2.0).
  281. ;
  282. ILPRTV: DS      3               ;                                       183H
  283. INBUFV  DS      3               ;                                       186H
  284. ILCMPV: DS      3               ;                                       189H
  285. INMDMV: DS      3               ;                                       18CH
  286.         DS      3               ;                                       18FH
  287. TIMERV  DS      3               ;                                       192H
  288. ;
  289. ;
  290. ;
  291. ; Routine to clear to end of screen.  If using CLREOS and CLRSCRN, set
  292. ; SCRTEST to YES at 010AH (above).
  293. ;
  294. ;
  295. CLREOS:         LXI     D,EOSMSG        ;                               195H
  296.                 MVI     C,PRINT
  297.                 CALL    MEX
  298.                 RET
  299. ;
  300. CLS:            LXI     D,CLSMSG        ;                               19EH
  301.                 MVI     C,PRINT
  302.                 CALL    MEX
  303.                 RET
  304. ;
  305. ;       End of fixed areas
  306. ;
  307. ;.....
  308.  
  309. ;
  310. ; LINE BELOW ADDED FOR MEX V1.24 
  311. ;
  312. IF MEXTWO
  313. ;
  314. ORG 200H    
  315. ;
  316. ;
  317. ENDIF;MEXTWO
  318. ;
  319. ;
  320. TELL:      MVI    C,ILP
  321.       CALL    MEX        ;Print current baud rate
  322.       DB    CR,LF,'Actual baud rate from Set-up B ',0
  323.       MVI    C,ILP
  324.       CALL    MEX
  325.       DB    CR,LF,'Apparent Baud rate is now: ',0
  326.       LDA    MSPEED
  327.       MVI    C,PRBAUD
  328.       CALL    MEX
  329.       RET
  330. ;
  331. ;
  332. ;
  333. ; Modem I/O primitive
  334. ;
  335. ; Subroutine to output a character to the modem.
  336. ; This routine does it's own status checking.
  337. ;
  338. OUTDP:  PUSH    B               ;save...
  339.         PUSH    D               ;...the...
  340.         PUSH    H               ;...registers.
  341.         MOV     E,A             ;move output byte into E
  342.         MVI     C,PUNCH         ;use the BDOS function
  343.         CALL    MEX             ;go
  344.         POP     H               ;restore...  
  345.         POP     D               ;...the...
  346.         POP     B               ;...registers.
  347.         RET
  348. ;.....
  349. ;
  350. ;
  351. ; Subroutine to input a character from the modem.
  352. ; This routine will not wait until one becomes available.
  353. ;
  354. INDP:   CALL INSP
  355.     JZ RETJNK
  356.     PUSH    B               ;save...
  357.         PUSH    D               ;...the...
  358.         PUSH    H               ;...regesters.
  359.         MVI     C,READER        ;use the BDOS function
  360.         CALL    MEX             ;go
  361.         POP     H               ;restore...
  362.         POP     D               ;...the...
  363.         POP     B               ;...registers.
  364.         RET
  365. ;
  366. ;
  367. RETJNK: MVI A,0            ;Return junk if not ready
  368.     RET            ; so we don't hang
  369. ;
  370. ;
  371. ; The Check for characters at COMM Port using I/O redirection
  372. ;
  373. INSP:   PUSH    B
  374.         PUSH    D
  375.         PUSH    H               ; save the environment
  376.         MVI     A,BATIO         ; change I/O byte
  377.         STA     IOBYTE
  378.         CALL    BCONST          ; call BIOS direct - see NITMOD
  379.         PUSH    A
  380.         LDA     SAVEIO          ; change I/O byte back
  381.         STA     IOBYTE
  382.         POP     A
  383.         POP     H               ; restore environment
  384.         POP     D
  385.         POP     B
  386.         RET
  387.  
  388. ;               
  389. NITMOD: LHLD    1               ; Get BIOS Jump-table adress
  390.         LXI     D,3
  391.         DAD     D               ; CONSTAT routine in BIOS
  392.         SHLD    BCONST+1        ; modify our "routine"
  393.         LDA     IOBYTE          ; Save I/O byte
  394.         STA     SAVEIO          ;
  395. ;
  396. ;
  397. SETCMD:      MVI    C,SBLANK    ;Any arguments?
  398.       CALL    MEX
  399.       JC    TELL        ;If not, go display baud
  400.       LXI    D,CMDTBL
  401.       MVI    C,LOOKUP
  402.       CALL    MEX        ;Parse argument
  403.       PUSH    H        ;Save any parsed argument addrs on stack
  404.       RNC            ;If we have one, return to it
  405.       POP    H        ;Oops, input not found in table
  406.       MVI    C,ILP
  407.       CALL    MEX        ;Tell user input not valid
  408.       DB    '++(Only 110,300,600,1200,2400,9600,19200 supported)++',CR,LF,0 
  409.       RET
  410. ;
  411. CMDTBL:      DB    '11','0'+80H
  412.       DW    OK110
  413.       ;
  414.       DB    '30','0'+80H
  415.       DW    OK300
  416.       ;
  417.       DB    '60','0'+80H
  418.       DW    OK600
  419.       ;
  420.       DB    '120','0'+80H
  421.       DW    OK1200
  422.       ;
  423.       DB    '240','0'+80H
  424.       DW    OK2400
  425.       ;                        
  426.       DB    '480','0'+80H
  427.       DW    OK4800
  428.       ;
  429.       DB    '960','0'+80H
  430.       DW    OK9600
  431.       ;
  432.       DB    '1920','0'+80H
  433.       DW    OK19200
  434.       ;
  435.       DB    0
  436. ;
  437. ;
  438. ;
  439. ;
  440. OK110      MVI    A,0
  441.       JMP     LOADBD
  442. ;
  443. OK300:      MVI    A,1
  444.       JMP   LOADBD
  445. ;
  446. OK600      MVI    A,3
  447.       JMP     LOADBD
  448. ;
  449. OK1200:      MVI    A,5
  450.       JMP    LOADBD
  451. ;
  452. OK2400:      MVI    A,6
  453.       JMP    LOADBD
  454. ;
  455. OK4800:      MVI    A,7
  456.       JMP    LOADBD
  457. ;
  458. OK9600:      MVI    A,8
  459.       JMP    LOADBD
  460. ;
  461. OK19200:  MVI    A,9
  462. ;
  463. LOADBD:     STA MSPEED
  464.      RET             ; area for code to set actual baud rate
  465.                 ; if overlay can be hacked to use
  466.                 ; programmable port such as general purpose
  467.                 ; port
  468. ;
  469. NEWBAUD:  CPI    1
  470.       JZ    OK300
  471.       CPI    5
  472.       JZ    OK1200
  473.       CPI    6
  474.       JZ    OK2400
  475.       CPI    7
  476.       JZ    OK4800
  477.       CPI    8
  478.       JZ    OK9600
  479.       CPI    9
  480.       JZ    OK19200
  481.       RET
  482. ;
  483. ;
  484. BCONST: JMP     $-$             ; address "filled in" by above code
  485. ;
  486. ;
  487. IF MEXTWO
  488. ;
  489. ;
  490. DCDVEC:        IN 059H
  491.         ;BIT 7,A     --Z80 only instruction
  492.         DB 0CBH,07FH     
  493.         JNZ RETYES    ; THIS USES DSR TO DETECT CARRIER 
  494.         MVI  A,0
  495.         RET        ; RETURN 0FFH IF CARRIER
  496.                 ; RETURN 0 NO CARRIER
  497.                 ; RETURN 0FFE IF OVERLAY DOESN'T KNOW
  498.  
  499. RNGVEC:        IN 088H
  500.         ;BIT 3,A     --Z80 only instruction
  501.         DB 0CBH,05FH
  502.         JNZ RETYES    ; 
  503.         MVI  A,0
  504.         RET        ; RETURN 0FFH IF RING DETECTED
  505.                 ; RETURN 0 NO RING
  506.                 ; RETURN 0FFE IF OVERLAY DOESN'T KNOW
  507.  
  508. RETYES:        MVI A,0FFH    ; YES YOU HAVE IT... 
  509.         RET
  510. ;
  511. ;
  512. ENDIF;MEXTWO
  513. ;
  514. SBREAK:
  515. ;pbausl EQU     90H     ;The Baud-Rate register.
  516. prntst  EQU     49H     ;Printer
  517. ;prndat EQU     48H
  518. contst  EQU     41H     ;Console
  519. ;condat EQU     40H
  520. gentst  EQU     51H     ;General port.
  521. ;gendat EQU     50H
  522. comtst  EQU     59H     ;COMM-Port
  523. ;comdat EQU     58H
  524. ;output EQU     01H     ;Output ready bit.
  525. ;input  EQU     02H     ;Input ready bit.
  526. comctl  equ     59h             ;VT180 communications port
  527. crtctl  equ     41h             ;VT180 crt port
  528. ;VT180 serial port command bits
  529. txe     equ     1               ;transmit enable
  530. dtr     equ     2               ;dtr on
  531. rxe     equ     4               ;rx enable
  532. sndbrk  equ     0Ah        ;dtr and break...
  533. rerr    equ     10h             ;reset error
  534. rts     equ     20h             ;RTS on
  535. reset   equ     40h             ;port reset
  536. NODTR    EQU    14H
  537. ;
  538. ;send break to comm port
  539. ;
  540.         lxi     h,38500         ;250 ms(?)
  541.         mvi     a,comctl        ;Get address of selected port
  542.         mov     c,a             ;Into C
  543.         mvi     a,sndbrk
  544. ;       OUT     C,A             ;Want to send to port addressed by C
  545.         db      0EDH,079H       ;Op code for above instruction
  546. sndbrk1:dcx     h               ;timing loop...
  547.         mov     a,l
  548.         ora     h
  549.         jnz     sndbrk1          ;...until over
  550.         mvi     a,comctl        ;Get the address for the port
  551.         mov     c,a             ;Into C
  552.         mvi     a,txe+dtr+rxe+rerr+rts  ;enable tr/rc, dtr, reset error
  553. ;       out     c,a             ;Z-80 only instruction
  554.         db      0EDH,079H       ;Op code for above instruction
  555.         out     contst          ;reset ports
  556.         ret
  557.  
  558. ;
  559. ; DISCONNECT ROUTINE
  560. ;
  561. DISCON:    lxi     h,38500         ;250 ms(?)
  562.         mvi     a,comctl        ;Get address of selected port
  563.         mov     c,a             ;Into C
  564.         mvi     a,NODTR
  565. ;       OUT     C,A             ;Want to send to port addressed by C
  566.         db      0EDH,079H       ;Op code for above instruction
  567. DISCON1:dcx     h               ;timing loop...
  568.         mov     a,l
  569.         ora     h
  570.         jnz     DISCON1          ;...until over
  571.         mvi     a,comctl        ;Get the address for the port
  572.         mov     c,a             ;Into C
  573.         mvi     a,txe+dtr+rxe+rerr+rts  ;enable tr/rc, dtr, reset error
  574. ;       out     c,a             ;Z-80 only instruction
  575.         db      0EDH,079H       ;Op code for above instruction
  576.         out     contst          ;reset ports
  577.     RET        
  578. ;
  579. ;
  580. ;
  581. GOODBY:    RET 
  582. ;
  583. ;
  584. SYSVER: PUSH    B
  585.         PUSH    D
  586.         PUSH    H
  587.         LXI     D,DECMSG
  588.         MVI     C,PRINT
  589.         CALL    MEX
  590. SYSVE1: LXI     D,CRLF
  591.         MVI     C,PRINT
  592.         CALL    MEX
  593.         POP     H
  594.         POP     D
  595.         POP     B
  596.         RET
  597. ;
  598. ;       Miscellaneous storage
  599. ;
  600. SAVEIO: DB      0               ; Save the original IObyte here
  601. ;
  602. ;       Various text messages
  603. CLSMSG: DB      ESC,'[2J',ESC,'[H','$'
  604. EOSMSG: DB      ESC,'[0J','$'
  605. ;
  606. XSO     EQU     14                      ;"shift out" character
  607. XSI     EQU     15                      ;"shift in" character
  608. ;
  609. DECMSG: DB      'Version for: ',ESC,'[7m',ESC,')0'
  610.         DB      'd',XSO,'x',XSI
  611.         DB      'i',XSO,'x',XSI
  612.         DB      'g',XSO,'x',XSI
  613.         DB      'i',XSO,'x',XSI
  614.         DB      't',XSO,'x',XSI
  615.         DB      'a',XSO,'x',XSI
  616.         DB      'l',ESC,'[m '
  617.     DB    'Robin--VT180'
  618.     DB      '  Overlay V'
  619.         DB      REV/10+'0'
  620.         DB      '.'
  621.         DB      REV MOD 10+'0'
  622.         DB      '$'
  623. ;
  624. CRLF:   DB      CR,LF,'$'
  625. ;
  626. ;
  627. ;
  628. OVREND: EQU     $               ; See if it'll fit
  629.         IF OVREND / 0B00H
  630.         +++ VT180 OVERLAY TOO LARGE - OVREND >= 0B00H +++
  631.         ENDIF
  632. ;
  633. ;
  634.     END
  635.  
  636.  
  637.