From b9ac24c39e3c97c23e90089f1f2a2e96512e0f2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 24 May 2018 17:21:38 +0200 Subject: [PATCH] Kernel 0.9.1 : TCPIP, code Cleaning and 0.9.1 compliance --- .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/DNSINFO.S.txt | 4 +- BIN/RPCDUMP.S.txt | 3 +- INC/A2osX.I.txt | 2 +- LIB/LIBTCPIP.S.ARP.txt | 7 +-- LIB/LIBTCPIP.S.CFG.txt | 14 ++--- LIB/LIBTCPIP.S.DNS.txt | 8 ++- LIB/LIBTCPIP.S.FRM.txt | 17 ++++-- LIB/LIBTCPIP.S.HST.txt | 125 +++++++++------------------------------ LIB/LIBTCPIP.S.txt | 27 +++++---- README.md | 16 ++--- SYS/KERNEL.S.CORE.txt | 13 ++-- SYS/KERNEL.S.IRQ.txt | 4 +- SYS/KERNEL.S.STDIO.txt | 30 ++++------ 16 files changed, 105 insertions(+), 165 deletions(-) diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 58e381774af358bec73a8e4ea21bc8302f7df933..d21221aae6cdef2906168b046f5bceac73eaa841 100644 GIT binary patch delta 10929 zcmahv2|yFqwsR*7VG#l$5EXR*0Z{}OK!A&pjE# zDVgDv%pM{Ze?E4y+(e1Phv7;%afTp-o^0_5eP2%wu8_pfvliqLgFb#m1R@AhfX5U2 zz_jTz20;;itN#?NJ!eLG<{&sf%TO@Ao9d%rgx@|ONr?YIH7$4MAZ&!6ANn)qVp6AM z<>bfaEY8VI%K&(nKavvv@a)G%xkVj?!AvC*pTHnMvl8`>3l&r9QzK1sQg3=uHM&Vo zwxC8?$n0K4W{%d6CC;YxPY@7B5i#>JVpFrTwQ0Gj+Ic`%ngJpx2c+l)iv+ODoB=_k z^9d0#Z9v7nU=sjrL2AaLtOfIOu+Y+6LPE@wx`|GLrRaql4{&)ovlgW1rC~5ax)`W7 zN!)P#U`>crpbgn^BVV@NGfK+E)SXaUmSr6E%>;J0ZL0C{ay46MnwvcW6`G2(C!%4Vml@lysCk0-K%!OJ4+Sin(ti03m zQwrv^!sgBVqF~M_4xUt)QWuqzQ0!k6=`ZxPNt~obU3E%Pby{J1xQHEf*QU_+M6&s| zKwQ|}g{y&J;-Xl)>A&-1f}gM{sh&t3Gd`*^I*L1?Xp=j~^_+m&`Bf;diCJusOuDFG zx)sjV_1%i*F~giMQGVx)o#h>k9qVLHKUUPxK|KtpE@5Tmn3gTe(63Y+ z>{jr9rM~sIhf?DMszazeg-vH{Z)|r;CK1#Wg|%H(Dl@io7Zm*Em?vB03XW)z`?fVy zd$sMfOBs0!<*(2Z{&-I91x3tBh1`q#=N{+Wga6!P@Z*NJY|rRY$kpo^cqZD2gQpdI z02e7vZ($2PH^cTwS729oy5nKdBiHh#uB()k1khq(b@=DY&r2x;u_l!MHh6bIQoAV1XYGLQ^o zQ~Dk}uW)+y3TZe*3HmU7rAsC+DopovBS&oGr7T#5N(bt*%f0~3KGgc1)9rxa$R|hp zEIw)Xtva=bnWU(UGi5(H&f|hYhv7~7Cs&*3r$S?V1M$bF`Oz;s-4>|QF_Qu-;{qu^ zCCkUKuF7On#Z&R>7XmBc`zW|iGXPOxd)Ce{&ZGzzHF1yKyJ}Nl<>o-vJQ$Jb?o%O) zzYRPJ-|itOC=VrdIS{5rDl4OuY=lh-^j(3K4+HVYgFu4_N>w@^Cc5#4LY8&juMrv<>4W)aD?Azb6&rY1mN|T)!lknh;E_3wrauO2-uiw`K8? z+M-~CcTZ8Uj{0{H)O7%JD%cs(vqY%cSeVw5<&?s_R{mEVBWh^~tD!37_ZYH8XF=5b z;O^$7!N#!WSA&h=vezxcn)d|Nk;pW+cvRy2U>nOu$zEq9Ej1J)hDU|`<~W@tm?DD@ z@b`h54KYBcEu~u8w#-gOPcP6=^G$Wd!=-?dYJRn8cd@6Br&s4Z-m4S7rh_kk0IhSq zt><2uCO*|geQw(NN*Ow93S99Lnr1Stcx)tl(k`*Nw2RK_sA(rH2MjVODxW!I`Hp&E zI=X`LPr#iL3X1OrwABUw$J7rpsKEm2V;mftnqT}7eOrs1z9MxJbc zv-;nv<}h`5*5RDP&mQ*b z@aahHNbHz#c>dv%!`hDAj%PZa?Z6CasF=eg)e?b4i_A-7n^a0rJ52{)twcLbg|8*S z^Mlu7N9^pl-_752OQNAtJ4y_KI2tP7bo{kZnw=f2D~2Tm2}$88Y9yW0Dh(Yr7cbd# zh;#d!Us2)5G!+or(y7_mrOssF&fO-`Nr_bmmJiMp8yuTfcpc6 z%&d0c(*d9TB&@uL_BB)7o8#x}9km8WZMlOb8pvorr+-hmBdIi{Oz&Xyj%rbl!LdnI zD&JOpnmTyY{$nEsDcwGTDHYk`m}f;SY9Kd1E26$S)_Q=ywH`|9Rnzu2XHCdHcCg&x z9A+h9G8kjUd6A(Uq?6YW+OLi>{}zGNB$irRwZ=63t;E!K9Ti~nK${QlF**zZ)V`yj z8V`%8fv9tjapjJ5*LKbb&u!hjsMUF#`>TU_#{r%Ii(smLYqWlVX$)cT2l8d_I^3J# z;5!cf8!Uv*J+D#hoEhzGbAqS)<)|U7?G!JA3U&6VA&An07{?mLFwDd7?W5qc(J^2k z=^|pv9l*myf-yRVfrKhR>r`090v)}$di!~aVXMGA*RO61IPd0n9W?|N5ymX8^>Aov zxHZCp>UQWIoWX&Y-J`1IsL`Wb3hpt+LfT?Mo#5@M86+|&Z3Gk++3w|V$_K+-gSbvU|bTD5vEnqg{L9Xz%8xZS4!j=(ws z1d-n@(P1OBc_o3zv5U9VSwGTIdylg&yiY@^qVx6;YJA5aS{*!$TQ{P2R>9Xs0?Cj!pb;WR9a<5k2 zV+1d@eQ$Uc8%#0tX;)=aSJkL4?$a(TA=l(CcDak4?xJ2OsFFkWn9AW@%*ZZkoPaGz z#SQN&YwBWxy10>DWuJC2!Ckd*wCi0qm&Jv**{CkO%`_Y^B5a}BPr7RDU9}BewT)di z0jup3L9?Vly_ZnaA$#`VQJ9X0si%InCvgp3!y3Ez*d3pAarQ1|S6AiEE;rVJ853Z^ zh(QRoO^0mX>-u&tK~MwE?4W6pAy+*1WM#PN6T_&ni%$0L>P7+_q~AGa;mOL}lO-kG zqLUD_*j&0FATV|s9-n+d!5^`~A?h1rAt;E{VvXMAUe9|8UY9u}oLWq~P;AHEl3Luf z^qrj^K1UQuSKo6m?>o4o3e%W%BPJeEsLKB4VAeUdK~GtQgIVve`?uV`=(2kYp*SzI zJxtQsTuC|{lK*90gy&I34Y|F7JEAasuudIzL}4UUFUyQ%E6g_{sEMdujveb9+r1BWRW&^Dol?t@#Hy$=_Muz&^1*s?IJ(lPDAIm&YPWBw__b^P0!UN zBrHBza`L}UHk>4gBR}K*;&%MSHGNMja=J@0t$R1d>uY z#4NUE(>0UkiL(mc-?p4NtEfGvsK2QAX!ORiY1IeYkvLC5jc*G7dk|^)2Px8KX2BKjcVziUN@g#B>O*AN zDi-G~%v&V%H=!La4^e(Wq0nmF)t?mjGDN=wF6Fj?>#uOHEFvb%%*xEk(x%1sW(1_m z;9l7?;u6%kUj<2=KcZO#D%$wFO0ocbwuw@ky<7R2* zEa(HmLcBzH6A=NA-l2<#=!~p|IsFO&u(tr+6GN$*5c!&Aw^+1P_oSd~%QrIe>0+qD zl6)^F|5D?=rAzGf;>)kBSh?!e*Is`EAbv%bvw`HB zZwtVU_e03uG{kQqdOhJmT=aUB&($Dy`ivRcc@WOWW(jMu7MAYCA&H39#5e%UPMzn5 z!BVe>41=*Z!_b#GSWS!vu$c=MXXo|;O5X=;#eyNYlS#tTx#4nWW~XQO!I=m-5f}0( zb4}=OAhJ9prE3iDy!+R35a~YJN+KVT@oyE-_#JJPBdK`ZdzB2denVSTNG7VPt`UZI zg&~<(|FsH>L=dl1X6m`{`D3?HMCi28)XLEJR$k_AL6?xCbSM zQ=djsC`$WsbkAIxAJH?9=H}9EE^Z!;eW#7Ev@mn&s(G{yy6fiw7Z&!T-;&K^qEMLc z$26R|RB4#qo0WWFHD^VkP<Zau>@bT28ZZ;zI`Wx1+D0-T(Kds2TPQmL1D;ry z%*$c)HoM`2jej?9+We0XYwJD|{geF|mhd{#2REd&A*XK}>73FhGSCPWXeg5f8lwan z*OKb|aQoJdOp42*sJ+pKg98+MXY_LAp3%#df!Y?T^$r7>>;aAW^2w}ML;mIu>DCrG z|Eo%`vxu5Mrt2;yfdD(S6qkW9+vPSdkOfo(@%6S)+s>q3@r{ei^I=G?Zp?T3Lu}>= zbAQU`rC30f&YF)S)_k}=Ej}n$^T!^UA!+zdB4^ zt!T)H(F%C_nD359&*@hux3(DgUoDbmeR5q}Qr(fHy4y*0lH>#O9$TQV*wFJgx`6fx;^G;)saGd!7Ka)rXP06zu8!IHV11f1>CF?8o#O6R{ubPrpx$aj z!gEl46BC^b;q3V29X)%vYkQcOE&u$uLUu_YQ_&6;H-5bK7tinL`ls)>g)Nfuvpbf+-}IP^HJmGmVE1CV_|s# zHcX!Z!`zG40-G{*Jrb5AkKz_lgDqRNj^qOYkyzD`f03vG%)Hqii^RI?kwY-G!(K%V z`Ms{rMr_E}VY5smibB?8if>QuSqBprJE;DLc=GAs_Vnl za69O(3R5$o>KaYO`Wg+ZvZcUtINY2y;2PL5u+v}!_~FvcZ%smD^x^8-v1%17w|F&Z z%EHx5IP73e*;q9*7F5n(W=C-0>QW*d=C^WVduy;KHEmM34hBs#P;LIa(mFTkVi+4; zqp{Ar2x%4#6`f@8XhXb+N}Isp%?q&6F?Qt^jWr$nBOgwoc1rPqpoarx2Q(t;gXr#4 za-OshSCq6fXh#rT6+~~20?Xe#jRx?|!Ga3vmGqS$+L_)QOuJQ|Uao<@<|w-D(`tc; zXD^XzZ|JX!qPwPn5n>RSfe$dK_7bX6(uOgOaL?&I(8PF$l;FoE{1Ci~d3p>QzSNqn zDiv+B&MzhUM{yVVXxEl(>-<(8jTnHLkE_;f{NxJV+p|C@gk7`%xTzLt-!eB(Mj?83 zEF2w#v$Rdd7qQ`eXU+VI1N?1vtc|EidGw?L2yoUlDR?daV6u9ZNdOHwF?0Z8SR$Y_-EvFxkU2r!l*xpyA{9(|llSi;O2*TU&hj9+*Y#kF)#h zta++Z%9sa-!lLd|Dg1X}#WSX&X#K_s1#Bc3NeLJl*aw_~_}m{4)*;gFm&3_NJt1637Lz)C^w=5DWedqm8?(<&IbKQ65sCYDP z`nu%DnPgr88oePbfTlMpFnEKmYm%V_y2gQruSEiB3@h#4Nh+Pnp7bmeY_5t&!76!Z zO~LxsngWQJ+y)9~7`QsQxj7z<3YDwn-dl>SON`6PmsZKu)*`ITB4B$7R_1Ls5}o6MDHZpl`Lr^Yw|d`8h!%7Ly$H5DoF>9BgGy`S! zwR>_O}vKE$IGPfk7sO1-F{%p@B zn!7~9Ha}W>iMAHtVdE0R4@o-iGM#j8HglO4P%~F(?kcS+p3PjPxgNTB4%0)cxQ8@! zJfykbamVj8Y=Pfs*a8p0IZ}mFVZyK;vpop~$u79*cAF0-p^#}8=nNn&<``63=HvLq(Z9GZ+&`at!hMb@Q~WzPA)p{jVPo5SK| zZVr>qEp>BvZW(aMd8sjkmzwib1B9mY=7yp9&Fro~OJf50<;venGRqcl~Xw z&|k4a3)z4n8kF61i*id)q5dXT;VqiGf z+!(|J5J);0&^Bj)&7uqX=>$*Q!U}mE?3An4PI#c2&YG{*8?|WAsX|XX|TIeA?(|4R;wXo z*>5g@;x9|7A;-wSR66a(sc_laPuI56wQV%F*nM2)3k9_{#y+ERXFT&o{Ca#0CE8rZ zJosOPcOPiBl&E_^*LkS1>xT8D_J`U6sCUdK)M%u>a4N(-aY@Z02wv($>iH?WKY%%H za_mw)z@>_7@<17r;mDHnkzkC2z+t_F8GbP1Dj*(!2RJ+>S`K#(>l94WnP8nQnFHbB zRd7GhAq*pDm|~F83-cwIUOz>VcB6Uo%=8l=X=kE+JT+|!rboS>XdlfMj5vj+|y!3dx+0o3Mhuv5S* z;UMrbJgJT2;4}g{a4nO93O#D_SdkwDDIl3eicf%PZf74loSkILh6r@+Dh~M4N1gMf~R>=veD)yangL7K9C0GQv4Q(-#Z0f}<*Qcgk_6J8tD2=L-$( z?gktGCjl&ueFP&8{ts4c{&6}Q69zF*SZj+He+y137cXXg8}g1opD(^^-x4AsvpfYU zQGhuz1x;8YgwCb@|F= z{T!$&hvXA2gi@O|XYgxO(l7rc#cClUh2&em2!wPur1RDeN#~8T;AH2_?3vok++M=c zuL176A#fHGB0t)yL8SM8S-1Xcn{E5QcX0KP!nuvMYEcmRNdwd$qOHr3RMfO{7c?Mq z_dJr4pMBvTSP5CY|8Cy%6|^9W_ckQ%TE5x)KSFEQT0}}mcN1rZy!5pyoY)&R%&kl_ zRS9dgAJmaIL>>Ex;8~eD>6x>I%qA8=+6L-)I3(k|j|j*XUYqLIuJizaE&l^p*n*6H z5CPlwppDsrHU_N~PzCeI$xZE38X@HY-Hkt>8=IY;*}v|XxkDhswIPPIkBEX7z!v7F z!^=C1GvkG zYXy@#cfnof5sCJh(IFJ5zXWS|-eV}gUhBm^~NlkYPja^Kc=M2at7zH$|` z2wT+w3HKi7bwQ<{q0`7E@w##A_OEyD-n;+cH|YHpZM}p7#lO1<)ccC$88aGAKHNfj zks=8oe7Mz{^dLPvg{p#-h`oG<`9kBjUBk%`55W_EMp5J`kwhM#2vowzgRK#y_tsdF F{9pf$w>SU* delta 10855 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 diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index a3e8978960dc64a280006d7e56517662353bb822..8a80a4703e74961a3964642aa34854ec24b639a3 100644 GIT binary patch delta 12347 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 delta 12333 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 J|JTN@{|DvmPbdHY diff --git a/BIN/DNSINFO.S.txt b/BIN/DNSINFO.S.txt index 916d3346..d172137c 100644 --- a/BIN/DNSINFO.S.txt +++ b/BIN/DNSINFO.S.txt @@ -52,7 +52,7 @@ CS.RUN ldy #S.PS.ARGC lda (pPs),y bne CS.RUN.ADD jmp CS.RUN.DUMP - +*-------------------------------------- CS.RUN.ADD cmp #2 beq .1 jmp .9 @@ -82,7 +82,7 @@ CS.RUN.ADD cmp #2 .9 lda #K.E.SYN sec .99 rts - +*-------------------------------------- CS.RUN.DUMP >LIBCALL hLIBTCPIP,LIBTCPIP.DNS.GetCache >STYA ZPPTR1 >LDYA L.MSG0 diff --git a/BIN/RPCDUMP.S.txt b/BIN/RPCDUMP.S.txt index 275444cf..ab4078e4 100644 --- a/BIN/RPCDUMP.S.txt +++ b/BIN/RPCDUMP.S.txt @@ -24,7 +24,8 @@ CS.START cld .DA 0 .DA CS.END-CS.START Code Length To Relocate .DA DS.END-DS.START Data Segment to Allocate - .DA 0 + .DA #16 SS + .DA #4 ZP .DA 0 *-------------------------------------- .1 .DA CS.INIT diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index f50060b1..6895b992 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -27,7 +27,7 @@ A2osX.ATKCALL .EQ $BD06 A2osX.ROMCALL .EQ $BD09 A2osX.BADCALL .EQ $BD0C *-------------------------------------- -A2osx.SLEEP .EQ $BD10 +A2osX.SLEEP .EQ $BD10 *-------------------------------------- * $BEE0->$BEEF : Public Variables *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.ARP.txt b/LIB/LIBTCPIP.S.ARP.txt index 199d40ec..ba89d237 100644 --- a/LIB/LIBTCPIP.S.ARP.txt +++ b/LIB/LIBTCPIP.S.ARP.txt @@ -166,8 +166,7 @@ ARP.IN.REQ ldy #S.ARP.SPA+3 bpl .2 >LDYA L.ARP.REP - ldx #DEVMGR.WRITEBLOCK - jsr NetDevJmp + jsr FRM.Send.YA bra ARP.IN.EXIT ARP.IN.REP lda #K.ARP.TTL @@ -222,9 +221,7 @@ ARP.QUERY.I jsr ARP.FIND.BY.IP bpl .4 >LDYA L.ARP.REQ - ldx #DEVMGR.WRITEBLOCK - jsr NetDevJmp - + jsr FRM.Send.YA bcs .99 lda #K.ARP.PENDING.TTL diff --git a/LIB/LIBTCPIP.S.CFG.txt b/LIB/LIBTCPIP.S.CFG.txt index 4ca1eebc..763ce3b8 100644 --- a/LIB/LIBTCPIP.S.CFG.txt +++ b/LIB/LIBTCPIP.S.CFG.txt @@ -34,12 +34,7 @@ SET.IPCFG >PULLW ZPTmpPtr1 bpl .3 lda IPCFG+S.IPCFG.HDEV - - >SYSCALL GetDevByID.A - >STYA NetDevJmp+1 - - ldx #DEVMGR.STATUS - jsr NetDevJmp + >SYSCALL GetDevStatus.A >STYA ZPTmpPtr2 ldy #S.DSTAT.NIC.FLAGS @@ -48,9 +43,10 @@ SET.IPCFG >PULLW ZPTmpPtr1 and #S.DSTAT.NIC.FLAGS.ARPOFFLOAD beq .4 - >LDYA ZPTmpPtr1 - ldx #DEVMGR.CONTROL - jsr NetDevJmp + >PUSHB IPCFG+S.IPCFG.HDEV + >PUSHBI DEVMGR.CONTROL + >PUSHW ZPTmpPtr1 + >SYSCALL IOCTL .4 lda hDNSSocket1 beq .41 diff --git a/LIB/LIBTCPIP.S.DNS.txt b/LIB/LIBTCPIP.S.DNS.txt index 85191188..3a3506d2 100644 --- a/LIB/LIBTCPIP.S.DNS.txt +++ b/LIB/LIBTCPIP.S.DNS.txt @@ -131,7 +131,7 @@ DNS.REQUEST lda hDNSSocket1 *\-------------------------------------- DNS.Add >PULLW ZPPtrDNS Get host string >PULLW ZPPtrIP Get host IP address - + ldy #3 .1 lda (ZPPtrIP),y @@ -164,6 +164,7 @@ DNS.ADD.I sta DNS.TmpCache sta (ZPCachePtr) ldy #S.DNSCACHE.ID + .3 lda DNS.TmpCache,y sta (ZPCachePtr),y iny @@ -271,7 +272,8 @@ DNS.FIND.FREE >LDYA L.DNS.CACHE .1 lda (ZPCachePtr) beq .8 empty DNS cache entry? - bpl .6 pending.....skip + bit #S.DNSCACHE.STATUS.STATIC+S.DNSCACHE.STATUS.PENDING + bne .6 Static/Pending.....skip ldy #S.DNSCACHE.TTL ldx #3 @@ -319,6 +321,8 @@ DNS.EXPIRE >LDYA L.DNS.CACHE .1 lda (ZPCachePtr) beq .7 empty DNS cache entry? + bit #S.DNSCACHE.STATUS.STATIC + bne .7 ldy #S.DNSCACHE.TTL ldx #4 diff --git a/LIB/LIBTCPIP.S.FRM.txt b/LIB/LIBTCPIP.S.FRM.txt index 98bfc130..fe83030b 100644 --- a/LIB/LIBTCPIP.S.FRM.txt +++ b/LIB/LIBTCPIP.S.FRM.txt @@ -224,8 +224,8 @@ FRM.SendIP ldx #3 Copy SRC.IP even if IP offload bcs FRM.Queue .6 >LDYA ZPFrameOutPtr - ldx #DEVMGR.WRITEBLOCK - jsr NetDevJmp + jsr FRM.Send.YA + bcs FRM.Queue lda hFrameOut @@ -274,9 +274,8 @@ FRM.Retry ldx FRM.QUEUE.Tail jsr IP.SetDestMAC Err is ARP or higher, retry getting MAC bcs .2 still error getting dest MAC -.1 >LDYA ZPFrameOutPtr try sending again to DRV - ldx #DEVMGR.WRITEBLOCK - jsr NetDevJmp +.1 >LDYA ZPFrameOutPtr + jsr FRM.Send.YA try sending again to DRV bcc .3 .2 ldx FRM.QUEUE.Tail save error... @@ -298,6 +297,14 @@ FRM.Retry ldx FRM.QUEUE.Tail .8 rts *-------------------------------------- +FRM.Send.YA pha + >PUSHB IPCFG+S.IPCFG.HDEV + >PUSHBI DEVMGR.WRITEBLOCK + pla + >PUSHYA + >SYSCALL IOCTL try sending again to DRV + rts +*-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.FRM LOAD /A2OSX.SRC/LIB/LIBTCPIP.S diff --git a/LIB/LIBTCPIP.S.HST.txt b/LIB/LIBTCPIP.S.HST.txt index 4dc1e3bf..bed927a8 100644 --- a/LIB/LIBTCPIP.S.HST.txt +++ b/LIB/LIBTCPIP.S.HST.txt @@ -6,7 +6,34 @@ AUTO 4,1 HST.GetByName >PULLW ZPPtrDNS >PULLW ZPPtrIP - jsr HST.ScanIP + lda ZPPtrIP + clc + adc #3 + tay + lda ZPPtrIP+1 + adc #0 + >PUSHYA + + lda ZPPtrIP + clc + adc #2 + tay + lda ZPPtrIP+1 + adc #0 + >PUSHYA + + >LDYA ZPPtrIP + iny + bne .1 + inc +.1 >PUSHYA + + >PUSHW ZPPtrIP + + >PUSHW L.HST.SSScanF + >LDYA ZPPtrDNS + >SYSCALL SScanF.YA + bcc .9 jmp DNS.QUERY.I .9 rts @@ -18,102 +45,6 @@ HST.GetByAddr >PULLW ZPPtrIP sec rts *-------------------------------------- -HST.ScanIP stz HST.IP - - lda (ZPPtrDNS) - beq .9 - - ldy #$ff - -.1 ldx #0 - stx HST.DecStr - -.2 iny - lda (ZPPtrDNS),y - beq .4 - - cmp #'.' - beq .3 - - cmp #'0' - bcc .9 - cmp #'9'+1 - bcs .9 - cpx #3 - beq .9 - inx - sta HST.DecStr,x - bra .2 - -.3 stx HST.DecStr - phy - jsr HST.Dec2Hex - ply - bcc .1 - rts - -.4 txa - beq .5 - - stx HST.DecStr - jsr HST.Dec2Hex - bcs .9 - -.5 ldx HST.IP - cpx #4 - bne .9 - - ldy #3 -.6 lda HST.IP,x - sta (ZPPtrIP),y - dex - dey - bpl .6 - clc - rts - -.9 sec - rts -*-------------------------------------- -HST.Dec2Hex ldy HST.DecStr - beq .9 - - ldx HST.IP - cpx #4 - beq .9 - inx - - lda HST.DecStr+1 - and #$0f - sta HST.IP,x - - ldy #1 - -.1 cpy HST.DecStr - beq .8 - iny - lda HST.IP,x - asl HST.IP,x - bcs .9 - asl HST.IP,x - bcs .9 - adc HST.IP,x - bcs .9 - asl - bcs .9 - sta HST.IP,x - lda HST.DecStr,y - and #$0f - adc HST.IP,x - sta HST.IP,x - bcc .1 -.9 sec - rts - -.8 stx HST.IP - clc - rts -*-------------------------------------- MAN SAVE /A2OSX.SRC/LIB/LIBTCPIP.S.HST LOAD /A2OSX.SRC/LIB/LIBTCPIP.S diff --git a/LIB/LIBTCPIP.S.txt b/LIB/LIBTCPIP.S.txt index 4f10d7b2..2594b6a1 100644 --- a/LIB/LIBTCPIP.S.txt +++ b/LIB/LIBTCPIP.S.txt @@ -94,6 +94,7 @@ L.DNS.MSG .DA DNS.MSG L.ARP.CACHE .DA ARP.CACHE L.DNS.CACHE .DA DNS.CACHE L.SKT.Template .DA SKT.Template +L.HST.SSScanF .DA HST.SSScanF L.TmpByte .DA TmpByte L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED .DA TCP.IN.JMP.LISTEN @@ -108,8 +109,9 @@ L.TCP.IN.JMP .DA TCP.IN.JMP.CLOSED .DA TCP.IN.JMP.TIMEWT .DA 0 *-------------------------------------- -LIB.LOAD ldx bFirstLoad +LIB.LOAD ldx RefCount bne .8 + sta NODE.SSOCK+S.NODE.HANDLER jsr ARP.CLEAR jsr DNS.CLEAR @@ -120,12 +122,14 @@ LIB.LOAD ldx bFirstLoad stx hSocketTable - inc bFirstLoad - -.8 clc +.8 inc RefCount + clc .9 rts *-------------------------------------- -LIB.UNLOAD lda hSocketTable +LIB.UNLOAD dec RefCount + bne .8 + + lda hSocketTable beq .8 >SYSCALL FreeMem.A @@ -133,8 +137,10 @@ LIB.UNLOAD lda hSocketTable .8 clc rts *-------------------------------------- -POLL ldx #DEVMGR.READBLOCK - jsr NetDevJmp +POLL >PUSHB IPCFG+S.IPCFG.HDEV + >PUSHBI DEVMGR.READBLOCK + >PUSHW 0 + >SYSCALL IOCTL bcs .99 No Frame stx hFrameIn @@ -201,8 +207,6 @@ GetDynPort inc DYNPORT.LAST ldx DYNPORT.LAST+1 clc rts -*-------------------------------------- -NetDevJmp jmp * *-------------------------------------- .INB /A2OSX.SRC/LIB/LIBTCPIP.S.ARP .INB /A2OSX.SRC/LIB/LIBTCPIP.S.CFG @@ -268,7 +272,7 @@ FRM.QUEUE.hMem .BS K.FRMQUEUE.SIZE FRM.QUEUE.State .BS K.FRMQUEUE.SIZE FRM.QUEUE.Retry .BS K.FRMQUEUE.SIZE *-------------------------------------- -bFirstLoad .DA #0 +RefCount .DA #0 hSocketTable .BS 1 DevFlags .BS 1 DYNPORT.LAST .DA K.DYNPORT.START @@ -285,8 +289,7 @@ TmpOffset .BS 2 hFrameIn .BS 1 hFrameOut .BS 1 bTextMode .BS 1 -HST.DecStr .BS 4 -HST.IP .BS 5 +HST.SSScanF .AZ "%d.%d.%d.%d" IP.ID .BS 2 IP.CHECKSUM .BS 4 NODE.SSOCK .BS 1 S.NODE.HANDLER diff --git a/README.md b/README.md index 8abbaf31..423ebb34 100644 --- a/README.md +++ b/README.md @@ -161,8 +161,8 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | SHELL | Working | (See Internal Shell commands) | 0.9.1 | | KCONFIG | Working | Kernel Configuration Utility | 0.9.1 | | ---- | ------ | ------- | ----- | -| TCPIPD | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.9 | -| DHCPCLNT| Working | rewritten to use new Socket API | 0.9 | +| TCPIPD | Working | Socket API.ARP,IP,ICMP,UDP & TCP ok | 0.9.1 | +| DHCPCLNT| Working | rewritten to use new Socket API | 0.9.1 | | TELNETD | In Progress | | 0.9 | | HTTPD | In Progress | | 0.9 | @@ -253,11 +253,11 @@ note : '$VAR' does NOT expand Variable | EDIT | Working | still missing : find/replace | 0.9.1 | | NSCUTIL | Working | Tool for setting time in NSC/DL1216E | 0.9 | | ---- | ------ | ------- | ----- | -| ARP | Working | dump ARP cache, setup a static ARP entry | 0.9 | -| PING | Working | | 0.9 | -| DNSINFO | Working | dump DNS cache, setup a static DNS entry | 0.9 | -| IPCONFIG | Working | renamed from NETINFO | 0.9 | -| NETSTAT | Working | | 0.9 | +| ARP | Working | dump ARP cache, setup a static ARP entry | 0.9.1 | +| PING | Working | | 0.9.1 | +| DNSINFO | Working | dump DNS cache, setup a static DNS entry | 0.9.1 | +| IPCONFIG | Working | renamed from NETINFO | 0.9.1 | +| NETSTAT | Working | | 0.9.1 | ## BIN,External DEV Shell commands: | Name | Status | Comment | K.Ver | @@ -265,7 +265,7 @@ note : '$VAR' does NOT expand Variable | ASM | In Progress | S-C MASM based multi CPU assembler | 0.9.1 | | MEMDUMP | Working | | 0.9.1 | | ---- | ------ | ------- | ----- | -| RPCDUMP | Working | tool based on UDP socket API, renamed from RPCINFO | 0.9 | +| RPCDUMP | Working | tool based on UDP socket API, renamed from RPCINFO | 0.9.1 | ## Misc diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 07b656e1..9a2edba6 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -20,7 +20,7 @@ CORE.Run lda CORE.PSCount ldy #S.PS.CPID lda (pPs),y - jsr CORE.GetPSStatus.A + jsr CORE.GetPS.A bcc .8 yes, still running.... lda (pPs) get S.PS.F again @@ -338,15 +338,20 @@ CORE.PSFree.A sta .1+1 Save PS ID * X unmodofied *-------------------------------------- CORE.GetPSByID.A - jsr CORE.GetPSStatus.A + tay + bne .1 + >LDYAI CORE.S.PS0 Select PS0 + clc + rts + +.1 jsr CORE.GetPS.A bcs .9 lda PS.TABLE.hMem-1,y beq * jmp K.GetMemPtr.A .9 rts *-------------------------------------- -CORE.GetPSStatus.A - ldy CORE.PSCount +CORE.GetPS.A ldy CORE.PSCount beq .9 .1 cmp PS.Table.PID-1,y diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index b753b31d..45b22e1a 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -104,9 +104,9 @@ K.IrqHAuxLC.3 pla Must keep Carry lda $103,x get IRQ pushed P sta $101,x down 2 bytes - lda #CORE.PSSleep make a RTI like "jsr CORE.Sleep" + lda #A2osX.SLEEP make a RTI like "jsr A2osX.SLEEP" sta $102,x - lda /CORE.PSSleep with RTS=PC IRQ-1 + lda /A2osX.SLEEP with RTS=PC IRQ-1 sta $103,x lda #$A0+'S diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index b9a3ad1e..d46ec339 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -682,13 +682,6 @@ K.SScanF.YA >STYA ZPPtr2 String to Scan rts .4 jsr .5 - - tya - clc - adc ZPPtr2 - sta ZPPtr2 - bcc .1 - inc ZPPtr2+1 bra .1 @@ -696,8 +689,8 @@ K.SScanF.YA >STYA ZPPtr2 String to Scan rts *-------------------------------------- .5 >PULLW ZPPtr3 get VAR Ptr - - lda K.SScanFTBL+1,x Get VAR Byte count + + lda K.SScanFTBL+1,x Get VAR size jmp (K.SScanFJMP,x) *-------------------------------------- K.SScanFTBL .DA #'i,#1,#'d,#1,#'I,#2,#'D,#2,#'l,#4,#'u,#4 @@ -713,20 +706,23 @@ K.SScanF.D K.SScanF.II K.SScanF.DD K.SScanF.L -K.SScanF.U pha Save Byte count +K.SScanF.U pha Save VAL size jsr STDLIB.Dec2Hex - pla - phy - tay + tya Y=char count parsed + clc + adc ZPPtr2 + sta ZPPtr2 + bcc .1 + inc ZPPtr2+1 -.1 lda STDLIB.32-1,y +.1 ply get back VAL size + +.2 lda STDLIB.32-1,y dey sta (ZPPtr3),y - bpl .1 - - ply + bpl .2 .9 rts */--------------------------------------