Kernel 0.9.1 : More TELNET support....

This commit is contained in:
Rémy GIBERT 2017-10-05 17:39:17 +02:00
parent bad4a3fc8e
commit 04c739f318
6 changed files with 203 additions and 134 deletions

Binary file not shown.

Binary file not shown.

View File

@ -11,7 +11,6 @@ AUTO 6
.INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/MACROS.I
.INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/IO.I .INB /A2OSX.BUILD/INC/IO.I
.INB /A2OSX.BUILD/INC/MLI.ERR.I
.INB /A2OSX.BUILD/INC/NET.TELNET.I .INB /A2OSX.BUILD/INC/NET.TELNET.I
*-------------------------------------- *--------------------------------------
CURSOR.BLINK.SPEED .EQ 8 CURSOR.BLINK.SPEED .EQ 8
@ -175,11 +174,14 @@ READ jsr Char.Out.Get
WRITE bit bEscMode WRITE bit bEscMode
bmi COUT.EscMode bmi COUT.EscMode
bit bIACMode bit bIACMode
bmi COUT.IACMode bpl .10
cmp #IAC jmp COUT.IACMode
.10 cmp #IAC
bne .1 bne .1
sta bIACMode sta bIACMode
stz IACBuf
clc clc
rts rts
@ -198,10 +200,11 @@ WRITE bit bEscMode
*-------------------------------------- *--------------------------------------
FS ldx CH FS ldx CH
cpx #79 cpx #79
beq .8 beq FS.8
inc CH inc CH
.8 clc
FS.8 clc
rts rts
*-------------------------------------- *--------------------------------------
DEL ldx CH DEL ldx CH
@ -210,7 +213,7 @@ DEL ldx CH
bra .3 bra .3
.1 ldy CV .1 ldy CV
beq .8 beq FS.8
lda #79 lda #79
sta CH sta CH
@ -221,9 +224,6 @@ DEL ldx CH
ldx CH ldx CH
ldy CV ldy CV
jmp SetCharAtXY jmp SetCharAtXY
.8 clc
rts
*-------------------------------------- *--------------------------------------
COUT.Ctrl ldx #CtrlChars.Cnt-1 COUT.Ctrl ldx #CtrlChars.Cnt-1
@ -239,17 +239,6 @@ COUT.Ctrl ldx #CtrlChars.Cnt-1
tax tax
jmp (J.CtrlChars,x) jmp (J.CtrlChars,x)
*-------------------------------------- *--------------------------------------
COUT.IACMode tax
bmi .8 go store 2nd byte (WILL, WONT....)
* 3rd byte...option...
* ignore all for now
* reset bIACMode
.8 sta bIACMode
clc
rts
*--------------------------------------
COUT.EscMode bit bEscModeCSI COUT.EscMode bit bEscModeCSI
bmi COUT.EscModeCSI bmi COUT.EscModeCSI
cmp #'[' cmp #'['
@ -363,6 +352,44 @@ COUT.ExecEscSeq stz EscSeqParamCnt
.5 jmp (J.EscSequences,x) .5 jmp (J.EscSequences,x)
*-------------------------------------- *--------------------------------------
COUT.IACMode inc IACBuf
ldx IACBuf
sta IACBuf,x
cpx #1 VERB ?
beq .8 yes, wait for additional bytes
ldy IACBuf+1 get back VERB
cpy #SB
bne .7 not a SB/SE....end of SEQ
cmp #SE
bne .8 wait for ending SE....keep bIACMode
lda IACBuf+2 Get OPT
cmp #TELOPT.TTYPE
bne .7
lda IACBuf+3
cmp #SB.SEND
bne .7
ldy #0
.1 lda SB.IS.TTYPE,y
jsr Char.Out.Put
iny
cpy #SB.IS.TTYPE.LEN
bne .1
.7
stz bIACMode
.8 clc
rts
*--------------------------------------
RESET jsr CLRSCR RESET jsr CLRSCR
lda #0 lda #0
sta SCROLLTOP sta SCROLLTOP
@ -853,6 +880,7 @@ TelnetOpt .DA #IAC,#DO,#TELOPT.ECHO
CtrlChars.Cnt .EQ 7 CtrlChars.Cnt .EQ 7
CtrlChars .HS 05080A0C0D151B CtrlChars .HS 05080A0C0D151B
bIACMode .BS 1 bIACMode .BS 1
IACBuf .BS 33
bEscMode .BS 1 bEscMode .BS 1
bEscModeCSI .BS 1 bEscModeCSI .BS 1
bEscSeqInNum .BS 1 bEscSeqInNum .BS 1
@ -867,7 +895,11 @@ DEVSTAT .DA #S.DEVSTAT.S.WRITE+S.DEVSTAT.S.READ
.DA #S.DEVSTAT.T.CHAR .DA #S.DEVSTAT.T.CHAR
.DA #0 .DA #0
.DA $0900 .DA $0900
ENQ.String >CSTR "A2osXTERM" ENQ.String >CSTR "A2osXTERM"
SB.IS.TTYPE .DA #IAC,#SB,#TELOPT.TTYPE,#SB.IS
.AS 'A2osXTERM'
.DA #IAC,#SE
SB.IS.TTYPE.LEN .EQ *-SB.IS.TTYPE
*-------------------------------------- *--------------------------------------
MAN MAN
SAVE /A2OSX.SRC/DRV/CONSOLE.DRV.S SAVE /A2OSX.SRC/DRV/CONSOLE.DRV.S

