From f3857cd81523cdc5ef0b65bc6f9913b1770f85d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 9 Sep 2018 10:11:42 +0200 Subject: [PATCH] Kernel 0.9.2 --- .Floppies/A2OSX.BOOT.po | Bin 143360 -> 143360 bytes .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/TELNET.S.txt | 49 +++++-- DRV/CONSOLE.DRV.S.txt | 271 +++++++++++++++++++++++++++------------ INC/NET.TELNET.I.txt | 5 +- LIB/LIBTCPIP.S.TCP.txt | 25 +++- SBIN/SHELL.S.CL.txt | 21 ++- SBIN/SHELL.S.txt | 4 +- SYS/KERNEL.S.BIN.txt | 16 ++- 10 files changed, 273 insertions(+), 118 deletions(-) diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 71a1d22f5eb460a379e1d8a0727f5918a80f0fff..7a6e4817cc820672c47abc3b085c025cb083c315 100644 GIT binary patch delta 10264 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%0D2?c-Il!E(={#m4bDbij7ZHY#R0%tSM72l5p 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 Gcm6NKh7A<} diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index e8ee32a4ec694eb30a07ddeaa537194052df3280..c97382b4f96a69e72bd87607cd80704715566916 100644 GIT binary patch delta 28333 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

XaJFp_pCu?dIs02p|>dPA= z2n-RS=B3u<*`uSY)6=I`FG$qx!97O=1{{)W%zYU{9A0oaV(r3_OX=u5?{fa=s3Q`9ciSRgx^CDrX$6@87;FhC5&s;bJI& zyx{8bVa#L?t6*g}wp98gw7j+{uLW1@JlIbuNyOIFHc^tFQy8< z0dq=xVEf(}Zcs7*EldP{teIb3RTZp{%o@6=sf7gyPsf3Q>^u4yj0|Ce&%-t=mH?f> z&^R@>G(;eD9H>j>>AN$SF)Vs$fg3iGuA>MJo^w{nZ%uM%SyCuJ;cgvQ6 z7{yD?{1M|U2s%BBYXN zqpikPfRMDSig-foszT|`V@_3md9Xl8eBy3mYqS zBe)3ms|!0S@r{r9%#F>IWR~n8^Smmv0T4=3So5z*=3Rf3k*nf%MRxpkSx^Mr#Sq(o zeU@C?j5pYfYe;L-ZEPWd1;fi>-C#uvDY@U0^-@iWHxJA|s~s91++Qa!g)aEsp2${| z#uM-siPiPDF`T*I9mg0d8-TlrHS-^eBSfmaH-QTj)88N6l%58sf_Xns%+TP`C46#B z{z+-lG5HW>+#gwviJVKN%?l4 zPvbZJ(DaOMOJ8cka_-h=Iy1e6*9W|V?8 zgeqm1;a}@M{A`3pmP?kC0${F+G4Ze22*{*Gotz!h6zfF-D zfj;g63j#^{5HQ7SrXp++uQ{d#l7A3ga3frE!j@L0@!s3bz$Aoivho^@Uw*q;YMYD8 z?YEoWs(BC=tleZY%sXE)l1u?*9|dYc*Fk=xx2Bf}p~?6_Ao#>Y5*B18uzck&dT$vs zO;wnp2^e2sE^v!(qthu7Eh`aHaUjXe+fjnnBTl;SBL|2{NZjg3j1Z-HzQ%=O^;V+d{o?OYC4}lBvk`ejqeMFo>#UD-eM??qfk6}p6$7L5_pP5g{ z!6Q@cXS9lG;ro6rsmf+>x;+4{%wH(#^O^BWVi243lk#8BQ*uaC<(c`kkjN5>J~V!X zZ0rWcujTS6dX{3G$<34JcaX@=SWjncK%C({C)ZBF^Eezk_)PlfGn4x1%m8P+)Pajh z%c&6LtQREj>NDp>DNOlEX2Nf1cD_WsVNF*LBS51T$9OY-%O6}~Op8u_MM^=IpIN21^{ME@HO6WnlXFI zAJJ^y>qHzux*}S7X3c(V(ZuTrZ=y!dTjOfX#XSX!bS;cS zgw&XSPSyAe4dY*B2QYT}+xX6XhY);fHCh`)7XzlWc&&*;K5=(8o#kT>p}N zDMR;}?~|`-KJ(wI#G1w?1hakmHAVdYQAKd>0?EnlFyHa7DQbR(rsI<3^#5u>u=WL5 z^L(iV7s|tHFe2u^<113~Vm9J=9-*u?>EwECHgNK6IwZV+MzB-auPA9oA!NDt|q zWGn!4>ME1mcD&gWPi2!IZA_AM{f49)YHN$Y^an9|*d+_k_fUBi#BDf~n~7(91XE5~ zIooB!-9!lkQ?;B-SuJ_0Y~XDl(VJ`=&%MobZOC-na8Xhy8*m-)TCOk>gV8|*A8nFE0pV>%EW}rxNEF2;7nuTMxEh+>fS$z&4VkGD2vlud9zaaVuKVOasw+-rH>i zw&7N^pn;3gYWp&lQxYz1;S#iEVd4rjGjRV|hz7Twg=khv(RiC}2yJO^v*tV?9%kbH zvl5iiDyoexH_EeQy|}Dbu#bQF9RN-jo+vTnfMh`*M!TMaCjw3vgJu$NLQD;FUZRG+ zdOxrQ#pq><(aU9nWruCpT!Qu62l_&TgZ&rNn1u)UvF{q0&MQz|&gJ~8_+8&M^5RDn zLD)=3B?Dq*(+Xtf)yR~Z!gWj_Kcu}EGLx%Hi&)k*QUYpiI2=9P zaJ^#n2FYs4jePm{jLGqvP*$>K+^k0BJIN-z-;?u7?wGlQT)%c~I%eCyY&Sl17&67x~wHrt3{E$Y!8V_w{f^oOk@%VF*tcL-pSdGD0;>SLYT zyF0q5D0AJV$dO&)yZdVzH1AP_5U_WzB;@@f2mlQ-7N3|BARyDSn#I z?qAdN*)s-G#r0x<*J1%atNQkwnk>)T_>E^~6vtmo_ATo-5D}&U^Z+eK{UtQx|E*M& z9hmgVSUEharX~!w>{nEM9LN7ISszF$bNwMX$ z$>iiWZG6L78Ab88l1!TamsAqwpVd#ysK2Py`&UUoe;d5J-jTeM3C6sCJ5k=|yC6#| z1(79xM+N6Us0@nN0GfGEbrHYK#qXmad;%)?0SX%bl&?GJAL7ID5%p87(vOKD+|U9X z{4eALKC$uYvon10f2(#dF+N4Q`5)B|E+`*Afh~-*`I)MK6Ti<t7PJ|0(8B_$z!HOx|D7HC(K5*l_h`y5!DI*FnVnF+Gj4bi1{irmO2KlSW64NX1~H zx33cxFIkzo3ltrhG}nas&XNODoXs;nGm5kvUiq0(uDN;BXGUp;M`l)d`EI0U`E0d# zp=`nYMb!%qu?j!Gm5K)V^Pd^j<+-w`2T#By7R--S)xbopYpD+-zAIl*DIh9kw(3IO z__pnMH5YceU=f-I{)xlc)-&{6rhL!u-=f*OxF-!6#-f~s{Gx~+GF)rb8uOY%P z8yav@fvr?r)Awe`D?a$5YakLcb3pV(CKaZO);OZ*P}j>tF!1Q2x9P<79MZa-(xjaec2e^yeHPm_47A2 zW&}0{yf6ao9LTa;RvjY-oM_}R@2U2Ywi7J6B}5SxopG96?fO!* zlN++n2v*}rYrLJv9JMG7u_l;Nr{r31U&f#B$Oy#4Dakg-yrN}xc$xA-EF?SOAh1#O z|8&*=6{`PDXy06!>UXpKB9_r&^}AK|+p{X!Z-Spg?We6}fe7`RCi7V178i)r9BGQk zqH9@3o7L-f+3Vaj+~u$b;%k%rTPORFx89ySycFIN9S}6Zna?>xQnk!zmc4-l(2<}5 z%Td5{=J*1%RiC9a>e)(o8|`(;qffjb*AW-B1^JF~wQKOi*aY&O;|qYizL};-%o5cW zB`WV$S#s0mWjyfSKF8qN_~g6P!+GKv-DT5MOdIiOB$Y zHSPl-0vyQ))Qpf|+SejM1uc6X(58T0F&BZ#Qsd0{v4l80K*_{39evd?!GvNRODHFzIHOqKH08m*g*8EiD)Og|YrJl(G{A{0b`-6Seq9}^)Q%G=Z1$@*KZ9ur%GkG!?8 zfUA%3yPF&yZJm51ZM}FTt$TySS)6C0I+4cpe(za=qy)HWKGJ|u^oF?+7H-us0$$Ay zt2}OPC{8*RCz}-~0PkYN$ri~;?lv3m_{8+3`Oi`Butm=$I~fpE>Zv$ts*5UhOTJ7* zUP!qyZ|{k0nSID6R}0m4pxU&4UVe>USu*goga=U~e<#_n{Kj`Qug$xQC$7;w+HMg| zqYaIgn#FMfT4}GJH@vksL5shsCDF5e6X^%z4`QY=KOk3{vE98mDq7x{n7ssra6&0_ z4WO^Izh}QrXts3~AMe5dcV$I{x#F=5Kybr&r7F>}d2@ekU;v=lX$h7C6xJ&Sae;i( zhv|T1*_8j|yF+G49>7;&WQ;>z@$&N9{H~Chx9}aYcI5dLc;4QVfZ+k)l@&;w^|#Kc;gW>I2+h2 z^8$4x)kui4fUD7aH$d1_Z3@Q8|5(z_18pzhSUTyEw2_N(p79BP@d!@FYR$|z%}%ji zlCfUS4c3BzLwS~p$-*5u1or4>v+J0DBNkbWtW+~kMu-9V>ac3T3EG5ZmeZN6D*hw^ zwoIftW2ij$7*si;g14}dOkp@~m5~y~+xSJTW|4n8)*qSQPyzJfqqs9rb`JkZt66$d zmpJTXZUnc|1WrYT8olx`SUh3o*g>bWBGji}9>AV9!2PStB^iS<1i**DRQekMyVUXQ zZmNu3V@Tdg5*RgBnAY^A#tZ)atsxF@-%esn= zo`rU&H>7+=h1|AXt;G0EsY|harv46tc}&R(Z}1`BMq=vn)qZA-$f5RJOALu7gi8dL zJczpyLz<+;0^b&T-sZcGFTFn9>%Ts!tW&$g%o}+39&^T~8&!|h8)x}=y8K z{znt>4+rb&5?lIvyAwjCEnstwYkc-mbG8G=6=Z|W#9tJ6>Zn=aApP}UVR7&qkC+Aa zz?V2HJqncmf1<$jtgp~gIkVx|47<+3t;dezX&@UfIBpcw+r>kkmYI>2CUvi}I!qlJ znw+YIcr@Em;MS%xiBz^h;3j|UxZ&ql9yeS?8A{{h{K+9f5lIRvquAs>Ic^lWoK}(H zp4ian)n+|^^!IpjdZ~KEJT&GJ^PE~JT(M{376JNDRG)fU9DmIvEdH8HKHvBU)37z* ztbPQKbS*82hF<-6&dvvljK%jc?`H%sL9*!lS9p(ue}K zAlE~yI-Or-6^1`bA)t*tkW7d_-sniT6-BsF>MYcvqEjc~9c6JQ?`@ZwRD|@*hP~Fd zoOxGE+iL9ds>WJ5!g=ece(t>WvYI?Ilnl9^`phn}NXHG?~$c#ga^SVcTp=Cx`Xmr!sWPfsu(4*6;DX3s^9!g=zDPTli6fS2wQ zgWF;Wu*A&yYJ*?QiWZKW3ya3ig~gIw=}9yfPPUHh9H%6&ah)pr>|erf{JrU$d>Sza zA1F%ym47xP)D{Bp0Vj;*;gtwHuWy@vHvg#9IW4|XS_npm{MWrn4g_MIlrQ1kEc-fc zL}MsL8e)qa$}y$4o-mM1-v-9b?W(T;7|)S6p@?E!{W${~?Q>Bq&_#2dWV^n#f&OrU zn1|wuEG>Y{9%=iFDaVXnWrp-o%^en>sd}KA*)MCT$g%-x)$4<(fmfqP;=*v`AQhc8OmQ|by8 z$}mn%75pE+b+I!)2X?gODUm5%gulZw=I?vGt+aqEq8a(Hsg*H+S*BD@$-ATtj%IuE zPci>4r$6ilAEFmdC~6>hfmVLDYA L.LIBTCPIP @@ -175,14 +177,16 @@ CS.RUN.LOOP >SLEEP tay beq .2 no char - rts + jmp CS.RUN.SKTERR .1 >PUSHYA len +* lda #'@' +* >SYSCALL putchar >PUSHW ZPBufPtr ldy #S.PS.hStdOut lda (pPs),y >SYSCALL write - bcs CS.RUN.ERR + bcs .11 .2 >PUSHWI BUFSIZE >PUSHW ZPBufPtr @@ -191,31 +195,50 @@ CS.RUN.LOOP >SLEEP >SYSCALL read bcc .3 tay - beq CS.RUN.LOOP + beq CS.RUN.LOOP no char from STDIN - >PUSHA - >PUSHBI 1 - >LDYA L.MSG.SKTERR - >SYSCALL printf - rts +.11 jmp CS.RUN.IOERR .3 >STYA ZPBufLen - lda (ZPBufPtr) cmp #3 Ctrl-C - beq .9 + beq CS.RUN.USER >PUSHB.G hSocket >PUSHW ZPBufPtr >PUSHW ZPBufLen >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.Write - bcs CS.RUN.ERR + bcs CS.RUN.SKTERR jmp CS.RUN.LOOP .9 lda #0 sec -CS.RUN.ERR rts + rts +*-------------------------------------- +CS.RUN.SKTERR pha + >PUSHA + >PUSHBI 1 + >LDYA L.MSG.SKTERR + >SYSCALL printf + pla + sec + rts +*-------------------------------------- +CS.RUN.IOERR pha + >PUSHA + >PUSHBI 1 + >LDYA L.MSG.IOERR + >SYSCALL printf + pla + sec + rts +*-------------------------------------- +CS.RUN.USER >LDYA L.MSG.USER + >SYSCALL puts + lda #3 + sec + rts *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? @@ -268,6 +291,8 @@ MSG.HOSTOK .AZ "Connecting to %d.%d.%d.%d:%D (%s) ...\r\n" MSG.SKTKO .AZ "Failed to Open Socket." MSG.SKTOK .AZ "Connected." MSG.SKTERR .AZ "Socket Error : $%h\r\n" +MSG.IOERR .AZ "I/O Error : $%h\r\n" +MSG.USER .AZ "User interrupt." *-------------------------------------- Socket .DA #S.SOCKET.SOCK.STREAM .BS 1 diff --git a/DRV/CONSOLE.DRV.S.txt b/DRV/CONSOLE.DRV.S.txt index 7bbed3c0..ed7e8c3b 100644 --- a/DRV/CONSOLE.DRV.S.txt +++ b/DRV/CONSOLE.DRV.S.txt @@ -62,14 +62,16 @@ FD.DEV .DA #S.FD.T.CDEV *-------------------------------------- CURSOR.BLINK.SPEED .EQ 2 ESCSEQ.MAXLEN .EQ 16 +OUTBUF.MAXLEN .EQ 32 +IACBUF.MAXLEN .EQ 32 *-------------------------------------- ZPBaseL1 .EQ ZPDRV ZPBaseL2 .EQ ZPDRV+2 ZPTmpWord .EQ ZPDRV+4 ZPTmpBool .EQ ZPDRV+6 -ZPBufPtr .EQ ZPDRV+8 -ZPCount .EQ ZPDRV+10 -ZPIOCTL .EQ ZPDRV+12 +ZPIOCTL .EQ ZPDRV+8 +ZPBufPtr .EQ ZPDRV+10 +ZPCount .EQ ZPDRV+12 *-------------------------------------- DRV.CS.START cld jmp (.1,x) @@ -102,6 +104,12 @@ J.EscSequences .DA Esc.DispAttr m .DA Esc.Scroll r .DA Esc.Erase K .DA Esc.Home H +*-------------------------------------- +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 *-------------------------------------- STATUS >STYA ZPIOCTL @@ -178,12 +186,9 @@ CLOSE lda #S.DIB.S.OPENED *-------------------------------------- READ >STYA ZPIOCTL - jsr Char.Out.Get - bcc .8 IF cs,no char in output buffer... - lda A2osX.ASCREEN cmp #1 is CON active? - bne .9 no....exit + bne .6 no....go check flush... lda A2osX.TIMER16 and #CURSOR.BLINK.SPEED @@ -192,10 +197,10 @@ READ >STYA ZPIOCTL jsr CURBLNK .1 lda OPENAPPLE - bmi .9 Open apple key, not for us... + bmi .6 Open apple key, not for us... lda KBD - bpl .9 + bpl .6 sta KBDSTROBE and #$7F @@ -205,37 +210,43 @@ READ >STYA ZPIOCTL beq .3 dex bne .2 - bra .8 + jsr Char.Out.Put no remap....send char.... + bra .7 and flush .3 lda KeyRemappedIdx,x tay .4 lda KeyRemappedTbl,y - beq .6 + beq .7 end of remap....flush jsr Char.Out.Put iny bra .4 -.6 jsr Char.Out.Get - -.8 pha - - ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y +.6 lda OutCnt + beq .9 no char in output buffer... - sta ZPBufPtr - iny - lda (ZPIOCTL),y - sta ZPBufPtr+1 - - pla - sta (ZPBufPtr) +.7 stz .8+1 + jsr GetPtrsAndCnt - lda #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 - dec + lda #0 sta (ZPIOCTL),y clc @@ -247,29 +258,12 @@ READ >STYA ZPIOCTL *-------------------------------------- WRITE >STYA ZPIOCTL - ldy #S.IOCTL.BUFPTR - lda (ZPIOCTL),y - - sta ZPBufPtr - iny - lda (ZPIOCTL),y - sta ZPBufPtr+1 - - ldy #S.IOCTL.BYTECNT - lda (ZPIOCTL),y - eor #$ff - sta ZPCount - iny - lda (ZPIOCTL),y - eor #$ff - sta ZPCount+1 + jsr GetPtrsAndCnt .2 inc ZPCount bne .3 inc ZPCount+1 - bne .3 - clc - rts + beq .8 .3 lda (ZPBufPtr) inc ZPBufPtr @@ -278,14 +272,17 @@ WRITE >STYA ZPIOCTL .4 jsr WRITE.COUT -.5 bra .2 + bra .2 + +.8 clc + rts *-------------------------------------- WRITE.COUT bit bEscMode bmi COUT.EscMode bit bIACMode bpl .10 - jmp COUT.IACMode + jmp COUT.IAC .10 cmp #IAC bne .1 @@ -460,27 +457,48 @@ COUT.ExecEscSeq stz EscSeqParamCnt .5 jmp (J.EscSequences,x) *-------------------------------------- -COUT.IACMode inc IACBuf +COUT.IAC inc IACBuf ldx IACBuf + cpx #IACBUF.MAXLEN + beq * sta IACBuf,x - cpx #1 VERB ? + cpx #1 CMD ? beq .8 yes, wait for additional bytes - ldy IACBuf+1 get back VERB + ldy IACBuf+1 get back CMD cpy #SB - bne .2 not a SB/SE.... + bne .1 not a SB/SE....stop with CMD/SUBCMD cmp #SE bne .8 wait for ending SE....keep bIACMode - lda IACBuf+2 Get OPT - cmp #TELOPT.TTYPE - bne .7 +.1 cpy #IAC + beq .9 + + tya + sec + sbc #SB + bcc .9 + asl + tax + lda IACBuf+2 Get SUBCMD in A + + cpx #10 + bcs * + jmp (J.COUT.IAC.CMDS,x) + +.9 stz bIACMode + +.8 clc + rts +*-------------------------------------- +COUT.IAC.SB cmp #TELOPT.TTYPE + bne .9 lda IACBuf+3 cmp #SB.SEND - bne .7 + bne .9 ldy #0 @@ -489,26 +507,87 @@ COUT.IACMode inc IACBuf iny cpy #SB.IS.TTYPE.LEN bne .1 - bra .7 + +.9 stz bIACMode + + clc + rts +*-------------------------------------- +COUT.IAC.WILL ldx #WILLDO.CNT-1 + +.1 cmp WILLDO,x + beq .7 + dex + bpl .1 -.2 cpy #DO - bne .6 + ldx #WILLDONT.CNT-1 + +.2 cmp WILLDONT,x + beq .8 + dex + bpl .2 - cmp #TELOPT.TTYPE - bne .7 + bra .9 + +.7 ldx #DO + .HS 2C BIT ABS + +.8 ldx #DONT + + bra COUT.IAC.SendAX + +.9 stz bIACMode + + clc + rts +*-------------------------------------- +COUT.IAC.WONT +.9 stz bIACMode + + clc + rts +*-------------------------------------- +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 - lda #WILL + pla jsr Char.Out.Put - lda #TELOPT.TTYPE + pla jsr Char.Out.Put - bra .7 - -.6 -.7 stz bIACMode +COUT.IAC.SendAX.9 + stz bIACMode -.8 clc + clc + rts +*-------------------------------------- +COUT.IAC.DONT +.9 stz bIACMode + + clc rts *-------------------------------------- RESET jsr CLRSCR @@ -937,7 +1016,7 @@ Char.Out.Put pha lda OutPtr clc adc OutCnt - and #$0f + and #OUTBUF.MAXLEN-1 tax pla sta OutBuffer,x @@ -953,12 +1032,31 @@ Char.Out.Get sec pha txa inc - and #$0f + and #OUTBUF.MAXLEN-1 sta OutPtr pla clc .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 EscCodes >PSTR "MDc" EscSeqCmds >PSTR "mnrKH" @@ -970,17 +1068,6 @@ SB.IS.TTYPE.LEN .EQ *-SB.IS.TTYPE 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 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 *-------------------------------------- -CH .BS 1 -CV .BS 1 -INVFLG .BS 1 -SCROLLTOP .BS 1 -SCROLLBOT .BS 1 -CURON .BS 1 -CURCHAR .BS 1 -OutBuffer .BS 16 -OutPtr .BS 1 -OutCnt .BS 1 -*-------------------------------------- KeyRemapped .HS 05080A0B0D15 L,D,U,CR,R KeyRemappedIdx .HS 050004080C0F KeyRemappedTbl .EQ * @@ -992,10 +1079,30 @@ KeyRemappedRGHT .HS 1B5B4300 esc[C TelnetOpt .DA #IAC,#DO,#TELOPT.ECHO .DA #0 *-------------------------------------- -CtrlChars.Cnt .EQ 7 +WILLDO .DA #TELOPT.BINARY,#TELOPT.SGA,#TELOPT.NAWS +WILLDO.CNT .EQ *-WILLDO +WILLDONT .DA #TELOPT.TSPEED,#TELOPT.LINEMODE +WILLDONT.CNT .EQ *-WILLDONT +DOWILL .DA #TELOPT.BINARY,#TELOPT.SGA,#TELOPT.NAWS +DOWILL.CNT .EQ *-DOWILL +DOWONT .DA #TELOPT.NEWENVIRON +DOWONT.CNT .EQ *-DOWONT +*-------------------------------------- CtrlChars .HS 05080A0C0D151B +CtrlChars.Cnt .EQ *-CtrlChars +*-------------------------------------- +CH .BS 1 +CV .BS 1 +INVFLG .BS 1 +SCROLLTOP .BS 1 +SCROLLBOT .BS 1 +CURON .BS 1 +CURCHAR .BS 1 +OutBuffer .BS OUTBUF.MAXLEN +OutPtr .BS 1 +OutCnt .BS 1 bIACMode .BS 1 -IACBuf .BS 33 +IACBuf .BS OUTBUF.MAXLEN+1 bEscMode .BS 1 bEscModeCSI .BS 1 bEscSeqInNum .BS 1 diff --git a/INC/NET.TELNET.I.txt b/INC/NET.TELNET.I.txt index c63ce3e2..20279822 100644 --- a/INC/NET.TELNET.I.txt +++ b/INC/NET.TELNET.I.txt @@ -8,6 +8,8 @@ TCP.PORT.TELNET .EQ 23 *-------------------------------------- SE .EQ 240 $F0 SB .EQ 250 $FA +SB.IS .EQ 0 +SB.SEND .EQ 1 WILL .EQ 251 $FB WONT .EQ 252 $FC DO .EQ 253 $FD @@ -56,8 +58,5 @@ TELOPT.ENCRYPT .EQ 38 Encryption option TELOPT.NEWENVIRON .EQ 39 New - Environment variables TELOPT.EXOPL .EQ 255 extended-options-list *-------------------------------------- -SB.IS .EQ 0 -SB.SEND .EQ 1 -*-------------------------------------- MAN SAVE /A2OSX.BUILD/INC/NET.TELNET.I diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index c31f8b01..04a1ae6f 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -258,6 +258,20 @@ TCP.IN.JMP.ESTBLSH ora #S.TCP.OPTIONS.ACK ACK the FIN.... sta (ZPPtrSKT),y + jsr SKT.GetTCB + + ldx #3 + ldy #S.TCP.ACKNUM+3 + + sec + +.3 lda SKT.TCBCache+S.TCB.OUTACKNUM,x + adc #0 + sta SKT.TCBCache+S.TCB.OUTACKNUM,x + dey + dex + bpl .3 + jsr TCP.OUT.I SKT.GetTCB called, try to ACK the FIN bcs .9 @@ -275,8 +289,8 @@ TCP.IN.JMP.CLWAIT TCP.IN.JMP.LASTACK ldy #S.TCP.OPTIONS only accept ACK packet lda (ZPFrameInPtr),y - cmp #S.TCP.OPTIONS.ACK - bne .8 + bit #S.TCP.OPTIONS.ACK + beq .8 jmp SKT.Destroy @@ -318,8 +332,8 @@ TCP.IN.JMP.FINWT2.1 TCP.IN.JMP.CLOSING ldy #S.TCP.OPTIONS only accept ACK packet lda (ZPFrameInPtr),y - cmp #S.TCP.OPTIONS.ACK - bne .1 + bit #S.TCP.OPTIONS.ACK + beq .1 ldy #S.SOCKET.TCP.STATUS lda #S.SOCKET.TCP.STATUS.TIMEWT @@ -331,8 +345,7 @@ TCP.IN.JMP.CLOSING TCP.IN.JMP.TIMEWT *-------------------------------------- TCP.IN.JMP.CLOSED - clc - rts + jmp SKT.Destroy *-------------------------------------- TCP.IN.SetDataInPtrAndLen ldy #S.IP.TOTAL.LENGTH+1 diff --git a/SBIN/SHELL.S.CL.txt b/SBIN/SHELL.S.CL.txt index ca89d95e..4dd31497 100644 --- a/SBIN/SHELL.S.CL.txt +++ b/SBIN/SHELL.S.CL.txt @@ -60,13 +60,12 @@ CL.CHARIN tax .9 clc rts *-------------------------------------- -CL.CHARIN.CTRL cpx #13 CR +CL.CHARIN.CTRL cpx #C.CR bne .10 - txa - >SYSCALL PutChar - lda #10 - >SYSCALL PutChar + >PUSHBI 0 + >LDYA L.MSG.ECHOCRLF + >SYSCALL printf >LDA.G CmdBufPtr tay @@ -80,7 +79,7 @@ CL.CHARIN.CTRL cpx #13 CR clc rts -.10 cpx #$1B esc +.10 cpx #C.ESC bne .11 lda #$ff @@ -165,7 +164,7 @@ CL.BS >LDA.G CmdBufPtr dec sta (pData),y - lda #8 + lda #C.BS >SYSCALL PutChar .9 rts *-------------------------------------- @@ -176,7 +175,7 @@ CL.NAK >LDA.G CmdBufPtr inc >STA.G CmdBufPtr - lda #21 + lda #C.FS >SYSCALL PutChar .9 rts *-------------------------------------- @@ -196,7 +195,7 @@ CL.DEL >LDA.G CmdBuflen >LDA.G CmdBufPtr beq CL.PrintEOL.8 - lda #8 + lda #C.BS >SYSCALL PutChar >DEC.G CmdBufPtr @@ -242,13 +241,13 @@ CL.PrintEOL >LDA.G CmdBufPtr pha - lda #8 + lda #C.BS >SYSCALL PutChar pla inc bra .3 -.4 lda #8 +.4 lda #C.BS >SYSCALL PutChar CL.PrintEOL.8 clc diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index 22ee9ecd..ea6bda7c 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -46,6 +46,7 @@ CS.START cld L.MSG.GREETINGS .DA MSG.GREETINGS L.MSG.PROMPT .DA MSG.PROMPT L.MSG.ECHO .DA MSG.ECHO +L.MSG.ECHOCRLF .DA MSG.ECHOCRLF L.MSG.ERROR .DA MSG.ERROR L.MSG.PRINTENV .DA MSG.PRINTENV L.MSG.CSHERR .DA MSG.CSHERR @@ -358,7 +359,8 @@ INTCMDS .AZ "CD" *-------------------------------------- MSG.GREETINGS .AZ "\r\nA2osX-Shell %d.%d\r\n\r\n" MSG.PROMPT .AZ "$ " -MSG.ECHO .AZ ">%s\r\n" +MSG.ECHO .AS ">%s" +MSG.ECHOCRLF .AZ "\r\n" MSG.ERROR .AZ "[$%h]:%S.\r\n" MSG.PRINTENV .AZ "%s=%s\r\n" MSG.CSHERR .AZ "^\r\nLine #%D:" diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index bb8fa3d7..57f0c39a 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -429,9 +429,19 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE .1 lda (ZPPtr1),y Start Relocate JMP table tax LO in X iny - ora (ZPPtr1),y ORA with HI - beq .2 $0000 = end of table + lda (ZPPtr1),y HI in A + beq .2 $00xx = end of table + cpx BIN.R.CS.Start + sbc BIN.R.CS.Start+1 + bcc .11 addr < BIN.R.CS.Start, out of range + + txa Get back LO + cpx BIN.R.End + lda (ZPPtr1),y Get HI + sbc BIN.R.End+1 + bcs .11 addr > BIN.R.End, out of range + dey txa get back LO clc @@ -443,7 +453,7 @@ BIN.RelDrv ldy #H.BIN.DRV.REL.TABLE adc BIN.R.Offset+1 sta (ZPPtr1),y - iny +.11 iny bra .1 *--------------------------------------