NEW
  AUTO 3,1
*--------------------------------------
DRV.TERM.CLRSCR.DN
				ldy #S.DCB.TTY.CV
				sta (ZPDCBPtr),y
				tax
				bra DRV.TERM.CLRSCR.1
				
DRV.TERM.CLRSCR.UP
				ldx #0
				ldy #S.DCB.TTY.CV
				sta (ZPDCBPtr),y
				tay
				bra DRV.TERM.CLRSCR.2
				
DRV.TERM.CLRSCR	ldx #0

DRV.TERM.CLRSCR.1
				ldy #24

DRV.TERM.CLRSCR.2				
				sty .1+1

				sta SET80STORE
				
.1				cpx #$ff				SELF MODIFIED
				beq .9
				
				jsr DRV.TERM.SETUP.L1X
				
				lda #" "

				bit bActive
				bpl .4
				
				sta SETPAGE2
				jsr .7

				sta CLRPAGE2
				jsr .7
				
.4				sta SETWRITEAUX

				ldy #79
				
.5				sta (ZPBufBaseL1),y
				dey
				bpl .5

				sta CLRWRITEAUX
				
				inx
				bra .1
				
.7				ldy #39
				
.8				sta (ZPScrBaseL1),y
				dey
				bpl .8			
.9				rts
*--------------------------------------
DRV.TERM.LINE0CPY
				ldx #0
				.HS 2C					BIT ABS
DRV.TERM.SCRCPY	ldx #23

				sta SET80STORE

.1				ldy #S.FD.DEV.BUFPTR
				lda (pFD),y
				clc
				adc BUF.BASEL,x
				sta .80+1
				
				iny
				lda (pFD),y
				adc BUF.BASEH,x
				sta .80+2
				
				jsr DRV.TERM.SETUP.L1X.SCR
				
				phx
				
				sta SETREADAUX
				
				ldx #78
				sta SETPAGE2
				
				ldy #39
				
				jsr .8
				
				ldx #79
				sta CLRPAGE2

				ldy #39
				
				jsr .8
				
				sta CLRREADAUX
				
				plx
				dex
				
				bpl .1
				rts
				
.8				ldy #39
				
.80				lda $ffff,x				SELF MODIFIED
				
.81				sta (ZPScrBaseL1),y
				dex
				dex
				dey
				bpl .80
				rts
*--------------------------------------
DRV.TERM.COPY.XtoL1
				ldy #S.FD.DEV.BUFPTR
				lda (pFD),y
				clc
				adc BUF.BASEL,x
				sta ZPBufBaseL2
				
				iny
				lda (pFD),y
				adc BUF.BASEH,x
				sta ZPBufBaseL2+1

				ldy #79

				sta SETWRITEAUX
				sta SETREADAUX
				
.1				lda (ZPBufBaseL2),y
				sta (ZPBufBaseL1),y 
				dey
				bpl .1

				sta CLRWRITEAUX
				sta CLRREADAUX

				bit bActive
				bpl .8

				lda SCR.BASEL,x
				sta ZPScrBaseL2
				lda SCR.BASEH,x
				sta ZPScrBaseL2+1
				
				sta SET80STORE
				sta SETPAGE2
				
				jsr .6
				
				sta CLRPAGE2

.6				ldy #39
				
.7				lda (ZPScrBaseL2),y
				sta (ZPScrBaseL1),y 
				dey
				bpl .7

.8				rts
*--------------------------------------
SetCharAtCurPos	pha
				ldy #S.DCB.TTY.CV
				lda (ZPDCBPtr),y
				tax
				dey
				lda (ZPDCBPtr),y
				tay
				pla
				cpy #80
				bcs SetCharAtYX.8
*--------------------------------------
SetCharAtYX		cmp #$40
				bcc .1
				
				cmp #$60
				bcs .1
				
				and #$1F				remap UPPERCASE

.1				phy

				ldy #S.DCB.TTY.bNORMAL
				ora (ZPDCBPtr),y
				sta ZPTmpChar
				
				ldy #S.DCB.TTY.bG0G1	Select Active Font
				lda (ZPDCBPtr),y
				bpl .2
				iny

.2				iny
				
				lda (ZPDCBPtr),y
				bpl .3					not Graphic mode
				
				lda ZPTmpChar
				cmp #$E0				Normal lowercase ?
				bcc .3

				tay
				
				lda REMAP.E0.FF-$E0,y  
				sta ZPTmpChar
				

.3				jsr DRV.TERM.SETUP.L1X
				ply
				
				lda ZPTmpChar
				sta SETWRITEAUX
				sta (ZPBufBaseL1),y 
				sta CLRWRITEAUX

				bit bActive
				bpl SetCharAtYX.8

SetCharAtY.SCR	pha
				
				tya
				lsr
				tay
				
				pla
				sta SET80STORE
				bcs .2
				sta SETPAGE2
.2				sta (ZPScrBaseL1),y
				sta CLRPAGE2

