A2osX/SYS/KERNEL.S.TERM.txt

1222 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
*--------------------------------------
ZPIOCTL .EQ ZPDRV
2018-12-13 16:39:24 +00:00
ZPDCBPtr .EQ ZPDRV+2
2018-12-12 16:32:33 +00:00
ZPTTYBufPtr .EQ ZPDRV+4
ZPBufPtr .EQ ZPDRV+10
ZPCount .EQ ZPDRV+12
ZPBufBaseL1 .EQ ZPDRV+14
ZPBufBaseL2 .EQ ZPDRV+16
ZPScrBaseL1 .EQ ZPDRV+18
ZPScrBaseL2 .EQ ZPDRV+20
ZPTmpWord .EQ ZPDRV+22
ZPTmpBool .EQ ZPDRV+24
2018-12-11 16:41:25 +00:00
*--------------------------------------
DRV.TERM cld
>STYA pIOCTL
ldy #S.FD.DEV.BUFPTR
lda (pFD),y
2018-12-13 16:39:24 +00:00
sta ZPDCBPtr
2018-12-11 16:41:25 +00:00
iny
lda (pFD),y
2018-12-13 16:39:24 +00:00
sta ZPDCBPtr+1
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.DEVID
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
cmp A2osX.ASCREEN
beq .1 CS
clc
.1 ror bActive
jmp (.8,x)
.8 .DA DRV.TERM.STATUS
.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-12 16:32:33 +00:00
DRV.TERM.STATUS ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
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
.3 sta (ZPBufPtr),y SELF MODIFIED
dey
bne .2
2018-12-11 16:41:25 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.STATUS
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
.9 lda #MLI.E.BADCTL
sec
rts
*--------------------------------------
DRV.TERM.OPEN ldx #0
.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
.2 sta A2osX.SCRNDEVS,x DEV.ID in A
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
sta SETALTCHAR
sta SET80DISP
sta CLR80STORE
sta CLRPAGE2
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
clc
rts
*--------------------------------------
2018-12-13 16:39:24 +00:00
DRV.TERM.CLOSE ldy #S.DCB.TTY.STATUS
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
.9 lda MLI.E.IO
sec
rts
*--------------------------------------
2018-12-12 16:32:33 +00:00
DRV.TERM.READ 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-12 16:32:33 +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
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
tay
.4 lda KeyRemappedTbl,y
beq .7 end of remap....flush
jsr Char.Out.Put
iny
bra .4
2018-12-13 16:39:24 +00:00
.6 ldy #S.DCB.TTY.OUTHEAD
lda (ZPDCBPtr),y
dey OUTTAIL
cmp (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
beq .9 no char in output buffer...
.7 stz .8+1
jsr GetPtrsAndCnt
.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
*--------------------------------------
DRV.TERM.WRITE jsr GetPtrsAndCnt
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-13 16:39:24 +00:00
.2 ldy #S.DCB.TTY.MODE
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-12 16:32:33 +00:00
.1 lda #0
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
ldx #EscCodes.Cnt-1
.2 cmp EscCodes,x
beq .3
dex
bpl .2
clc
rts
.3 txa
asl
tax
jmp (J.EscCodes,x)
*--------------------------------------
J.EscCodes .DA Scroll.Dn M
.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 ?
bcs COUT.ExecEscSeq
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
COUT.ExecEscSeq stz EscSeqParamCnt
stz bEscSeqInNum
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.INBUFFER EscSeq Ptr
lda (ZPDCBPtr),y
tay
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
dec bEscSeqInNum
and #$0F
pha
lda ZPTmpWord
ldy ZPTmpWord+1
asl ZPTmpWord param=param*10
rol ZPTmpWord+1
asl ZPTmpWord
rol ZPTmpWord+1
clc
adc ZPTmpWord
sta ZPTmpWord
tya
adc ZPTmpWord+1
sta ZPTmpWord+1
asl ZPTmpWord
rol ZPTmpWord+1
pla
clc
adc ZPTmpWord
sta ZPTmpWord
bcc .1
inc ZPTmpWord+1
bra .1
.2 bit bEscSeqInNum
bpl .3
stz bEscSeqInNum
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-13 16:39:24 +00:00
.21 ldx EscSeqParamCnt
sta EscSeqParam,x
2018-12-11 16:41:25 +00:00
inc EscSeqParamCnt
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-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
ldx #EscSeqCmds.Cnt-1
.4 cmp EscSeqCmds,x
beq .5
dex
bne .4
clc
rts
.5 txa
asl
tax
jmp (J.EscSequences,x)
*--------------------------------------
J.EscSequences .DA Esc.LWEnable h
.DA Esc.LWDisable l
.DA Esc.DispAttr m
.DA Esc.Query n
.DA Esc.Scroll r
.DA Esc.Erase K
.DA Esc.Home H
*--------------------------------------
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
.DA 0 end of relocation
*--------------------------------------
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
ldy #0
.1 lda SB.IS.TTYPE,y
jsr Char.Out.Put
iny
cpy #SB.IS.TTYPE.LEN
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
jsr 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
.DA CLRSCR 12
.DA CROUT 13
.DA FS 21
.DA ESC 27
2018-12-11 16:41:25 +00:00
*--------------------------------------
ENQ ldy #0
.1 lda ENQ.String,y
beq .8
jsr Char.Out.Put
iny
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
.1 jsr SETUP.L1X
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-11 16:41:25 +00:00
.1 jsr SETUP.L1X
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
*--------------------------------------
Esc.LWEnable sec
.HS 90 BCC
*--------------------------------------
Esc.LWDisable clc
ldx EscSeqParamCnt
beq .8
dex
bne .8
lda EscSeqParam
eor #7
bne .8
2018-12-12 16:32:33 +00:00
ror
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bLINEWRAP
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
.8 clc
rts
*--------------------------------------
Esc.DispAttr ldx EscSeqParamCnt
beq .8
.1 lda EscSeqParam-1,x
bne .2
jsr RESETATTR
bra .7
2018-12-12 16:32:33 +00:00
.2 eor #7
2018-12-11 16:41:25 +00:00
bne .8
2018-12-12 16:32:33 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.bINVERSE
sta (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
2018-12-11 16:41:25 +00:00
.7 dex
bne .1
.8 clc
rts
*--------------------------------------
Esc.Query ldx EscSeqParamCnt
beq .8
dex
bne .8
lda EscSeqParam
cmp #6
bne .8
lda #C.ESC
jsr Char.Out.Put
2018-12-12 16:32:33 +00:00
2018-12-11 16:41:25 +00:00
lda #'['
jsr Char.Out.Put
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-11 16:41:25 +00:00
inc
jsr Decimal.Out
2018-12-12 16:32:33 +00:00
2018-12-11 16:41:25 +00:00
lda #';'
jsr Char.Out.Put
2018-12-12 16:32:33 +00:00
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CH
lda (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
inc
jsr Decimal.Out
2018-12-12 16:32:33 +00:00
2018-12-11 16:41:25 +00:00
lda #'R'
jsr Char.Out.Put
.8 clc
rts
*--------------------------------------
2018-12-12 16:32:33 +00:00
Esc.Scroll ldy EscSeqParamCnt
2018-12-11 16:41:25 +00:00
bne .1
lda #0
2018-12-12 16:32:33 +00:00
ldx #23
2018-12-11 16:41:25 +00:00
bra .8
2018-12-12 16:32:33 +00:00
.1 cpy #2
2018-12-11 16:41:25 +00:00
bne .9
lda EscSeqParam
dec
2018-12-12 16:32:33 +00:00
ldx EscSeqParam+1
dex
2018-12-13 16:39:24 +00:00
.8 ldy #S.DCB.TTY.SCROLLTOP
sta (ZPDCBPtr),y
iny S.DCB.TTY.SCROLLBOT
2018-12-12 16:32:33 +00:00
txa
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
.9 clc
rts
*--------------------------------------
Esc.Erase ldx EscSeqParamCnt
bne .1
jmp CLREOL
.1 lda EscSeqParam
cmp #1
bne .2
jmp CLRSOL
.2 cmp #2
bne .9
jmp CLRLINE
.9 clc
rts
*--------------------------------------
2018-12-12 16:32:33 +00:00
Esc.Home lda EscSeqParamCnt
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
ldy #S.DCB.TTY.CH
sta (ZPDCBPtr),y
2018-12-12 16:32:33 +00:00
iny
2018-12-13 16:39:24 +00:00
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
clc
rts
.1 ldx #1
lda EscSeqParam
beq .2
ldx #24
cmp #24
bcs .2
tax
.2 dex
2018-12-12 16:32:33 +00:00
txa
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CV
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
dec EscSeqParamCnt
beq .8
ldx #1
lda EscSeqParam+1
beq .3
ldx #80
cmp #80
bcs .3
tax
.3 dex
2018-12-12 16:32:33 +00:00
txa
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.CH
sta (ZPDCBPtr),y
2018-12-11 16:41:25 +00:00
.8 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
bpl 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-11 16:41:25 +00:00
Char.Out.Put pha
2018-12-13 16:39:24 +00:00
ldy #S.DCB.TTY.OUTHEAD
lda (ZPDCBPtr),y
pha
inc
cmp #S.DCB.TTY.OUTBUFFER.MAX
bne .1
lda #S.DCB.TTY.OUTBUFFER
.1 dey
cmp (ZPDCBPtr),y
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-13 16:39:24 +00:00
Char.Out.Get ldy #S.DCB.TTY.OUTHEAD
lda (ZPDCBPtr),y
dey OUTTAIL
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
*--------------------------------------
GetPtrsAndCnt ldy #S.IOCTL.BUFPTR
lda (ZPIOCTL),y
sta ZPBufPtr
iny
lda (ZPIOCTL),y
sta ZPBufPtr+1
* ldy #S.IOCTL.BYTECNT
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount
iny
lda (ZPIOCTL),y
eor #$ff
sta ZPCount+1
rts
*--------------------------------------
DRV.CS.END
*--------------------------------------
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
EscSeqCmds .AS "hlmnrKH"
EscSeqCmds.Cnt .EQ *-EscSeqCmds
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
*--------------------------------------
TELOPS.STATUS
*--------------------------------------
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
*--------------------------------------
bActive .BS 1
2018-12-12 16:32:33 +00:00
bEscSeqInNum .BS 1
EscSeqParamCnt .BS 1
EscSeqParam .BS 4
2018-12-12 07:05:29 +00:00
*--------------------------------------
2018-12-11 16:41:25 +00:00
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