Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-10-15 17:39:21 +02:00
parent 743545cb8e
commit f086318868
10 changed files with 136 additions and 107 deletions

View File

@ -530,15 +530,28 @@ Load a file in AUX memory (Stock Objects)
Y,A = File Length
X = hMem of Loaded Object in AUX mem
# Exec
# ExecL
## C
`int exec(const char* argv[], short int flags);`
`int execl(const char* cmdline, short int flags);`
## ASM
`>PUSHB flags`
`>LDYA cmdline`
`>SYSCALL execl`
## RETURN VALUE
A = Child PSID
# ExecV
## C
`int execv(const char* argv[], short int flags);`
## ASM
`>PUSHB flags`
`>LDYA argv`
`>SYSCALL exec`
`>SYSCALL execv`
## RETURN VALUE
A = Child PSID
@ -559,7 +572,7 @@ A = Child PSID
# GetPSStat
**In:**
Y,A = Ptr to 24 bytes buffer
Y,A = Ptr to K.PS.MAX*2+1 bytes buffer
## RETURN VALUE
Buffer filled with PS stats

Binary file not shown.

Binary file not shown.

View File

@ -199,11 +199,12 @@ SYS.UnloadLib .EQ $9A
SYS.LoadDrv .EQ $9C
SYS.InsDrv .EQ $9E
*--------------------------------------
* .EQ $A0
* .EQ $A2
SYS.ExecL .EQ $A0
SYS.ExecV .EQ $A2
* .EQ $A4
* .EQ $A6
SYS.Exec .EQ $A8
* .EQ $A8
SYS.GetMemStat .EQ $AA
SYS.GetPSStatus .EQ $AC
SYS.GetPSStat .EQ $AE

View File

@ -107,7 +107,8 @@ Nod.Table.hFD .EQ $0C60 K.NOD.MAX
*--------------------------------------
PS.Table.hMem .EQ $0C80 K.PS.MAX
PS.Table.PID .EQ $0CA0 K.PS.MAX
PS.Table.Stat .EQ $0CC0 K.PS.MAX*2
PS.Table.Hits .EQ $0CC0 K.PS.MAX
PS.Table.Stats .EQ $0CE0 K.PS.MAX
*--------------------------------------
Evt.Table .EQ $0D60 K.EVT.MAX*S.EVT.SIZE=4*8=32b
*--------------------------------------

View File

@ -2,13 +2,11 @@ NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
*--------------------------------------
CORE.Run lda CORE.PSCount
sta CORE.PSIndex
CORE.Run stz CORE.PSIndex
ldx #0
beq CORE.Events SHOULD NEVER HAPPEN!!!
.1 ldx CORE.PSIndex
lda PS.Table.hMem-1,x
.1 lda PS.Table.hMem,x
beq .8
jsr K.GetMemPtr
@ -27,9 +25,7 @@ CORE.Run lda CORE.PSCount
eor #S.PS.F.HOLD unmark as HOLD
sta (pPs)
.2 jsr CORE.PSSelect Restore ZP & Ptrs
jsr CORE.PSExec INIT/RUN/QUIT/RESUME
.2 jsr CORE.PSExec INIT/RUN/QUIT/RESUME
dec IRQ.InKernel
bcc .61 Error ?
@ -84,7 +80,9 @@ CORE.Run lda CORE.PSCount
.7 jsr CORE.PSLeave Save ZP & Ptrs
.8 dec CORE.PSIndex
.8 inc CORE.PSIndex
ldx CORE.PSIndex
cpx #K.PS.MAX
bne .1
*--------------------------------------
CORE.Events jsr CORE.GetEvents
@ -215,17 +213,11 @@ CORE.GetEvents lda #Evt.Table
* CS: Not Dispatched
* CC: Event Cleared
*--------------------------------------
CORE.Dispatch lda CORE.EvtCount
beq .9
CORE.Dispatch stz CORE.PSIndex
lda CORE.PSCount
beq .9
sta CORE.PSIndex
ldx #0
.1 ldx CORE.PSIndex
lda PS.Table.hMem-1,x
.1 lda PS.Table.hMem,x
beq .5
jsr K.GetMemPtr
@ -278,7 +270,9 @@ CORE.Dispatch lda CORE.EvtCount
.4 jsr CORE.PSLeave
.5 dec CORE.PSIndex
.5 inc CORE.PSIndex
ldx CORE.PSIndex
cpx #K.PS.MAX
bne .1
.9 sec
@ -319,48 +313,48 @@ CORE.PSFree.A sta .1+1 Save PS ID
.1 lda #$ff Self Modified
ldx CORE.PSCount
ldx #0
.2 cmp PS.Table.PID-1,x
.2 cmp PS.Table.PID,x
beq .3
dex
inx
cpx #K.PS.MAX
bne .2
bra *
.3 stz PS.Table.PID-1,x
lda PS.TABLE.hMem-1,x
stz PS.TABLE.hMem-1,x
.3 stz PS.Table.PID,x
lda PS.TABLE.hMem,x
stz PS.TABLE.hMem,x
.4 jmp K.FreeMem
.8 lda (ZPPtr1),y
bne .4
.9 rts
*--------------------------------------
* X unmodofied
* X unmodified
*--------------------------------------
CORE.GetPSByID tay
bne .1
>LDYAI CORE.S.PS0 Select PS0
clc
rts
beq .1
.1 jsr CORE.GetPS
bcs .9
lda PS.TABLE.hMem-1,y
beq *
lda PS.TABLE.hMem,y
jmp K.GetMemPtr
>LDYAI CORE.S.PS0 Select PS0
clc
.9 rts
*--------------------------------------
CORE.GetPS ldy CORE.PSCount
beq .9
CORE.GetPS ldy #0
.1 cmp PS.Table.PID-1,y
.1 cmp PS.Table.PID,y
beq .8
dey
iny
cpy #K.PS.MAX
bne .1
.9 lda #K.E.NSP
sec
* sec
rts
.8 clc
@ -456,7 +450,9 @@ CORE.PSLeave ldy #S.PS.ZP+ZPBIN.SIZE-1
rts
*--------------------------------------
CORE.PSExec lda (pPS)
CORE.PSExec jsr CORE.PSSelect Restore ZP & Ptrs
lda (pPS)
bit #S.PS.F.SLEEP
bne CORE.PSResume
@ -545,7 +541,6 @@ CORE.InKernelStat .BS 1
CORE.EvtIndex .BS 1
CORE.EvtCount .BS 1
CORE.PSIndex .BS 1
CORE.PSCount .DA #0
CORE.LastPSID .DA #0
CORE.S.PS0 .BS S.PS.hStdErr+1
*--------------------------------------

