Kernel 0.92

This commit is contained in:
Rémy GIBERT 2019-01-22 16:35:42 +00:00
parent 62618adcb5
commit ed4490f99e
8 changed files with 164 additions and 83 deletions

Binary file not shown.

Binary file not shown.

View File

@ -28,7 +28,7 @@ CS.START cld
.DA #0
.DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size
.DA #32 Stack Size
.DA #ZS.END-ZS.START Zero Page Size
.DA 0
*--------------------------------------
@ -47,7 +47,36 @@ L.MSG3 .DA MSG3
CS.INIT clc
rts
*--------------------------------------
CS.RUN >LDYA L.MSG0
CS.RUN lda #1
>SYSCALL ArgV
bcs .10
>SYSCALL atoi
bcs .90
tax
bne .90
tya
* ldx #0
.11 cmp PS.Table.PID,x
beq .12
inx
cpx #K.PS.MAX
bne .11
lda #E.NSP
* sec
rts
.12 jsr CS.RUN.DUMP
bcs .9
lda #0
sec
rts
.10 >LDYA L.MSG0
>SYSCALL puts
>LDA.G PS.Index
@ -56,15 +85,26 @@ CS.RUN >LDYA L.MSG0
lda PS.Table.PID,x
beq .7
lda PS.Table.hPS,x
jsr CS.RUN.DUMP
>SLEEP
.7 >INC.G PS.Index
cmp #K.PS.MAX
bne .1
.8 lda #0 tell Kernel that all done ok, but
sec we do not want to stay in memory
.9 rts
.90 lda #E.SYN
sec
rts
*--------------------------------------
CS.RUN.DUMP lda PS.Table.hPS,x
>SYSCALL GetMemPtr
>STYA ZPPSPtr
ldy #S.PS.hARGV
lda (ZPPSPtr),y
>SYSCALL GetMemPtr
>STYA ZPArgV
ldy #S.PS.PPID
lda (ZPPSPtr),y
>PUSHA Parent PID
@ -86,23 +126,14 @@ CS.RUN >LDYA L.MSG0
ldy #S.PS.PID
lda (ZPPSPtr),y
>PUSHA
>PUSHBI 8
>PUSHBI 6
>LDYA L.MSG1
>SYSCALL printf
bcs .9
jsr CS.RUN.PrintArgs
bcs .9
jmp CS.RUN.PrintArgs
>SLEEP
.7 >INC.G PS.Index
cmp #K.PS.MAX
bne .1
.8 lda #0 tell Kernel that all done ok, but
sec we do not want to stay in memory
.9 rts
.9 rts
*--------------------------------------
CS.RUN.DecodeFlags
lda (ZPPSPtr) Get flags
@ -124,9 +155,14 @@ CS.RUN.DecodeFlags
rts
*--------------------------------------
CS.RUN.PrintArgs
ldy #S.PS.hARGV
lda (ZPPSPtr),y
>SYSCALL GetMemPtr
>STYA ZPArgV
.1 lda (ZPArgV)
beq .8
>PUSHW ZPArgV
>PUSHBI 2
>LDYA L.MSG2

View File

@ -3,7 +3,7 @@ PREFIX
AUTO 4,1
*--------------------------------------
K.VER .EQ $5C00 92.0
K.ENV.SIZE .EQ 512
K.ENV.SIZE .EQ 256
K.PIPE.SIZE .EQ 256
*--------------------------------------
K.MEM.ALIGN .EQ 16
@ -491,7 +491,7 @@ S.PS.CPID .EQ 3
S.PS.hCS .EQ 4
S.PS.hDS .EQ 5
S.PS.hSS .EQ 6
S.PS.UID .EQ 7
S.PS.ENVPAGECNT .EQ 7
S.PS.hENV .EQ 8
S.PS.hPREFIX .EQ 9
S.PS.hStdIn .EQ 10
@ -501,7 +501,7 @@ S.PS.RC .EQ 13
S.PS.ARGC .EQ 14
S.PS.hARGV .EQ 15
* .EQ 16
S.PS.UID .EQ 16
S.PS.A .EQ 17
S.PS.X .EQ 18

View File

