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 #0
.DA CS.END-CS.START Code Size (without Constants) .DA CS.END-CS.START Code Size (without Constants)
.DA DS.END-DS.START Data SegmentSize .DA DS.END-DS.START Data SegmentSize
.DA #16 Stack Size .DA #32 Stack Size
.DA #ZS.END-ZS.START Zero Page Size .DA #ZS.END-ZS.START Zero Page Size
.DA 0 .DA 0
*-------------------------------------- *--------------------------------------
@ -47,7 +47,36 @@ L.MSG3 .DA MSG3
CS.INIT clc CS.INIT clc
rts 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 >SYSCALL puts
>LDA.G PS.Index >LDA.G PS.Index
@ -56,15 +85,26 @@ CS.RUN >LDYA L.MSG0
lda PS.Table.PID,x lda PS.Table.PID,x
beq .7 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 >SYSCALL GetMemPtr
>STYA ZPPSPtr >STYA ZPPSPtr
ldy #S.PS.hARGV
lda (ZPPSPtr),y
>SYSCALL GetMemPtr
>STYA ZPArgV
ldy #S.PS.PPID ldy #S.PS.PPID
lda (ZPPSPtr),y lda (ZPPSPtr),y
>PUSHA Parent PID >PUSHA Parent PID
@ -86,23 +126,14 @@ CS.RUN >LDYA L.MSG0
ldy #S.PS.PID ldy #S.PS.PID
lda (ZPPSPtr),y lda (ZPPSPtr),y
>PUSHA >PUSHA
>PUSHBI 8 >PUSHBI 6
>LDYA L.MSG1 >LDYA L.MSG1
>SYSCALL printf >SYSCALL printf
bcs .9 bcs .9
jsr CS.RUN.PrintArgs jmp CS.RUN.PrintArgs
bcs .9
>SLEEP .9 rts
.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
*-------------------------------------- *--------------------------------------
CS.RUN.DecodeFlags CS.RUN.DecodeFlags
lda (ZPPSPtr) Get flags lda (ZPPSPtr) Get flags
@ -124,9 +155,14 @@ CS.RUN.DecodeFlags
rts rts
*-------------------------------------- *--------------------------------------
CS.RUN.PrintArgs CS.RUN.PrintArgs
ldy #S.PS.hARGV
lda (ZPPSPtr),y
>SYSCALL GetMemPtr
>STYA ZPArgV
.1 lda (ZPArgV) .1 lda (ZPArgV)
beq .8 beq .8
>PUSHW ZPArgV >PUSHW ZPArgV
>PUSHBI 2 >PUSHBI 2
>LDYA L.MSG2 >LDYA L.MSG2

View File

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

View File

@ -180,16 +180,16 @@ ENV.Search.DRV ldx #2
.HS 2C BIT ABS .HS 2C BIT ABS
ENV.Search.PATH ldx #4 ENV.Search.PATH ldx #4
>STYA ZPPtr1 >STYA ZPPtr2
>LDYA ENV.VARS,x >LDYA ENV.VARS,x
jsr ENV.FindVarP1 get value for Search Path jsr K.GetEnv get value for Search Path
bcs K.FileSearch.RTS bcs K.FileSearch.RTS
>STYA ENV.SearchPath >STYA ENV.SearchPath
>LDYA ZPPtr1 >LDYA ZPPtr2
ENV.Search.YA >STYA .4+1 ENV.Search.YA >STYA .4+1
@ -306,7 +306,7 @@ K.SetEnv jsr MEM.SPtr1PPtr2
K.SetEnv.I jsr K.UnsetEnv.I K.SetEnv.I jsr K.UnsetEnv.I
jsr ENV.InitEnvP3 ZPPtr3 -> Env .1 jsr ENV.InitEnvP3 ZPPtr3 -> Env
ldy #0 ldy #0
ldx #0 ldx #0
@ -356,20 +356,37 @@ K.SetEnv.I jsr K.UnsetEnv.I
sec sec
adc ZPPtr4 adc ZPPtr4
tax tax
bcc .21 bcc .22
inc ZPPtr4+1 inc ZPPtr4+1
.21 cpx #K.ENV.SIZE ldy #S.PS.ENVPAGECNT
lda ZPPtr4+1 lda (pPs),y
sbc /K.ENV.SIZE cmp ZPPtr4+1
bcs .99 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 lda (ZPPtr1),y
sta (ZPPtr3),y sta (ZPPtr3),y
bne .22 bne .23
jsr ENV.NextEnvP3Y jsr ENV.NextEnvP3Y
@ -384,11 +401,7 @@ K.SetEnv.I jsr K.UnsetEnv.I
sta (ZPPtr3),y don't forget array ending 0 sta (ZPPtr3),y don't forget array ending 0
clc clc
rts .9 rts
.99 lda #E.ENVF
* sec
rts
*/-------------------------------------- */--------------------------------------
* # GetEnv * # GetEnv
* searches the environment list to find the environment variable name, * searches the environment list to find the environment variable name,
@ -728,6 +741,52 @@ ENV.AddAToBuf ldx ENV.BufLen
inc ENV.BufLen inc ENV.BufLen
rts 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 ENV.VARS .DA .1
.DA .2 .DA .2
.DA .3 .DA .3