View File

@ -153,7 +153,7 @@ Kernel.Init3 sta SETALTZP
>LDYAI STARTUP.SHELL
bra .8
.1 >PUSHWI STARTUP.SCRIPT
.1 >PUSHWI STARTUP.CMDLINE
>PUSHBI 2
>LDYAI MSG.Startup
>SYSCALL printf
@ -161,14 +161,9 @@ Kernel.Init3 sta SETALTZP
>PUSHBI 0 PS Flags
>LDYAI STARTUP.CMDLINE
.8 >SYSCALL ExpandStr
phx Save Expanded CMDLINE for discard
>SYSCALL Exec
.8 >SYSCALL ExecL
bcs .9
pla
jsr K.FreeMem ...discard...
>PUSHBI 1
>LDYAI MSG.Init3.OK
@ -509,9 +504,9 @@ MemMgrInit >LDYAI Mem.MHiMem
sta CLRWRITEAUX
ldx #K.Dev.MAX*4-1
ldx #K.DEV.MAX*2-1
.1 stz Dev.Table.hFD,x
.1 stz Dev.Table.hPath,x
dex
bpl .1
@ -521,6 +516,12 @@ MemMgrInit >LDYAI Mem.MHiMem
dex
bpl .2
ldx #K.PS.MAX*4-1
.3 stz PS.Table.hMem,x
dex
bpl .3
rts
*--------------------------------------
* Setup AuxLC $FFFE->Kernel IRQ Handler
@ -1060,10 +1061,7 @@ I.ENV.PATH .AZ "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
I.ENV.LIB .AZ "LIB=${A2OSX}LIB/"
I.ENV.DRV .AZ "DRV=${A2OSX}DRV/"
STARTUP.SHELL .AZ "${A2OSX}SBIN/SHELL"
.HS 00
STARTUP.CMDLINE .AZ "${A2OSX}SBIN/SHELL"
STARTUP.SCRIPT .AZ "${A2OSX}A2osX.STARTUP"
.HS 00
STARTUP.CMDLINE .AZ "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
*--------------------------------------
MLIOPEN00 .DA #3
.DA A2OSXCONF

View File

@ -160,11 +160,13 @@ K.IrqH.Switch inc IRQ.Tick
stz CORE.InKernelStat
ldx CORE.PSCount
ldx #K.PS.MAX-1
.1 stz PS.Table.Stat-1,x
.1 lda PS.Table.Hits-1,x
stz PS.Table.Hits-1,x
stz PS.Table.Stats-1,x
dex
bne .1
bpl .1
.2 lda IRQ.InKernel keep V flag set
bpl .3
@ -176,7 +178,7 @@ K.IrqH.Switch inc IRQ.Tick
rts
.3 ldx CORE.PSIndex
inc PS.Table.Stat-1,x
inc PS.Table.Hits-1,x
bit A2osX.F A2osX.F.PMODE .EQ %01000000
bvc .8

View File

