mirror of
https://github.com/A2osX/A2osX.git
synced 2024-06-12 04:29:31 +00:00
Kernel 0.9.1 : Code reorganization & move to CSTR (CORE: PS Context switching)
This commit is contained in:
parent
f624c10bd7
commit
24efef7d3b
Binary file not shown.
Binary file not shown.
|
@ -19,17 +19,20 @@ ZPKERNEL .EQ $0
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ZPMEMMGR .EQ $8
|
ZPMEMMGR .EQ $8
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
pCode .EQ $10
|
pDrv .EQ $10
|
||||||
pData .EQ $12
|
pDev .EQ $12
|
||||||
pLocal .EQ $14
|
pEvent .EQ $14
|
||||||
pStack .EQ $16
|
pPs .EQ $16
|
||||||
|
|
||||||
pDrv .EQ $18
|
|
||||||
pPs .EQ $1A
|
|
||||||
pDev .EQ $1C
|
|
||||||
pEvent .EQ $1E
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
* PS Context : 24 bytes
|
||||||
|
*--------------------------------------
|
||||||
|
pCode .EQ $18
|
||||||
|
pData .EQ $1A
|
||||||
|
pStack .EQ $1C
|
||||||
|
pLocal .EQ $1E
|
||||||
|
|
||||||
ZPBIN .EQ $20
|
ZPBIN .EQ $20
|
||||||
|
*--------------------------------------
|
||||||
ZPDRV .EQ $30
|
ZPDRV .EQ $30
|
||||||
ZPLIB .EQ $40 32 bytes for TCPIP
|
ZPLIB .EQ $40 32 bytes for TCPIP
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
@ -58,6 +61,8 @@ K.MLI.PATH .EQ $03B0 64+1 -> $03D0
|
||||||
* Main/Aux $400 -> $7FF : Console Screen
|
* Main/Aux $400 -> $7FF : Console Screen
|
||||||
* Main/Aux $800 -> $BFF : System Screen
|
* Main/Aux $800 -> $BFF : System Screen
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
PS.Table.PID .EQ $0C00 K.PS.MAX
|
||||||
|
PS.Table.hMem .EQ $0C00+K.PS.MAX
|
||||||
K.Buf256 .EQ $0E00 Main
|
K.Buf256 .EQ $0E00 Main
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
K.STACK .EQ $0F20 down to $0f00
|
K.STACK .EQ $0F20 down to $0f00
|
||||||
|
@ -73,8 +78,6 @@ EvtMgr.Table .EQ $1180 K.EVT.MAX*S.EVT.SIZE=16*8=128b
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b
|
DevMgr.Table .EQ $1200 K.DEV.MAX*S.DEV.SIZE=32*16=512b
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TskMgr.Table .EQ $1400 K.PS.MAX*S.PS.SIZE=32*32=1k
|
|
||||||
*--------------------------------------
|
|
||||||
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
|
* MemMgr : $1800->$1FFF MAIN/AUX (2 kBytes)
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MemMgr.Table .EQ $1800 Slot 0 is Reserved
|
MemMgr.Table .EQ $1800 Slot 0 is Reserved
|
||||||
|
@ -460,8 +463,10 @@ S.PS.PC .EQ 14
|
||||||
|
|
||||||
S.PS.ARGC .EQ 16
|
S.PS.ARGC .EQ 16
|
||||||
S.PS.hARGS .EQ 17
|
S.PS.hARGS .EQ 17
|
||||||
|
|
||||||
|
S.PS.Context .EQ 24 24 Bytes
|
||||||
*
|
*
|
||||||
S.PS .EQ 32
|
S.PS .EQ 48
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* LIB Function Indexes
|
* LIB Function Indexes
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -100,7 +100,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR.
|
||||||
## SBIN,Daemons/Commands:
|
## SBIN,Daemons/Commands:
|
||||||
|
|
||||||
| Name | Status | Comment | K.Ver |
|
| Name | Status | Comment | K.Ver |
|
||||||
| ---- | ------ | ------- | -----:|
|
| ---- | ------ | ------- | ------|
|
||||||
| INSDRV | Working | | 0.9 |
|
| INSDRV | Working | | 0.9 |
|
||||||
| GETTY | Working | | 0.9 |
|
| GETTY | Working | | 0.9 |
|
||||||
| LOGIN | In Progress | no auth using /etc/passd yet | 0.9 |
|
| LOGIN | In Progress | no auth using /etc/passd yet | 0.9 |
|
||||||
|
@ -126,6 +126,7 @@ OApple+1,OApple+2,OApple+3 to switch between screens : Kernel Log, text, DHGR.
|
||||||
| | | -P : "prompt message" |
|
| | | -P : "prompt message" |
|
||||||
| TIME | Working | |
|
| TIME | Working | |
|
||||||
| SET | Working | |
|
| SET | Working | |
|
||||||
|
| SLEEP | Working | |
|
||||||
| STARTPROC | Working | Used in A2osX.startup |
|
| STARTPROC | Working | Used in A2osX.startup |
|
||||||
|
|
||||||
## Shell variables:
|
## Shell variables:
|
||||||
|
|
|
@ -67,8 +67,7 @@ CS.INIT ldy #S.PS.ARGC
|
||||||
|
|
||||||
txa
|
txa
|
||||||
|
|
||||||
ldy #hBinName
|
>STA.G hBinName
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
lda (pPs)
|
lda (pPs)
|
||||||
ora #S.PS.F.EVENT Now accept events
|
ora #S.PS.F.EVENT Now accept events
|
||||||
|
@ -239,7 +238,6 @@ Wait.TimeOut sec
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CS.END
|
CS.END
|
||||||
PRINT.DEBUG.CHAR .AS "0123456789ABCDEF"
|
|
||||||
MSG.USAGE >CSTR "Usage : GETTY <DEV> <PROGRAM>\r\n"
|
MSG.USAGE >CSTR "Usage : GETTY <DEV> <PROGRAM>\r\n"
|
||||||
MSG.TELNET.OPT
|
MSG.TELNET.OPT
|
||||||
* .DA #IAC,#WILL,#TELOPT.BINARY
|
* .DA #IAC,#WILL,#TELOPT.BINARY
|
||||||
|
@ -254,7 +252,7 @@ MSG.TELNET.OPT
|
||||||
.DA #IAC,#SB,#TELOPT.TTYPE,#SB.SEND,#IAC,#SE
|
.DA #IAC,#SB,#TELOPT.TTYPE,#SB.SEND,#IAC,#SE
|
||||||
.DA #0
|
.DA #0
|
||||||
MSG.GREETINGS >CSTR "\r\nA2osX-GeTTY\r\n"
|
MSG.GREETINGS >CSTR "\r\nA2osX-GeTTY\r\n"
|
||||||
TERM >PSTR "TERM"
|
TERM >CSTR "TERM"
|
||||||
* \e[12h
|
* \e[12h
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
|
|
|
@ -6,117 +6,18 @@ AUTO 6
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
SYS.BASL0 .EQ $800
|
SYS.BASL0 .EQ $800
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.Run jsr CORE.PSRun
|
CORE.Run lda CORE.PSCount
|
||||||
stx A2osX.RANDOM16
|
sta CORE.Counter
|
||||||
jsr CORE.GetEvents
|
beq CORE.Events
|
||||||
txa
|
|
||||||
eor KBD
|
|
||||||
sta A2osX.RANDOM16+1
|
|
||||||
bcs .4 CS=no event
|
|
||||||
|
|
||||||
jsr CORE.DispatchEvents
|
|
||||||
bcc .4 CC=All Events Dispatched
|
|
||||||
|
|
||||||
jsr CORE.PSSelect0
|
|
||||||
|
|
||||||
lda #EvtMgr.Table
|
|
||||||
sta pEvent
|
|
||||||
|
|
||||||
.1 lda (pEvent)
|
.1 ldx CORE.Counter
|
||||||
beq .3
|
|
||||||
|
|
||||||
bmi .2 Ignore & Discard any timer event
|
lda PS.Table.PID-1,x
|
||||||
|
beq .7
|
||||||
|
|
||||||
jsr CORE.DumpEvent
|
lda PS.Table.hMem-1,x
|
||||||
|
jsr K.GetMemPtr.A
|
||||||
.2 jsr CORE.DestroyEvent
|
>STYA pPS
|
||||||
|
|
||||||
.3 lda pEvent
|
|
||||||
clc
|
|
||||||
adc #S.EVT
|
|
||||||
sta pEvent
|
|
||||||
lda EVTMGR.COUNT
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
.4 lda A2osX.ASCREEN
|
|
||||||
cmp #2 is SYS active?
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
ldx CORE.CPULOADI
|
|
||||||
lda CORE.CPULOADC,x
|
|
||||||
sta SYS.BASL0+38
|
|
||||||
dex
|
|
||||||
bpl .5
|
|
||||||
|
|
||||||
ldx #3
|
|
||||||
|
|
||||||
.5 stx CORE.CPULOADI
|
|
||||||
|
|
||||||
.6 bit OPENAPPLE
|
|
||||||
bpl CORE.Run
|
|
||||||
|
|
||||||
lda KBD
|
|
||||||
|
|
||||||
bpl CORE.Run
|
|
||||||
|
|
||||||
cmp #"1"
|
|
||||||
bcc CORE.Run
|
|
||||||
cmp #"5"
|
|
||||||
bcs CORE.Run
|
|
||||||
|
|
||||||
jsr CORE.ScreenSelect
|
|
||||||
bra CORE.Run
|
|
||||||
*--------------------------------------
|
|
||||||
CORE.DumpEvent ldy #S.EVT-1
|
|
||||||
|
|
||||||
.1 >PUSHB (pEvent),y
|
|
||||||
dey
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
>LDYAI .2
|
|
||||||
jmp K.PrintF.YA
|
|
||||||
|
|
||||||
.2 >CSTR "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n"
|
|
||||||
*--------------------------------------
|
|
||||||
CORE.ScreenSelect
|
|
||||||
sta KBDSTROBE
|
|
||||||
|
|
||||||
and #$0F
|
|
||||||
cmp A2osX.ASCREEN Same as active screen...nothing to do
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
tax
|
|
||||||
|
|
||||||
lda A2osX.SCRNDEVS-1,x
|
|
||||||
beq .8 No device claimed this screen
|
|
||||||
|
|
||||||
jsr K.GetDevByID.A x unmodified.....
|
|
||||||
bcs .8 ???
|
|
||||||
|
|
||||||
stx A2osX.ASCREEN
|
|
||||||
|
|
||||||
>STYA pDev
|
|
||||||
|
|
||||||
ldx #DEVMGR.CONTROL
|
|
||||||
jmp pDevJmp
|
|
||||||
|
|
||||||
.8 rts
|
|
||||||
*--------------------------------------
|
|
||||||
CORE.PSRun >LDYAI TskMgr.Table+S.PS skip PS 0
|
|
||||||
>STYA pPs
|
|
||||||
|
|
||||||
lda TskMgr.Count
|
|
||||||
sta TskMgr.Idx
|
|
||||||
|
|
||||||
.1 dec TskMgr.Idx skip PS 0
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
lda (pPs) get S.PS.F
|
|
||||||
|
|
||||||
* bit #S.PS.F.INUSE In use ?
|
|
||||||
* beq .7
|
|
||||||
|
|
||||||
bpl .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
|
||||||
|
@ -156,9 +57,9 @@ CORE.PSRun >LDYAI TskMgr.Table+S.PS skip PS 0
|
||||||
pha save RC
|
pha save RC
|
||||||
ldy #S.PS.PPID Notify Parent Process for exit code...
|
ldy #S.PS.PPID Notify Parent Process for exit code...
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
jsr CORE.GetPSByID.A will set ZPPtr1 if success
|
jsr CORE.GetPSByID.A
|
||||||
bcs .5 parent is dead.....skipping...
|
bcs .5 parent is dead.....skipping...
|
||||||
|
>STYA ZPPtr1
|
||||||
lda (ZPPtr1) Parent PS is HOLD?
|
lda (ZPPtr1) Parent PS is HOLD?
|
||||||
bit #S.PS.F.HOLD
|
bit #S.PS.F.HOLD
|
||||||
beq .5 no...
|
beq .5 no...
|
||||||
|
@ -180,123 +81,70 @@ CORE.PSRun >LDYAI TskMgr.Table+S.PS skip PS 0
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
jsr CORE.PSFree.A
|
jsr CORE.PSFree.A
|
||||||
|
|
||||||
.7 lda pPs
|
.7 dec CORE.Counter
|
||||||
clc
|
bne .1
|
||||||
adc #S.PS
|
|
||||||
sta pPs
|
|
||||||
bcc .1
|
|
||||||
inc pPs+1
|
|
||||||
bcs .1 Always
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.GetPSByID.A
|
CORE.Events stx A2osX.RANDOM16
|
||||||
pha
|
|
||||||
>LDYAI TskMgr.Table
|
|
||||||
>STYA ZPPtr1
|
|
||||||
|
|
||||||
pla
|
jsr CORE.GetEvents
|
||||||
beq .8
|
|
||||||
sta .20+1
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.1 inx
|
txa
|
||||||
lda ZPPtr1
|
eor KBD
|
||||||
clc
|
sta A2osX.RANDOM16+1
|
||||||
adc #S.PS
|
bcs .4 CS=no event
|
||||||
sta ZPPtr1
|
|
||||||
bcc .2
|
|
||||||
inc ZPPtr1+1
|
|
||||||
|
|
||||||
.2 lda (ZPPtr1)
|
jsr CORE.DispatchEvents
|
||||||
bpl .3
|
bcc .4 CC=All Events Dispatched
|
||||||
|
|
||||||
|
jsr CORE.PSSelect0
|
||||||
|
|
||||||
|
lda #EvtMgr.Table
|
||||||
|
sta pEvent
|
||||||
|
|
||||||
ldy #S.PS.PID
|
.1 lda (pEvent)
|
||||||
lda (ZPPtr1),y
|
beq .3
|
||||||
.20 cmp #$ff Self Modified
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
.3 cpx TskMgr.Count
|
bmi .2 Ignore & Discard any timer event
|
||||||
|
|
||||||
|
jsr CORE.DumpEvent
|
||||||
|
|
||||||
|
.2 jsr CORE.DestroyEvent
|
||||||
|
|
||||||
|
.3 lda pEvent
|
||||||
|
clc
|
||||||
|
adc #S.EVT
|
||||||
|
sta pEvent
|
||||||
|
lda EVTMGR.COUNT
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
.9 lda #TSKMGR.ERRNSP
|
.4 lda A2osX.ASCREEN
|
||||||
sec
|
cmp #2 is SYS active?
|
||||||
rts
|
bne .6
|
||||||
|
|
||||||
.8 >LDYA ZPPtr1
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CORE.PSSelect0 >LDYAI TskMgr.Table Select PS0
|
|
||||||
>STYA pPs
|
|
||||||
|
|
||||||
>LDYA K.STACK
|
|
||||||
>STYA pStack
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CORE.PSSelect ldy #S.PS.hCS
|
|
||||||
lda (pPs),y
|
|
||||||
|
|
||||||
jsr K.GetMemPtr.A
|
ldx CORE.CPULoadI
|
||||||
>STYA pCode
|
lda CORE.CPULoadC,x
|
||||||
|
sta SYS.BASL0+38
|
||||||
ldy #S.PS.hDS
|
dex
|
||||||
lda (pPs),y
|
bpl .5
|
||||||
beq .1
|
|
||||||
|
|
||||||
jsr K.GetMemPtr.A
|
|
||||||
>STYA pData
|
|
||||||
|
|
||||||
.1 ldy #S.PS.hSS
|
ldx #3
|
||||||
lda (pPs),y
|
|
||||||
jsr K.GetMemPtr.A
|
|
||||||
sta pStack+1
|
|
||||||
|
|
||||||
ldy #S.PS.SP
|
|
||||||
lda (pPs),y
|
|
||||||
sta pStack
|
|
||||||
|
|
||||||
clc
|
.5 stx CORE.CPULoadI
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
CORE.PSLeave rts
|
|
||||||
*--------------------------------------
|
|
||||||
* PS.Free.A
|
|
||||||
* In : A = PID to free
|
|
||||||
*--------------------------------------
|
|
||||||
CORE.PSFree.A jsr CORE.GetPSByID.A PS in ZPPtr1
|
|
||||||
|
|
||||||
ldy #S.PS.hARGS
|
.6 bit OPENAPPLE
|
||||||
jsr .2
|
bpl .8
|
||||||
|
|
||||||
lda (ZPPtr1) get S.PS.F
|
|
||||||
and #S.PS.F.ENV do we have to discard duplicated env & prefix ?
|
|
||||||
beq .1
|
|
||||||
|
|
||||||
ldy #S.PS.hENV
|
lda KBD
|
||||||
jsr .2
|
|
||||||
|
|
||||||
ldy #S.PS.hPREFIX
|
bpl .8
|
||||||
jsr .2
|
|
||||||
|
|
||||||
.1 ldy #S.PS.hSS
|
cmp #"1"
|
||||||
jsr .2
|
bcc .8
|
||||||
|
cmp #"5"
|
||||||
|
bcs .8
|
||||||
|
|
||||||
ldy #S.PS.hDS
|
jsr CORE.ScreenSelect
|
||||||
jsr .2
|
.8 jmp CORE.Run
|
||||||
|
|
||||||
ldy #S.PS.hCS
|
|
||||||
jsr .2
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
sta (ZPPtr1) Mark TSKSLOT as free
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
|
|
||||||
.2 lda (ZPPtr1),y
|
|
||||||
beq .9
|
|
||||||
jmp K.FreeMem.A
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
* CORE.GetEvents :
|
* CORE.GetEvents :
|
||||||
* IN :
|
* IN :
|
||||||
|
@ -369,21 +217,20 @@ CORE.GetEvents lda #EvtMgr.Table
|
||||||
* CC: Event Cleared
|
* CC: Event Cleared
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.DispatchEvents
|
CORE.DispatchEvents
|
||||||
>LDYAI TskMgr.Table+S.PS
|
lda CORE.PSCount
|
||||||
>STYA pPs
|
sta CORE.Counter
|
||||||
|
|
||||||
lda TskMgr.Count Number of actual processes...
|
|
||||||
sta TskMgr.Idx ...to give event list
|
|
||||||
|
|
||||||
.1 dec TskMgr.Idx skip PS 0
|
|
||||||
beq .9
|
beq .9
|
||||||
|
|
||||||
lda (pPs) get S.PS.F
|
.1 ldx CORE.Counter
|
||||||
bpl .4
|
|
||||||
|
|
||||||
* bit #S.PS.F.INUSE In use ?
|
lda PS.Table.PID-1,x
|
||||||
* beq .4
|
beq .4
|
||||||
|
|
||||||
|
lda PS.Table.hMem-1,x
|
||||||
|
jsr K.GetMemPtr.A
|
||||||
|
>STYA pPS
|
||||||
|
|
||||||
|
lda (pPs) get S.PS.F
|
||||||
bit #S.PS.F.INIT+S.PS.F.HOLD Init or Waiting for Another Task to Terminate?
|
bit #S.PS.F.INIT+S.PS.F.HOLD Init or Waiting for Another Task to Terminate?
|
||||||
bne .4
|
bne .4
|
||||||
|
|
||||||
|
@ -422,21 +269,105 @@ CORE.DispatchEvents
|
||||||
sta pEvent
|
sta pEvent
|
||||||
bra .2
|
bra .2
|
||||||
|
|
||||||
.4 lda pPs go to next PS in PS list
|
.4 dec CORE.Counter
|
||||||
clc
|
bne .1
|
||||||
adc #S.PS
|
|
||||||
sta pPs
|
.9 dec
|
||||||
bcc .1
|
rts
|
||||||
inc pPs+1
|
|
||||||
bne .1 always
|
|
||||||
|
|
||||||
.8 clc
|
.8 clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.TskMgrQuit clc
|
CORE.DumpEvent ldy #S.EVT-1
|
||||||
|
|
||||||
|
.1 >PUSHB (pEvent),y
|
||||||
|
dey
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
>LDYAI .2
|
||||||
|
jmp K.PrintF.YA
|
||||||
|
|
||||||
|
.2 >CSTR "!Evt:F=%b,Dev=$%h,LO=$%h,HI=$%h,W1=$%H,W2=$%H\n"
|
||||||
|
*--------------------------------------
|
||||||
|
CORE.ScreenSelect
|
||||||
|
sta KBDSTROBE
|
||||||
|
|
||||||
|
and #$0F
|
||||||
|
cmp A2osX.ASCREEN Same as active screen...nothing to do
|
||||||
|
beq .8
|
||||||
|
|
||||||
|
tax
|
||||||
|
|
||||||
|
lda A2osX.SCRNDEVS-1,x
|
||||||
|
beq .8 No device claimed this screen
|
||||||
|
|
||||||
|
jsr K.GetDevByID.A x unmodified.....
|
||||||
|
bcs .8 ???
|
||||||
|
|
||||||
|
stx A2osX.ASCREEN
|
||||||
|
|
||||||
|
>STYA pDev
|
||||||
|
|
||||||
|
ldx #DEVMGR.CONTROL
|
||||||
|
jmp pDevJmp
|
||||||
|
|
||||||
|
.8 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CORE.GetPSByID.A
|
||||||
|
ldx CORE.PSCount
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
.1 cmp PS.Table.PID-1,x
|
||||||
|
beq .2
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
.9 lda #TSKMGR.ERRNSP
|
||||||
|
sec
|
||||||
|
rts
|
||||||
|
|
||||||
|
.2 lda PS.TABLE.hMem-1,x
|
||||||
|
jmp K.GetMemPtr.A
|
||||||
|
*--------------------------------------
|
||||||
|
* PS.Free.A
|
||||||
|
* In : A = PID to free
|
||||||
|
*--------------------------------------
|
||||||
|
CORE.PSFree.A jsr CORE.GetPSByID.A PS in ZPPtr1
|
||||||
|
>STYA ZPPtr1
|
||||||
|
stx .1+1 Save Offset in PS.Table
|
||||||
|
|
||||||
|
ldy #S.PS.hSS
|
||||||
|
jsr .8
|
||||||
|
|
||||||
|
ldy #S.PS.hDS
|
||||||
|
jsr .8
|
||||||
|
|
||||||
|
ldy #S.PS.hCS
|
||||||
|
jsr .8
|
||||||
|
|
||||||
|
ldy #S.PS.hARGS
|
||||||
|
jsr .8
|
||||||
|
|
||||||
|
lda (ZPPtr1) get S.PS.F
|
||||||
|
and #S.PS.F.ENV do we have to discard duplicated env & prefix ?
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
ldy #S.PS.hENV
|
||||||
|
jsr .8
|
||||||
|
|
||||||
|
ldy #S.PS.hPREFIX
|
||||||
|
jsr .8
|
||||||
|
|
||||||
|
.1 ldx #$ff Self Modified
|
||||||
|
stz PS.Table.PID-1,x
|
||||||
|
lda PS.TABLE.hMem-1,x
|
||||||
|
.7 jmp K.FreeMem.A
|
||||||
|
|
||||||
|
.8 lda (ZPPtr1),y
|
||||||
|
bne .9
|
||||||
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CORE.Quit clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.DestroyEvent
|
CORE.DestroyEvent
|
||||||
|
@ -463,6 +394,38 @@ CORE.DestroyEvent
|
||||||
sta (pEvent)
|
sta (pEvent)
|
||||||
dec EvtMgr.Count
|
dec EvtMgr.Count
|
||||||
.9 rts
|
.9 rts
|
||||||
|
*--------------------------------------
|
||||||
|
CORE.PSSelect0 >LDYAI CORE.S.PS0 Select PS0
|
||||||
|
>STYA pPs
|
||||||
|
|
||||||
|
>LDYA K.STACK
|
||||||
|
>STYA pStack
|
||||||
|
rts
|
||||||
|
*--------------------------------------
|
||||||
|
CORE.PSSelect ldy #S.PS.hCS
|
||||||
|
lda (pPs),y
|
||||||
|
|
||||||
|
jsr K.GetMemPtr.A
|
||||||
|
>STYA pCode
|
||||||
|
|
||||||
|
ldy #S.PS.hDS
|
||||||
|
lda (pPs),y
|
||||||
|
beq .1
|
||||||
|
|
||||||
|
jsr K.GetMemPtr.A
|
||||||
|
>STYA pData
|
||||||
|
|
||||||
|
.1 ldy #S.PS.hSS
|
||||||
|
lda (pPs),y
|
||||||
|
jsr K.GetMemPtr.A
|
||||||
|
sta pStack+1
|
||||||
|
|
||||||
|
ldy #S.PS.SP
|
||||||
|
lda (pPs),y
|
||||||
|
sta pStack
|
||||||
|
|
||||||
|
clc
|
||||||
|
rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # Sleep
|
* # Sleep
|
||||||
* Make current process suspend until next RUN
|
* Make current process suspend until next RUN
|
||||||
|
@ -481,41 +444,48 @@ K.Sleep pla get PC LO
|
||||||
sbc pCode+1
|
sbc pCode+1
|
||||||
iny
|
iny
|
||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
|
|
||||||
lda pStack Save DATA Stack Pointer
|
|
||||||
ldy #S.PS.SP
|
|
||||||
sta (pPs),y
|
|
||||||
|
|
||||||
lda (pPs)
|
lda (pPs)
|
||||||
ora #S.PS.F.SLEEP
|
ora #S.PS.F.SLEEP
|
||||||
sta (pPs)
|
sta (pPs)
|
||||||
|
|
||||||
|
CORE.PSLeave ldy #S.PS.Context+23
|
||||||
|
ldx #23
|
||||||
|
|
||||||
|
.1 lda pPs,x
|
||||||
|
sta (pPs),y
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
clc No error,
|
clc No error,
|
||||||
rts back to Kernel
|
rts back to Kernel
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.PSWakeUp and #$FF^S.PS.F.SLEEP unmark as SLEEP
|
CORE.PSWakeUp lda (pPs)
|
||||||
|
and #$FF^S.PS.F.SLEEP unmark as SLEEP
|
||||||
sta (pPS)
|
sta (pPS)
|
||||||
|
|
||||||
ldy #S.PS.SP
|
|
||||||
lda (pPs),y
|
|
||||||
sta pStack
|
|
||||||
|
|
||||||
ldy #S.PS.PC
|
ldy #S.PS.PC
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
sec Advance PC by one as it was saved by a JSR
|
sec Advance PC by one as it was saved by a JSR
|
||||||
adc pCode setup by PS.Select
|
adc pCode setup by PS.Select
|
||||||
sta .1+1
|
sta .8+1
|
||||||
iny
|
iny
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
adc pCode+1
|
adc pCode+1
|
||||||
sta .1+2
|
sta .8+2
|
||||||
|
|
||||||
|
ldy #S.PS.Context+23
|
||||||
|
ldx #23
|
||||||
|
|
||||||
.1 jmp $FFFF
|
.1 lda (pPs),y
|
||||||
|
sta pPs,x
|
||||||
|
dey
|
||||||
|
dex
|
||||||
|
bpl .1
|
||||||
|
|
||||||
|
.8 jmp $FFFF
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
CORE.CPULOADI .BS 1
|
|
||||||
CORE.CPULOADC .AS -"/-\|"
|
|
||||||
*--------------------------------------
|
|
||||||
TskMgr.Idx .BS 1
|
|
||||||
TSKMGR.EVENTCNT .BS 1
|
TSKMGR.EVENTCNT .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
DevMgr.Stat .DA DevMgr.NUL.Code
|
DevMgr.Stat .DA DevMgr.NUL.Code
|
||||||
|
@ -528,8 +498,12 @@ EvtMgr.10TH.CNT .BS 1
|
||||||
EvtMgr.HZ.CNT .BS 1
|
EvtMgr.HZ.CNT .BS 1
|
||||||
EvtMgr.Count .BS 1
|
EvtMgr.Count .BS 1
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TskMgr.Count .DA #1 One Slot Busy (Kernel PS=0)
|
CORE.CPULoadI .BS 1
|
||||||
TskMgr.LastID .DA #0
|
CORE.CPULoadC .AS -"/-\|"
|
||||||
|
CORE.Counter .BS 1
|
||||||
|
CORE.PSCount .DA #0
|
||||||
|
CORE.LastPSID .DA #0
|
||||||
|
CORE.S.PS0 .BS S.PS
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MAN
|
MAN
|
||||||
SAVE /A2OSX.SRC/SYS/KERNEL.S.CORE
|
SAVE /A2OSX.SRC/SYS/KERNEL.S.CORE
|
||||||
|
|
|
@ -391,26 +391,29 @@ ENV.SysVarsJmp .DA ENV.SysVarsArgs
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ENV.SysVarsArgs lda #1
|
ENV.SysVarsArgs lda #1
|
||||||
jsr K.GetArg.A
|
jsr K.GetArg.A
|
||||||
bcs ENV.SysVarsExit2
|
bcs .8
|
||||||
|
|
||||||
>STYA ZPPtr3
|
>STYA ZPPtr3
|
||||||
|
|
||||||
.1 lda (ZPPtr3)
|
.1 lda (ZPPtr3)
|
||||||
beq ENV.SysVarsExit2
|
beq .8
|
||||||
jsr ENV.AppendPtr3ToBuf
|
jsr ENV.AppendPtr3ToBuf
|
||||||
|
|
||||||
.2 jsr ENV.NextEnvPtr3
|
.2 jsr ENV.NextEnvPtr3
|
||||||
lda (ZPPtr3)
|
lda (ZPPtr3)
|
||||||
beq ENV.SysVarsExit2
|
beq .8
|
||||||
|
|
||||||
inx
|
inx
|
||||||
beq ENV.SysVarsExit2 make sure not overlapping buf 256
|
beq .8 make sure not overlapping buf 256
|
||||||
lda #' '
|
lda #' '
|
||||||
sta K.Buf256,x
|
sta K.Buf256,x
|
||||||
stx K.ExpandStr.BufLen
|
stx K.ExpandStr.BufLen
|
||||||
|
|
||||||
jsr ENV.AppendPtr3ToBuf
|
jsr ENV.AppendPtr3ToBuf
|
||||||
bra .2
|
bra .2
|
||||||
|
|
||||||
|
.8 clc
|
||||||
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ENV.AppendPtr3ToBuf
|
ENV.AppendPtr3ToBuf
|
||||||
ldx K.ExpandStr.BufLen
|
ldx K.ExpandStr.BufLen
|
||||||
|
@ -426,9 +429,8 @@ ENV.AppendPtr3ToBuf
|
||||||
stx K.ExpandStr.BufLen
|
stx K.ExpandStr.BufLen
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
ENV.SysVarsArgC jsr K.GetArgC Trash Ptr1
|
ENV.SysVarsArgC ldy #S.PS.ARGC
|
||||||
bra ENV.SysVarsA
|
.HS 2C
|
||||||
|
|
||||||
ENV.SysVarsRC ldy #S.PS.RC
|
ENV.SysVarsRC ldy #S.PS.RC
|
||||||
.HS 2C
|
.HS 2C
|
||||||
ENV.SysVarsPPID ldy #S.PS.PPID
|
ENV.SysVarsPPID ldy #S.PS.PPID
|
||||||
|
@ -438,37 +440,52 @@ ENV.SysVarsPID ldy #S.PS.PID
|
||||||
ENV.SysVarsCPID ldy #S.PS.CPID
|
ENV.SysVarsCPID ldy #S.PS.CPID
|
||||||
lda (pPS),y
|
lda (pPS),y
|
||||||
|
|
||||||
ENV.SysVarsA sta HEXBUF
|
stz .2+1
|
||||||
stz HEXBUF+1
|
stz .3+1
|
||||||
stz HEXBUF+2
|
|
||||||
stz HEXBUF+3
|
|
||||||
jsr HEX2DEC
|
|
||||||
|
|
||||||
ldy #6 Start at 0000000xxx
|
ldx #8
|
||||||
|
sed
|
||||||
|
|
||||||
.1 iny
|
.1 asl
|
||||||
lda ASCBUF,y
|
pha
|
||||||
cmp #'0'
|
.2 lda #$ff Self Modified
|
||||||
bne .2
|
adc .2+1
|
||||||
|
sta .2+1
|
||||||
|
|
||||||
cpy #9 Print always last char
|
.3 lda #$ff Self Modified
|
||||||
|
adc .3+1
|
||||||
|
sta .3+1
|
||||||
|
|
||||||
|
pla
|
||||||
|
dex
|
||||||
bne .1
|
bne .1
|
||||||
|
|
||||||
.2 ldx K.Buf256
|
cld
|
||||||
|
|
||||||
.3 inx
|
ldx K.ExpandStr.BufLen
|
||||||
beq ENV.SysVarsExit2
|
lda .3+1
|
||||||
|
beq .4
|
||||||
sta K.Buf256,x
|
sta K.Buf256,x
|
||||||
iny
|
inx
|
||||||
cpy #10
|
|
||||||
beq ENV.SysVarsExit
|
|
||||||
|
|
||||||
lda ASCBUF,y
|
.4 lda .2+1
|
||||||
bra .3
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
beq .5
|
||||||
|
|
||||||
|
ora #$30
|
||||||
|
sta K.Buf256,x
|
||||||
|
inx
|
||||||
|
|
||||||
|
.5 lda .2+1
|
||||||
|
and #$0f
|
||||||
|
ora #$30
|
||||||
|
sta K.Buf256,x
|
||||||
|
inx
|
||||||
|
|
||||||
ENV.SysVarsExit stx K.Buf256
|
stx K.ExpandStr.BufLen
|
||||||
ENV.SysVarsExit2
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
|
|
|
@ -406,7 +406,7 @@ PS0Init ldx #S.DEV*2 NUL,SYS
|
||||||
lda #2
|
lda #2
|
||||||
sta DevMgr.Count
|
sta DevMgr.Count
|
||||||
|
|
||||||
>LDYAI TskMgr.Table Select Process 0 (Kernel)
|
>LDYAI CORE.S.PS0 Select Process 0 (Kernel)
|
||||||
>STYA pPs
|
>STYA pPs
|
||||||
|
|
||||||
ldy #S.PS-1
|
ldy #S.PS-1
|
||||||
|
@ -744,28 +744,9 @@ FltMgrInit >LDYAI MSG.FLT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
TskMgrInit >LDYAI MSG.TSK
|
TskMgrInit >LDYAI MSG.TSK
|
||||||
>SYSCALL PrintF.YA
|
>SYSCALL PrintF.YA
|
||||||
>LDYAI TskMgr.Table+S.PS Clear whole process table except PS0
|
|
||||||
>STYA .2+1
|
|
||||||
|
|
||||||
ldx #K.PS.MAX-1
|
|
||||||
|
|
||||||
.1 lda #0
|
|
||||||
ldy #S.PS-1
|
|
||||||
|
|
||||||
.2 sta $ffff,y Self Modified
|
|
||||||
dey
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
lda .2+1
|
|
||||||
clc
|
|
||||||
adc #S.PS
|
|
||||||
sta .2+1
|
|
||||||
bcc .3
|
|
||||||
|
|
||||||
inc .2+2
|
|
||||||
.3 dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
|
jsr CORE.PSSelect0
|
||||||
|
|
||||||
>LDYAI K.ENV.SIZE get a buffer for ENV
|
>LDYAI K.ENV.SIZE get a buffer for ENV
|
||||||
>SYSCALL GetMem0.YA make sure blank!!
|
>SYSCALL GetMem0.YA make sure blank!!
|
||||||
bcs .9
|
bcs .9
|
||||||
|
|
|
@ -351,8 +351,7 @@ K.FreeMem.A phy
|
||||||
bit RRAMWRAMBNK2
|
bit RRAMWRAMBNK2
|
||||||
bit RRAMWRAMBNK2
|
bit RRAMWRAMBNK2
|
||||||
|
|
||||||
>LDYAI TskMgr.Table Select PS0 for proper I/O devices
|
jsr CORE.PSSelect0 Select PS0 for proper I/O devices
|
||||||
>STYA pPs
|
|
||||||
|
|
||||||
jsr DevMgr.SYS.Control
|
jsr DevMgr.SYS.Control
|
||||||
|
|
||||||
|
|
|
@ -57,26 +57,16 @@ K.CreateProcess.CmdLine .BS 2
|
||||||
* out :
|
* out :
|
||||||
* A = PSID
|
* A = PSID
|
||||||
* we cannot use ZPPtrs1 & 2
|
* we cannot use ZPPtrs1 & 2
|
||||||
* because of calling K.NewStrY.A & S.DupEnv.A
|
* because of calling K.NewStr.YA & S.DupEnv.A
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PS.CreateChild >LDYAI TskMgr.Table+S.PS
|
PS.CreateChild ldx #0
|
||||||
>STYA ZPPtr3
|
|
||||||
|
|
||||||
ldx #0
|
.1 cpx CORE.PSCount
|
||||||
|
|
||||||
.1 inx
|
|
||||||
cpx TskMgr.Count
|
|
||||||
beq .2
|
beq .2
|
||||||
|
|
||||||
lda (ZPPtr3) Found an empty slot
|
lda PS.Table.PID,x
|
||||||
bpl .3
|
beq .3 Found an empty slot
|
||||||
lda ZPPtr3
|
inx
|
||||||
clc
|
|
||||||
adc #S.PS
|
|
||||||
sta ZPPtr3
|
|
||||||
bcc .1
|
|
||||||
inc ZPPtr3+1
|
|
||||||
|
|
||||||
bra .1
|
bra .1
|
||||||
|
|
||||||
.2 cpx #K.PS.MAX
|
.2 cpx #K.PS.MAX
|
||||||
|
@ -86,31 +76,39 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS
|
||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.3 inc TskMgr.Count
|
.3 inc CORE.PSCount
|
||||||
|
|
||||||
.4 inc TSKMGR.LASTID Get a PSID not alredy running
|
phx save PS inex
|
||||||
|
|
||||||
|
.4 inc CORE.LastPSID Get a PSID not alredy running
|
||||||
beq .4 not = 0
|
beq .4 not = 0
|
||||||
lda TSKMGR.LASTID
|
lda CORE.LastPSID
|
||||||
jsr CORE.GetPSByID.A
|
jsr CORE.GetPSByID.A
|
||||||
bcc .4
|
bcc .4
|
||||||
|
|
||||||
|
plx
|
||||||
|
lda CORE.LastPSID
|
||||||
|
sta PS.Table.PID,x
|
||||||
|
phx
|
||||||
|
|
||||||
|
>LDYAI S.PS
|
||||||
|
jsr K.GetMem0.YA Blank Everything in this S.PS
|
||||||
|
bcs .99
|
||||||
|
|
||||||
|
>STYA ZPPtr3
|
||||||
|
txa
|
||||||
|
plx
|
||||||
|
sta PS.Table.hMem,x
|
||||||
|
|
||||||
ldy #S.PS.PID
|
ldy #S.PS.PID
|
||||||
lda TSKMGR.LASTID
|
lda CORE.LastPSID
|
||||||
sta (ZPPtr3),y
|
sta (ZPPtr3),y
|
||||||
|
|
||||||
lda #0
|
|
||||||
ldy #S.PS.hCS
|
|
||||||
|
|
||||||
.5 sta (ZPPtr3),y Blank Everything in this S.PS
|
|
||||||
iny
|
|
||||||
cpy #S.PS
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
lda #S.PS.F.ENV
|
lda #S.PS.F.ENV
|
||||||
bit K.CreateProcess.Flags need to create ENV & Prefix ?
|
bit K.CreateProcess.Flags need to create ENV & Prefix ?
|
||||||
beq .6 no...
|
beq .6 no...
|
||||||
|
|
||||||
sta (ZPPtr3) Mark this PS with ENV flag
|
sta (ZPPtr3) Mark this PS with ENV flag
|
||||||
|
|
||||||
ldy #S.PS.hPREFIX copy hPREFIX...
|
ldy #S.PS.hPREFIX copy hPREFIX...
|
||||||
lda (pPs),y
|
lda (pPs),y
|
||||||
|
@ -165,10 +163,13 @@ PS.CreateChild >LDYAI TskMgr.Table+S.PS
|
||||||
sta (ZPPtr3) Make this PS Init....
|
sta (ZPPtr3) Make this PS Init....
|
||||||
|
|
||||||
ldy #S.PS.CPID
|
ldy #S.PS.CPID
|
||||||
lda TSKMGR.LASTID
|
lda CORE.LastPSID
|
||||||
sta (pPs),y
|
sta (pPs),y
|
||||||
|
|
||||||
clc Exit with A=PSID
|
clc Exit with A=PSID
|
||||||
|
rts
|
||||||
|
|
||||||
|
.99 plx
|
||||||
.9 rts
|
.9 rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
PS.CmdLine2Args >STYA ZPPtr1
|
PS.CmdLine2Args >STYA ZPPtr1
|
||||||
|
|
Loading…
Reference in New Issue
Block a user