Kernel 0.92

This commit is contained in:
Rémy GIBERT 2018-11-28 15:58:42 +01:00
parent 03231059b9
commit 04066e6212
9 changed files with 138 additions and 95 deletions

Binary file not shown.

Binary file not shown.

View File

@ -232,7 +232,8 @@ Cmd.SetPrefixA pha
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
sta (pPs),y sta (pPs),y
jmp SetPWD.I * clc
rts
*-------------------------------------- *--------------------------------------
Cmd.Exec.CSYN lda #E.CSYN Cmd.Exec.CSYN lda #E.CSYN
sec sec

View File

@ -192,8 +192,6 @@ CS.RUN jsr CMD.Init
>SYSCALL GetMemPtr >SYSCALL GetMemPtr
>STYA ZPFileBufPtr >STYA ZPFileBufPtr
jsr SetPWD
lda #0 lda #0
jsr ShiftA Remove $0=/bin/shell jsr ShiftA Remove $0=/bin/shell
@ -458,14 +456,6 @@ CheckSleep ldy #Sleep+3
ora (pData),y ora (pData),y
rts rts
*-------------------------------------- *--------------------------------------
SetPWD ldy #S.PS.hPREFIX
lda (pPs),y
SetPWD.I >SYSCALL GetMemPtr
>PUSHYA
>LDYA L.ENV.PWD
>SYSCALL SetEnv
rts
*--------------------------------------
ShiftA >SYSCALL ArgV ShiftA >SYSCALL ArgV
bcs .8 bcs .8

View File

@ -302,7 +302,6 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR.
| Name | Status | Comment | | Name | Status | Comment |
| ---- | ------ | ------- | | ---- | ------ | ------- |
| $PWD | Working | 'Working Directory' |
| $0 | Working | Command Full Path | | $0 | Working | Command Full Path |
| $1-$9 | Working | Arg[n] | | $1-$9 | Working | Arg[n] |
| $* | Working | All Args | | $* | Working | All Args |
@ -311,6 +310,8 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR.
| $@ | Working | Parent PID | | $@ | Working | Parent PID |
| $$ | Working | PID | | $$ | Working | PID |
| $! | Working | Child PID | | $! | Working | Child PID |
| $UID | Working | PS Owner UID |
| $PWD | Working | Working Directory |
note : '$VAR' does NOT expand Variable note : '$VAR' does NOT expand Variable

View File

@ -284,7 +284,7 @@ CORE.Dispatch stz CORE.PSIndex
* CORE.PSFree * CORE.PSFree
* In : A = PID to free * In : A = PID to free
*-------------------------------------- *--------------------------------------
CORE.PSFree sta .1+1 Save PS ID CORE.PSFree sta .10+1 Save PS ID
jsr CORE.GetPSByID S.PS in ZPPtr1 jsr CORE.GetPSByID S.PS in ZPPtr1
bcs .9 bcs .9
@ -309,10 +309,10 @@ CORE.PSFree sta .1+1 Save PS ID
ldy #S.PS.hENV ldy #S.PS.hENV
jsr .8 jsr .8
ldy #S.PS.hPREFIX .1 ldy #S.PS.hPREFIX
jsr .8 jsr .8
.1 lda #$ff Self Modified .10 lda #$ff Self Modified
ldx #0 ldx #0

View File

