NEW AUTO 3,1 *-------------------------------------- CURBLNK.SPEED .EQ 2 *-------------------------------------- .DUMMY .OR ZPDRV ZPIOCTL .BS 2 ZPBufPtr .BS 2 ZPDCBPtr .BS 2 ZPCnt .BS 2 ZPBufBL1 .BS 2 ZPBufBL2 .BS 2 ZPScrBL1 .BS 2 ZPScrBL2 .BS 2 *-------------------------------------- bActive .BS 1 ZPTmpX .BS 1 ZPTmpChar .BS 1 CsiH .BS 1 CsiPCnt .BS 1 CsiP .BS 4 .ED *-------------------------------------- TERMX .DA TERMX.STATUS .DA A2osX.BADCALL .DA A2osX.BADCALL .DA A2osX.BADCALL .DA TERMX.CONTROL .DA A2osX.BADCALL .DA TERMX.OPEN .DA TERMX.CLOSE .DA TERMX.READ .DA TERMX.WRITE *-------------------------------------- TERMX.STATUS tya beq .1 cmp #S.IOCTL.S.GETDIB bne .3 ldy #S.DIB-1 .HS 2C BIT ABS .1 ldy #3 sta IO.CLRWRITEAUX .2 lda TERMX.DIB,y sta (ZPBufPtr),y dey bne .2 ldy #S.DCB.TTY.S lda (ZPDCBPtr),y sta (ZPBufPtr) clc rts .3 cmp #S.IOCTL.S.EOF bne .9 jsr TERMX.ISOPENED beq TERMX.OPEN.E jsr TERMX.CBLNK ldy #S.DCB.TTY.OUTTAIL lda (ZPDCBPtr),y iny eor (ZPDCBPtr),y OUTHEAD bne .8 bit bActive bpl .7 jsr TERMX.CheckOA bmi .7 bit IO.KBD bmi .8 .7 lda #$ff EOF = TRUE .HS 2C BIT ABS .8 lda #0 EOF = FALSE clc rts .9 lda #MLI.E.BADCTL .HS 2C BIT ABS TERMX.OPEN.E lda #MLI.E.OPEN sec rts *-------------------------------------- TERMX.OPEN jsr TERMX.ISOPENED bne TERMX.OPEN.E lda (ZPDCBPtr) #S.DCB.TTY.DEVID tax lda IO.hFD in ZPTMP sta IO.CLRWRITEAUX sta A2osX.SCRNDEVS,x sta IO.SETWRITEAUX ldy #S.DCB.TTY.S lda (ZPDCBPtr),y ora #S.DIB.S.OPENED ora TERMX.DIB+S.DIB.S sta (ZPDCBPtr),y jsr TERMX.RIS *-------------------------------------- TERMX.CONTROL lda (ZPDCBPtr) #S.DCB.TTY.DEVID sta IO.CLRWRITEAUX sta A2osX.ASCREEN sta IO.SETWRITEAUX sta IO.SETTEXT sta IO.CLRMIXED jsr TERMX.SCRCPY lda #0 ldy #S.DCB.TTY.bTITLE sta (ZPDCBPtr),y clc rts *-------------------------------------- TERMX.CLOSE jsr TERMX.ISOPENED beq .9 lda TERMX.DIB+S.DIB.S sta (ZPDCBPtr),y lda (ZPDCBPtr) #S.DCB.TTY.DEVID tax sta IO.CLRWRITEAUX stz A2osX.SCRNDEVS,x sta IO.SETWRITEAUX clc rts .9 lda #MLI.E.IO sec rts *-------------------------------------- TERMX.ISOPENED ldy #S.DCB.TTY.S lda (ZPDCBPtr),y bit #S.DIB.S.OPENED rts *-------------------------------------- TERMX.READ bit bActive is screen active? bpl .6 no....go check flush... jsr TERMX.CBLNK jsr TERMX.CheckOA bmi .6 Open apple key, not for us... lda IO.KBD bpl .6 sta IO.KBDSTROBE and #$7F cmp #C.ESC bne .1 lda #3 .1 ldx #KeyMap.Cnt-1 .2 cmp KeyMap,x beq .3 dex bpl .2 cmp #C.CR bne .21 jsr TERMX.COUT ldy #S.DCB.TTY.bLNM lda (ZPDCBPtr),y bpl .7 lda #C.LF .21 jsr TERMX.COUT no remap....send char.... bra .7 and flush .3 jsr TERMX.ESCCSI lda CsiCodes,x jsr TERMX.COUT bra .7 .6 ldy #S.DCB.TTY.OUTTAIL lda (ZPDCBPtr),y iny cmp (ZPDCBPtr),y OUTHEAD beq .9 no char in output buffer... .7 stz .8+1 .70 inc ZPCnt bne .71 inc ZPCnt+1 beq .8 .71 ldy #S.DCB.TTY.OUTTAIL lda (ZPDCBPtr),y iny OUTHEAD cmp (ZPDCBPtr),y beq .8 tay lda (ZPDCBPtr),y pha tya inc cmp #S.DCB.TTY.OUTBUF.MAX bne .72 lda #S.DCB.TTY.OUTBUF .72 ldy #S.DCB.TTY.OUTTAIL sta (ZPDCBPtr),y pla ldy .8+1 sta IO.CLRWRITEAUX sta (ZPBufPtr),y sta IO.SETWRITEAUX iny sty .8+1 bra .70 .8 lda #$ff SELF MODIFIED sta IO.CLRWRITEAUX ldy #S.IOCTL.BYTECNT sta (ZPIOCTL),y iny lda #0 sta (ZPIOCTL),y clc rts .9 lda #E.NODATA * sec rts *-------------------------------------- TERMX.WRITE jsr TERMX.CUROFF .1 inc ZPCnt bne .2 inc ZPCnt+1 beq .8 .2 ldy #S.DCB.TTY.M lda (ZPDCBPtr),y tax jsr .3 inc ZPBufPtr bne .1 inc ZPBufPtr+1 bra .1 .3 jmp (.4,x) .4 .DA TERMX.CIN .DA TERMX.ESC .DA TERMX.CSI .DA TERMX.IAC .DA TERMX.G0 .DA TERMX.G1 .8 clc rts *-------------------------------------- TERMX.CIN jsr TERM.GetBufByte cmp #IAC bne .1 lda #S.DCB.TTY.M.IAC jmp TERMX.SETM .1 cmp #C.DEL beq TERMX.DEL cmp #C.SPACE bcs .8 ldx #CtrlChars.Cnt-1 .2 cmp CtrlChars,x beq .3 dex bpl .2 clc rts .3 txa asl tax jmp (.4,x) .4 .DA TERMX.ENQ .DA TERMX.BS .DA TERMX.LF .DA TERMX.FF .DA TERMX.CR .DA TERMX.SO .DA TERMX.SI .DA TERMX.SETM.ESC *-------------------------------------- .8 jsr SetCharAtCurPos *-------------------------------------- TERMX.FS ldy #S.DCB.TTY.bDECAWM lda (ZPDCBPtr),y asl .HS 89 BIT IMM TERMX.CUF clc php ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y inc sta (ZPDCBPtr),y cmp #80 bcc .7 plp bcc .8 jmp TERMX.NEL .7 plp .8 clc rts *-------------------------------------- TERMX.BS TERMX.CUB ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y beq TERMX.BS.8 dec sta (ZPDCBPtr),y TERMX.BS.8 clc rts *-------------------------------------- TERMX.DEL ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y beq .1 dec sta (ZPDCBPtr),y bra .3 .1 ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y beq TERMX.BS.8 dec sta (ZPDCBPtr),y ldy #S.DCB.TTY.CH lda #79 sta (ZPDCBPtr),y S.DCB.TTY.CH .3 lda #C.SPACE jmp SetCharAtCurPos *-------------------------------------- TERMX.CR lda #0 ldy #S.DCB.TTY.CH sta (ZPDCBPtr),y clc rts *-------------------------------------- TERMX.SO sec .HS 90 BCC *-------------------------------------- TERMX.SI clc ldy #S.DCB.TTY.bG0G1 ror sta (ZPDCBPtr),y clc rts *-------------------------------------- TERMX.ESC jsr TERM.GetBufByte y = #S.DCB.TTY.M ldx #EscCodes.Cnt-1 .2 cmp EscCodes,x beq .3 dex bpl .2 bra TERMX.SETM.0 .3 phx jsr .4 plx lda EscModes,x bra TERMX.SETM .4 txa asl tax jmp (.5,x) .5 .DA TERMX.DECSC 7 .DA TERMX.DECRC 8 .DA TERMX.IND D .DA TERMX.NEL E .DA TERMX.RI M .DA TERMX.RIS c .DA TERMX.RTS [ .DA TERMX.RTS ( .DA TERMX.RTS ) *-------------------------------------- TERMX.SETM.ESC lda #S.DCB.TTY.M.ESC .HS 2C BIT ABS TERMX.SETM.0 lda #0 TERMX.SETM ldy #S.DCB.TTY.M sta (ZPDCBPtr),y ldy #S.DCB.TTY.INBUF tya sta (ZPDCBPtr),y TERMX.SETM.8 clc rts *-------------------------------------- TERMX.CSI ldy #S.DCB.TTY.INBUF lda (ZPDCBPtr),y inc sta (ZPDCBPtr),y tay jsr TERM.GetBufByte sta (ZPDCBPtr),y cmp #64 End of Seq ? bcs TERMX.CSI.Exec cpy #S.DCB.TTY.INBUF.MAX-1 buffer full? bne TERMX.SETM.8 jmp TERMX.SETM.0 TERMX.CSI.Exec stz CsiH stz CsiPCnt lda #S.DCB.TTY.INBUF+1 EscSeq Ptr clc adc ZPDCBPtr sta ZPPtr2 lda /S.DCB.TTY.INBUF+1 adc ZPDCBPtr+1 sta ZPPtr2+1 lda (ZPPtr2) cmp #'?' bne .2 sta CsiH .1 jsr SHARED.NextCP2 .2 jsr MATH.Dec2ACC32 bcs .5 jsr SHARED.AddY2P2 lda #255 ldx ACC32+1 bne .3 lda ACC32 .3 ldx CsiPCnt sta CsiP,x inc CsiPCnt lda (ZPPtr2) cmp #';' beq .1 .5 jsr TERMX.SETM.0 lda (ZPPtr2) ldx #CsiCodes.Cnt-1 .6 cmp CsiCodes,x beq .7 dex bpl .6 clc rts .7 txa asl tax jmp (.8,x) .8 .DA TERMX.CUx A .DA TERMX.CUx B .DA TERMX.CUx C .DA TERMX.CUx D .DA TERMX.CUP H .DA TERMX.ED J .DA TERMX.EL K .DA TERMX.HVP f .DA TERMX.SM h .DA TERMX.RM l .DA TERMX.SGR m .DA TERMX.DSR n .DA TERMX.DECSTBM r *-------------------------------------- * LNM : ESC [ 20 * DECAWM : ESC [ ? 7 * CUR : ESC [ ? 25 *-------------------------------------- TERMX.SM sec .HS 90 BCC *-------------------------------------- TERMX.RM clc ldx CsiPCnt beq .99 dex bne .99 lda CsiP ldx CsiH php bne .1 cmp #20 bLNM bne .98 ldy #S.DCB.TTY.bLNM bra .8 *-------------------------------------- .1 cpx #'?' bne .98 cmp #7 bne .2 ldy #S.DCB.TTY.bDECAWM bra .8 *-------------------------------------- .2 eor #25 bne .98 ldy #S.DCB.TTY.bCURON plp ror A = 0 sta (ZPDCBPtr),y bmi .3 let it starts blinking.. jsr TERMX.CUROFF .3 clc rts .8 plp ror sta (ZPDCBPtr),y clc rts .98 plp .99 clc rts *-------------------------------------- TERMX.SGR lda CsiPCnt beq .10 ldx #0 .1 lda CsiP,x bne .2 jsr .10 bra .7 .2 cmp #7 bne .7 jsr .11 .7 inx dec CsiPCnt bne .1 .8 clc rts .10 sec .HS 90 BCC .11 clc lda #0 ror ldy #S.DCB.TTY.bNORMAL sta (ZPDCBPtr),y rts *-------------------------------------- TERMX.DSR ldx CsiPCnt beq .8 dex bne .8 lda CsiP cmp #6 bne .8 jsr TERMX.ESCCSI ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y inc jsr TERMX.10OUT lda #';' jsr TERMX.COUT ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y inc jsr TERMX.10OUT lda #'R' jsr TERMX.COUT .8 clc rts *-------------------------------------- TERMX.DECSTBM lda #0 ldx #23 ldy CsiPCnt beq .8 cpy #2 bne .9 ldy CsiP beq .9 dey cpy #24 bcs .9 tya ldy CsiP+1 beq .9 dey cpy #24 bcs .9 phy plx .8 ldy #S.DCB.TTY.SCROLLTOP sta (ZPDCBPtr),y iny S.DCB.TTY.SCROLLBOT txa sta (ZPDCBPtr),y .9 clc rts *-------------------------------------- TERMX.CUx ldy #1 lda CsiPCnt beq .1 dec bne .8 ldy CsiP beq .8 .1 lda .80,x sta .3+1 lda .80+1,x sta .3+2 .2 phy .3 jsr $FFFF SELF MODIFIED ply dey bne .2 .8 clc rts .80 .DA TERMX.CUU .DA TERMX.CUD .DA TERMX.CUF .DA TERMX.CUB *-------------------------------------- TERMX.CUP TERMX.HVP lda CsiPCnt beq TERMX.HOME ldx #1 lda CsiP beq .2 ldx #24 cmp #24 bcs .2 tax .2 dex txa ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y dec CsiPCnt beq .8 ldx #1 lda CsiP+1 beq .3 ldx #80 cmp #80 bcs .3 tax .3 dex txa ldy #S.DCB.TTY.CH sta (ZPDCBPtr),y .8 clc rts *-------------------------------------- TERMX.HOME lda #0 ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y ldy #S.DCB.TTY.CH sta (ZPDCBPtr),y clc rts *-------------------------------------- TERMX.G0 ldx #$80 .HS 2C BIT ABS TERMX.G1 ldx #$40 ldy #S.DCB.TTY.bG0G1ALT jsr TERM.GetBufByte cmp #'0' beq .1 txa eor #$ff and (ZPDCBPtr),y bra .8 .1 txa ora (ZPDCBPtr),y .8 sta (ZPDCBPtr),y jmp TERMX.SETM.0 *-------------------------------------- TERMX.RIS ldy #S.DCB.TTY.M .1 lda RESET.VALUES-S.DCB.TTY.M,y sta (ZPDCBPtr),y iny cpy #S.DCB.TTY.INBUF+1 bne .1 jmp TERMX.ED2 Erase Screen *-------------------------------------- TERMX.ENQ ldx #0 .1 lda TERMX.ENQ.REP,x jsr TERMX.COUT inx cpx #TERMX.ENQ.REP.L bne .1 .8 clc rts *-------------------------------------- TERMX.LF ldy #S.DCB.TTY.bLNM lda (ZPDCBPtr),y bpl TERMX.IND TERMX.NEL jsr TERMX.CR TERMX.IND sec scroll .HS 90 BCC TERMX.CUD clc no scroll php ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y ldy #S.DCB.TTY.SCROLLBOT cmp (ZPDCBPtr),y bcs .1 inc ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y plp .8 clc rts .1 plp bcc .8 ldy #S.DCB.TTY.SCROLLTOP lda (ZPDCBPtr),y tax .2 jsr TERMX.SETUP.L1X inx jsr TERMX.COPY.XtoL1 txa ldy #S.DCB.TTY.SCROLLBOT cmp (ZPDCBPtr),y bne .2 bra TERMX.EL2 *-------------------------------------- TERMX.EL ldx CsiPCnt beq TERMX.EL0 Erase EOL lda CsiP beq TERMX.EL0 0:Erase EOL dec beq TERMX.EL1 1:Erase SOL dec 2:Erase Line beq TERMX.EL2 TERMX.EL.8 clc rts *-------------------------------------- TERMX.EL1 ldy #S.DCB.TTY.CH End lda (ZPDCBPtr),y cmp #80 bcc TERMX.EL2.1 TERMX.EL2 lda #80 End TERMX.EL2.1 ldy #0 Start bra TERMX.EL0.1 TERMX.EL0 ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y tay Start cpy #80 bcs TERMX.EL.8 lda #80 End TERMX.EL0.1 sty .1+1 Save Start sta .2+1 Save End ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y tax .1 ldy #$ff SELF MODIFIED .2 cpy #$ff SELF MODIFIED bcs TERMX.EL.8 lda #" " jsr SetCharAtYX X unmodified inc .1+1 bra .1 *-------------------------------------- TERMX.DECSC ldy #S.DCB.TTY.CH jsr .1 iny .1 lda (ZPDCBPtr),y iny sta (ZPDCBPtr),y rts *-------------------------------------- TERMX.DECRC jsr TERMX.CUROFF ldy #S.DCB.TTY.CV.SAVE jsr .1 dey .1 lda (ZPDCBPtr),y dey sta (ZPDCBPtr),y rts *-------------------------------------- TERMX.RI sec scroll .HS 90 BCC TERMX.CUU clc no scroll php ldy #S.DCB.TTY.SCROLLTOP lda (ZPDCBPtr),y ldy #S.DCB.TTY.CV cmp (ZPDCBPtr),y bcs .1 lda (ZPDCBPtr),y dec sta (ZPDCBPtr),y plp .8 clc rts .1 plp bcc .8 ldy #S.DCB.TTY.SCROLLBOT lda (ZPDCBPtr),y tax .2 jsr TERMX.SETUP.L1X dex jsr TERMX.COPY.XtoL1 txa ldy #S.DCB.TTY.SCROLLTOP cmp (ZPDCBPtr),y bne .2 bra TERMX.EL2 *-------------------------------------- TERMX.CBLNK jsr TERMX.CCheck bcs TERMX.RTS * ldy #S.DCB.TTY.bCURON lda DevMgr.Timer and #CURBLNK.SPEED eor (ZPDCBPtr),y asl beq TERMX.RTS lda (ZPDCBPtr),y eor #CURBLNK.SPEED sta (ZPDCBPtr),y asl beq TERMX.CUROFF.1 TERMX.CURON jsr GetCharAtCurPos bcs TERMX.RTS Out of screen and #$80 eor #" " jmp SetCharAtY.SCR *-------------------------------------- TERMX.CUROFF jsr TERMX.CCheck bcs TERMX.RTS TERMX.CUROFF.1 jsr GetCharAtCurPos bcs TERMX.RTS Out of screen jmp SetCharAtY.SCR *-------------------------------------- TERMX.CCheck sec bit bActive bpl .9 ldy #S.DCB.TTY.bCURON lda (ZPDCBPtr),y bpl .9 clc .9 TERMX.RTS rts *-------------------------------------- TERMX.10OUT jsr MATH.A2STR10NP ldx #0 .1 lda FOUTBuf,x beq TERMX.RTS inx jsr TERMX.COUT bra .1 *-------------------------------------- TERMX.ESCCSI lda #C.ESC jsr TERMX.COUT lda #'[' *-------------------------------------- TERMX.COUT pha save char ldy #S.DCB.TTY.OUTHEAD lda (ZPDCBPtr),y pha save actual HEAD inc cmp #S.DCB.TTY.OUTBUF.MAX bne .1 lda #S.DCB.TTY.OUTBUF .1 dey OUTTAIL cmp (ZPDCBPtr),y HEAD+1 = TAIL ? beq .9 CS, full! iny sta (ZPDCBPtr),y new head ply old head pla sta (ZPDCBPtr),y clc rts .9 pla pla rts *-------------------------------------- TERMX.ED ldx CsiPCnt beq TERMX.ED0 .1 lda CsiP beq TERMX.ED0 0... dec 1 ? beq TERMX.ED1 .2 dec 2 ? beq TERMX.ED2 TERMX.ED.8 clc rts *-------------------------------------- TERMX.ED0 ldy #S.DCB.TTY.CV Erase Cursor -> Bottom sta (ZPDCBPtr),y tax bra TERMX.ED.1 TERMX.ED1 ldx #0 Erase Top -> Cursor ldy #S.DCB.TTY.CV sta (ZPDCBPtr),y tay bra TERMX.ED.2 TERMX.FF jsr TERMX.HOME TERMX.ED2 ldx #0 Erase Screen TERMX.ED.1 ldy #24 TERMX.ED.2 sty .1+1 .1 cpx #$ff SELF MODIFIED beq .9 jsr TERMX.SETUP.L1X lda #" " bit bActive bpl .4 sta IO.SETPAGE2 jsr .7 sta IO.CLRPAGE2 jsr .7 .4 ldy #79 .5 sta (ZPBufBL1),y dey bpl .5 inx bra .1 .7 ldy #39 .8 sta (ZPScrBL1),y dey bpl .8 .9 rts *-------------------------------------- TERMX.IAC ldy #S.DCB.TTY.INBUF lda (ZPDCBPtr),y inc sta (ZPDCBPtr),y tay jsr TERM.GetBufByte sta (ZPDCBPtr),y cpy #S.DCB.TTY.INBUF+1 CMD ? beq TERMX.ED.8 yes, wait for additional bytes ldy #S.DCB.TTY.INBUF+1 lda (ZPDCBPtr),y get back CMD cmp #SB bne .1 not a SB/SE....stop with CMD/SUBCMD jsr TERM.GetBufByte cmp #SE bne TERMX.ED.8 wait for ending SE....keep bIACMode bra TERMX.IAC.SB ldy #S.DCB.TTY.INBUF+1 lda (ZPDCBPtr),y get back CMD .1 cmp #IAC beq TERMX.IAC.SB.9 sec sbc #WILL bcc TERMX.IAC.SB.9 asl tax ldy #S.DCB.TTY.INBUF+2 lda (ZPDCBPtr),y Get SUBCMD in A jmp (.8,x) .8 .DA TERMX.IAC.RWILL .DA TERMX.IAC.RWONT .DA TERMX.IAC.RDO .DA TERMX.IAC.RDONT *-------------------------------------- TERMX.IAC.SB ldy #S.DCB.TTY.INBUF+2 lda (ZPDCBPtr),y Get SUBCMD in A cmp #TN.O.TTYPE bne TERMX.IAC.SB.9 iny lda (ZPDCBPtr),y cmp #SB.SEND bne TERMX.IAC.SB.9 ldx #0 .1 lda SB.IS.TTYPE,x jsr TERMX.COUT inx cpx #SB.IS.TTYPE.LEN bne .1 TERMX.IAC.SB.9 jmp TERMX.SETM.0 *-------------------------------------- TERMX.IAC.RWILL cmp #TN.O.ECHO * beq TERMX.IAC.SDO beq TERMX.IAC.SB.9 ldx #TERMX.IAC1.L-1 .1 cmp TERMX.IAC1,x beq TERMX.IAC.SB.9 dex bpl .1 .8 bra TERMX.IAC.SDONT *-------------------------------------- TERMX.IAC.RWONT ldx #TERMX.IAC1.L-1 .1 cmp TERMX.IAC1,x beq TERMX.IAC.SDO dex bpl .1 jmp TERMX.SETM.0 *-------------------------------------- TERMX.IAC.RDO cmp #TN.O.ECHO beq TERMX.IAC.SWONT ldx #TERMX.IAC1.L-1 .1 cmp TERMX.IAC1,x beq TERMX.IAC.SWILL dex bpl .1 bra TERMX.IAC.SWONT *-------------------------------------- TERMX.IAC.RDONT ldx #TERMX.IAC1.L-1 .1 cmp TERMX.IAC1,x beq TERMX.IAC.SWILL dex bpl .1 jmp TERMX.SETM.0 *-------------------------------------- TERMX.IAC.SWILL ldx #WILL .HS 2C BIT ABS *-------------------------------------- TERMX.IAC.SWONT ldx #WONT .HS 2C BIT ABS *-------------------------------------- TERMX.IAC.SDO ldx #DO .HS 2C BIT ABS *-------------------------------------- TERMX.IAC.SDONT ldx #DONT *-------------------------------------- pha push CMD phx lda #IAC jsr TERMX.COUT pla jsr TERMX.COUT pla jsr TERMX.COUT jmp TERMX.SETM.0 *-------------------------------------- TERMX.CheckOA lda IO.OPENAPPLE php bpl .5 Restore Title ldy #S.DCB.TTY.bTITLE lda (ZPDCBPtr),y bmi .8 inc sta (ZPDCBPtr),y jsr TERM.GetDevName ldx #0 jsr TERMX.SETUP.L1X.SCR ldy #0 .1 jsr SHARED.TXTPTRgn beq .3 cmp #$40 bcc .2 cmp #$60 bcs .2 and #$1F remap UPPERCASE .2 phy jsr SetCharAtY.SCR ply iny bne .1 .3 lda #C.SPACE .4 phy jsr SetCharAtY.SCR ply iny cpy #80 bne .4 plp rts .5 ldy #S.DCB.TTY.bTITLE lda (ZPDCBPtr),y bpl .8 dec sta (ZPDCBPtr),y ldx #0 jsr TERMX.SCR0CPY .8 plp rts *-------------------------------------- TERMX.SCRCPY ldx #23 TERMX.SCR0CPY lda ZPDCBPtr clc adc BUF.BL,x sta .80+1 lda ZPDCBPtr+1 adc BUF.BH,x sta .80+2 jsr TERMX.SETUP.L1X.SCR phx ldx #78 sta IO.SETPAGE2 ldy #39 jsr .8 ldx #79 sta IO.CLRPAGE2 ldy #39 jsr .8 plx dex bpl TERMX.SCR0CPY rts .8 ldy #39 .80 lda $ffff,x SELF MODIFIED sta (ZPScrBL1),y dex dex dey bpl .80 rts *-------------------------------------- TERMX.COPY.XtoL1 lda ZPDCBPtr clc adc BUF.BL,x sta ZPBufBL2 lda ZPDCBPtr+1 adc BUF.BH,x sta ZPBufBL2+1 ldy #79 .1 lda (ZPBufBL2),y sta (ZPBufBL1),y dey bpl .1 bit bActive bpl .8 lda SCR.BL,x sta ZPScrBL2 lda SCR.BH,x sta ZPScrBL2+1 sta IO.SETPAGE2 jsr .6 sta IO.CLRPAGE2 .6 ldy #39 .7 lda (ZPScrBL2),y sta (ZPScrBL1),y dey bpl .7 .8 rts *-------------------------------------- SetCharAtCurPos pha ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y tax ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y tay pla cpy #80 bcs SetCharAtYX.8 *-------------------------------------- SetCharAtYX sty ZPTmpX cmp #$40 bcc .1 cmp #$60 bcs .1 and #$1F remap UPPERCASE .1 ldy #S.DCB.TTY.bNORMAL ora (ZPDCBPtr),y sta ZPTmpChar ldy #S.DCB.TTY.bG0G1 Select Active Font lda (ZPDCBPtr),y clc bpl .2 sec .2 lda #$80 bcc .21 lsr .21 iny #S.DCB.TTY.bG0G1ALT and (ZPDCBPtr),y beq .3 not Graphic mode lda ZPTmpChar cmp #$E0 Normal lowercase ? bcc .3 tay lda REMAP.E0.FF-$E0,y sta ZPTmpChar .3 jsr TERMX.SETUP.L1X ldy ZPTmpX lda ZPTmpChar sta (ZPBufBL1),y bit bActive bmi SetCharAtY.SCR1 rts SetCharAtY.SCR sty ZPTmpX SetCharAtY.SCR1 lsr ZPTmpX ldy ZPTmpX bcs .2 sta IO.SETPAGE2 sta (ZPScrBL1),y sta IO.CLRPAGE2 rts .2 sta (ZPScrBL1),y SetCharAtYX.8 rts *-------------------------------------- GetCharAtCurPos ldy #S.DCB.TTY.CV lda (ZPDCBPtr),y cmp #24 bcs .9 Out of screen tax jsr TERMX.SETUP.L1X ldy #S.DCB.TTY.CH lda (ZPDCBPtr),y cmp #80 bcs .9 Out of screen tay lda (ZPBufBL1),y cmp #$20 bcs .8 * clc adc #40 remap $00-$1F uppercase .8 clc .9 rts *-------------------------------------- TERMX.SETUP.L1X lda ZPDCBPtr clc adc BUF.BL,x sta ZPBufBL1 lda ZPDCBPtr+1 adc BUF.BH,x sta ZPBufBL1+1 bit bActive bpl TERMX.SETUP.L1X.8 TERMX.SETUP.L1X.SCR lda SCR.BL,x sta ZPScrBL1 lda SCR.BH,x sta ZPScrBL1+1 TERMX.SETUP.L1X.8 rts *-------------------------------------- KeyMap .DA #11,#10,#21,#8 esc[A,esc[B,esc[C,esc[D KeyMap.Cnt .EQ *-KeyMap *-------------------------------------- CtrlChars .DA #C.ENQ,#C.BS,#C.LF,#C.FF,#C.CR,#C.SO,#C.SI,#C.ESC CtrlChars.Cnt .EQ *-CtrlChars *-------------------------------------- EscCodes .AZ "78DEMc[()" EscCodes.Cnt .EQ *-EscCodes EscModes .DA #0,#0,#0,#0,#0,#0,#S.DCB.TTY.M.CSI,#S.DCB.TTY.M.G0,#S.DCB.TTY.M.G1 *-------------------------------------- CsiCodes .AS "ABCDHJKfhlmnr" CsiCodes.Cnt .EQ *-CsiCodes *-------------------------------------- * Enabled both sides *-------------------------------------- TERMX.IAC1 .DA #TN.O.BINARY,#TN.O.SGA,#TN.O.TTYPE,#TN.O.NAWS TERMX.IAC1.L .EQ *-TERMX.IAC1 *-------------------------------------- * Disabled both sides *-------------------------------------- *TERMX.IAC0 .DA #TN.O.TSPEED,#TN.O.LINEMODE,#TN.O.STATUS * .DA #TN.O.NEWENV,#TN.O.XDISPLOC * .DA #TN.O.LFLOW,#TN.O.AUTH *TERMX.IAC0.L .EQ *-TERMX.IAC0 *-------------------------------------- * Enabled Local, Disabled remote *-------------------------------------- *TERMX.IAC10 .DA #TN.O.ECHO *TERMX.IAC10.L .EQ *-TERMX.IAC10 *-------------------------------------- SB.IS.TTYPE .DA #IAC,#SB,#TN.O.TTYPE,#SB.IS TERMX.ENQ.REP .AS "vt100" TERMX.ENQ.REP.L .EQ *-TERMX.ENQ.REP .DA #IAC,#SE SB.IS.TTYPE.LEN .EQ *-SB.IS.TTYPE SB.IS.NAWS .DA #IAC,#SB,#TN.O.NAWS,#SB.IS .DA 80 .DA 24 .DA #IAC,#SE SB.IS.NAWS.LEN .EQ *-SB.IS.NAWS *-------------------------------------- RESET.VALUES .DA #0 MODE .DA #0 CH .DA #0 CH.SAVE .DA #0 CV .DA #0 CV.SAVE .DA #0 SCROLLTOP .DA #23 SCROLLBOT .DA #$80 bCURON .DA #0 bTITLE .DA #$80 bNORMAL .DA #$80 bDECAWM .DA #$80 bLNM .DA #0 bG0G1 .DA #0 bG0G1ALT .DA #S.DCB.TTY.OUTBUF OUTTAIL .DA #S.DCB.TTY.OUTBUF OUTHEAD .DA #S.DCB.TTY.INBUF INBUFFER *-------------------------------------- TERMX.DIB .DA #S.DIB.S.WRITE+S.DIB.S.READ .DA #0,#0,#0 .PS "A2osX VT100 term" .DA #S.DIB.T.CHAR .DA #0 .DA K.VER *-------------------------------------- * ` a b c d e f g h i j k l m n o REMAP.E0.FF .HS 5b.41.42.43.44.45.46.47.48.49.20.5e.5a.5a.4e.4f * p q r s t u v w x y z { | } ~ DEL .HS 50.5c.52.53.54.55.56.57.5a.59.5a.5b.5c.5d.5e.5f *-------------------------------------- SCR.BL .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.BH .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 *-------------------------------------- BUF.BL .DA #S.DCB.TTY+0 .DA #S.DCB.TTY+80 .DA #S.DCB.TTY+160 .DA #S.DCB.TTY+240 .DA #S.DCB.TTY+320 .DA #S.DCB.TTY+400 .DA #S.DCB.TTY+480 .DA #S.DCB.TTY+560 .DA #S.DCB.TTY+640 .DA #S.DCB.TTY+720 .DA #S.DCB.TTY+800 .DA #S.DCB.TTY+880 .DA #S.DCB.TTY+960 .DA #S.DCB.TTY+1040 .DA #S.DCB.TTY+1120 .DA #S.DCB.TTY+1200 .DA #S.DCB.TTY+1280 .DA #S.DCB.TTY+1360 .DA #S.DCB.TTY+1440 .DA #S.DCB.TTY+1520 .DA #S.DCB.TTY+1600 .DA #S.DCB.TTY+1680 .DA #S.DCB.TTY+1760 .DA #S.DCB.TTY+1840 BUF.BH .DA /S.DCB.TTY+0 .DA /S.DCB.TTY+80 .DA /S.DCB.TTY+160 .DA /S.DCB.TTY+240 .DA /S.DCB.TTY+320 .DA /S.DCB.TTY+400 .DA /S.DCB.TTY+480 .DA /S.DCB.TTY+560 .DA /S.DCB.TTY+640 .DA /S.DCB.TTY+720 .DA /S.DCB.TTY+800 .DA /S.DCB.TTY+880 .DA /S.DCB.TTY+960 .DA /S.DCB.TTY+1040 .DA /S.DCB.TTY+1120 .DA /S.DCB.TTY+1200 .DA /S.DCB.TTY+1280 .DA /S.DCB.TTY+1360 .DA /S.DCB.TTY+1440 .DA /S.DCB.TTY+1520 .DA /S.DCB.TTY+1600 .DA /S.DCB.TTY+1680 .DA /S.DCB.TTY+1760 .DA /S.DCB.TTY+1840 *-------------------------------------- MAN SAVE usr/src/sys/kernel.s.termx LOAD usr/src/sys/kernel.s ASM