A2osX/SYS/KERNEL.S.TERM.txt

1281 lines
22 KiB
Plaintext
Raw Normal View History

2018-12-11 16:41:25 +00:00
NEW
PREFIX
AUTO 4,1
*--------------------------------------
CURSOR.BLINK.SPEED .EQ 2
*--------------------------------------
2018-12-14 16:19:05 +00:00
.DUMMY
.OR ZPDRV
ZPIOCTL .BS 2
ZPDCBPtr .BS 2
ZPBufPtr .BS 2
ZPCount .BS 2
ZPBufBaseL1 .BS 2
ZPBufBaseL2 .BS 2
ZPScrBaseL1 .BS 2
ZPScrBaseL2 .BS 2
ZPTmpWord .BS 2
ZPTmpBool .BS 1
2018-12-15 20:34:55 +00:00
*--------------------------------------
bActive .BS 1
bCsiInNum .BS 1
CsiParamCnt .BS 1
CsiParams .BS 4
2018-12-14 16:19:05 +00:00
.ED
2018-12-11 16:41:25 +00:00
*--------------------------------------
DRV.TERM cld
2018-12-14 16:19:05 +00:00
jmp (.1,x)
.1 .DA DRV.TERM.STATUS
2018-12-11 16:41:25 +00:00
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA A2osX.BADCALL
.DA DRV.TERM.CONTROL
.DA A2osX.BADCALL
.DA DRV.TERM.OPEN
.DA DRV.TERM.CLOSE
.DA DRV.TERM.READ
.DA DRV.TERM.WRITE
*--------------------------------------
2018-12-14 16:19:05 +00:00
DRV.TERM.STATUS >STYA ZPIOCTL
2018-12-15 20:34:55 +00:00
jsr DRV.TERM.GetIOCTLBuf
2018-12-12 16:32:33 +00:00
ldy #S.IOCTL.STATCODE
2018-12-11 16:41:25 +00:00
lda (ZPIOCTL),y
beq .1
cmp #S.IOCTL.STATCODE.GETDIB
bne .9
2018-12-12 16:32:33 +00:00
ldy #S.DIB-1
2018-12-11 16:41:25 +00:00
.HS 2C bit abs
2018-12-12 16:32:33 +00:00
.1 ldy #3
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
.2 lda DRV.TERM.DIB,y
2018-12-14 07:32:20 +00:00
.3 sta (ZPBufPtr),y
2018-12-12 16:32:33 +00:00
dey
bne .2
2018-12-11 16:41:25 +00:00
2018-12-14 16:19:05 +00:00
jsr DRV.TERM.GetDCB
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.STATUS
lda (ZPDCBPtr),y
2018-12-14 07:32:20 +00:00
sta (ZPBufPtr)
2018-12-11 16:41:25 +00:00
clc
rts
.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
2018-12-14 16:19:05 +00:00
DRV.TERM.OPEN ldx #0 DEV.ID in A
2018-12-11 16:41:25 +00:00
.1 ldy A2osX.SCRNDEVS,x
beq .2
inx
cpx #K.SCR.MAX
bne .1
lda #E.OOH
sec
rts
.9 lda #MLI.E.OPEN
sec
rts
2018-12-15 20:34:55 +00:00
.2 sta A2osX.SCRNDEVS,x
pha
2018-12-14 16:19:05 +00:00
jsr DRV.TERM.GetDCB
pla
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.DEVID
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.STATUS
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bit #S.DIB.S.OPENED
bne .9
ora #S.DIB.S.OPENED
ora DRV.TERM.DIB+S.DIB.S
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
jsr RESET
*--------------------------------------
DRV.TERM.CONTROL
sta SETTEXT
2018-12-14 07:32:20 +00:00
2018-12-14 16:19:05 +00:00
jsr DRV.TERM.GetDCB
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.DEVID
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
sta A2osX.ASCREEN
2018-12-14 16:19:05 +00:00
jsr DRV.TERM.SCRCPY
2018-12-11 16:41:25 +00:00
clc
rts
*--------------------------------------
2018-12-14 16:19:05 +00:00
DRV.TERM.CLOSE jsr DRV.TERM.GetDCB
ldy #S.DCB.TTY.STATUS
2018-12-13 16:39:24 +00:00
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bit #S.DIB.S.OPENED
beq .9
lda DRV.TERM.DIB+S.DIB.S
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
ldx #0
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.DEVID
2018-12-12 16:32:33 +00:00
2018-12-11 16:41:25 +00:00
.1 lda A2osX.SCRNDEVS,x
2018-12-13 16:39:24 +00:00
cmp (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bne .2
stz A2osX.SCRNDEVS,x
.2 inx
cpx #K.SCR.MAX
bne .1
clc
rts
2018-12-14 16:19:05 +00:00
.9 lda #MLI.E.IO
2018-12-11 16:41:25 +00:00
sec
rts
*--------------------------------------
2018-12-14 16:19:05 +00:00
DRV.TERM.READ >STYA ZPIOCTL
2018-12-15 20:34:55 +00:00
jsr DRV.TERM.GetIOCTLBufAndCnt
2018-12-11 16:41:25 +00:00
2018-12-14 16:19:05 +00:00
jsr DRV.TERM.GetDCB
jsr DRV.TERM.GetActive
bit bActive is screen active?
bpl .6 no....go check flush...
2018-12-11 16:41:25 +00:00
lda A2osX.TIMER16
and #CURSOR.BLINK.SPEED
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bCURON
eor (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
beq .1
2018-12-15 20:34:55 +00:00
2018-12-11 16:41:25 +00:00
jsr CURBLNK
.1 lda OPENAPPLE
bmi .6 Open apple key, not for us...
lda KBD
bpl .6
sta KBDSTROBE
and #$7F
2018-12-15 20:34:55 +00:00
2018-12-11 16:41:25 +00:00
ldx KeyRemapped
.2 cmp KeyRemapped,x
beq .3
dex
bne .2
jsr Char.Out.Put no remap....send char....
bra .7 and flush
.3 lda KeyRemappedIdx,x
2018-12-15 20:34:55 +00:00
tax
2018-12-11 16:41:25 +00:00
2018-12-15 20:34:55 +00:00
.4 lda KeyRemappedTbl,x
2018-12-11 16:41:25 +00:00
beq .7 end of remap....flush
jsr Char.Out.Put
2018-12-15 20:34:55 +00:00
inx
2018-12-11 16:41:25 +00:00
bra .4
2018-12-15 20:34:55 +00:00
.6 ldy #S.DCB.TTY.OUTTAIL
2018-12-13 16:39:24 +00:00
lda (ZPDCBPtr),y
2018-12-15 20:34:55 +00:00
iny
cmp (ZPDCBPtr),y OUTHEAD
2018-12-13 16:39:24 +00:00
2018-12-11 16:41:25 +00:00
beq .9 no char in output buffer...
.7 stz .8+1
.70 inc ZPCount
bne .71
inc ZPCount+1
beq .8
.71 jsr Char.Out.Get
bcs .8
ldy .8+1
sta (ZPBufPtr),y
iny
sty .8+1
bra .70
.8 lda #$ff SELF MODIFIED
ldy #S.IOCTL.BYTECNT
sta (ZPIOCTL),y
iny
lda #0
sta (ZPIOCTL),y
clc
rts
.9 lda #0 Error = char
sec
rts
*--------------------------------------
2018-12-14 16:19:05 +00:00
DRV.TERM.WRITE >STYA ZPIOCTL
2018-12-15 20:34:55 +00:00
jsr DRV.TERM.GetIOCTLBufAndCnt
2018-12-14 16:19:05 +00:00
jsr DRV.TERM.GetDCB
jsr DRV.TERM.GetActive
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
.1 inc ZPCount
bne .2
2018-12-11 16:41:25 +00:00
inc ZPCount+1
beq .8
2018-12-15 20:34:55 +00:00
.2 ldy #S.DCB.TTY.MODE
2018-12-13 16:39:24 +00:00
lda (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
tax
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
jsr .3
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
inc ZPBufPtr
bne .1
inc ZPBufPtr+1
bra .1
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
.3 jmp (.4,x)
.4 .DA DRV.TERM.COUT
.DA DRV.TERM.ESC
.DA DRV.TERM.CSI
.DA DRV.TERM.IAC
2018-12-11 16:41:25 +00:00
.8 clc
rts
*--------------------------------------
2018-12-12 16:32:33 +00:00
DRV.TERM.COUT lda (ZPBufPtr)
cmp #IAC
2018-12-11 16:41:25 +00:00
bne .1
2018-12-12 16:32:33 +00:00
2018-12-13 16:39:24 +00:00
lda #S.DCB.TTY.MODE.IAC
sta (ZPDCBPtr),y
ldy #S.DCB.TTY.INBUFFER
lda #S.DCB.TTY.INBUFFER
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
.1 pha
jsr CUROFF
pla
cmp #C.DEL
beq DEL
cmp #C.SPACE
bcc COUT.Ctrl
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bINVERSE
ora (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
jsr SetCharAtCurPos
*--------------------------------------
2018-12-13 16:39:24 +00:00
FS ldy #S.DCB.TTY.CH
lda (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
cmp #79
2018-12-11 16:41:25 +00:00
bne .1
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bLINEWRAP
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bpl FS.8
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CH
2018-12-12 16:32:33 +00:00
lda #0
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
2018-12-11 16:41:25 +00:00
jmp LF
2018-12-12 16:32:33 +00:00
.1 inc
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
FS.8 clc
rts
*--------------------------------------
2018-12-13 16:39:24 +00:00
DEL ldy #S.DCB.TTY.CH
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
beq .1
2018-12-12 16:32:33 +00:00
dec
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bra .3
2018-12-13 16:39:24 +00:00
.1 iny S.DCB.TTY.CV
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
beq FS.8
2018-12-12 16:32:33 +00:00
dec
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
dey
2018-12-11 16:41:25 +00:00
lda #79
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y S.DCB.TTY.CH
2018-12-11 16:41:25 +00:00
.3 lda #$20
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bINVERSE
ora (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
jmp SetCharAtCurPos
*--------------------------------------
COUT.Ctrl ldx #CtrlChars.Cnt-1
.1 cmp CtrlChars,x
beq .2
dex
bpl .1
clc
rts
.2 txa
asl
tax
jmp (J.CtrlChars,x)
*--------------------------------------
2018-12-12 16:32:33 +00:00
DRV.TERM.ESC lda (ZPBufPtr)
2018-12-11 16:41:25 +00:00
cmp #'['
bne .1
2018-12-13 16:39:24 +00:00
lda #S.DCB.TTY.MODE.CSI
sta (ZPDCBPtr),y
ldy #S.DCB.TTY.INBUFFER
lda #S.DCB.TTY.INBUFFER
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
2018-12-15 20:34:55 +00:00
.1 lda #0 y = #S.DCB.TTY.MODE
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
ldx #EscCodes.Cnt-1
2018-12-15 20:34:55 +00:00
lda (ZPBufPtr)
2018-12-11 16:41:25 +00:00
.2 cmp EscCodes,x
beq .3
dex
bpl .2
clc
rts
.3 txa
asl
tax
2018-12-15 20:34:55 +00:00
jmp (.4,x)
.4 .DA Scroll.Dn M
2018-12-11 16:41:25 +00:00
.DA Scroll.Up D
.DA RESET c
*--------------------------------------
2018-12-13 16:39:24 +00:00
DRV.TERM.CSI ldy #S.DCB.TTY.INBUFFER
lda (ZPDCBPtr),y
inc
sta (ZPDCBPtr),y
tay
2018-12-12 16:32:33 +00:00
lda (ZPBufPtr)
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
cmp #64 End of Seq ?
2018-12-15 20:34:55 +00:00
bcs DRV.TERM.CSI.Exec
2018-12-12 16:32:33 +00:00
2018-12-13 16:39:24 +00:00
cpy #S.DCB.TTY.INBUFFER.MAX-1 buffer full?
2018-12-12 16:32:33 +00:00
bne .8
lda #0
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.MODE
sta (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
.8 clc
2018-12-11 16:41:25 +00:00
rts
2018-12-15 20:34:55 +00:00
DRV.TERM.CSI.Exec
stz CsiParamCnt
stz bCsiInNum
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.INBUFFER EscSeq Ptr
2018-12-11 16:41:25 +00:00
.10 stz ZPTmpWord
stz ZPTmpWord+1
2018-12-13 16:39:24 +00:00
.1 iny
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
cmp #'0'
bcc .2
cmp #'9'+1
bcs .2
2018-12-15 20:34:55 +00:00
dec bCsiInNum
2018-12-11 16:41:25 +00:00
and #$0F
pha
2018-12-15 20:34:55 +00:00
2018-12-11 16:41:25 +00:00
lda ZPTmpWord
2018-12-15 20:34:55 +00:00
ldx ZPTmpWord+1
2018-12-11 16:41:25 +00:00
asl ZPTmpWord param=param*10
rol ZPTmpWord+1
asl ZPTmpWord
rol ZPTmpWord+1
2018-12-15 20:34:55 +00:00
2018-12-11 16:41:25 +00:00
clc
adc ZPTmpWord
sta ZPTmpWord
2018-12-15 20:34:55 +00:00
txa
2018-12-11 16:41:25 +00:00
adc ZPTmpWord+1
sta ZPTmpWord+1
asl ZPTmpWord
rol ZPTmpWord+1
pla
clc
adc ZPTmpWord
sta ZPTmpWord
bcc .1
inc ZPTmpWord+1
bra .1
2018-12-15 20:34:55 +00:00
.2 bit bCsiInNum
2018-12-11 16:41:25 +00:00
bpl .3
2018-12-15 20:34:55 +00:00
stz bCsiInNum
2018-12-11 16:41:25 +00:00
lda #255
2018-12-13 16:39:24 +00:00
ldx ZPTmpWord+1
2018-12-11 16:41:25 +00:00
bne .21
lda ZPTmpWord
2018-12-15 20:34:55 +00:00
.21 ldx CsiParamCnt
sta CsiParams,x
inc CsiParamCnt
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
.3 lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
cmp #';'
beq .10
2018-12-15 20:34:55 +00:00
pha
2018-12-12 16:32:33 +00:00
lda #0
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.MODE
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
2018-12-15 20:34:55 +00:00
pla
ldx #CsiCodes.Cnt-1
2018-12-11 16:41:25 +00:00
2018-12-15 20:34:55 +00:00
.4 cmp CsiCodes,x
2018-12-11 16:41:25 +00:00
beq .5
dex
bne .4
clc
rts
.5 txa
asl
tax
2018-12-15 20:34:55 +00:00
jmp (.8,x)
.8 .DA Csi.LWEnable h
.DA Csi.LWDisable l
.DA Csi.DispAttr m
.DA Csi.Query n
.DA Csi.Scroll r
.DA Csi.Erase K
.DA Csi.Home H
*--------------------------------------
Csi.LWEnable sec
.HS 90 BCC
*--------------------------------------
Csi.LWDisable clc
ldx CsiParamCnt
beq .8
dex
bne .8
lda CsiParams
eor #7
bne .8
ror
ldy #S.DCB.TTY.bLINEWRAP
sta (ZPDCBPtr),y
.8 clc
rts
2018-12-11 16:41:25 +00:00
*--------------------------------------
2018-12-15 20:34:55 +00:00
Csi.DispAttr ldx CsiParamCnt
beq .8
.1 lda CsiParams-1,x
bne .2
jsr RESETATTR
bra .7
.2 eor #7
bne .8
ldy #S.DCB.TTY.bINVERSE
sta (ZPDCBPtr),y
.7 dex
bne .1
.8 clc
rts
*--------------------------------------
Csi.Query ldx CsiParamCnt
beq .8
dex
bne .8
lda CsiParams
cmp #6
bne .8
lda #C.ESC
jsr Char.Out.Put
lda #'['
jsr Char.Out.Put
ldy #S.DCB.TTY.CV
lda (ZPDCBPtr),y
inc
jsr Decimal.Out
lda #';'
jsr Char.Out.Put
ldy #S.DCB.TTY.CH
lda (ZPDCBPtr),y
inc
jsr Decimal.Out
lda #'R'
jsr Char.Out.Put
.8 clc
rts
*--------------------------------------
Csi.Scroll ldy CsiParamCnt
bne .1
lda #0
ldx #23
bra .8
.1 cpy #2
bne .9
lda CsiParams
dec
ldx CsiParams+1
dex
.8 ldy #S.DCB.TTY.SCROLLTOP
sta (ZPDCBPtr),y
iny S.DCB.TTY.SCROLLBOT
txa
sta (ZPDCBPtr),y
.9 clc
rts
*--------------------------------------
Csi.Erase ldx CsiParamCnt
bne .1
jmp CLREOL
.1 lda CsiParams
cmp #1
bne .2
jmp CLRSOL
.2 cmp #2
bne .9
jmp CLRLINE
.9 clc
rts
*--------------------------------------
Csi.Home lda CsiParamCnt
bne .1
ldy #S.DCB.TTY.CH
sta (ZPDCBPtr),y
iny
sta (ZPDCBPtr),y
clc
rts
.1 ldx #1
lda CsiParams
beq .2
ldx #24
cmp #24
bcs .2
tax
.2 dex
txa
ldy #S.DCB.TTY.CV
sta (ZPDCBPtr),y
dec CsiParamCnt
beq .8
ldx #1
lda CsiParams+1
beq .3
ldx #80
cmp #80
bcs .3
tax
.3 dex
txa
ldy #S.DCB.TTY.CH
sta (ZPDCBPtr),y
.8 clc
rts
2018-12-11 16:41:25 +00:00
*--------------------------------------
2018-12-13 16:39:24 +00:00
DRV.TERM.IAC ldy #S.DCB.TTY.INBUFFER
lda (ZPDCBPtr),y
inc
sta (ZPDCBPtr),y
tay
2018-12-12 16:32:33 +00:00
lda (ZPBufPtr)
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
cpy #S.DCB.TTY.INBUFFER+1 CMD ?
2018-12-11 16:41:25 +00:00
beq .8 yes, wait for additional bytes
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.INBUFFER+1
lda (ZPDCBPtr),y get back CMD
cmp #SB
2018-12-11 16:41:25 +00:00
bne .1 not a SB/SE....stop with CMD/SUBCMD
2018-12-13 16:39:24 +00:00
lda (ZPBufPtr)
2018-12-11 16:41:25 +00:00
cmp #SE
bne .8 wait for ending SE....keep bIACMode
2018-12-13 16:39:24 +00:00
.1 cmp #IAC
2018-12-11 16:41:25 +00:00
beq .9
sec
sbc #SB
bcc .9
asl
tax
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.INBUFFER+2
lda (ZPDCBPtr),y Get SUBCMD in A
2018-12-11 16:41:25 +00:00
cpx #10
bcs *
jmp (J.COUT.IAC.CMDS,x)
2018-12-12 16:32:33 +00:00
.9 bra RESET.MODE
2018-12-11 16:41:25 +00:00
.8 clc
rts
*--------------------------------------
J.COUT.IAC.CMDS .DA COUT.IAC.SB
.DA COUT.IAC.WILL
.DA COUT.IAC.WONT
.DA COUT.IAC.DO
.DA COUT.IAC.DONT
*--------------------------------------
COUT.IAC.SB cmp #TELOPT.TTYPE
bne .9
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.INBUFFER+2
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
cmp #SB.SEND
bne .9
2018-12-15 20:34:55 +00:00
ldx #0
2018-12-11 16:41:25 +00:00
2018-12-15 20:34:55 +00:00
.1 lda SB.IS.TTYPE,x
2018-12-11 16:41:25 +00:00
jsr Char.Out.Put
2018-12-15 20:34:55 +00:00
inx
cpx #SB.IS.TTYPE.LEN
2018-12-11 16:41:25 +00:00
bne .1
2018-12-12 16:32:33 +00:00
.9 bra RESET.MODE
2018-12-11 16:41:25 +00:00
*--------------------------------------
COUT.IAC.WILL ldx #WILLDO.CNT-1
.1 cmp WILLDO,x
beq .7
dex
bpl .1
ldx #WILLDONT.CNT-1
.2 cmp WILLDONT,x
beq .8
dex
bpl .2
bra .9
.7 ldx #DO
.HS 2C BIT ABS
.8 ldx #DONT
bra COUT.IAC.SendAX
2018-12-12 16:32:33 +00:00
.9 bra RESET.MODE
2018-12-11 16:41:25 +00:00
*--------------------------------------
COUT.IAC.WONT
2018-12-12 16:32:33 +00:00
bra RESET.MODE
2018-12-11 16:41:25 +00:00
*--------------------------------------
COUT.IAC.DO ldx #DOWILL.CNT-1
.1 cmp DOWILL,x
beq .7
dex
bpl .1
ldx #DOWONT.CNT-1
.2 cmp DOWONT,x
beq .8
dex
bpl .2
bra COUT.IAC.SendAX.9
.7 ldx #WILL
.HS 2C BIT ABS
.8 ldx #WONT
*--------------------------------------
COUT.IAC.SendAX
pha push CMD
phx
lda #IAC
jsr Char.Out.Put
pla
jsr Char.Out.Put
pla
jsr Char.Out.Put
COUT.IAC.SendAX.9
2018-12-12 16:32:33 +00:00
bra RESET.MODE
2018-12-11 16:41:25 +00:00
*--------------------------------------
COUT.IAC.DONT
2018-12-12 16:32:33 +00:00
bra RESET.MODE
*--------------------------------------
RESET.MODE lda #0
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.MODE
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
*--------------------------------------
2018-12-12 16:32:33 +00:00
RESET jsr RESET.MODE
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.OUTTAIL
sta (ZPDCBPtr),y
iny
sta (ZPDCBPtr),y
ldy #S.DCB.TTY.bCURON
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
dec
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bLINEWRAP
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
lda #0
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.SCROLLTOP
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
iny
2018-12-11 16:41:25 +00:00
lda #23
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
2018-12-15 20:34:55 +00:00
lda #S.DCB.TTY.OUTBUFFER
ldy #S.DCB.TTY.OUTTAIL
sta (ZPDCBPtr),y
iny
sta (ZPDCBPtr),y
2018-12-14 16:19:05 +00:00
jsr DRV.TERM.CLRSCR
2018-12-11 16:41:25 +00:00
*--------------------------------------
RESETATTR lda #$80
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bINVERSE
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
*--------------------------------------
2018-12-12 16:32:33 +00:00
J.CtrlChars .DA ENQ 5
.DA BS 8
.DA LF 10
2018-12-14 16:19:05 +00:00
.DA DRV.TERM.CLRSCR 12
2018-12-12 16:32:33 +00:00
.DA CROUT 13
.DA FS 21
.DA ESC 27
2018-12-11 16:41:25 +00:00
*--------------------------------------
2018-12-15 20:34:55 +00:00
ENQ ldx #0
2018-12-11 16:41:25 +00:00
2018-12-15 20:34:55 +00:00
.1 lda ENQ.String,x
2018-12-11 16:41:25 +00:00
beq .8
jsr Char.Out.Put
2018-12-15 20:34:55 +00:00
inx
2018-12-11 16:41:25 +00:00
bne .1
.8 clc
rts
*--------------------------------------
2018-12-13 16:39:24 +00:00
BS ldy #S.DCB.TTY.CH
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
beq .1
2018-12-12 16:32:33 +00:00
dec
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
2018-12-13 16:39:24 +00:00
.1 ldy #S.DCB.TTY.CV
lda (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
beq .2
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
dec
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-12 07:05:29 +00:00
2018-12-12 16:32:33 +00:00
lda #79
2018-12-12 07:05:29 +00:00
dey
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-12 07:05:29 +00:00
2018-12-12 16:32:33 +00:00
.2 clc
rts
2018-12-11 16:41:25 +00:00
*--------------------------------------
2018-12-12 16:32:33 +00:00
CROUT lda #0
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CH
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
*--------------------------------------
2018-12-13 16:39:24 +00:00
LF ldy #S.DCB.TTY.CV
lda (ZPDCBPtr),y
ldy #S.DCB.TTY.SCROLLBOT
cmp (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
beq SCROLL.UP
2018-12-12 16:32:33 +00:00
inc
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CV
sta (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
clc
rts
*--------------------------------------
2018-12-13 16:39:24 +00:00
ESC lda #S.DCB.TTY.MODE.ESC
ldy #S.DCB.TTY.MODE
2018-12-12 16:32:33 +00:00
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
*--------------------------------------
2018-12-13 16:39:24 +00:00
SCROLL.UP ldy #S.DCB.TTY.SCROLLTOP
lda (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
tax
2018-12-11 16:41:25 +00:00
2018-12-15 20:34:55 +00:00
.1 jsr DRV.TERM.SETUP.L1X
2018-12-11 16:41:25 +00:00
inx
jsr COPY.XtoL1
2018-12-12 16:32:33 +00:00
txa
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.SCROLLBOT
cmp (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bne .1
*--------------------------------------
2018-12-13 16:39:24 +00:00
CLREOL ldy #S.DCB.TTY.CH
lda (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
tay Start
2018-12-11 16:41:25 +00:00
ldx #80 End
bra CLR
CLRLINE ldy #0 Start
ldx #80 End
bra CLR
2018-12-12 16:32:33 +00:00
CLRSOL ldy #0
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CH
lda (ZPDCBPtr),y Start
2018-12-12 16:32:33 +00:00
tax End
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
CLR stx .3+1 Save End
2018-12-11 16:41:25 +00:00
phy
2018-12-12 16:32:33 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CV
lda (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
tax
ply
.1 phy
lda #" "
2018-12-11 16:41:25 +00:00
jsr SetCharAtYX X unmodified
2018-12-12 16:32:33 +00:00
2018-12-11 16:41:25 +00:00
ply
iny
2018-12-12 16:32:33 +00:00
.3 cpy #$ff Self Modified
2018-12-11 16:41:25 +00:00
bne .1
clc
rts
*--------------------------------------
2018-12-13 16:39:24 +00:00
SCROLL.DN ldy #S.DCB.TTY.SCROLLBOT
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
2018-12-12 16:32:33 +00:00
tax
2018-12-15 20:34:55 +00:00
.1 jsr DRV.TERM.SETUP.L1X
2018-12-11 16:41:25 +00:00
dex
jsr COPY.XtoL1
2018-12-12 16:32:33 +00:00
txa
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.SCROLLTOP
cmp (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bne .1
clc
rts
*--------------------------------------
2018-12-13 16:39:24 +00:00
CUROFF ldy #S.DCB.TTY.bCURON
lda (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
2018-12-11 16:41:25 +00:00
beq CUREXIT.RTS
2018-12-12 16:32:33 +00:00
CURBLNK bit bActive
2018-12-15 20:34:55 +00:00
bmi CURBLNK1
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bCURON
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bne CURBLNK.OFF
rts do not Light if screen is not active
2018-12-13 16:39:24 +00:00
CURBLNK1 ldy #S.DCB.TTY.bCURON
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
bne CURBLNK.OFF
jsr GetCharAtCurPos
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CURCHAR
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
and #$80
eor #" "
bra CUREXIT
2018-12-13 16:39:24 +00:00
CURBLNK.OFF ldy #S.DCB.TTY.CURCHAR
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
CUREXIT jsr SetCharAtCurPos
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bCURON
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
eor #CURSOR.BLINK.SPEED
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
CUREXIT.RTS rts
*--------------------------------------
Decimal.Out stz ZPTmpWord
stz ZPTmpWord+1
ldx #8
sed
tay
.1 tya
asl
tay
lda ZPTmpWord
adc ZPTmpWord
sta ZPTmpWord
lda ZPTmpWord+1
adc ZPTmpWord+1
sta ZPTmpWord+1
dex
bne .1
cld
stz ZPTmpBool No leading 0
lda ZPTmpWord+1
and #$0f
beq .2
dec ZPTmpBool non zero, print everything
jsr Char.Out.Put30
.2 lda ZPTmpWord
lsr
lsr
lsr
lsr
bne .3
bit ZPTmpBool Print this digit ?
bpl .4
.3 jsr Char.Out.Put30
.4 lda ZPTmpWord
and #$0f
*--------------------------------------
Char.Out.Put30 ora #$30
2018-12-13 16:39:24 +00:00
2018-12-15 20:34:55 +00:00
Char.Out.Put pha save char
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.OUTHEAD
lda (ZPDCBPtr),y
2018-12-15 20:34:55 +00:00
pha save actual HEAD
2018-12-13 16:39:24 +00:00
inc
cmp #S.DCB.TTY.OUTBUFFER.MAX
bne .1
lda #S.DCB.TTY.OUTBUFFER
2018-12-15 20:34:55 +00:00
.1 dey OUTTAIL
2018-12-13 16:39:24 +00:00
2018-12-15 20:34:55 +00:00
cmp (ZPDCBPtr),y HEAD+1 = TAIL ?
2018-12-13 16:39:24 +00:00
beq .9 CS, full!
iny
sta (ZPDCBPtr),y new head
ply old head
pla
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
2018-12-13 16:39:24 +00:00
rts
.9 pla
2018-12-11 16:41:25 +00:00
pla
rts
*--------------------------------------
2018-12-15 20:34:55 +00:00
Char.Out.Get ldy #S.DCB.TTY.OUTTAIL
2018-12-13 16:39:24 +00:00
lda (ZPDCBPtr),y
2018-12-15 20:34:55 +00:00
iny OUTHEAD
2018-12-13 16:39:24 +00:00
cmp (ZPDCBPtr),y
beq .9 CS
tay
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
pha
2018-12-13 16:39:24 +00:00
tya
2018-12-11 16:41:25 +00:00
inc
2018-12-13 16:39:24 +00:00
cmp #S.DCB.TTY.OUTBUFFER.MAX
bne .1
lda #S.DCB.TTY.OUTBUFFER
.1 ldy #S.DCB.TTY.OUTTAIL
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
pla
clc
2018-12-13 16:39:24 +00:00
2018-12-11 16:41:25 +00:00
.9 rts
*--------------------------------------
2018-12-14 16:19:05 +00:00
DRV.TERM.GetDCB ldy #S.FD.DEV.DCBPTR
lda (pFD),y
sta ZPDCBPtr
2018-12-11 16:41:25 +00:00
iny
2018-12-14 16:19:05 +00:00
lda (pFD),y
sta ZPDCBPtr+1
rts
*--------------------------------------
DRV.TERM.GetActive
ldy #S.DCB.TTY.DEVID
lda (ZPDCBPtr),y
cmp A2osX.ASCREEN
beq .1 CS
clc
.1 ror bActive
rts
*--------------------------------------
2018-12-15 20:34:55 +00:00
DRV.TERM.GetIOCTLBufAndCnt
2018-12-14 16:19:05 +00:00
ldy #S.IOCTL.BYTECNT
2018-12-11 16:41:25 +00:00
lda (ZPIOCTL),y
eor #$ff
sta ZPCount
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount+1
2018-12-14 16:19:05 +00:00
2018-12-15 20:34:55 +00:00
DRV.TERM.GetIOCTLBuf
ldy #S.IOCTL.BUFPTR
2018-12-14 16:19:05 +00:00
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
2018-12-11 16:41:25 +00:00
rts
2018-12-14 16:19:05 +00:00
*--------------------------------------
2018-12-15 20:34:55 +00:00
DRV.TERM.SETUP.L1X
2018-12-14 07:32:20 +00:00
ldy #S.FD.DEV.BUFPTR
2018-12-15 20:34:55 +00:00
lda (pFD),y
clc
adc BUF.BASEL,x
2018-12-14 07:32:20 +00:00
sta ZPBufBaseL1
iny
2018-12-15 20:34:55 +00:00
lda (pFD),y
adc BUF.BASEH,x
2018-12-14 07:32:20 +00:00
sta ZPBufBaseL1+1
bit bActive
bpl .8
lda SCR.BASEL,x
sta ZPScrBaseL1
lda SCR.BASEH,x
sta ZPScrBaseL1+1
.8 rts
*--------------------------------------
2018-12-11 16:41:25 +00:00
SCR.BASEL .HS 00.80.00.80.00.80.00.80.28.A8.28.A8.28.A8.28.A8.50.D0.50.D0.50.D0.50.D0
SCR.BASEH .HS 04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07.04.04.05.05.06.06.07.07
*--------------------------------------
2018-12-13 16:39:24 +00:00
BUF.BASEL .DA #S.TTYBUF.SCRBUF
.DA #S.TTYBUF.SCRBUF+80
.DA #S.TTYBUF.SCRBUF+160
.DA #S.TTYBUF.SCRBUF+240
.DA #S.TTYBUF.SCRBUF+320
.DA #S.TTYBUF.SCRBUF+400
.DA #S.TTYBUF.SCRBUF+480
.DA #S.TTYBUF.SCRBUF+560
.DA #S.TTYBUF.SCRBUF+640
.DA #S.TTYBUF.SCRBUF+720
.DA #S.TTYBUF.SCRBUF+800
.DA #S.TTYBUF.SCRBUF+880
.DA #S.TTYBUF.SCRBUF+960
.DA #S.TTYBUF.SCRBUF+1040
.DA #S.TTYBUF.SCRBUF+1120
.DA #S.TTYBUF.SCRBUF+1200
.DA #S.TTYBUF.SCRBUF+1280
.DA #S.TTYBUF.SCRBUF+1360
.DA #S.TTYBUF.SCRBUF+1440
.DA #S.TTYBUF.SCRBUF+1520
.DA #S.TTYBUF.SCRBUF+1600
.DA #S.TTYBUF.SCRBUF+1680
.DA #S.TTYBUF.SCRBUF+1760
.DA #S.TTYBUF.SCRBUF+1840
BUF.BASEH .DA /S.TTYBUF.SCRBUF
.DA /S.TTYBUF.SCRBUF+80
.DA /S.TTYBUF.SCRBUF+160
.DA /S.TTYBUF.SCRBUF+240
.DA /S.TTYBUF.SCRBUF+320
.DA /S.TTYBUF.SCRBUF+400
.DA /S.TTYBUF.SCRBUF+480
.DA /S.TTYBUF.SCRBUF+560
.DA /S.TTYBUF.SCRBUF+640
.DA /S.TTYBUF.SCRBUF+720
.DA /S.TTYBUF.SCRBUF+800
.DA /S.TTYBUF.SCRBUF+880
.DA /S.TTYBUF.SCRBUF+960
.DA /S.TTYBUF.SCRBUF+1040
.DA /S.TTYBUF.SCRBUF+1120
.DA /S.TTYBUF.SCRBUF+1200
.DA /S.TTYBUF.SCRBUF+1280
.DA /S.TTYBUF.SCRBUF+1360
.DA /S.TTYBUF.SCRBUF+1440
.DA /S.TTYBUF.SCRBUF+1520
.DA /S.TTYBUF.SCRBUF+1600
.DA /S.TTYBUF.SCRBUF+1680
.DA /S.TTYBUF.SCRBUF+1760
.DA /S.TTYBUF.SCRBUF+1840
2018-12-11 16:41:25 +00:00
*--------------------------------------
CtrlChars .HS 05080A0C0D151B
CtrlChars.Cnt .EQ *-CtrlChars
*--------------------------------------
EscCodes .AZ "MDc"
EscCodes.Cnt .EQ *-EscCodes
2018-12-15 20:34:55 +00:00
CsiCodes .AS "hlmnrKH"
CsiCodes.Cnt .EQ *-CsiCodes
2018-12-11 16:41:25 +00:00
ENQ.String .AZ "XTERM"
*--------------------------------------
KeyRemapped .HS 05080A0B0D15 L,D,U,CR,R
KeyRemappedIdx .HS 050004080C0F
KeyRemappedTbl .EQ *
KeyRemappedLEFT .HS 1B5B4400 esc[D
KeyRemappedDOWN .HS 1B5B4200 esc[B
KeyRemappedUP .HS 1B5B4100 esc[A
KeyRemappedCR .HS 0D0A00 crlf
KeyRemappedRGHT .HS 1B5B4300 esc[C
*--------------------------------------
WILLDO .DA #TELOPT.BINARY,#TELOPT.SGA
WILLDO.CNT .EQ *-WILLDO
WILLDONT .DA #TELOPT.TSPEED,#TELOPT.LINEMODE,#TELOPT.STATUS
WILLDONT.CNT .EQ *-WILLDONT
DOWILL .DA #TELOPT.BINARY,#TELOPT.SGA,#TELOPT.TTYPE,#TELOPT.NAWS
DOWILL.CNT .EQ *-DOWILL
DOWONT .DA #TELOPT.ECHO,#TELOPT.NEWENVIRON,#TELOPT.XDISPLOC,#TELOPT.TSPEED,#TELOPT.LFLOW
DOWONT.CNT .EQ *-DOWONT
SB.IS.TTYPE .DA #IAC,#SB,#TELOPT.TTYPE,#SB.IS
.AS 'XTERM'
.DA #IAC,#SE
SB.IS.TTYPE.LEN .EQ *-SB.IS.TTYPE
SB.IS.NAWS .DA #IAC,#SB,#TELOPT.NAWS,#SB.IS
.DA 80
.DA 24
.DA #IAC,#SE
SB.IS.NAWS.LEN .EQ *-SB.IS.NAWS
*--------------------------------------
DRV.TERM.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ
.DA #0,#0,#0
>PSTR "A2osX VT100 TERM"
.DA #S.DIB.T.CHAR
.DA #0
.DA K.VER
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.TERM
LOAD USR/SRC/SYS/KERNEL.S
ASM