From 74c56186b42cfbd206f2343043695f593214cc41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 3 May 2019 15:08:12 +0200 Subject: [PATCH] Kernel 0.93 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/SH.S.IO.txt | 2 +- BIN/SH.S.txt | 4 +- LIB/LIBTCPIP.S.SKT.txt | 33 +++--- SYS/KERNEL.S.INIT.txt | 2 +- SYS/KERNEL.S.IO.txt | 232 +++++++++++++++++++++++++-------------- SYS/KERNEL.S.STAT.txt | 5 +- 7 files changed, 175 insertions(+), 103 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index e666024f043c99ead4980162e6154fd4e8e2802a..b21c7b99b11fe1664a9dd59bca36b4b9c41c344b 100644 GIT binary patch delta 38968 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 delta 38634 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%0A5&!MF=lgxe4%bMJeTI#@O+g(&du`t<#+KA| z`4e}(YlCO-`!-WT^N|oA!{{g>UW(cuWs6OYJu>{);b(`3=Jd<4=# zvABeU^YOdmT5_tKkEbql{*YXjvNL7vFth7~>s!~Q&LOEwT<2Ymp$A;2lP9E@ote(+ z)Pt#m(#E7MN$X7eG|im;Ugmq53o=e;24$sYt;raXIU+M5*O=s=l@y#5E;TS|aMH-! z!rU*jPi6m=?HWFEct!5@x%cKillxY#?+EV^YVPcu%X3!bYg*U5W`vZ z<1@BU&%|M?r$sGO&z`YW8WKCo&)R%8TZ2amRGjqAb;7?yTlS!%QMIo(8RqTWYWGw6 z8xM+29llT5R~t-TU&yv$YsYO*+vf&%ocz%ekknE2qh;&=%foT)CxaqXkGgHmlVlWa8p`c8F(E+8`S8%j*z@Y?J!o%yhYX`=vFpq zyRcTKw#y|#mg>8T3QEgmm4X^BgO0qx%hZ*79gc;|wE*Q87Zn%lb*LV~h>>{_utFZc zgQrMM%M>Pz&eM`?y9)cui^|K#mX<32~s z(5rid!Ntp(6Mn_bJ$B;<$la;Ju^Qh`If8~^fWG^5SdF=~Tvo>^!hyNyx{uHyg;$C- zqt~i;?{fqXXvJ?Zt%Fa^(}r=)oEa+k*MEDfkRjf`v20*PgUO!cZ;bgvjs;Xqt|+UR zz(M*c>(H0wFq-@24*XLe2-m`JXfg1wt{2)J%5+*QGn!3jw1n+vFG!gFBO>r`EoP7O zm2J7N~gONKDru{9GSQBPGYRVMp(;`JO}? z`>FNgt>Mj{{oGELvJQpqX@KsOW70!!ti5|DfPM;QoRV4V ztGmzm$pnz6Zr2~_l&cv;3SEgJM4xa5^RX-%v`;dPnbzzUy%RuYSh?p0Ex)3G#4C^LJT@P%)cyBUJ+z$~;sB4)FB zfwm3Yq*@ziEvso^Y>qk9(!IPIL2Pqm`$pk6fYPQf2lHcU4Cf!o`pk2mO&I56+kAPi(Srp{d|`Jl0;2_Tfp}qFq_ugZw*^dE2z z0>}k^b|ZgxKz)w{@QRokG=F_tqZSz7p!NuiiR}57xqUl~OL0E?GBgG+IAOW)T`u>+ zRUba%SFpL*l-MKU3SQ`yeJ)f^lO2AQda0*1Z0O3~Co`?m8iQV#o?b4DV`|pho~w~q zNQ=7J(;948qwe&yM(3_|-_5R3wpM)}?R7|%gNtp5>QMqE7nc+sxahT&qaQv(NB zqYc-qr%rgjxA6ndtZTBIp->nU4n;tbP!tpm#Xzx8925^FKm(ycP$HBB4Tgq5$&eEo z3Z+0UC>0t8r9tUX29yc$yxGujCQP5~856XuMphBn!8UtMfT?~zd#zEtu zV(1d61S*Bfpi7|%P&rfqO@t;vmC$5p3N#g(22F=9gJwW8p(hf5NQLf%HbHkmcSD<@EzmvC zz0g)@8?+s|54s>$LSI2&L*GE(Lf=8hq3@v|pdX>1pr4@= z(Ep&5&?)E_=vU}B=y&K3=uhY`=rnW&It%>`orC^?&fk#bG;Dwf527E@pD+@h!~nuX zcoE)&58+Gr5oW@l2p|-~LIe_4!baGMAi_Ze6Cp$>5k`a)5kw>rMMM)ZL@W_U#1jd` zKw=P)NF))1i6KNXA%Epi{*^+wh*V-2kw&Bw8AK+LMPw7hi5w!A7(t9AMiHZlJR+Yc zAPR{hVhnK+aWOHL7)OjJiit~z5~7qSBQ7N-5amP#F_D-=R1%YkDa2G_8Zn)?jF>^p zB&vv6#B8FPm_yVMwZvRv9xPuxJ%<$x zo5Wkh+r%N_F!2uYF7Y1mKJj1T1L8yC2=Ni|G4ToUDe)QcIdPOYMtnhhNqj|oO?*Rq zOMFKhC%z|sAbuo%B7P=L5dR}i5~qk?h+m1{h~J4nh(C$Hh||Ow;w diff --git a/BIN/SH.S.IO.txt b/BIN/SH.S.IO.txt index 579d2d73..d7187045 100644 --- a/BIN/SH.S.IO.txt +++ b/BIN/SH.S.IO.txt @@ -59,7 +59,7 @@ IO.Reset.In >LDA.G IO.hIn .8 clc IO.Reset.In.RTS rts *-------------------------------------- -IO.Pipe.Out >LDYA 256 +IO.Pipe.Out >LDYAI 256 >SYSCALL pipe bcs IO.Reset.In.RTS >STA.G IO.hPipe diff --git a/BIN/SH.S.txt b/BIN/SH.S.txt index db6777ab..1a4d45e8 100644 --- a/BIN/SH.S.txt +++ b/BIN/SH.S.txt @@ -198,7 +198,7 @@ CS.INIT.RTS rts *-------------------------------------- CS.RUN jsr CL.Init jsr CORE.Init - + ldy #S.PS.ARGC lda (pPS),y beq .1 no arg, continue starting interactive @@ -222,7 +222,7 @@ CS.RUN jsr CL.Init plx jsr CMD.CALL.YAX bra CS.RUN.LOOP -*-------------------------------------- +*-------------------------------------- .1 jsr CMD.CD.HOME jsr HIS.Init bcs CS.INIT.RTS diff --git a/LIB/LIBTCPIP.S.SKT.txt b/LIB/LIBTCPIP.S.SKT.txt index 3744bdcf..b65ddd80 100644 --- a/LIB/LIBTCPIP.S.SKT.txt +++ b/LIB/LIBTCPIP.S.SKT.txt @@ -390,7 +390,7 @@ SKT.shutdown.STREAM SKT.Read jsr SKT.PullhFDDataInPtrLen jsr SKT.EOF.I - bcs .9 I/O error + bcs .99 I/O error tay bne .9 eof=true, exit with CC,Y,A = 0 @@ -399,7 +399,7 @@ SKT.Read jsr SKT.PullhFDDataInPtrLen .9 lda #0 tay - rts +.99 rts */-------------------------------------- * # Write (STREAM) * ## C @@ -417,18 +417,27 @@ SKT.Read jsr SKT.PullhFDDataInPtrLen SKT.Write jsr SKT.PullhFDDataInPtrLen jsr SKT.CheckStream - bcs .9 + bcs .99 + jsr SKT.GetTCB + ldx SKT.Cache+S.SOCKET.TCP.OUTFREE + cpx ZPDataInLen + lda SKT.Cache+S.SOCKET.TCP.OUTFREE+1 + sbc ZPDataInLen+1 + bcc .9 Not enough room in Q + jsr SKT.AddDataToSktOut will call SKT.GetTCB - bcs .90 jsr TCP.OUT.I SKT.GetTCB called, try to push, ignore error.... + + >LDYA ZPDataInLen clc rts -.90 lda #0 no data transfered - sec -.9 rts +.9 lda #0 no data transfered + tay + clc +.99 rts */-------------------------------------- * # Recv (RAW,DGRAM,SEQPACKET) * # RecvFrom (RAW,DGRAM,SEQPACKET) @@ -1078,13 +1087,6 @@ SKT.GetDataFromSktIn * Dst : hOutMem/OUTHEAD *-------------------------------------- SKT.AddDataToSktOut - jsr SKT.GetTCB - ldx SKT.Cache+S.SOCKET.TCP.OUTFREE - cpx ZPDataInLen - lda SKT.Cache+S.SOCKET.TCP.OUTFREE+1 - sbc ZPDataInLen+1 - bcc .9 Not enough room in Q - ldy #S.SOCKET.SQ.hOutMem lda (ZPPtrSKT),y >SYSCALL GetMemPtr @@ -1141,9 +1143,6 @@ SKT.AddDataToSktOut sta ZPTmpPtr2+1 bra .1 -.9 sec - rts - .8 >SBC16 SKT.Cache+S.SOCKET.TCP.OUTFREE,ZPDataInLen >ADC16 SKT.Cache+S.SOCKET.TCP.OUTUSED,ZPDataInLen >ADC16 SKT.Cache+S.SOCKET.TCP.OUTTOSEND,ZPDataInLen diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 62467279..f5ce870a 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -182,7 +182,7 @@ Kernel.Init3C >LDYAI MSG.Init3 >PUSHBI 2 >LDYAI MSG.EtcInit >SYSCALL printf - + >PUSHBI 0 PS Flags >LDYAI ETCINIT.CMDLINE diff --git a/SYS/KERNEL.S.IO.txt b/SYS/KERNEL.S.IO.txt index 467a8287..d13f0212 100644 --- a/SYS/KERNEL.S.IO.txt +++ b/SYS/KERNEL.S.IO.txt @@ -271,7 +271,8 @@ IO.CLOSE.PIPE ldy #S.FD.PIPE.S IO.CLOSE.FD lda (pFD),y beq .1 - jsr K.FreeStkObj +* jsr K.FreeStkObj + jsr K.Freemem .1 lda IO.hFD jmp K.FreeMem @@ -419,7 +420,7 @@ IO.READ.SSOCK ldy #S.FD.SSOCK.READ lda IO.hFD .1 jsr $FFFF SELF MODIFIED - bcs .9 + bcs .9 I/O error phy ply @@ -428,7 +429,7 @@ IO.READ.SSOCK ldy #S.FD.SSOCK.READ tax bne .9 - dec pStack CC, Y,A = 0 + dec pStack no data transfered, CC, Y,A = 0 dec pStack dec pStack dec pStack keep buf/count on stack @@ -449,31 +450,51 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1 lda (pFD),y bpl .11 - jmp IO.READ.PIPE.99 Remote PS closed the Pipe + jmp IO.READ.PIPE.EOF Remote PS closed the Pipe -.11 lda #0 BLOCKING I/O - sec - rts +.11 jmp IO.READ.PIPE.BLK .10 >PULLW .3+1 get buf >PULLA get cnt lo + pha + ldy #S.FD.PIPE.Used + cmp (pFD),y + + >PULLA get cnt hi + tax + iny + sbc (pFD),y + bcc .12 + + pla + dey + lda (pFD),y + pha + iny + lda (pFD),y + tax + +.12 pla + sta .80+1 + stx .81+1 eor #$ff sta IO.Counter - >PULLA get cnt hi + txa eor #$ff sta IO.Counter+1 ldy #S.FD.PIPE.hMem lda (pFD),y jsr K.GetMemPtr - >STYA .2+1 - ldy #S.FD.PIPE.Head - lda (pFD),y - sta .4+1 - + sty .2+1 + + ldy #S.FD.PIPE.Tail+1 + adc (pFD),y + sta .2+2 + dey S.FD.PIPE.Tail lda (pFD),y tay @@ -487,55 +508,82 @@ IO.READ.PIPE ldy #S.FD.PIPE.Used+1 .2 lda $ffff,y SELF MODIFIED .3 sta $ffff,x SELF MODIFIED + inx - beq .8 moved $100 bytes + bne .4 - iny -.4 cpy #$ff SELF MODIFIED + inc .3+2 + +.4 iny bne .1 -.5 clc - .HS B0 BCS - -.8 sec - lda #0 - rol - sta IO.Counter+1 - stx IO.Counter + ldy #S.FD.PIPE.Tail+1 + lda (pFD),y + inc + ldy #S.FD.PIPE.Size+1 + cmp (pFD),y + beq .5 - tya + ldy #S.FD.PIPE.Tail+1 + sta (pFD),y + inc .2+2 + ldy #0 + bra .1 + +.5 lda #0 + ldy #S.FD.PIPE.Tail+1 + sta (pFD),y + + ldy #S.FD.PIPE.hMem + lda (pFD),y + jsr K.GetMemPtr + sta .2+2 + ldy #0 + bra .1 + +.8 tya ldy #S.FD.PIPE.Tail sta (pFD),y - txa + lda .80+1 ldy #S.FD.PIPE.Free clc adc (pFD),y sta (pFD),y + iny - lda IO.Counter+1 + + lda .81+1 adc (pFD),y sta (pFD),y ldy #S.FD.PIPE.Used sec lda (pFD),y - sbc IO.Counter + sbc .80+1 sta (pFD),y + iny + lda (pFD),y - sbc IO.Counter+1 + sbc .81+1 sta (pFD),y - ldy IO.Counter - lda IO.Counter+1 Y,A = bytes read +.80 ldy #$ff SELF MODIFIED +.81 lda #$ff Y,A = bytes read clc rts -IO.READ.PIPE.99 lda #MLI.E.EOF +IO.READ.PIPE.EOF + lda #MLI.E.EOF sec >RET 4 + +IO.READ.PIPE.BLK + lda #0 BLOCKING I/O + sec + rts *-------------------------------------- * (pStack)+2 count * (pStack)+0 buf @@ -543,7 +591,7 @@ IO.READ.PIPE.99 lda #MLI.E.EOF IO.WRITE.PIPE ldy #S.FD.PIPE.S lda (pFD),y - bmi IO.READ.PIPE.99 Remote PS closed the Pipe + bmi IO.READ.PIPE.EOF Remote PS closed the Pipe sec ldy #S.FD.PIPE.Free @@ -556,7 +604,7 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S ldy #3 sbc (pStack),y - bcc .9 not enough room in PIPE + bcc IO.READ.PIPE.BLK not enough room in PIPE ldy #S.FD.PIPE.Free+1 sta (pFD),y @@ -567,6 +615,7 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S >PULLW .2+1 get buf >PULLA get cnt lo + sta .80+1 pha eor #$ff sta IO.Counter @@ -577,6 +626,7 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S sta (pFD),y >PULLA get cnt hi + sta .81+1 pha eor #$ff sta IO.Counter+1 @@ -588,13 +638,18 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S ldy #S.FD.PIPE.hMem lda (pFD),y jsr K.GetMemPtr - >STYA .3+1 - ldy #S.FD.PIPE.Head - lda (pFD),y - tay + sty .3+1 + ldy #S.FD.PIPE.Head+1 + adc (pFD),y + sta .3+2 + ldx #0 + + dey + lda (pFD),y + tay S.FD.PIPE.Head .1 inc IO.Counter bne .2 @@ -604,28 +659,45 @@ IO.WRITE.PIPE ldy #S.FD.PIPE.S .2 lda $ffff,x SELF MODIFIED .3 sta $ffff,y SELF MODIFIED - iny - inx - bne .1 - - sec moved $100 bytes - .HS 90 BCC - -.8 clc - tya - ldy #S.FD.PIPE.Head - sta (pFD),y - - txa - tay - lda #0 Y,A = bytes written - rol -* clc - rts + bne .4 -.9 lda #0 BLOCKING I/O - sec + inc .2+2 + +.4 iny + bne .1 + + ldy #S.FD.PIPE.Head+1 + lda (pFD),y + inc + ldy #S.FD.PIPE.Size+1 + cmp (pFD),y + beq .5 + + ldy #S.FD.PIPE.Head+1 + sta (pFD),y + inc .3+2 + ldy #0 + bra .1 + +.5 lda #0 + ldy #S.FD.PIPE.Head+1 + sta (pFD),y + + ldy #S.FD.PIPE.hMem + lda (pFD),y + jsr K.GetMemPtr + sta .3+2 + ldy #0 + bra .1 + +.8 tya + ldy #S.FD.PIPE.Head + sta (pFD),y + +.80 ldy #$ff SELF MODIFIED +.81 lda #$ff SELF MODIFIED + clc Y,A = bytes written rts */-------------------------------------- * # IOCTL @@ -668,28 +740,6 @@ K.IOCTL.GetPDrv ldy #S.FD.DEV.DRVPTR sta pDRV+1 rts *-------------------------------------- -IO.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF - ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE - jsr MEM.GetMem.YAX - bcs .9 - - >STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call - txa - ldy #S.FD.REG.IOBUF - sta (pFD),y - - >MLICALL MLIOPEN - bcs .9 - - lda K.MLI.PARAMS+5 get ref_num - ldy #S.FD.REG.REF - sta (pFD),y - - sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based - -* clc -.9 rts -*-------------------------------------- IO.EOF lda (pFD) tax jmp (.1,x) @@ -777,6 +827,28 @@ IO.EOF.PIPE ldy #S.FD.PIPE.Used clc rts *-------------------------------------- +IO.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF + ldx #S.MEM.F.ALIGN+S.MEM.F.NOMOVE + jsr MEM.GetMem.YAX + bcs .9 + + >STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call + txa + ldy #S.FD.REG.IOBUF + sta (pFD),y + + >MLICALL MLIOPEN + bcs .9 + + lda K.MLI.PARAMS+5 get ref_num + ldy #S.FD.REG.REF + sta (pFD),y + + sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based + +* clc +.9 rts +*-------------------------------------- IO.DEVDIR >PSTR "/DEV/" *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 5484e143..a325d66d 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -382,7 +382,8 @@ K.MKFIFO * A = hFD *\-------------------------------------- K.Pipe >STYA ZPPtr1 - jsr K.NewStkObj Buffer in AUX mem +* jsr K.NewStkObj Buffer in AUX mem + jsr K.GetMem bcs .99 stx .1+1 save PIPE buffer @@ -415,7 +416,7 @@ K.Pipe >STYA ZPPtr1 ldy #S.FD.PIPE.hMem .1 lda #$ff Self Modified sta (pFD),y - txa + txa hFD * clc rts