From 8e1da7eb9a69ce392f57bb80d24dae591db3a613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Sun, 3 Feb 2019 21:58:26 +0000 Subject: [PATCH] Kernel 0.92+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/ARP.S.txt | 3 +- BIN/SHELL.S.CMD.txt | 131 ++++++++++++++------------------- BIN/SHELL.S.CORE.txt | 155 +++++++++++++++------------------------ BIN/SHELL.S.txt | 62 +++++++++++++--- INC/A2osX.I.txt | 1 + README.md | 2 +- SYS/KERNEL.S.BIN.txt | 47 +++++++----- SYS/KERNEL.S.FIO.txt | 1 - SYS/KERNEL.S.MEM.txt | 45 +++++------- SYS/KERNEL.S.PS.txt | 5 +- 11 files changed, 222 insertions(+), 230 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 9fca0dc1e1476a6c7b96bf4dc55e7248140870a7..40c6c96786dc7dbc33cd281c05ddf3dc89151946 100644 GIT binary patch delta 50311 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
Tgb%mycNGK&i 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 delta 50510 zcmagH2|!dw@;KaY9s>h&G0e^RxDRpU67iNxK}SHqGn#-LLPS8oL=)pMDr$@v(ZtrQ z$4JzOQ3JY>Tqed`>SnVfYcxScbBL%p$bD}7s=MC|sQG>Wb>qxbcUM-8li6IF@^9iUc|X7rS~w zVfZM|E${S9mRceLR5e?Q&waB+a&;SkM|*DBb(Jueq&xQ2)k5C;zC08hq1B3%25OJx zefcLxXFZnJ`!UDqk45xZbKUalYHB+l8o}{Ce&#Q@0!v zl%qtX`;|db^CzVGD3^-lnJw6#}{>K&A$O5L)wTmBtG=H&9 zvlt)+X>K#XYz7#KG)O|%JdXkr;*gOO0gR-C_@vLU0p6J$xx%@BJgA)|*2oRM0X$`B+YlgtG!C`?VCLKi$C1(`fuaBFUQs+GbM zxNsPU)xPGC1;*#o;hRT|1dvVMnu+M_62${+HBq5&&CxrD$M$$;K9#IVZBw3IY zB#UO0hs6N6FdO&faDgd9==Z6amf4x9`LtvF>NtyKuj2un^Tz8Opqk3j<;Ci z6OivvJT8|rkF+?uWaUn0qm#&J(7=FU&Zeo^InxU>Dec2aF7~ zB>=77iDLgPBC$z~Smkh7fC39BVWAz#k{M7x0y-0rWh$sLr5cP`3RdNTkVoPe_!v2A za2HE{E+rrgEMF4xAALvLtVyo66y!e!uOL{);%5k!ad-Bd?(CTa^NqiwZKkU&1==Ry zZwQuD>@|%G;L>o^G%k=!$CKb=ROTJy@-rt<#S9|`Ibh-)Z5i45tSuhsMuC&?Zh|cf zpCBLE_#*k3jDI7zr(jb)d|2^_d@jH@$B70si;5>3vz+L5rDDAv@>RVZ*e))WAB zGw?9-F%wTEAG7d6@-Z7fUI42<2k$T7g2vqELnyZmxvu z>nvZ!3DKY+Yg@Tc&FgKYt5Fl@Ky6o7OPYAceEe!Fcb!|>`Ruct`2%h#KCxI*0Ur@{ zk~I?5HGHH_vI>4C)JyJ%kCuAL$iSpqN6+;KKJMM`ndOjloD)>nDjpa5Jsdp!j{E8* zZ^FpV=Nlx+5^iDV=MPEzInLa9`(eo#H>J6+4LRIeLe{l}Sci9JEtf2iaKmx?3P}$4 zI=;O^5~~mEd*t-V+g(4JiX848AqRzD1J4St;|Vs2pR%wox-r|)$P0yif@f!iP4c-Z zXascc`ms%zBam+=^SXX6a(H!wc>mUhV2X;)%54(4H}@G{azJ9`KI=SnKr&8>J&s7S zxx;wc5s5kOaEP!gVw2{KTbEbcZAVT^x38&jcuHe}V@^l6cmC1d{v1bMM|XeFzU%K^ z+I(qWFSdUuF(e)mevWV`Th4FNIVMA^R8YjU>m16C^TMf^cDW-5VD98+N|7}$_~l1;rlPCLE^`|qlN|~a z4hIRXvtV`GZXa)#WGZ1fC!Ua;a+~&^M2@^A2t^4ag&iT!hrAck6>=%$n~;{!mqI@e zMd*-8IBXVLw-LqQo4vw{4ta&Ox(ob?)mNK7bD)l^alG}s;81m(Kf|^2)*&JI$Xk*K zJo6O%_3SChu%Oc5dujMJrAX)uG41QFRO7j)B*6-TR0T*k>0yZi-;x;Ax{hu_`MR^- zKezG@6;6Lk5*ngAuvgxM26tm8x7 zTEat=c$bdf<~A}S$Pvc$D{aW6|DEh zWd1#l`@C~T3crd6r?q=De@@#+*7fXqhpeT$r5iRg*V@*DXoz{5g#uW@a*so(s~9i}2ES=FR0(+<@Z8i+DfDpqUjV zbmry~I`jDwI#*RG-v)CT%J?8J*A$Bx_9bQfuWp>Wv-&|kh69A#7xLjm1aDOF%^DhB zbmpz#+dYCDb6UD#!}xW{VC!1xcfO0a&JDY2f{!=wv^D%l&J91Yh9APEKG(U1=fF0< zw3go&GdIj}xTRZ|5wXowcD3p1CQ0vS0>Eyc?zr00+x6Qv$1ITR?3Qk8Dqg#ePqKZ} z^zC}bJkT=7JhI(edqFBidvET$wfd{3uaDmB&uT@mt8Vs(pHcP)oeAlZt

