Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-06-30 16:30:14 +02:00
parent 1efb957446
commit 43b08f2c22
6 changed files with 205 additions and 343 deletions

Binary file not shown.

View File

@ -1,41 +1,172 @@
NEW
AUTO 3,1
*--------------------------------------
SHARED.Stat.I bit CORE.FSID
bpl .1
>MLICALL MLIGETFILEINFOEX
bcs K.Pipe.RTS
>LDYAI K.MLI.PARAMS+3
>STYA ZPPtr3
bra SHARED.DirEnt2Stat
IO.OPEN.REG >MLICALL MLIGETFILEINFO
bcc IO.OPEN.REG.E Already Exists
.1 >MLICALL MLIGETFILEINFO
bcs K.Pipe.RTS
bit IO.Open.FLAGS Create if not exists ?
bpl IO.OPEN.RTS No, return MLI error
SHARED.GFI2Stat jsr SHARED.ClrStat
lda K.MLI.PARAMS+S.FI.A
jsr SHARED.Access2Mode
ldx #2 Yes, Create...
ldx #SHARED.GFI.Cnt
.3 ldy SHARED.GFI.Src-1,x
lda K.MLI.PARAMS,y
ldy SHARED.Stat.Dst-1,x
sta K.S.STAT,y
.1 lda IO.Open.TYPE,x
sta K.MLI.PARAMS+4,x File type,Aux type
dex
bne .3
>LDYAI K.MLI.PARAMS+S.FI.CDATE
ldx #K.S.STAT+S.STAT.CTIME
jsr SHARED.PTime2StatYAX
bpl .1
>LDYAI K.MLI.PARAMS+S.FI.MDATE
ldx #K.S.STAT+S.STAT.MTIME
jmp SHARED.PTime2StatYAX
lda #S.FI.ST.STD
jsr IO.MLI.CREATE
bcs IO.OPEN.RTS
IO.OPEN.REG.E ldx #0
jsr IO.MkFD
bcs IO.OPEN.RTS
jsr IO.MLI.OPEN
bcs UNISTD.Open.ERR
lda IO.Open.FLAGS
bit #O.WRONLY
beq .20 Write mode ?
and #O.APPEND Append ?
bne .11 yes, go to end of file
stz K.MLI.PARAMS+2
stz K.MLI.PARAMS+3
stz K.MLI.PARAMS+4
>MLICALL MLISETEOF no, reset size to 0
bra .21
.11 >MLICALL MLIGETEOF
bcs UNISTD.Open.ERR
>MLICALL MLISETMARK
.21 bcs UNISTD.Open.ERR
.20 lda IO.Open.FLAGS
and #O.TEXT Text Mode ?
beq .8
lda #$FF
sta K.MLI.PARAMS+2
lda #C.CR
sta K.MLI.PARAMS+3
>MLICALL MLINEWLINE
bcs UNISTD.Open.ERR
.8 lda IO.hFD
IO.OPEN.RTS rts
UNISTD.Open.ERR pha Save Error Code
lda IO.hFD
jsr K.Close
pla
sec
rts
*--------------------------------------
IO.READ.REG ldx #MLIREAD
.HS 2C BIT ABS
*--------------------------------------
IO.WRITE.REG ldx #MLIWRITE
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
>PULLW K.MLI.PARAMS+2
>PULLW K.MLI.PARAMS+4
lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr GP.MLICall
bcs .9
>LDYA K.MLI.PARAMS+6
.9
IO.WRITE.REG.RTS
rts
*--------------------------------------
IO.CLOSE.REG
IO.CLOSE.DIR ldy #S.FD.REG.REF
lda (pFD),y
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.FD.REG.IOBUF
lda (pFD),y
beq .2
jsr K.FreeMem
.2 lda IO.hFD
jmp K.FreeMem
*--------------------------------------
IO.EOF.REG >MLICALL MLIGETMARK
bcs .9
ldy #2
.1 lda K.MLI.PARAMS+2,y
sta ACC32,y
dey
bpl .1
>MLICALL MLIGETEOF
bcs .9
ldy #2
.2 lda K.MLI.PARAMS+2,y
eor ACC32,y
bne .8 FALSE
dey
bpl .2
lda #$ff TRUE
* clc
rts
.8 lda #0
* clc
.9 rts
*--------------------------------------
IO.MLI.CREATE sta K.MLI.PARAMS+7 Storage Type
ldx #3
.1 lda DATELO,x
sta K.MLI.PARAMS+8,x Create Date/Time
dex
bpl .1
lda #S.FI.A.FULL
sta K.MLI.PARAMS+3 Access
>MLICALL MLICREATE
rts
*--------------------------------------
IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF
ldx #S.MEM.F.ALIGN
jsr MEM.GetMem.YAX
bcs .9
>STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.FD.REG.IOBUF
sta (pFD),y
>MLICALL MLIOPEN
bcs .9
lda K.MLI.PARAMS+5 get ref_num
ldy #S.FD.REG.REF
sta (pFD),y
sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based
* clc
.9 rts
*--------------------------------------
SHARED.ClrStat ldx #S.STAT-1
.1 stz K.S.STAT,x
dex
bpl .1
lda CORE.FSID
sta K.S.STAT+S.STAT.FSID
rts
SHARED.ClrStat.RTS
*--------------------------------------
SHARED.DirEnt2Stat
jsr SHARED.ClrStat
@ -44,7 +175,7 @@ SHARED.DirEnt2Stat
and #$F0
cmp #$D0 Vol Hdr, Dir Hdr or Dir ?
bcc .1
lda /S.STAT.MODE.DIR
sta K.S.STAT+S.STAT.MODE+1
@ -56,7 +187,7 @@ SHARED.DirEnt2Stat
sta K.S.STAT,y
dex
bne .2
ldy #$1E ProDOS Access
lda (ZPPtr3),y
@ -124,7 +255,7 @@ SHARED.PTime2StatYAX
*--------------------------------------
SHARED.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1
.DA #S.FI.UBLKS,#S.FI.UBLKS+1
SHARED.GFI.Cnt .EQ *-SHARED.GFI.Src
SHARED.GFI.Cnt .EQ *-SHARED.GFI.Src
*--------------------------------------
SHARED.DirEnt.Src
.HS 10.1f20.1314.151617

