TskMgr:code rewrited with different "Init" Handling

This commit is contained in:
Rémy GIBERT 2016-08-18 17:26:11 +02:00
parent 16fb83c9f7
commit 07813cc5d6
7 changed files with 159 additions and 183 deletions

Binary file not shown.

Binary file not shown.

View File

@ -28,9 +28,9 @@ STARTPROC DHCPCLNT
#MOUNT CIFS 192.168.1.5:/MSSHARE /MNT/MSSHARE
# End Network Section
# GUI Section
INSDRV DHGR.DRV
INSDRV MOUSE.DRV
STARTPROC DESKTOP
#INSDRV DHGR.DRV
#INSDRV MOUSE.DRV
#STARTPROC DESKTOP
# End GUI Section
ECHO *** End A2osX Startup file ***
MAN

View File

@ -432,6 +432,7 @@ S.PS.F.HOLD .EQ %01000000
S.PS.F.EVENT .EQ %00100000
S.PS.F.ENV .EQ %00010000
S.PS.F.SLEEP .EQ %00001000
S.PS.F.INIT .EQ %00000100
S.PS.ID .EQ 1
S.PS.PID .EQ 2
S.PS.hCS .EQ 3

View File

@ -17,7 +17,7 @@ DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC
*--------------------------------------
S.GetDevByIDA cmp DevMgr.LastDevID
beq .1
bcs .9
bcs S.GetDevDNF
.1 stz S.GetDevByIDA.T
@ -36,8 +36,6 @@ S.GetDevByIDA cmp DevMgr.LastDevID
adc /DevMgr.Table
rts CC
.9 lda #DEVMGR.ERRDNF
rts CS
S.GetDevByIDA.T .BS 1
*--------------------------------------
* GetDevIDByNameA
@ -87,15 +85,14 @@ S.GetDevByNameYA
inx
bcc .1
.9 lda #DEVMGR.ERRDNF
S.GetDevDNF lda #DEVMGR.ERRDNF
rts
*--------------------------------------
S.GetDevInfoA jsr S.GetDevByIDA
bcs .9
bcs S.GetDevDNF
>STYA ZPQuickPtr1
ldx #DEVMGR.GETINFO
jmp (ZPQuickPtr1)
.9 rts
jmp (ZPQuickPtr1)
*--------------------------------------
DevMgr.Free .BS 2
DevMgr.DevID .BS 1

View File