e*cQ_0 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%0APNNW~6P>T$yLSqNzlWfVxm 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 diff --git a/BIN/ARP.S.txt b/BIN/ARP.S.txt index 89a9372f..5e21a301 100644 --- a/BIN/ARP.S.txt +++ b/BIN/ARP.S.txt @@ -54,8 +54,7 @@ CS.INIT >LDYA L.LIBTCPIP CS.RUN >LIBCALL hLIBTCPIP,LIBTCPIP.GETCFG >STYA ZPPTR1 - ldy #S.IPCFG.STATUS - lda (ZPPTR1),y + lda (ZPPTR1) bmi .1 jmp CS.RUN.ERR diff --git a/BIN/SHELL.S.CMD.txt b/BIN/SHELL.S.CMD.txt index 2bc922ae..02ba740e 100644 --- a/BIN/SHELL.S.CMD.txt +++ b/BIN/SHELL.S.CMD.txt @@ -3,46 +3,20 @@ PREFIX AUTO 4,1 .LIST OFF *-------------------------------------- -CMD.STARTPROC - clc - rts +CMD.NOHUP >LDA.G CORE.PSFlags + ora #S.PS.F.NOHUP + sta (pData),y + + >LDYA ZPArgVBuf + jsr RemoveStrFromArgV + jmp CORE.ExecExtCmd *-------------------------------------- CMD.SHIFT lda #1 CMD.SHIFTA >SYSCALL ArgV bcs .8 - >STYA ZPPtr1 - >STYA ZPPtr2 - -.10 ldy #$ff - -.1 iny Compute ArgX len - lda (ZPPtr1),y - bne .1 - -.2 tya - sec - adc ZPPtr1 - sta ZPPtr1 - bcc .3 - inc ZPPtr1+1 - -.3 ldy #$ff - -.4 iny - lda (ZPPtr1),y - sta (ZPPtr2),y - bne .4 - tya - beq .7 - - sec - adc ZPPtr2 - sta ZPPtr2 - bcc .2 - inc ZPPtr2+1 - bra .2 + jsr RemoveStrFromArgV .7 ldy #S.PS.ARGC lda (pPS),y @@ -52,12 +26,6 @@ CMD.SHIFTA >SYSCALL ArgV .8 clc rts *-------------------------------------- -CMD.PWD ldy #S.PS.hPREFIX - lda (pPs),y - >SYSCALL GetMemPtr - >SYSCALL puts - rts -*-------------------------------------- CMD.PUSHD >LDA.G PUSHD.STACK cmp #PUSHD.STACK+PUSHD.STACK.MAX beq CMD.POPD.CSYN @@ -86,14 +54,20 @@ CMD.POPD >LDA.G PUSHD.STACK tay lda (pData),y - jsr CORE.SetPrefixA + jsr CMD.SetPrefixA >DEC.G PUSHD.STACK clc CMD.POPD.RTS rts -CMD.POPD.CSYN jmp CORE.Exec.CSYN +CMD.POPD.CSYN jmp CMD.Exec.CSYN +*-------------------------------------- +CMD.PWD ldy #S.PS.hPREFIX + lda (pPs),y + >SYSCALL GetMemPtr + >SYSCALL puts + rts *-------------------------------------- CMD.CD ldx #1 jsr CORE.GetArgX @@ -105,34 +79,41 @@ CMD.CD.HOME >LDYA L.ENV.HOME >LDYA L.ENV.ROOT >SYSCALL GetEnv - bcc CMD.CD.1 - - jmp CMD.PWD - -CMD.CD.1.9 pla - >SYSCALL freemem - bra CMD.POPD.CSYN + bcs CMD.PWD CMD.CD.1 >SYSCALL realpath bcs CMD.POPD.RTS + >STYA ZPPtr1 - phx + stx ZPPtr3 Save hMem ldy #1 lda (ZPPtr1),y - beq CORE.SetPrefixPHA we have '/' + bne .12 - >PUSHEA.G StatBuf + txa + jmp CMD.SetPrefixA we have '/' + +.12 >PUSHEA.G StatBuf >LDYA ZPPtr1 >SYSCALL STAT - bcs CMD.CD.1.9 + bcs .19 - >LDA.G StatBuf+S.STAT.P.TYPE +.10 >LDA.G StatBuf+S.STAT.P.TYPE cmp #S.FI.T.DIR - bne CMD.CD.1.9 + beq .11 + + lda #MLI.E.INVPATH + +.19 pha + lda ZPPtr3 + >SYSCALL freemem + pla + sec + rts - ldy #$ff +.11 ldy #$ff .1 iny lda (ZPPtr1),y @@ -141,13 +122,16 @@ CMD.CD.1 >SYSCALL realpath dey lda (ZPPtr1),y cmp #'/' - beq CORE.SetPrefixPHA already ends witrh a / + bne .14 - iny + lda ZPPtr3 + jmp CMD.SetPrefixA already ends with a / + +.14 iny iny lda #0 >SYSCALL getmem - bcs CMD.CD.1.9 + bcs .19 >STYA ZPPtr2 ldy #$ff @@ -167,8 +151,7 @@ CMD.CD.1 >SYSCALL realpath >SYSCALL freemem pla *-------------------------------------- -CORE.SetPrefixA pha -CORE.SetPrefixPHA +CMD.SetPrefixA pha ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL FreeMem @@ -181,11 +164,11 @@ CORE.SetPrefixPHA * clc rts *-------------------------------------- -CORE.Exec.CSYN lda #E.CSYN +CMD.Exec.CSYN lda #E.CSYN sec rts *-------------------------------------- -CORE.Exec.SSYN lda #E.SSYN +CMD.Exec.SSYN lda #E.SSYN sec rts *-------------------------------------- @@ -309,7 +292,7 @@ CMD.SET.1 >STZ.G CORE.Varname .8 clc rts -.99 jmp CORE.Exec.CSYN +.99 jmp CMD.Exec.CSYN CMD.SET.UNSET >LDA.G CORE.Varname tax @@ -448,7 +431,7 @@ CMD.GETKEY ldx #1 >SYSCALL SetEnv .9 rts -.99 jmp CORE.Exec.CSYN +.99 jmp CMD.Exec.CSYN *-------------------------------------- CMD.READ lda #1 >STA.G CORE.ArgIndex @@ -495,7 +478,7 @@ CMD.READ lda #1 clc .99 rts -.9 jmp CORE.Exec.CSYN +.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.SLEEP ldx #1 jsr CORE.GetArgX @@ -508,7 +491,7 @@ CMD.SLEEP ldx #1 clc rts -.9 jmp CORE.Exec.CSYN +.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.PAUSE lda #$FF >STA.G bPause @@ -544,7 +527,7 @@ CMD.MD ldx #1 >SYSCALL MKDir rts -.9 jmp CORE.Exec.CSYN +.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.REN ldx #2 jsr CORE.GetArgX @@ -556,7 +539,7 @@ CMD.REN ldx #2 >SYSCALL Rename rts -.9 jmp CORE.Exec.CSYN +.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.RD ldx #1 jsr CORE.GetArgX @@ -578,19 +561,19 @@ CMD.RD ldx #1 >SYSCALL Remove .99 rts -.9 jmp CORE.Exec.CSYN +.9 jmp CMD.Exec.CSYN *-------------------------------------- CMD.BREAK -.9 jmp CORE.Exec.SSYN +.9 jmp CMD.Exec.SSYN *-------------------------------------- CMD.CONTINUE -.9 jmp CORE.Exec.SSYN +.9 jmp CMD.Exec.SSYN *-------------------------------------- CMD.FOR -.9 jmp CORE.Exec.SSYN +.9 jmp CMD.Exec.SSYN *-------------------------------------- CMD.NEXT -.9 jmp CORE.Exec.SSYN +.9 jmp CMD.Exec.SSYN *-------------------------------------- CMD.WHILE CMD.IF jsr CORE.StkGet diff --git a/BIN/SHELL.S.CORE.txt b/BIN/SHELL.S.CORE.txt index 7f42ecd8..abb4b688 100644 --- a/BIN/SHELL.S.CORE.txt +++ b/BIN/SHELL.S.CORE.txt @@ -19,20 +19,30 @@ CORE.Quit >LDA.G CORE.hArgVBuf *-------------------------------------- * Input : ZPCLBuf/ZPFileBufPtr * Get Line from buf until ;, CR, \0 (EOL / EOF) -> ZPArgVBuf -* Tokenize ZPArgVBuf *-------------------------------------- -CORE.GetCmdFromFile +CORE.GetCmdFromFileBuf >LDYA ZPFileBufPtr >STYA ZPFileBufPtrBak + + jsr CORE.GetCmd + bcs .9 - lda (ZPFileBufPtr) + >LDYA ZPPtr1 + >STYA ZPFileBufPtr +.9 rts + +CORE.GetCmdFromClBuf + >LDYA ZPCLBuf + +CORE.GetCmd >STYA ZPPtr1 + lda (ZPPtr1) beq .9 ldx #0 not in " ldy #0 -.1 lda (ZPFileBufPtr),y +.1 lda (ZPPtr1),y beq .7 cmp #C.CR @@ -56,13 +66,12 @@ CORE.GetCmdFromFile lda #';' -.5 sta (ZPCLBuf),y +.5 sta (ZPArgVBuf),y iny - cpy #CL.MAX bne .1 lda #E.SYN Line Too long !!! -* sec + sec rts .6 sec skip CR or ; @@ -71,19 +80,14 @@ CORE.GetCmdFromFile .7 clc tya - adc ZPFileBufPtr - sta ZPFileBufPtr + adc ZPPtr1 + sta ZPPtr1 bcc .8 - inc ZPFileBufPtr+1 + inc ZPPtr1+1 .8 lda #0 - sta (ZPCLBuf),y + sta (ZPArgVBuf),y - tya - >STA.G CL.Len - lda #$ff - >STA.G CL.bExec - clc rts @@ -91,7 +95,8 @@ CORE.GetCmdFromFile sec rts *-------------------------------------- -* Input : ZPArgVBuf +* Input : ZPArgVBuf (String) +* Tokenize ZPArgVBuf * :LOOP * if CmdSep=| : * set hStdIn = hStdOut @@ -112,13 +117,13 @@ CORE.GetCmdFromFile * set hStdIn = hStdOut * set hStdOut = Std *-------------------------------------- -CORE.Exec >PUSHW ZPCLBuf - >LDYA ZPCLBuf - >STYA ZPCLBufPtr +CORE.Exec >PUSHW ZPArgVBuf + >LDYA ZPArgVBuf + >STYA ZPArgVBufPtr - >SYSCALL Args2ArgV TOKENIZE CL in ZPCLBuf + >SYSCALL Args2ArgV TOKENIZE CL in ZPArgVBuf - lda (ZPCLBufPtr) empty line ? + lda (ZPArgVBufPtr) empty line ? beq .80 cmp #'#' comment ? @@ -128,10 +133,7 @@ CORE.Exec >PUSHW ZPCLBuf *************** LOOP Cmd Arg -.10 lda #0 - sta (ZPArgVBuf) - - lda #S.PS.F.HOLD+S.PS.F.DUPENV +.10 lda #S.PS.F.HOLD+S.PS.F.DUPENV >STA.G CORE.PSFlags >LDA.G CL.CmdSep @@ -146,36 +148,33 @@ CORE.Exec >PUSHW ZPCLBuf beq .80 yes, ignore remaining ldy #1 - lda (ZPCLBufPtr),y only one char ? + lda (ZPArgVBufPtr),y only one char ? bne .2 - lda (ZPCLBufPtr) + lda (ZPArgVBufPtr) cmp #'.' leading dot ? bne .2 >LDA.G CORE.PSFlags yes, child process will run in same ENV and #$ff^S.PS.F.DUPENV sta (pData),y - jsr CORE.NextCLToken and skip this token + jsr CORE.ShiftArgVToken and skip this token .2 jsr CORE.IO.Check bcc .7 IO token & related args processed tay an error ? bne .90 yes...I/O error... - jsr CORE.AddCLBufPtrToArgV no...add as cmd or arg - bcs .90 + jsr CORE.NextArgVToken no...keep as cmd or arg -.6 jsr CORE.NextCLToken - -.7 lda (ZPCLBufPtr) +.7 lda (ZPArgVBufPtr) beq .71 EOL... cmp #';' bne .70 >STA.G CL.CmdSep - jsr CORE.NextCLToken Skip ; + jsr CORE.ShiftArgVToken Skip ; bra .72 exec .70 cmp #'|' @@ -185,10 +184,10 @@ CORE.Exec >PUSHW ZPCLBuf * PIPE - jsr CORE.NextCLToken Skip | + jsr CORE.ShiftArgVToken Skip | bra .72 and exec - jsr CORE.NextCLToken Skip ; + jsr CORE.ShiftArgVToken Skip ; lda #0 .71 >STA.G CL.CmdSep @@ -241,9 +240,15 @@ CORE.ExecCmd ldy #$ff bpl .8 parent context is FALSE, skip line .3 >LDA.G CORE.IntCmd - bpl .80 Internal - - >PUSHB.G CORE.PSFlags + bmi CORE.ExecExtCmd + + tax + jmp (J.CMD,x) + +.8 clc +.9 rts +*-------------------------------------- +CORE.ExecExtCmd >PUSHB.G CORE.PSFlags >LDYA ZPArgVBuf >SYSCALL execv bcs .9 @@ -270,59 +275,19 @@ CORE.ExecCmd ldy #$ff .8 clc .9 rts - -.80 tax - jmp (J.CMD,x) *-------------------------------------- -CORE.NextCLToken - lda (ZPCLBufPtr) - inc ZPCLBufPtr +CORE.NextArgVToken + lda (ZPArgVBufPtr) + inc ZPArgVBufPtr bne .1 - inc ZPCLBufPtr+1 + inc ZPArgVBufPtr+1 .1 tax - bne CORE.NextCLToken + bne CORE.NextArgVToken rts *-------------------------------------- -CORE.AddCLBufPtrToArgV - >LDYA ZPCLBufPtr - >STYA ZPPtr1 - - >LDYA ZPArgVBuf - >STYA ZPPtr2 - -.1 lda (ZPPtr2) scan to end of argV - beq .6 - -.2 inc ZPPtr2 - bne .3 - inc ZPPtr2+1 -.3 lda (ZPPtr2) - bne .2 - - inc ZPPtr2 - bne .4 - inc ZPPtr2+1 -.4 lda (ZPPtr2) - bne .2 - -.6 ldy #$ff - -.7 iny -* beq .9 - lda (ZPPtr1),y - sta (ZPPtr2),y - bne .7 including str ending \0 - - iny -* beq .9 - sta (ZPPtr2),y arg[] ending \0 - - clc - rts - -.9 lda #E.BUF - sec - rts +CORE.ShiftArgVToken + >LDYA ZPArgVBufPtr + jmp RemoveStrFromArgV *-------------------------------------- CORE.GetArgX >LDYA ZPArgVBuf @@ -433,13 +398,13 @@ CORE.StkGet lda (pData) StackPtr sec rts *-------------------------------------- -CORE.IO.Check >PUSHW ZPCLBufPtr +CORE.IO.Check >PUSHW ZPArgVBufPtr >LDYA L.CORE.IO jsr Lookup bcs .9 not a IO token...should be an arg.... phx - jsr CORE.NextCLToken skip this IO token + jsr CORE.ShiftArgVToken skip this IO token plx jmp (J.CORE.IO,x) @@ -458,7 +423,7 @@ CORE.IO.IN lda #O.RDONLY+O.TEXT bcs .9 jsr IO.Set.In - jsr CORE.NextCLToken skip arg + jsr CORE.ShiftArgVToken skip arg clc .9 rts @@ -472,7 +437,7 @@ CORE.IO.OUT.1 jsr CORE.IO.Open bcs .9 jsr IO.Set.Out - jsr CORE.NextCLToken skip arg + jsr CORE.ShiftArgVToken skip arg clc .9 rts @@ -484,19 +449,19 @@ CORE.IO.2OUT.1 jsr CORE.IO.Open bcs .9 jsr IO.Set.Err - jsr CORE.NextCLToken skip arg + jsr CORE.ShiftArgVToken skip arg clc .9 rts *-------------------------------------- CORE.IO.Open pha - lda (ZPCLBufPtr) + lda (ZPArgVBufPtr) beq .9 no arg left.... >PUSHWI 0 Aux type >PUSHBI S.FI.T.TXT ftype pla >PUSHA flags - >LDYA ZPCLBufPtr + >LDYA ZPArgVBufPtr >SYSCALL fopen rts diff --git a/BIN/SHELL.S.txt b/BIN/SHELL.S.txt index 19e4de9d..1a3d63e2 100644 --- a/BIN/SHELL.S.txt +++ b/BIN/SHELL.S.txt @@ -11,7 +11,7 @@ History.MAX .EQ 256 CORE.STACK.MAX .EQ 64 PUSHD.STACK.MAX .EQ 8 *-------------------------------------- -C.STARTPROC .EQ 0 +C.NOHUP .EQ 0 C.CD .EQ 2 C.DATE .EQ 4 C.ECHO .EQ 6 @@ -62,10 +62,10 @@ ZPPtr1 .BS 2 ZPPtr2 .BS 2 ZPPtr3 .BS 2 ZPCLBuf .BS 2 -ZPCLBufPtr .BS 2 ZPFileBufPtr .BS 2 ZPFileBufPtrBak .BS 2 ZPArgVBuf .BS 2 +ZPArgVBufPtr .BS 2 ZS.END .ED *-------------------------------------- * File Header (16 Bytes) @@ -119,7 +119,7 @@ J.CORE.IO .DA CORE.IO.AMP .DA CORE.IO.2OUTA .DA CORE.IO.2OUT L.CORE.INT .DA CORE.INT -J.CMD .DA CMD.STARTPROC +J.CMD .DA CMD.NOHUP .DA CMD.CD .DA CMD.DATE .DA CMD.ECHO @@ -189,7 +189,7 @@ CS.RUN jsr CL.Init lda #0 jsr CMD.SHIFTA Remove $0=/bin/shell - + bra CS.RUN.LOOP *-------------------------------------- .1 jsr CMD.CD.HOME @@ -300,6 +300,11 @@ CS.RUN.INTERACTIVE jsr HIS.Add + jsr CORE.GetCmdFromClBuf + + lda (ZPArgVBuf) + beq .8 + jsr CORE.Exec .8 jmp CS.RUN.LOOP.END @@ -358,7 +363,8 @@ CS.RUN.BATCH >SYSCALL GetChar clc jmp CS.RUN.LOOP.END -.2 jsr CORE.GetCmdFromFile +.2 jsr CORE.GetCmdFromFileBuf + bcc .7 cmp #C.EOF @@ -373,20 +379,17 @@ CS.RUN.BATCH >SYSCALL GetChar .3 sec bra CS.RUN.LOOP.END -.7 >LDA.G CL.bExec - bpl CS.RUN.LOOP.80 - - lda (ZPCLBuf) +.7 lda (ZPArgVBuf) beq CS.RUN.LOOP.80 >LDA.G bSET.X beq .8 - >PUSHW ZPCLBuf + >PUSHW ZPArgVBuf >PUSHBI 2 >LDYA L.MSG.TRACE >SYSCALL printf - + bcs .9 .8 jsr CORE.Exec @@ -498,6 +501,41 @@ Lookup >STYA ZPPtr2 sec rts +*-------------------------------------- +RemoveStrFromArgV + >STYA ZPPtr1 + >STYA ZPPtr2 + + ldy #$ff + +.1 iny Compute ArgX len + lda (ZPPtr1),y + bne .1 + +.2 tya + sec + adc ZPPtr1 + sta ZPPtr1 + bcc .3 + inc ZPPtr1+1 + +.3 ldy #$ff + +.4 iny + lda (ZPPtr1),y + sta (ZPPtr2),y + bne .4 + tya + beq .8 + + sec + adc ZPPtr2 + sta ZPPtr2 + bcc .2 + inc ZPPtr2+1 + bra .2 + +.8 rts *-------------------------------------- .INB USR/SRC/BIN/SHELL.S.CL .INB USR/SRC/BIN/SHELL.S.HIS @@ -539,7 +577,7 @@ CORE.IO .AZ "&" .AZ "2>" .HS 00 *-------------------------------------- -CORE.INT .AZ "STARTPROC" +CORE.INT .AZ "NOHUP" .AZ "CD" .AZ "DATE" .AZ "ECHO" diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index d43e5969..03cff519 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -480,6 +480,7 @@ S.FD.PIPE .EQ 8 * PS STRUCT *-------------------------------------- S.PS.F .EQ 0 +S.PS.F.NOHUP .EQ %10000000 S.PS.F.INIT .EQ %10000000 S.PS.F.RUN .EQ %01000000 S.PS.F.QUIT .EQ %00100000 diff --git a/README.md b/README.md index 9c8f603b..ef63ae2b 100644 --- a/README.md +++ b/README.md @@ -280,7 +280,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | TIME | Working | | | SET | Working | -X toggle debug mode | | SLEEP | Working | Wait 10th sec | -| STARTPROC | Working | Used in A2osX.startup | +| NOHUP | Working | Start a process with PPID=PS0 (Daemon) | | SHIFT | Working | Remove $1 from cmd line | | ---- | ------ | ------- | | IF .. ELSE .. FI | Working | [ -d direxists ] | diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 709649ba..457d0f6e 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -22,20 +22,22 @@ BIN.R.Offset .BS 2 K.LoadLib jsr ENV.Search.LIB bcs .9 >LDYAI K.Buf256 + jsr BIN.Load Y,A = "/PATH/BIN" bcs .9 >STYA .1+1 - stx BIN.hMem - + stx .8+1 + txa Pass hLib to LibLoad ldx #LIBMGR.LOAD -.1 jsr $ffff Self Modified, Call LIB.LOAD function +.1 jsr $ffff SELF MODIFIED, Call LIB.LOAD function + ldx .8+1 bcs BIN.Load.Cleanup - lda BIN.hMem hLib - clc +.8 lda #$ff SELF MODIFIED, hLib +* clc .9 rts *-------------------------------------- * UnloadLib @@ -47,11 +49,14 @@ K.UnloadLib pha jsr K.GetMemPtr >STYA .2+1 - jsr MEM.decREFCNT + ldy #S.MEM.REFCNT + lda (ZPMemMgrSPtr),y + dec + sta (ZPMemMgrSPtr),y beq .1 pla - clc +* clc rts .1 ldx #LIBMGR.UNLOAD @@ -75,8 +80,8 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" bcs .9 >STYA .3+1 - stx BIN.hMem - + stx .8+1 + ldx #$ff .1 inx Skip "BIN" @@ -91,20 +96,22 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" adc .2+2 Y,A = ARGS .3 jsr $ffff SELF MODIFIED, call Dev.Detect - bcs BIN.Load.Cleanup +.8 ldx #$ff SELF MODIFIED, hMem jsr BIN.Load.Cleanup + bcs .9 lda #0 Make sure RC = 0 if success clc .9 rts BIN.Load.Cleanup + php pha - lda BIN.hMem + txa jsr K.FreeMem pla - sec + plp BIN.Load.Cleanup.RTS rts *-------------------------------------- @@ -147,12 +154,15 @@ BIN.Load >STYA BIN.CmdLine bne .2 txa - jsr K.GetMemPtr + jsr MEM.GetMemByID - jsr MEM.IncREFCNT + ldy #S.MEM.REFCNT + lda (ZPMemMgrSPtr),y + inc + sta (ZPMemMgrSPtr),y clc - jmp K.GetMemPtr.ZPMemMgrSPtr + jmp MEM.GetMEMPTR * X=hMem, Y,A=Ptr *-------------------------------------- * STAT Already called by Filesearch in FindDRV, FindLIB @@ -210,7 +220,7 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE >SYSCALL StrDup make a copy of this string bcs .98 - lda BIN.hMem Keep X=hMem + lda BIN.hMem Keep X=new string hMem jsr MEM.GetMemByID X unmodified lda (ZPMemMgrSPtr) @@ -223,9 +233,10 @@ BIN.Load.1 >LDYA K.S.STAT+S.STAT.P.AUXTYPE ldx BIN.hMem return hMEM to Caller... clc - jmp K.GetMemPtr.ZPMemMgrSPtr ...and Y,A=PTR to CS + jmp MEM.GetMEMPTR ...and Y,A=PTR to CS -.98 jmp BIN.Load.Cleanup Discard Loaded Code, exits CS +.98 ldx BIN.hMem + jmp BIN.Load.Cleanup Discard Loaded Code, exits CS */-------------------------------------- * # InsDrv * ## C diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 7184f10c..68237da2 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -24,7 +24,6 @@ FIO.hFILE .BS 1 FIO.MemPtr .BS 2 FIO.hMem .BS 1 FIO.BytesRead .BS 2 -FIO.ZPSIZE .EQ * .ED *-------------------------------------- K.LoadTxtFile sec diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 74da7513..50ba530e 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -192,7 +192,7 @@ MEM.GetMem.YAX stx MEM.ReqFlags ldy #S.MEM.OWNERPID sta (ZPMemMgrSPtr),y clc - jmp K.GetMemPtr.ZPMemMgrSPtr + jmp MEM.GetMEMPTR * A = HI PTR,Y = LO PTR,X = Current hMem .9 rts @@ -248,18 +248,6 @@ Mem.AddSlot >STYA ZPMemMgrTmp1 save req size sec rts *-------------------------------------- -MEM.IncREFCNT ldy #S.MEM.REFCNT - lda (ZPMemMgrSPtr),y - inc - sta (ZPMemMgrSPtr),y - rts -*-------------------------------------- -MEM.decREFCNT ldy #S.MEM.REFCNT - lda (ZPMemMgrSPtr),y - dec - sta (ZPMemMgrSPtr),y - rts -*-------------------------------------- MEM.NextSlot lda ZPMemMgrSPtr clc adc #S.MEM @@ -284,7 +272,7 @@ K.FreeMem.FREED clc phx php - pha + phy hMem n Y ldy #S.PS.hARGV lda (pPS),y jsr K.GetMemPtr @@ -314,17 +302,14 @@ K.FreeMem tay bcc .10 bne K.FreeMem.BAD -.10 pha - jsr MEM.GetMemByID X unmodified +.10 jsr MEM.GetMemByID X,Y unmodified lda (ZPMemMgrSPtr) In use ? - bmi .11 + bpl K.FreeMem.FREED - pla - bra K.FreeMem.FREED - -.11 pla - - jsr MEM.decREFCNT only one left ? + ldy #S.MEM.REFCNT + lda (ZPMemMgrSPtr),y + dec + sta (ZPMemMgrSPtr),y only one left ? bne .8 no, must be a code segment loaded several times lda (ZPMemMgrSPtr) @@ -392,8 +377,7 @@ K.FreeMem tay .FIN *-------------------------------------- K.GetMemPtr jsr MEM.GetMemByID -K.GetMemPtr.ZPMemMgrSPtr - ldy #S.MEM.PTR +MEM.GetMEMPTR ldy #S.MEM.PTR lda (ZPMemMgrSPtr),y pha iny @@ -445,6 +429,7 @@ K.SListAddData K.SListGetData K.SListSetData pha >PULLW ZPSListID + bra K.SListPullA */-------------------------------------- * # SListGetByID * ## ASM @@ -577,7 +562,10 @@ K.LoadStkObj >SYSCALL LoadFile bcs .99 stx .8+1 Save MAIN hMem - >STYA A2L Save LEN temporarly + iny + bne .1 + inc +1 for ending 0 +.1 >STYA A2L Save LEN temporarly jsr K.NewStkObj bcs .9 @@ -601,6 +589,11 @@ K.LoadStkObj >SYSCALL LoadFile sec Main To Aux jsr AuxMove + lda #0 + sta SETWRITEAUX + sta (A2L) + sta CLRWRITEAUX + .8 lda #$ff SELF MODIFIED jsr K.FreeMem release MAIN memory diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index df7d6b29..c66c1168 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -183,13 +183,16 @@ PS.CreateChild ldx #0 cpy #S.PS.hStdErr+1 bne .81 + bit PS.Flags S.PS.F.NOHUP + bmi .5 + ldy #S.PS.PID lda (pPs),y ldy #S.PS.PPID sta (PS.NewPSPtr),y - lda #S.PS.F.HOLD +.5 lda #S.PS.F.HOLD bit PS.Flags beq .82