View File

@ -155,27 +155,6 @@ SHARED.GetScrnDevX
sta SETREADAUX
rts
*--------------------------------------
SHARED.GetPDrv ldy #S.FD.DEV.DRVPTR
lda (pFD),y
sta pDRV
iny
lda (pFD),y
sta pDRV+1
rts
*--------------------------------------
SHARED.ClrStat ldx #S.STAT-1
.1 stz K.S.STAT,x
dex
bpl .1
lda CORE.FSID
sta K.S.STAT+S.STAT.FSID
rts
*--------------------------------------
DEV.FIFO .AS "/dev/fifo" STAT,UNISTD
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.SHARED
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -332,12 +332,12 @@ SHARED.Stat.I bit CORE.FSID
>LDYAI K.MLI.PARAMS+3
>STYA ZPPtr3
bra SHARED.DirEnt2Stat
jmp SHARED.DirEnt2Stat
.1 >MLICALL MLIGETFILEINFO
bcs K.Pipe.RTS
SHARED.GFI2Stat jsr SHARED.ClrStat
jsr SHARED.ClrStat
lda K.MLI.PARAMS+S.FI.A
jsr SHARED.Access2Mode
@ -359,103 +359,6 @@ SHARED.GFI2Stat jsr SHARED.ClrStat
ldx #K.S.STAT+S.STAT.MTIME
jmp SHARED.PTime2StatYAX
*--------------------------------------
SHARED.DirEnt2Stat
jsr SHARED.ClrStat
lda (ZPPtr3)
and #$F0
cmp #$D0 Vol Hdr, Dir Hdr or Dir ?
bcc .1
lda /S.STAT.MODE.DIR
sta K.S.STAT+S.STAT.MODE+1
.1 ldx #SHARED.DirEnt.Cnt
.2 ldy SHARED.DirEnt.Src-1,x
lda (ZPPtr3),y
ldy SHARED.Stat.Dst-1,x
sta K.S.STAT,y
dex
bne .2
ldy #$1E ProDOS Access
lda (ZPPtr3),y
jsr SHARED.Access2Mode
lda #$18 creation Date/time
ldx #K.S.STAT+S.STAT.CTIME
jsr SHARED.PTime2StatAX
lda #$21 mod Date/time
ldx #K.S.STAT+S.STAT.MTIME
jmp SHARED.PTime2StatAX
*--------------------------------------
SHARED.Mode2Access
clc
rts
*--------------------------------------
SHARED.Access2Mode
and #S.FI.A.FULL
cmp #S.FI.A.FULL
beq .7
tay
ldx #S.STAT.MODE.RO+S.STAT.MODE.RG+S.STAT.MODE.RU+S.STAT.MODE.XO+S.STAT.MODE.XG+S.STAT.MODE.XU
bit #S.FI.A.W
beq .1
txa
ora #S.STAT.MODE.WO
tax
tya
.1 asl D in C
bpl .2 RN in N
txa
ora #S.STAT.MODE.WG
tax
.2 txa
bcc .8
ora #S.STAT.MODE.WU
.HS 2C BIT ABS
.7 lda #S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU rwxrwxrwx
.8 sta K.S.STAT+S.STAT.MODE
lda /S.STAT.MODE.RU ??????R??
ora K.S.STAT+S.STAT.MODE+1 preserve DIR
sta K.S.STAT+S.STAT.MODE+1
rts
*--------------------------------------
SHARED.PTime2StatAX
clc
adc ZPPtr3
tay
lda ZPPtr3+1
adc #0
SHARED.PTime2StatYAX
>PUSHYA
>PUSHB /K.S.STAT
txa
>PUSHA
>SYSCALL2 PTime2Time
rts
*--------------------------------------
SHARED.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1
.DA #S.FI.UBLKS,#S.FI.UBLKS+1
SHARED.GFI.Cnt .EQ *-SHARED.GFI.Src
*--------------------------------------
SHARED.DirEnt.Src
.HS 10.1f20.1314.151617
SHARED.DirEnt.Cnt .EQ *-SHARED.DirEnt.Src
*--------------------------------------
SHARED.Stat.Dst .DA #S.STAT.P.TYPE,#S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
.DA #S.STAT.BLOCKS,#S.STAT.BLOCKS+1
.DA #S.STAT.SIZE,#S.STAT.SIZE+1,#S.STAT.SIZE+2
*--------------------------------------
MAN
SAVE usr/src/sys/kernel.s.stat
LOAD usr/src/sys/kernel.s

