Kernel version 0.8 : More API cleanup/reorg, fixed bug in READDIRYA crashing reading second block

This commit is contained in:
Rémy GIBERT 2016-09-22 17:46:01 +02:00
parent 79488f88fa
commit 0c91cddf37
12 changed files with 151 additions and 386 deletions

Binary file not shown.

Binary file not shown.

View File

@ -215,21 +215,21 @@ EXP.Compute dec
.8 clc .8 clc
rts rts
*--------------------------------------- *---------------------------------------
EXP.Compute.EOR EXP.OP.EOR
*--------------------------------------- *---------------------------------------
EXP.Compute.ORA EXP.OP.ORA
*--------------------------------------- *---------------------------------------
EXP.Compute.AND EXP.OP.AND
*--------------------------------------- *---------------------------------------
EXP.Compute.LOW EXP.OP.LOW
*--------------------------------------- *---------------------------------------
EXP.Compute.EQU EXP.OP.EQU
*--------------------------------------- *---------------------------------------
EXP.Compute.GRT EXP.OP.GRT
clc clc
rts rts
*--------------------------------------- *---------------------------------------
EXP.Compute.ADD ldx #0 ARG-ACC->ACC EXP.OP.ADD ldx #0 ARG-ACC->ACC
ldy #4 ldy #4
clc clc
@ -246,7 +246,7 @@ EXP.Compute.ADD ldx #0 ARG-ACC->ACC
lda #ERR.VAL.TOO.BIG lda #ERR.VAL.TOO.BIG
.8 rts .8 rts
*--------------------------------------- *---------------------------------------
EXP.Compute.SUB ldx #0 ARG-ACC->ACC EXP.OP.SUB ldx #0 ARG-ACC->ACC
ldy #4 ldy #4
sec sec
@ -267,9 +267,9 @@ EXP.Compute.SUB ldx #0 ARG-ACC->ACC
.8 clc .8 clc
rts rts
*--------------------------------------- *---------------------------------------
EXP.Compute.MUL EXP.OP.MUL
*--------------------------------------- *---------------------------------------
EXP.Compute.DIV EXP.OP.DIV
clc clc
rts rts
*--------------------------------------- *---------------------------------------

View File

@ -5,7 +5,7 @@ INC 1
AUTO 6 AUTO 6
.LIST OFF .LIST OFF
*--------------------------------------- *---------------------------------------
FIO.Init ldy #S.PS.hCMD FIO.Init ldy #S.PS.hCMDLINE
lda (pPS),y lda (pPS),y
>SYSCALL SYS.GetMemPtrA >SYSCALL SYS.GetMemPtrA
bcs .99 bcs .99
@ -299,7 +299,7 @@ FIO.LOAD.ASM.T ldy #ASM.T.hMem
>PUSHBI 6 S.FILEINFO.TYPE.BIN >PUSHBI 6 S.FILEINFO.TYPE.BIN
>PUSHBI SYS.FOPEN.R >PUSHBI SYS.FOPEN.R
>PUSHW L.ASM.T.FILENAME >PUSHW L.ASM.T.FILENAME
>SYSCALL SYS.LoadFileYA >SYSCALL SYS.LoadFile
bcs .9 bcs .9
txa txa

View File