@ -180,16 +180,16 @@ ENV.Search.DRV ldx #2
.HS 2C BIT ABS
ENV.Search.PATH ldx #4
>STYA ZPPtr1
>STYA ZPPtr2
>LDYA ENV.VARS,x
jsr ENV.FindVarP1 get value for Search Path
jsr K.GetEnv get value for Search Path
bcs K.FileSearch.RTS
>STYA ENV.SearchPath
>LDYA ZPPtr1
>LDYA ZPPtr2
ENV.Search.YA >STYA .4+1
@ -306,7 +306,7 @@ K.SetEnv jsr MEM.SPtr1PPtr2
K.SetEnv.I jsr K.UnsetEnv.I
jsr ENV.InitEnvP3 ZPPtr3 -> Env
.1 jsr ENV.InitEnvP3 ZPPtr3 -> Env
ldy #0
ldx #0
@ -356,20 +356,37 @@ K.SetEnv.I jsr K.UnsetEnv.I
sec
adc ZPPtr4
tax
bcc .21
bcc .22
inc ZPPtr4+1
.21 cpx #K.ENV.SIZE
lda ZPPtr4+1
sbc /K.ENV.SIZE
bcs .99
ldy #S.PS.ENVPAGECNT
lda (pPs),y
cmp ZPPtr4+1
bcs .22 env is large enough
jsr ENV.Dup
bcs .9
ldy #$ff
pha
.22 iny
ldy #S.PS.hENV
lda (pPs),y
jsr K.Freemem
pla
ldy #S.PS.hENV
sta (pPs),y
txa
dey S.PS.ENVPAGECNT
sta (pPs),y
bra .1 Start over
.22 ldy #$ff
.23 iny
lda (ZPPtr1),y
sta (ZPPtr3),y
bne .22
bne .23
jsr ENV.NextEnvP3Y
@ -384,11 +401,7 @@ K.SetEnv.I jsr K.UnsetEnv.I
sta (ZPPtr3),y don't forget array ending 0
clc
rts
.99 lda #E.ENVF
* sec
rts
.9 rts
*/--------------------------------------
* # GetEnv
* searches the environment list to find the environment variable name,
@ -728,6 +741,52 @@ ENV.AddAToBuf ldx ENV.BufLen
inc ENV.BufLen
rts
*--------------------------------------
* ENV.Dup
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
* X = Page Count
*--------------------------------------
ENV.Dup ldy #S.PS.ENVPAGECNT
lda (pPs),y
ldy #0
jsr K.GetMem
bcs .9
>STYA .2+1 Target Buffer
phx save hMem
jsr PS.SetMemOwner Set Ownership
ldy #S.PS.hENV
lda (pPs),y
jsr K.GetMemPtr
>STYA .1+1
ldy #S.PS.ENVPAGECNT
lda (pPs),y
pha
tax
ldy #0
.1 lda $ffff,y SELF MODIFIED
.2 sta $ffff,y SELF MODIFIED
iny
bne .1
inc .1+2
inc .2+2
dex
bne .1
plx Page Count
pla hMem
clc
.9 rts
*--------------------------------------
ENV.VARS .DA .1
.DA .2
.DA .3

View File

@ -990,13 +990,23 @@ TskMgrInit >LDYAI MSG.TSK
>SYSCALL puts
>LDYAI K.ENV.SIZE get a buffer for ENV
jsr K.GetMem0 make sure blank!!
jsr K.GetMem
bcs .9
txa
ldy #S.PS.hENV
>STYA ZPPtr1
ldy #S.PS.ENVPAGECNT
lda /K.ENV.SIZE
sta (pPs),y
txa
* ldy #S.PS.hENV
iny
sta (pPs),y
lda #0
sta (ZPPtr1) make sure blank!!
>LDYAI K.Buf256
>STYA K.MLI.PARAMS+1
>MLICALL MLIGETPREFIX

View File

@ -90,8 +90,6 @@ PS.Exec jsr PS.CreateChild A=PID,Child S.PS at PS.NewPSPtr,PS.Load.hMem
* in :
* out :
* A = PSID
* we cannot use ZPPtrs1 & 2
* because of calling K.StrDup & PS.DupEnv
*--------------------------------------
PS.CreateChild ldx CORE.PSCount
beq .3
@ -161,18 +159,23 @@ PS.CreateChild ldx CORE.PSCount
sta (PS.NewPSPtr) Mark this PS with DUPENV flag
ldy #S.PS.hENV dup hENV from parent PS
lda (pPs),y
jsr PS.DupEnv
jsr ENV.Dup dup hENV from parent PS
bcs .9
ldy #S.PS.hENV
bra .8
.6 ldy #S.PS.hENV reuse hENV from parent PS
lda (pPs),y
ldy #S.PS.hENV
bra .8 A = hMem, X = PageCnt
.6 ldy #S.PS.ENVPAGECNT reuse hENV/pageCnt from parent PS
lda (pPs),y
tax
iny
lda (pPs),y
.8 sta (PS.NewPSPtr),y
txa
dey
sta (PS.NewPSPtr),y
ldy #S.PS.hStdIn
@ -416,33 +419,6 @@ PS.LoadGetHeader
PS.Load.ROOT .AZ "ROOT"
PS.Load.HEADER .AZ "#!/"
*--------------------------------------
* PS.DupEnv
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
* X = Count
*--------------------------------------
PS.DupEnv jsr K.GetMemPtr
>STYA ZPPtr1
>LDYAI K.ENV.SIZE
jsr K.GetMem
bcs .9
>STYA ZPPtr2 Target Buffer
phx save hMem
jsr PS.SetMemOwner Set Ownership
jsr PS.AddPtr1ToStrVUntil0
pla hMem
clc
.9 rts
*--------------------------------------
* K.Buf256= /.../SHELL, K.IOBuf=/.../SCRIPT
* - or -
* K.Buf256=/.../BINFILE,K.IOBuf=0

View File

@ -56,7 +56,6 @@ A2osX.D2 .PH $D000
.INB USR/SRC/SYS/KERNEL.S.PS
.INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.ENV
.INB USR/SRC/SYS/KERNEL.S.MATH
.EP
A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.JMP
@ -67,6 +66,7 @@ A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.IO
.INB USR/SRC/SYS/KERNEL.S.PFT
********* TMP ***** go to A2osX.D2
.INB USR/SRC/SYS/KERNEL.S.MATH
.LIST ON
DevMgr.FreeMem .EQ *
.LIST OFF