A2osX/SYS/KERNEL.S.FIL.txt

168 lines
3.6 KiB
Plaintext
Raw Normal View History

PR#3
PREFIX /A2OSX.SRC
NEW
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
* For All SYS.xxxx calls, X = #SYSCall
* Must be kept in X before calling
* S.PFTCheckPathXX
*--------------------------------------
* S.FOPEN
* In :
* PULLW = PATH (PSTR)
* PULLB = MODE
* Out :
* CC : A = hFILE
* CS : A = EC
*--------------------------------------
S.FOPEN jsr S.PFTCHECKPATHSTK
>PULLW MLICALL.PARAMS+1
>PULLB S.FOPEN.MODE
>PUSHWI S.FILE.PRODOS
>PUSHBI S.MEM.F.INIT0
jsr S.GetMem
bcs .99
>STYA ZPQuickPtr1
stx hFILE
>PUSHWI 1024 get a ProDOS IOBUF
>PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE
jsr S.GetMem
bcs .99
>STYA MLICALL.PARAMS+3 Save Ptr to IOBUF for MLIOPEN call
txa
ldy #S.FILE.PRODOS.IOBUF
sta (ZPQuickPtr1),y
>MLICALL MLIOPEN
bcc .1 Failed...
bit S.FOPEN.MODE Create if not exists?
bpl .98 no....error
.1 lda MLICALL.PARAMS+5 get ref_num
ldy #S.FILE.PRODOS.REF
sta (ZPQuickPtr1),y
lda S.FOPEN.MODE
bit #SYS.FOPEN.A
beq .1
.1
lda hFILE
clc
rts CC
.98 pha save MLI error
jsr S.FCLOSEA.1
pla get back MLI error
sec
.99 rts
*--------------------------------------
S.FOPEN.MODE .BS 1
hFILE .BS 1
*--------------------------------------
* S.FCLOSEA
* In :
* A = hFILE
*--------------------------------------
S.FCLOSEA jsr S.PFTCHECKFILEA
jsr S.GetMemPtrA
>STYA ZPQuickPtr1
S.FCLOSEA.1 ldy #S.FILE.PRODOS.REF
lda (ZPQuickPtr1),y
beq .1
sta MLICALL.PARAMS+1
>MLICALL MLICLOSE
.1 ldy #S.FILE.PRODOS.IOBUF
lda (ZPQuickPtr1),y
beq .2
jsr S.FreeMemA
.2 lda hFILE
jsr S.FreeMemA
rts
*--------------------------------------
* S.FREAD
* In :
* PULLB = hFILE
* PULLW = Bytes To Read
* PULLW = Dest Ptr
* Out :
* Y,A = Bytes Read
*--------------------------------------
S.FREAD jsr S.PFTCHECKFILESTK
>PULLB MLICALL.PARAMS+1
>PULLW MLICALL.PARAMS+4
>PULLW MLICALL.PARAMS+2
>MLICALL MLIREAD
bcs .9
>LDYA MLICALL.PARAMS+6
.9 rts
*--------------------------------------
* S.FWRITE
* In :
* PULLB = hFILE
* PULLW = Bytes To Write
* PULLW = Src Ptr
* Out :
* Y,A = Bytes Written
*--------------------------------------
S.FWRITE jsr S.PFTCHECKFILESTK
>PULLB MLICALL.PARAMS+1
>PULLW MLICALL.PARAMS+4
>PULLW MLICALL.PARAMS+2
>MLICALL MLIWRITE
bcs .9
>LDYA MLICALL.PARAMS+6
.9 rts
*--------------------------------------
* S.FFLUSHA
* In :
* A = hFILE
*--------------------------------------
S.FFLUSHA jsr S.PFTCHECKFILEA
sta MLICALL.PARAMS+1
>MLICALL MLIFLUSH
rts
*--------------------------------------
*--------------------------------------
S.FSEEK
*--------------------------------------
*--------------------------------------
S.FTELL
*--------------------------------------
*--------------------------------------
S.FEOF
*--------------------------------------
*--------------------------------------
S.REMOVE
*--------------------------------------
*--------------------------------------
S.RENAME
*--------------------------------------
S.MKDIRYA jsr S.PFTCHECKPATHYA
>STYA MLICALL.PARAMS+1
lda #$C3
sta MLICALL.PARAMS+3 Access
lda #$0F
sta MLICALL.PARAMS+4 type=Directory
lda #$0D Storage=Linked List
sta MLICALL.PARAMS+7
>MLICALL MLICREATE
rts
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.FIL
LOAD SYS/KERNEL.S
ASM