A2osX/SYS/KERNEL.S.FS.txt

368 lines
6.8 KiB
Plaintext
Raw Normal View History

2020-06-30 10:40:19 +00:00
NEW
AUTO 3,1
*--------------------------------------
2020-12-15 13:23:22 +00:00
FS.OPEN.REG >MLICALL MLIGETFILEINFO
bcc .2 Already Exists
2020-06-30 14:30:14 +00:00
bit IO.Open.FLAGS Create if not exists ?
2020-08-19 19:39:43 +00:00
bpl .9 No, return MLI error
2020-06-30 14:30:14 +00:00
ldx #2 Yes, Create...
.1 lda IO.Open.TYPE,x
sta K.MLI.PARAMS+4,x File type,Aux type
dex
2020-06-30 10:40:19 +00:00
bpl .1
2020-06-30 14:30:14 +00:00
lda #S.FI.ST.STD
2020-08-19 19:39:43 +00:00
jsr FS.CREATE
bcs .9
2020-06-30 10:40:19 +00:00
2020-12-15 13:23:22 +00:00
.2 ldx #0
jsr DEV.MkFD
2020-08-19 19:39:43 +00:00
bcs .9
2020-06-30 14:30:14 +00:00
2020-12-15 13:23:22 +00:00
jsr FS.MLIOPEN
2020-08-19 19:39:43 +00:00
bcs .99
2020-06-30 14:30:14 +00:00
lda IO.Open.FLAGS
bit #O.WRONLY
2020-12-15 13:23:22 +00:00
beq .5 Write mode ?
2020-06-30 14:30:14 +00:00
and #O.APPEND Append ?
2020-12-15 13:23:22 +00:00
bne .3 yes, go to end of file
2020-06-30 14:30:14 +00:00
stz K.MLI.PARAMS+2
stz K.MLI.PARAMS+3
stz K.MLI.PARAMS+4
>MLICALL MLISETEOF no, reset size to 0
2020-12-15 13:23:22 +00:00
bra .4
2020-06-30 14:30:14 +00:00
2020-12-15 13:23:22 +00:00
.3 >MLICALL MLIGETEOF
2020-08-19 19:39:43 +00:00
bcs .99
2020-06-30 14:30:14 +00:00
>MLICALL MLISETMARK
2020-12-15 13:23:22 +00:00
.4 bcs .99
2020-06-30 14:30:14 +00:00
2020-12-15 13:23:22 +00:00
.5 lda IO.Open.FLAGS
2020-06-30 14:30:14 +00:00
and #O.TEXT Text Mode ?
2020-12-15 13:23:22 +00:00
beq .6
2020-06-30 14:30:14 +00:00
lda #$FF
sta K.MLI.PARAMS+2
lda #C.CR
sta K.MLI.PARAMS+3
>MLICALL MLINEWLINE
2020-08-19 19:39:43 +00:00
bcs .99
2020-12-15 13:23:22 +00:00
.6 >LDYAI K.MLI.PATH+1
>STYA ZPPtr1
jsr K.MkNod.I
bcc .8
2020-06-30 14:30:14 +00:00
2020-08-19 19:39:43 +00:00
.99 pha Save Error Code
2020-06-30 14:30:14 +00:00
lda IO.hFD
jsr K.Close
pla
sec
2020-12-15 13:23:22 +00:00
.8
.9 rts
2020-06-30 14:30:14 +00:00
*--------------------------------------
2020-12-15 13:23:22 +00:00
FS.OPEN.DIR ldx #1
jsr DEV.MkFD
bcs .9
2020-06-30 14:30:14 +00:00
2020-12-15 13:23:22 +00:00
lda K.MLI.PATH+2
beq .8 "/"
2020-06-30 14:30:14 +00:00
2020-12-15 13:23:22 +00:00
>MLICALL MLIGETFILEINFO
2020-06-30 14:30:14 +00:00
bcs .9
2020-12-15 13:23:22 +00:00
lda K.MLI.PARAMS+S.FI.T
cmp #S.FI.T.DIR
bne .99
jsr FS.MLIOPEN
bcs .98
.8 >LDYAI K.MLI.PATH+1
>STYA ZPPtr1
jsr K.MkNod.I
bcc .9
2020-08-19 19:39:43 +00:00
2020-12-15 13:23:22 +00:00
.98 pha Save Error Code
lda IO.hFD
jsr K.Close
pla
sec
2020-09-07 20:40:50 +00:00
rts
2020-12-15 13:23:22 +00:00
.99 lda #MLI.E.UNSUPST
sec
.9 rts
2020-06-30 14:30:14 +00:00
*--------------------------------------
2020-09-09 12:47:18 +00:00
FS.CLOSE.REG
FS.CLOSE.DIR ldy #S.FD.REG.REF
2020-06-30 14:30:14 +00:00
lda (pFD),y
beq .1
2020-09-28 15:43:38 +00:00
2020-06-30 14:30:14 +00:00
sta K.MLI.PARAMS+1
>MLICALL MLICLOSE
2021-05-04 17:31:21 +00:00
* bcs FS.RTS
2020-06-30 14:30:14 +00:00
.1 ldy #S.FD.REG.IOBUF
lda (pFD),y
beq .2
2020-09-28 15:43:38 +00:00
2020-06-30 14:30:14 +00:00
jsr K.FreeMem
2020-09-28 15:43:38 +00:00
2020-12-15 13:23:22 +00:00
.2 jmp DEV.Destroy
*--------------------------------------
FS.READ.REG ldx #MLIREAD
.HS 2C BIT ABS
*--------------------------------------
FS.WRITE.REG ldx #MLIWRITE
ldy #S.FD.REG.REF
lda (pFD),y
sta K.MLI.PARAMS+1
>PULLW K.MLI.PARAMS+4
2021-05-14 20:58:20 +00:00
>PULLW K.MLI.PARAMS+2
2020-12-15 13:23:22 +00:00
lda #4 Param Count = 4 for MLIREAD & MLIWRITE
jsr GP.MLICall
bcs .9
2021-05-14 20:58:20 +00:00
2020-12-15 13:23:22 +00:00
>LDYA K.MLI.PARAMS+6
2021-05-14 20:58:20 +00:00
.9 inc pStack
rts
2020-06-30 14:30:14 +00:00
*--------------------------------------
2020-09-09 12:47:18 +00:00
FS.EOF.REG >MLICALL MLIGETMARK
2020-06-30 14:30:14 +00:00
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
*--------------------------------------
2020-08-19 19:39:43 +00:00
FS.CREATE sta K.MLI.PARAMS+7 Storage Type
2020-06-30 14:30:14 +00:00
ldx #3
2020-12-15 13:23:22 +00:00
2020-06-30 14:30:14 +00:00
.1 lda DATELO,x
sta K.MLI.PARAMS+8,x Create Date/Time
2020-06-30 10:40:19 +00:00
dex
2020-06-30 14:30:14 +00:00
bpl .1
2020-06-30 10:40:19 +00:00
2020-06-30 14:30:14 +00:00
lda #S.FI.A.FULL
sta K.MLI.PARAMS+3 Access
>MLICALL MLICREATE
rts
*--------------------------------------
2020-12-15 13:23:22 +00:00
FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF
2020-06-30 14:30:14 +00:00
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
2020-12-15 13:23:22 +00:00
2020-06-30 14:30:14 +00:00
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
2020-08-19 19:39:43 +00:00
2020-12-15 13:23:22 +00:00
.9
2021-05-04 17:31:21 +00:00
FS.RTS rts
2020-08-18 19:56:50 +00:00
*--------------------------------------
2020-11-19 15:34:02 +00:00
FS.Stat bit A2osX.FSID
2020-07-22 15:51:03 +00:00
bmi FS.Stat.FX
2020-12-15 13:23:22 +00:00
2020-08-18 19:56:50 +00:00
FS.Stat.203 >MLICALL MLIGETFILEINFO
2021-05-04 17:31:21 +00:00
bcs FS.RTS
2020-07-10 13:59:56 +00:00
2020-07-16 14:53:35 +00:00
jsr FS.ClrStat
2020-12-15 13:23:22 +00:00
2020-07-13 19:29:31 +00:00
lda K.MLI.PARAMS+S.FI.T
cmp #S.FI.T.DIR
bne .1
2020-12-15 13:23:22 +00:00
2020-07-13 19:29:31 +00:00
lda /S.STAT.MODE.DIR
sta K.S.STAT+S.STAT.MODE+1
2020-12-15 13:23:22 +00:00
2020-07-13 19:29:31 +00:00
.1 lda K.MLI.PARAMS+S.FI.A
2020-07-29 15:29:54 +00:00
sta K.S.STAT+S.STAT.P.ACCESS
2020-07-10 13:59:56 +00:00
2020-07-13 19:29:31 +00:00
ldx #FS.GFI.Cnt
2020-07-10 13:59:56 +00:00
2020-07-13 19:29:31 +00:00
.3 ldy FS.GFI.Src-1,x
2020-07-10 13:59:56 +00:00
lda K.MLI.PARAMS,y
2020-07-13 19:29:31 +00:00
ldy FS.Stat.Dst-1,x
2020-07-10 13:59:56 +00:00
sta K.S.STAT,y
dex
bne .3
2020-12-15 13:23:22 +00:00
2020-07-10 13:59:56 +00:00
>LDYAI K.MLI.PARAMS+S.FI.CDATE
ldx #K.S.STAT+S.STAT.CTIME
2020-08-19 19:39:43 +00:00
jsr FS.PTime2StatYAX
2020-07-10 13:59:56 +00:00
>LDYAI K.MLI.PARAMS+S.FI.MDATE
ldx #K.S.STAT+S.STAT.MTIME
2020-08-19 19:39:43 +00:00
jmp FS.PTime2StatYAX
2020-06-30 10:40:19 +00:00
*--------------------------------------
2020-07-22 15:51:03 +00:00
FS.Stat.FX >MLICALL MLIGETFILEINFOEX
2020-08-23 19:46:37 +00:00
bcc .1
2020-12-15 13:23:22 +00:00
2020-08-23 19:46:37 +00:00
cmp #MLI.E.BADCALL
beq FS.Stat.203 Apple WS CARD
rts
2020-12-15 13:23:22 +00:00
2020-08-23 19:46:37 +00:00
.1 >LDYAI K.MLI.PARAMS+3
2020-07-13 19:29:31 +00:00
>STYA ZPPtr3
*--------------------------------------
2020-07-16 14:53:35 +00:00
FS.DirEnt2Stat jsr FS.ClrStat
2020-06-30 10:40:19 +00:00
2021-04-08 20:30:18 +00:00
ldx #FS.DirEnt.Cnt
2020-06-30 10:40:19 +00:00
2021-04-08 20:30:18 +00:00
.1 ldy FS.DirEnt.Src-1,x
2020-06-30 10:40:19 +00:00
lda (ZPPtr3),y
2020-07-13 19:29:31 +00:00
ldy FS.Stat.Dst-1,x
2020-06-30 10:40:19 +00:00
sta K.S.STAT,y
dex
2021-04-08 20:30:18 +00:00
bne .1
2020-06-30 14:30:14 +00:00
2020-07-29 15:29:54 +00:00
ldy #S.FIEX.ACCESS
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.P.ACCESS
2020-12-15 13:23:22 +00:00
2021-04-08 20:30:18 +00:00
lda (ZPPtr3)
and #$F0
cmp #$D0 Dir Hdr or Dir ?
bcc .3
cmp #$F0 Vol Hdr ?
bne .2
stz K.S.STAT+S.STAT.SIZE
ldy #S.FIEX.AUXTYPE
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.BLOCKS
asl
sta K.S.STAT+S.STAT.SIZE+1
iny
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.BLOCKS+1
rol
sta K.S.STAT+S.STAT.SIZE+2
lda #0
rol K.S.STAT+S.STAT.SIZE+3
.2 lda /S.STAT.MODE.DIR
tsb K.S.STAT+S.STAT.MODE+1
.3 ldy #S.FIEX.ACL
2020-06-30 10:40:19 +00:00
lda (ZPPtr3),y
2020-07-13 19:29:31 +00:00
cmp #$57
bne .7
2020-06-30 10:40:19 +00:00
2020-07-13 19:29:31 +00:00
ldy #S.FIEX.ACL.UID
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.UID
2020-06-30 10:40:19 +00:00
2020-07-13 19:29:31 +00:00
ldy #S.FIEX.ACL.GID
lda (ZPPtr3),y
sta K.S.STAT+S.STAT.GID
2020-12-15 13:23:22 +00:00
2020-07-13 19:29:31 +00:00
ldy #S.FIEX.ACL.MOD
lda (ZPPtr3),y
tsb K.S.STAT+S.STAT.MODE
iny
lda (ZPPtr3),y
tsb K.S.STAT+S.STAT.MODE+1
2020-12-15 13:23:22 +00:00
2020-07-13 19:29:31 +00:00
.7 lda #S.FIEX.CTIME
2020-06-30 10:40:19 +00:00
ldx #K.S.STAT+S.STAT.CTIME
2020-08-19 19:39:43 +00:00
jsr FS.PTime2StatAX
2020-06-30 10:40:19 +00:00
2020-07-13 19:29:31 +00:00
lda #S.FIEX.MTIME
2020-06-30 10:40:19 +00:00
ldx #K.S.STAT+S.STAT.MTIME
2021-04-08 20:30:18 +00:00
* jmp FS.PTime2StatAX
2020-06-30 10:40:19 +00:00
*--------------------------------------
2020-08-19 19:39:43 +00:00
FS.PTime2StatAX clc
2020-06-30 10:40:19 +00:00
adc ZPPtr3
tay
lda ZPPtr3+1
adc #0
2020-08-19 19:39:43 +00:00
FS.PTime2StatYAX
2020-06-30 10:40:19 +00:00
>PUSHYA
>PUSHB /K.S.STAT
txa
>PUSHA
>SYSCALL2 PTime2Time
2020-10-31 10:33:29 +00:00
clc ignore bad date error
2020-06-30 10:40:19 +00:00
rts
*--------------------------------------
2021-04-08 20:30:18 +00:00
FS.ClrStat ldx #S.STAT-1
.1 stz K.S.STAT,x
dex
bpl .1
lda A2osX.FSID
sta K.S.STAT+S.STAT.FSID
rts
*--------------------------------------
2020-07-13 19:29:31 +00:00
FS.GFI.Src .DA #S.FI.T,#S.FI.AUXTYPE,#S.FI.AUXTYPE+1
2020-06-30 10:40:19 +00:00
.DA #S.FI.UBLKS,#S.FI.UBLKS+1
2020-07-13 19:29:31 +00:00
FS.GFI.Cnt .EQ *-FS.GFI.Src
2020-06-30 10:40:19 +00:00
*--------------------------------------
2020-07-13 19:29:31 +00:00
FS.DirEnt.Src .DA #S.FIEX.T,#S.FIEX.AUXTYPE,#S.FIEX.AUXTYPE+1
.DA #S.FIEX.BLKUSED,#S.FIEX.BLKUSED+1
.DA #S.FIEX.EOF,#S.FIEX.EOF+1,#S.FIEX.EOF+2
FS.DirEnt.Cnt .EQ *-FS.DirEnt.Src
2020-06-30 10:40:19 +00:00
*--------------------------------------
2020-07-13 19:29:31 +00:00
FS.Stat.Dst .DA #S.STAT.P.TYPE,#S.STAT.P.AUXTYPE,#S.STAT.P.AUXTYPE+1
2020-06-30 10:40:19 +00:00
.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.fs
LOAD usr/src/sys/kernel.s
ASM