Kernel 0.9.1 : BugFix in AtoF, LoadFile, reviewed FTell/FSeek API

This commit is contained in:
Rémy GIBERT 2017-10-09 17:30:48 +02:00
parent 4cae83f359
commit a6ac9584d8
15 changed files with 244 additions and 198 deletions

View File

@ -313,7 +313,7 @@ return a hFile for a given Device Name
+ A = hFILE + A = hFILE
# MKFIFO # MKFIFO
return a S.FILE to a new FIFO return a hFILE to a new FIFO
## IN: ## IN:
@ -469,22 +469,15 @@ Read bytes from file
+ A = hFILE + A = hFILE
# FSeek # FSeek
+ Set the file-position indicator for hFILE
## In: ## In:
+ PUSHW = OffsetHi + PUSHW = Ptr to Offset (DWORD)
+ PUSHW = OffsetLo
+ PUSHB = From + PUSHB = From
+ PUSHB = hFILE + PUSHB = hFILE
# FTell.A
## In:
+ A = hFILE
## Out:
+ Y,A,X = Offset
# FEOF.A # FEOF.A
+ Test the end-of-file indicator for hFILE
## In: ## In:
+ A = hFILE + A = hFILE
@ -495,6 +488,16 @@ Read bytes from file
+ A =0 NOT EOF + A =0 NOT EOF
+ CS : + CS :
# FTell
+ Return the current value of the file-position indicator
## In:
+ PUSHW = Ptr to Offset (DWORD)
+ PUSHB = hFILE
## Out:
+ Offset = Offset
# Remove.YA # Remove.YA
# Rename # Rename
@ -670,7 +673,7 @@ Convert string to UPPERCASE/lowercase
+ PUSHW = Dst PTR To S.TIME + PUSHW = Dst PTR To S.TIME
+ PUSHW = Src PTR to ProDOS DATE/TIME (DWORD) + PUSHW = Src PTR to ProDOS DATE/TIME (DWORD)
# K.CTime2Time # CTime2Time
+ Convert CTIME to S.TIME + Convert CTIME to S.TIME
## In : ## In :

View File

@ -25,7 +25,7 @@
+ PUSHW PTR to MAC + PUSHW PTR to MAC
+ PUSHW PTR to IP + PUSHW PTR to IP
# ARP.GetC.Ache # ARP.GetCAche
+ Return a Ptr to ARP Cache Table + Return a Ptr to ARP Cache Table
## In: ## In:
@ -58,7 +58,7 @@
+ PUSHW = PTR to IP + PUSHW = PTR to IP
+ PUSHW = hostname PSTR to Add + PUSHW = hostname PSTR to Add
# DNS.GetC.Ache # DNS.GetCAche
+ Return a Ptr to DNS Cache Table + Return a Ptr to DNS Cache Table
## In: ## In:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -91,9 +91,6 @@ InitSrcDirYA >SYSCALL RealPath.YA
txa txa
>STA.G hFilter >STA.G hFilter
>LDYA ZPPtr2
jsr DEBUG.YA
lda #0 lda #0
sta (ZPPtr2) sta (ZPPtr2)

View File

@ -569,7 +569,7 @@ Cmd.Exec.SLEEP lda (ZPPtr2)
>PUSHEA.G Sleep >PUSHEA.G Sleep
>PUSHW ZPPtr2 >PUSHW ZPPtr2
>SYSCALL AToI.YA >SYSCALL AToL
bcs .9 bcs .9

View File

