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
/
QTERM
/
QT6-SB18.Z80
< prev
next >
Wrap
Text File
|
2000-06-30
|
9KB
|
411 lines
;
; QT-SB18.Z80 - Micromint SB180 overlay for QTERM 4.0a
; by Steven Gold
;
; This overlay file was modeled after the Micromint SB180 overlay
; for use with Term3. (See T3M-HI3.Z80 or T3M-HI2.Z80)
;
; I have also used structures from other modem overlays.
;
;
; The patch points indicated by the QTERM documentation have been
; worked into the overlay, some routines have been moved around to fit
; the QTERM architecture, and others have been deleted since they do
; not apply to the QTERM program.
;
; TO USE: First edit this file with your favorite ASCII editor, changing
; routines to conform to your hardware and changing
; equates to conform to your implementation selections.
; Then assemble with the SLR Systems SLR180 assembler and
; apply the overlay using MLOAD to the original .COM file
; to produce the patched .COM file.
;
; Note: While I admire David Goodenough's intentions with this software,
; expecting most users to make their own patches with DDT, SID, or
; whatever isn't exactly realistic. Hopefully, this overlay can be
; used as the basis for more and better overlays to QTERM. Feel free
; to fix and enhance as you wish!
;
;
; History:
;
; 03/22/89 - QT6-SB18 - David Goodenough supplied me with an other
; Steven Gold overlay that was done for the SB-180 by Willy Gonnason of
; the U. of Calgary Electrical Engineering Dept. I've used
; his code for the BAUDSET and MODSET routines.
;
; 03/20/89 - QT5-SB18 - I couldn't get the Baud Rates to change properly,
; Steven Gold they still need alittle work. When you enter a baud
; rate with code I have it messes-up the baudrate port.
; Still no support for 7E1 etc. Also I
; found out I was overwriting other code in certain places,
; the program was working so I hadn't thought to check
; before.
;
; 03/18/89 - QT4-SB18 - release version
;
; Note2: The changing of baud rates still does not seem to work properly
; and I still have not tried to set the port definitions for 7E1 etc.
;
; Note3: I use a terminal that emulates the Televideo 910 so I left the terminal
; portion alone.
;
; *************************************************************************
;
BELL: EQU 07h ;bell
CR: EQU 0Dh ;carriage return
ESC: EQU 1Bh ;escape
LF: EQU 0Ah ;line feed
BDOS: EQU 05H
;
YES: EQU 0FFh
NO: EQU 0
;
;
; Select one of the following for your computer board
;
CLK6 EQU NO ; Yes if using 6 MHz clock
CLK9 EQU YES ; Yes if using 9 MHz clock
Clk12 EQU NO ; Yes if using 12 MHz clock
;
;
;
; Values shown are for a HD64180
;
;
PRINTC: EQU 0109h ;QTERM print char routine address
;
cntla EQU 0 ; ASCI Control Register A Channel 0
cntlb EQU 2 ; ASCI Control Register B Channel 0
stat EQU 4 ; ASCI Status Register Channel 0
tdr EQU 6 ; ASCI Transmit Data Register Channel 0
rdr EQU 8 ; ASCI Receive Data Register Channel 0
CTS EQU 00100000B ; Clear-to-send input (pin 5)
DCD EQU 00000100B ; Data Carrier detect bit (pin 8)
RDRF EQU 10000000B ; RECEIVE DATA REGISTER FULL
TDRE EQU 00000010B ; TRANSMIT DATA REGISTER EMPTY
;
;
;
; Code begins here...
;
; Modem input status routine:
;
ORG 0110h
; Input status. Returns Z and A=0 if nothing waiting.
;
ISTAT: CALL IISTAT
AND RDRF
RET Z
LD A,0FFH
RET
;
;
; Read Modem character routine:
;
ORG 0120h
;
; Recieve a character
;
INP: CALL ISTAT
JR Z,INP
IN0 A,(rdr)
RET
;
; Modem output status routine:
;
ORG 0130h
; Output status. Returns Z and A=0 if not ready to send.
;
OSTAT: CALL IISTAT ; GET STATUS REG
AND TDRE
OST1: LD A,0FFH
OR A
RET
;
; Write Modem character routine:
;
ORG 0140h
;
OUTP: PUSH AF
CALL CKCTS ; check CTS
OUTP1: CALL OSTAT
JR Z,OUTP1
OUTP2: POP AF ; return point from "CTS false" delay
OUT0 (tdr),A
RET
;
;
; Start break routine:
;
ORG 0150h
STRBRK:
RET
;
; End Break routine:
;
ORG 0160h
ENDBRK:
RET
;
; Drop DTR routine:
;
ORG 0170h
;Turn DTR (and RTS) OFF. (set)
dtroff:
in0 a,(cntla)
or 10h ; RTS off
out0 (cntla),a
ret
;
; Restore DTR routine:
;
ORG 0180h
;Turn DTR (and RTS) ON. (reset)
dtron:
in0 a,(cntla)
and 0efh ; RTS on
out0 (cntla),a
ret
;
; Set Baud Rate routine:
;
;
ORG 190H ; set serial port baud rate
BAUDSET:
PUSH AF
LD A,(BAUDSTOR)
AND 11111000B
POP BC
OR A,B
OUT0 (cntlb),A ; set it...
LD (BAUDSTOR),A
RET
;
; Baud rate table:
;
ORG 01A0h
; Baud Rate Tables
;
if clk6
;
; HD64180 commands to set baud rates @ 6.144 MHz clock
;
BAUDTB:
DB 00,NO ;38,400 bps disabled
DB 01h,NO ;19,200 bps disabled
DB 02h,No ; 9,600 bps enabled
DB 03h,No ; 4,800 bps enabled
DB 04h,YES ; 2,400 bps enabled
DB 05h,YES ; 1,200 bps enabled
DB 06h,NO ; 600 bps enabled
DB 0dh,Yes ; 300 bps enabled
endif
if clk9
;
; HD64180 commands to set baud rates @ 9.216 MHz clock
;
BAUDTB:
DB 00,NO ;38,400 bps disabled
DB 20h,NO ;19,200 bps disabled
DB 21h,NO ; 9,600 bps enabled
DB 22h,NO ; 4,800 bps enabled
DB 23h,YES ; 2,400 bps enabled
DB 24h,YES ; 1,200 bps enabled
DB 25h,NO ; 600 bps enabled
DB 26h,YES ; 300 bps enabled
endif
if clk12
;
; HD64180 commands to set baud rates @ 12.288 MHz clock
;
BAUDTB:
DB 00,NO ;38,400 bps disabled
DB 02H,NO ;19,200 bps disabled
DB 03h,NO ; 9,600 bps enabled
DB 04h,NO ; 4,800 bps enabled
DB 05h,YES ; 2,400 bps enabled
DB 06h,YES ; 1,200 bps enabled
DB 0Dh,NO ; 600 bps enabled
DB 0Eh,YES ; 300 bps enabled
endif
;
; Communications mode setting routine:
;
;
ORG 1B0H
SETMOD: ; set communication mode
JP SETBAUDS ; not enough room here...
;
;
ORG 1C0H ; communication mode table
MODTBL:
DB 60H ; 7 N 1
DB 64H ; 8 N 1
DB 61H ; 7 N 2
DB 65H ; 8 N 2
DB 62H ; 7 E 1
DB 66H ; 8 E 1
DB 63H ; 7 E 2
DB 67H ; 8 E 2
DB 72H ; 7 O 1
DB 76H ; 8 O 1
DB 73H ; 7 O 2
DB 77H ; 8 O 2
; Protocal Transfer Size
;
ORG 01CDH
RET
;
; Processor speed
;
ORG 01CEh
;
IF CLK6
CPUSPD: DB 06H ; Clock speed in MHz
ENDIF ; CLK6
IF CLK9
CPUSPD: DB 09H ; Clock speed in MHz
ENDIF ; CLK9
IF CLK12
CPUSPD: DB 12H ; Clock speed in MHz
ENDIF ; CLK12
;
ESCHAR:
DB ESC ; escape/meta char to enable QTERM functions
;
; Signon message (max of 15 bytes plus NULL terminator byte):
;
ORG 01D0h
SIGNON:
DB 'Micromint SB180',0
;
; string to clear screen
;
ORG 01F0h
CLSCRN:
DB 'Z'-'@',0 ; Control-Z on my Wyse-60 terminal
;
; GOTOXY routine (to control cursor placement):
;
ORG 0200h
GOTOXY:
; RET
;
;
; Terminal capability bit map:
; these bits are set (1) if the terminal capability is present and
; reset (0) if it is not.
;
ORG 022Fh
TCBMAP:
DB 11111111b
; ||||||||
; |||||||------- bright (end highlight)
; ||||||-------- dim (start highlight)
; |||||--------- delete line
; ||||---------- insert line
; |||----------- delete character
; ||------------ insert character
; |------------- clear to end of line
; -------------- clear to end of screen
;
;
;
; Term Cap strings:
;
ORG 0230h
STHILT: DB ESC,'(',00h ; 8 bytes to define start hilite...
;
ORG 0238h
ENHILT: DB ESC,')',00h ; 8 bytes to define end hilite...
;
ORG 0240h
DELINE: DB ESC,'R',00h ; delete line
;
ORG 0248h
INSLIN: DB ESC,'E',00h ; insert line
;
ORG 0250h
DELCHR: DB ESC,'W',00h ; delete char
;
ORG 0258h
INSCHR: DB ESC,'Q',00h ; insert char
;
ORG 0260h
CLREOL: DB ESC,'T',00h ; clear to EOL
;
ORG 0268h
CLREOS: DB ESC,'Y',00h ; clear to end of screen
;
;
; Entry subroutine
;
ORG 0270H
ENTER:
RET
;
; Exit subroutine
;
ORG 0273H
EXIT:
RET
;
;
; End of QTERM defined patches.
;
; begin custom patch area:
;
ORG 0276h
;
; Read stat twice, as per Hitachi manual
;
IISTAT: IN0 A,(stat)
IN0 A,(stat)
OR A
RET
;
; Check state of CTS* and return A=0 and Z if CTS is true.
;
CKCTS: IN0 A,(cntlb)
AND CTS
RET Z
LD A,0FFh
RET
;
SETBAUDS:
PUSH AF
LD A,(BAUDSTOR)
POP BC
PUSH BC
BIT 4,B
SET 4,A
JR NZ,NORST
RES 4,A
NORST:
OUT0 (cntlb),A ;set even/odd
LD (BAUDSTOR),A
POP AF
RES 4,A ;bring up DTR
OUT0 (cntla),A ;set parity/noparity
RET
BAUDSTOR:
DB 0 ; storage for current baud rate.
RET
;
; Custom patch area must end *PRIOR* to 0300h!!!!!
;
END