2019-10-01 20:58:48 +02:00
|
|
|
|
; QT2014.Z - QTerm patch for RC2014 with VT 100 terminal
|
|
|
|
|
;
|
|
|
|
|
; September 2019, Anna Christina Nass
|
|
|
|
|
; based on IMSAI8080 patch: September 2019, Udo Munk
|
|
|
|
|
;
|
|
|
|
|
.var SIOC 0x82 ;sio control port (2nd port)
|
|
|
|
|
.var SIOD 0x83 ;sio data port (2nd port)
|
|
|
|
|
.var SDEV 1 ;RomWBW device number
|
|
|
|
|
;.var SIOC 0x84 ;sio control port (3rd port)
|
|
|
|
|
;.var SIOD 0x85 ;sio data port (3rd port)
|
|
|
|
|
;.var SDEV 2 ;RomWBW device number
|
|
|
|
|
|
|
|
|
|
.var RXRDY 1 ;receiver ready
|
|
|
|
|
.var TXRDY 4 ;transmitter ready
|
|
|
|
|
|
|
|
|
|
.org 0x0110 ; modem input status
|
|
|
|
|
modist: in a,(SIOC)
|
|
|
|
|
and RXRDY
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
.org 0x0120 ; modem input
|
|
|
|
|
modin: in a,(SIOD)
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
.org 0x0130 ; modem output status
|
|
|
|
|
modost: in a,(SIOC)
|
|
|
|
|
and TXRDY
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
.org 0x0140 ; modem output
|
|
|
|
|
modout: out (SIOD),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 <return>
|
|
|
|
|
|
|
|
|
|
.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 'RC2014 SIO/2 - 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
|
2020-06-16 11:12:16 +02:00
|
|
|
|
;brites: db '\e[1m\0' ;bright
|
|
|
|
|
brites: db '\0' ;bright
|
2019-10-01 20:58:48 +02:00
|
|
|
|
|
|
|
|
|
.org 0x0238
|
2020-06-16 11:12:16 +02:00
|
|
|
|
;dims: db '\e[0m\0' ;dim
|
|
|
|
|
dims: db '\0' ;dim
|
2019-10-01 20:58:48 +02:00
|
|
|
|
|
|
|
|
|
.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
|
|
|
|
|
init: ld hl,SIOINI
|
|
|
|
|
ld B,9
|
|
|
|
|
ld C,SIOC
|
|
|
|
|
otir
|
|
|
|
|
ret
|
|
|
|
|
SIOINI: db 0b00011000 ; Wr0 Channel reset
|
|
|
|
|
db 0b00010100 ; Wr0 Pointer R4 + reset ex st int
|
|
|
|
|
db 0b11000100 ; Wr4 /64, async mode, no parity
|
|
|
|
|
db 0b00000011 ; Wr0 Pointer R3
|
|
|
|
|
db 0b11000001 ; Wr3 Receive enable, 8 bit
|
|
|
|
|
db 0b00000101 ; Wr0 Pointer R5
|
|
|
|
|
db 0b11101010 ; Wr5 Transmit enable, 8 bit, flow ctrl
|
|
|
|
|
db 0b00010001 ; Wr0 Pointer R1 + reset ex st int
|
|
|
|
|
db 0b00000000 ; Wr1 No Tx interrupts
|
|
|
|
|
uninit: ld B,4 ; HBIOS CIOINIT function 0x04
|
|
|
|
|
ld C,SDEV ; device number (0,1,2,3)
|
|
|
|
|
ld DE,-1 ; "Reset with current settings"
|
|
|
|
|
rst 8 ; do it
|
|
|
|
|
ret ; not initialized, so no un-initialize
|
|
|
|
|
|
2020-06-16 11:12:16 +02:00
|
|
|
|
|