@ -14,34 +14,21 @@ AUTO 6
* Y,A = File Length * Y,A = File Length
* X = hMem of Loaded File * X = hMem of Loaded File
*\-------------------------------------- *\--------------------------------------
K.LoadFile lda (pStack) read PTR.LO on top of stack K.LoadFile jsr K.FOpen
pha
ldy #1
lda (pStack),y read PTR.HI on top of stack
pha
>PUSHWI K.S.STAT
pla
ply
>PUSHYA
jsr K.Stat
bcs .10
lda K.S.STAT+S.STAT.SIZE+3
ora K.S.STAT+S.STAT.SIZE+2
bne .11
>LDYA K.S.STAT+S.STAT.SIZE push len
jsr K.GetMem.YA
bcs .10
>STYA K.LoadFile.Mem
stx .8+1
jsr K.FOpen
bcs .9 bcs .9
sta K.LoadFile.hFile sta K.LoadFile.hFile
jsr K.LoadFile.GetLen
bcs .99
>LDYA K.LoadFile.FSize
jsr K.GetMem.YA
bcs .99
>STYA K.LoadFile.Mem
stx .8+1
>PUSHW K.LoadFile.Mem >PUSHW K.LoadFile.Mem
>PUSHW K.S.STAT+S.STAT.SIZE >PUSHW K.LoadFile.FSize
>PUSHB K.LoadFile.hFile >PUSHB K.LoadFile.hFile
jsr K.FRead jsr K.FRead
bcs .97 bcs .97
@ -57,13 +44,6 @@ K.LoadFile lda (pStack) read PTR.LO on top of stack
clc clc
.9 rts .9 rts
.11 lda #SYSMGR.ERRFTB
.10 pha
>POP 6
pla
sec
rts
.97 pha .97 pha
lda .8+1 lda .8+1
jsr K.FreeMem.A jsr K.FreeMem.A
@ -76,8 +56,45 @@ K.LoadFile lda (pStack) read PTR.LO on top of stack
sec sec
rts rts
*-------------------------------------- *--------------------------------------
K.LoadFile.GetLen
stz K.LoadFile.FPos
stz K.LoadFile.FPos+1
stz K.LoadFile.FPos+2
stz K.LoadFile.FPos+3
>PUSHWI K.LoadFile.FPos
>PUSHBI SYS.FSeek.END
>PUSHB K.LoadFile.hFile
jsr K.FSeek
bcs .99
>PUSHWI K.LoadFile.FPos
>PUSHB K.LoadFile.hFile
jsr K.FTell
bcs .99
lda K.LoadFile.FPos+2
ora K.LoadFile.FPos+3
bne .98 too big!
>LDYA K.LoadFile.FPos
>STYA K.LoadFile.FSize
stz K.LoadFile.FPos
stz K.LoadFile.FPos+1
>PUSHWI K.LoadFile.FPos
>PUSHBI SYS.FSeek.SET
>PUSHB K.LoadFile.hFile
jmp K.FSeek
.98 lda #SYSMGR.ERRFTB
.99 rts
*--------------------------------------
K.LoadFile.hFile .BS 1 K.LoadFile.hFile .BS 1
K.LoadFile.FPos .BS 4
K.LoadFile.Mem .BS 2 K.LoadFile.Mem .BS 2
K.LoadFile.FSize .BS 2
*/-------------------------------------- */--------------------------------------
* # SaveFile * # SaveFile
* ## In: * ## In:

View File

@ -41,7 +41,7 @@ K.SYSCALL.JMP .DA 0 $00
.DA K.FWrite .DA K.FWrite
.DA K.FFlush.A .DA K.FFlush.A
.DA K.FSeek .DA K.FSeek
.DA K.FTell.A .DA K.FTell
.DA K.FEOF.A .DA K.FEOF.A
.DA K.Remove.YA $40 .DA K.Remove.YA $40

View File