@ -72,8 +72,7 @@ CS.START cld
.DA CS.DOEVENT .DA CS.DOEVENT
.DA CS.QUIT .DA CS.QUIT
L.LIBSTR .DA LIBSTR L.LIBSTR .DA LIBSTR
L.MSG.HELP1 .DA MSG.HELP1 L.MSG.HELP .DA MSG.HELP
L.MSG.HELP2 .DA MSG.HELP2
L.MSG.SRCLINE .DA MSG.SRCLINE L.MSG.SRCLINE .DA MSG.SRCLINE
L.MSG.ERROR .DA MSG.ERROR L.MSG.ERROR .DA MSG.ERROR
L.MSG.SYMBOLS .DA MSG.SYMBOLS L.MSG.SYMBOLS .DA MSG.SYMBOLS
@ -139,29 +138,30 @@ J.LI .DA DIR.LI.CON
.DA DIR.LI.XOFF .DA DIR.LI.XOFF
.DA DIR.LI.ON .DA DIR.LI.ON
.DA DIR.LI.OFF .DA DIR.LI.OFF
J.EXP.OP .DA EXP.Compute.EOR ^!|&<=>+-*/ J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/
.DA EXP.Compute.ORA .DA EXP.OP.ORA
.DA EXP.Compute.ORA .DA EXP.OP.ORA
.DA EXP.Compute.AND .DA EXP.OP.AND
.DA EXP.Compute.LOW .DA EXP.OP.LOW
.DA EXP.Compute.EQU .DA EXP.OP.EQU
.DA EXP.Compute.GRT .DA EXP.OP.GRT
.DA EXP.Compute.ADD .DA EXP.OP.ADD
.DA EXP.Compute.SUB .DA EXP.OP.SUB
.DA EXP.Compute.MUL .DA EXP.OP.MUL
.DA EXP.Compute.DIV .DA EXP.OP.DIV
.DA 0 .DA 0
*--------------------------------------- *---------------------------------------
CS.INIT >LDYA L.LIBSTR CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.LoadLibYA >SYSCALL SYS.LoadLibYA
sta hLIBSTR sta hLIBSTR
ldy #S.PS.hARGS >SYSCALL SYS.GetArgC
lda (pPs),y cmp #1
beq .99 beq .99 No arg, new file....
>SYSCALL SYS.GetMemPtrA lda #1
>SYSCALL SYS.NewPStrYA >SYSCALL SYS.GetArgA
>SYSCALL SYS.GetFullPathYA
txa txa
ldy #SRC.hFILENAME ldy #SRC.hFILENAME
@ -183,9 +183,7 @@ CS.INIT >LDYA L.LIBSTR
clc clc
rts rts
.99 >PUSHW L.MSG.HELP1 .99 >PUSHW L.MSG.HELP
>LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW L.MSG.HELP2
>LIBCALL hLIBSTR,LIBSTR.PRINTF >LIBCALL hLIBSTR,LIBSTR.PRINTF
lda #ERR.INV.ARGS lda #ERR.INV.ARGS
sec sec
@ -327,7 +325,7 @@ CS.QUIT jsr FIO.FileClose
.INB BIN/ASM.S.SYM .INB BIN/ASM.S.SYM
*--------------------------------------- *---------------------------------------
CS.END CS.END
SRC.DIR.MAXLEN .EQ 5 (DUMMY) SRC.DIR.MAXLEN .EQ 5
T.DIRECTIVES .HS 02 T.DIRECTIVES .HS 02
.AS "AC" .AS "AC"
.HS 02 .HS 02
@ -425,8 +423,7 @@ T.LI .HS 03
.HS 00 .HS 00
*--------------------------------------- *---------------------------------------
LIBSTR >PSTRING "libstr.o" LIBSTR >PSTRING "libstr.o"
MSG.HELP1 >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\n" MSG.HELP >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\nUsage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\n"
MSG.HELP2 >CSTRING "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\n"
MSG.PASS >CSTRING "Pass:#%d\n" MSG.PASS >CSTRING "Pass:#%d\n"
MSG.SRC.FILE >CSTRING "Reading SRC File:%S\n" MSG.SRC.FILE >CSTRING "Reading SRC File:%S\n"
MSG.OBJ.FILE >CSTRING "Writing OBJ File:%S, Type=%02x\n" MSG.OBJ.FILE >CSTRING "Writing OBJ File:%S, Type=%02x\n"

View File