@ -98,11 +98,11 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.LoadDrv
.DA K.InsDrv
.DA 0 $A0
.DA 0
.DA K.ExecL $A0
.DA K.ExecV
.DA 0
.DA 0
.DA 0
.DA K.Exec
.DA K.GetMemStat
.DA K.GetPSStatus
.DA K.GetPSStat

View File

@ -5,26 +5,60 @@ AUTO 4,1
PS.Flags .BS 1
PS.Args .BS 2
*/--------------------------------------
* # Exec
* # ExecL
* ## C
* `int exec(const char* argv[], short int flags);`
* `int execl(const char* cmdline, short int flags);`
* ## ASM
* `>PUSHB flags`
* `>LDYA argv`
* `>SYSCALL exec`
* `>LDYA cmdline`
* `>SYSCALL execl`
* ## RETURN VALUE
* A = Child PSID
*\--------------------------------------
K.Exec >STYA PS.Args
K.ExecL jsr ExpandStr
bcs .9
phx
jsr
plx
jsr FreeMem
.9 >RET 1 discard PS.Args
*/--------------------------------------
* # ExecV
* ## C
* `int execv(const char* argv[], short int flags);`
* ## ASM
* `>PUSHB flags`
* `>LDYA argv`
* `>SYSCALL execv`
* ## RETURN VALUE
* A = Child PSID
*\--------------------------------------
K.ExecV >STYA PS.Args
>PULLB PS.Flags
K.Exec.I jsr PS.CreateChild Child S.PS at ZPPtr3
bcs .9
sta .8+1
>LDYA PS.Args /path/cmd \0
>LDYA PS.Args
jsr PS.DupArgs
ldy #S.PS.hARGS
sta (ZPPtr3),y
pha
dey S.PS.ARGC
txa
sta (ZPPtr3),y
pla
>SYSCALL GetMemPtr
jsr PS.Load
bcc .8
@ -47,16 +81,11 @@ K.Exec.I jsr PS.CreateChild Child S.PS at ZPPtr3
*--------------------------------------
PS.CreateChild ldx #0
.1 cpx CORE.PSCount
beq .2
lda PS.Table.PID,x
beq .31 Found an empty slot
.1 lda PS.Table.PID,x
beq .2 Found an empty slot
inx
bra .1
.2 cpx #K.PS.MAX
bne .3
cpx #K.PS.MAX
bne .1
lda #K.E.OOH
sec
@ -65,11 +94,9 @@ PS.CreateChild ldx #0
.99 plx
rts
.3 inc CORE.PSCount
.31 phx save PS inex
.2 phx save PS index
.4 inc CORE.LastPSID Get a PSID not alredy running
.4 inc CORE.LastPSID Get a PSID not already running
beq .4 not = 0
lda CORE.LastPSID
jsr CORE.GetPSByID
@ -130,16 +157,7 @@ PS.CreateChild ldx #0
lda (pPs),y
sta (ZPPtr3),y
.8 >LDYA PS.Args
jsr PS.DupArgs
ldy #S.PS.hARGS
sta (ZPPtr3),y
dey S.PS.ARGC
txa
sta (ZPPtr3),y
ldy #S.PS.hStdIn
.8 ldy #S.PS.hStdIn
.81 lda (pPs),y
sta (ZPPtr3),y
@ -271,14 +289,14 @@ PS.Load jsr BIN.Load Y,A=filename full path
PS.DupArgs >STYA ZPPtr1
>STYA ZPPtr2
lda #1
sta .7+1
lda #0
sta .8+1 len = 1 for array ending 0
.1 lda (ZPPtr2)
beq .8
beq .7
ldy #0
@ -304,7 +322,8 @@ PS.DupArgs >STYA ZPPtr1
.7 ldy #$ff SELF MODIFIED
.8 lda #$ff SELF MODIFIED
bra PS.Dup.I
bra PS.DupStrV
*--------------------------------------
* PS.DupEnv
* In:
@ -318,7 +337,7 @@ PS.DupEnv jsr K.GetMemPtr
>LDYAI K.ENV.SIZE
PS.Dup.I jsr K.GetMem
PS.DupStrV jsr K.GetMem
bcs .9
>STYA ZPPtr2
@ -416,7 +435,7 @@ K.GetPSStatus jsr CORE.GetPSByID
*/--------------------------------------
* # GetPSStat
* **In:**
* Y,A = Ptr to 24 bytes buffer
* Y,A = Ptr to K.PS.MAX*2+1 bytes buffer
* ## RETURN VALUE
* Buffer filled with PS stats
*\--------------------------------------
@ -437,12 +456,12 @@ K.GetPSStat >STYA ZPPtr1
sta (ZPPtr1),y
iny
lda PS.Table.Stat,x
lda PS.Table.Stats,x
sta (ZPPtr1),y
iny
.2 inx
cpx CORE.PSCount
cpx #K.PS.MAX
bne .1
.9 tya