diff --git a/README.md b/README.md index fd1ef98..24d4eac 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,26 @@ Direct download: The patch file is ```QT-CPM3.Z```. +### RomWBW HBIOS patch + +This patch has been provided by Paul Wrightson. + +It uses direct RomWBW HBIOS calls for talking to the serial port, so it is also independant of the type of serial chip. + +The patch ```QT-HB_1.Z``` uses RomWBW device 1 (ie. the second serial port), the patch ```QT-HB_2.Z``` uses device 2 (third serial port). +So this should be equivalent to the ```QTERM82.COM``` and ```QTERM84.COM``` versions for SIO/2. + +If another serial device needs to be used, just change the variable ```DEVICE``` at the beginning of the patch file and assemble it as shown below. + +As this uses the RomWBW drivers, RTS/CTS signals should also be used automatically. + +Using this QTERM version, it should be possible to use other serial chips than SIO/2 on CP/M 2.2, as long as RomWBW is used. + +Direct download: + +* [QTERMH1.COM](qtermh1.com) - RomWBW device 1 +* [QTERMH2.COM](qtermh2.com) - RomWBW device 2 + ## Technical details ### Files diff --git a/qt-hb_1.z b/qt-hb_1.z new file mode 100644 index 0000000..fa3b9f2 --- /dev/null +++ b/qt-hb_1.z @@ -0,0 +1,176 @@ +; QTROMWBW.Z - QTerm patch for RC2014 and RomWBW with VT 100 terminal +; +; July 2020, Paul Wrightson. Convert to use ROMWBW API +; September 2019, Anna Christina Nass +; based on IMSAI8080 patch: September 2019, Udo Munk +; + +.var DEVICE 0x01 ; HBIOS device to use +.var CIOIN 0x00 +.var CIOOUT 0x01 +.var CIOIST 0x02 +.var CIOOST 0x03 +.var CIOINIT 0x04 + +.org 0x0110 ; modem input status +modist: ld B,CIOIST ; HBIOS CIOOUT function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + rst 8 ; do it, result in A + ret + +.org 0x0120 ; modem input +modin: ld B,CIOIN ; HBIOS CIOIN function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + rst 8 ; do it, result in E, status in A + ld A,E ; put received char in A + ret + +.org 0x0130 ; modem output status +modost: ld B,CIOOST ; HBIOS CIOOUT function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + rst 8 ; do it, result in A + ret + +.org 0x0140 ; modem output +modout: ld B,CIOOUT ; HBIOS CIOOUT function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + ld E,A ; put char in E + rst 8 ; do it, result in A + ret + +.org 0x0150 ; start break +sbreak: ret + +.org 0x0160 ; stop break +ebreak: ret + +.org 0x0170 ; drop DTR +dtroff: ret + db 0x0c ;length of modem hang up string + db 0xfe,0xfe ;two delays + db 0x2b,0x2b,0x2b ;+++ + db 0xfe,0xfe ;two delays + db 'ATH0',0x0d ;ATH0 + +.org 0x0180 ; restore DTR +dtron: ret + +.org 0x0190 ; set baud rate +setbd: ret + +.org 0x01a0 ; baud rate table +baudtb: + db 0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0 + +.org 0x01b0 ; set communication mode +setmod: ret + +.org 0x01c0 ; communication mode table +modetb: + db 0,0,0,0,0,0,0,0 + db 0,0,0,0 + +.org 0x01cc +resrvd: db 0 ; reserved for later use + +.org 0x01cd ; protocol transfer size +xfersz: db 8 + +.org 0x01ce ; processor speed +speed: db 8 ; cpu speed in Mhz; + +.org 0x01cf ; escape character +escape: db 0x19 ; 0x19: ^Y + +.org 0x01d0 ; signon message +signon: db 'RomWBW HBIOS - VT100\0' + +.org 0x01f0 ; clear screen +clrs: db '\e[2J' + db '\e[1;1H\0' + +.var scrout 0x0109 ; print character in C +.var decout 0x010c ; print string of value in HL + +.org 0x0200 ; moveto routine +moveto: push HL + ld C,'\e' + call scrout + ld C,'[' + call scrout + pop HL + push HL + ld L,H + ld H,00 + inc L + call decout + ld C,';' + call scrout + pop HL + ld H,00 + inc L + call decout + ld C,'H' + jp scrout + +.org 0x022f +tcbits: db 0b11000011 ;terminal capabilities + +.org 0x0230 +;brites: db '\e[1m\0' ;bright +brites: db '\0' ;bright + +.org 0x0238 +;dims: db '\e[0m\0' ;dim +dims: db '\0' ;dim + +.org 0x0240 +dlstr: db '\0' ;delete line + +.org 0x0248 +ilstr: db '\0' ;insert line + +.org 0x0250 +dcstr: db '\0' ;Delete character + +.org 0x0258 +icstr: db '\0' ;Insert character + +.org 0x0260 +ceol: db '\e[K\0' ;Clear to end of line + +.org 0x0268 +ceos: db '\e[J\0' ;Clear to end of screen + +.org 0x0270 ;entry subroutine +entry: jp init + +.org 0x0273 ;exit subroutine +exit: jp uninit + +.org 0x0276 ;user subroutine +user: ret + +.org 0x0279 ;keyboard map subroutine +kbmap: ret + +.org 0x0280 ; user patch area +; PUT RomWBW UNIT # here +device: db DEVICE + +; INITIALIZE RomWBW SERIAL DEVICE +init: ; ret ; Initialize. fall through to re-initialize. + +; RE-INITIALIZE RomWBW SERIAL DEVICE +uninit: ld B,CIOINIT ; HBIOS CIOINIT function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + ld DE,-1 ; "Reset with current settings" + rst 8 ; do it + ret ; not initialized, so no un-initialize + diff --git a/qt-hb_2.z b/qt-hb_2.z new file mode 100644 index 0000000..5732d88 --- /dev/null +++ b/qt-hb_2.z @@ -0,0 +1,176 @@ +; QTROMWBW.Z - QTerm patch for RC2014 and RomWBW with VT 100 terminal +; +; July 2020, Paul Wrightson. Convert to use ROMWBW API +; September 2019, Anna Christina Nass +; based on IMSAI8080 patch: September 2019, Udo Munk +; + +.var DEVICE 0x02 ; HBIOS device to use +.var CIOIN 0x00 +.var CIOOUT 0x01 +.var CIOIST 0x02 +.var CIOOST 0x03 +.var CIOINIT 0x04 + +.org 0x0110 ; modem input status +modist: ld B,CIOIST ; HBIOS CIOOUT function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + rst 8 ; do it, result in A + ret + +.org 0x0120 ; modem input +modin: ld B,CIOIN ; HBIOS CIOIN function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + rst 8 ; do it, result in E, status in A + ld A,E ; put received char in A + ret + +.org 0x0130 ; modem output status +modost: ld B,CIOOST ; HBIOS CIOOUT function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + rst 8 ; do it, result in A + ret + +.org 0x0140 ; modem output +modout: ld B,CIOOUT ; HBIOS CIOOUT function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + ld E,A ; put char in E + rst 8 ; do it, result in A + ret + +.org 0x0150 ; start break +sbreak: ret + +.org 0x0160 ; stop break +ebreak: ret + +.org 0x0170 ; drop DTR +dtroff: ret + db 0x0c ;length of modem hang up string + db 0xfe,0xfe ;two delays + db 0x2b,0x2b,0x2b ;+++ + db 0xfe,0xfe ;two delays + db 'ATH0',0x0d ;ATH0 + +.org 0x0180 ; restore DTR +dtron: ret + +.org 0x0190 ; set baud rate +setbd: ret + +.org 0x01a0 ; baud rate table +baudtb: + db 0,0,0,0,0,0,0,0 + db 0,0,0,0,0,0,0,0 + +.org 0x01b0 ; set communication mode +setmod: ret + +.org 0x01c0 ; communication mode table +modetb: + db 0,0,0,0,0,0,0,0 + db 0,0,0,0 + +.org 0x01cc +resrvd: db 0 ; reserved for later use + +.org 0x01cd ; protocol transfer size +xfersz: db 8 + +.org 0x01ce ; processor speed +speed: db 8 ; cpu speed in Mhz; + +.org 0x01cf ; escape character +escape: db 0x19 ; 0x19: ^Y + +.org 0x01d0 ; signon message +signon: db 'RomWBW HBIOS - VT100\0' + +.org 0x01f0 ; clear screen +clrs: db '\e[2J' + db '\e[1;1H\0' + +.var scrout 0x0109 ; print character in C +.var decout 0x010c ; print string of value in HL + +.org 0x0200 ; moveto routine +moveto: push HL + ld C,'\e' + call scrout + ld C,'[' + call scrout + pop HL + push HL + ld L,H + ld H,00 + inc L + call decout + ld C,';' + call scrout + pop HL + ld H,00 + inc L + call decout + ld C,'H' + jp scrout + +.org 0x022f +tcbits: db 0b11000011 ;terminal capabilities + +.org 0x0230 +;brites: db '\e[1m\0' ;bright +brites: db '\0' ;bright + +.org 0x0238 +;dims: db '\e[0m\0' ;dim +dims: db '\0' ;dim + +.org 0x0240 +dlstr: db '\0' ;delete line + +.org 0x0248 +ilstr: db '\0' ;insert line + +.org 0x0250 +dcstr: db '\0' ;Delete character + +.org 0x0258 +icstr: db '\0' ;Insert character + +.org 0x0260 +ceol: db '\e[K\0' ;Clear to end of line + +.org 0x0268 +ceos: db '\e[J\0' ;Clear to end of screen + +.org 0x0270 ;entry subroutine +entry: jp init + +.org 0x0273 ;exit subroutine +exit: jp uninit + +.org 0x0276 ;user subroutine +user: ret + +.org 0x0279 ;keyboard map subroutine +kbmap: ret + +.org 0x0280 ; user patch area +; PUT RomWBW UNIT # here +device: db DEVICE + +; INITIALIZE RomWBW SERIAL DEVICE +init: ; ret ; Initialize. fall through to re-initialize. + +; RE-INITIALIZE RomWBW SERIAL DEVICE +uninit: ld B,CIOINIT ; HBIOS CIOINIT function + ld HL,device + ld C,(HL) ; device number (0,1,2,3) + ld DE,-1 ; "Reset with current settings" + rst 8 ; do it + ret ; not initialized, so no un-initialize + diff --git a/qtermh1.com b/qtermh1.com new file mode 100644 index 0000000..71136b9 Binary files /dev/null and b/qtermh1.com differ diff --git a/qtermh2.com b/qtermh2.com new file mode 100644 index 0000000..dd95d8b Binary files /dev/null and b/qtermh2.com differ