Kernel version 0.9 : KERNEL.S.ENV.txt, MAJOR bur fix in $?,$$...system vars

This commit is contained in:
Rémy GIBERT 2017-04-01 23:01:28 +02:00
parent 14275e29d2
commit bf22885600
8 changed files with 162 additions and 158 deletions

Binary file not shown.

Binary file not shown.

View File

@ -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

View File

@ -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 |

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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