Kernel 0.9.2

This commit is contained in:
Rémy GIBERT 2018-09-20 17:33:05 +02:00
parent 1210f3d810
commit e040a2a11e
8 changed files with 136 additions and 75 deletions

View File

@ -505,7 +505,7 @@ Load a file in AUX memory (Stock Objects)
Y,A = File Length Y,A = File Length
X = hMem of Loaded Object in AUX mem X = hMem of Loaded Object in AUX mem
# ExecPSNewEnv. # ExecPSNewEnv
# ExecPS (Blocking Parent PID) # ExecPS (Blocking Parent PID)
@ -549,29 +549,52 @@ Return information about a file
**Out:** **Out:**
# MKDir # MKDir
create a directory
## C
`int mkdir(const char *pathname, int mode);`
## ASM
**In:** **In:**
Y,A = DIR name `>PUSHW mode`
`>LDYA pathname`
`>SYSCALL mkdir`
**Out:** **Out:**
CC : success CC : success
CS : error CS : error
A = EC A = EC
# MkNod # MkNod
int mknod(const char *pathname, mode_t mode, dev_t dev); return a hFile for a given file descriptor.
return a hFile for a given Device Name (CDEV, BDEV, DSOCKS, SSOCK, PIPE)
## C
`hFILE mknod(const char *pathname, int mode, hFD fd);`
## ASM
**In:** **In:**
Y,A=DevName `>PUSHB fd`
`>PUSHW mode`
`>LDYA pathname`
`>SYSCALL mknod`
**Out:** **Out:**
CC = OK, CS = ERROR CC = OK, CS = ERROR
A = hFILE A = hFILE
# MKFIFO # MKFIFO
int mkfifo(const char *pathname, mode_t mode);
return a hFILE to a new FIFO return a hFILE to a new FIFO
## C
`hFILE mkfifo(const char *pathname, int mode);`
## ASM
**In:** **In:**
`>PUSHW mode`
`>LDYA pathname`
`>SYSCALL mkfifo`
**Out:** **Out:**
CC = OK, CS = ERROR CC = OK, CS = ERROR
A = hFILE A = hFILE
# FPutC # FPutC
Print A (char) to hFILE Print A (char) to hFILE

View File

@ -60,7 +60,7 @@ Create a new socket
## ASM ## ASM
**In:** **In:**
`>LDYA template` `>PUSHW template`
`>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New` `>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.New`
**Out:** **Out:**
CC: A = hSOCKET CC: A = hSOCKET
@ -95,11 +95,11 @@ CS: A = EC
# SKT.MkNod # SKT.MkNod
## C ## C
`hFD skt.mknod(hSOCKET *s);` `hFD skt.mknod(hSOCKET s);`
## ASM ## ASM
**In:** **In:**
`>LDYA s` `lda s`
`>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.MkNod` `>LIBCALL hLIBTCPIP,LIBTCPIP.SKT.MkNod`
**Out:** **Out:**
CC: A = hFD CC: A = hFD

Binary file not shown.

Binary file not shown.

View File

