diff --git a/.Docs/KERNEL.md b/.Docs/KERNEL.md index 9d742ef1..37791a1c 100644 --- a/.Docs/KERNEL.md +++ b/.Docs/KERNEL.md @@ -551,6 +551,13 @@ Load a file in AUX memory (Stock Objects) Y,A = File Length X = hMem of Loaded Object in AUX mem +# GetPSStat +**In:** + Y,A = Ptr to K.PS.MAX*2+1 bytes buffer + +## RETURN VALUE + Buffer filled with PS stats + # ExecL ## C @@ -584,13 +591,6 @@ A = Child PSID ## RETURN VALUE A = Status Byte -# GetPSStat -**In:** - Y,A = Ptr to K.PS.MAX*2+1 bytes buffer - -## RETURN VALUE - Buffer filled with PS stats - # Stat Return information about a file @@ -656,6 +656,20 @@ return a hFILE to a new FIFO CC = OK, CS = ERROR A = hFILE +# PutChar +Print A (char) to StdOut + +## C +`int putchar ( int character );` + +## ASM +**In:** +`lda caracter` +`>SYSCALL putchar` + +## RETURN VALUE +CC = success + # FPutC Print A (char) to hFILE @@ -671,20 +685,6 @@ Print A (char) to hFILE ## RETURN VALUE CC = success -# PutChar -Print A (char) to StdOut - -## C -`int putchar ( int character );` - -## ASM -**In:** -`lda caracter` -`>SYSCALL putchar` - -## RETURN VALUE -CC = success - # PutS Write Str to StdOut, appends '\r\n' @@ -719,8 +719,8 @@ Prints C-Style String ## C `int printf ( const char * format, ... );` -`int sprintf ( char * str, const char * format, ... );` `int fprintf ( hFILE stream, const char * format, ... );` +`int sprintf ( char * str, const char * format, ... );` ## ASM **In:** @@ -1109,6 +1109,22 @@ CC : success X = hMem of Full Path CS : A = Error Code +# StrMatch +Compare a String against pattern (e.g. '*test?.txt') + +## C +`int * strmatch ( char * s, const char * pattern );` + +## ASM +**In:** +`>PUSHWI pattern` +`>LDYAI s` +`>SYSCALL strmatch` + +## RETURN VALUE +CC : match +CS : no match + # StrLen Returns Length of C-String @@ -1152,22 +1168,6 @@ Copy string ## RETURN VALUE Y,A = destination -# StrMatch -Compare a String against pattern (e.g. '*test?.txt') - -## C -`int * strmatch ( char * s, const char * pattern );` - -## ASM -**In:** -`>PUSHWI pattern` -`>LDYAI s` -`>SYSCALL strmatch` - -## RETURN VALUE -CC : match -CS : no match - # StrUpr/StrLwr Convert string to UPPERCASE/lowercase diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 3f1ca108..0595cd8f 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/SHELL.S.CMD.txt b/BIN/SHELL.S.CMD.txt index edfc53f2..16fafce4 100644 --- a/BIN/SHELL.S.CMD.txt +++ b/BIN/SHELL.S.CMD.txt @@ -17,6 +17,10 @@ CMD.Init >LDYAI 256 >STYA ZPArgVBuf txa >STA.G CMD.hArgVBuf + + lda #PUSHD.STACK + tay + sta (pData),y .9 rts *-------------------------------------- @@ -99,6 +103,53 @@ Cmd.INT.PWD ldy #S.PS.hPREFIX >SYSCALL puts rts *-------------------------------------- +Cmd.INT.PUSHD >LDA.G PUSHD.STACK + cmp #PUSHD.STACK+PUSHD.STACK.MAX + beq .9 + + ldy #S.PS.hPREFIX + lda (pPs),y + >SYSCALL GetMemPtr + >SYSCALL NewStr + bcs .99 + + >INC.G PUSHD.STACK + tay + txa + sta (pData),y + + ldx #1 + jsr Cmd.GetArgX + bcs .8 + + >SYSCALL RealPath + bcs .99 + + jmp Cmd.INT.CD.1 + +.8 clc + rts + +.9 lda #E.SYNTAX + sec +.99 rts +*-------------------------------------- +Cmd.INT.POPD >LDA.G PUSHD.STACK + cmp #PUSHD.STACK + beq .9 + + tay + lda (pData),y + jsr Cmd.SetPrefixA + + >DEC.G PUSHD.STACK + clc + rts + +.9 lda #E.SYNTAX + sec + rts +*-------------------------------------- Cmd.INT.CD ldx #1 jsr Cmd.GetArgX bcs Cmd.INT.CD.HOME @@ -114,7 +165,9 @@ Cmd.INT.CD.HOME >LDYA L.ENV.HOME >LDYA L.ENV.ROOT >SYSCALL GetEnv - bcs Cmd.INT.PWD + bcc .1 + + jmp Cmd.INT.PWD .1 >SYSCALL ExpandStr bcs Cmd.INT.CD.RTS @@ -134,9 +187,13 @@ Cmd.INT.CD.1 >STYA ZPPtr1 >LDA.G CMD.Stat+S.STAT.P.TYPE cmp #S.FI.T.DIR - bne Cmd.Exec.ERRSYN + beq .1 - ldy #0 + lda #E.SYNTAX + sec + bra .90 + +.1 ldy #0 .5 iny lda (ZPPtr1),y @@ -156,8 +213,20 @@ Cmd.INT.CD.1 >STYA ZPPtr1 .8 >LDYA ZPPtr1 >SYSCALL NewStr bcs .90 - phx + txa + jsr Cmd.SetPrefixA + +.90 php + pha + >LDA.G CMD.hCmdLine + >SYSCALL FreeMem + pla + plp +.9 rts +*-------------------------------------- +Cmd.SetPrefixA pha + ldy #S.PS.hPREFIX lda (pPs),y >SYSCALL FreeMem @@ -166,15 +235,7 @@ Cmd.INT.CD.1 >STYA ZPPtr1 ldy #S.PS.hPREFIX sta (pPs),y - jsr SetPWD.I - -.90 php - pha - >LDA.G CMD.hCmdLine - >SYSCALL FreeMem - pla - plp -.9 rts + jmp SetPWD.I *-------------------------------------- Cmd.Exec.ERRSYN lda #E.SYNTAX sec @@ -508,12 +569,6 @@ Cmd.INT.RD ldx #1 >SYSCALL Remove .99 rts -.9 jmp Cmd.Exec.ERRSYN -*-------------------------------------- -Cmd.INT.PUSHD -.9 jmp Cmd.Exec.ERRSYN -*-------------------------------------- -Cmd.INT.POPD .9 jmp Cmd.Exec.ERRSYN *-------------------------------------- Cmd.INT.BREAK diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 1838cbaf..d2894072 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -236,6 +236,9 @@ Mem.NextSlot lda ZPMemMgrSPtr * none. * (X unmodified) *\-------------------------------------- +K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad hMem,BIN=%s\r\n" +K.FreeMem.ERRFREED .AZ "FreeMem:$%h=already freed,BIN=%s\r\n" +*-------------------------------------- K.FreeMem.BAD pha ldy #S.PS.hARGV lda (pPS),y @@ -251,18 +254,39 @@ K.FreeMem.BAD pha >DEBUGOA sec rts +*-------------------------------------- +K.FreeMem.FREED ldy #S.PS.hARGV + lda (pPS),y + jsr K.GetMemPtr + >PUSHYA + pla + >PUSHA + + >PUSHBI 3 + phx + >LDYAI K.FreeMem.ERRFREED + >SYSCALL printf + plx + sec + rts +*-------------------------------------- K.FreeMem tay - beq K.FreeMem.BAD Slot=0, reserved by Kernel + +* cpy #$23 +* bne .11 +* >DEBUG +*.11 cmp Mem.LastSlot bcc .10 bne K.FreeMem.BAD -.10 jsr K.GetMemByID X unmodified +.10 pha + jsr K.GetMemByID X unmodified lda (ZPMemMgrSPtr) bpl K.FreeMem.FREED In use ? - + pla ldy #S.MEM.REFCNT lda (ZPMemMgrSPtr),y Get count of those referencing this hMem dec only one left ? @@ -313,22 +337,6 @@ K.FreeMem tay >STYA Mem.Free clc rts -*-------------------------------------- -K.FreeMem.FREED ldy #S.PS.hARGV - lda (pPS),y - jsr K.GetMemPtr - >PUSHYA - >PUSHBI 2 - phx - >LDYAI K.FreeMem.ERRFREED - >SYSCALL printf - plx - >DEBUGOA - sec - rts -*-------------------------------------- -K.FreeMem.ERRBAD .AZ "FreeMem:%h=Bad hMem,BIN=%s\r\n" -K.FreeMem.ERRFREED .AZ "FreeMem:hMem already freed,BIN=%s\r\n" */-------------------------------------- * # GetMemPtr * A = hMem diff --git a/X.ERRORS.S.txt b/X.ERRORS.S.txt index a8923011..49ce3a3c 100644 --- a/X.ERRORS.S.txt +++ b/X.ERRORS.S.txt @@ -24,11 +24,22 @@ ERR.Codes .DA #MLI.E.IO .DA #E.OOH .DA #E.INVH .DA #E.BUF + .DA #E.BADPATH + .DA #E.BADARG + .DA #E.NSP .DA #E.SYN .DA #E.ENVF .DA #E.IBIN .DA #E.FTB .DA #3 Ctrl-C +*-------------------------------------- + .DA #E.SYNTAX + .DA #E.STKOVERFLOW + .DA #E.NOWHILE + .DA #E.NOFOR + .DA #E.NOIF + .DA #E.BADEXP + .DA #E.BADFTYPE *-------------------------------------- ERR.Count .EQ *-ERR.Codes *-------------------------------------- @@ -53,11 +64,22 @@ ERR.Messages >PSTR "I/O Error" >PSTR "Out Of Memory Handle" >PSTR "Invalid Handle" >PSTR "Buffer Overflow" + >PSTR "Bad Path" + >PSTR "Bad API Argument" + >PSTR "No Such Process" >PSTR "Syntax Error" >PSTR "Env Is Full" >PSTR "Invalid BIN format" >PSTR "File Too Big" >PSTR "User Interrupt" +*-------------------------------------- + >PSTR "Script Syntax Error" + >PSTR "Stack Overflow" + >PSTR "LOOP Without WHILE" + >PSTR "NEXT Without FOR" + >PSTR "FI/ELSE Without IF" + >PSTR "Bad Expression" + >PSTR "Bad File Type" *-------------------------------------- >PSTR "Unknown Error" *--------------------------------------