@ -66,9 +66,9 @@ CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.GetFullPathYA >SYSCALL SYS.GetFullPathYA
stx hFullPath stx hFullPath
.2 >SYSCALL SYS.ListDirInitYA .2 >SYSCALL SYS.OPENDIRYA
bcs .99 bcs .99
ldy #hS.LISTDIR ldy #hDIR
sta (pData),y sta (pData),y
jsr .99 jsr .99
@ -99,206 +99,43 @@ CS.RUN ldy #bCANCEL
clc clc
rts rts
.2 ldy #hS.LISTDIR .2 ldy #hDIR
lda (pData),y lda (pData),y
>SYSCALL SYS.ListDirNextA >SYSCALL SYS.READDIRA
bcc .3 bcs .9
jmp Push.Footer phx Save hDIRENT
.3 pha
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1 >STYA ZPPtr1
lda (ZPPtr1)
pha
and #$0F .3 lda (ZPPtr1)
sta (ZPPtr1) Adjust Filename len
pla beq .8
and #$F0
cmp #$F0 Volume ($F) HEADER ?
bne .31
pla >LDYA ZPPtr1
ldy #hVOLHEADER >SYSCALL SYS.PStrOutYA
sta (pData),y
>PUSHW ZPPtr1 lda ZPPtr1
>PUSHW L.MSG.VOL.HEADER sec
>LIBCALL hLIBSTR,LIBSTR.PRINTF adc (ZPPtr1)
sta ZPPtr1
bcc .4
inc ZPPtr1+1
.4 lda #13
>SYSCALL SYS.COutA
.7 lda ZPPtr1
clc clc
rts adc #S.STAT
sta ZPPtr1
bcc .3
inc ZPPtr1+1
bcs .3 Always
.31 cmp #$E0 Dir ($E) HEADER ? .8 pla
bne .4
pla
ldy #hDIRHEADER
sta (pData),y
>PUSHW ZPPtr1
>PUSHW L.MSG.DIR.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF
clc
rts
.4 cmp #$D0 Directory ?
bne .5
jsr Push.Dates
jsr Push.Dir
>PUSHW L.MSG.DIR
bra .8
.5 cmp #$C0 Volume Name ?
bne .6
>PUSHW ZPPtr1
>PUSHW L.MSG.VOL
bra .8
.6 jsr Push.Dates File
jsr Push.File
>PUSHW L.MSG.FILE
.8 >LIBCALL hLIBSTR,LIBSTR.PRINTF
.9 pla
>SYSCALL SYS.FreeMemA >SYSCALL SYS.FreeMemA
clc clc
rts .9 rts
*--------------------------------------
Push.Dir ldy #$1E get access mask
lda (ZPPtr1),y
>PUSHA
>PUSHW ZPPtr1
rts
*--------------------------------------
Push.File >PUSHBI 0 4th byte of file len=0
ldy #$17 get file len (3 bytes)
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
ldy #$1E get access mask
lda (ZPPtr1),y
>PUSHA
ldy #$20 get aux type
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
ldy #$10 get filetype
lda L.PRODOS.FT.TXT
sta ZPPtr2
lda L.PRODOS.FT.TXT+1
sta ZPPtr2+1
ldx #0
.1 lda (ZPPtr1),y
cmp PRODOS.FT.ID,x
beq .3
lda ZPPtr2
clc
adc #4
sta ZPPtr2
bcc .2
inc ZPPtr2+1
.2 inx
cpx PRODOS.FT.COUNT
bne .1
lda (ZPPtr1),y
lsr
lsr
lsr
lsr
tax
lda HEXDIGIT,x
sta PRODOS.FT.DFLT+2
lda (ZPPtr1),y
and #$0F
tax
lda HEXDIGIT,x
sta PRODOS.FT.DFLT+3
.3 >PUSHW ZPPtr2
>PUSHW ZPPtr1
>LIBCALL hLIBSTR,LIBSTR.LCASEP
>PUSHW ZPPtr1
rts
*--------------------------------------
Push.Dates ldy #$24 get modification time
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
ldy #$22
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
ldy #$1B get creation time
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
ldy #$19
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
rts
*--------------------------------------
Push.Footer ldy #hVOLHEADER
lda (pData),y
beq .20
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1
ldy #$22 file_count
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
>PUSHW L.MSG.VOL.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.20 ldy #hDIRHEADER
lda (pData),y
beq .21
>SYSCALL SYS.GetMemPtrA
>STYA ZPPtr1
ldy #$22 file_count
lda (ZPPtr1),y
>PUSHA
dey
lda (ZPPtr1),y
>PUSHA
>PUSHW L.MSG.DIR.END
>LIBCALL hLIBSTR,LIBSTR.PRINTF
.21 sec
rts
*-------------------------------------- *--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device? CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y lda (pEvent),y
@ -338,22 +175,10 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
.9 sec .9 sec
rts rts
*-------------------------------------- *--------------------------------------
CS.QUIT ldy #hVOLHEADER CS.QUIT ldy #hDIR
lda (pData),y
beq .1
>SYSCALL SYS.FreeMemA
.1 ldy #hDIRHEADER
lda (pData),y
beq .2
>SYSCALL SYS.FreeMemA
.2 ldy #hS.LISTDIR
lda (pData),y lda (pData),y
>SYSCALL SYS.ListDirCloseA >SYSCALL SYS.CLOSEDIRA
ldy #hDIRPATH ldy #hDIRPATH
lda (pData),y lda (pData),y
@ -395,7 +220,7 @@ hFullPath .BS 1
.OR 0 .OR 0
DS.START DS.START
hDIRPATH .BS 1 hDIRPATH .BS 1
hS.LISTDIR .BS 1 hDIR .BS 1
hVOLHEADER .BS 1 hVOLHEADER .BS 1
hDIRHEADER .BS 1 hDIRHEADER .BS 1
bSTOP .BS 1 bSTOP .BS 1