@ -7,6 +7,7 @@ K.ENV.SIZE .EQ 256
K.FLT.MAX .EQ 4 K.FLT.MAX .EQ 4
K.EVT.MAX .EQ 4 K.EVT.MAX .EQ 4
K.DEV.MAX .EQ 32 K.DEV.MAX .EQ 32
K.NOD.MAX .EQ 64
K.PS.MAX .EQ 32 K.PS.MAX .EQ 32
*-------------------------------------- *--------------------------------------
ZPDRV .EQ $20 32 bytes ZPDRV .EQ $20 32 bytes
@ -431,13 +432,13 @@ S.FD.SSOCK.STATUS .EQ 7
S.FD.SSOCK .EQ 8 S.FD.SSOCK .EQ 8
*-------------------------------------- *--------------------------------------
S.FD.FIFO.S .EQ 2 S.FD.FIFO.S .EQ 2
S.FD.FIFO.S.Opened .EQ 1 S.FD.FIFO.S.ROpened .EQ 1
S.FD.FIFO.S.Closed .EQ 2 S.FD.FIFO.S.WOpened .EQ 2
S.FD.FIFO.hMem .EQ 3 S.FD.FIFO.hMem .EQ 3
S.FD.FIFO.Tail .EQ 4 S.FD.FIFO.Tail .EQ 4
S.FD.FIFO.Head .EQ 5 S.FD.FIFO.Head .EQ 6
* *
S.FD.FIFO .EQ 6 S.FD.FIFO .EQ 8
*-------------------------------------- *--------------------------------------
* PS STRUCT * PS STRUCT
*-------------------------------------- *--------------------------------------
@ -548,12 +549,12 @@ S.STAT.MODE.RU .EQ $0100
S.STAT.MODE.REG .EQ $0000 S.STAT.MODE.REG .EQ $0000
S.STAT.MODE.DIR .EQ $1000 S.STAT.MODE.DIR .EQ $1000
*S.STAT.MODE.CDEV .EQ $2000 S.STAT.MODE.CDEV .EQ $2000
*S.STAT.MODE.BDEV .EQ $3000 S.STAT.MODE.BDEV .EQ $3000
*S.STAT.MODE.LNK .EQ $4000 *S.STAT.MODE.LNK .EQ $4000
*S.STAT.MODE.DSOCK .EQ $5000 S.STAT.MODE.DSOCK .EQ $5000
*S.STAT.MODE.SSOCK .EQ $6000 S.STAT.MODE.SSOCK .EQ $6000
*S.STAT.MODE.FIFO .EQ $7000 S.STAT.MODE.FIFO .EQ $7000
S.STAT.DEV .EQ 2 WORD S.STAT.DEV .EQ 2 WORD
S.STAT.UID .EQ 4 WORD S.STAT.UID .EQ 4 WORD

View File

@ -104,6 +104,11 @@ Dev.Table.F .EQ $0C20 K.Dev.MAX
Dev.Table.pFDLO .EQ $0C40 K.Dev.MAX Dev.Table.pFDLO .EQ $0C40 K.Dev.MAX
Dev.Table.pFDHI .EQ $0C60 K.Dev.MAX Dev.Table.pFDHI .EQ $0C60 K.Dev.MAX
*-------------------------------------- *--------------------------------------
* /dev/
*--------------------------------------
Nod.Table.hFD .EQ $0C80 K.NOD.MAX
Nod.Table.hPath .EQ $0CC0 K.NOD.MAX
*--------------------------------------
PS.Table.hMem .EQ $0D00 K.PS.MAX PS.Table.hMem .EQ $0D00 K.PS.MAX
PS.Table.PID .EQ $0D20 K.PS.MAX PS.Table.PID .EQ $0D20 K.PS.MAX
PS.Table.Stat .EQ $0D40 K.PS.MAX PS.Table.Stat .EQ $0D40 K.PS.MAX

View File

@ -531,7 +531,7 @@ DevMgr.Stat .DA DevMgr.FreeMem
DevMgr.Free .DA DevMgr.FreeMem DevMgr.Free .DA DevMgr.FreeMem
.DA DevMgr.HiMem .DA DevMgr.HiMem
DevMgr.DevCnt .DA #0 DevMgr.DevCnt .DA #0
.BS 1 DevMgr.NodCnt .DA #0
*-------------------------------------- *--------------------------------------
CORE.VBLState .BS 1 CORE.VBLState .BS 1
CORE.IRQMode .BS 1 CORE.IRQMode .BS 1

View File