@ -442,7 +442,7 @@ ENV.AddP3ToBuf ldx ENV.BufLen
ENV.ExpandSysVar ENV.ExpandSysVar
ldx ENV.VarLen ldx ENV.VarLen
cpx #1 is name 1 char? cpx #1 is name 1 char?
bne .9 bne .4
lda ENV.VarName lda ENV.VarName
jsr MEM.IsDigit $0...$9 ?? jsr MEM.IsDigit $0...$9 ??
@ -455,7 +455,7 @@ ENV.ExpandSysVar
jmp ENV.AddYAToBuf jmp ENV.AddYAToBuf
.1 ldx #ENV.SysVarsJmp-ENV.SysVars-1 .1 ldx #ENV.SysVars.Cnt-1
.2 cmp ENV.SysVars,x .2 cmp ENV.SysVars,x
beq .3 beq .3
@ -463,14 +463,47 @@ ENV.ExpandSysVar
bpl .2 bpl .2
.9 sec .9 sec
.99 rts rts
.3 txa .3 txa
asl asl
tax tax
jmp (ENV.SysVarsJmp,x) jmp (ENV.SysVarsJmp,x)
.4 >LDYAI ENV.StrVars
>STYA ZPPtr3
ldx #0
.5 lda (ZPPtr3)
beq .9
cmp ENV.VarLen
bne .7
tay
.6 lda (ZPPtr3),y
dey
cmp ENV.VarName,y
bne .7
tya
bne .6
jmp (ENV.StrVarsJmp,x)
.7 inx
inx
lda (ZPPtr3)
sec
adc ZPPtr3
sta ZPPtr3
bcc .5
inc ZPPtr3+1
bra .5
*-------------------------------------- *--------------------------------------
ENV.SysVars .AS "*#?@$!" ENV.SysVars .AS "*#?@$!"
ENV.SysVars.Cnt .EQ *-ENV.SysVars
*-------------------------------------- *--------------------------------------
ENV.SysVarsJmp .DA ENV.SysVarsArgs ENV.SysVarsJmp .DA ENV.SysVarsArgs
.DA ENV.SysVarsArgC .DA ENV.SysVarsArgC
@ -479,28 +512,20 @@ ENV.SysVarsJmp .DA ENV.SysVarsArgs
.DA ENV.SysVarsPID .DA ENV.SysVarsPID
.DA ENV.SysVarsCPID .DA ENV.SysVarsCPID
*-------------------------------------- *--------------------------------------
ENV.SysVarsArgs lda #1 ENV.StrVars >PSTR "PWD"
jsr K.ArgV >PSTR "UID"
bcs .8 .DA #0
*--------------------------------------
>STYA ZPPtr3 ENV.StrVarsJmp .DA ENV.StrVarsPWD
.DA ENV.StrVarsUID
.1 lda (ZPPtr3) *--------------------------------------
beq .8 ENV.StrVarsPWD ldy #S.PS.hPREFIX
lda (pPS),y
.2 jsr ENV.AddP3ToBuf jsr K.GetMemPtr
jmp ENV.AddYAToBuf
jsr ENV.NextEnvP3 *--------------------------------------
lda (ZPPtr3) ENV.StrVarsUID ldy #S.PS.UID
beq .8 .HS 2C
lda #' '
jsr ENV.AddAToBuf
bra .2
.8 clc
rts
*-------------------------------------- *--------------------------------------
ENV.SysVarsArgC ldy #S.PS.ARGC ENV.SysVarsArgC ldy #S.PS.ARGC
.HS 2C .HS 2C
@ -559,6 +584,29 @@ ENV.SysVarsCPID ldy #S.PS.CPID
clc clc
rts rts
*-------------------------------------- *--------------------------------------
ENV.SysVarsArgs lda #1
jsr K.ArgV
bcs .8
>STYA ZPPtr3
.1 lda (ZPPtr3)
beq .8
.2 jsr ENV.AddP3ToBuf
jsr ENV.NextEnvP3
lda (ZPPtr3)
beq .8
lda #' '
jsr ENV.AddAToBuf
bra .2
.8 clc
rts
*--------------------------------------
* ENV.FindVarP1 * ENV.FindVarP1
* In: * In:
* ZPPtr1 -> NAME * ZPPtr1 -> NAME

View File