@ -5,88 +5,44 @@ INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* S.ExecProcessNewEnvYA
* S.ExecProcessYA (Blocking Parent PID)
* S.CreateProcessNewEnvYA
* S.CreateProcessYA (Non Blocking)
* in :
* Y,A = PTR To Cmd Line
* out :
* A = Child PSID
* S.SelectProcessA
* In : A=PSID
*--------------------------------------
S.ExecProcessNewEnvYA
ldx #S.PS.F.ENV
.HS 2C bit abs
*--------------------------------------
S.ExecProcessYA ldx #0
jsr S.CreateProcess
bcs .9 terminated, do not set PID as HOLD
S.SelectProcessA
tay
bne S.SelectProcessN
S.SelectProcess0
>LDYAI TskMgr.Table Make PS #0 as current process
>STYA pPs
bra S.SelectProcessDev
S.SelectProcessN
jsr S.GetPSByIDA
bcs *
>STYA pPs
ldy #S.PS.CID
sta (pPs),y
pha Save Child PID
lda (pPs)
ora #S.PS.F.HOLD
sta (pPs)
pla Get Back PID
clc
.9 rts
*--------------------------------------
S.CreateProcessNewEnvYA
ldx #S.PS.F.ENV
.HS 2C bit abs
*--------------------------------------
S.CreateProcessYA
ldx #0
S.CreateProcess stx S.CreateChildProcess.Flags
jsr S.ExpandPStrYA
bcs .99
stx S.CreateProcess.hCmdLine
>STYA S.CreateProcess.CmdLine
jsr S.CreateChildProcess
bcs .98
sta S.CreateProcess.CPSID
jsr S.SelectProcessA
jsr S.InitProcess
bcs .97 Init Failed or exit?
ldy #S.PS.PID switch back to Parent Process
S.SelectProcess ldy #S.PS.hCS
lda (pPs),y
jsr S.SelectProcessA
lda S.CreateProcess.CPSID
clc
rts
.97 pha save error code
ldy #S.PS.PID switch back to Parent Process
lda (pPs),y
jsr S.SelectProcessA
jsr S.GetMemPtrA
>STYA pCode
lda S.CreateProcess.CPSID
jsr S.FreeProcessA
pla get back error code
ldy #S.PS.hDS
lda (pPs),y
beq S.SelectProcessDev
jsr S.GetMemPtrA
>STYA pData
S.SelectProcessDev
ldy #S.PS.hOUTDEV
lda (pPs),y
beq .8
.98 pha
lda S.CreateProcess.hCmdLine
jsr S.FreeMemA
pla
.99 sec
jsr S.GetDevByIDA
>STYA pDev
.8 clc
rts
*--------------------------------------
S.CreateProcess.hCmdLine .BS 1
S.CreateProcess.CmdLine .BS 2
S.CreateProcess.CPSID .BS 1
*--------------------------------------
* S.GetPSByIDA
* In :
* A = PID
@ -148,16 +104,71 @@ S.Sleep pla get PC LO
clc No error,
rts back to Kernel
*--------------------------------------
* PRIVATE
* S.ExecProcessNewEnvYA
* S.ExecProcessYA (Blocking Parent PID)
* S.CreateProcessNewEnvYA
* S.CreateProcessYA (Non Blocking)
* in :
* Y,A = PTR To Cmd Line
* out :
* A = Child PSID
*--------------------------------------
* S.CreateChildProcess
S.ExecProcessNewEnvYA
ldx #S.PS.F.ENV+S.PS.F.HOLD
.HS 2C bit abs
S.ExecProcessYA ldx #S.PS.F.HOLD
.HS 2C bit abs
S.CreateProcessNewEnvYA
ldx #S.PS.F.ENV
.HS 2C bit abs
S.CreateProcessYA
ldx #0
stx S.CreateProcess.Flags
jsr S.ExpandPStrYA
bcs .99
stx S.CreateProcess.hCmdLine
>STYA S.CreateProcess.CmdLine
jsr S.CreateProcess.Child
bcs .98
sta S.CreateProcess.CPSID
jsr S.CreateProcess.Init
bcs .97
lda S.CreateProcess.CPSID
clc
rts
.97 pha save error code
lda S.CreateProcess.CPSID
jsr S.FreeProcessA
pla get back error code
.98 pha
lda S.CreateProcess.hCmdLine
jsr S.FreeMemA
pla
.99 sec
rts
*--------------------------------------
S.CreateProcess.Flags .BS 1
S.CreateProcess.hCmdLine .BS 1
S.CreateProcess.CmdLine .BS 2
S.CreateProcess.CPSID .BS 1
*--------------------------------------
* S.CreateProcess.Child
* in :
* out :
* A = PSID
* we cannot use ZPQuickPtrs1 & 2
* because of calling S.NewPStrYA & S.DupEnvA
*--------------------------------------
S.CreateChildProcess
S.CreateProcess.Child
>LDYAI TskMgr.Table+S.PS.SIZE
>STYA ZPQuickPtr3
@ -179,18 +190,14 @@ S.CreateChildProcess
bra .1
.2 cpx #K.PS.MAX
bne .30
bne .3
lda #TSKMGR.ERROOH
sec
rts
.30 inc TSKMGR.SIZE
.3 inc TSKMGR.SIZE
.3 lda #S.PS.F.INUSE
ora S.CreateChildProcess.Flags
sta (ZPQuickPtr3)
.4 inc TSKMGR.LASTID Get a PSID not alredy running
beq .4 not = 0
lda TSKMGR.LASTID
@ -203,20 +210,23 @@ S.CreateChildProcess
lda #0
ldy #S.PS.hCS
.5 sta (ZPQuickPtr3),y Blank Everything in this S.PS
iny
cpy #S.PS.SIZE
bne .5
lda S.CreateChildProcess.Flags
and #S.PS.F.ENV need to create ENV & Prefix ?
beq .6
lda #S.PS.F.ENV
bit S.CreateProcess.Flags need to create ENV & Prefix ?
beq .6 no...
sta (ZPQuickPtr3) Mark this PS with ENV flag
ldy #S.PS.hPREFIX copy hPREFIX...
lda (pPs),y
jsr S.GetMemPtrA
jsr S.NewPStrYA
bcs .99
bcs .9
txa
ldy #S.PS.hPREFIX
@ -225,7 +235,7 @@ S.CreateChildProcess
ldy #S.PS.hENV ...and hENV from parent PS
lda (pPs),y
jsr S.DupEnvA
bcs .99
bcs .9
ldy #S.PS.hENV
sta (ZPQuickPtr3),y
@ -240,6 +250,7 @@ S.CreateChildProcess
sta (ZPQuickPtr3),y
.8 ldy #S.PS.hINDEV
.81 lda (pPs),y
sta (ZPQuickPtr3),y
iny
@ -252,21 +263,27 @@ S.CreateChildProcess
ldy #S.PS.PID
sta (ZPQuickPtr3),y
ldy #S.PS.CID
lda TSKMGR.LASTID
sta (pPs),y
lda #S.PS.F.HOLD
bit S.CreateProcess.Flags
beq .82
ora (pPs)
sta (pPs) HOLD parent PS if ExecProcess
.82 lda #S.PS.F.INUSE+S.PS.F.INIT
ora (ZPQuickPtr3)
sta (ZPQuickPtr3) Make this PS Init....
lda TSKMGR.LASTID
clc Exit with A=PSID
rts
.99 sec
rts
.9 rts
*--------------------------------------
S.CreateChildProcess.Flags
.BS 1
*--------------------------------------
* S.InitProcess
* In :
* A = hMem To Full Cmd Line
*--------------------------------------
S.InitProcess >LDYA S.CreateProcess.CmdLine
S.CreateProcess.Init
>LDYA S.CreateProcess.CmdLine
jsr S.PStr2StrArrayYA
bcs .9
@ -275,7 +292,7 @@ S.InitProcess >LDYA S.CreateProcess.CmdLine
txa
ldy #S.PS.hCMDLINE
sta (pPs),y
sta (ZPQuickPtr3),y
pla Restore PTR...
ply
@ -283,83 +300,34 @@ S.InitProcess >LDYA S.CreateProcess.CmdLine
jsr S.LoadBinYA A = BinPath hMem
bcs .9
>STYA pCode save PTR to Code Segment
>STYA ZPQuickPtr4 save PTR to Code Segment
txa
ldy #S.PS.hCS
sta (pPs),y save CS hMem in TSKSLOT
sta (ZPQuickPtr3),y save CS hMem in TSKSLOT
ldy #H.BIN.BIN.DS.SIZE+1
lda (pCode),y Load DS.SIZE HI
lda (ZPQuickPtr4),y Load DS.SIZE HI
tax
dey
ora (pCode),y
ora (ZPQuickPtr4),y
beq .2 DS.SIZE=0...
lda (pCode),y
lda (ZPQuickPtr4),y
>PUSHAX Push DS.SIZE
>PUSHBI S.MEM.F.INIT0 Clear DS
jsr S.GetMem
bcs .9
>STYA pData
txa
ldy #S.PS.hDS
sta (pPs),y save DS hMem in TSKSLOT
sta (ZPQuickPtr3),y save DS hMem in TSKSLOT
.2 lda (pCode)
cmp #H.BIN.HEADER.BIN65
bne *
ldx #TSKMGR.INIT
jsr pCodeJmp Call INIT function
bcc .9
pha save error code
ldx #TSKMGR.QUIT
jsr pCodeJmp Call QUIT function
pla get back error code
sec
.2
clc
.9 rts
*--------------------------------------
* S.SelectProcessA
* In : A=PSID
*--------------------------------------
S.SelectProcessA
tay
bne S.SelectProcessN
S.SelectProcess0
>LDYAI TskMgr.Table Make PS #0 as current process
>STYA pPs
bra S.SelectProcessDev
S.SelectProcessN
jsr S.GetPSByIDA
bcs *
>STYA pPs
S.SelectProcess ldy #S.PS.hCS
lda (pPs),y
jsr S.GetMemPtrA
>STYA pCode
ldy #S.PS.hDS
lda (pPs),y
beq S.SelectProcessDev
jsr S.GetMemPtrA
>STYA pData
S.SelectProcessDev
ldy #S.PS.hOUTDEV
lda (pPs),y
beq .8
jsr S.GetDevByIDA
>STYA pDev
.8 clc
rts
*--------------------------------------
* S.FreeProcessA
* In : A = PID to free
*--------------------------------------