View File

@ -445,34 +445,16 @@ S.EVT.DATAW2 .EQ 6
* *
S.EVT .EQ 8 S.EVT .EQ 8
*-------------------------------------- *--------------------------------------
* S.LISTDIR STRUCT (Obsolete) S.TIME.CENTURY .EQ 0 19,20,21....
*-------------------------------------- S.TIME.YEAR .EQ 1 0.99
S.LISTDIR.hONLINE .EQ 0 S.TIME.MONTH .EQ 2 1..12
S.LISTDIR.ONLINEPTR .EQ 1 S.TIME.DAY .EQ 3 1..31
S.LISTDIR.REFNUM .EQ 2 ref_num file S.TIME.HOUR .EQ 4 0..23
S.LISTDIR.hIOBUF .EQ 3 hMem to ProDOS IO buffer S.TIME.MINUTE .EQ 5 0..59
S.LISTDIR.hREADBUF .EQ 4 hMem to 512 Read Buffer S.TIME.SECOND .EQ 6 0..61
S.LISTDIR.EL .EQ 5 entry_length S.TIME.WDAY .EQ 7 1..7
S.LISTDIR.EIB .EQ 6 ENTRY_INDEX in block
S.LISTDIR.EPB .EQ 7 entry_per_block
S.LISTDIR.BLKPTR .EQ 8 entry PTR in block
S.LISTDIR.FI .EQ 10 FILE_INDEX in DIR
S.LISTDIR.FC .EQ 12 file_count
S.LISTDIR.hPATH .EQ 14 Base path for file filtering
S.LISTDIR.hPATTERN .EQ 15 Pattern for file filtering
* *
S.LISTDIR.SIZE .EQ 16 S.TIME .EQ 8
*--------------------------------------
S.Time.CENTURY .EQ 0 19,20,21....
S.Time.YEAR .EQ 1 0.99
S.Time.MONTH .EQ 2 1..12
S.Time.DAY .EQ 3 1..31
S.Time.HOUR .EQ 4 0..23
S.Time.MINUTE .EQ 5 0..59
S.Time.SECOND .EQ 6 0..61
S.Time.WDAY .EQ 7 1..7
*
S.Time .EQ 8
*-------------------------------------- *--------------------------------------
* S.STAT * S.STAT
*-------------------------------------- *--------------------------------------

View File