@ -123,15 +123,22 @@ K.Stat.DST .DA #S.STAT.P.TYPE
.DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1 .DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1
*/------------------------------------- */-------------------------------------
* # MKDir * # MKDir
* create a directory
* ## C
* `int mkdir(const char *pathname, int mode);`
* ## ASM
* **In:** * **In:**
* Y,A = DIR name * `>PUSHW mode`
* `>LDYA pathname`
* `>SYSCALL mkdir`
* **Out:** * **Out:**
* CC : success * CC : success
* CS : error * CS : error
* A = EC * A = EC
*\------------------------------------- *\-------------------------------------
K.MKDir jsr PFT.CheckPathYA K.MKDir jsr PFT.CheckPathYA
jsr STDIO.SetMLIPathYA jsr STDIO.SetMLIPathYA
lda #S.FI.A.FULL lda #S.FI.A.FULL
sta K.MLI.PARAMS+S.FI.A sta K.MLI.PARAMS+S.FI.A
lda #S.FI.T.DIR lda #S.FI.T.DIR
@ -151,66 +158,91 @@ K.MKDir jsr PFT.CheckPathYA
rts rts
*/-------------------------------------- */--------------------------------------
* # MkNod * # MkNod
* int mknod(const char *pathname, mode_t mode, dev_t dev); * return a hFile for a given file descriptor.
* return a hFile for a given Device Name * (CDEV, BDEV, DSOCKS, SSOCK, PIPE)
* ## C
* `hFILE mknod(const char *pathname, int mode, hFD fd);`
* ## ASM
* **In:** * **In:**
* Y,A=DevName * `>PUSHB fd`
* `>PUSHW mode`
* `>LDYA pathname`
* `>SYSCALL mknod`
* **Out:** * **Out:**
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* A = hFILE * A = hFILE
*\-------------------------------------- *\--------------------------------------
K.MkNod jsr K.GetDevByName Y,A=NAME K.MkNod >STYA ZPPtr1 pathname
bcs .9
>STYA .1+1 pFD
stx .2+1 devID
ldy #S.FD.T >PULLW K.S.STAT+S.STAT.MODE
lda (pFD),y >PULLB K.S.STAT+S.STAT.DEV
cmp #S.FD.T.CDEV
bne .99
txa Pass DEV.ID to OPEN
ldx #IOCTL.OPEN
.1 jsr $FFFF SELF MODIFIED
bcs .9
>LDYAI S.FD.DEV jsr K.GetMemPtr
jsr K.GetMem0 bcs .99
bcs .9
>STYA ZPPtr3 Ptr3=S.FD
ldy #S.FD.T >STYA pFD
lda #S.FD.T.CDEV
sta (ZPPtr3),y
ldy #S.FD.DEV.DEVID ldx DevMgr.NodCnt
cpx #K.NOD.MAX
beq .98
.2 lda #$ff Self Modified .1 dex
sta (ZPPtr3),y bpl .
lda
ldy #S.FD.DEV.DRVPTR lda (pFD) #S.FD.T
lda .1+1
sta (ZPPtr3),y tax
jmp (.8,x)
iny
lda .1+2 .8 .DA STDIO.IOERR REG
sta (ZPPtr3),y .DA STDIO.IOERR DIR
txa .DA STAT.MKNOD.CDEV
clc .DA STAT.MKNOD.BDEV
.9 rts .DA STDIO.IOERR LNK
.DA STAT.MKNOD.DSOCK
.99 lda #MLI.E.IO .DA STAT.MKNOD.SSOCK
.DA STDIO.IOERR FIFO
.98 lda #K.E.OOH
sec sec
rts .99 rts
*--------------------------------------
STAT.MKNOD.CDEV
STAT.MKNOD.BDEV
STAT.MKNOD.DSOCK
STAT.MKNOD.SSOCK
ldx #S.STAT
ldy #$ff
.1 inx
iny
lda (ZPPtr1),y
bne .1
txa
tay
lda #0
jsr K.GetMem
bcs .9
>STYA ZPPtr2
.9 rts
*/-------------------------------------- */--------------------------------------
* # MKFIFO * # MKFIFO
* int mkfifo(const char *pathname, mode_t mode);
* return a hFILE to a new FIFO * return a hFILE to a new FIFO
* ## C
* `hFILE mkfifo(const char *pathname, int mode);`
* ## ASM
* **In:** * **In:**
* `>PUSHW mode`
* `>LDYA pathname`
* `>SYSCALL mkfifo`
* **Out:** * **Out:**
* CC = OK, CS = ERROR * CC = OK, CS = ERROR
* A = hFILE * A = hFILE
*\-------------------------------------- *\--------------------------------------
K.MKFIFO >LDYAI 256 K.MKFIFO >LDYAI 256
jsr K.GetMem jsr K.GetMem