Kernel 0.93+

This commit is contained in:
Rémy GIBERT 2020-01-17 17:12:24 +01:00
parent cd69ff354c
commit 827bda1c4b
3 changed files with 138 additions and 27 deletions

Binary file not shown.

View File

@ -96,8 +96,17 @@ K.Expand jsr K.strdup
bcs .70
jsr ENV.NextEnvP3Y Skip NAME=
.DO AUXENV=1
sta SETREADAUX
.FIN
jsr ENV.AddP3ToBuf Add VALUE
.DO AUXENV=1
sta CLRREADAUX
.FIN
.70 lda (TXTPTR)
beq .72
@ -329,8 +338,8 @@ K.SetEnv >PULLW FORPNT value
>PULLW TXTPTR name
K.SetEnv.I jsr K.UnsetEnv.I
.1 jsr ENV.InitEnvP3 ZPPtr3 -> Env
.1 jsr ENV.InitEnvP3 ZPPtr3 -> Env (SETREADAUX)
lda #1
sta ZPPtr4
@ -338,18 +347,26 @@ K.SetEnv.I jsr K.UnsetEnv.I
.10 lda (ZPPtr3) End of ENV
beq .15
jsr ENV.GetP3LenY
jsr ENV.NextEnvP3Y
jsr ENV.NextEnvP4Y
bra .10
.15 ldy #$ff
.15 .DO AUXENV=1
sta CLRREADAUX
.FIN
ldy #$ff
.16 iny
lda (TXTPTR),y
bne .16
beq .17
jsr ENV.NextEnvP4Y ZPPtr4 = ENVSIZE + VAR
jsr SHARED.IsIDValid
bcc .16
.17 jsr ENV.NextEnvP4Y ZPPtr4 = ENVSIZE + VAR
ldy #$ff
@ -375,7 +392,14 @@ K.SetEnv.I jsr K.UnsetEnv.I
pha
ldy #S.PS.hENV
lda (pPs),y
.DO AUXENV=1
ldx #SYS.FreeStkObj
jsr K.SYSCALL2.AUX
.ELSE
jsr K.Freemem
.FIN
pla
ldy #S.PS.hENV
sta (pPs),y
@ -386,6 +410,10 @@ K.SetEnv.I jsr K.UnsetEnv.I
.22 ldy #$ff
.DO AUXENV=1
sta SETWRITEAUX
.FIN
.23 iny
lda (TXTPTR),y
sta (ZPPtr3),y
@ -407,7 +435,12 @@ K.SetEnv.I jsr K.UnsetEnv.I
iny
sta (ZPPtr3),y don't forget array ending 0
clc
.9 rts
.9 .DO AUXENV=1
sta CLRREADAUX
sta CLRWRITEAUX
.FIN
rts
*/--------------------------------------
* # GetEnv
* searches the environment list to find the environment variable name,
@ -425,6 +458,9 @@ K.SetEnv.I jsr K.UnsetEnv.I
*\--------------------------------------
K.GetEnv >PULLW FORPNT value
>PULLW TXTPTR name
lda TXTPTR
beq K.GetEnvDump
jsr ENV.FindVarTXTPTR
bcs .9
@ -443,13 +479,22 @@ K.GetEnv >PULLW FORPNT value
iny
bne .2
inc
.2 .DO AUXENV=1
sta CLRREADAUX
sta CLRWRITEAUX
.FIN
.2 jsr K.getmem
jsr K.getmem
bcs .99
>STYA FORPNT
.3 .DO AUXENV=1
sta SETREADAUX
.FIN
.3 ldy #$ff
ldy #$ff
.4 iny
lda (ZPPtr3),y
@ -457,6 +502,9 @@ K.GetEnv >PULLW FORPNT value
bne .4
>LDYA FORPNT
.DO AUXENV=1
sta CLRREADAUX
.FIN
clc
rts
@ -464,6 +512,9 @@ K.GetEnv >PULLW FORPNT value
.9 >LDYAI 0
* sec
.99 rts
K.GetEnvDump sec
rts
*/--------------------------------------
* # UnsetEnv
* Remove an environment variable
@ -482,6 +533,7 @@ K.UnsetEnv.I jsr ENV.FindVarTXTPTR
jsr ENV.DelVarP3 Ptr3 -> NAME=VALUE
K.UnsetEnv.I.8 clc
K.UnsetEnv.I.9 rts
*--------------------------------------
* ENV.FindVarTXTPTR
@ -497,6 +549,11 @@ K.UnsetEnv.I.9 rts
* ZPPtr3 -> PTR to Ending 0
*--------------------------------------
ENV.FindVarTXTPTR
.DO AUXENV=1
sta SETREADAUX
sta SETWRITEAUX
.FIN
jsr ENV.InitEnvP3 Store ENV
.1 lda (ZPPtr3)
@ -505,7 +562,11 @@ ENV.FindVarTXTPTR
ldy #$ff
.2 iny
.DO AUXENV=1
jsr SHARED.TXTPTR.GetY
.ELSE
lda (TXTPTR),y
.FIN
beq .3
jsr SHARED.IsIDValid
@ -520,20 +581,32 @@ ENV.FindVarTXTPTR
cmp #'='
bne .4
.DO AUXENV=1
sta CLRREADAUX
sta CLRWRITEAUX
.FIN
clc
rts
.4 jsr ENV.NextEnvP3 Skip NAME=VALUE
bra .1
.9 sec
.9 .DO AUXENV=1
sta CLRREADAUX
sta CLRWRITEAUX
.FIN
sec
rts
*--------------------------------------
* ENV.DelVarP3
* In:
* ZPPtr3 -> ENV.NAME to Discard
*--------------------------------------
ENV.DelVarP3 >LDYA ZPPtr3 save actual Ptr
ENV.DelVarP3 .DO AUXENV=1
sta SETREADAUX
sta SETWRITEAUX
.FIN
>LDYA ZPPtr3 save actual Ptr
>STYA ZPPtr4
jsr ENV.NextEnvP3 Skip NAME=VALUE
@ -543,14 +616,29 @@ ENV.DelVarP3 >LDYA ZPPtr3 save actual Ptr
lda (ZPPtr3),y Move back CSTRs...
sta (ZPPtr4),y
bne .2
tya
beq ENV.InitEnvP3.RTS we moved back ending \0
beq .8 we moved back ending \0
jsr ENV.NextEnvP3Y
jsr ENV.NextEnvP4Y
bra .1
.8 .DO AUXENV=1
sta CLRREADAUX
sta CLRWRITEAUX
.FIN
rts
*--------------------------------------
ENV.InitEnvP3 ldy #S.PS.hENV
ENV.InitEnvP3 .DO AUXENV=1
sta CLRREADAUX
.FIN
ldy #S.PS.hENV
lda (pPs),y
.DO AUXENV=1
sta SETREADAUX
.FIN
jsr K.GetMemPtr
>STYA ZPPtr3 Store ENV
ENV.InitEnvP3.RTS
@ -591,7 +679,22 @@ ENV.Dup ldy #S.PS.ENVPAGECNT
lda (pPs),y
ENV.Dup.A sta .8+1 Store target page Count
ldy #S.PS.ENVPAGECNT get SOURCE page count
lda (pPs),y
sta .10+1
ldy #S.PS.hENV
lda (pPs),y
.DO AUXENV=1
sta SETREADAUX
sta SETWRITEAUX
.FIN
jsr K.GetMemPtr
>STYA .1+1
ldy #0
lda .8+1
jsr K.GetMem
bcs .9
@ -599,17 +702,9 @@ ENV.Dup.A sta .8+1 Store target page Count
phx save hMem
jsr Mem.SetOwner Set Ownership
ldy #S.PS.ENVPAGECNT get SOURCE page count
lda (pPs),y
tax
iny #S.PS.hENV
lda (pPs),y
jsr K.GetMemPtr
>STYA .1+1
ldy #0
.10 ldx #$ff SELF MODIFIED
.1 lda $ffff,y SELF MODIFIED
.2 sta $ffff,y SELF MODIFIED
@ -624,7 +719,12 @@ ENV.Dup.A sta .8+1 Store target page Count
.8 ldx #$ff SELF MODIFIED Target Page Count
pla hMem
clc
.9 rts
.9 .DO AUXENV=1
sta CLRREADAUX
sta CLRWRITEAUX
.FIN
rts
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.ENV