@ -12,7 +12,7 @@ AUTO 6
* CC : Y,A = PTR to S.DIR * CC : Y,A = PTR to S.DIR
* CS : A = EC * CS : A = EC
*-------------------------------------- *--------------------------------------
K.OPENDIRYA jsr S.PFTCHECKPATHYA K.OPENDIRYA jsr K.PFTCheckPathYA
>STYA ZPQuickPtr2 >STYA ZPQuickPtr2
>STYA MLICALL.PARAMS+1 For MLIOPEN >STYA MLICALL.PARAMS+1 For MLIOPEN
@ -71,7 +71,7 @@ hDIR .BS 1
* CC : X = hDIREND, Y,A = PTR to S.DIRENT * CC : X = hDIREND, Y,A = PTR to S.DIRENT
* CS : A = EC, A = 0 : no more entry * CS : A = EC, A = 0 : no more entry
*-------------------------------------- *--------------------------------------
K.READDIRA jsr S.PFTCHECKDIRA K.READDIRA jsr K.PFTCheckDirA
jsr K.GetMemPtrA jsr K.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
@ -267,10 +267,12 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
.99 rts .99 rts
.2 ldy #S.DIR.PRODOS.EL+3 .2 ldy #S.DIR.PRODOS.EL+3
ldx #3
.3 lda(ZPQuickPtr1),y get this session parameters from S.DIR .3 lda (ZPQuickPtr1),y get this session parameters from S.DIR
sta EntryLength-S.DIR.PRODOS.EL,y sta EntryLength,x
dey dey
dex
bpl .3 bpl .3
.4 ldx EntryCount .4 ldx EntryCount
@ -336,10 +338,13 @@ K.READDIRA.DIR ldy #S.DIR.PRODOS.REF
* lda #0 S.MEM.F.INIT0 already did this * lda #0 S.MEM.F.INIT0 already did this
* sta (ZPQuickPtr4) Ending 0 * sta (ZPQuickPtr4) Ending 0
ldx #3
ldy #S.DIR.PRODOS.EL+3 ldy #S.DIR.PRODOS.EL+3
.8 lda EntryLength-S.DIR.PRODOS.EL,y Store back this session prameters to S.DIR
.8 lda EntryLength,x Store back this session prameters to S.DIR
sta (ZPQuickPtr1),y sta (ZPQuickPtr1),y
dey dey
dex
bpl .8 bpl .8
jsr .98 Discard READBUFFER jsr .98 Discard READBUFFER
@ -383,7 +388,7 @@ K.READDIRA.ADD and #$F0
lda #1 lda #1
jsr K.READDIRA.AddToBuf jsr K.READDIRA.AddToBuf
lda #'.' lda #'.' filename="1."
jsr K.READDIRA.AddToBuf jsr K.READDIRA.AddToBuf
ldy #$25 total_blocks ldy #$25 total_blocks
@ -398,35 +403,27 @@ K.READDIRA.ADD and #$F0
txa txa
sta (ZPQuickPtr4),y sta (ZPQuickPtr4),y
bra .80
.10 cmp #$E0 directory header ? .10 cmp #$E0 directory header ?
bne .20 bne .20
lda #2 lda #2
jsr K.READDIRA.AddToBuf jsr K.READDIRA.AddToBuf
lda #'.' lda #'.' filename="2.."
jsr K.READDIRA.AddToBuf jsr K.READDIRA.AddToBuf
jsr K.READDIRA.AddToBuf jsr K.READDIRA.AddToBuf
bra .80
.20 cmp #$D0 directory ? .20 cmp #$D0 directory ?
bne .30 bne .30
jsr K.READDIRA.AddFNToBuf
lda (ZPQuickPtr3) bra .80
and #$0F get filename len
tax
jsr K.READDIRA.AddToBuf
ldy #1
.21 lda (ZPQuickPtr3),y .30 jsr K.READDIRA.AddFNToBuf
jsr K.READDIRA.AddToBuf
iny
dex
bne .21
.30
.80 lda ZPQuickPtr4 .80 lda ZPQuickPtr4
clc clc
@ -444,6 +441,21 @@ K.READDIRA.AddBufSize
inc BufSize+1 inc BufSize+1
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
K.READDIRA.AddFNToBuf
lda (ZPQuickPtr3)
and #$0F get filename len
tax
jsr K.READDIRA.AddToBuf
ldy #1
.1 lda (ZPQuickPtr3),y
jsr K.READDIRA.AddToBuf
iny
dex
bne .1
rts
*--------------------------------------
K.READDIRA.AddToBuf K.READDIRA.AddToBuf
sta (ZPQuickPtr4) sta (ZPQuickPtr4)
inc ZPQuickPtr4 inc ZPQuickPtr4
@ -467,8 +479,8 @@ K.READDIRA.hDIR .BS 1
* In : * In :
* A = hDIR * A = hDIR
*-------------------------------------- *--------------------------------------
K.CLOSEDIRA jsr S.PFTCHECKDIRA K.CLOSEDIRA jsr K.PFTCheckDirA
sta hDIR pha
jsr K.GetMemPtrA jsr K.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
@ -483,12 +495,12 @@ K.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF
beq .2 beq .2
jsr K.FreeMemA jsr K.FreeMemA
.2 lda hDIR .2 pla
jsr K.FreeMemA jsr K.FreeMemA
clc clc
rts rts
*-------------------------------------- *--------------------------------------
K.MKDIRYA jsr S.PFTCHECKPATHYA K.MKDIRYA jsr K.PFTCheckPathYA
>STYA MLICALL.PARAMS+1 >STYA MLICALL.PARAMS+1
lda #S.FILEINFO.ACCESS.FULL lda #S.FILEINFO.ACCESS.FULL
sta MLICALL.PARAMS+S.FILEINFO.ACCESS sta MLICALL.PARAMS+S.FILEINFO.ACCESS

View File

