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 #MOUNT CIFS 192.168.1.5:/MSSHARE /MNT/MSSHARE
# End Network Section # End Network Section
# GUI Section # GUI Section
INSDRV DHGR.DRV #INSDRV DHGR.DRV
INSDRV MOUSE.DRV #INSDRV MOUSE.DRV
STARTPROC DESKTOP #STARTPROC DESKTOP
# End GUI Section # End GUI Section
ECHO *** End A2osX Startup file *** ECHO *** End A2osX Startup file ***
MAN MAN

View File

@ -432,6 +432,7 @@ S.PS.F.HOLD .EQ %01000000
S.PS.F.EVENT .EQ %00100000 S.PS.F.EVENT .EQ %00100000
S.PS.F.ENV .EQ %00010000 S.PS.F.ENV .EQ %00010000
S.PS.F.SLEEP .EQ %00001000 S.PS.F.SLEEP .EQ %00001000
S.PS.F.INIT .EQ %00000100
S.PS.ID .EQ 1 S.PS.ID .EQ 1
S.PS.PID .EQ 2 S.PS.PID .EQ 2
S.PS.hCS .EQ 3 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 S.GetDevByIDA cmp DevMgr.LastDevID
beq .1 beq .1
bcs .9 bcs S.GetDevDNF
.1 stz S.GetDevByIDA.T .1 stz S.GetDevByIDA.T
@ -36,8 +36,6 @@ S.GetDevByIDA cmp DevMgr.LastDevID
adc /DevMgr.Table adc /DevMgr.Table
rts CC rts CC
.9 lda #DEVMGR.ERRDNF
rts CS
S.GetDevByIDA.T .BS 1 S.GetDevByIDA.T .BS 1
*-------------------------------------- *--------------------------------------
* GetDevIDByNameA * GetDevIDByNameA
@ -87,15 +85,14 @@ S.GetDevByNameYA
inx inx
bcc .1 bcc .1
.9 lda #DEVMGR.ERRDNF S.GetDevDNF lda #DEVMGR.ERRDNF
rts rts
*-------------------------------------- *--------------------------------------
S.GetDevInfoA jsr S.GetDevByIDA S.GetDevInfoA jsr S.GetDevByIDA
bcs .9 bcs S.GetDevDNF
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
ldx #DEVMGR.GETINFO ldx #DEVMGR.GETINFO
jmp (ZPQuickPtr1) jmp (ZPQuickPtr1)
.9 rts
*-------------------------------------- *--------------------------------------
DevMgr.Free .BS 2 DevMgr.Free .BS 2
DevMgr.DevID .BS 1 DevMgr.DevID .BS 1

View File

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

View File

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