From 7ab940527409f9a25abbbabc05d7b81c2b68518f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 16 Apr 2018 16:25:39 +0100 Subject: [PATCH] Kernel 0.9.1 : KERNEL, Preemtive mode, generalize IOCTL for device access --- .Docs/KERNEL.md | 26 ++++++++-------- .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/FORMAT.S.txt | 6 ++-- BIN/IPCONFIG.S.txt | 15 +++------ INC/A2osX.I.txt | 2 +- LIB/LIBBLKDEV.S.txt | 6 +--- SBIN/GETTY.S.txt | 62 +++++++++++-------------------------- SBIN/HTTPD.S.txt | 65 ++++++++++++++++++++++++--------------- SBIN/KCONFIG.S.txt | 12 +++++--- SBIN/LOGIN.S.txt | 24 ++++++++++----- SBIN/TCPIPD.S.txt | 48 +++++++++++++++-------------- SYS/KERNEL.S.DEV.txt | 15 ++++----- SYS/KERNEL.S.DIRENT.txt | 7 +++-- SYS/KERNEL.S.JMP.txt | 2 +- SYS/KERNEL.S.STDIO.txt | 47 +++++++++++++++++++--------- 17 files changed, 178 insertions(+), 159 deletions(-) diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index a3ece071..1161d996 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -288,13 +288,24 @@ Create a new copy of this C-String ## In: + PUSHB = hSList -+ PUSHW = Key Ptr -+ PUSHW = Data Ptr + PUSHW = KeyID ++ PUSHW = Data Ptr ++ PUSHW = Key Ptr ## Out: + X,Y = Next KeyID +# SListUpdateByID + +## In: ++ PUSHB = hSList ++ PUSHW = KeyID ++ PUSHW = Data Ptr + +## Out: ++ A = Key Length ++ X,Y = KeyID + # SListAdd ## In: @@ -317,17 +328,6 @@ Create a new copy of this C-String + A = Key Length + X,Y = KeyID -# SListUpdateByID - -## In: -+ PUSHB = hSList -+ PUSHW = KeyID -+ PUSHW = Data Ptr - -## Out: -+ A = Key Length -+ X,Y = KeyID - # SListNew ## In: diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index d5545c16f584ca1a0d6d333e6732971fbcdc9e13..bdbd5017c520564a59b5501c1b78435f143d1086 100644 GIT binary patch delta 5602 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 U4fJ8OEFnxf!pCuftT*QW013yK+yDRo delta 5565 zcmaJ_3sh5Ax;{HE!y^#kgoJ=)bAre-#9&*hRZ&2LMu>p#N{_FKwU66&W@@Qjp&in( zlqm7s_E4+zG_9jyh&_RhF6TCi?V6EzJ2suVC}vp)ALC_uEuK!D`WlD(p93nO>vG6` z{QLj@*WPFUf6~yeZs=F@sS1TVBQ~DF3X?`0n1~AmAyFI(+dH)S;?qi{rg9D0Dp=}O~Wn3m2Iys_&VgT0+Q)NAGz&3~Z}0 zK72>p2rvhLORGz(%9oZ&_N!JC3ZhF%jAiRWvP86VX+et0cf+M@RN!mrzDjQv{xX-F z>YL`8+4wm3HnU)<5xvc9SelQXVi;)OW{yF-yz9!+C?%?5ZmfFfu_s6_#?$LwO>(i& z)shB!j`jJMmgDMIUi!s`XL0qq7dLEpj_BJuIcd#sG%J?a37D^B98a8!Ur4$ak-iwW zope`_Cl@fqt6gXT^QYBQv=Swx6lC7Vw=X2OFJf-5{&3PdA88-Vi@&T;DeKcJ{u7g?LUL=*3ZqEo(b_v;VrY7k`=vbgdAReFY|oWXpVB z|5k$#mF`nMtxfb3-P*WNpd~u= zdtT+%cH`PaJ26p&?Y5D53rKCWzx#-=;AHoahIoH+cl)ApQu}z5yWB}?AMp_<7m?uv zf2N|m+nuR6AjXmO6*nkPR*+%s;N>G>`QQ&n4%o@<6=YOHyP({8YS2c4Zb4?Ci)g5j-d)?pY4hQq-#!1M`EZMkF@mgZ@R_5c4SxOs8b5+dO8_jaq zDQ0Nn2BoBxd9Kcs_X_ERCpI|t;o5z0n%(b{&AUikuj9gb+)(q!Ot5a+BN<%ba0Gb)N$%Sw0pg-2igrf`_K?4KRh(_UMaCndyU5RjCa$+&Yjm0SdxL}<}jO| zo|N=l(y+(xK<|dn?~;xualc^No;D#D^ZC=WoH6SjAV2!AOn|_jNS)`Q3f)QnI%xvFQ9PeeC(5AV8uk*G9n4}+Qlf*53@#>xTmHo) zymu`>-SjVJ>OGUtVy4xz7A@|&Hd;*16+aXEeDdQwwp(H8>roSYPXTvolN;2+ViiYKFyw6M}s$x25%nCy2my= z)KixYl%Nf!Py_wNVVRfMuBTun%SRM}!2KZ6Z>0X5Oob-`I$JADXx(!|lrk5{?Z)ic zup~sgja2KNRT8d<1_-cfAAvhvZ}S_d{UVp15~AD&3XFI!g{p%TsOw1X8u|{&bYB`N zL34N&1!7x))16E~!eG+d-b8B|&lk@#TG>B4&!k*)~9qt$5xbasXLV;wX2FU{$SzmawFbMZO_bJO@=M)iz>Q z1;X03y0KiWqhh>e`-mwEODZeomCqkBj8Gkfit1nEDk`?^0Z5&_a{lP@Q}r1f?b2~a zo4pLku|Dl1vPx|wjuLxC&7Ej`0nzyHanaZZrR5*rRUx&rDxrxe2G#?(7oSK!pZniJ$)+<(2m|{9TwR38oX}#5$**fL+l+#&XWkqF9%K9qvgRDPf z?wYc!@Rs?ud1k@v0_XqpoGWZBJW*JiQ=9Ys@Z%gA%*!3jiOV(TK9V~t*P1&$cW&+% zIe*GIopUzl--Q#W5d^-KjzcCst+O{uy|b5#3-m%sL}cUqseDX_0sE7&cR414G-RSk zcq6BQbtUe%@T)jwAfnZHGhvZ0=afFe6Tv^Ehi7rm17khTQkif%#XpR-!C{`CaRmi+ zTtxc={@w&tSVTC3ZBy|y_R+;C168n3EJpJ-{wljAK4cdr+px`2$7wvhMYM#815D>d zVFI3(!OMJvxMHBicdPT1HUZQM8iQ96i2NOl=s6MoxroN|taxe;K5K$RrwK&1O&s~B zxu`&|_qSC@#zxhkHL0}^3(6DP>jt_hx_zq!_v4n>ekatTl_vWa?3*=chWaYiZva9G z8>>-5a7nB5+ZN^*KEkdjc23*YHs`ZV9?NDLX@;pt!vjG6_al!Z1$=;qX;y%%&|x zzs|dmwRJjH+aSsj?|BFu7Y|`jO2fJ=8ehoj><<-$^9*|% zVWeZvEJI}|nx&SbcVOQQK=*xB1TBDm_6>1bPvqnCdoQ@oHTK&NvEMF78$ip<6)0WX zma)xqUR?7Yk>s(@tw3f)TZa8pmRo@ufo<|iv<`jBzO@ofg4w>6D9<1+XM$LzCnBjD z;#AUz{oj@79VeWRvjzP6&}-pX>?`0`VYZ-s>&F;M4Y_@wz=m7$>Ts3?a=b|>ZkXAz z1^ZvY_&^@7ZsO`ak*!-XPBZhFq6{3G8BWFn1w4sw=JE;HYvwgL#uAz#N%A@2G_>Wx zrd<*=A&n3P`_VlVW`|axO-?|s2xWzrh-in1t`G&5hqA+SMN)C-)$n8Z8*__ZoLRa0 zK%^aa=kQs+*YN8Fe7ab-C@p*vu*nA+u7WQ@lb}8k{vN1sK0)(V4%=TZuyHR0B7orj zL+a{)Byr3Gr(KuC=6{CS!E9a+hbB?f7uQjb{jW++%eVd~mK=HDI-9>5WjkT16rjZ- zbOwZue*_}bl8^tG&liYZO$p5qj1a0ck-;cBYk*LR8Z{8AD4>E3uNFyWi~KbZ7)NJ6 z_v+V?u>DehSa#`LXTM+pH$?1Xa8%<3m9%OW$4=PCfr3z8I3Bu&-b?+0N(4YGKwT6> zR5`2xg5rAxwq$4ibnbOeMAWoewDuu!KPTW9%zQ;dYR9jz|7DCj^7uLUy4HrpHnDOVnSswrqbhWobgxYepi1BYzzk4P*0%Wb1{6Ql|$gF%oDL6Jyf_J{aFsVKk8r|%8y26hs-ac z!IY6~yZ!zmVEgz~dz?scRNu+6Qm^_F5~gu{!fbm0QV(@tbK{Z5(UUNijdk?h zZ?UQ5UeH97Rq$1gcwxNzZKIKr)Z;|vyvnLYqrj>OfGix3ybQ>@zldQeN>H|3mdciO zGJ?>m2x1;yj;p8|Y8~|))kHa|_oyt>EK`l?Y16Z&29w9+GaWOXHVv3=nT#1_8S684 zWVB~M6+K)rv_g{L74H2R2D-zD{VBsWM92ONuL{e9(z}HM{o%NdRP3KLylAhW+`bHN zq79&~3ytU9YpLcnl$XFX#j+7JSMK*^9QrPT($R0vAen4Ae)lY@j@zFB>2nuA478o5 z4%MDTd*lbtBXv&l`?54bt00IBtWAH4s-v)pqi#|I)Q@a>tSl?#ed@dSDIwuR`1&XV zAsN!2?P1r)%4!$pnLLs3HUH%!*hxWA(F7m=52Gi8qbFBJO~gxMR2XnY|Pk&ZPt*o8V>TQUehqbjg9pbkKYle(m8Nx?3Iit%qLG%6^03 URaP8KkflaTukaz9D(g@DKh}_%hX4Qo diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 38eaf1c4cc0e9f976b5f6bc815161183038093b3..9dd4ca04ce0a4caaf9ed3e4d8904c79ba37a5615 100644 GIT binary patch delta 6007 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 RZZ3W|XWq>v9Oe?&{4cY0aS8wc delta 7168 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 diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index ab39480f1582e0376ff7f19367b439810df44da0..bea9b21f3b961662f71a6dc0ce8ab27709b3881e 100644 GIT binary patch delta 35304 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 S$n5waELpZUvHiu)WBxyZb1!iK delta 34854 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 A!vFvP diff --git a/BIN/FORMAT.S.txt b/BIN/FORMAT.S.txt index 6740d9b5..ceb16287 100644 --- a/BIN/FORMAT.S.txt +++ b/BIN/FORMAT.S.txt @@ -239,20 +239,20 @@ CS.RUN.WriteCat >PUSHB.G hDev >PUSHBI DEVMGR.WRITEBLOCK >PUSHEA.G BlkParams.Ptr - >SYSCALL DevIOCTL + >SYSCALL IOCTL bcs .9 lda #'.' >SYSCALL PutChar.A >LDA.G BlkParams.Ptr+1 -* clc + clc adc #2 sta (pData),y >INC.G BlkParams.Num -* >SLEEP + >SLEEP >DEC.G BlkCnt bne CS.RUN.WriteCat diff --git a/BIN/IPCONFIG.S.txt b/BIN/IPCONFIG.S.txt index 887fc341..dafb14ad 100644 --- a/BIN/IPCONFIG.S.txt +++ b/BIN/IPCONFIG.S.txt @@ -55,7 +55,6 @@ L.MSG2.IP .DA MSG2.IP L.MSG2.GW .DA MSG2.GW L.MSG2.DNS .DA MSG2.DNS L.MSG2.HOSTNAME .DA MSG2.HOSTNAME -L.DevName .DA DevName .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP @@ -79,13 +78,12 @@ CS.RUN >LDYA L.MSG0 >SYSCALL PrintF.YA jmp CS.RUN.DONE -CS.RUN.DUMPDEV sta DevID +CS.RUN.DUMPDEV >STA.G DevID >SYSCALL GetDevByID.A >STYA ZPDevPtr - >STYA NetDevJmp+1 - ldx #DEVMGR.STATUS - jsr NetDevJmp + >LDA.G DevID + >SYSCALL GetDevStatus.A >STYA ZPDevStatPtr >LDYA L.MSG0.L @@ -115,7 +113,7 @@ CS.RUN.DUMPDEV sta DevID adc /S.DSTAT.IDS >PUSHYA - >PUSHB DevID + >PUSHB.G DevID >LDYA L.MSG1.DEV >SYSCALL PrintF.YA @@ -255,8 +253,6 @@ CS.QUIT lda hLIBTCPIP .8 clc rts *-------------------------------------- -NetDevJmp jmp * -*-------------------------------------- CS.END LIBTCPIP .AZ "libtcpip.o" *-------------------------------------- @@ -283,12 +279,11 @@ MSG2.GW .AZ " Gateway : %d.%d.%d.%d\r\n" MSG2.DNS .AZ " DNS : %d.%d.%d.%d,%d.%d.%d.%d\r\n" MSG2.HOSTNAME .AZ " Hostname : %S.%S\r\n" hLIBTCPIP .BS 1 -DevID .BS 1 -DevName .BS 5 *-------------------------------------- .DUMMY .OR 0 DS.START +DevID .BS 1 DS.END .ED *-------------------------------------- MAN diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index b5b690b4..18bc72b7 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -117,7 +117,7 @@ SYS.Rename .EQ $42 SYS.GetDevByID.A .EQ $48 SYS.GetDevByName.YA .EQ $4A SYS.GetDevStatus.A .EQ $4C -SYS.DevIOCTL .EQ $4E +SYS.IOCTL .EQ $4E * .EQ $50 SYS.SScanF .EQ $52 diff --git a/LIB/LIBBLKDEV.S.txt b/LIB/LIBBLKDEV.S.txt index 945da36b..3491a9b1 100644 --- a/LIB/LIBBLKDEV.S.txt +++ b/LIB/LIBBLKDEV.S.txt @@ -331,11 +331,7 @@ D2TrkWNIB >PULLB DrvSlt ldy #TrkWriter.Size -*.7 lda TrkWriter,y -* sta UsrBuf256,y -* dey -* bne .7 -* jmp UsrBuf256 + clc diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index 0c343db8..bcf49b5e 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -35,8 +35,6 @@ L.MSG.USAGE .DA MSG.USAGE L.MSG.TELNETOPT .DA MSG.TELNETOPT L.MSG.GREETINGS .DA MSG.GREETINGS L.ENV.TERM .DA ENV.TERM -L.HEX .DA HEX -L.HEX2 .DA HEX2 .DA 0 End Of Reloc Table *-------------------------------------- CS.INIT ldy #S.PS.ARGC @@ -57,6 +55,8 @@ CS.INIT ldy #S.PS.ARGC ldy #S.PS.hStdErr sta (pPs),y + >STA.G hNode + lda #2 >SYSCALL GetArg.A bcs .9 @@ -85,9 +85,7 @@ CS.RUN >SLEEP >SYSCALL GetChar bcs CS.RUN -.11 -* jsr PRINTA2 - >SLEEP +.11 >SLEEP >SYSCALL GetChar bcc .11 @@ -104,17 +102,11 @@ CS.RUN >SLEEP cpy #MSG.TELNETOPT.LEN bne .1 -* >LDYA L.MSG.TELNETOPT -* >SYSCALL PrintF.YA -* bcs * - CS.RUN.LOOP .1 >SLEEP >SYSCALL GetChar bcs .4 - -* jsr PRINTA cmp #IAC beq CS.RUN.IACMODE @@ -143,22 +135,19 @@ CS.RUN.IACMODE >SLEEP Wait for IAC VERB (or SB) bcs CS.RUN.IACMODE >STA.G IAC.VERB -* jsr PRINTA .1 >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 @@ -168,8 +157,6 @@ CS.RUN.IACSB >STA.G IAC.SB -* jsr PRINTA - lda #0 sta (pData) reset IAC.SB.DATA @@ -181,7 +168,6 @@ CS.RUN.IACSB beq .4 end of DATA, go wait SE pha -* jsr PRINTA ldy #IAC.SB.DATA-1 @@ -215,10 +201,7 @@ CS.RUN.IACSB >PUSHW L.ENV.TERM >SYSCALL SetEnv -.8 -* lda #':' -* >SYSCALL PutChar.A - jmp CS.RUN.LOOP +.8 jmp CS.RUN.LOOP *-------------------------------------- CS.DOEVENT lda (pEvent) bpl .9 is it a TIMER event? @@ -233,15 +216,21 @@ CS.DOEVENT lda (pEvent) .9 sec do not discard TIMER event rts *-------------------------------------- -CS.QUIT ldy #hBinName +CS.QUIT >LDA.G hBinName lda (pData),y beq .1 >SYSCALL FreeMem.A -.1 ldx #DEVMGR.CLOSE -* jsr pDevJmp +.1 >LDA.G hNode + beq .8 + + >PUSHA + >PUSHBI DEVMGR.CLOSE + >PUSHBI 0 - clc + >SYSCALL IOCTL + +.8 clc rts *-------------------------------------- Init.Timeout ldy #TimeOut @@ -256,19 +245,6 @@ Wait.TimeOut sec clc .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 MSG.USAGE .AZ "Usage : GETTY \r\n" MSG.TELNETOPT .DA #IAC,#WILL,#TELOPT.BINARY @@ -284,19 +260,17 @@ MSG.TELNETOPT .DA #IAC,#WILL,#TELOPT.BINARY MSG.TELNETOPT.LEN .EQ *-MSG.TELNETOPT MSG.GREETINGS .AZ "\r\nA2osX-GeTTY 0.9.1\r\n" ENV.TERM .AZ "TERM" -HEX .AZ "[%h]" -HEX2 .AZ "{%h}" -* \e[12h *-------------------------------------- .DUMMY .OR 0 DS.START IAC.SB.DATA .BS 64 -hBinName .BS 1 -TimeOut .BS 1 IAC.VERB .BS 1 IAC.OPT .BS 1 IAC.SB .BS 1 +hNode .BS 1 +hBinName .BS 1 +TimeOut .BS 1 DS.END .ED MAN SAVE /A2OSX.SRC/SBIN/GETTY.S diff --git a/SBIN/HTTPD.S.txt b/SBIN/HTTPD.S.txt index 820c2fd7..689c2f0f 100644 --- a/SBIN/HTTPD.S.txt +++ b/SBIN/HTTPD.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 @@ -17,6 +15,7 @@ CONN.MAX .EQ 16 *-------------------------------------- ZPIPCfgPtr .EQ ZPBIN ZPSktPtr .EQ ZPBIN+2 +ZPLinePtr .EQ ZPBIN+4 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -25,9 +24,10 @@ CS.START cld .DA #$61 6502,Level 1 (65c02) .DA #1 BIN Layout Version 1 .DA 0 - .DA CS.END-CS.START Code Length To Relocate - .DA DS.END-DS.START Data Segment to Allocate - .DA 0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #64 SS + .DA #6 ZP .DA 0 *-------------------------------------- * Relocation Table @@ -48,7 +48,7 @@ L.HTTP.200OK .DA HTTP.200OK .DA 0 *-------------------------------------- CS.INIT >LDYA L.LIBTCPIP - >SYSCALL LoadLibYA + >SYSCALL LoadLib.YA sta hLIBTCPIP lda (pPs) @@ -72,20 +72,26 @@ CS.RUN jsr Init.Timeout >SLEEP jsr Wait.Timeout bcc .1 - >SYSCALL GetC + >SYSCALL GetChar bcs .1 cmp #$03 bne .1 - jmp CS.RUN.ABORT + + >LDYA L.MSG.ABORT + >SYSCALL PrintF.YA + lda #0 + clc + rts .99 >LDYA L.MSG.TCPIPERR >SYSCALL PrintF.YA lda #K.E.SYN sec - rts +CS.RUN.RTS rts CS.RUN.INIT ldx #3 ldy #S.IPCFG.IP+3 + .1 lda (ZPIPCfgPtr),y sta Socket.Src.Addr,x dey @@ -94,15 +100,23 @@ CS.RUN.INIT ldx #3 >PUSHW L.Socket >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New - bcs .9 + bcs CS.RUN.RTS txa ldy #hSrvSocket sta (pData),y + >LDYAI 256 + >SYSCALL GetMem.YA + bcs CS.RUN.RTS + + >STYA ZPLinePtr + txa + >STA.G hLineBuf + >LDYA L.MSG.INITOK >SYSCALL PrintF.YA -.2 >SLEEP +CS.RUN.LOOP >SLEEP jsr CS.RUN.SERVER bcs CS.RUN.ERR @@ -124,7 +138,7 @@ CS.RUN.INIT ldx #3 .4 sta (pData),y - bra .2 + bra CS.RUN.LOOP .9 >LDYA L.MSG.SKTERR >SYSCALL PrintF.YA @@ -132,10 +146,6 @@ CS.RUN.INIT ldx #3 sec rts -CS.RUN.ABORT >LDYA L.MSG.ABORT - >SYSCALL PrintF.YA - lda #0 - CS.RUN.ERR sec rts *-------------------------------------- @@ -183,13 +193,14 @@ CS.RUN.SERVER ldy #hSrvSocket .9 rts *-------------------------------------- CS.RUN.CLIENT sta hClntSocket + >PUSHA hSocket - >PUSHWI UsrBuf256 + >PUSHW ZPLinePtr >PUSHWI 256 >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.GetS bcs .1 - >LDYAI UsrBuf256 + >PUSHW ZPLinePtr >SYSCALL PrintF.YA >PUSHB hClntSocket @@ -222,8 +233,13 @@ CS.QUIT ldx #CONN.MAX lda (pData),y >LIBCALL hLIBTCPIP,LIBTCPIP.SKT.CLOSEA - lda hLIBTCPIP - >SYSCALL UnloadLibA + >LDA.G hLineBuf + beq .3 + + >SYSCALL FreeMem.A + +.3 lda hLIBTCPIP + >SYSCALL UnloadLib.A clc rts *-------------------------------------- @@ -241,7 +257,7 @@ Wait.TimeOut sec *-------------------------------------- CS.END *-------------------------------------- -LIBTCPIP >PSTR "libtcpip.o" +LIBTCPIP .AZ "libtcpip.o" MSG.TCPWAIT .AZ "HTTPD:Waiting for TCP/IP initializing...\r\n" MSG.INITOK .AZ "HTTPD:Init Ok, Listening.\r\n" MSG.TCPIPERR .AZ "HTTPD:TCP/IP Not initialized properly\r\n" @@ -251,7 +267,7 @@ MSG.INCOMING .AZ "HTTPD:Incoming Connection [SKT=%h] From : %d.%d.%d.%d\r\n" hLIBTCPIP .BS 1 hClntSocket .BS 1 *-------------------------------------- -HTTP.200OK >PSTR "HTTP/1.1 200 OK\r\n" +HTTP.200OK .AZ "HTTP/1.1 200 OK\r\n" *-------------------------------------- Socket .DA #S.SOCKET.SOCK.STREAM .DA #S.SOCKET.SO.ACCEPTCONN @@ -266,6 +282,7 @@ Socket.Dst.Port .BS 2 .OR 0 DS.START hSockets .BS CONN.MAX pData +hLineBuf .BS 1 SktIndex .BS 1 hSrvSocket .BS 1 TimeOut .BS 1 diff --git a/SBIN/KCONFIG.S.txt b/SBIN/KCONFIG.S.txt index ba102782..df0d67ce 100644 --- a/SBIN/KCONFIG.S.txt +++ b/SBIN/KCONFIG.S.txt @@ -165,12 +165,16 @@ CS.RUN.Load >PUSHEA.G StatBuf bcs .99 * sec -* lda UsrBuf256+S.STAT.SIZE +* >LDA.G StatBuf+S.STAT.SIZE * eor #16 * bne .99 -* lda UsrBuf256+S.STAT.SIZE+1 -* ora UsrBuf256+S.STAT.SIZE+2 -* ora UsrBuf256+S.STAT.SIZE+3 + +* iny +* lda (pData),y +* iny +* ora (pData),y +* iny +* ora (pData),y * bne .99 >LDA.G StatBuf+S.STAT.P.TYPE diff --git a/SBIN/LOGIN.S.txt b/SBIN/LOGIN.S.txt index 4e16c30f..216c2242 100644 --- a/SBIN/LOGIN.S.txt +++ b/SBIN/LOGIN.S.txt @@ -60,8 +60,12 @@ CS.RUN lda #0 .1 >SLEEP >SYSCALL GetChar - bcs .1 no char - jsr INPUT.CHARIN + bcc .11 + tax + beq .1 no char + bra .9 + +.11 jsr INPUT.CHARIN jsr INPUT.LINEIN bcc .1 @@ -74,8 +78,12 @@ CS.RUN lda #0 .2 >SLEEP >SYSCALL GetChar - bcs .2 no char - jsr INPUT.CHARIN + bcc .22 + tax + beq .2 no char + bra .9 + +.22 jsr INPUT.CHARIN jsr INPUT.LINEIN bcc .2 @@ -90,18 +98,18 @@ CS.RUN lda #0 >SYSCALL ExpandStr.YA bcs .9 - stx .3+1 + phx >SYSCALL ExecPS.YA + plx + php pha -.3 lda #$ff Self Modified + txa >SYSCALL FreeMem.A pla plp - rts -.8 clc .9 rts *-------------------------------------- CS.DOEVENT diff --git a/SBIN/TCPIPD.S.txt b/SBIN/TCPIPD.S.txt index 0d235e83..7bb8766a 100644 --- a/SBIN/TCPIPD.S.txt +++ b/SBIN/TCPIPD.S.txt @@ -1,8 +1,6 @@ -PR#3 -PREFIX /A2OSX.BUILD NEW -INC 1 -AUTO 6 +PREFIX /A2OSX.BUILD +AUTO 4,1 .LIST OFF .OP 65C02 .OR $2000 @@ -11,9 +9,10 @@ AUTO 6 .INB /A2OSX.BUILD/INC/MACROS.I .INB /A2OSX.BUILD/INC/A2OSX.I .INB /A2OSX.BUILD/INC/LIBTCPIP.I + .INB /A2OSX.BUILD/INC/MLI.ERR.I *-------------------------------------- ZPIPCfgPtr .EQ ZPBIN -ZPIPDevPtr .EQ ZPBIN+2 +ZPDevStatusPtr .EQ ZPBIN+2 *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -97,32 +96,34 @@ CS.INIT.DEV >LDYA L.DEVNAME >LDYA L.MSG.DEV.KO >SYSCALL PrintF.YA - lda #$28 MLI.ERR.NODEV + lda #MLI.E.NODEV sec rts -.1 >STYA ZPIPDevPtr - >STYA NetDevJmp+1 - stx hNetDev - stx IPCFG+S.IPCFG.HDEV +.1 txa + >STA.G hDev + sta IPCFG+S.IPCFG.HDEV >PUSHW L.DEVNAME >LDYA L.MSG.DEV.OK >SYSCALL PrintF.YA - ldx #DEVMGR.OPEN - jsr NetDevJmp + >PUSHB.G hDev + >PUSHBI DEVMGR.OPEN + >PUSHWI 0 + >SYSCALL IOCTL bcs .9 - ldx #DEVMGR.STATUS - jsr NetDevJmp + >LDA.G hDev + >SYSCALL GetDevStatus.A + bcs .9 - >STYA ZPIPDevPtr + >STYA ZPDevStatusPtr ldy #S.DSTAT+2 MAC ldx #S.IPCFG.MAC -.2 lda (ZPIPDevPtr),y +.2 lda (ZPDevStatusPtr),y sta IPCFG,x iny inx @@ -146,11 +147,14 @@ CS.DOEVENT lda (pEvent) .9 sec never discard TIME event rts *-------------------------------------- -CS.QUIT lda IPCFG+S.IPCFG.HDEV +CS.QUIT >LDA.G hDev beq .1 - ldx #DEVMGR.CLOSE - jsr NetDevJmp - + + >PUSHA + >PUSHBI DEVMGR.CLOSE + >PUSHWI 0 + >SYSCALL IOCTL + .1 lda hLIBTCPIP >SYSCALL UnloadLib.A clc @@ -174,8 +178,6 @@ A2CharAX pha bcc .8 adc #6 .8 rts -*-------------------------------------- -NetDevJmp jmp * *-------------------------------------- .INB /A2OSX.SRC/SBIN/TCPIPD.S.CFG *-------------------------------------- @@ -206,7 +208,6 @@ CFG.Keyword.Map .DA #0 End Of Keyword table and NA Keyword .DA #S.IPCFG.DNS1 .DA #S.IPCFG.DNS2 hLIBTCPIP .BS 1 -hNetDev .BS 1 IPCFG .BS S.IPCFG CFG.hCfgFile .BS 1 CFG.hCfgPath .BS 1 @@ -220,6 +221,7 @@ UsrBuf256 .BS 256 .DUMMY .OR 0 DS.START +hDev .BS 1 DS.END .ED *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index b1724fed..1efa15f3 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -76,17 +76,18 @@ K.GetDevDNF lda #MLI.E.NODEV CS from cpx/beq * ## OUT: * Y,A = S.DSTAT *\-------------------------------------- +K.DevClose.A ldx #DEVMGR.CLOSE + .HS 2C BIT ABS K.GetDevStatus.A + ldx #DEVMGR.STATUS jsr K.GetDevByID.A - bcs .9 + bcs K.IOCTL.9 >STYA pDev - ldx #DEVMGR.STATUS jmp (pDev) -.9 rts */-------------------------------------- -* # K.DevIOCTL +* # K.IOCTL * ## IN: * PUSHB = DevID * PUSHB = Operation @@ -94,7 +95,7 @@ K.GetDevStatus.A * ## OUT: * Y,A = ... *\-------------------------------------- -K.DevIOCTL >PULLB .1+1 +K.IOCTL >PULLB .1+1 >PULLB .2+1 >PULLA @@ -102,7 +103,7 @@ K.DevIOCTL >PULLB .1+1 >PULLA jsr K.GetDevByID.A - bcs .9 + bcs K.IOCTL.9 >STYA pDev @@ -111,7 +112,7 @@ K.DevIOCTL >PULLB .1+1 jmp (pDev) -.9 rts +K.IOCTL.9 rts *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.DEV diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index 31ecc230..3b302cd7 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -22,6 +22,10 @@ K.OpenDir.YA jsr PFT.CheckPathYA >STYA ZPPtr1 stx .8+1 + ldy #S.NODE.T Done by GetMem0 + lda #S.NODE.T.DIR + sta (ZPPtr1),y + ldy #1 lda (ZPPtr2),y One char ? beq .8 No, Go open dir.... @@ -49,7 +53,7 @@ K.OpenDir.YA jsr PFT.CheckPathYA .98 pha save MLI error lda .8+1 - jsr K.CloseDir.A.1 + jsr K.CloseDir.A pla get back MLI error sec .99 rts @@ -599,7 +603,6 @@ K.ReadDir.A.ConvertTime * none, always succeed. *\------------------------------------- K.CloseDir.A .EQ K.FClose.A -K.CloseDir.A.1 .EQ K.FClose.A.1 *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.DIRENT diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 64588c7f..1fa51ae7 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -49,7 +49,7 @@ K.SYSCALL.JMP .DA 0 $00 .DA K.GetDevByID.A .DA K.GetDevByName.YA .DA K.GetDevStatus.A - .DA K.DevIOCTL + .DA K.IOCTL .DA 0 $50 .DA K.SScanF diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 1e8f52f9..a4554abe 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -263,17 +263,21 @@ K.FOpen.10 >LDYAI S.NODE.REG >STYA ZPPtr1 stx .8+1 +* ldy #S.NODE.T Done by GetMem0 +* lda #S.NODE.T.REG +* sta (ZPPtr1),y + jsr STDIO.SetIOBUF bcs .98 >MLICALL MLIOPEN bcs .98 - lda K.MLI.PARAMS+5 get ref_num + lda K.MLI.PARAMS+5 get ref_num ldy #S.NODE.REG.REF sta (ZPPtr1),y - sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based + sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based lda K.FOpen.MODE bit #SYS.FOpen.W @@ -297,7 +301,7 @@ K.FOpen.10 >LDYAI S.NODE.REG .20 lda K.FOpen.MODE and #SYS.FOpen.T Text Mode ? - beq .30 + beq .8 lda #$FF sta K.MLI.PARAMS+2 @@ -305,16 +309,13 @@ K.FOpen.10 >LDYAI S.NODE.REG sta K.MLI.PARAMS+3 >MLICALL MLINEWLINE -.30 ldy #S.NODE.T - lda #S.NODE.T.REG - sta (ZPPtr1),y .8 lda #$ff Self Modified clc rts CC .98 pha save MLI error lda .8+1 - jsr K.FClose.A.1 + jsr K.FClose.A pla get back MLI error sec rts @@ -330,13 +331,23 @@ K.FOpen.AUXTYPE .BS 2 * ## Out : *\-------------------------------------- K.FClose.A jsr PFT.CheckNodeA - pha + sta K.FClose.A.8+1 + jsr K.GetMemPtr.A >STYA ZPPtr1 - pla + + ldy #S.NODE.T + lda (ZPPtr1),y + asl + tax + jmp (.1,x) -K.FClose.A.1 sta K.FClose.A.2+1 - ldy #S.NODE.REG.REF +.1 .DA K.FClose.A.REG + .DA K.FClose.A.DIR + .DA K.FClose.A.CDEV + +K.FClose.A.REG +K.FClose.A.DIR ldy #S.NODE.REG.REF lda (ZPPtr1),y beq .1 sta K.MLI.PARAMS+1 @@ -344,11 +355,19 @@ K.FClose.A.1 sta K.FClose.A.2+1 .1 ldy #S.NODE.REG.IOBUF lda (ZPPtr1),y - beq K.FClose.A.2 + beq K.FClose.A.8 + jsr K.FreeMem.A - -K.FClose.A.2 lda #$ff Self Modified + bra K.FClose.A.8 + +K.FClose.A.CDEV ldy #S.NODE.DEV.ID + lda (ZPPtr1),y + jsr K.DevClose.A + bcs K.FClose.A.9 + +K.FClose.A.8 lda #$ff Self Modified jmp K.FreeMem.A +K.FClose.A.9 rts */-------------------------------------- * # FRead.A * Read ONE byte (A) from file (Y)