@ -103,9 +103,7 @@ PS.CreateChild ldx #0
plx plx
sta PS.Table.hMem,x sta PS.Table.hMem,x
lda CORE.LastPSID Set Ownership jsr PS.SetMemOwnership Set Ownership
ldy #S.MEM.OWNERPID
sta (ZPMEMMGR),y
ldy #S.PS.PID ldy #S.PS.PID
lda CORE.LastPSID lda CORE.LastPSID
@ -123,9 +121,7 @@ PS.CreateChild ldx #0
jsr K.NewStr.YA jsr K.NewStr.YA
bcs .9 bcs .9
lda CORE.LastPSID Set Ownership jsr PS.SetMemOwnership Set Ownership
ldy #S.MEM.OWNERPID
sta (ZPMEMMGR),y
txa txa
ldy #S.PS.hPREFIX ldy #S.PS.hPREFIX
@ -210,9 +206,7 @@ PS.CmdLine2Args >STYA ZPPtr1
ldy #S.PS.hARGS ldy #S.PS.hARGS
sta (ZPPtr3),y sta (ZPPtr3),y
lda CORE.LastPSID Set Ownership jsr PS.SetMemOwnership Set Ownership
ldy #S.MEM.OWNERPID
sta (ZPMEMMGR),y
stz PS.CmdLine2Args.bInQuote stz PS.CmdLine2Args.bInQuote
@ -282,6 +276,9 @@ PS.Init jsr BIN.Load.YA Y,A=filename full path
ldy #S.PS.hCS ldy #S.PS.hCS
sta (ZPPtr3),y save CS hMem in S.PS sta (ZPPtr3),y save CS hMem in S.PS
jsr K.GetMemByID.A
jsr PS.SetMemOwnership Set Ownership
ldy #H.BIN.EXE.DS.SIZE+1 ldy #H.BIN.EXE.DS.SIZE+1
lda (ZPPtr4),y Load DS.SIZE HI lda (ZPPtr4),y Load DS.SIZE HI
tax tax
@ -307,9 +304,7 @@ PS.Init jsr BIN.Load.YA Y,A=filename full path
ldy #S.PS.hDS ldy #S.PS.hDS
sta (ZPPtr3),y save DS hMem in S.PS sta (ZPPtr3),y save DS hMem in S.PS
lda CORE.LastPSID Set Ownership jsr PS.SetMemOwnership Set Ownership
ldy #S.MEM.OWNERPID
sta (ZPMEMMGR),y
.2 ldy #H.BIN.EXE.SS.SIZE .2 ldy #H.BIN.EXE.SS.SIZE
lda (ZPPtr4),y Load SS.SIZE lda (ZPPtr4),y Load SS.SIZE
@ -335,9 +330,7 @@ PS.Init jsr BIN.Load.YA Y,A=filename full path
ldy #S.PS.hSS ldy #S.PS.hSS
sta (ZPPtr3),y save SS hMem in S.PS sta (ZPPtr3),y save SS hMem in S.PS
lda CORE.LastPSID Set Ownership jsr PS.SetMemOwnership Set Ownership
ldy #S.MEM.OWNERPID
sta (ZPMEMMGR),y
clc clc
.9 rts .9 rts
@ -357,9 +350,7 @@ PS.DupEnv.A jsr K.GetMemPtr.A
>STYA ZPPtr2 >STYA ZPPtr2
lda CORE.LastPSID Set this copy ownership jsr PS.SetMemOwnership Set Ownership
ldy #S.MEM.OWNERPID
sta (ZPMEMMGR),y
ldy #0 ldy #0
@ -387,6 +378,12 @@ PS.DupEnv.A jsr K.GetMemPtr.A
clc clc
.9 rts .9 rts
*-------------------------------------- *--------------------------------------
PS.SetMemOwnership
lda CORE.LastPSID
ldy #S.MEM.OWNERPID
sta (ZPMEMMGR),y
rts
*--------------------------------------
K.GetPSStatus.A jsr CORE.GetPSByID.A K.GetPSStatus.A jsr CORE.GetPSByID.A
bcs .9 bcs .9
>STYA ZPPtr1 >STYA ZPPtr1

View File

@ -3,6 +3,16 @@ PREFIX /A2OSX.BUILD
LOMEM $A00 LOMEM $A00
INC 1 INC 1
AUTO 6 AUTO 6
*--------------------------------------
* # FStat
* Return information about a hfile
* ## In :
* PUSHW = PTR to S.STAT buffer
* PUSHB = hFile
* ## Out :
*--------------------------------------
*jsr PFT.CheckNodeSTK
*/-------------------------------------- */--------------------------------------
* # Stat * # Stat
* Return information about a file * Return information about a file
@ -158,7 +168,7 @@ K.MkNod.YA jsr K.GetDevByName.YA Ptr1=NAME
rts rts
*/-------------------------------------- */--------------------------------------
* # MKFIFO * # MKFIFO
* return a S.FILE to a new FIFO * return a hFILE to a new FIFO
* ## IN: * ## IN:
* ## OUT: * ## OUT:
* CC = OK, CS = ERROR * CC = OK, CS = ERROR