SetCharAtYX.8	rts
*--------------------------------------
GetCharAtCurPos	ldy #S.DCB.TTY.CV
				lda (ZPDCBPtr),y
				cmp #24
				bcs .9					Out of screen

				tax
				
				jsr DRV.TERM.SETUP.L1X

				ldy #S.DCB.TTY.CH
				lda (ZPDCBPtr),y
				cmp #80
				bcs .9					Out of screen

				tay
				
				sta SETREADAUX
				lda (ZPBufBaseL1),y 
				sta CLRREADAUX
				
				cmp #$20
				bcs .8
	
*				clc	
				adc #40					remap $00-$1F uppercase
				
.8				clc

.9				rts
*--------------------------------------
DRV.TERM.SETUP.L1X
				ldy #S.FD.DEV.BUFPTR
				lda (pFD),y
				clc
				adc BUF.BASEL,x
				sta ZPBufBaseL1
				
				iny
				lda (pFD),y
				adc BUF.BASEH,x
				sta ZPBufBaseL1+1
				
				bit bActive
				bpl DRV.TERM.SETUP.L1X.8

DRV.TERM.SETUP.L1X.SCR
				lda SCR.BASEL,x
				sta ZPScrBaseL1
				lda SCR.BASEH,x
				sta ZPScrBaseL1+1
DRV.TERM.SETUP.L1X.8
				rts
*--------------------------------------
*					` a b c d e f g h i j k l m n o
REMAP.E0.FF		.HS 5B4142434445464748495FA0DF544e4f
*					p q r s t u v w x y z { | } ~ DEL
				.HS 50DF5253545556575F595a5b5c5d5e5f
*--------------------------------------
RESET.VALUES	.DA #0					S.DCB.TTY.MODE
				.DA #0					S.DCB.TTY.CH
				.DA #0					S.DCB.TTY.CV
				.DA #0					S.DCB.TTY.SCROLLTOP
				.DA #23					S.DCB.TTY.SCROLLBOT
				.DA #0					S.DCB.TTY.bCURON
				.DA #0					S.DCB.TTY.bTITLE

				.DA #$80				S.DCB.TTY.bNORMAL
				.DA #$80				S.DCB.TTY.bLINEWRAP
				.DA #$80				S.DCB.TTY.bCRLF

				.DA #0
				
				.DA #0					S.DCB.TTY.bG0G1
				.DA #0					S.DCB.TTY.bG0ALT
				.DA #$80				S.DCB.TTY.bG1ALT

				.DA #S.DCB.TTY.OUTBUFFER	S.DCB.TTY.OUTTAIL
				.DA #S.DCB.TTY.OUTBUFFER	S.DCB.TTY.OUTHEAD
				.DA #S.DCB.TTY.INBUFFER	S.DCB.TTY.INBUFFER			
*--------------------------------------
CtrlChars		.DA #C.ENQ,#C.BS,#C.LF,#C.FF,#C.CR,#C.SO,#C.SI,#C.FS,#C.ESC
CtrlChars.Cnt	.EQ *-CtrlChars
*--------------------------------------
EscCodes		.AZ "MDc[()"
EscCodes.Cnt	.EQ *-EscCodes
EscModes		.DA #0,#0,#0,#S.DCB.TTY.MODE.CSI,#S.DCB.TTY.MODE.G0,#S.DCB.TTY.MODE.G1
CsiCodes		.AS "hlmnrJKH"
CsiCodes.Cnt	.EQ *-CsiCodes
*--------------------------------------
KeyRemapped		.HS 080A0B15			Left,Down,Up,Right
KeyRemapped.Cnt	.EQ *-KeyRemapped
KeyRemapped.Tbl	.HS 44424143			esc[D,esc[B,esc[A,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
ENQ.String		.AS "xterm"
ENQ.String.Len	.EQ *-ENQ.String
				.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
*--------------------------------------
BUF.BASEL		.DA #0
				.DA #80
				.DA #160
				.DA #240
				.DA #320
				.DA #400
				.DA #480
				.DA #560
				.DA #640
				.DA #720
				.DA #800
				.DA #880
				.DA #960
				.DA #1040
				.DA #1120
				.DA #1200
				.DA #1280
				.DA #1360
				.DA #1440
				.DA #1520
				.DA #1600
				.DA #1680
				.DA #1760
				.DA #1840
BUF.BASEH		.DA /0
				.DA /80
				.DA /160
				.DA /240
				.DA /320
				.DA /400
				.DA /480
				.DA /560
				.DA /640
				.DA /720
				.DA /800
				.DA /880
				.DA /960
				.DA /1040
				.DA /1120
				.DA /1200
				.DA /1280
				.DA /1360
				.DA /1440
				.DA /1520
				.DA /1600
				.DA /1680
				.DA /1760
				.DA /1840
*--------------------------------------
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
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.TERMLC
LOAD USR/SRC/SYS/KERNEL.S
ASM