@ -7,7 +7,7 @@ AUTO 6
*-------------------------------------- *--------------------------------------
* For All SYS.xxxx calls, X = #SYSCall * For All SYS.xxxx calls, X = #SYSCall
* Must be kept in X before calling * Must be kept in X before calling
* S.PFTCheckXYZ * K.PFTCheck*
*-------------------------------------- *--------------------------------------
* K.FOPEN * K.FOPEN
* In : * In :
@ -24,7 +24,7 @@ AUTO 6
* CC : A = hFILE * CC : A = hFILE
* CS : A = EC * CS : A = EC
*-------------------------------------- *--------------------------------------
K.FOPEN jsr S.PFTCHECKPATHSTK K.FOPEN jsr K.PFTCheckPathSTK
>PULLW MLICALL.PARAMS+1 >PULLW MLICALL.PARAMS+1
>PULLB K.FOPEN.MODE >PULLB K.FOPEN.MODE
>PULLB K.FOPEN.TYPE >PULLB K.FOPEN.TYPE
@ -114,7 +114,7 @@ hFILE .BS 1
* In : * In :
* A = hFILE * A = hFILE
*-------------------------------------- *--------------------------------------
K.FCLOSEA jsr S.PFTCHECKFILEA K.FCLOSEA jsr K.PFTCheckFileA
sta hFILE sta hFILE
jsr K.GetMemPtrA jsr K.GetMemPtrA
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
@ -142,7 +142,7 @@ K.FCLOSEA.1 ldy #S.FILE.PRODOS.REF
* Out : * Out :
* Y,A = Bytes Read * Y,A = Bytes Read
*-------------------------------------- *--------------------------------------
K.FREAD jsr S.PFTCHECKFILESTK K.FREAD jsr K.PFTCheckFileSTK
>PULLA >PULLA
jsr FIL.SetupPrt1A jsr FIL.SetupPrt1A
>PULLW MLICALL.PARAMS+4 >PULLW MLICALL.PARAMS+4
@ -160,7 +160,7 @@ K.FREAD jsr S.PFTCHECKFILESTK
* Out : * Out :
* Y,A = Bytes Written * Y,A = Bytes Written
*-------------------------------------- *--------------------------------------
K.FWRITE jsr S.PFTCHECKFILESTK K.FWRITE jsr K.PFTCheckFileSTK
>PULLA >PULLA
jsr FIL.SetupPrt1A jsr FIL.SetupPrt1A
>PULLW MLICALL.PARAMS+4 >PULLW MLICALL.PARAMS+4
@ -174,7 +174,7 @@ K.FWRITE jsr S.PFTCHECKFILESTK
* In : * In :
* A = hFILE * A = hFILE
*-------------------------------------- *--------------------------------------
K.FFLUSHA jsr S.PFTCHECKFILEA K.FFLUSHA jsr K.PFTCheckFileA
jsr FIL.SetupPrt1A jsr FIL.SetupPrt1A
>MLICALL MLIFLUSH >MLICALL MLIFLUSH
rts rts
@ -186,27 +186,35 @@ K.FFLUSHA jsr S.PFTCHECKFILEA
* PULLW = OffsetLo * PULLW = OffsetLo
* PULLW = OffsetHi * PULLW = OffsetHi
*-------------------------------------- *--------------------------------------
K.FSEEK jsr S.PFTCHECKFILESTK K.FSEEK jsr K.PFTCheckFileSTK
>PULLA >PULLA
jsr FIL.SetupPrt1A jsr FIL.SetupPrt1A
>PULLB K.FSEEK.FROM >PULLB K.FSEEK.FROM
>PULLW K.FSEEK.OFFSET >PULLW K.FSEEK.OFFSET
>PULLW K.FSEEK.OFFSET+2 >PULLW K.FSEEK.OFFSET+2
lda K.FSEEK.FROM lda K.FSEEK.FROM
beq .3 cmp #SYS.FSEEK.SET
cmp #SYS.FSEEK.CUR * cmp #SYS.FSEEK.SET =0
bne .1 bne .1
>MLICALL MLIGETMARK stz MLICALL.PARAMS+2
bcs .9 stz MLICALL.PARAMS+3
bcc .2 stz MLICALL.PARAMS+4
bra .8
.1 cmp #SYS.FSEEK.END .1 cmp #SYS.FSEEK.CUR
bne .3 bne .2
>MLICALL MLIGETMARK
bcc .8
rts
.2 cmp #SYS.FSEEK.END
bne .98
>MLICALL MLIGETEOF >MLICALL MLIGETEOF
bcs .9 bcs .9
.2 lda MLICALL.PARAMS+2 .8 lda MLICALL.PARAMS+2
adc K.FSEEK.OFFSET adc K.FSEEK.OFFSET
sta MLICALL.PARAMS+2 sta MLICALL.PARAMS+2
lda MLICALL.PARAMS+3 lda MLICALL.PARAMS+3
@ -217,11 +225,12 @@ K.FSEEK jsr S.PFTCHECKFILESTK
sta MLICALL.PARAMS+4 sta MLICALL.PARAMS+4
bcs .99 Offset out of range! bcs .99 Offset out of range!
>MLICALL MLISETMARK
.3 >MLICALL MLISETMARK
.9 rts .9 rts
.98 lda #SYSMGR.ERRSYN
.HS 2C bit abs
.99 lda #SYSMGR.ERRFTB .99 lda #SYSMGR.ERRFTB
sec sec
rts rts
@ -235,7 +244,7 @@ K.FSEEK.OFFSET .BS 4
* Out : * Out :
* Y,A,X = Offset * Y,A,X = Offset
*-------------------------------------- *--------------------------------------
K.FTELLA jsr S.PFTCHECKFILEA K.FTELLA jsr K.PFTCheckFileA
K.FTELLA.1 jsr FIL.SetupPrt1A K.FTELLA.1 jsr FIL.SetupPrt1A
>MLICALL MLIGETMARK >MLICALL MLIGETMARK
bcs .9 bcs .9
@ -252,7 +261,7 @@ K.FTELLA.1 jsr FIL.SetupPrt1A
* A !=0 NOT EOF * A !=0 NOT EOF
* CS : * CS :
*-------------------------------------- *--------------------------------------
K.FEOFA jsr S.PFTCHECKFILEA K.FEOFA jsr K.PFTCheckFileA
jsr FIL.SetupPrt1A jsr FIL.SetupPrt1A
jsr K.FTELLA.1 jsr K.FTELLA.1
bcs .9 bcs .9
@ -277,7 +286,7 @@ K.FEOFA.MARK .BS 3
*-------------------------------------- *--------------------------------------
* K.REMOVEYA * K.REMOVEYA
*-------------------------------------- *--------------------------------------
K.REMOVEYA jsr S.PFTCHECKPATHYA K.REMOVEYA jsr K.PFTCheckPathYA
>STYA MLICALL.PARAMS+1 >STYA MLICALL.PARAMS+1
>MLICALL MLIDESTROY >MLICALL MLIDESTROY
rts rts
@ -287,7 +296,7 @@ K.REMOVEYA jsr S.PFTCHECKPATHYA
* PULLW = Old Name * PULLW = Old Name
* PULLW = New Name * PULLW = New Name
*-------------------------------------- *--------------------------------------
K.RENAME jsr S.PFTCHECKPATHYA K.RENAME jsr K.PFTCheckPathSTK
>PULLW MLICALL.PARAMS+1 >PULLW MLICALL.PARAMS+1
>PULLW MLICALL.PARAMS+3 >PULLW MLICALL.PARAMS+3
>MLICALL MLIRENAME >MLICALL MLIRENAME
@ -298,7 +307,7 @@ K.RENAME jsr S.PFTCHECKPATHYA
* PULLB = hFILE * PULLB = hFILE
* PULLW = PTR to S.STAT buffer * PULLW = PTR to S.STAT buffer
*-------------------------------------- *--------------------------------------
K.STAT jsr S.PFTCHECKFILEA K.STAT jsr K.PFTCheckFileA
>PULLA >PULLA
jsr FIL.SetupPrt1A jsr FIL.SetupPrt1A
>PULLW ZPQuickPtr2 >PULLW ZPQuickPtr2
@ -316,7 +325,7 @@ K.STAT jsr S.PFTCHECKFILEA
* PULLW = PTR to Filename * PULLW = PTR to Filename
* PULLW = PTR to S.STAT buffer * PULLW = PTR to S.STAT buffer
*-------------------------------------- *--------------------------------------
K.FSTAT jsr S.PFTCHECKPATHYA K.FSTAT jsr K.PFTCheckPathSTK
>PULLW MLICALL.PARAMS+1 >PULLW MLICALL.PARAMS+1
>PULLW ZPQuickPtr2 >PULLW ZPQuickPtr2
>MLICALL MLIGETFILEINFO >MLICALL MLIGETFILEINFO