@ -239,54 +239,53 @@ Mem.NextSlot lda ZPMemMgrSPtr
K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad hMem,BIN=%s\r\n" K.FreeMem.ERRBAD .AZ "FreeMem:$%h=Bad hMem,BIN=%s\r\n"
K.FreeMem.ERRFREED .AZ "FreeMem:$%h=already freed,BIN=%s\r\n" K.FreeMem.ERRFREED .AZ "FreeMem:$%h=already freed,BIN=%s\r\n"
*-------------------------------------- *--------------------------------------
K.FreeMem.BAD pha K.FreeMem.BAD sec
.HS 90 BCC
K.FreeMem.FREED clc
phx
php
pha
ldy #S.PS.hARGV ldy #S.PS.hARGV
lda (pPS),y lda (pPS),y
jsr K.GetMemPtr jsr K.GetMemPtr
>PUSHYA >PUSHYA
pla pla
>PUSHA >PUSHA
>PUSHBI 3 >PUSHBI 3
phx
>LDYAI K.FreeMem.ERRBAD >LDYAI K.FreeMem.ERRBAD
>SYSCALL printf plp
plx bcs .1
>DEBUGOA
sec
rts
*--------------------------------------
K.FreeMem.FREED ldy #S.PS.hARGV
lda (pPS),y
jsr K.GetMemPtr
>PUSHYA
pla
>PUSHA
>PUSHBI 3
phx
>LDYAI K.FreeMem.ERRFREED >LDYAI K.FreeMem.ERRFREED
>SYSCALL printf
.1 >SYSCALL printf
plx plx
sec sec
rts rts
*-------------------------------------- *--------------------------------------
K.FreeMem tay K.FreeMem tay
beq K.FreeMem.BAD Slot=0, reserved by Kernel beq K.FreeMem.BAD Slot=0, reserved by Kernel
* cpy #$23
* bne .11
* >DEBUG
*.11
cmp Mem.LastSlot cmp Mem.LastSlot
bcc .10 bcc .10
bne K.FreeMem.BAD bne K.FreeMem.BAD
.10 pha .10 pha
jsr K.GetMemByID X unmodified jsr K.GetMemByID X unmodified
lda (ZPMemMgrSPtr) lda (ZPMemMgrSPtr) In use ?
bpl K.FreeMem.FREED In use ? bmi .11
pla pla
bra K.FreeMem.FREED
.11 pla
ldy #S.MEM.REFCNT ldy #S.MEM.REFCNT
lda (ZPMemMgrSPtr),y Get count of those referencing this hMem lda (ZPMemMgrSPtr),y Get count of those referencing this hMem
dec only one left ? dec only one left ?

View File

