Kernel version 0.8 : ENV...some enhancement (few) and bugfix (many;-)...see Readme.md

This commit is contained in:
Rémy GIBERT 2016-12-03 23:16:45 +01:00
parent 9974920777
commit aa60fd4c3c

View File

@ -14,21 +14,22 @@ AUTO 6
*\-------------------------------------- *\--------------------------------------
K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string... K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string...
.11 >STYA ZPQuickPtr3 .11 >STYA ZPQuickPtr2
stz KrnBuf256 init Expanded String len=0 stz KrnBuf256 init Expanded String len=0
stz K.ExpandPStr.bFound No var found yet stz K.ExpandPStr.bFound No var found yet
stz K.ExpandPStr.bNoExp Reset no expand flag stz K.ExpandPStr.bNoExp Reset no expand flag
ldy #0 ldy #0
.10 stz K.ExpandPStr.Start .10 stz K.ExpandPStr.Start
.1 tya .1 tya
cmp (ZPQuickPtr3) End of PSTR? cmp (ZPQuickPtr2) End of PSTR?
beq .6 beq .6
iny iny
lda (ZPQuickPtr3),y lda (ZPQuickPtr2),y
cmp #''' cmp #'''
bne .21 bne .21
@ -94,9 +95,10 @@ K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string...
bcs .9 bcs .9
stx K.ExpandPStr.hPStr save this as temp string, in case of recurse stx K.ExpandPStr.hPStr save this as temp string, in case of recurse
bit K.ExpandPStr.bFound Did we expand something ? bit K.ExpandPStr.bFound Did we expand something ?
bpl .9 bpl .82
jmp .11 Yes, start over with hPStr jmp .11 Yes, start over with hPStr
.82
* or exit with Y,A & X from K.NewPStrYA * or exit with Y,A & X from K.NewPStrYA
.9 rts .9 rts
@ -109,40 +111,41 @@ K.ExpandPStr.AV lda K.ExpandPStr.End
inx inx
sta KrnBuf256,x sta KrnBuf256,x
stx ZPQuickPtr2 stx ZPQuickPtr1 Make Ptr1 -> Var NAME
lda /KrnBuf256 lda /KrnBuf256
sta ZPQuickPtr2+1 sta ZPQuickPtr1+1
ldy K.ExpandPStr.Start ldy K.ExpandPStr.Start
.1 iny .1 iny
inx inx
lda (ZPQuickPtr3),y lda (ZPQuickPtr2),y
sta KrnBuf256,x sta KrnBuf256,x
cpy K.ExpandPStr.End cpy K.ExpandPStr.End
bne .1 bne .1
jsr ENV.CheckSysVarPtr2 jsr ENV.CheckSysVarPtr1
bcs .10 bcc .2 Ptr3=VALUE
>STYA ZPQuickPtr1
bra .11
.10 jsr ENV.FindVarPtr2 jsr ENV.FindVarPtr1
bcs .9 bcs .9
jsr ENV.NextEnvPtr1 Skip NAME jsr ENV.NextEnvPtr3 Skip NAME
.11 ldy #0 .2 lda (ZPQuickPtr3)
beq .9 in case CheckSysVarPtr1 returned a NUL string
ldy #0
ldx KrnBuf256 ldx KrnBuf256
.2 iny .3 iny
lda (ZPQuickPtr1),y lda (ZPQuickPtr3),y
inx inx
sta KrnBuf256,x sta KrnBuf256,x
tya tya
cmp (ZPQuickPtr1) last char? cmp (ZPQuickPtr3) last char?
bne .2 bne .3
stx KrnBuf256 stx KrnBuf256
.9 rts .9 rts
@ -176,13 +179,14 @@ K.ExpandPStr.hPStr .BS 1
* Y,A = PTR to String NAME=VALUE (PSTR) * Y,A = PTR to String NAME=VALUE (PSTR)
* ##Out: * ##Out:
*\-------------------------------------- *\--------------------------------------
K.PutEnvYA >STYA ZPQuickPtr2 NAME=VALUE K.PutEnvYA >STYA ZPQuickPtr1 NAME=VALUE
lda (ZPQuickPtr2)
lda (ZPQuickPtr1)
beq .9 beq .9
sta KrnBuf256 sta KrnBuf256
tay tay
.1 lda (ZPQuickPtr2),y .1 lda (ZPQuickPtr1),y copy PSTR to KrnBuf256
sta KrnBuf256,y sta KrnBuf256,y
dey dey
bne .1 bne .1
@ -203,27 +207,23 @@ K.PutEnvYA >STYA ZPQuickPtr2 NAME=VALUE
cpy KrnBuf256 last char ? cpy KrnBuf256 last char ?
beq .9 we have "VAR=" beq .9 we have "VAR="
lda KrnBuf256 save actual string len lda KrnBuf256 get actual string len
sty KrnBuf256 set length of VAR string sty KrnBuf256 set length of VAR string
dec KrnBuf256 ...without "=" dec KrnBuf256 ...without "="
clc Substract VAR len+1 from whole len to get
.3 clc Substract VAR len+1 from whole len to get
sbc KrnBuf256 VALUE len sbc KrnBuf256 VALUE len
sta KrnBuf256,y save it at "=" POS sta KrnBuf256,y save it at "=" POS
tya stz ZPQuickPtr1 #KrnBuf256
clc sty ZPQuickPtr2
adc #KrnBuf256
sta ZPQuickPtr3
lda /KrnBuf256 lda /KrnBuf256
sta ZPQuickPtr3+1 sta ZPQuickPtr1+1
sta ZPQuickPtr2+1
>LDYAI KrnBuf256 bra K.SetEnvPtr1Ptr2
>STYA ZPQuickPtr2
bra K.SetEnvPtr2Ptr3
.9 sec .9 sec
rts rts
@ -234,32 +234,31 @@ K.PutEnvYA >STYA ZPQuickPtr2 NAME=VALUE
* PUSHW = PTR To Name (PSTR) * PUSHW = PTR To Name (PSTR)
* ##Out: * ##Out:
*\-------------------------------------- *\--------------------------------------
K.SetEnv >PULLW ZPQuickPtr2 NAME... K.SetEnv jsr PullPtr1Ptr2 Ptr1=NAME,Ptr2=VALUE
>PULLW ZPQuickPtr3 ...VALUE
K.SetEnvPtr2Ptr3 K.SetEnvPtr1Ptr2
jsr S.UnsetEnvPtr2 jsr S.UnsetEnvPtr1
jsr ENV.InitEnvPtr1 Y,A = ZPQuickPtr1 -> Env jsr ENV.InitEnvPtr3 ZPQuickPtr3 -> Env
lda ZPQuickPtr1 Compute ENV UPPER LIMIT in Ptr4 lda ZPQuickPtr3 Compute ENV UPPER LIMIT in Ptr4
clc clc
adc #K.ENV.SIZE adc #K.ENV.SIZE
sta ZPQuickPtr4 sta ZPQuickPtr4
lda ZPQuickPtr1+1 lda ZPQuickPtr3+1
adc /K.ENV.SIZE adc /K.ENV.SIZE
sta ZPQuickPtr4+1 sta ZPQuickPtr4+1
ldy ZPQuickPtr1+1 ldy ZPQuickPtr3+1
lda ZPQuickPtr1 Compute New Env Upper limit in A,Y lda ZPQuickPtr3 Compute New Env Upper limit in A,Y
sec sec
adc (ZPQuickPtr2) add NAME len +1 adc (ZPQuickPtr1) add NAME len +1
bcc .1 bcc .1
iny iny
.1 sec .1 sec
adc (ZPQuickPtr3) add VALUE len +1 adc (ZPQuickPtr2) add VALUE len +1
bcc .2 bcc .2
iny iny
@ -268,39 +267,39 @@ K.SetEnvPtr2Ptr3
sbc ZPQuickPtr4+1 sbc ZPQuickPtr4+1
bcs .99 bcs .99
.3 lda (ZPQuickPtr1) Scan until endig 0... .3 lda (ZPQuickPtr3) Scan until ending 0...
beq .4 beq .4
inc ZPQuickPtr1 inc ZPQuickPtr3
bne .3 bne .3
inc ZPQuickPtr1+1 inc ZPQuickPtr3+1
bne .3 bne .3
.4 lda (ZPQuickPtr2) .4 lda (ZPQuickPtr1)
sta (ZPQuickPtr1) sta (ZPQuickPtr3)
tay tay
.5 lda (ZPQuickPtr2),y .5 lda (ZPQuickPtr1),y
sta (ZPQuickPtr1),y sta (ZPQuickPtr3),y
dey dey
bne .5 bne .5
jsr ENV.NextEnvPtr1 jsr ENV.NextEnvPtr3
lda (ZPQuickPtr3) lda (ZPQuickPtr2)
sta (ZPQuickPtr1) sta (ZPQuickPtr3)
tay tay
.6 lda (ZPQuickPtr3),y .6 lda (ZPQuickPtr2),y
sta (ZPQuickPtr1),y sta (ZPQuickPtr3),y
dey dey
bne .6 bne .6
jsr ENV.NextEnvPtr1 jsr ENV.NextEnvPtr3
.8 lda #0 .8 lda #0
sta (ZPQuickPtr1) sta (ZPQuickPtr3)
clc clc
rts rts
@ -315,14 +314,14 @@ K.SetEnvPtr2Ptr3
* CC : Y,A = PTR to VALUE (PSTR) * CC : Y,A = PTR to VALUE (PSTR)
* CS : not found * CS : not found
*\-------------------------------------- *\--------------------------------------
K.GetEnvYA >STYA ZPQuickPtr2 K.GetEnvYA >STYA ZPQuickPtr1
jsr ENV.CheckSysVarPtr2 jsr ENV.CheckSysVarPtr1
bcc .8 bcc .8
jsr ENV.FindVarPtr2 jsr ENV.FindVarPtr1
bcs .9 bcs .9
jsr ENV.NextEnvPtr1 Skip NAME jsr ENV.NextEnvPtr3 Skip NAME
>LDYA ZPQuickPtr1 >LDYA ZPQuickPtr3
clc just in case ADC in NextEnvPtr1 disturb CC clc just in case ADC in NextEnvPtr1 disturb CC
.8 rts .8 rts
@ -334,39 +333,41 @@ K.GetEnvYA >STYA ZPQuickPtr2
* Y,A = PTR To Name (PSTR) * Y,A = PTR To Name (PSTR)
* ##Out: * ##Out:
*\-------------------------------------- *\--------------------------------------
K.UnsetEnvYA >STYA ZPQuickPtr2 Store VAR Name K.UnsetEnvYA >STYA ZPQuickPtr1 Store VAR Name
S.UnsetEnvPtr2 jsr ENV.FindVarPtr2 S.UnsetEnvPtr1 jsr ENV.FindVarPtr1
bcs .8 not found, quit bcs .8 not found, quit
jsr ENV.DiscardVarPtr1 Ptr1 -> ENVNAME jsr ENV.DiscardVarPtr3 Ptr3 -> ENVNAME
.8 clc .8 clc
rts rts
*-------------------------------------- *--------------------------------------
* PRIVATE * PRIVATE
*-------------------------------------- *--------------------------------------
* ENV.CheckSysVarPtr2 * ENV.CheckSysVarPtr1
* In: * In:
* ZPQuickPtr2 -> NAME * ZPQuickPtr1 -> NAME
* Out: * Out:
* CC: Found * CC: Found
* YA -> VALUE * YA -> VALUE
* CS: Not Found * CS: Not Found
*-------------------------------------- *--------------------------------------
ENV.CheckSysVarPtr2 ENV.CheckSysVarPtr1
lda (ZPQuickPtr2) lda (ZPQuickPtr1)
cmp #1 is name 1 char? cmp #1 is name 1 char?
bne .9 bne .9
ldy #1 ldy #1
lda (ZPQuickPtr2),y lda (ZPQuickPtr1),y
cmp #'0' $0...$9 ?? cmp #'0'-1 $0...$9 ??
bcc .1 no, bcc .1
cmp #'9'+1 cmp #'9'+1
bcs .1 bcs .1
and #$0F and #$0F
jmp K.GetArgA jsr K.GetArgA
>STYA ZPQuickPtr3
rts
.1 ldx #ENV.SysVarsJmp-ENV.SysVars-1 .1 ldx #ENV.SysVarsJmp-ENV.SysVars-1
.2 cmp ENV.SysVars,x .2 cmp ENV.SysVars,x
@ -382,19 +383,51 @@ ENV.CheckSysVarPtr2
tax tax
jmp (ENV.SysVarsJmp,x) jmp (ENV.SysVarsJmp,x)
*-------------------------------------- *--------------------------------------
ENV.SysVars .AS "*#?$!" ENV.SysVars .AS "*#?@$!"
ENV.SysVarsJmp .DA ENV.SysVarsArgs ENV.SysVarsJmp .DA ENV.SysVarsArgs
.DA ENV.SysVarsArgC .DA ENV.SysVarsArgC
.DA ENV.SysVarsRC .DA ENV.SysVarsRC
.DA ENV.SysVarsPPID
.DA ENV.SysVarsPID .DA ENV.SysVarsPID
.DA ENV.SysVarsCPID .DA ENV.SysVarsCPID
*-------------------------------------- *--------------------------------------
ENV.SysVarsArgs sec ENV.SysVarsArgs lda #1
rts jsr K.GetArgA Trash Ptr1
ENV.SysVarsArgC jsr K.GetArgC
stz KrnOut256
ldx #0
.1 lda (ZPQuickPtr1)
beq ENV.SysVarsExit
ldy #0
.2 iny
inx
lda (ZPQuickPtr1),y
sta KrnOut256,x
tya
cmp (ZPQuickPtr1)
bne .2
adc ZPQuickPtr1 CS from beq .2
sta ZPQuickPtr1
bcc .3
inc ZPQuickPtr1+1
.3 lda #' '
inx
beq ENV.SysVarsExit make sure not overlapping buf 256
sta KrnOut256,x
bra .1
ENV.SysVarsArgC jsr K.GetArgC Trash Ptr1
bra ENV.SysVarsA bra ENV.SysVarsA
ENV.SysVarsRC ldy #S.PS.RC ENV.SysVarsRC ldy #S.PS.RC
.HS 2C .HS 2C
ENV.SysVarsPPID ldy #S.PS.PPID
.HS 2C
ENV.SysVarsPID ldy #S.PS.PID ENV.SysVarsPID ldy #S.PS.PID
.HS 2C .HS 2C
ENV.SysVarsCPID ldy #S.PS.CPID ENV.SysVarsCPID ldy #S.PS.CPID
@ -405,82 +438,83 @@ ENV.SysVarsA sta HEXBUF
stz HEXBUF+3 stz HEXBUF+3
jsr HEX2DEC jsr HEX2DEC
ldx #0 ldy #0
.1 lda ASCBUF,x .1 lda ASCBUF,y
cmp #'0' cmp #'0'
bne .2 bne .2
inx iny
cpx #10 cpy #10
bne .1 bne .1
sta KrnOut256+1 sta KrnOut256+1
ldy #1 ldx #1
bne .8 always bra ENV.SysVarsExit
.2 ldy #0 .2 ldx #0
.3 lda ASCBUF,x .3 lda ASCBUF,y
iny
sta KrnOut256,y
inx inx
cpx #10 sta KrnOut256,x
iny
cpy #10
bne .3 bne .3
.8 sty KrnOut256 ENV.SysVarsExit stx KrnOut256
>LDYAI KrnOut256 >LDYAI KrnOut256
>STYA ZPQuickPtr3
clc clc
rts rts
*-------------------------------------- *--------------------------------------
* ENV.FindVarPtr2 * ENV.FindVarPtr1
* In: * In:
* ZPQuickPtr2 -> NAME * ZPQuickPtr1 -> NAME
* Out: * Out:
* CC: Found * CC: Found
* ZPQuickPtr1 -> ENV.NAME * ZPQuickPtr1 -> NAME
* ZPQuickPtr2 -> NAME * ZPQuickPtr3 -> ENV.NAME
* CS: Not Found * CS: Not Found
* ZPQuickPtr1 -> PTR to Ending 0 * ZPQuickPtr1 -> NAME
* ZPQuickPtr2 -> NAME * ZPQuickPtr3 -> PTR to Ending 0
*-------------------------------------- *--------------------------------------
ENV.FindVarPtr2 jsr ENV.InitEnvPtr1 Store ENV ENV.FindVarPtr1 jsr ENV.InitEnvPtr3 Store ENV
bcs .99 bcs .99
lda (ZPQuickPtr1) lda (ZPQuickPtr3)
beq .9 end of ENV beq .9 end of ENV
.1 cmp (ZPQuickPtr2) Same len as NAME? .1 cmp (ZPQuickPtr1) Same len as NAME?
bne .3 bne .3
tay tay
.2 lda (ZPQuickPtr1),y .2 lda (ZPQuickPtr1),y
cmp (ZPQuickPtr2),y cmp (ZPQuickPtr3),y
bne .3 bne .3
dey dey
bne .2 bne .2
clc clc
rts rts
.3 jsr ENV.NextEnvPtr1 Skip NAME .3 jsr ENV.NextEnvPtr3 Skip NAME
jsr ENV.NextEnvPtr1 Skip VALUE jsr ENV.NextEnvPtr3 Skip VALUE
lda (ZPQuickPtr1) lda (ZPQuickPtr3)
bne .1 bne .1
.9 sec .9 sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
* ENV.DiscardVarPtr1 * ENV.DiscardVarPtr3
* In: * In:
* ZPQuickPtr1 -> ENV.NAME to Discard * ZPQuickPtr3 -> ENV.NAME to Discard
*-------------------------------------- *--------------------------------------
ENV.DiscardVarPtr1 ENV.DiscardVarPtr3
lda ZPQuickPtr1 Discard current NAME & VALUE definition lda ZPQuickPtr3 Discard current NAME & VALUE definition
sec ZPQuickPtr1 -> NAME sec ZPQuickPtr3 -> NAME
adc (ZPQuickPtr1) add NAME+1 to ZPQuickPtr1 adc (ZPQuickPtr3) add NAME+1 to ZPQuickPtr3
sta ZPQuickPtr4 store it in ZPQuickPtr4 sta ZPQuickPtr4 store it in ZPQuickPtr4
lda #0 lda #0
adc ZPQuickPtr1+1 adc ZPQuickPtr3+1
sta ZPQuickPtr4+1 sta ZPQuickPtr4+1
lda ZPQuickPtr4 add VALUE+1 to ZPQuickPtr4 lda ZPQuickPtr4 add VALUE+1 to ZPQuickPtr4
@ -493,28 +527,28 @@ ENV.DiscardVarPtr1
.1 ldy #0 .1 ldy #0
.2 lda (ZPQuickPtr4),y Move back tail... .2 lda (ZPQuickPtr4),y Move back tail...
sta (ZPQuickPtr1),y sta (ZPQuickPtr3),y
beq .8 ...until we move ending 0 beq .8 ...until we move ending 0
iny iny
bne .2 bne .2
inc ZPQuickPtr1+1 inc ZPQuickPtr3+1
inc ZPQuickPtr4+1 inc ZPQuickPtr4+1
bra .2 bra .2
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
ENV.InitEnvPtr1 ldy #S.PS.hENV ENV.InitEnvPtr3 ldy #S.PS.hENV
lda (pPs),y lda (pPs),y
jsr K.GetMemPtrA jsr K.GetMemPtrA
>STYA ZPQuickPtr1 Store ENV >STYA ZPQuickPtr3 Store ENV
rts rts
*-------------------------------------- *--------------------------------------
ENV.NextEnvPtr1 lda ZPQuickPtr1 ENV.NextEnvPtr3 lda ZPQuickPtr3
sec sec
adc (ZPQuickPtr1) adc (ZPQuickPtr3)
sta ZPQuickPtr1 sta ZPQuickPtr3
bcc .8 bcc .8
inc ZPQuickPtr1+1 inc ZPQuickPtr3+1
.8 rts .8 rts
*-------------------------------------- *--------------------------------------
MAN MAN