A2osX/SYS/KERNEL.S.PS.txt

417 lines
7.4 KiB
Plaintext
Raw Normal View History

2017-12-22 21:24:30 +00:00
NEW
PREFIX /A2OSX.BUILD
2017-12-22 21:24:30 +00:00
AUTO 4,1
*/--------------------------------------
* # ExecPSNewEnv.YA
* # ExecPS.YA (Blocking Parent PID)
* # CreatePSNewEnv.YA
* # CreatePS.YA (Non Blocking)
* ## In:
* Y,A = PTR To Cmd Line
* ## Out:
* A = Child PSID
*\--------------------------------------
K.ExecPSNewEnv.YA
ldx #S.PS.F.DUPENV+S.PS.F.HOLD
.HS 2C bit abs
K.ExecPS.YA
ldx #S.PS.F.HOLD
.HS 2C bit abs
K.CreatePSNewEnv.YA
ldx #S.PS.F.DUPENV
.HS 2C bit abs
K.CreatePS.YA
ldx #0
2017-10-27 14:56:46 +00:00
stx PS.Flags
>STYA PS.CL
jsr PS.CreateChild Child S.PS at ZPPtr3
bcs .9
sta .8+1
2017-10-27 14:56:46 +00:00
>LDYA PS.CL
jsr PS.CmdLine2Args Y,A = Args[0]
bcs .9
jsr PS.Init
bcc .8
pha save error code
lda .8+1
jsr CORE.PSFree.A
pla get back error code
sec
rts
.8 lda #$ff self modified
.9 rts
*--------------------------------------
2017-10-27 14:56:46 +00:00
PS.Flags .BS 1
PS.CL .BS 2
2016-08-17 06:25:58 +00:00
*--------------------------------------
2016-09-29 15:30:15 +00:00
* PS.CreateChild
2016-08-17 06:25:58 +00:00
* in :
* out :
* A = PSID
2017-01-12 17:43:45 +00:00
* we cannot use ZPPtrs1 & 2
* because of calling K.NewStr.YA & S.DupEnv.A
2016-08-17 06:25:58 +00:00
*--------------------------------------
PS.CreateChild ldx #0
2016-08-17 06:25:58 +00:00
.1 cpx CORE.PSCount
2016-08-17 06:25:58 +00:00
beq .2
lda PS.Table.PID,x
beq .31 Found an empty slot
inx
2016-08-17 06:25:58 +00:00
bra .1
.2 cpx #K.PS.MAX
bne .3
2016-08-17 06:25:58 +00:00
lda #K.E.OOH
2016-08-17 06:25:58 +00:00
sec
rts
.99 plx
rts
.3 inc CORE.PSCount
2016-08-17 06:25:58 +00:00
.31 phx save PS inex
.4 inc CORE.LastPSID Get a PSID not alredy running
2016-08-17 06:25:58 +00:00
beq .4 not = 0
lda CORE.LastPSID
jsr CORE.GetPSByID.A
2016-08-17 06:25:58 +00:00
bcc .4
plx
lda CORE.LastPSID
sta PS.Table.PID,x
phx
2016-08-17 06:25:58 +00:00
>LDYAI S.PS
jsr K.GetMem0.YA Blank Everything in this S.PS
bcs .99
>STYA ZPPtr3
txa
plx
sta PS.Table.hMem,x
2017-10-27 14:56:46 +00:00
jsr PS.SetMemOwner Set Ownership
ldy #S.PS.PID
lda CORE.LastPSID
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
lda #S.PS.F.DUPENV
2017-10-27 14:56:46 +00:00
bit PS.Flags need to create ENV & Prefix ?
beq .6 no...
sta (ZPPtr3) Mark this PS with DUPENV flag
2016-08-17 06:25:58 +00:00
ldy #S.PS.hPREFIX copy hPREFIX...
lda (pPs),y
jsr K.GetMemPtr.A
jsr K.NewStr.YA
bcs .9
2016-08-17 06:25:58 +00:00
2017-10-27 14:56:46 +00:00
jsr PS.SetMemOwner Set Ownership
2016-08-17 06:25:58 +00:00
txa
ldy #S.PS.hPREFIX
2017-01-12 17:43:45 +00:00
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
ldy #S.PS.hENV ...and hENV from parent PS
lda (pPs),y
jsr PS.DupEnv.A
bcs .9
2016-08-17 06:25:58 +00:00
ldy #S.PS.hENV
2017-01-12 17:43:45 +00:00
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
bra .8
.6 ldy #S.PS.hPREFIX reuse same hPREFIX...
lda (pPs),y
2017-01-12 17:43:45 +00:00
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
ldy #S.PS.hENV ...and hENV from parent PS
lda (pPs),y
2017-01-12 17:43:45 +00:00
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
2017-01-12 17:43:45 +00:00
.8 ldy #S.PS.hStdIn
2016-08-17 06:25:58 +00:00
.81 lda (pPs),y
2017-01-12 17:43:45 +00:00
sta (ZPPtr3),y
2016-08-17 06:25:58 +00:00
iny
2017-01-12 17:43:45 +00:00
cpy #S.PS.hStdErr+1
2016-08-17 06:25:58 +00:00
bne .81
ldy #S.PS.PID
2016-08-17 06:25:58 +00:00
lda (pPs),y
ldy #S.PS.PPID
2017-01-12 17:43:45 +00:00
sta (ZPPtr3),y
lda #S.PS.F.HOLD
2017-10-27 14:56:46 +00:00
bit PS.Flags
beq .82
2016-08-17 06:25:58 +00:00
ora (pPs)
sta (pPs) HOLD parent PS if ExecPS
.82 lda #S.PS.F.INIT
2017-01-12 17:43:45 +00:00
ora (ZPPtr3)
sta (ZPPtr3) Make this PS Init....
2017-01-12 17:43:45 +00:00
ldy #S.PS.CPID
lda CORE.LastPSID
2017-01-12 17:43:45 +00:00
sta (pPs),y
clc Exit with A=PSID
.9 rts
2016-08-17 06:25:58 +00:00
*--------------------------------------
PS.CmdLine2Args >STYA ZPPtr1
ldy #0
.1 lda (ZPPtr1),y compute strlen in Y,X
beq .2
iny
bne .1 max 255
.2 tya +2 for ending 0 for last string, and endig 0 for array
clc
adc #2
tay
lda #0
bcc .3
inc
.3 jsr K.GetMem.YA
2016-08-17 06:25:58 +00:00
bcs .9
phy save PTR.LO
pha save PTR.HI
>STYA ZPPtr2
txa
ldy #S.PS.hARGS
sta (ZPPtr3),y
2017-10-27 14:56:46 +00:00
jsr PS.SetMemOwner Set Ownership
2017-10-27 14:56:46 +00:00
stz PS.bInQuote
2016-08-17 06:25:58 +00:00
ldy #$ff
ldx #0 Arg Count
2016-08-17 06:25:58 +00:00
.4 iny
lda (ZPPtr1),y
beq .7
cmp #'"' found a quote ?
bne .5
2017-10-27 14:56:46 +00:00
lda PS.bInQuote
eor #$ff
2017-10-27 14:56:46 +00:00
sta PS.bInQuote
bra .4
.5 cmp #' '
bne .6
2017-10-27 14:56:46 +00:00
bit PS.bInQuote
bmi .6
inx Found one arg !!!
lda #0 set this token End
.6 sta (ZPPtr2)
inc ZPPtr2
bne .4
inc ZPPtr2+1
bra .4
.7 sta (ZPPtr2) set Arg Ending 0
inc ZPPtr2
bne .8
inc ZPPtr2+1
.8 sta (ZPPtr2) set Array Ending 0
txa
ldy #S.PS.ARGC
sta (ZPPtr3),y
pla get back PTR.HI
ply get back PTR.LO
clc
.9 rts
2017-10-27 14:56:46 +00:00
PS.bInQuote .BS 1
*--------------------------------------
PS.Init jsr BIN.Load.YA Y,A=filename full path
2016-08-17 06:25:58 +00:00
bcs .9
2017-01-12 17:43:45 +00:00
>STYA ZPPtr4 save PTR to Code Segment
phy
ldy #S.PS.ZP.CODE+1
sta (ZPPtr3),y save pCode HI...
dey
pla
sta (ZPPtr3),y save pCode LO...
2016-08-17 06:25:58 +00:00
txa
ldy #S.PS.hCS
sta (ZPPtr3),y save CS hMem in S.PS
jsr K.GetMemByID.A
2017-10-27 14:56:46 +00:00
jsr PS.SetMemOwner Set Ownership
ldy #H.BIN.EXE.DS.SIZE+1
2017-01-12 17:43:45 +00:00
lda (ZPPtr4),y Load DS.SIZE HI
2016-08-17 06:25:58 +00:00
tax
dey
2017-01-12 17:43:45 +00:00
ora (ZPPtr4),y
2016-08-17 06:25:58 +00:00
beq .2 DS.SIZE=0...
lda (ZPPtr4),y
tay
txa Y,A = DS.SIZE
jsr K.GetMem0.YA
2016-08-17 06:25:58 +00:00
bcs .9
phy
ldy #S.PS.ZP.DATA+1
sta (ZPPtr3),y save pData HI...
dey
pla
sta (ZPPtr3),y save pData LO...
2016-08-17 06:25:58 +00:00
txa
ldy #S.PS.hDS
sta (ZPPtr3),y save DS hMem in S.PS
2017-10-27 14:56:46 +00:00
jsr PS.SetMemOwner Set Ownership
.2 ldy #H.BIN.EXE.SS.SIZE
lda (ZPPtr4),y Load SS.SIZE
ldy #S.PS.ZP.STACK
sta (ZPPtr3),y save pStack LO...
tay
bne .3 SS.SIZE.LO=0, set as default $100
lda #1 SS.SIZE.HI
.HS 2C bit abs
.3 lda #0
ldx #S.MEM.F.ALIGN
jsr MEM.GetMem.YAX
bcs .9
ldy #S.PS.ZP.STACK+1
sta (ZPPtr3),y save pStack HI...(LO alredy set to Stack TOP)
txa
ldy #S.PS.hSS
sta (ZPPtr3),y save SS hMem in S.PS
jsr PS.SetMemOwner Set Ownership
ldy #H.BIN.EXE.ZP.SIZE
lda (ZPPtr4),y
clc
adc #8 Add room for 4 saved PTR
ldy #S.PS.ZP.SIZE
sta (ZPPtr3),y
clc
.9 rts
2016-08-17 06:25:58 +00:00
*--------------------------------------
* PS.DupEnv.A
2016-08-17 06:25:58 +00:00
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
*--------------------------------------
PS.DupEnv.A jsr K.GetMemPtr.A
2017-01-12 17:43:45 +00:00
>STYA ZPPtr1
>LDYAI K.ENV.SIZE
jsr K.GetMem.YA
2016-08-17 06:25:58 +00:00
bcs .9
2017-01-12 17:43:45 +00:00
>STYA ZPPtr2
2017-10-27 14:56:46 +00:00
jsr PS.SetMemOwner Set Ownership
2016-08-17 06:25:58 +00:00
ldy #0
2017-01-12 17:43:45 +00:00
.1 lda (ZPPtr1),y
sta (ZPPtr2),y
2016-08-17 06:25:58 +00:00
beq .8
.2 iny
bne .3
inc ZPPtr1+1
inc ZPPtr2+1
.3 lda (ZPPtr1),y
sta (ZPPtr2),y
bne .2
iny
2016-08-17 06:25:58 +00:00
bne .1
2017-01-12 17:43:45 +00:00
inc ZPPtr1+1
inc ZPPtr2+1
2016-08-17 06:25:58 +00:00
bra .1
.8 txa hMem
2016-08-17 06:25:58 +00:00
clc
.9 rts
*--------------------------------------
2017-10-27 14:56:46 +00:00
PS.SetMemOwner lda CORE.LastPSID
ldy #S.MEM.OWNERPID
sta (ZPMEMMGR),y
rts
*--------------------------------------
K.GetPSStatus.A jsr CORE.GetPSByID.A
bcs .9
>STYA ZPPtr1
lda (ZPPtr1)
.9 rts
*--------------------------------------
K.GetPSList.YA >STYA ZPPtr1
ldx #0
ldy #0
.1 lda PS.Table.PID,x
beq .2
lda PS.Table.hMem,x
iny
sta (ZPPtr1),y
.2 inx
cpx CORE.PSCount
bne .1
.9 tya
sta (ZPPtr1)
rts
*--------------------------------------
2016-08-17 06:25:58 +00:00
MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.PS
LOAD /A2OSX.SRC/SYS/KERNEL.S
2016-08-17 06:25:58 +00:00
ASM