Kernel version 0.8 : DIR API work in progress, JMP table reorg

This commit is contained in:
Rémy GIBERT 2016-09-20 08:17:20 +02:00
parent 2762254eef
commit 951b7b3ea3
9 changed files with 335 additions and 576 deletions

View File

@ -164,10 +164,12 @@ SYS.FreeStockObject .EQ $0E
SYS.NewPStrYA .EQ $10
SYS.PStrCpy .EQ $12
SYS.PStrCat .EQ $14
SYS.PStrUprYA .EQ $16
SYS.PStrMatch .EQ $16
SYS.PStrUprYA .EQ $18
SYS.PStrLwrYA .EQ $1A
SYS.PStr2StrArrayYA .EQ $1A
SYS.PStr2StrArrayYA .EQ $1E
*--------------------------------------
SYS.LoadDrvYA .EQ $20
SYS.LoadLibYA .EQ $22
@ -190,10 +192,10 @@ SYS.UnsetEnvYA .EQ $3E
*--------------------------------------
SYS.MLICreateFile .EQ $40
SYS.MLICreateDirYA .EQ $44
SYS.MLIDestroyYA .EQ $48
SYS.MLIRename .EQ $4A
SYS.MLISetFileInfo .EQ $4C
@ -219,7 +221,7 @@ SYS.MLISetEOF .EQ $6C
SYS.MLIGetEOFA .EQ $70
SYS.MLISetBuf .EQ $72
SYS.MLIGetBuf .EQ $74
SYS.MLIGetTime .EQ $76
SYS.MLIAllocIRQ .EQ $78
SYS.MLIDeallocIRQ .EQ $7A
@ -512,8 +514,8 @@ S.STAT.MTIME .EQ 26 DWORD
S.STAT.CTIME .EQ 30 DWORD
S.STAT.BLOCKS .EQ 34 DWORD
S.STAT.BLKSIZE .EQ 38 WORD
S.STAT.TYPE .EQ 40
S.STAT.AUXTYPE .EQ 41
S.STAT.TYPE .EQ 40 BYTE
S.STAT.AUXTYPE .EQ 41 WORD
*
S.STAT .EQ 43
*--------------------------------------
@ -543,8 +545,11 @@ S.DIR.F .EQ 1
S.DIR.F.NOMORE .EQ $80
S.DIR.PRODOS.REF .EQ 2
S.DIR.PRODOS.IOBUF .EQ 3
S.DIR.PRODOS .EQ 4
S.DIR.PRODOS.EL .EQ 4
S.DIR.PRODOS.EPB .EQ 5
S.DIR.PRODOS.FC .EQ 6
*
S.DIR.PRODOS .EQ 8
* no S.DIR
*--------------------------------------
* S.DIRENT for ReadDir

View File

@ -47,9 +47,12 @@ S.FILEINFO.ACCESS.RN .EQ $40
S.FILEINFO.ACCESS.D .EQ $80
S.FILEINFO.ACCESS.FULL .EQ $C3
S.FILEINFO.TYPE .EQ $04
S.FILEINFO.TYPE.DIR .EQ $0F
S.FILEINFO.TYPE.SYS .EQ $FF
S.FILEINFO.AUXTYPE .EQ $05
S.FILEINFO.TOTALBLOCKS .EQ $05
S.FILEINFO.STORETYPE .EQ $07
S.FILEINFO.STORETYPE.DIR .EQ $0D
S.FILEINFO.BLOCKSUSED .EQ $08
S.FILEINFO.MODDATE .EQ $0A
S.FILEINFO.MODTIME .EQ $0C

View File