View File

@ -7,18 +7,17 @@ AUTO 6
*--------------------------------------
* S.TskMgrRun
*--------------------------------------
S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE skip PS 0
>STYA pPs
lda TSKMGR.SIZE
dec skip PS 0
sta TSKMGR.COUNT
beq .8 no process....
.1 dec TSKMGR.COUNT skip PS 0
beq .8
lda (pPs) get S.PS.F
.1 lda (pPs) get S.PS.F
bit #S.PS.F.INUSE In use ?
beq .5
beq .7
bit #S.PS.F.HOLD Waiting for Another Task to Terminate?
beq .2
@ -26,7 +25,7 @@ S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
ldy #S.PS.CID
lda (pPs),y
jsr S.GetPSByIDA
bcc .5 yes, running....
bcc .7 yes, running....
lda (pPs) get S.PS.F
and #$FF^S.PS.F.HOLD unmark as HOLD
@ -35,7 +34,16 @@ S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
.2 jsr S.SelectProcess
lda (pPS)
bit #S.PS.F.SLEEP Is this PS sleeping?
bit #S.PS.F.INIT
beq .20
and #$FF^S.PS.F.INIT unmark as INIT
sta (pPS)
ldx #TSKMGR.INIT
bra .31
.20 bit #S.PS.F.SLEEP Is this PS sleeping?
beq .3 no, call TSKMGR.RUN
and #$FF^S.PS.F.SLEEP unmark as SLEEP
@ -53,10 +61,10 @@ S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
.21 jsr $FFFF
bra .4
.3 ldx #TSKMGR.RUN
jsr pCodeJmp Call RUN function
.4 bcc .5 RUN said CS=QUIT?
.31 jsr pCodeJmp Call INIT/RUN function
.4 bcc .7 INIT/RUN said CS=QUIT?
ldx #TSKMGR.QUIT yes, quit this process
jsr pCodeJmp Call QUIT function
@ -66,12 +74,14 @@ S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE
jsr S.FreeProcessA
bcs *
.5 lda pPs
.7 lda pPs
clc
adc #S.PS.SIZE
sta pPs
bcc .1
bcc .71
inc pPs+1
.71 dec TSKMGR.COUNT
bne .1
.8 clc