View File

@ -280,7 +280,7 @@ K.FOpen.10 >LDYAI S.NODE.REG
bcs K.FOpen.9 bcs K.FOpen.9
>STYA ZPPtr1 >STYA ZPPtr1
stx hFILE stx .8+1
jsr STDIO.SetIOBUF jsr STDIO.SetIOBUF
bcs .98 bcs .98
@ -327,12 +327,12 @@ K.FOpen.10 >LDYAI S.NODE.REG
.30 ldy #S.NODE.T .30 ldy #S.NODE.T
lda #S.NODE.T.REG lda #S.NODE.T.REG
sta (ZPPtr1),y sta (ZPPtr1),y
lda hFILE .8 lda #$ff Self Modified
clc clc
rts CC rts CC
.98 pha save MLI error .98 pha save MLI error
lda hFILE lda .8+1
jsr K.FClose.A.1 jsr K.FClose.A.1
pla get back MLI error pla get back MLI error
sec sec
@ -341,7 +341,6 @@ K.FOpen.10 >LDYAI S.NODE.REG
K.FOpen.MODE .BS 1 K.FOpen.MODE .BS 1
K.FOpen.TYPE .BS 1 K.FOpen.TYPE .BS 1
K.FOpen.AUXTYPE .BS 2 K.FOpen.AUXTYPE .BS 2
hFILE .BS 1
*/-------------------------------------- */--------------------------------------
* # FClose.A * # FClose.A
* Close a file * Close a file
@ -448,9 +447,9 @@ K.FFlush.A jsr PFT.CheckNodeA
rts rts
*/------------------------------------- */-------------------------------------
* # FSeek * # FSeek
* Set the file-position indicator for hFILE
* ## In: * ## In:
* PUSHW = OffsetHi * PUSHW = Ptr to Offset (DWORD)
* PUSHW = OffsetLo
* PUSHB = From * PUSHB = From
* PUSHB = hFILE * PUSHB = hFILE
*\------------------------------------- *\-------------------------------------
@ -459,39 +458,44 @@ K.FSeek jsr PFT.CheckNodeSTK
jsr STDIO.GetRefNum jsr STDIO.GetRefNum
>PULLA FROM >PULLA FROM
tax tax
>PULLW K.FSeek.OFFSET >PULLW ZPPtr1
>PULLW K.FSeek.OFFSET+2 cpx #SYS.FSeek.END+1
bcs .98
txa
asl
tax
cpx #SYS.FSeek.SET jmp (.1,x)
bne .1 .1 .DA .10
stz K.MLI.PARAMS+2 .DA .20
.DA .30
* K.FSeek.SET
.10 stz K.MLI.PARAMS+2
stz K.MLI.PARAMS+3 stz K.MLI.PARAMS+3
stz K.MLI.PARAMS+4 stz K.MLI.PARAMS+4
bra .8 bra .8
.1 cpx #SYS.FSeek.CUR * K.FSeek.CUR
bne .2 .20 >MLICALL MLIGETMARK
>MLICALL MLIGETMARK
bcc .8 bcc .8
rts rts
.2 cpx #SYS.FSeek.END * K.FSeek.END
bne .98 .30 >MLICALL MLIGETEOF
>MLICALL MLIGETEOF
bcs .9 bcs .9
.8 ldx #0 .8 ldy #0
ldy #3 ldx #3 3 bytes, 24 bits!!!
clc clc
.81 lda K.MLI.PARAMS+2,x .81 lda K.MLI.PARAMS+2,y
adc K.FSeek.OFFSET,x adc (ZPPtr1),y
sta K.MLI.PARAMS+2,x sta K.MLI.PARAMS+2,y
inx iny
dey dex
bne .81 bne .81
bcs .99 Offset out of range! bcs .99 Offset out of range!
@ -505,24 +509,9 @@ K.FSeek jsr PFT.CheckNodeSTK
.99 lda #SYSMGR.ERRFTB .99 lda #SYSMGR.ERRFTB
sec sec
rts rts
*--------------------------------------
K.FSeek.OFFSET .BS 4
*/--------------------------------------
* # FTell.A
* ## In:
* A = hFILE
* ## Out:
* Y,A,X = Offset
*\--------------------------------------
K.FTell.A jsr PFT.CheckNodeA
K.FTell.A.1 jsr STDIO.GetRefNum
>MLICALL MLIGETMARK
bcs .9
>LDYA K.MLI.PARAMS+2
ldx K.MLI.PARAMS+4
.9 rts
*/-------------------------------------- */--------------------------------------
* # FEOF.A * # FEOF.A
* Test the end-of-file indicator for hFILE
* ## In: * ## In:
* A = hFILE * A = hFILE
* ## Out: * ## Out:
@ -533,27 +522,62 @@ K.FTell.A.1 jsr STDIO.GetRefNum
*\-------------------------------------- *\--------------------------------------
K.FEOF.A jsr PFT.CheckNodeA K.FEOF.A jsr PFT.CheckNodeA
jsr STDIO.GetRefNum jsr STDIO.GetRefNum
jsr K.FTell.A.1
>MLICALL MLIGETMARK
bcs .9 bcs .9
>STYA K.FEOF.A.MARK
stx K.FEOF.A.MARK+2 ldy #2
.1 lda K.MLI.PARAMS+2,y
sta K.FEOF.A.MARK,y
dey
bpl .1
>MLICALL MLIGETEOF >MLICALL MLIGETEOF
bcs .9 bcs .9
sec ldy #2
lda K.MLI.PARAMS+2
sbc K.FEOF.A.MARK .2 lda K.MLI.PARAMS+2,y
eor K.FEOF.A.MARK,y
bne .8 bne .8
lda K.MLI.PARAMS+3 dey
sbc K.FEOF.A.MARK+1 bpl .2
bne .8
lda K.MLI.PARAMS+4
sbc K.FEOF.A.MARK+2
.8 clc .8 clc
.9 rts .9 rts
K.FEOF.A.MARK .BS 3 K.FEOF.A.MARK .BS 3
*/-------------------------------------- */--------------------------------------
* # FTell
* Return the current value of the file-position indicator
* ## In:
* PUSHW = Ptr to Offset (DWORD)
* PUSHB = hFILE
* ## Out:
* Offset = Offset
*\--------------------------------------
K.FTell jsr PFT.CheckNodeSTK
>PULLA
jsr STDIO.GetRefNum
>PULLW ZPPtr1
>MLICALL MLIGETMARK
bcs .9
ldy #3
lda #0
sta (ZPPtr1),y
dey
.1 lda K.MLI.PARAMS+2,y
sta (ZPPtr1),y
dey
bpl .1
.9 rts
*/--------------------------------------
* # Remove.YA * # Remove.YA
*\-------------------------------------- *\--------------------------------------
K.Remove.YA jsr PFT.CheckPathYA K.Remove.YA jsr PFT.CheckPathYA

