251 lines
3.9 KiB
Plaintext
251 lines
3.9 KiB
Plaintext
; QT-ADM40.Z - QTERM patch for the Coleco ADAM, w/ 40 columns
|
||
|
||
.var no 0
|
||
.var yes ! no
|
||
|
||
.var datap 0x44 ; data port (in/out)
|
||
.var statp 0x45 ; status port (in)
|
||
.var contlp 0x47 ; control port (out)
|
||
.var baudrp 0x46 ; baud rate port (out)
|
||
.var inmsk 2 ; 8251 RxRDY
|
||
.var outmsk 1 ; 8251 TxRDY
|
||
.var chipset 0x37 ; 8251 RTS,ER,RxE,DTR,TxEN
|
||
.var chipoff 0x35 ; 8251 RTS,ER,RxE,TxEN (no dtr)
|
||
.var break chipset | 8 ; chipset OR send break
|
||
.var freeze 0x22
|
||
.var reset 0x27
|
||
|
||
; Misc variables
|
||
|
||
.var scrout 0x0109 ; output char in <C> (QTERM)
|
||
.var decout 0x010c ; output decimal value in <HL> (QTERM)
|
||
|
||
; Modem input status. 110h-11fh.
|
||
|
||
.org 0x0110
|
||
istat: in a,(statp)
|
||
and inmsk
|
||
ret
|
||
|
||
; Read modem character. 120h-12fh.
|
||
|
||
.org 0x0120
|
||
idata: in a,(datap)
|
||
ret
|
||
|
||
; Modem output status. 130h-13fh.
|
||
|
||
.org 0x0130
|
||
ostat: in a,(statp)
|
||
and outmsk
|
||
ret
|
||
|
||
; Write modem character. 140h-14fh.
|
||
|
||
.org 0x0140
|
||
odata: out (datap),a
|
||
ret
|
||
|
||
; Break. Start break 150h-15fh; end break 160-16fh.
|
||
|
||
.org 0x0150
|
||
brkon: ld a,break
|
||
out (contlp),a
|
||
ret
|
||
|
||
.org 0x0160
|
||
brkoff: ld a,chipset
|
||
out (contlp),a
|
||
ret
|
||
|
||
; Dtr. Drop dtr 170h-17fh; restore dtr 180h-18fh.
|
||
|
||
.org 0x0170
|
||
dtroff: ld a,chipoff
|
||
out (contlp),a
|
||
ret
|
||
|
||
.org 0x0180
|
||
dtron: ld a,chipset
|
||
out (contlp),a
|
||
ret
|
||
|
||
; Baud rate. Routine 190h-19fh; table 1a0h-1afh.
|
||
|
||
.org 0x0190
|
||
brset:
|
||
jp finbd
|
||
|
||
.org 0x01a0
|
||
brtbl:
|
||
b38400: db 0,no ; 38400
|
||
b19200: db 0x3f,yes ; 19200
|
||
b9600: db 0x3e,yes ; 9600
|
||
b4800: db 0x3c,yes ; 4800
|
||
b2400: db 0x3a,yes ; 2400
|
||
b1200: db 0x37,yes ; 1200
|
||
b600: db 0x36,yes ; 600
|
||
b300: db 0x35,yes ; 300
|
||
|
||
; Mode. Routine 1b0h-1bfh.
|
||
|
||
.org 0x01b0
|
||
modset: jp finmod
|
||
|
||
; Mode. Table 1c0h-1cbh. 8251 mode byte, sets stop bits, parity,
|
||
|
||
.org 0x01c0
|
||
modtbl:
|
||
n71: db 0b01001010 ; 7n1 ; this table must be
|
||
n81: db 0b01001110 ; 8n1 ; exactly 12 bytes long
|
||
n72: db 0b11001010 ; 7n2
|
||
n82: db 0b11001110 ; 8n2
|
||
e71: db 0b01111010 ; 7e1
|
||
e81: db 0b01111110 ; 8e1
|
||
e72: db 0b11111010 ; 7e2
|
||
e82: db 0b11111110 ; 8e2
|
||
o71: db 0b01011010 ; 7o1
|
||
o81: db 0b01011110 ; 8o1
|
||
o72: db 0b11011010 ; 7o2
|
||
o82: db 0b11011110 ; 8o2
|
||
|
||
; Miscellaneous one byte values.
|
||
|
||
.org 0x01cc
|
||
db 0 ; reserved for future use
|
||
|
||
.org 0x01cd
|
||
db 8 ; 1cdh - size of xfer buffer
|
||
|
||
.org 0x01ce
|
||
db 4 ; 1ceh - cpu clock speed
|
||
|
||
.org 0x01cf
|
||
db '\e' ; 1cfh - escape character
|
||
|
||
; Signon message. 1d0h-1efh
|
||
|
||
.org 0x01d0
|
||
db '\ex9\nColeco ADAM 40 Col W/-RS232\0'
|
||
|
||
; Clear screen string
|
||
|
||
.org 0x01f0
|
||
db 'z' & 0x1f, 0
|
||
|
||
; Moveto - move the cursor
|
||
|
||
.org 0x0200
|
||
moveto: push hl ; save row,col
|
||
ld c,'\e' ; send escape
|
||
call scrout
|
||
ld c,'=' ; send =
|
||
call scrout
|
||
pop hl ; get row,col
|
||
ld de,0x2020 ; add offset
|
||
add hl,de
|
||
push hl ; and save
|
||
ld c,h ; send row+offset
|
||
call scrout
|
||
pop bc ; get col+offset
|
||
jp scrout ; send
|
||
|
||
; tcbits - what terminal capabilities are present
|
||
|
||
.org 0x022f
|
||
db 0xff
|
||
|
||
.org 0x0230
|
||
db '\eq\0'
|
||
|
||
.org 0x0238
|
||
db '\ep\0'
|
||
|
||
.org 0x0240
|
||
db '\eM\0'
|
||
|
||
.org 0x0248
|
||
db '\eL\0'
|
||
|
||
.org 0x0250
|
||
db 0x97,0
|
||
|
||
.org 0x0258
|
||
db 0x94,0
|
||
|
||
.org 0x0260
|
||
db '\eK\0'
|
||
|
||
.org 0x0268
|
||
db '\eJ\0'
|
||
|
||
.org 0x0270
|
||
jp entry
|
||
|
||
.org 0x0273
|
||
jp exit
|
||
|
||
.org 0x0276
|
||
ret
|
||
|
||
.org 0x0279
|
||
ret
|
||
|
||
.org 0x0280
|
||
finbd:
|
||
ld b,a
|
||
in a,(baudrp)
|
||
ld c,a
|
||
in a,(baudrp)
|
||
ld a,freeze
|
||
out (contlp),a
|
||
ld a,c
|
||
out (baudrp),a
|
||
ld a,b
|
||
out (baudrp),a
|
||
ld a,reset
|
||
out (contlp),a
|
||
ret
|
||
|
||
finmod:
|
||
ld b,a
|
||
in a,(baudrp)
|
||
in a,(baudrp)
|
||
ld c,a
|
||
ld a,freeze
|
||
out (contlp),a
|
||
ld a,b
|
||
out (baudrp),a
|
||
ld a,c
|
||
out (baudrp),a
|
||
ld a,reset
|
||
out (contlp),a
|
||
ret
|
||
|
||
entry:
|
||
ld e,0x1a
|
||
ld c,2
|
||
call 5
|
||
in a,(baudrp)
|
||
ld b,a
|
||
in a,(baudrp)
|
||
ld a,b
|
||
or a
|
||
ret nz
|
||
ld a,0x4e
|
||
call 0x01b0
|
||
ld a,0x37
|
||
call 0x0190
|
||
ret
|
||
|
||
exit:
|
||
ld e,0x19
|
||
ld c,2
|
||
call 5
|
||
ld c,9
|
||
ld de,exitstr
|
||
jp 5
|
||
|
||
exitstr:
|
||
db 'z' & 0x1f, '\ey9$'
|
||
|