@ -219,20 +219,251 @@ S.READDIRA.ROOT stz MLICALL.PARAMS+1 All Volumes
>LDYA ZPQuickPtr4
clc
rts
*--------------------------------------
S.READDIRA.DIR ldy #S.DIR.PRODOS.REF
lda (ZPQuickPtr1),y
sta MLICALL.PARAMS+1
S.READDIRA.DIR
ldx #3
ldy #S.STAT.TYPE
>PUSHWI 512 Get a 512 bytes buffer for reading dir...
>PUSHBI 0
jsr S.GetMem
bcs .99
stx S.READDIRA.hMem
.7 lda MLICALL.PARAMS+S.FILEINFO.TYPE,x
sta (ZPQuickPtr3),y
iny
dex
bne .7
>STYA MLICALL.PARAMS+2 For reading
pha
tya
* clc CC from S.GetMem
adc #4 Skip 4 bytes linked list
tay
pla
adc #0
>STYA ZPQuickPtr2 PTR to Buffer for PASS #1
>STYA ZPQuickPtr3 PTR to Buffer for PASS #2
>LDYAI 512
>STYA MLICALL.PARAMS+4
>MLICALL MLIREAD Read A block from directory
bcs .98
ldy #S.DIR.PRODOS.EL Check if first run....
lda (ZPQuickPtr1),y
bne .2 no, we have all we need....
ldy #$23+3
.1 lda (ZPQuickPtr2),y Get EntryLength.... From Block
sta EntryLength-$23,y
dey
bpl .1
bra .4
.98 pha
lda S.READDIRA.hMem
jsr S.FreeMemA
pla
sec
.99 rts
.2 ldy #S.DIR.PRODOS.EL+3
.3 lda(ZPQuickPtr1),y get this session parameters from S.DIR
sta EntryLength-S.DIR.PRODOS.EL,y
dey
bpl .3
.4 ldx EntryCount
cpx EntryPerBlock
lda EntryCount+1
sbc #0
bcc .5 We have less than EPB to read
ldx EntryPerBlock
.5 stx EntryCountIB
stz EntryCount2Return
lda #1 For Ending 0
sta BufSize
stz BufSize+1
* pass #1 compute BufSize.....
.51 lda (ZPQuickPtr2) X = EntryCount In This Block
beq .7 Free slot....goto next
jsr S.READDIR.CHK
.7 lda ZPQuickPtr2
clc
adc EntryLength
sta ZPQuickPtr2
bcc .71
inc ZPQuickPtr2+1
.71 dex
bne .51
* pass #2 Fill Buffer...
>PUSHW BufSize Get a BufSize bytes buffer for storing results
>PUSHBI S.MEM.F.INIT0 make sure 0 fiiled
jsr S.GetMem
bcs .98
stx S.READDIRA.hDIR
>STYA ZPQuickPtr4
.72 jsr DecEntryCount
bcc .80 no more file to list...
lda (ZPQuickPtr3)
beq .78
jsr S.READDIRA.ADD
.78 lda ZPQuickPtr3
clc
adc EntryLength
sta ZPQuickPtr3
bcc .79
inc ZPQuickPtr3+1
.79 dec EntryCountIB
beq .72
.80
* lda #0 S.MEM.F.INIT0 already did this
* sta (ZPQuickPtr4) Ending 0
ldy #S.DIR.PRODOS.EL+3
.8 lda EntryLength-S.DIR.PRODOS.EL,y Store back this session prameters to S.DIR
sta (ZPQuickPtr1),y
dey
bpl .8
jsr .98 Discard READBUFFER
lda S.READDIRA.hDIR
tax
jsr S.GetMemPtrA
clc
rts
*--------------------------------------
S.READDIR.CHK tay save LEN
and #$F0 get storage_type
cmp #$E0 directory header ?
bne .1
inc EntryCount2Return yes, return 2 ".."
lda #S.STAT+3 add "#.." string + S.STAT
jsr S.READDIRA.AddBufSize
bra .2 go add "." Entry
.1 cmp #$F0 Volume header ?
bne .3
.2 lda #S.STAT+2 add "#." string + S.STAT
bra .4
.3 tya
and #$F get filename len
sec Add 1 for LEN
adc #S.STAT
.4 jsr S.READDIRA.AddBufSize
inc EntryCount2Return
rts
*--------------------------------------
S.READDIRA.ADD and #$F0
cmp #$F0 Volume header ?
bne .10
lda #1
jsr S.READDIRA.AddToBuf
lda #'.'
jsr S.READDIRA.AddToBuf
ldy #$25 total_blocks
lda (ZPQuickPtr3),y
tax
iny
lda (ZPQuickPtr3),y
ldy #S.STAT.BLOCKS+1
sta (ZPQuickPtr4),y
dey
txa
sta (ZPQuickPtr4),y
.10 cmp #$E0 directory header ?
bne .20
lda #2
jsr S.READDIRA.AddToBuf
lda #'.'
jsr S.READDIRA.AddToBuf
jsr S.READDIRA.AddToBuf
.20 cmp #$D0 directory ?
bne .30
lda (ZPQuickPtr3)
and #$0F get filename len
tax
jsr S.READDIRA.AddToBuf
ldy #1
.21 lda (ZPQuickPtr3),y
jsr S.READDIRA.AddToBuf
iny
dex
bne .21
.30
.80 lda ZPQuickPtr4
clc
adc #S.STAT
sta ZPQuickPtr4
bcc .8
inc ZPQuickPtr4+1
.8 rts
*--------------------------------------
S.READDIRA.AddBufSize
clc
adc BufSize
sta BufSize
bcc .9
inc BufSize+1
.9 rts
*--------------------------------------
S.READDIRA.AddToBuf
sta (ZPQuickPtr4)
inc ZPQuickPtr4
bne .8
inc ZPQuickPtr4+1
.8 rts
*--------------------------------------
DecEntryCount lda EntryCount
sec
sbc #1
sta EntryCount
bcs .9 CS, 0 or more
lda EntryCount+1
sbc #0
sta EntryCount+1 CC, we reached $ffff
.9 rts
*--------------------------------------
S.READDIRA.hMem .BS 1
S.READDIRA.hDIR .BS 1
*--------------------------------------
* In :
* A = hDIR
*--------------------------------------
@ -259,19 +490,24 @@ S.CLOSEDIRA.1 ldy #S.DIR.PRODOS.REF
*--------------------------------------
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
lda #S.FILEINFO.ACCESS.FULL
sta MLICALL.PARAMS+S.FILEINFO.ACCESS
lda #S.FILEINFO.TYPE.DIR
sta MLICALL.PARAMS+S.FILEINFO.TYPE
lda #S.FILEINFO.STORETYPE.DIR
sta MLICALL.PARAMS+S.FILEINFO.STORETYPE
>MLICALL MLICREATE
rts
*--------------------------------------
hONLINE .BS 1
hDIRENT .BS 1
BufSize .BS 2
EntryCount .BS 1
EntryLength .BS 1
EntryPerBlock .BS 1
EntryCount .BS 2
EntryCountIB .BS 1
EntryCount2Return .BS 1
VolName .BS 17
*--------------------------------------
MAN