View File

@ -6,12 +6,10 @@ AUTO 6
*-------------------------------------- *--------------------------------------
* https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/jb-dev/sysroot/usr/include/arpa/telnet.h * https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6/+/jb-dev/sysroot/usr/include/arpa/telnet.h
*-------------------------------------- *--------------------------------------
TCP.PORT.TELNET .EQ 23 TCP.PORT.TELNET .EQ 23
*-------------------------------------- *--------------------------------------
SE .EQ 240 SE .EQ 240 $F0
SB .EQ 250 SB .EQ 250 $FA
SB.IS .EQ 0
SB.SEND .EQ 1
WILL .EQ 251 $FB WILL .EQ 251 $FB
WONT .EQ 252 $FC WONT .EQ 252 $FC
DO .EQ 253 $FD DO .EQ 253 $FD
@ -60,5 +58,8 @@ TELOPT.ENCRYPT .EQ 38 Encryption option
TELOPT.NEWENVIRON .EQ 39 New - Environment variables TELOPT.NEWENVIRON .EQ 39 New - Environment variables
TELOPT.EXOPL .EQ 255 extended-options-list TELOPT.EXOPL .EQ 255 extended-options-list
*-------------------------------------- *--------------------------------------
SB.IS .EQ 0
SB.SEND .EQ 1
*--------------------------------------
MAN MAN
SAVE /A2OSX.BUILD/INC/NET.TELNET.I SAVE /A2OSX.BUILD/INC/NET.TELNET.I

View File