@ -57,22 +57,22 @@ K.ExecL sty .1+1
K.ExecV >STYA PS.ArgV K.ExecV >STYA PS.ArgV
>PULLB PS.Flags >PULLB PS.Flags
PS.Exec stz PS.Load.hBIN PS.Exec jsr PS.CreateChild A=PID,Child S.PS at ZPPtr3,PS.Load.hMem
jsr PS.CreateChild A=PID,Child S.PS at ZPPtr3,PS.Load.hMem
bcs .9 bcs .9
sta .8+1 sta .8+1
* stz PS.Load.hBIN
stz K.IOBuf
jsr PS.Load jsr PS.Load
bcs .90 bcs .90
jsr PS.AddArgV jsr PS.AddArgV
bcc .8 bcc .8
.90 pha save error code .90 pha save error code
lda PS.Load.hBIN * lda PS.Load.hBIN
beq .91 * beq .91
jsr K.FreeMem * jsr K.FreeMem
.91 lda .8+1 .91 lda .8+1
jsr CORE.PSFree jsr CORE.PSFree
@ -140,42 +140,38 @@ PS.CreateChild ldx CORE.PSCount
lda CORE.LastPSID lda CORE.LastPSID
sta (ZPPtr3),y sta (ZPPtr3),y
lda #S.PS.F.DUPENV
bit PS.Flags need to create ENV & Prefix ?
beq .6 no...
sta (ZPPtr3) Mark this PS with DUPENV flag
ldy #S.PS.hPREFIX copy hPREFIX... ldy #S.PS.hPREFIX copy hPREFIX...
lda (pPs),y lda (pPs),y
jsr K.GetMemPtr jsr K.GetMemPtr
jsr K.NewStr jsr K.NewStr
bcs .9 bcs .9
jsr PS.SetMemOwner Set Ownership jsr PS.SetMemOwner Set Ownership
txa txa
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
sta (ZPPtr3),y sta (ZPPtr3),y
ldy #S.PS.hENV ...and hENV from parent PS lda #S.PS.F.DUPENV
bit PS.Flags need to create ENV ?
beq .6 no...
sta (ZPPtr3) Mark this PS with DUPENV flag
ldy #S.PS.hENV dup hENV from parent PS
lda (pPs),y lda (pPs),y
jsr PS.DupEnv jsr PS.DupEnv
bcs .9 bcs .9
ldy #S.PS.hENV ldy #S.PS.hENV
sta (ZPPtr3),y
bra .8 bra .8
.6 ldy #S.PS.hPREFIX reuse same hPREFIX... .6 ldy #S.PS.hENV reuse hENV from parent PS
lda (pPs),y lda (pPs),y
sta (ZPPtr3),y
.8 sta (ZPPtr3),y
ldy #S.PS.hENV ...and hENV from parent PS ldy #S.PS.hStdIn
lda (pPs),y
sta (ZPPtr3),y
.8 ldy #S.PS.hStdIn
.81 lda (pPs),y .81 lda (pPs),y
sta (ZPPtr3),y sta (ZPPtr3),y
@ -263,9 +259,9 @@ PS.Load >PUSHWI K.S.STAT
>STYA ZPPtr3 >STYA ZPPtr3
>LDYAI K.IOBuf >LDYAI K.IOBuf
>SYSCALL NewStr * >SYSCALL NewStr
bcs .99 * bcs .99
stx PS.Load.hBIN * stx PS.Load.hBIN
bra PS.LoadBIN.YA bra PS.LoadBIN.YA
@ -275,7 +271,8 @@ PS.Load >PUSHWI K.S.STAT
sec sec
.99 rts .99 rts
PS.LoadBIN >LDYA PS.ArgV PS.LoadBIN >LDYA PS.ArgV
PS.LoadBIN.YA jsr BIN.Load PS.LoadBIN.YA jsr BIN.Load
bcs .9 bcs .9
>STYA ZPPtr4 save PTR to Code Segment >STYA ZPPtr4 save PTR to Code Segment
@ -400,10 +397,14 @@ PS.Load.hMem .BS 1
PS.AddArgV stz PS.Load.ArgSize PS.AddArgV stz PS.Load.ArgSize
stz PS.Load.ArgSize+1 stz PS.Load.ArgSize+1
lda PS.Load.hBIN * lda PS.Load.hBIN
lda K.IOBuf
beq .10 beq .10
jsr K.GetMemPtr * jsr K.GetMemPtr
>LDYAI K.IOBuf
jsr K.strlen jsr K.strlen
iny +1 for \0 iny +1 for \0
>STYA PS.Load.ArgSize >STYA PS.Load.ArgSize
@ -453,10 +454,13 @@ PS.AddArgV stz PS.Load.ArgSize
ldy #S.PS.hARGV ldy #S.PS.hARGV
sta (ZPPtr3),y sta (ZPPtr3),y
lda PS.Load.hBIN * lda PS.Load.hBIN
lda K.IOBuf
beq .6 beq .6
jsr K.GetMemPtr * jsr K.GetMemPtr
>LDYAI K.IOBuf
>STYA ZPPtr1 >STYA ZPPtr1
jsr PS.AddPtr1ToStrV jsr PS.AddPtr1ToStrV