View File

@ -8,7 +8,7 @@ AUTO 6
* Convert String to 40 bits Float * Convert String to 40 bits Float
* ## In: * ## In:
* PUSHW PTR to target buffer (5 Bytes) * PUSHW PTR to target buffer (5 Bytes)
* PUSHW Source String (PSTR) * PUSHW Source String (C-Sring)
* ## Out: * ## Out:
*\-------------------------------------- *\--------------------------------------
K.AToF K.AToF
@ -67,6 +67,78 @@ K.AToL jsr PullPtr1Ptr2 PSTR in Ptr1,buffer in Ptr2
clc clc
rts rts
*-------------------------------------- *--------------------------------------
* Convert ASCBUF decimal to HEXBUF
*--------------------------------------
DEC2HEX stz HEXBUF
stz HEXBUF+1
stz HEXBUF+2
stz HEXBUF+3
ldx #$ff
.1 inx
lda ASCBUF,x
beq .8
lda HEXBUF+3 save HEXBUF for 4+1
pha
lda HEXBUF+2
pha
lda HEXBUF+1
pha
lda HEXBUF
pha
jsr HEXBUF.ROL HEXBUF * 2 -> HEXBUF
* bcs .9 overflow!!!
jsr HEXBUF.ROL HEXBUF * 4 -> HEXBUF
* bcs .9 overflow!!!
pla HEXBUF * 4 + HEXBUF -> HEXBUF
adc HEXBUF
sta HEXBUF
pla
adc HEXBUF+1
sta HEXBUF+1
pla
adc HEXBUF+2
sta HEXBUF+2
pla
adc HEXBUF+3
sta HEXBUF+3
* bcs .99 overflow!!!
jsr HEXBUF.ROL HEXBUF * 10 -> HEXBUF
* bcs .99 overflow!!!
lda ASCBUF,x
and #$0F
adc HEXBUF
sta HEXBUF
bcc .1
inc HEXBUF+1
bne .1
inc HEXBUF+2
bne .1
inc HEXBUF+3
bra .1
.8 rts
*.9 pla discard saved HEXBUF
* pla
* pla
* pla
*.99 rts
*--------------------------------------
HEXBUF.ROL asl HEXBUF
rol HEXBUF+1
rol HEXBUF+2
rol HEXBUF+3
rts
*--------------------------------------
* Convert HEXBUF to ASCBUF decimal padded with 0 * Convert HEXBUF to ASCBUF decimal padded with 0
*-------------------------------------- *--------------------------------------
HEX2DEC ldx #4 HEX2DEC ldx #4
@ -116,80 +188,6 @@ HEX2DEC ldx #4
rts rts
*-------------------------------------- *--------------------------------------
* Convert ASCBUF decimal to HEXBUF
*--------------------------------------
DEC2HEX stz HEXBUF
stz HEXBUF+1
stz HEXBUF+2
stz HEXBUF+3
lda ASCBUF
beq .8
ldx #0
.1 lda HEXBUF+3 save HEXBUF for 4+1
pha
lda HEXBUF+2
pha
lda HEXBUF+1
pha
lda HEXBUF
pha
jsr HEXBUF.ROL HEXBUF * 2 -> HEXBUF
* bcs .9 overflow!!!
jsr HEXBUF.ROL HEXBUF * 4 -> HEXBUF
* bcs .9 overflow!!!
pla HEXBUF * 4 + HEXBUF -> HEXBUF
adc HEXBUF
sta HEXBUF
pla
adc HEXBUF+1
sta HEXBUF+1
pla
adc HEXBUF+2
sta HEXBUF+2
pla
adc HEXBUF+3
sta HEXBUF+3
* bcs .99 overflow!!!
jsr HEXBUF.ROL HEXBUF * 10 -> HEXBUF
* bcs .99 overflow!!!
inx
lda ASCBUF,x
and #$0F
adc HEXBUF
sta HEXBUF
bcc .2
inc HEXBUF+1
bne .2
inc HEXBUF+2
bne .2
inc HEXBUF+3
.2 cpx ASCBUF
bne .1
.8 rts
*.9 pla discard saved HEXBUF
* pla
* pla
* pla
*.99 rts
*--------------------------------------
HEXBUF.ROL asl HEXBUF
rol HEXBUF+1
rol HEXBUF+2
rol HEXBUF+3
rts
*--------------------------------------
HEXBUF .BS 4 32 bits max HEXBUF .BS 4 32 bits max
BCDBUF .BS 5 5, enough to handle 10 digits (32bits) BCDBUF .BS 5 5, enough to handle 10 digits (32bits)
ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295) ASCBUF .BS 12 LEN + sign + 10 digits ($FFFFFFFF=4.294.967.295)

View File

@ -161,7 +161,7 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7)
clc clc
rts rts
*/-------------------------------------- */--------------------------------------
* # K.CTime2Time * # CTime2Time
* Convert CTIME to S.TIME * Convert CTIME to S.TIME
* ## In : * ## In :
* PUSHW = Dst PTR To S.TIME * PUSHW = Dst PTR To S.TIME