@ -12,7 +12,7 @@ AUTO 6
.INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/A2OSX.I
.INB /A2OSX.BUILD/INC/NET.TELNET.I .INB /A2OSX.BUILD/INC/NET.TELNET.I
*-------------------------------------- *--------------------------------------
TIMEOUT.MAX .EQ 10 1 sec. TIMEOUT.MAX .EQ 100 1 sec.
*-------------------------------------- *--------------------------------------
ZPTmp1 .EQ ZPBIN ZPTmp1 .EQ ZPBIN
*-------------------------------------- *--------------------------------------
@ -23,9 +23,10 @@ CS.START cld
.DA #$61 6502,Level 1 (65c02) .DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1 .DA #1 BIN Layout Version 1
.DA 0 .DA 0
.DA CS.END-CS.START .DA CS.END-CS.START CS
.DA DS.END-DS.START Data Segment to Allocate .DA DS.END-DS.START DS
.DA 16 SS .DA #16 SS
.DA #2 ZP
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
* Relocation Table * Relocation Table
@ -35,9 +36,11 @@ CS.START cld
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE L.MSG.USAGE .DA MSG.USAGE
L.MSG.TELNET.OPT .DA MSG.TELNET.OPT L.MSG.TELNETOPT .DA MSG.TELNETOPT
L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.GREETINGS .DA MSG.GREETINGS
L.TERM .DA TERM L.ENV.TERM .DA ENV.TERM
L.HEX .DA HEX
L.HEX2 .DA HEX2
.DA 0 End Of Reloc Table .DA 0 End Of Reloc Table
*-------------------------------------- *--------------------------------------
CS.INIT ldy #S.PS.ARGC CS.INIT ldy #S.PS.ARGC
@ -82,115 +85,52 @@ CS.INIT ldy #S.PS.ARGC
sec sec
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
CS.RUN jsr Init.Timeout CS.RUN >SYSCALL Sleep
.66 >SYSCALL Sleep
>SYSCALL GetChar >SYSCALL GetChar
bcc .1 bcs CS.RUN
bcs .66
* jsr Wait.Timeout .11 jsr PRINTA2
* bcc .66 >SYSCALL Sleep
>SYSCALL GetChar
bcc .11
jsr Init.Timeout
* jmp .2 ldy #0
.1 lda MSG.TELNETOPT,y
phy
>SYSCALL PutChar.A
ply
iny
cpy #MSG.TELNETOPT.LEN
bne .1
.10 >SYSCALL Sleep * >LDYA L.MSG.TELNETOPT
>SYSCALL GetChar * >SYSCALL PrintF.YA
bcs .1 * bcs *
CS.RUN.LOOP
.1 >SYSCALL Sleep
.1 cmp #IAC
beq .11
jmp .2
.11 >SYSCALL Sleep
>SYSCALL GetChar >SYSCALL GetChar
bcs .11 bcs .4
ldy #IAC.VERB jsr PRINTA
sta (pData),y
.12 >SYSCALL Sleep
>SYSCALL GetChar
bcs .12
ldy #IAC.OPT
sta (pData),y
ldy #IAC.VERB
lda (pData),y
cmp #SB
bne .10
ldy #IAC.OPT
lda (pData),y
cmp #TELOPT.TTYPE
bne .15 only interested in Term Type, go get IAC,SE
.13 >SYSCALL Sleep
>SYSCALL GetChar
bcs .13
cmp #SB.IS not a valid reply, go get IAC,SE
bne .15
lda #0
sta (pData) reset IAC.TERM
.14 >SYSCALL Sleep
>SYSCALL GetChar
bcs .14
cmp #IAC cmp #IAC
beq .16 end of DATA, go wait SE beq CS.RUN.IACMODE
pha
lda (pData)
inc
tay
sta (pData)
pla
sta (pData),y
bra .14
.15 >SYSCALL Sleep
>SYSCALL GetChar
bcs .15
cmp #IAC
bne .15
.16 >SYSCALL Sleep
>SYSCALL GetChar
bcs .16
cmp #SE
bne .16
jmp .10
.2
lda (pData)
beq .5
>PUSHW pData
>PUSHW L.TERM
>SYSCALL SetEnv
.5
>LDYA L.MSG.TELNET.OPT
>SYSCALL PrintF.YA
bcs *
.4 jsr Wait.Timeout
bcc .1
>LDYA L.MSG.GREETINGS >LDYA L.MSG.GREETINGS
>SYSCALL PrintF.YA >SYSCALL PrintF.YA
bcs .8 unable to send greetings...loop.. bcs .8 unable to send greetings...reset..
ldy #hBinName ldy #hBinName
lda (pData),y lda (pData),y
@ -201,6 +141,87 @@ CS.RUN jsr Init.Timeout
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.IACMODE >SYSCALL Sleep Wait for IAC VERB (or SB)
>SYSCALL GetChar
bcs CS.RUN.IACMODE
>STA.G IAC.VERB
jsr PRINTA
.1 >SYSCALL Sleep Wait for IAC OPT
>SYSCALL GetChar
bcs .1
>STA.G IAC.OPT
jsr PRINTA
>LDA.G IAC.VERB
cmp #SB
beq CS.RUN.IACSB
*--------------------------------------
CS.RUN.IACVERB
lda #'.'
>SYSCALL PutChar.A
jmp CS.RUN.LOOP
*--------------------------------------
CS.RUN.IACSB
.1 >SYSCALL Sleep
>SYSCALL GetChar
bcs .1
>STA.G IAC.SB
jsr PRINTA
lda #0
sta (pData) reset IAC.SB.DATA
.2 >SYSCALL Sleep
>SYSCALL GetChar
bcs .2
cmp #IAC
beq .4 end of DATA, go wait SE
pha
jsr PRINTA
ldy #IAC.SB.DATA-1
.3 iny
lda (pData),y
bne .3
pla
sta (pData),y
iny
lda #0
sta (pData),y
bra .2
.4 >SYSCALL Sleep
>SYSCALL GetChar
bcs .4
cmp #SE
bne .8
>LDA.G IAC.OPT
cmp #TELOPT.TTYPE
bne .8
>LDA.G IAC.SB
cmp #SB.IS
bne .8
>PUSHEA.G IAC.SB.DATA
>PUSHW L.ENV.TERM
>SYSCALL SetEnv
.8 lda #':'
>SYSCALL PutChar.A
jmp CS.RUN.LOOP
*--------------------------------------
CS.DOEVENT lda (pEvent) CS.DOEVENT lda (pEvent)
bpl .9 is it a TIMER event? bpl .9 is it a TIMER event?
@ -237,12 +258,24 @@ Wait.TimeOut sec
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
PRINTA pha
>PUSHA
>LDYA L.HEX
>SYSCALL PrintF.YA
pla
rts
*--------------------------------------
PRINTA2 pha
>PUSHA
>LDYA L.HEX2
>SYSCALL PrintF.YA
pla
rts
CS.END CS.END
MSG.USAGE >CSTR "Usage : GETTY <DEV> <PROGRAM>\r\n" MSG.USAGE >CSTR "Usage : GETTY <DEV> <PROGRAM>\r\n"
MSG.TELNET.OPT MSG.TELNETOPT .DA #IAC,#WILL,#TELOPT.BINARY
* .DA #IAC,#WILL,#TELOPT.BINARY .DA #IAC,#DO,#TELOPT.LINEMODE
* .DA #IAC,#DO,#TELOPT.LINEMODE .DA #IAC,#SB,#TELOPT.LINEMODE,#SB.SEND,#0,#IAC,#SE
* .DA #IAC,#SB,#TELOPT.LINEMODE,#1,#0,#IAC,#SE
.DA #IAC,#DONT,#TELOPT.ECHO .DA #IAC,#DONT,#TELOPT.ECHO
.DA #IAC,#WILL,#TELOPT.ECHO .DA #IAC,#WILL,#TELOPT.ECHO
.DA #IAC,#WILL,#TELOPT.SGA .DA #IAC,#WILL,#TELOPT.SGA
@ -250,19 +283,22 @@ MSG.TELNET.OPT
* .DA #IAC,#DO,#TELOPT.NAWS * .DA #IAC,#DO,#TELOPT.NAWS
.DA #IAC,#DO,#TELOPT.TTYPE .DA #IAC,#DO,#TELOPT.TTYPE
.DA #IAC,#SB,#TELOPT.TTYPE,#SB.SEND,#IAC,#SE .DA #IAC,#SB,#TELOPT.TTYPE,#SB.SEND,#IAC,#SE
.DA #0 MSG.TELNETOPT.LEN .EQ *-MSG.TELNETOPT
MSG.GREETINGS >CSTR "\r\nA2osX-GeTTY\r\n" MSG.GREETINGS >CSTR "\r\nA2osX-GeTTY 0.9.1\r\n"
TERM >CSTR "TERM" ENV.TERM >CSTR "TERM"
HEX >CSTR "[%h]"
HEX2 >CSTR "{%h}"
* \e[12h * \e[12h
*-------------------------------------- *--------------------------------------
.DUMMY .DUMMY
.OR 0 .OR 0
DS.START DS.START
IAC.TERM .BS 64 IAC.SB.DATA .BS 64
hBinName .BS 1 hBinName .BS 1
TimeOut .BS 1 TimeOut .BS 1
IAC.VERB .BS 1 IAC.VERB .BS 1
IAC.OPT .BS 1 IAC.OPT .BS 1
IAC.SB .BS 1
DS.END .ED DS.END .ED
MAN MAN
SAVE /A2OSX.SRC/SBIN/GETTY.S SAVE /A2OSX.SRC/SBIN/GETTY.S

View File

@ -232,7 +232,7 @@ Cmd.Exec.EXT.BIN
>SYSCALL ExecProcessNewEnvYA >SYSCALL ExecProcessNewEnvYA
jmp Cmd.Exec.Done jmp Cmd.Exec.Done
.2 >SYSCALL CreateProcessYA .2 >SYSCALL CreateProcessNewEnvYA
jmp Cmd.Exec.Done jmp Cmd.Exec.Done
*-------------------------------------- *--------------------------------------
Cmd.Exec.EXT.Search Cmd.Exec.EXT.Search