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
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
rts
*---------------------------------------
EXP.Compute.ADD ldx #0 ARG-ACC->ACC
EXP.OP.ADD ldx #0 ARG-ACC->ACC
ldy #4
clc
@ -246,7 +246,7 @@ EXP.Compute.ADD ldx #0 ARG-ACC->ACC
lda #ERR.VAL.TOO.BIG
.8 rts
*---------------------------------------
EXP.Compute.SUB ldx #0 ARG-ACC->ACC
EXP.OP.SUB ldx #0 ARG-ACC->ACC
ldy #4
sec
@ -267,9 +267,9 @@ EXP.Compute.SUB ldx #0 ARG-ACC->ACC
.8 clc
rts
*---------------------------------------
EXP.Compute.MUL
EXP.OP.MUL
*---------------------------------------
EXP.Compute.DIV
EXP.OP.DIV
clc
rts
*---------------------------------------

View File

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

View File

@ -72,8 +72,7 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.LIBSTR .DA LIBSTR
L.MSG.HELP1 .DA MSG.HELP1
L.MSG.HELP2 .DA MSG.HELP2
L.MSG.HELP .DA MSG.HELP
L.MSG.SRCLINE .DA MSG.SRCLINE
L.MSG.ERROR .DA MSG.ERROR
L.MSG.SYMBOLS .DA MSG.SYMBOLS
@ -139,29 +138,30 @@ J.LI .DA DIR.LI.CON
.DA DIR.LI.XOFF
.DA DIR.LI.ON
.DA DIR.LI.OFF
J.EXP.OP .DA EXP.Compute.EOR ^!|&<=>+-*/
.DA EXP.Compute.ORA
.DA EXP.Compute.ORA
.DA EXP.Compute.AND
.DA EXP.Compute.LOW
.DA EXP.Compute.EQU
.DA EXP.Compute.GRT
.DA EXP.Compute.ADD
.DA EXP.Compute.SUB
.DA EXP.Compute.MUL
.DA EXP.Compute.DIV
J.EXP.OP .DA EXP.OP.EOR ^!|&<=>+-*/
.DA EXP.OP.ORA
.DA EXP.OP.ORA
.DA EXP.OP.AND
.DA EXP.OP.LOW
.DA EXP.OP.EQU
.DA EXP.OP.GRT
.DA EXP.OP.ADD
.DA EXP.OP.SUB
.DA EXP.OP.MUL
.DA EXP.OP.DIV
.DA 0
*---------------------------------------
CS.INIT >LDYA L.LIBSTR
>SYSCALL SYS.LoadLibYA
sta hLIBSTR
ldy #S.PS.hARGS
lda (pPs),y
beq .99
>SYSCALL SYS.GetArgC
cmp #1
beq .99 No arg, new file....
>SYSCALL SYS.GetMemPtrA
>SYSCALL SYS.NewPStrYA
lda #1
>SYSCALL SYS.GetArgA
>SYSCALL SYS.GetFullPathYA
txa
ldy #SRC.hFILENAME
@ -183,9 +183,7 @@ CS.INIT >LDYA L.LIBSTR
clc
rts
.99 >PUSHW L.MSG.HELP1
>LIBCALL hLIBSTR,LIBSTR.PRINTF
>PUSHW L.MSG.HELP2
.99 >PUSHW L.MSG.HELP
>LIBCALL hLIBSTR,LIBSTR.PRINTF
lda #ERR.INV.ARGS
sec
@ -327,7 +325,7 @@ CS.QUIT jsr FIO.FileClose
.INB BIN/ASM.S.SYM
*---------------------------------------
CS.END
SRC.DIR.MAXLEN .EQ 5 (DUMMY)
SRC.DIR.MAXLEN .EQ 5
T.DIRECTIVES .HS 02
.AS "AC"
.HS 02
@ -425,8 +423,7 @@ T.LI .HS 03
.HS 00
*---------------------------------------
LIBSTR >PSTRING "libstr.o"
MSG.HELP1 >CSTRING "A2osX-Macro Assembler (S-C MASM 3.0 Based)\n"
MSG.HELP2 >CSTRING "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\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.PASS >CSTRING "Pass:#%d\n"
MSG.SRC.FILE >CSTRING "Reading SRC File:%S\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
stx hFullPath
.2 >SYSCALL SYS.ListDirInitYA
.2 >SYSCALL SYS.OPENDIRYA
bcs .99
ldy #hS.LISTDIR
ldy #hDIR
sta (pData),y
jsr .99
@ -99,206 +99,43 @@ CS.RUN ldy #bCANCEL
clc
rts
.2 ldy #hS.LISTDIR
.2 ldy #hDIR
lda (pData),y
>SYSCALL SYS.ListDirNextA
bcc .3
>SYSCALL SYS.READDIRA
bcs .9
jmp Push.Footer
.3 pha
>SYSCALL SYS.GetMemPtrA
phx Save hDIRENT
>STYA ZPPtr1
lda (ZPPtr1)
pha
and #$0F
sta (ZPPtr1) Adjust Filename len
.3 lda (ZPPtr1)
beq .8
pla
and #$F0
cmp #$F0 Volume ($F) HEADER ?
bne .31
>LDYA ZPPtr1
>SYSCALL SYS.PStrOutYA
pla
ldy #hVOLHEADER
sta (pData),y
>PUSHW ZPPtr1
>PUSHW L.MSG.VOL.HEADER
>LIBCALL hLIBSTR,LIBSTR.PRINTF
lda ZPPtr1
sec
adc (ZPPtr1)
sta ZPPtr1
bcc .4
inc ZPPtr1+1
.4 lda #13
>SYSCALL SYS.COutA
.7 lda ZPPtr1
clc
rts
adc #S.STAT
sta ZPPtr1
bcc .3
inc ZPPtr1+1
bcs .3 Always
.31 cmp #$E0 Dir ($E) HEADER ?
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
.8 pla
>SYSCALL SYS.FreeMemA
clc
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
.9 rts
*--------------------------------------
CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
lda (pEvent),y
@ -338,22 +175,10 @@ CS.DOEVENT ldy #S.EVT.hDEV is Event from active IN device?
.9 sec
rts
*--------------------------------------
CS.QUIT ldy #hVOLHEADER
lda (pData),y
beq .1
>SYSCALL SYS.FreeMemA
.1 ldy #hDIRHEADER
lda (pData),y
beq .2
>SYSCALL SYS.FreeMemA
.2 ldy #hS.LISTDIR
CS.QUIT ldy #hDIR
lda (pData),y
>SYSCALL SYS.ListDirCloseA
>SYSCALL SYS.CLOSEDIRA
ldy #hDIRPATH
lda (pData),y
@ -395,7 +220,7 @@ hFullPath .BS 1
.OR 0
DS.START
hDIRPATH .BS 1
hS.LISTDIR .BS 1
hDIR .BS 1
hVOLHEADER .BS 1
hDIRHEADER .BS 1
bSTOP .BS 1