View File

@ -198,432 +198,6 @@ S.LoadFile.hMem .BS 1
S.LoadFile.Mem .BS 2
S.LoadFile.Len .BS 2
*--------------------------------------
* S.ListDirInitYA
* in :
* Y,A = PSTR /DIR,/DIR/*.?s
* out :
* A = hMem of Dir Listing
*--------------------------------------
S.ListDirInitYA >STYA ZPQuickPtr3 Store path
lda (ZPQuickPtr3)
tay
ldx #0
.1 lda (ZPQuickPtr3),y reverse read path until '/' found
cmp #'/'
beq .2
inx
dey
bne .1
.2 stx TmpFileName store file pattern len in buffer
txa
beq .4 no pattern ?
lda (ZPQuickPtr3)
tay
.3 lda (ZPQuickPtr3),y
sta TmpFileName,x
dey
dex
bne .3
tya
sta (ZPQuickPtr3) remove pattern from path
.4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct
>PUSHBI S.MEM.F.INIT0 reset all bytes
jsr S.GetMem
bcs .99
stx S.ListDirInitYA.hDir
>STYA ZPQuickPtr4 Store LISTDIR Struct
>LDYA ZPQuickPtr3
jsr S.NewPStrYA
bcs .99
txa
ldy #S.LISTDIR.hPATH
sta (ZPQuickPtr4),y
lda TmpFileName
beq .5
>LDYAI TmpFileName
jsr S.NewPStrYA
bcs .99
txa
ldy #S.LISTDIR.hPATTERN
sta (ZPQuickPtr4),y
.5 lda (ZPQuickPtr3)
cmp #1 length = 1 ? ('/')
bne .6
jsr S.ListDirInitAV
bcs .98
lda S.ListDirInitYA.hDir
rts
.6 jsr S.ListDirInitAD
bcs .98
lda S.ListDirInitYA.hDir
rts
.98 pha
lda S.ListDirInitYA.hDir Discard S.LISTDIR
jsr S.ListDirCloseA
pla
.99 sec
rts
*--------------------------------------
S.ListDirInitYA.hDir .BS 1
*--------------------------------------
S.ListDirInitAV >PUSHWI 256
>PUSHBI 0
jsr S.GetMem
bcs .99
>PUSHYA push buffer for online call
txa
sta (ZPQuickPtr4) save hONLINE buffer
>PUSHBI 0 All devices
jsr S.MLIOnline
bcs .98
ldy #S.LISTDIR.ONLINEPTR
* lda #0 make index point first Entry
* sta (ZPQuickPtr4),y
clc
rts
.98 lda (ZPQuickPtr4)
jsr S.FreeMemA
.99 sec
rts
*--------------------------------------
S.ListDirInitAD
* lda #0
* sta (ZPQuickPtr4) reset hONLINE
>LDYA ZPQuickPtr3 Open DIR
jsr S.MLIOpenYA
bcs .99
ldy #S.LISTDIR.REFNUM
sta (ZPQuickPtr4),y save ref_num
txa
ldy #S.LISTDIR.hIOBUF
sta (ZPQuickPtr4),y save ProDOS IO buffer hMem
>PUSHWI 512 get Read buffer
>PUSHBI 0
jsr S.GetMem
bcs .99
txa
ldy #S.LISTDIR.hREADBUF save Read Buffer hMem
sta (ZPQuickPtr4),y
jsr S.ListDirReadBlock
bcs .99
>STYA ZPQuickPtr1
ldy #$23 get entry_length
lda (ZPQuickPtr1),y
ldy #S.LISTDIR.EL
sta (ZPQuickPtr4),y
ldy #$24 get entry_per_block
lda (ZPQuickPtr1),y
ldy #S.LISTDIR.EPB
sta (ZPQuickPtr4),y
ldy #$25 get File_count LO
lda (ZPQuickPtr1),y
clc
adc #1 Add 1 for VOL/DIR Header
ldy #S.LISTDIR.FC
sta (ZPQuickPtr4),y
ldy #$26 get File_count HI
lda (ZPQuickPtr1),y
adc #0
ldy #S.LISTDIR.FC+1
sta (ZPQuickPtr4),y
* ldy #S.LISTDIR.FI
* lda #0
* sta (ZPQuickPtr4),y
* iny
* sta (ZPQuickPtr4),y set FI to $0000
clc
.99 rts
*--------------------------------------
* S.DirListNextA
* A = S.LISTDIR hMEM
* out :
* A = hMem To Dir Entry
*--------------------------------------
S.ListDirNextA jsr S.GetMemPtrA Get PTR to S.LISTDIR
>STYA R.CX
lda (R.CX) Online Data?
beq S.ListDirNextAD no,list files
*--------------------------------------
S.ListDirNextAV jsr S.GetMemPtrA
>STYA ZPQuickPtr1 ZPQuickPtr1 = Online DATA
.10 ldy #S.LISTDIR.ONLINEPTR
lda (R.CX),y
cmp #16
beq .9
inc
sta (R.CX),y
dec
asl
asl
asl
asl
tay
lda (ZPQuickPtr1),y
and #$0F
beq .10
sta TmpFileName
ldx #0
.1 iny
inx
lda (ZPQuickPtr1),y
sta TmpFileName,x
cpx TmpFileName
bne .1
>PUSHWI 16
>PUSHBI 0
jsr S.GetMem
bcs .9
>STYA ZPQuickPtr2
ldy #15
.2 lda TmpFileName,y
sta (ZPQuickPtr2),y
dey
bpl .2
lda (ZPQuickPtr2) Mark Record as "VOL"
ora #$C0
sta (ZPQuickPtr2)
txa Get back hMem of Volume.Name
clc
rts
.9 sec
rts
*--------------------------------------
S.ListDirNextAD stz S.ListDirNext.hRec Reset Return Record hMem
ldy #S.LISTDIR.FI File Index = File count ?
lda (R.CX),y
ldy #S.LISTDIR.FC
cmp (R.CX),y
bne .1
ldy #S.LISTDIR.FI+1
lda (R.CX),y
ldy #S.LISTDIR.FC+1
cmp (R.CX),y
bne .1
sec yes, exit no more file
rts
*--------------------------------------
.1 ldy #S.LISTDIR.EIB Entry Index in block = Entry per block ?
lda (R.CX),y
ldy #S.LISTDIR.EPB
cmp (R.CX),y
bne .2
jsr S.ListDirReadBlock
bcc .3
rts
*--------------------------------------
.2 ldy #S.LISTDIR.hREADBUF
lda (R.CX),y
jsr S.GetMemPtrA
.3 >STYA R.AX R.AX = READ BUFFER
ldy #S.LISTDIR.BLKPTR
lda (R.CX),y
clc
adc R.AX
sta R.AX
iny
lda (R.CX),y
adc R.AX+1
sta R.AX+1
lda (R.AX) Is is a deleted file ? (storage_type=0)
and #$F0
beq .5
cmp #$F0 Volume header ?
beq .30 yes, do not filter
cmp #$E0 Directory header ?
beq .30 yes, do not filter
ldy #S.LISTDIR.hPATTERN any filter ?
lda (R.CX),y
beq .30
jsr S.GetMemPtrA
>PUSHYA push Filter PTR
lda (R.AX)
and #$0F
sta TmpFileName
tay
.31 lda (R.AX),y
sta TmpFileName,y
dey
bne .31
>PUSHWI TmpFileName push Filename PTR
jsr S.PStrMatch
bcs .5 no match
.30 ldy #S.LISTDIR.EL Get Entry length
lda (R.CX),y
tay
lda #0
>PUSHYA Get an entry_length buffer
>PUSHBI 0
jsr S.GetMem
bcs .99
>STYA R.BX R.BX = DEST RECORD
stx S.ListDirNext.hRec
ldy #S.LISTDIR.EL
lda (R.CX),y
tay
dey
.4 lda (R.AX),y
sta (R.BX),y
dey
bpl .4
.5 ldy #S.LISTDIR.EIB Set ENTRY INDEX IN BLOCK +=1
lda (R.CX),y
inc
sta (R.CX),y
ldy #S.LISTDIR.EL Set BLOCK PTR +=entry_length
lda (R.CX),y
ldy #S.LISTDIR.BLKPTR
clc
adc (R.CX),y
sta (R.CX),y
iny
lda (R.CX),y
adc #0
sta (R.CX),y
lda (R.AX)
and #$E0 is storage_type = $F or $E ?
cmp #$E0 yes, do NOT increase FI
bne .6
ldy #S.LISTDIR.FI Increase FILE INDEX
lda (R.CX),y
inc
sta (R.CX),y
bne .6
iny
lda (R.CX),y
inc
sta (R.CX),y
.6 lda S.ListDirNext.hRec
bne .8
jmp S.ListDirNextAD Nothing to return, start over for next file entry
.8 clc
rts
.99 sec
rts
*--------------------------------------
* S.ListDirReadBlock
* In :
* CX = LISTDIR
* Out :
* Y,A = READ BUFFER
*--------------------------------------
S.ListDirReadBlock
ldy #S.LISTDIR.REFNUM
lda (R.CX),y get ref_num
sta MLICALL.PARAMS+1
ldy #S.LISTDIR.hREADBUF
lda (R.CX),y get READ BUFFER
jsr S.GetMemPtrA
>STYA MLICALL.PARAMS+2
>LDYAI 512
>STYA MLICALL.PARAMS+4
>MLICALL MLIREAD
bcs .9
ldy #S.LISTDIR.BLKPTR set BLKPTR to $0004
lda #4
sta (R.CX),y
iny
lda #0
sta (R.CX),y
ldy #S.LISTDIR.EIB set EIB to 0
sta (R.CX),y
>LDYA MLICALL.PARAMS+2
.9 rts
*--------------------------------------
S.ListDirNext.hRec .BS 1
*--------------------------------------
* S.DirListCloseA
* in :
* A = hS.LISTDIR
*--------------------------------------
S.ListDirCloseA pha
jsr S.GetMemPtrA
>STYA ZPQuickPtr1
ldy #S.LISTDIR.REFNUM
lda (ZPQuickPtr1),y
beq .1
jsr S.MLICloseA
bcs * If Close Failed, we cannot free IOBUF
.1 ldy #S.LISTDIR.hIOBUF
lda (ZPQuickPtr1),y
beq .2
jsr S.FreeMemA
.2 ldy #S.LISTDIR.hREADBUF
lda (ZPQuickPtr1),y
beq .3
jsr S.FreeMemA
.3 ldy #S.LISTDIR.hONLINE
lda (ZPQuickPtr1),y
beq .4
jsr S.FreeMemA
.4 ldy #S.LISTDIR.hPATTERN
lda (ZPQuickPtr1),y
beq .5
jsr S.FreeMemA
.5 ldy #S.LISTDIR.hPATH
lda (ZPQuickPtr1),y
beq .6
jsr S.FreeMemA
.6 pla
jsr S.FreeMemA
clc
rts
*--------------------------------------
TmpFileName .BS 16
*--------------------------------------
MAN

View File

@ -12,18 +12,18 @@ KERNEL.SYSCALL .DA S.GetMem $00
.DA S.GetMemPtrA
.DA S.GetMemByIDA
.DA S.GetMemByNameYA
.DA 0
.DA 0
.DA 0
.DA S.LoadStockObjectYA
.DA S.GetStockObjectA
.DA S.FreeStockObject
*--------------------------------------
.DA S.NewPStrYA $10
.DA S.PStrCpy
.DA S.PStrCat
.DA S.PStrMatch
.DA S.PStrUprYA
.DA 0
.DA S.PStrLwrYA
.DA 0
.DA S.PStr2StrArrayYA
.DA 0
.DA 0
*--------------------------------------
.DA S.LoadDrvYA $20
.DA S.LoadLibYA
@ -45,17 +45,17 @@ KERNEL.SYSCALL .DA S.GetMem $00
*--------------------------------------
.DA S.MLICreateFile $40
.DA 0
.DA S.MLICreateDirYA
.DA 0
.DA S.MLIDestroyYA
.DA S.MLIRename
.DA 0
.DA 0
.DA 0
.DA S.MLISetFileInfo
.DA 0
*--------------------------------------
.DA S.MLIGetFileInfoYA $50
.DA S.MLIOnline
.DA 0
.DA S.MLISetPrefixYA
.DA 0
.DA 0
.DA S.MLIGetPrefixYA
.DA 0
@ -65,19 +65,19 @@ KERNEL.SYSCALL .DA S.GetMem $00
.DA S.MLIRead
.DA S.MLIWrite
.DA S.MLICloseA
.DA S.MLIFlushA
.DA S.MLISetMark
.DA S.MLIGetMarkA
.DA S.MLISetEOF
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.MLIGetEOFA $70
.DA S.MLISetBuf
.DA S.MLIGetBuf
.DA S.MLIGetTime
.DA S.MLIAllocIRQ
.DA S.MLIDeallocIRQA
.DA S.MLIReadBlock
.DA S.MLIWriteBlock
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA S.GetDevByIDA $80
.DA 0
@ -102,9 +102,9 @@ KERNEL.SYSCALL .DA S.GetMem $00
.DA S.GetFullPathYA
.DA S.LoadFileYA
.DA 0
.DA S.ListDirInitYA
.DA S.ListDirNextA
.DA S.ListDirCloseA
.DA 0
.DA 0
.DA 0
*--------------------------------------
.DA 0 $B0
.DA 0
@ -174,10 +174,10 @@ KERNEL.SYSCALL.FLAGS
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA 0
.DA $80
.DA $80
.DA $80
.DA $80
*--------------------------------------
.DA 0 $30
.DA 0

View File

@ -405,6 +405,12 @@ S.GetMemByNameYA
.9 sec
rts
*--------------------------------------
S.LoadStockObjectYA
*--------------------------------------
S.GetStockObjectA
*--------------------------------------
S.FreeStockObject
*--------------------------------------
S.SetLoMem
clc
rts

View File

@ -12,28 +12,10 @@ S.MLICreateFile >PULLW MLICALL.PARAMS+1
>PULLB MLICALL.PARAMS+4 File type
>PULLW MLICALL.PARAMS+5 Aux type
lda #$01 Storage=Standard Files
bra S.MLICreate
*--------------------------------------
S.MLICreateDirYA
>STYA MLICALL.PARAMS+1
lda #$C3
sta MLICALL.PARAMS+3 Access
lda #$0F
sta MLICALL.PARAMS+4 type=Directory
lda #$0D Storage=Linked List
S.MLICreate sta MLICALL.PARAMS+7
sta MLICALL.PARAMS+7
>MLICALL MLICREATE
rts
*--------------------------------------
S.MLIDestroyYA >STYA MLICALL.PARAMS+1
>MLICALL MLIDESTROY
rts
*--------------------------------------
S.MLIRename >PULLW MLICALL.PARAMS+3
>PULLW MLICALL.PARAMS+1
>MLICALL MLIRENAME
rts
*--------------------------------------
* S.MLISetFileInfo
*--------------------------------------
S.MLISetFileInfo
@ -70,11 +52,6 @@ S.MLIOnline >PULLB MLICALL.PARAMS+1
>MLICALL MLIONLINE
rts
*--------------------------------------
S.MLISetPrefixYA
>STYA MLICALL.PARAMS+1
>MLICALL MLISETPREFIX
rts
*--------------------------------------
S.MLIGetPrefixYA
>STYA MLICALL.PARAMS+1
>MLICALL MLIGETPREFIX
@ -162,28 +139,6 @@ S.MLICloseA sta MLICALL.PARAMS+1
>MLICALL MLICLOSE
rts
*--------------------------------------
S.MLIFlushA sta MLICALL.PARAMS+1
>MLICALL MLIFLUSH
rts
*--------------------------------------
S.MLISetMark
*--------------------------------------
* S.MLIGetMarkA
* in :
* A = ref_num
* out :
* Y,A,X = EOF
*--------------------------------------
S.MLIGetMarkA sta MLICALL.PARAMS+1
>MLICALL MLIGETMARK
bcs .9
>LDYA MLICALL.PARAMS+2
ldx MLICALL.PARAMS+4
clc
.9 rts
*--------------------------------------
S.MLISetEOF
*--------------------------------------
* S.MLIGetEOF
* in :
* A = ref_num
@ -198,32 +153,6 @@ S.MLIGetEOFA sta MLICALL.PARAMS+1
clc
.9 rts
*--------------------------------------
S.MLISetBuf clc
rts
*--------------------------------------
S.MLIGetBuf clc
rts
*--------------------------------------
S.MLIGetTime >MLICALL MLIGETTIME
rts
*--------------------------------------
S.MLIAllocIRQ >PULLW MLICALL.PARAMS+2
>MLICALL MLIALLOCIRQ
bcs .9
lda MLICALL.PARAMS+1
.9 rts
*--------------------------------------
S.MLIDeallocIRQA
sta MLICALL.PARAMS+1
>MLICALL MLIDEALLOCIRQ
rts
*--------------------------------------
S.MLIReadBlock clc
rts
*--------------------------------------
S.MLIWriteBlock clc
rts
*--------------------------------------
MAN
SAVE SYS/KERNEL.S.MLI
LOAD SYS/KERNEL.S

View File

@ -93,30 +93,6 @@ S.PStrCat >PULLW ZPQuickPtr2 save DST
clc
rts
*--------------------------------------
* S.PStrUpr
* IN:
* Y,A = PTR to String (PSTRING)
* OUT:
* Uppercased String in Buffer
*--------------------------------------
S.PStrUprYA >STYA ZPQuickPtr1
lda (ZPQuickPtr1)
tay
.1 lda (ZPQuickPtr1),y convert to UPPERCASE
cmp #'a'
bcc .2
cmp #'z'+1
bcs .2
eor #$20
sta (ZPQuickPtr1),y
.2 dey
bne .1
clc
rts
*--------------------------------------
* S.PStrMatch
* IN:
* PULLB = PTR to String (PSTRING)
@ -191,6 +167,36 @@ S.PStrMatch >PULLW ZPQuickPtr2 pull String
.9 sec
rts
*--------------------------------------
* S.PStrUprYA
* S.PStrLwrYA
* IN:
* Y,A = PTR to String (PSTRING)
* OUT:
* Uppercased/lowercased String in Buffer
*--------------------------------------
S.PStrUprYA ldx #0
.HS 2C bit abs
S.PStrLwrYA ldx #2
>STYA ZPQuickPtr1
lda (ZPQuickPtr1)
tay
.1 lda (ZPQuickPtr1),y
cmp S.PstrUprLwr,x
bcc .2
cmp S.PstrUprLwr+1,x
bcs .2
eor #$20
sta (ZPQuickPtr1),y
.2 dey
bne .1
clc
rts
*--------------------------------------
S.PstrUprLwr .AS "azAZ"
*--------------------------------------
* S.PStr2StrArrayYA
* In :
* Y,A = PTR to String

View File

@ -77,6 +77,7 @@ A2osX.D001.END .EQ *
A2osX.D002 .EQ *
.PH $D000
.INB SYS/KERNEL.S.REL
.INB SYS/KERNEL.S.TIME
.EP
A2osX.D002.END .EQ *
*--------------------------------------
@ -93,7 +94,6 @@ A2osX.E000 .EQ *
.INB SYS/KERNEL.S.TSK
.INB SYS/KERNEL.S.PS
*--------------------------------------
.INB SYS/KERNEL.S.TIME
.INB SYS/KERNEL.S.PFT
.INB SYS/KERNEL.S.FILE
.INB SYS/KERNEL.S.DIR