diff --git a/A2OSX.BUILD.po b/A2OSX.BUILD.po index c21fa511..aabf54ae 100644 Binary files a/A2OSX.BUILD.po and b/A2OSX.BUILD.po differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 97d57b4c..87116cc7 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 76d9b7d2..e1052cb0 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -62,7 +62,7 @@ D.STACK.TOP .EQ $03F0 ...Down to $0300 *-------------------------------------- KrnBuf256 .EQ $0C00 Main *-------------------------------------- -KrnOut256 .EQ $0D00 Used to return Values to User Space +* .EQ $0D00 *-------------------------------------- K.MLI.PARAMS .EQ $0E00 Main, 18 bytes min for GetFileInfo K.MLI.PATH .EQ K.MLI.PARAMS+18 diff --git a/README.md b/README.md index 7b10d769..87a0e4bb 100644 --- a/README.md +++ b/README.md @@ -100,8 +100,9 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR. | Name | Status | Comment | | ---- | ------ | ------- | | $PWD | Working | 'Working Directory' | -| $* | Working | All Args | +| $0 | Working | Command Full Path | | $1-$9 | Working | Arg[n] | +| $* | Working | All Args | | $# | Working | Arg Count | | $? | Working | Return Code | | $@ | Working | Parent PID | diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index d4ba932d..1097c3e3 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -12,13 +12,6 @@ Cmd.ExecYA.1 >SYSCALL ExpandPStrYA >STYA ZPPtr1 phx - lda #'(' - >SYSCALL PutCA - >LDYA ZPPtr1 - >SYSCALL PPRintFYA - lda #')' - >SYSCALL PutCA - ldy #1 ldx #0 ARGS len diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index b7c73133..1bd3cac6 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -13,19 +13,21 @@ AUTO 6 *\-------------------------------------- K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string... -.11 >STYA ZPPtr2 +.1 >STYA ZPPtr2 stz KrnBuf256 init Expanded String len=0 stz K.ExpandPStr.bFound No var found yet + stz K.ExpandPStr.bNoExp Reset no expand flag ldy #0 -.10 stz K.ExpandPStr.Start +.10 stz K.ExpandPStr.Name + stz K.ExpandPStr.bInVar -.1 tya +.11 tya cmp (ZPPtr2) End of PSTR? - beq .6 + beq .8 iny lda (ZPPtr2),y @@ -36,55 +38,75 @@ K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string... lda K.ExpandPStr.bNoExp eor #$ff sta K.ExpandPStr.bNoExp toggle flag - bra .1 + bra .11 .21 bit K.ExpandPStr.bNoExp - bmi .22 + bpl .23 - ldx K.ExpandPStr.Start - bne .3 already in a var? +.22 ldx KrnBuf256 + inx + beq .8 + sta KrnBuf256,x + stx KrnBuf256 + bra .11 + +.23 ldx K.ExpandPStr.bInVar already in a var? + bne .3 yes.... cmp #'$' no, found one ? - beq .2 + bne .22 no, store.... -.22 inc KrnBuf256 no, copy char - ldx KrnBuf256 - sta KrnBuf256,x - bra .1 + sta K.ExpandPStr.bFound Toggle flag + sta K.ExpandPStr.bInVar -.2 sec - ror K.ExpandPStr.bFound Toggle flag - - sty K.ExpandPStr.Start save var start - stz K.ExpandPStr.End - bra .1 skip this char + bra .11 skip this char .3 cmp #'{' we are in var, "{" after "$"? - beq .2 - - cmp #'}' end of var? - beq .5 - - jsr K.ExpandPStr.VC we are in var, is char valid? - bcs .5 no, end here - sty K.ExpandPStr.End yes, save end - bra .1 + bne .31 + ldx K.ExpandPStr.Name No char in var yet ? + beq .11 normal, "${" syntax is ok,skip -.5 lda K.ExpandPStr.End get end - beq .1 empty {} or $/ + bne .5 not allowed char in varname, end of var - phy save current index - jsr K.ExpandPStr.AV +.31 cmp #'}' end of var? + beq .50 + + jsr K.ExpandPStrValidChar + bcc .32 yes, add to varname + + ldx K.ExpandPStr.Name + bne .5 varname has already chars...end of var + + inx must be a $? or ?x.....go expand + stx K.ExpandPStr.Name + sta K.ExpandPStr.Name+1 + bra .51 + +.32 ldx K.ExpandPStr.Name + inx + cpx #16 + beq .11 varname longer than 15....ignore + sta K.ExpandPStr.Name,x + stx K.ExpandPStr.Name + bra .11 + +.5 dey last char was invalid...move back + +.50 ldx K.ExpandPStr.Name + bne .51 + jmp .1 var name is empty...start over + +.51 phy save current index + jsr K.ExpandPStrGetValue ply restore index in string... - bra .10 reset start flag and continue + jmp .10 reset start flag and continue -.6 sty K.ExpandPStr.End end of PSTR - lda K.ExpandPStr.Start are we in a var? - beq .8 no...exit... +.8 ldx K.ExpandPStr.Name end of PSTR,are we in a var? + beq .80 no...exit... - jsr K.ExpandPStr.AV yes, expand and add to STR + jsr K.ExpandPStrGetValue yes, expand and add to STR -.8 lda K.ExpandPStr.hPStr working from our temp string ? +.80 lda K.ExpandPStr.hPStr working from our temp string ? beq .81 no... jsr K.FreeMemA yes, discard.... @@ -93,63 +115,31 @@ K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string... jsr K.NewPStrYA bcs .9 stx K.ExpandPStr.hPStr save this as temp string, in case of recurse - bit K.ExpandPStr.bFound Did we expand something ? - bpl .82 - jmp .11 Yes, start over with hPStr + ldx K.ExpandPStr.bFound Did we expand something ? + beq .82 + jmp .1 Yes, start over with hPStr -.82 -* or exit with Y,A & X from K.NewPStrYA +.82 ldx K.ExpandPStr.hPStr +* or exit with Y,A from K.NewPStrYA .9 rts *-------------------------------------- -K.ExpandPStr.AV lda K.ExpandPStr.End - sec - sbc K.ExpandPStr.Start compute len of VAR End-Start+1 +K.ExpandPStrGetValue + jsr ENV.ExpandSysVar + bcc .9 - ldx KrnBuf256 - inx - sta KrnBuf256,x - - stx ZPPtr1 Make Ptr1 -> Var NAME - lda /KrnBuf256 - sta ZPPtr1+1 - - ldy K.ExpandPStr.Start - -.1 iny - inx - lda (ZPPtr2),y - sta KrnBuf256,x - cpy K.ExpandPStr.End - bne .1 - - jsr ENV.CheckSysVarPtr1 - bcc .2 Ptr3=VALUE - - jsr ENV.FindVarPtr1 + >LDYAI K.ExpandPStr.Name + jsr K.GetEnvYA bcs .9 - - jsr ENV.NextEnvPtr3 Skip NAME -.2 lda (ZPPtr3) - beq .9 in case CheckSysVarPtr1 returned a NUL string + >STYA ZPPtr3 - ldy #0 - ldx KrnBuf256 - -.3 iny - lda (ZPPtr3),y - inx - sta KrnBuf256,x - - tya - cmp (ZPPtr3) last char? - bne .3 - stx KrnBuf256 + jsr ENV.AppendPtr3ToBuf .9 rts *-------------------------------------- -K.ExpandPStr.VC cmp #'0' +K.ExpandPStrValidChar + cmp #'0' bcc .9 cmp #'9'+1 bcc .8 @@ -167,10 +157,9 @@ K.ExpandPStr.VC cmp #'0' .9 sec rts *-------------------------------------- -K.ExpandPStr.Start .BS 1 -K.ExpandPStr.End .BS 1 -K.ExpandPStr.bFound .BS 1 K.ExpandPStr.bNoExp .BS 1 +K.ExpandPStr.bInVar .BS 1 +K.ExpandPStr.bFound .BS 1 K.ExpandPStr.hPStr .BS 1 K.ExpandPStr.Name .BS 16 */-------------------------------------- @@ -315,11 +304,9 @@ K.SetEnvPtr1Ptr2 * CS : not found *\-------------------------------------- K.GetEnvYA >STYA ZPPtr1 - jsr ENV.CheckSysVarPtr1 - bcc .8 - jsr ENV.FindVarPtr1 bcs .9 + jsr ENV.NextEnvPtr3 Skip NAME >LDYA ZPPtr3 clc just in case ADC in NextEnvPtr1 disturb CC @@ -344,28 +331,33 @@ S.UnsetEnvPtr1 jsr ENV.FindVarPtr1 *-------------------------------------- * PRIVATE *-------------------------------------- -* ENV.CheckSysVarPtr1 +* ENV.ExpandSysVar * In: -* ZPPtr1 -> NAME +* K.ExpandPStr.Name * Out: * CC: Found -* ZPPtr3=YA -> VALUE +* Append VALUE to KrnBuf256 * CS: Not Found *-------------------------------------- -ENV.CheckSysVarPtr1 - lda (ZPPtr1) - cmp #1 is name 1 char? +ENV.ExpandSysVar + ldx K.ExpandPStr.Name + cpx #1 is name 1 char? bne .9 ldy #1 - lda (ZPPtr1),y + lda K.ExpandPStr.Name+1 cmp #'0'-1 $0...$9 ?? bcc .1 cmp #'9'+1 bcs .1 and #$0F jsr K.GetArgA + bcs .8 + >STYA ZPPtr3 + jmp ENV.AppendPtr3ToBuf + +.8 clc rts .1 ldx #ENV.SysVarsJmp-ENV.SysVars-1 @@ -391,22 +383,25 @@ ENV.SysVarsJmp .DA ENV.SysVarsArgs .DA ENV.SysVarsPID .DA ENV.SysVarsCPID *-------------------------------------- -ENV.SysVarsArgs lda #1 - jsr K.GetArgA Trash Ptr1 +ENV.SysVarsArgs - stz KrnOut256 - - ldx #0 + lda #1 + jsr K.GetArgA Trash Ptr1 + bcs ENV.SysVarsExit2 + + ldx KrnBuf256 .1 lda (ZPPtr1) - beq ENV.SysVarsExit + bcs ENV.SysVarsExit ldy #0 .2 iny inx + beq ENV.SysVarsExit make sure not overlapping buf 256 + lda (ZPPtr1),y - sta KrnOut256,x + sta KrnBuf256,x tya cmp (ZPPtr1) bne .2 @@ -418,7 +413,7 @@ ENV.SysVarsArgs lda #1 .3 lda #' ' inx beq ENV.SysVarsExit make sure not overlapping buf 256 - sta KrnOut256,x + sta KrnBuf256,x bra .1 ENV.SysVarsArgC jsr K.GetArgC Trash Ptr1 @@ -432,7 +427,7 @@ ENV.SysVarsPID ldy #S.PS.PID .HS 2C ENV.SysVarsCPID ldy #S.PS.CPID lda (pPS),y - + ENV.SysVarsA sta HEXBUF stz HEXBUF+1 stz HEXBUF+2 @@ -440,32 +435,30 @@ ENV.SysVarsA sta HEXBUF jsr HEX2DEC ldy #6 Start at 0000000xxx - ldx #4 len is 4 for now -.1 dex - lda ASCBUF+1,y +.1 iny + lda ASCBUF,y cmp #'0' bne .2 - iny - cpy #8 Print always ast char + + cpy #9 Print always last char bne .1 -.2 txa - sta ASCBUF,y +.2 ldx KrnBuf256 + +.3 inx + beq ENV.SysVarsExit2 - tya - clc - adc #ASCBUF - tay - lda /ASCBUF - adc #0 + sta KrnBuf256,x + iny + cpy #10 + beq ENV.SysVarsExit - bra ENV.SysVarsExit2 - -ENV.SysVarsExit stx KrnOut256 - >LDYAI KrnOut256 + lda ASCBUF,y + bra .3 + +ENV.SysVarsExit stx KrnBuf256 ENV.SysVarsExit2 - >STYA ZPPtr3 clc rts *-------------------------------------- @@ -554,6 +547,23 @@ ENV.NextEnvPtr3 lda ZPPtr3 inc ZPPtr3+1 .8 rts *-------------------------------------- +ENV.AppendPtr3ToBuf + ldy #0 + ldx KrnBuf256 + +.1 iny + lda (ZPPtr3),y + inx + beq .9 + sta KrnBuf256,x + + tya + cmp (ZPPtr3) last char? + bne .1 + + stx KrnBuf256 +.9 rts +*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.ENV LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.INIT2.txt b/SYS/KERNEL.S.INIT2.txt index 1cddf641..c1dc7420 100644 --- a/SYS/KERNEL.S.INIT2.txt +++ b/SYS/KERNEL.S.INIT2.txt @@ -14,7 +14,7 @@ Kernel.Init2 sei >STYA ZPPtr1 >LDYAI A2osX.SYSCALL >STYA ZPPtr2 - >LDYAI A2osX.GP.SIZE^$FFFF + >LDYAI A2osX.GP.S^$FFFF >STYA ZPPtr3 jsr Kernel.Move @@ -32,7 +32,7 @@ Kernel.Init2 sei >STYA ZPPtr1 >LDYAI $D000 >STYA ZPPtr2 - >LDYAI A2osX.D2.SIZE^$FFFF + >LDYAI A2osX.D2.S^$FFFF >STYA ZPPtr3 jsr Kernel.Move @@ -50,7 +50,7 @@ Kernel.Init2 sei >STYA ZPPtr1 >LDYAI $D000 >STYA ZPPtr2 - >LDYAI A2osX.D1.SIZE^$FFFF + >LDYAI A2osX.D1.S^$FFFF >STYA ZPPtr3 jsr Kernel.Move @@ -68,7 +68,7 @@ Kernel.Init2 sei >STYA ZPPtr1 >LDYAI $E000 >STYA ZPPtr2 - >LDYAI A2osX.E0.SIZE^$FFFF + >LDYAI A2osX.E0.S^$FFFF >STYA ZPPtr3 jsr Kernel.Move diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 77f604b1..ee1fb4ad 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -15,13 +15,13 @@ AUTO 6 .INB /A2OSX.BUILD/INC/MLI.ERR.I *-------------------------------------- TmpPtr1 .EQ $0 for X.PRINTF.S -ZPPtr1 .EQ ZPKERNEL Temp Ptrs for use in very limited scope -ZPPtr2 .EQ ZPKERNEL+2 (could be trashed by any JSR) +ZPPtr1 .EQ ZPKERNEL +ZPPtr2 .EQ ZPKERNEL+2 ZPPtr3 .EQ ZPKERNEL+4 ZPPtr4 .EQ ZPKERNEL+6 sei - ldx #$FF init 6502 stack to highest + ldx #$FF txs sta SETALTZP @@ -41,16 +41,14 @@ ZPPtr4 .EQ ZPKERNEL+6 * Global Page -A2osX.GP .EQ * - .PH $BD00 +A2osX.GP .PH $BD00 .INB /A2OSX.SRC/SYS/KERNEL.S.GP .EP -A2osX.GP.SIZE .EQ *-A2osX.GP +A2osX.GP.E .EQ * * LC AUX $D000 BANK1 API Calls $00-$3E -A2osX.D1 .EQ * - .PH $D000 +A2osX.D1 .PH $D000 .DA #RRAMWRAMBNK1 .INB /A2OSX.SRC/SYS/KERNEL.S.FIO .INB /A2OSX.SRC/SYS/KERNEL.S.DRV @@ -62,12 +60,11 @@ A2osX.D1 .EQ * .INB /A2OSX.SRC/SYS/KERNEL.S.PFT .INB /A2OSX.SRC/SYS/KERNEL.S.BIN .EP -A2osX.D1.SIZE .EQ *-A2osX.D1 +A2osX.D1.E .EQ * * LC AUX $D000 BANK2 API Calls $40-$8E -A2osX.D2 .EQ * - .PH $D000 +A2osX.D2 .PH $D000 .DA #RRAMWRAMBNK2 .INB /A2OSX.SRC/SYS/KERNEL.S.CIO .INB /A2OSX.SRC/SYS/KERNEL.S.STR @@ -80,12 +77,11 @@ A2osX.D2 .EQ * .INB /A2OSX.SRC/SYS/KERNEL.S.EVT .INB /A2OSX.SRC/SYS/KERNEL.S.TSK .EP -A2osX.D2.SIZE .EQ *-A2osX.D2 +A2osX.D2.E .EQ * * LC AUX $E000 API Calls $80-$FE -A2osX.E0 .EQ * - .PH $E000 +A2osX.E0 .PH $E000 .INB /A2OSX.SRC/SYS/KERNEL.S.JMP .INB /A2OSX.SRC/SYS/KERNEL.S.DAT .INB /A2OSX.SRC/SYS/KERNEL.S.IRQ @@ -95,18 +91,22 @@ A2osX.E0 .EQ * * Make sure KERNEL.S.D01 is the last one .INB /A2OSX.SRC/SYS/KERNEL.S.D01 .EP -A2osX.E0.SIZE .EQ *-A2osX.E0 +A2osX.E0.E .EQ * * CONTROL SECTION : .LIST ON - .DO A2osX.GP.SIZE>$1E0 -* !!!!!!!!! ERROR:GP too big !!!!!!!!!! +A2osX.GP.S .EQ A2osX.GP.E-A2osX.GP +A2osX.D1.S .EQ A2osX.D1.E-A2osX.D1 +A2osX.D2.S .EQ A2osX.D2.E-A2osX.D2 +A2osX.E0.S .EQ A2osX.E0.E-A2osX.E0 + .DO A2osX.GP.S>$1E0 +* ERROR:GP too big .FIN - .DO A2osX.D1.SIZE>$1000 -* !!!!!!!!! ERROR:BNK1 too big !!!!!!!! + .DO A2osX.D1.S>$1000 +* ERROR:BNK1 too big .FIN - .DO A2osX.D2.SIZE>$1000 -* !!!!!!!!! ERROR:BNK2 too big !!!!!!!! + .DO A2osX.D2.S>$1000 +* ERROR:BNK2 too big .FIN .LIST OFF MAN