A2osX/SYS/KERNEL.S.ENV.txt

561 lines
11 KiB
Plaintext
Raw Normal View History

2015-03-14 21:48:35 +00:00
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
2015-03-14 21:48:35 +00:00
INC 1
AUTO 6
*/--------------------------------------
* # ExpandPStrYA
* ## In:
* Y,A = PTR to String to Expand (PSTR)
* ## Out:
* X = hMem to Expanded String (PSTR)
* Y,A = PTR to Expanded String
*\--------------------------------------
K.ExpandPStrYA stz K.ExpandPStr.hPStr Reset Intermediate string...
.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
2015-03-14 21:48:35 +00:00
ldy #0
.10 stz K.ExpandPStr.Name
stz K.ExpandPStr.bInVar
.11 tya
2017-01-12 17:43:45 +00:00
cmp (ZPPtr2) End of PSTR?
beq .8
2015-03-14 21:48:35 +00:00
iny
2017-01-12 17:43:45 +00:00
lda (ZPPtr2),y
cmp #'''
bne .21
lda K.ExpandPStr.bNoExp
eor #$ff
sta K.ExpandPStr.bNoExp toggle flag
bra .11
.21 bit K.ExpandPStr.bNoExp
bpl .23
.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 ?
bne .22 no, store....
sta K.ExpandPStr.bFound Toggle flag
sta K.ExpandPStr.bInVar
bra .11 skip this char
.3 cmp #'{' we are in var, "{" after "$"?
bne .31
ldx K.ExpandPStr.Name No char in var yet ?
beq .11 normal, "${" syntax is ok,skip
bne .5 not allowed char in varname, end of var
.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 go Expand....
.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
beq .52 var name is empty...start over
.51 phy save current index
jsr K.ExpandPStrGetValue
ply restore index in string...
.52 jmp .10 reset start flag and continue
.8 ldx K.ExpandPStr.Name end of PSTR,are we in a var?
beq .80 no...exit...
jsr K.ExpandPStrGetValue yes, expand and add to STR
.80 lda K.ExpandPStr.hPStr working from our temp string ?
beq .81 no...
jsr K.FreeMemA yes, discard....
.81 >LDYAI KrnBuf256
2016-09-21 15:20:37 +00:00
jsr K.NewPStrYA
bcs .9
stx K.ExpandPStr.hPStr save this as temp string, in case of recurse
ldx K.ExpandPStr.bFound Did we expand something ?
beq .82
jmp .1 Yes, start over with hPStr
.82 ldx K.ExpandPStr.hPStr
* or exit with Y,A from K.NewPStrYA
.9 rts
*--------------------------------------
K.ExpandPStrValidChar
cmp #'0'
bcc .9
cmp #'9'+1
bcc .8
cmp #'A'
bcc .9
cmp #'Z'+1
bcc .8
cmp #'_'
bne .9
.8 clc
rts
.9 sec
2015-03-14 21:48:35 +00:00
rts
*--------------------------------------
K.ExpandPStrGetValue
jsr ENV.ExpandSysVar
bcc .9
>LDYAI K.ExpandPStr.Name
jsr K.GetEnvYA
bcs .9
>STYA ZPPtr3
jsr ENV.AppendPtr3ToBuf
.9 rts
*--------------------------------------
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
*/--------------------------------------
* # PutEnvYA
* ## In:
* Y,A = PTR to String NAME=VALUE (PSTR)
* ## Out:
*\--------------------------------------
2017-01-12 17:43:45 +00:00
K.PutEnvYA >STYA ZPPtr1 NAME=VALUE
2017-01-12 17:43:45 +00:00
lda (ZPPtr1)
2016-08-17 06:25:58 +00:00
beq .9
sta KrnBuf256
2016-08-17 06:25:58 +00:00
tay
2016-06-07 06:10:18 +00:00
2017-01-12 17:43:45 +00:00
.1 lda (ZPPtr1),y copy PSTR to KrnBuf256
sta KrnBuf256,y
2016-08-17 06:25:58 +00:00
dey
2015-03-14 21:48:35 +00:00
bne .1
2016-06-07 06:10:18 +00:00
2016-08-17 06:25:58 +00:00
ldy #0
2016-06-07 06:10:18 +00:00
2015-03-14 21:48:35 +00:00
.2 iny
cpy KrnBuf256 last char ?
2016-08-17 06:25:58 +00:00
beq .9 no "=" found
lda KrnBuf256,y
2016-08-17 06:25:58 +00:00
cmp #'='
2015-03-14 21:48:35 +00:00
bne .2
2016-08-17 06:25:58 +00:00
cpy #1 String like "=value" ?
beq .9
cpy KrnBuf256 last char ?
2016-08-17 06:25:58 +00:00
beq .9 we have "VAR="
lda KrnBuf256 get actual string len
2016-08-17 06:25:58 +00:00
sty KrnBuf256 set length of VAR string
dec KrnBuf256 ...without "="
2016-08-17 06:25:58 +00:00
clc Substract VAR len+1 from whole len to get
sbc KrnBuf256 VALUE len
sta KrnBuf256,y save it at "=" POS
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
stz ZPPtr1 #KrnBuf256
sty ZPPtr2
lda /KrnBuf256
2017-01-12 17:43:45 +00:00
sta ZPPtr1+1
sta ZPPtr2+1
2016-08-17 06:25:58 +00:00
bra K.SetEnvPtr1Ptr2
2016-08-17 06:25:58 +00:00
.9 sec
rts
*/--------------------------------------
* # SetEnv
* ## In:
* PUSHW = PTR To Value (PSTR)
* PUSHW = PTR To Name (PSTR)
* ## Out:
*\--------------------------------------
K.SetEnv jsr PullPtr1Ptr2 Ptr1=NAME,Ptr2=VALUE
2016-08-17 06:25:58 +00:00
K.SetEnvPtr1Ptr2
jsr S.UnsetEnvPtr1
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
jsr ENV.InitEnvPtr3 ZPPtr3 -> Env
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
lda ZPPtr3 Compute ENV UPPER LIMIT in Ptr4
2015-03-14 21:48:35 +00:00
clc
adc #K.ENV.SIZE
2017-01-12 17:43:45 +00:00
sta ZPPtr4
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
lda ZPPtr3+1
2015-03-14 21:48:35 +00:00
adc /K.ENV.SIZE
2017-01-12 17:43:45 +00:00
sta ZPPtr4+1
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
ldy ZPPtr3+1
lda ZPPtr3 Compute New Env Upper limit in A,Y
2015-03-14 21:48:35 +00:00
sec
2017-01-12 17:43:45 +00:00
adc (ZPPtr1) add NAME len +1
2016-08-17 06:25:58 +00:00
bcc .1
2015-03-14 21:48:35 +00:00
iny
2016-08-17 06:25:58 +00:00
.1 sec
2017-01-12 17:43:45 +00:00
adc (ZPPtr2) add VALUE len +1
2016-08-17 06:25:58 +00:00
bcc .2
2015-03-14 21:48:35 +00:00
iny
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
.2 cmp ZPPtr4 GE than hMem Upper limit ?
2015-03-14 21:48:35 +00:00
tya
2017-01-12 17:43:45 +00:00
sbc ZPPtr4+1
2016-08-17 06:25:58 +00:00
bcs .99
2017-01-12 17:43:45 +00:00
.3 lda (ZPPtr3) Scan until ending 0...
2016-08-17 06:25:58 +00:00
beq .4
2017-01-12 17:43:45 +00:00
inc ZPPtr3
2016-08-17 06:25:58 +00:00
bne .3
2017-01-12 17:43:45 +00:00
inc ZPPtr3+1
2016-08-17 06:25:58 +00:00
bne .3
2017-01-12 17:43:45 +00:00
.4 lda (ZPPtr1)
sta (ZPPtr3)
2016-08-17 06:25:58 +00:00
tay
2017-01-12 17:43:45 +00:00
.5 lda (ZPPtr1),y
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
dey
bne .5
jsr ENV.NextEnvPtr3
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
lda (ZPPtr2)
sta (ZPPtr3)
2016-08-17 06:25:58 +00:00
tay
2017-01-12 17:43:45 +00:00
.6 lda (ZPPtr2),y
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
dey
bne .6
jsr ENV.NextEnvPtr3
2016-08-17 06:25:58 +00:00
.8 lda #0
2017-01-12 17:43:45 +00:00
sta (ZPPtr3)
2015-03-14 21:48:35 +00:00
clc
rts
2016-08-17 06:25:58 +00:00
2015-03-14 21:48:35 +00:00
.99 lda #SYSMGR.ERRENVF
sec
rts
*/--------------------------------------
* # GetEnvYA
* ## In:
* Y,A = PTR to NAME (PSTR)
* ## Out:
* CC : Y,A = PTR to VALUE (PSTR)
2016-08-17 06:25:58 +00:00
* CS : not found
*\--------------------------------------
2017-01-12 17:43:45 +00:00
K.GetEnvYA >STYA ZPPtr1
jsr ENV.FindVarPtr1
2016-08-17 06:25:58 +00:00
bcs .9
jsr ENV.NextEnvPtr3 Skip NAME
2017-01-12 17:43:45 +00:00
>LDYA ZPPtr3
clc just in case ADC in NextEnvPtr1 disturb CC
.8 rts
.9 >LDYAI EmptyPSTR
rts
*/--------------------------------------
* # UnsetEnvYA
* ## In:
* Y,A = PTR To Name (PSTR)
* ## Out:
*\--------------------------------------
2017-01-12 17:43:45 +00:00
K.UnsetEnvYA >STYA ZPPtr1 Store VAR Name
S.UnsetEnvPtr1 jsr ENV.FindVarPtr1
bcs .8 not found, quit
jsr ENV.DiscardVarPtr3 Ptr3 -> ENVNAME
.8 clc
rts
*--------------------------------------
2015-03-14 21:48:35 +00:00
* PRIVATE
*--------------------------------------
* ENV.ExpandSysVar
2015-03-14 21:48:35 +00:00
* In:
* K.ExpandPStr.Name
2016-08-17 06:25:58 +00:00
* Out:
* CC: Found
* Append VALUE to KrnBuf256
2016-08-17 06:25:58 +00:00
* CS: Not Found
*--------------------------------------
ENV.ExpandSysVar
ldx K.ExpandPStr.Name
cpx #1 is name 1 char?
2016-08-17 06:25:58 +00:00
bne .9
2016-08-17 06:25:58 +00:00
ldy #1
lda K.ExpandPStr.Name+1
cmp #'0'-1 $0...$9 ??
bcc .1
2016-08-17 06:25:58 +00:00
cmp #'9'+1
bcs .1
2016-08-17 06:25:58 +00:00
and #$0F
jsr K.GetArgA
bcs .99
2017-01-12 17:43:45 +00:00
>STYA ZPPtr3
jmp ENV.AppendPtr3ToBuf
.8 clc
rts
.1 ldx #ENV.SysVarsJmp-ENV.SysVars-1
.2 cmp ENV.SysVars,x
beq .3
dex
bpl .2
2016-08-17 06:25:58 +00:00
.9 sec
.99 rts
2016-08-17 06:25:58 +00:00
.3 txa
asl
tax
jmp (ENV.SysVarsJmp,x)
ENV.SysVars .AS "*#?@$!"
ENV.SysVarsJmp .DA ENV.SysVarsArgs
.DA ENV.SysVarsArgC
.DA ENV.SysVarsRC
.DA ENV.SysVarsPPID
.DA ENV.SysVarsPID
.DA ENV.SysVarsCPID
*--------------------------------------
ENV.SysVarsArgs lda #1
jsr K.GetArgA
bcs ENV.SysVarsExit2
>STYA ZPPtr3
.1 lda (ZPPtr3)
beq ENV.SysVarsExit2
jsr ENV.AppendPtr3ToBuf
.2 jsr ENV.NextEnvPtr3
lda (ZPPtr3)
beq ENV.SysVarsExit2
ldx KrnBuf256
inx
beq ENV.SysVarsExit2 make sure not overlapping buf 256
stx KrnBuf256
lda #' '
sta KrnBuf256,x
jsr ENV.AppendPtr3ToBuf
bra .2
*--------------------------------------
ENV.SysVarsArgC jsr K.GetArgC Trash Ptr1
bra ENV.SysVarsA
ENV.SysVarsRC ldy #S.PS.RC
.HS 2C
ENV.SysVarsPPID ldy #S.PS.PPID
.HS 2C
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
stz HEXBUF+3
jsr HEX2DEC
ldy #6 Start at 0000000xxx
.1 iny
lda ASCBUF,y
cmp #'0'
bne .2
2016-08-17 06:25:58 +00:00
cpy #9 Print always last char
bne .1
.2 ldx KrnBuf256
.3 inx
beq ENV.SysVarsExit2
sta KrnBuf256,x
iny
cpy #10
beq ENV.SysVarsExit
lda ASCBUF,y
bra .3
ENV.SysVarsExit stx KrnBuf256
ENV.SysVarsExit2
clc
rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
* ENV.FindVarPtr1
2016-08-17 06:25:58 +00:00
* In:
2017-01-12 17:43:45 +00:00
* ZPPtr1 -> NAME
2015-03-14 21:48:35 +00:00
* Out:
* CC: Found
2017-01-12 17:43:45 +00:00
* ZPPtr1 -> NAME
* ZPPtr3 -> ENV.NAME
2015-03-14 21:48:35 +00:00
* CS: Not Found
2017-01-12 17:43:45 +00:00
* ZPPtr1 -> NAME
* ZPPtr3 -> PTR to Ending 0
2015-03-14 21:48:35 +00:00
*--------------------------------------
ENV.FindVarPtr1 jsr ENV.InitEnvPtr3 Store ENV
2016-08-17 06:25:58 +00:00
bcs .99
2015-03-14 21:48:35 +00:00
2017-01-12 17:43:45 +00:00
lda (ZPPtr3)
2016-08-17 06:25:58 +00:00
beq .9 end of ENV
2017-01-12 17:43:45 +00:00
.1 cmp (ZPPtr1) Same len as NAME?
2016-08-17 06:25:58 +00:00
bne .3
tay
2017-01-12 17:43:45 +00:00
.2 lda (ZPPtr1),y
cmp (ZPPtr3),y
2016-08-17 06:25:58 +00:00
bne .3
dey
2015-03-14 21:48:35 +00:00
bne .2
2016-08-17 06:25:58 +00:00
clc
rts
.3 jsr ENV.NextEnvPtr3 Skip NAME
jsr ENV.NextEnvPtr3 Skip VALUE
2017-01-12 17:43:45 +00:00
lda (ZPPtr3)
2016-08-17 06:25:58 +00:00
bne .1
.9 sec
.99 rts
*--------------------------------------
* ENV.DiscardVarPtr3
2016-08-17 06:25:58 +00:00
* In:
2017-01-12 17:43:45 +00:00
* ZPPtr3 -> ENV.NAME to Discard
2016-08-17 06:25:58 +00:00
*--------------------------------------
ENV.DiscardVarPtr3
2017-01-12 17:43:45 +00:00
lda ZPPtr3 Discard current NAME & VALUE definition
sec ZPPtr3 -> NAME
adc (ZPPtr3) add NAME+1 to ZPPtr3
sta ZPPtr4 store it in ZPPtr4
2016-08-17 06:25:58 +00:00
lda #0
2017-01-12 17:43:45 +00:00
adc ZPPtr3+1
sta ZPPtr4+1
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
lda ZPPtr4 add VALUE+1 to ZPPtr4
2016-08-17 06:25:58 +00:00
sec
2017-01-12 17:43:45 +00:00
adc (ZPPtr4)
sta ZPPtr4
2016-08-17 06:25:58 +00:00
bcc .1
2017-01-12 17:43:45 +00:00
inc ZPPtr4+1
2016-08-17 06:25:58 +00:00
.1 ldy #0
2017-01-12 17:43:45 +00:00
.2 lda (ZPPtr4),y Move back tail...
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
beq .8 ...until we move ending 0
2015-03-14 21:48:35 +00:00
iny
2016-08-17 06:25:58 +00:00
bne .2
2017-01-12 17:43:45 +00:00
inc ZPPtr3+1
inc ZPPtr4+1
2016-08-17 06:25:58 +00:00
bra .2
.8 rts
*--------------------------------------
ENV.InitEnvPtr3 ldy #S.PS.hENV
2016-08-17 06:25:58 +00:00
lda (pPs),y
2016-09-21 15:20:37 +00:00
jsr K.GetMemPtrA
2017-01-12 17:43:45 +00:00
>STYA ZPPtr3 Store ENV
2016-08-17 06:25:58 +00:00
rts
*--------------------------------------
2017-01-12 17:43:45 +00:00
ENV.NextEnvPtr3 lda ZPPtr3
2015-03-14 21:48:35 +00:00
sec
2017-01-12 17:43:45 +00:00
adc (ZPPtr3)
sta ZPPtr3
2016-08-17 06:25:58 +00:00
bcc .8
2017-01-12 17:43:45 +00:00
inc ZPPtr3+1
2016-08-17 06:25:58 +00:00
.8 rts
2015-03-14 21:48:35 +00:00
*--------------------------------------
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
*--------------------------------------
2015-03-14 21:48:35 +00:00
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.ENV
LOAD /A2OSX.SRC/SYS/KERNEL.S
2015-03-14 21:48:35 +00:00
ASM