From 951b7b3ea326dcf6fc1eebc8569af662f1c55d98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Tue, 20 Sep 2016 08:17:20 +0200 Subject: [PATCH] Kernel version 0.8 : DIR API work in progress, JMP table reorg --- INC/A2osX.I.txt | 25 ++- INC/PRODOS.I.txt | 3 + SYS/KERNEL.S.DIR.txt | 266 +++++++++++++++++++++++++-- SYS/KERNEL.S.FIO.txt | 426 ------------------------------------------- SYS/KERNEL.S.JMP.txt | 56 +++--- SYS/KERNEL.S.MEM.txt | 6 + SYS/KERNEL.S.MLI.txt | 73 +------- SYS/KERNEL.S.STR.txt | 54 +++--- SYS/KERNEL.S.txt | 2 +- 9 files changed, 335 insertions(+), 576 deletions(-) diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 6fedfd64..415a67f6 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -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 diff --git a/INC/PRODOS.I.txt b/INC/PRODOS.I.txt index 2b4ffa69..75eac668 100644 --- a/INC/PRODOS.I.txt +++ b/INC/PRODOS.I.txt @@ -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 diff --git a/SYS/KERNEL.S.DIR.txt b/SYS/KERNEL.S.DIR.txt index 92f902f3..f76e0dc1 100644 --- a/SYS/KERNEL.S.DIR.txt +++ b/SYS/KERNEL.S.DIR.txt @@ -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 diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 2d304341..10f261da 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -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 diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 3d6c5349..43a00eac 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -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 diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 19b3133a..d8e47a86 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -405,6 +405,12 @@ S.GetMemByNameYA .9 sec rts *-------------------------------------- +S.LoadStockObjectYA +*-------------------------------------- +S.GetStockObjectA +*-------------------------------------- +S.FreeStockObject +*-------------------------------------- S.SetLoMem clc rts diff --git a/SYS/KERNEL.S.MLI.txt b/SYS/KERNEL.S.MLI.txt index 6ed8cd35..88ade2b3 100644 --- a/SYS/KERNEL.S.MLI.txt +++ b/SYS/KERNEL.S.MLI.txt @@ -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 diff --git a/SYS/KERNEL.S.STR.txt b/SYS/KERNEL.S.STR.txt index 97dcb33d..b46c6503 100644 --- a/SYS/KERNEL.S.STR.txt +++ b/SYS/KERNEL.S.STR.txt @@ -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 diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 389c121a..3b98f332 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -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