View File

@ -20,7 +20,7 @@ IO.Open.TYPE .BS 1
IO.Open.AUXTYPE .BS 2
IO.hFD .BS 1
.ED
*--------------------------------------
*--------------------------------------
K.Open jsr PFT.YAToMLIPATH
>PULLB IO.Open.FLAGS
@ -29,30 +29,37 @@ K.Open jsr PFT.YAToMLIPATH
stz IO.Open.AUXTYPE
stz IO.Open.AUXTYPE+1
*--------------------------------------
UNISTD.Open jsr UNISTD.CheckDev
bcs IO.OPEN.REG
*--------------------------------------
UNISTD.Open ldx #5 /DEV/
cpx K.MLI.PATH
bcs .99
.1 lda K.MLI.PATH,x
cmp DEV.FIFO-1,x
bne .99
dex
bne .1
*--------------------------------------
* /DEV/xxxxxx (CDEV,BDEV,DSOCK,SSOCK,PIPE)
*--------------------------------------
*--------------------------------------
>LDYAI K.MLI.PATH+6 skip $/DEV/
jsr K.GetDevByName
bcc .7
ldx #2
.10 lda Nod.Table.hPath-2,x
beq .3
jsr K.GetMemPtr
>STYA ZPPtr1
ldy #0
.2 lda (ZPPtr1),y
iny
cmp K.MLI.PATH,y
bne .3
cmp #0 end of string ?
bne .2
@ -60,15 +67,15 @@ UNISTD.Open jsr UNISTD.CheckDev
lda Nod.Table.hFD-2,x return hFD
jsr UNISTD.GetPFD
bra .71
.3 inx
cpx #K.NOD.MAX+2
bne .10
lda #MLI.E.NODEV
* sec
rts no OF found
*--------------------------------------
*--------------------------------------
.7 stx IO.hFD
>STYA pFD
@ -85,70 +92,8 @@ UNISTD.Open jsr UNISTD.CheckDev
.DA IO.OPEN.DSOCK
.DA IO.OPEN.SSOCK
.DA IO.OPEN.PIPE
*--------------------------------------
IO.OPEN.REG >MLICALL MLIGETFILEINFO
bcc IO.OPEN.REG.E Already Exists
bit IO.Open.FLAGS Create if not exists ?
bpl IO.OPEN.RTS No, return MLI error
ldx #2 Yes, Create...
.1 lda IO.Open.TYPE,x
sta K.MLI.PARAMS+4,x File type,Aux type
dex
bpl .1
lda #S.FI.ST.STD
jsr IO.MLI.CREATE
bcs IO.OPEN.RTS
IO.OPEN.REG.E ldx #0
jsr IO.MkFD
bcs IO.OPEN.RTS
jsr IO.MLI.OPEN
bcs UNISTD.Open.ERR
lda IO.Open.FLAGS
bit #O.WRONLY
beq .20 Write mode ?
and #O.APPEND Append ?
bne .11 yes, go to end of file
stz K.MLI.PARAMS+2
stz K.MLI.PARAMS+3
stz K.MLI.PARAMS+4
>MLICALL MLISETEOF no, reset size to 0
bra .21
.11 >MLICALL MLIGETEOF
bcs UNISTD.Open.ERR
>MLICALL MLISETMARK
.21 bcs UNISTD.Open.ERR
.20 lda IO.Open.FLAGS
and #O.TEXT Text Mode ?
beq .8
lda #$FF
sta K.MLI.PARAMS+2
lda #C.CR
sta K.MLI.PARAMS+3
>MLICALL MLINEWLINE
bcs UNISTD.Open.ERR
.8 lda IO.hFD
IO.OPEN.RTS rts
UNISTD.Open.ERR pha Save Error Code
lda IO.hFD
jsr K.Close
pla
sec
rts
.99 jmp IO.OPEN.REG
*/--------------------------------------
* # close
* ## C
@ -231,66 +176,16 @@ UNISTD.GetPFD sta IO.hFD
>STYA pFD
rts
*--------------------------------------
UNISTD.CheckDev ldx #5 /DEV/
cpx K.MLI.PATH
bcs .99
.1 lda K.MLI.PATH,x
cmp DEV.FIFO-1,x
bne .9
dex
bne .1
clc
rts
.9 sec
.99 rts
*--------------------------------------
IO.CLOSE.REG
IO.CLOSE.DIR ldy #S.FD.REG.REF
lda (pFD),y
beq .1
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.FD.REG.IOBUF
lda (pFD),y
beq .2
jsr K.FreeMem
.2 lda IO.hFD
jmp K.FreeMem
*--------------------------------------
IO.READ.REG ldx #MLIREAD
.HS 2C BIT ABS
*--------------------------------------
IO.WRITE.REG ldx #MLIWRITE
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
>PULLW K.MLI.PARAMS+2
>PULLW K.MLI.PARAMS+4
lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr GP.MLICall
bcs .9
>LDYA K.MLI.PARAMS+6
.9
IO.WRITE.REG.RTS
rts
*--------------------------------------
IO.OPEN.CDEV
IO.OPEN.BDEV jsr SHARED.GetPDrv
ldx #IOCTL.OPEN
lda IO.hFD
jsr SHARED.pDrvJmp
bcs IO.WRITE.REG.RTS
bcs IO.WRITE.CDEV.RTS
*--------------------------------------
IO.OPEN.DSOCK
*--------------------------------------
IO.OPEN.SSOCK
IO.OPEN.SSOCK
lda IO.hFD
*--------------------------------------
IO.CLOSE.CDEV
@ -312,10 +207,12 @@ IO.WRITE.CDEV ldx #IOCTL.WRITE
>LDYA K.S.IOCTL+S.IOCTL.BYTECNT
.9 rts
.9
IO.WRITE.CDEV.RTS
rts
*--------------------------------------
IO.CLOSE.DSOCK
IO.CLOSE.SSOCK
IO.CLOSE.SSOCK
ldy #S.FD.SSOCK.CLOSE
.HS 2C BIT ABS
*--------------------------------------
@ -337,31 +234,6 @@ IO.WRITE.SSOCK ldy #S.FD.SSOCK.WRITE
lda IO.hFD
.1 jmp $FFFF SELF MODIFIED
*--------------------------------------
IO.EOF.REG >MLICALL MLIGETMARK
bcs .9
ldy #2
.1 lda K.MLI.PARAMS+2,y
sta ACC32,y
dey
bpl .1
>MLICALL MLIGETEOF
bcs .9
ldy #2
.2 lda K.MLI.PARAMS+2,y
eor ACC32,y
bne .8 FALSE
dey
bpl .2
lda #$ff TRUE
* clc
rts
.8 lda #0
* clc
.9 rts
*--------------------------------------
IO.EOF.CDEV lda #S.IOCTL.STATCODE.EOF
jmp SHARED.GetDevStatus
*--------------------------------------
@ -376,10 +248,10 @@ IO.MkFD stx .8+1
ldx #S.MEM.F.INIT0+S.MEM.F.FD
jsr MEM.GetMem.YAX
bcs .9
>STYA pFD
stx IO.hFD
.8 ldx #$ff SELF MODIFIED
lda IO.MkFD.T,x
sta (pFD) X = hFD, A = T
@ -389,39 +261,6 @@ IO.MkFD stx .8+1
IO.MkFD.Y .DA #S.FD.REG,#S.FD.DIR,#S.FD.PIPE
IO.MkFD.T .DA #S.FD.T.REG,#S.FD.T.DIR,#S.FD.T.PIPE
*--------------------------------------
IO.MLI.CREATE sta K.MLI.PARAMS+7 Storage Type
ldx #3
.1 lda DATELO,x
sta K.MLI.PARAMS+8,x Create Date/Time
dex
bpl .1
lda #S.FI.A.FULL
sta K.MLI.PARAMS+3 Access
>MLICALL MLICREATE
rts
*--------------------------------------
IO.MLI.OPEN >LDYAI 1024 get a ProDOS IOBUF
ldx #S.MEM.F.ALIGN
jsr MEM.GetMem.YAX
bcs .9
>STYA K.MLI.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.FD.REG.IOBUF
sta (pFD),y
>MLICALL MLIOPEN
bcs .9
lda K.MLI.PARAMS+5 get ref_num
ldy #S.FD.REG.REF
sta (pFD),y
sta K.MLI.PARAMS+1 Next MLI Calls are REF_NUM based
* clc
.9 rts
*--------------------------------------
IO.CLOSE.NOD ldx #2
lda IO.hFD
@ -456,6 +295,16 @@ IO.CLOSE.NOD ldx #2
K.ChOwn clc
rts
*--------------------------------------
SHARED.GetPDrv ldy #S.FD.DEV.DRVPTR
lda (pFD),y
sta pDRV
iny
lda (pFD),y
sta pDRV+1
rts
*--------------------------------------
DEV.FIFO .AS "/dev/fifo" STAT,UNISTD
*--------------------------------------
MAN
SAVE USR/SRC/SYS/KERNEL.S.UNISTD
LOAD USR/SRC/SYS/KERNEL.S

View File

@ -78,6 +78,8 @@ A2osX.D1.B .PH $D000
.INB usr/src/sys/kernel.s.unistd
.INB usr/src/sys/kernel.s.stdio
.INB usr/src/sys/kernel.s.stdio2
.INB usr/src/sys/kernel.s.dev
.INB usr/src/sys/kernel.s.pipe
.EP
A2osX.D1.S .EQ *-A2osX.D1.B
@ -116,8 +118,6 @@ A2osX.E0.B .PH $E000
.INB usr/src/sys/kernel.s.mem
* go to A2osX.D1
.INB usr/src/sys/kernel.s.pipe
.INB usr/src/sys/kernel.s.dev
DevMgr.Timer .BS 1
DevMgr.Stat .DA DevMgr.FreeMem