A2osX/SYS/KERNEL.S.PS.txt

482 lines
8.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
*/--------------------------------------
2018-09-19 15:25:42 +00:00
* # ExecPSNewEnv
2018-06-21 15:12:10 +00:00
* # ExecPS (Blocking Parent PID)
* # CreatePSNewEnv
* # CreatePS (Non Blocking)
2018-06-14 15:31:36 +00:00
* **In:**
* Y,A = PTR To Cmd Line
2018-06-14 15:31:36 +00:00
* **Out:**
* A = Child PSID
*\--------------------------------------
2018-06-21 15:12:10 +00:00
K.ExecPSNewEnv ldx #S.PS.F.DUPENV+S.PS.F.HOLD
.HS 2C bit abs
2018-06-21 15:12:10 +00:00
K.ExecPS ldx #S.PS.F.HOLD
.HS 2C bit abs
2018-06-21 15:12:10 +00:00
K.CreatePSNewEnv
ldx #S.PS.F.DUPENV
.HS 2C bit abs
2018-06-21 15:12:10 +00:00
K.CreatePS 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
2018-07-05 05:42:16 +00:00
jsr PS.Load
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
2018-06-22 14:59:24 +00:00
jsr CORE.GetPSByID
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
2018-06-21 15:12:10 +00:00
jsr K.GetMem0 Blank Everything in this S.PS
bcs .99
>STYA ZPPtr3
txa
plx
sta PS.Table.hMem,x
2018-06-21 15:12:10 +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
2018-06-21 15:12:10 +00:00
jsr K.GetMemPtr
2018-06-22 14:59:24 +00:00
jsr K.NewStr
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
2018-06-22 14:59:24 +00:00
jsr PS.DupEnv
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
2018-06-21 15:12:10 +00:00
.3 jsr K.GetMem
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
*--------------------------------------
2018-07-05 05:42:16 +00:00
PS.Load jsr BIN.Load 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
2018-09-19 15:25:42 +00:00
* jsr K.GetMemByID
* jsr PS.SetMemOwner Set Ownership
2018-09-19 15:25:42 +00:00
ldy #H.BIN.F Get Bin S.PS.F
lda (ZPPtr4),y
beq .1
ldy #S.PS.F update PS S.PS.F
ora (ZPPtr3),y
sta (ZPPtr3),y
.1 ldy #H.BIN.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
2018-08-11 10:57:57 +00:00
ldx #S.MEM.F.INIT0+S.MEM.F.DATA
jsr MEM.GetMem.YAX
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
2018-07-05 05:42:16 +00:00
.2 ldy #H.BIN.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
2018-08-11 10:57:57 +00:00
ldx #S.MEM.F.ALIGN+S.MEM.F.STACK
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
2018-07-05 05:42:16 +00:00
ldy #H.BIN.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
*--------------------------------------
2018-06-21 15:12:10 +00:00
* PS.DupEnv
2016-08-17 06:25:58 +00:00
* In:
* A = ENV hMem To Duplicate
* Out:
* A = hMem to new ENV
*--------------------------------------
2018-06-21 15:12:10 +00:00
PS.DupEnv jsr K.GetMemPtr
2017-01-12 17:43:45 +00:00
>STYA ZPPtr1
>LDYAI K.ENV.SIZE
2018-06-21 15:12:10 +00:00
jsr K.GetMem
2016-08-17 06:25:58 +00:00
bcs .9
2017-01-12 17:43:45 +00:00
>STYA ZPPtr2
2018-09-19 15:25:42 +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
*/--------------------------------------
2018-06-21 15:12:10 +00:00
* # GetMemStat
2018-06-14 15:31:36 +00:00
* **In:**
* Y,A = Ptr to 24 bytes buffer
2018-06-14 15:31:36 +00:00
* **Out:**
* Buffer filled with memory stats
*\--------------------------------------
2018-06-21 15:12:10 +00:00
K.GetMemStat >STYA ZPMemMgrTmp1
ldy #22
ldx #6
.1 lda DevMgr.Stat,x
sta (ZPMemMgrTmp1),y
dey
dex
bpl .1
sta SETREADAUX
ldy #14
jsr .2
sta CLRREADAUX
ldy #6
.2 ldx #6
.3 lda Mem.Table,x
sta (ZPMemMgrTmp1),y
dey
dex
bpl .3
rts
*/--------------------------------------
2018-06-21 15:12:10 +00:00
* # GetPSStatus
2018-06-14 15:31:36 +00:00
* **In:**
* A = PID
2018-06-14 15:31:36 +00:00
* **Out:**
* A = Status Byte
*\--------------------------------------
2018-06-21 15:12:10 +00:00
K.GetPSStatus jsr CORE.GetPSByID
bcs .9
>STYA ZPPtr1
lda (ZPPtr1)
.9 rts
*/--------------------------------------
2018-06-21 15:12:10 +00:00
* # GetPSStat
2018-06-14 15:31:36 +00:00
* **In:**
* Y,A = Ptr to 24 bytes buffer
2018-06-14 15:31:36 +00:00
* **Out:**
* Buffer filled with PS stats
*\--------------------------------------
2018-06-21 15:12:10 +00:00
K.GetPSStat >STYA ZPPtr1
ldx #0
ldy #1
lda CORE.InKernelStat
sta (ZPPtr1),y
iny
.1 lda PS.Table.PID,x
beq .2
lda PS.Table.hMem,x
sta (ZPPtr1),y
iny
lda PS.Table.Stat,x
sta (ZPPtr1),y
iny
.2 inx
cpx CORE.PSCount
bne .1
.9 tya
lsr
dec
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