View File

@ -990,13 +990,23 @@ TskMgrInit >LDYAI MSG.TSK
>SYSCALL puts >SYSCALL puts
>LDYAI K.ENV.SIZE get a buffer for ENV >LDYAI K.ENV.SIZE get a buffer for ENV
jsr K.GetMem0 make sure blank!! jsr K.GetMem
bcs .9 bcs .9
txa >STYA ZPPtr1
ldy #S.PS.hENV
ldy #S.PS.ENVPAGECNT
lda /K.ENV.SIZE
sta (pPs),y sta (pPs),y
txa
* ldy #S.PS.hENV
iny
sta (pPs),y
lda #0
sta (ZPPtr1) make sure blank!!
>LDYAI K.Buf256 >LDYAI K.Buf256
>STYA K.MLI.PARAMS+1 >STYA K.MLI.PARAMS+1
>MLICALL MLIGETPREFIX >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 : * in :
* out : * out :
* A = PSID * A = PSID
* we cannot use ZPPtrs1 & 2
* because of calling K.StrDup & PS.DupEnv
*-------------------------------------- *--------------------------------------
PS.CreateChild ldx CORE.PSCount PS.CreateChild ldx CORE.PSCount
beq .3 beq .3
@ -161,18 +159,23 @@ PS.CreateChild ldx CORE.PSCount
sta (PS.NewPSPtr) Mark this PS with DUPENV flag sta (PS.NewPSPtr) Mark this PS with DUPENV flag
ldy #S.PS.hENV dup hENV from parent PS jsr ENV.Dup dup hENV from parent PS
lda (pPs),y
jsr PS.DupEnv
bcs .9 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 .8 sta (PS.NewPSPtr),y
txa
dey
sta (PS.NewPSPtr),y
ldy #S.PS.hStdIn ldy #S.PS.hStdIn
@ -416,33 +419,6 @@ PS.LoadGetHeader
PS.Load.ROOT .AZ "ROOT" PS.Load.ROOT .AZ "ROOT"
PS.Load.HEADER .AZ "#!/" 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 * K.Buf256= /.../SHELL, K.IOBuf=/.../SCRIPT
* - or - * - or -
* K.Buf256=/.../BINFILE,K.IOBuf=0 * 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.PS
.INB USR/SRC/SYS/KERNEL.S.ARG .INB USR/SRC/SYS/KERNEL.S.ARG
.INB USR/SRC/SYS/KERNEL.S.ENV .INB USR/SRC/SYS/KERNEL.S.ENV
.INB USR/SRC/SYS/KERNEL.S.MATH
.EP .EP
A2osX.E0 .PH $E000 A2osX.E0 .PH $E000
.INB USR/SRC/SYS/KERNEL.S.JMP .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.IO
.INB USR/SRC/SYS/KERNEL.S.PFT .INB USR/SRC/SYS/KERNEL.S.PFT
********* TMP ***** go to A2osX.D2 ********* TMP ***** go to A2osX.D2
.INB USR/SRC/SYS/KERNEL.S.MATH
.LIST ON .LIST ON
DevMgr.FreeMem .EQ * DevMgr.FreeMem .EQ *
.LIST OFF .LIST OFF