View File

@ -445,34 +445,16 @@ S.EVT.DATAW2 .EQ 6
*
S.EVT .EQ 8
*--------------------------------------
* S.LISTDIR STRUCT (Obsolete)
*--------------------------------------
S.LISTDIR.hONLINE .EQ 0
S.LISTDIR.ONLINEPTR .EQ 1
S.LISTDIR.REFNUM .EQ 2 ref_num file
S.LISTDIR.hIOBUF .EQ 3 hMem to ProDOS IO buffer
S.LISTDIR.hREADBUF .EQ 4 hMem to 512 Read Buffer
S.LISTDIR.EL .EQ 5 entry_length
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.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.LISTDIR.SIZE .EQ 16
*--------------------------------------
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.TIME .EQ 8
*--------------------------------------
* S.STAT
*--------------------------------------

View File

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

View File

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

View File

@ -143,8 +143,7 @@ K.GetFullPathYA >STYA ZPQuickPtr3 Ptr1 & 2 used by StrCpy
* Y,A = File Length
* X = hMem of Loaded File
*--------------------------------------
K.LoadFile >DEBUG
jsr K.FOPEN
K.LoadFile jsr K.FOPEN
bcs .9
sta K.LoadFile.hFile
@ -201,65 +200,6 @@ K.LoadFile.Seek >PUSHWI 0
>PUSHB K.LoadFile.hFile
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 = SrcLen
* PULLW = PATH (Handled by....

View File

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

View File

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