View File

@ -734,6 +734,10 @@ DevMgrInit.USR ldx #4
.HS 2C BIT ABS
*--------------------------------------
DevMgrInit.BLK ldx #6
.HS 2C BIT ABS
*--------------------------------------
DevMgrInit.REMAP
ldx #10
*--------------------------------------
>LDYAI DRV.BlkDevice
bra DevMgrInit.AddBDev
@ -744,9 +748,6 @@ DevMgrInit.SP ldy #$ff
adc #3 Compute smartport entry point
sta FD.BDEV+S.FD.DEV.BUSPTR
ldx #8
.HS 2C BIT ABS
DevMgrInit.REMAP
ldx #10
>LDYAI DRV.SmartPort
*--------------------------------------
DevMgrInit.AddBDev
@ -1016,15 +1017,25 @@ TskMgrInit >LDYAI MSG.TSK
iny #S.PS.hENV
sta (pPs),y
.DO AUXENV=1
sta SETWRITEAUX
.FIN
lda #0
sta (ZPPtr1) make sure blank!!
.DO AUXENV=1
sta CLRWRITEAUX
.FIN
>LDYAI $2E0 Get ROOT from QC
>SYSCALL2 strdup
bcs .9
txa
ldy #S.PS.hCWD
sta (pPs),y
>PUSHWI I.ENV.BOOT
>PUSHWI $2C0 Get BOOT from QC
>SYSCALL2 SetEnv