diff --git a/.Docs/.TEMPLATE.S.txt b/.Docs/.TEMPLATE.S.txt index 4d32cdc7..f7e08d5c 100644 --- a/.Docs/.TEMPLATE.S.txt +++ b/.Docs/.TEMPLATE.S.txt @@ -15,8 +15,7 @@ AUTO 4,1 Enable MASM3 auto line num .OR ZPBIN ZS.START * MyPtr .BS 2 -ZS.END - .ED +ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- diff --git a/BIN/SHELL.S.CL.txt b/BIN/SHELL.S.CL.txt index 6feda6cb..49c1bbfa 100644 --- a/BIN/SHELL.S.CL.txt +++ b/BIN/SHELL.S.CL.txt @@ -455,7 +455,7 @@ CL.CheckCmd ldy #$ff txa >STA.G CMD.hCmdLine - >LDYA L.ENV.PATH push ENVNAME=PATH for search + >LDYA L.ENV.PATH ENVNAME=PATH for search >SYSCALL GetEnv get value for ENV=PATH bcs .5 no PATH, try workdir diff --git a/BIN/SHELL.S.txt b/BIN/SHELL.S.txt index ffbf2960..c65b5aaf 100644 --- a/BIN/SHELL.S.txt +++ b/BIN/SHELL.S.txt @@ -56,19 +56,22 @@ E.BADFTYPE .EQ $C8 .INB INC/MLI.I .INB INC/MLI.E.I *-------------------------------------- -ZPPtr1 .EQ ZPBIN -ZPPtr2 .EQ ZPBIN+2 -ZPPtr3 .EQ ZPBIN+4 -ZPCLBuf .EQ ZPBIN+6 -ZPArgVBuf .EQ ZPBIN+8 -ZPFileBufPtr .EQ ZPBIN+10 -ZPCLBufPtr .EQ ZPBIN+12 + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +ZPPtr3 .BS 2 +ZPCLBuf .BS 2 +ZPArgVBuf .BS 2 +ZPFileBufPtr .BS 2 +ZPCLBufPtr .BS 2 .DO CSH=1 -ZPCSHSymbols .EQ ZPBIN+14 -ZPCSHData .EQ ZPBIN+16 -ZPCSHValue .EQ ZPBIN+18 -ZPCSHStack .EQ ZPBIN+20 +ZPCSHSymbols .BS 2 +ZPCSHData .BS 2 +ZPCSHValue .BS 2 +ZPCSHStack .BS 2 .FIN +ZS.END .ED *-------------------------------------- * File Header (16 Bytes) *-------------------------------------- @@ -80,12 +83,11 @@ CS.START cld .DA #0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS - .DA #64 SS - .DO CSH=1 - .DA #22 ZP - .ELSE - .DA #14 ZP - .FIN + .DA #0 + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data SegmentSize + .DA #64 Stack Size + .DA #ZS.END-ZS.START Zero Page Size .DA 0 *-------------------------------------- * Relocation Table diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index 26a99ccc..45f5abbf 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -21,7 +21,7 @@ BIN.R.Offset .BS 2 *-------------------------------------- K.LoadLib jsr BIN.FindLIB bcs .9 - + >LDYAI K.Buf256 jsr BIN.Load Y,A = "/PATH/BIN" bcs .9 @@ -78,7 +78,7 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" jsr BIN.FindDRV bcs .9 - + >LDYAI K.Buf256 jsr BIN.Load Y,A = "/PATH/BIN" bcs .9 @@ -113,34 +113,33 @@ K.LoadDrv >STYA .2+1 Save "BIN\0ARGS\0\0" jsr K.FreeMem pla sec - rts +K.LoadDrv.RTS rts *-------------------------------------- BIN.FindLIB ldx #0 .HS 2C BIT ABS BIN.FindDRV ldx #2 + .HS 2C BIT ABS +BIN.FindPATH ldx #4 >STYA BIN.CmdLine >LDYA BIN.Find.ENV,x jsr K.GetEnv get value for Search Path - bcs .9 + bcs K.LoadDrv.RTS >STYA ENV.SearchPath >LDYA BIN.CmdLine - jsr K.FileSearch.YA find LIB/DRV in Search - bcs .9 - - >LDYAI K.Buf256 -* clc -.9 rts + jmp ENV.FileSearch.YA find LIB/DRV in Search *-------------------------------------- BIN.Find.ENV .DA .1 .DA .2 + .DA .3 .1 .AZ "LIB" .2 .AZ "DRV" +.3 .AZ "PATH" *-------------------------------------- * BIN.Load * in : diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 53cc71ca..76c339bc 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -156,7 +156,7 @@ K.FileSearch pha pla Y,A = filename - jsr K.FileSearch.YA + jsr ENV.FileSearch.YA bcs .9 ldx #$ff @@ -174,7 +174,8 @@ K.FileSearch pha bpl .3 .9 rts -K.FileSearch.YA >STYA .4+1 +ENV.FileSearch.YA + >STYA .4+1 >LDYA ENV.SearchPath jsr K.ExpandStr Y,A = Search Path, Expand it diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 3b256360..683edb42 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -422,6 +422,13 @@ K.GUIOSD.JMP sta SETREADAUX sta CLRWRITEAUX rts *-------------------------------------- +K.realpath.I.GO bit RRAMWRAMBNK1 + bit RRAMWRAMBNK1 + jsr K.realpath.I + bit RRAMWRAMBNK2 + bit RRAMWRAMBNK2 + rts +*-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.JMP LOAD USR/SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 994319ba..2c1b981b 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -51,7 +51,7 @@ K.ExecL sty .1+1 */-------------------------------------- * # ExecV * ## C -* `int exec(const char* argv[], short int flags);` +* `int execv(const char* argv[], short int flags);` * ## ASM * `>PUSHB flags` * `>LDYA argv` @@ -205,27 +205,54 @@ PS.CreateChild ldx CORE.PSCount clc Exit with A=PSID .9 rts *-------------------------------------- -PS.Load >PUSHWI K.S.STAT - >LDYA PS.ArgV - >SYSCALL stat BANK 1 - bcs .99 - - lda K.S.STAT+S.STAT.P.TYPE - cmp #S.FI.T.BIN - beq PS.LoadBIN - cmp #S.FI.T.TXT - bne .98 +PS.Load ldy #$ff + +.1 iny + lda (PS.ArgV),y + beq .2 no / in path...try search in PATH + cmp #'/' + bne .1 + + >LDYA PS.ArgV found /, some path specified, no search + jsr K.realpath.I.GO BANK1 + bcs .99 + + >PUSHWI K.S.STAT + >LDYAI K.Buf256 + >SYSCALL stat BANK 1 + bcc .6 + +.99 rts + +.2 >DEBUG + >LDYA PS.ArgV + jsr BIN.FindPATH Get fullpath in K.Buf256 + bcs .99 + +.6 lda K.S.STAT+S.STAT.P.TYPE + cmp #S.FI.T.BIN + bne .7 + >LDYAI K.Buf256 + bra PS.LoadBIN + +.7 cmp #S.FI.T.TXT + beq PS.Load.SCRIPT -* beq .10 * cmp #S.FI.T.SYS * bra * -.10 jsr PS.LoadGetHeader - bcs .99 +PS.Load.IBIN lda #E.IBIN + .HS 2C +PS.Load.IPATH lda #E.BADPATH + sec +PS.Load.RTS rts + +PS.Load.SCRIPT jsr PS.LoadGetHeader + bcs PS.Load.RTS >LDYAI PS.Load.ROOT jsr K.GetEnv ZPPtr3 Trashed - bcs .97 + bcs PS.Load.IPATH >STYA .21+1 @@ -240,7 +267,7 @@ PS.Load >PUSHWI K.S.STAT .3 lda K.IOBuf+128,y cmp PS.Load.HEADER,y - bne .98 + bne PS.Load.IBIN iny cpy #3 bne .3 @@ -258,25 +285,14 @@ PS.Load >PUSHWI K.S.STAT .5 >PUSHWI K.S.STAT >LDYAI K.IOBuf >SYSCALL stat BANK 1 - bcs .99 + bcs PS.Load.RTS lda PS.hMem Restore ZPPtr3 trashed by GetEnv jsr K.GetMemPtr >STYA ZPPtr3 - - >LDYAI K.IOBuf - - bra PS.LoadBIN.YA - -.97 lda #E.BADPATH - .HS 2C -.98 lda #E.IBIN - sec -.99 rts - -PS.LoadBIN >LDYA PS.ArgV - -PS.LoadBIN.YA jsr BIN.Load + >LDYAI K.IOBuf +*-------------------------------------- +PS.LoadBIN jsr BIN.Load bcs .9 >STYA ZPPtr4 save PTR to Code Segment diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 0261549c..bee606a3 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -270,9 +270,10 @@ STDLIB.32.Clear ldx #3 * # RealPath * Return the canonicalized absolute pathname * ## C -* `unsigned short int realpath (const char* str);` +* `unsigned short int realpath (const char* str, char *resolvedpath);` * ## ASM * **In:** +* `>PUSHWI resolvedpath` * `>LDYA str` * `>SYSCALL realpath` * ## RETURN VALUE @@ -396,7 +397,7 @@ K.realpath.I clc .89 lda #$ff SELF MODIFIED bpl .98 >LDYAI K.Buf256 - >SYSCALL StrDup + >SYSCALL StrDup BANK 2 rts .90 lda #E.BADPATH