View File

@ -143,8 +143,7 @@ K.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy
* Y,A = File Length * Y,A = File Length
* X = hMem of Loaded File * X = hMem of Loaded File
*-------------------------------------- *--------------------------------------
K.LoadFile >DEBUG K.LoadFile jsr K.FOPEN
jsr K.FOPEN
bcs .9 bcs .9
sta K.LoadFile.hFile sta K.LoadFile.hFile
@ -201,65 +200,6 @@ K.LoadFile.Seek >PUSHWI 0
>PUSHB K.LoadFile.hFile >PUSHB K.LoadFile.hFile
jmp K.FSEEK jmp K.FSEEK
*-------------------------------------- *--------------------------------------
* K.LoadFileYA
* in :
* Y,A = FilePath (PSTRING)
* out :
* Y,A = File Length
* X = hMem of Loaded File
*--------------------------------------
K.LoadFileYA jsr K.MLIOpenYA
bcc .10
rts
.10 sta K.LoadFile.hRef save ref_num
stx K.LoadFile.hBuf save Prodos Buffer for freemem
jsr K.MLIGetEOFA
bcs .98
phx Larger than 64k?
plx
beq .1 File too big!!!!
lda #SYSMGR.ERRFTB
bra .98
.1 >STYA K.LoadFile.Len save Length
>PUSHYA Push Length for K.GetMem
>PUSHBI 0
jsr K.GetMem
bcs .98
>STYA K.LoadFile.Mem
stx K.LoadFile.hMem save Segment hMem
>PUSHW K.LoadFile.Len Push Length for K.MLIRead
>PUSHW K.LoadFile.Mem Push PTR
>PUSHB K.LoadFile.hRef Push ref_num
jsr K.MLIRead
bcs .97
jsr .98 Close File....
>LDYA K.LoadFile.Len Return File Length...
ldx K.LoadFile.hMem ...and hMem to Caller
clc
rts
.97 pha
lda K.LoadFile.hMem
jsr K.FreeMemA freemem because of failed load
pla
.98 pha
lda K.LoadFile.hRef
jsr K.MLICloseA
lda K.LoadFile.hBuf
jsr K.FreeMemA ProDOS IO Buffer
pla
.99 sec
rts
*--------------------------------------
* PULLW = SrcPtr * PULLW = SrcPtr
* PULLW = SrcLen * PULLW = SrcLen
* PULLW = PATH (Handled by.... * PULLW = PATH (Handled by....

View File

@ -9,13 +9,13 @@ AUTO 6
* PULLW/Y,A = PATH (PSTR) * PULLW/Y,A = PATH (PSTR)
* Out : * Out :
*-------------------------------------- *--------------------------------------
S.PFTCHECKPATHSTK K.PFTCheckPathSTK
lda (pStack) read PTR.LO on top of stack lda (pStack) read PTR.LO on top of stack
pha pha
ldy #1 ldy #1
lda (pStack),y read PTR.HI on top of stack lda (pStack),y read PTR.HI on top of stack
ply ply
S.PFTCHECKPATHYA K.PFTCheckPathYA
stx S.PFT.SYSCALL save #SYSCALL stx S.PFT.SYSCALL save #SYSCALL
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1
@ -67,10 +67,10 @@ S.PFTCHECKPATHYA
* PULLB/A = hFILE/hDIR * PULLB/A = hFILE/hDIR
* Out : * Out :
*-------------------------------------- *--------------------------------------
S.PFTCHECKFILESTK K.PFTCheckFileSTK
lda (pStack) read hFILE on top of stack lda (pStack) read hFILE on top of stack
S.PFTCHECKFILEA K.PFTCheckFileA
S.PFTCHECKDIRA stx S.PFT.SYSCALL save #SYSCALL K.PFTCheckDirA stx S.PFT.SYSCALL save #SYSCALL
sta S.PFT.hFILE sta S.PFT.hFILE
jsr K.GetMemPtrA X = unmidified jsr K.GetMemPtrA X = unmidified
>STYA ZPQuickPtr1 >STYA ZPQuickPtr1

View File

@ -79,7 +79,7 @@ A2osX.D001.END .EQ *
A2osX.D002 .EQ * A2osX.D002 .EQ *
.PH $D000 .PH $D000
.INB SYS/KERNEL.S.REL .INB SYS/KERNEL.S.REL
.INB SYS/KERNEL.S.Time .INB SYS/KERNEL.S.TIME
.EP .EP
A2osX.D002.END .EQ * A2osX.D002.END .EQ *
*-------------------------------------- *--------------------------------------