SEARCH_RECORD_IN_DIR_CACHE

допилить переключение страницы кэша при достижении конца директории (напоролись на ноль)
This commit is contained in:
Tolik 2026-01-13 22:01:15 +10:00
parent e8cf44ae6b
commit ef258143e7
8 changed files with 158 additions and 128 deletions

View File

@ -50,7 +50,7 @@ CLOSE_FN: LD (.TMP),A
; ;
LD L,(IY+_sFM.HANDLE) LD L,(IY+_sFM.HANDLE)
LD H,(IY+_sFM.HANDLE+1) LD H,(IY+_sFM.HANDLE+1)
CALL LOADDIR.Custom ; [ ] big dir CALL LOADDIR.Custom ; [ ] big dir ;!FIXIT check error
; [ ] big dir ; [ ] big dir
;!TODO ®â¬®â âì ªíè ¤® ­ã¦­®£® record index? ;!TODO ®â¬®â âì ªíè ¤® ­ã¦­®£® record index?
; ;

View File

@ -18,7 +18,7 @@ DEL_FN: ; Current Dir 15/10/23
; ;
CALL CHECK_NAME CALL CHECK_NAME
RET Z RET Z
; ;!FIXIT check error
CALL LOADDIR ; [ ] big dir ; !FIXIT ¤ã¡«¨àã¥â ¤¥©á⢨¥ ¨§ SetPath_GetName? CALL LOADDIR ; [ ] big dir ; !FIXIT ¤ã¡«¨àã¥â ¤¥©á⢨¥ ¨§ SetPath_GetName?
CALL SEARCH.File CALL SEARCH.File
RET C RET C

View File

@ -24,10 +24,15 @@ F_FIRST_FN: CALL F_FIRST.INIT_VARS
; ;
F_FIRST: CALL .INIT_VARS F_FIRST: CALL .INIT_VARS
.begin: CALL SetPath_GetName ;!FIXIT ­¥ ¤ã¡«¨àã¥âáï «¨ ¯®á«¥ DIR_PATH_CHECK ¢ëè¥? .begin: CALL SetPath_GetName ;!FIXIT ­¥ ¤ã¡«¨àã¥âáï «¨ ¯®á«¥ DIR_PATH_CHECK ¢ëè¥?
;CALL LOADDIR
RET C RET C
;
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
AND A
CALL NZ,LOADDIR ;!FIXIT check error
;
CALL MASK CALL MASK
RET C RET C
;
LD A,(.SEARCH_ATTRIBUT) LD A,(.SEARCH_ATTRIBUT)
CALL SEARCH.Custom CALL SEARCH.Custom
RET C RET C

View File

@ -16,9 +16,10 @@ READ: LD (.R_POINT),HL
LD A,(IY+_sFM.DRIVE) LD A,(IY+_sFM.DRIVE)
CALL OPENDSK CALL OPENDSK
JP C,.ERR_1 JP C,.ERR_1
CALL GET_OFFSET_IN_SECTORS
; ;
CALL GET_OFFSET_IN_SECTORS
JP NZ,.ROV1 JP NZ,.ROV1
;
.ROV4: POP BC .ROV4: POP BC
PUSH BC PUSH BC
SRL B SRL B
@ -29,6 +30,7 @@ READ: LD (.R_POINT),HL
.R_POINT+2: LD IX,0 .R_POINT+2: LD IX,0
CALL BLOCK_READ CALL BLOCK_READ
JP C,.ERR_1 JP C,.ERR_1
;
LD DE,(.R_POINT) LD DE,(.R_POINT)
.PointerOnBuffer+1: .PointerOnBuffer+1:
LD HL,0 // LD HL,(READMEM) LD HL,0 // LD HL,(READMEM)
@ -64,6 +66,7 @@ READ: LD (.R_POINT),HL
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
JP C,.ERR_1 JP C,.ERR_1
;
LD HL,CORE_BUFFERS.BUFFER LD HL,CORE_BUFFERS.BUFFER
LD DE,(.R_POINT) LD DE,(.R_POINT)
POP BC POP BC
@ -71,7 +74,6 @@ READ: LD (.R_POINT),HL
LD (.R_POINT),DE LD (.R_POINT),DE
.ROV6: LD HL,(.R_POINT) .ROV6: LD HL,(.R_POINT)
.S_POINT+1: LD DE,0 .S_POINT+1: LD DE,0
;EX DE,HL
AND A AND A
SBC HL,DE SBC HL,DE
PUSH HL PUSH HL
@ -108,7 +110,6 @@ READ: LD (.R_POINT),HL
POP HL POP HL
LD C,B LD C,B
ADC HL,BC ADC HL,BC
;
EXX EXX
POP DE POP DE
LD HL,512 ;!HARDCODE ;!FIXIT ; [ ] sector size LD HL,512 ;!HARDCODE ;!FIXIT ; [ ] sector size

View File

@ -35,7 +35,7 @@ RENAME: ; Current Dir 15/10/23
RET Z RET Z
; ;
PUSH DE PUSH DE
; !FIXIT ¤ã¡«¨àã¥â ¤¥©á⢨¥ ¨ ¤¨à¥ªâ®à¨ï 㦥 § £à㦥­ ? ; !FIXIT ¤ã¡«¨àã¥â ¤¥©á⢨¥ ¨ ¤¨à¥ªâ®à¨ï 㦥 § £à㦥­ ? ;!FIXIT check error
CALL LOADDIR ; [ ] big dir ; ¯à®ç¨â âì ᯨ᮪ ª â «®£  CALL LOADDIR ; [ ] big dir ; ¯à®ç¨â âì ᯨ᮪ ª â «®£ 
; ;
LD A,FAT_ATTR.NoSYSnoVolID LD A,FAT_ATTR.NoSYSnoVolID
@ -65,13 +65,13 @@ RENAME: ; Current Dir 15/10/23
RET C RET C
; ;
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
EX AF,AF' PUSH AF
; ­  á«ãç © ¯¥à¥ª«î祭¨ï áâà ­¨æë ªíè  ¯®á«¥ SEARCH.Custom "new_name.ext" ; ­  á«ãç © ¯¥à¥ª«î祭¨ï áâà ­¨æë ªíè  ¯®á«¥ SEARCH.Custom "new_name.ext"
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock) LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
.DirBlock+1: CP 0 .DirBlock+1: CP 0
.recordIndex+1: LD DE,0 .recordIndex+1: LD HL,0
SCF ; ­¥ ¯¥à¥áç¨â뢠âì à §¬¥à ¤¨à¥ªâ®à¨¨ SCF ; ­¥ ¯¥à¥áç¨â뢠âì à §¬¥à ¤¨à¥ªâ®à¨¨
CALL NZ,LOADDIR.next CALL NZ,LOADDIR.next ;!FIXIT check error
; ;
LD HL,CORE_BUFFERS.MASKARE LD HL,CORE_BUFFERS.MASKARE
.recordAddr+1: LD DE,0 .recordAddr+1: LD DE,0
@ -80,8 +80,9 @@ RENAME: ; Current Dir 15/10/23
; ;
;CALL DELETE_LFN_RECORDS ; [ ] 㤠«¥­¨¥ § ¯¨á¨ LFN ;CALL DELETE_LFN_RECORDS ; [ ] 㤠«¥­¨¥ § ¯¨á¨ LFN
; ;
EX AF,AF' POP AF
OUT (SLOT3),A OUT (SLOT3),A
LD HL,(.recordIndex)
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£® ; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
JP SAVEDIR JP SAVEDIR
; ; ; ////////////////////////////////////////////////////////////////////////

View File

@ -50,8 +50,10 @@ SetPath_GetName:
LD A,(HL) LD A,(HL)
CP 'a' CP 'a'
JR C,.next JR C,.next
;
CP 'z'+1 CP 'z'+1
JR NC,.next JR NC,.next
;
SUB %0010'0000 SUB %0010'0000
.next: SUB 'A' .next: SUB 'A'
INC HL INC HL
@ -60,17 +62,20 @@ SetPath_GetName:
CALL CHDISK CALL CHDISK
POP HL POP HL
RET C RET C
;
LD A,(HL) LD A,(HL)
OR A OR A
JR Z,.done JR Z,.done
;
CP ' ' CP ' '
JR Z,.done JR Z,.done
;
CP '\' ; CP '\' ;
SCF SCF
LD A,DSS_Error.sys.PATH_NOT_FOUND LD A,DSS_Error.sys.PATH_NOT_FOUND
RET NZ RET NZ
INC HL
; ;
INC HL
.dir_loop: LD DE,CORE_BUFFERS.TMPNAME .dir_loop: LD DE,CORE_BUFFERS.TMPNAME
LD BC,256*CORE_BUFFERS.TMPNAME.Size + #FF LD BC,256*CORE_BUFFERS.TMPNAME.Size + #FF
.loop: LD A,(HL) .loop: LD A,(HL)
@ -83,7 +88,9 @@ SetPath_GetName:
CP ' '+1 CP ' '+1
CCF CCF
RET NC RET NC
;
DJNZ .loop DJNZ .loop
;
LD A,DSS_Error.sys.INVALID_NAME LD A,DSS_Error.sys.INVALID_NAME
SCF SCF
RET RET

View File

@ -2170,11 +2170,15 @@ SEARCH:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
SEARCH_RECORD_IN_DIR_CACHE: SEARCH_RECORD_IN_DIR_CACHE:
;CPL ;CPL
LD C,A LD C,A
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
LD (.StartPage),A
SLA A
;!TEST 9/11/23 record index ;!TEST 9/11/23 record index
EXX EXX
LD DE,0 LD D,A
LD E,0
EXX EXX
; ;
.loop_big: LD IX,DIRPAGE.buffer .loop_big: LD IX,DIRPAGE.buffer
@ -2232,8 +2236,24 @@ SEARCH_RECORD_IN_DIR_CACHE:
POP DE POP DE
EXX EXX
POP BC POP BC
JR NC,.loop_big ; !FIXIT ¬®¦¥â ¡ëâì ®è¨¡ª  ç⥭¨ï ¨«¨ ¯à¨ ZF - ª®­¥æ ¤¨à¥ªâ®à¨¨ ;JR NC,.loop_big ; !FIXIT ¬®¦¥â ¡ëâì ®è¨¡ª  ç⥭¨ï ¨«¨ ¯à¨ ZF - ª®­¥æ ¤¨à¥ªâ®à¨¨
;RET
RET C
; ;
; ¯®«­ë© ®¡å®¤ ª â «®£  ­ ç¨­ ï á § £à㦥­­®© áâà ­¨æë
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
AND A
JR NZ,.toStartPage
;
EXX
LD DE,0
EXX
.toStartPage: ;
.StartPage+1: CP 0
JR NZ,.loop_big
;
SCF
RET RET
; ;
.next_char: INC HL .next_char: INC HL
@ -2252,10 +2272,10 @@ SEARCH_RECORD_IN_DIR_CACHE:
FINDDIR: SET_PAGE_X DIRPAGE FINDDIR: SET_PAGE_X DIRPAGE
; ;
PUSH AF PUSH AF
;[ ] big dir ; !FIXIT § ¬¥­¨âì ­  横«¨ç­ë© ¯¥à¥¡®à ¤¨à¥ªâ®à¨¨ ¯® áâà ­¨æ ¬, ç⮡ ­¥ ¤¥« âì «¨è­¨å § £àã§®ª ;
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock) ;LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
AND A ;AND A
CALL NZ,LOADDIR ;CALL NZ,LOADDIR ;!FIXIT check error
; ;
LD A,#28 ; JR Z,... LD A,#28 ; JR Z,...
LD (SEARCH_RECORD_IN_DIR_CACHE.type),A ; search directory LD (SEARCH_RECORD_IN_DIR_CACHE.type),A ; search directory
@ -2491,29 +2511,22 @@ OPENDIR: ; init
; ;
;-------------; JP LOADDIR ;-------------; JP LOADDIR
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;!TODO optimize
; <20>à®ç¨â âì ᯨ᮪ ª â «®£  ; <20>à®ç¨â âì ᯨ᮪ ª â «®£ 
; ¢å®¤ (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L), (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H) ; ‚室: (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L), (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
LOADDIR: ;!TODO optimize LOADDIR: LD HL,0 ;!FIXIT ¥á«¨ HL ¢ë©¤¥â §  à §¬¥àë ¤¨à¥ªâ®à¨¨ ¨ DirBlock ¡ã¤¥â ­¥ª®à४â­ë¬?
;!FIXIT ¥á«¨ HL ¢ë©¤¥â §  à §¬¥àë ¤¨à¥ªâ®à¨¨ ¨ DirBlock ¡ã¤¥â ­¥ª®à४â­ë¬? ;[-------------]
LD HL,0 ; ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜ ; ‚室: HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
; (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L), (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
.Custom: AND A ; ¢ LOAD_SAVE_DIR_PREPARE ¯®áç¨â ¥âáï à §¬¥à ª â «®£  ¤¨à¥ªâ®à¨¨ .Custom: AND A ; ¢ LOAD_SAVE_DIR_PREPARE ¯®áç¨â ¥âáï à §¬¥à ª â «®£  ¤¨à¥ªâ®à¨¨
;[-------------]
; ‚室: HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
; (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L), (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H)
; CF - ­¥ à ááç¨â뢠âì à §¬¥à ¤¨à¥ªâ®à¨¨
.next: CALL LOAD_SAVE_DIR_PREPARE .next: CALL LOAD_SAVE_DIR_PREPARE
PUSH AF PUSH AF
EX AF,AF' EX AF,AF'
;JR NZ,.read_dir ; root dir or not
; root dir
;LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
;CP FAT_TYPE.x32
JR Z,.LoadRootDirFAT12_16 JR Z,.LoadRootDirFAT12_16
;CALL LOAD_SAVE_DIR_PREPARE.CalcDirSize
; fat32
; LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
; LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
; LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
; LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
; ;LD HL,(CORE_BUFFERS.FS_Buffer.BytesPerCluster) ; !FIXIT ¢ëç¨â뢠âì ¯®«­®áâìî ª â «®£
; LD HL,DIRPAGE.size ; à §¬¥à ¤¨à¥ªâ®à¨¨ ;!HARDCODE
; LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
; ;
.read_dir: LD HL,DIRPAGE.buffer ; ªã¤  .read_dir: LD HL,DIRPAGE.buffer ; ªã¤ 
LD DE,DIRPAGE.size ; ᪮«ìª® LD DE,DIRPAGE.size ; ᪮«ìª®
@ -2532,18 +2545,23 @@ LOADDIR: ;!TODO optimize
OR E OR E
RET NZ RET NZ
; ç¨â ¥¬ á ­ ç «  ; ç¨â ¥¬ á ­ ç « 
CALL LOADDIR JR LOADDIR
.no_more: XOR A ;!FIXIT ­ ãç¨âì í⮬㠢ë§ë¢ î騥 ¯à®æ¥¤ãàë ; 0 - ­¥â ®è¨¡®ª. ¯à¨§­ ª ª®­æ  ª â «®£  ; .no_more: LD A,#FF
SCF ; SCF
RET ; RET
; ;
.LoadRootDirFAT12_16: .LoadRootDirFAT12_16:
; [ ] big dir ; [ ] big dir
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock) LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
AND A AND A
JR NZ,.no_more JR Z,.ok
;
XOR A
LD (CORE_BUFFERS.FS_Buffer.DirBlock),A
RET
;
; ;
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H);!TODO ¢®§¬®¦­®, 墠â¨â LD HL,0 .ok: LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H);!TODO ¢®§¬®¦­®, 墠â¨â LD HL,0
LD IX,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_L); ­®¬¥à «®£. ᥪâ®à  LD IX,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_L); ­®¬¥à «®£. ᥪâ®à 
LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors) LD A,(CORE_BUFFERS.FS_Buffer.DirSizeInSectors)
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£  ; [ ] sector size 512 LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£  ; [ ] sector size 512
@ -2569,6 +2587,33 @@ LOADDIR: ;!TODO optimize
;----------------------------------------------------------------------;
; ‚室: HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
; ‚ë室: HLIX - ᬥ饭¨¥ ¢ ä ©«¥ ª â «®£  ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢
; A - <20>®¬¥à ¡«®ª  DirBlock
; GET_DIRCACHE_BLOCK_ADDR:
; ; HLIX = (HL*32) & #1FC000 ᬥ饭¨¥ ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢
; XOR A
; LD XL,A
; LD E,A
; LD A,H
; LD H,E
; AND #FE
; RRA
; RR E
; LD D,A ; DirBlock
; RRA
; RR E
; RRA
; RR E
; LD XH,E
; LD L,A
; LD A,D
; RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; [ ] ¤®¤¥« âì ¯¥à¥¤ çã ID § ¯¨á¨ ¤¨à¥ªâ®à¨¨ ¨ § £à㧪¨ ¯® ­¥© ­ã¦­®£® ªã᪠ ¢ ªíè ; [ ] ¤®¤¥« âì ¯¥à¥¤ çã ID § ¯¨á¨ ¤¨à¥ªâ®à¨¨ ¨ § £à㧪¨ ¯® ­¥© ­ã¦­®£® ªã᪠ ¢ ªíè
;!TODO FAT procedures ;!TODO FAT procedures
@ -2579,38 +2624,36 @@ LOADDIR: ;!TODO optimize
; ZF' - RootDir FAT12-16 ; ZF' - RootDir FAT12-16
LOAD_SAVE_DIR_PREPARE: LOAD_SAVE_DIR_PREPARE:
PUSH AF PUSH AF
; [ ] ‚室: HL - ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜ ;CALL GET_DIRCACHE_BLOCK_ADDR
; [ ] ‚ë室: HLIX - ᬥ饭¨¥ ¢ ä ©«¥ ª â «®£  ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢ ;LD (CORE_BUFFERS.FS_Buffer.DirBlock),A
; HLIX = (HL*32) & #1FC000 ᬥ饭¨¥ ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢ ; HLIX = (HL*32) & #1FC000 ᬥ饭¨¥ ­  ­ã¦­ë© ¡«®ª ¯® #4000 ¡ ©â®¢
XOR A XOR A
LD XL,A LD XL,A
LD E,A LD E,A
LD A,H LD A,H
LD H,E LD H,E
AND #FE AND #FE
RRA RRA
RR E RR E
LD (CORE_BUFFERS.FS_Buffer.DirBlock),A LD (CORE_BUFFERS.FS_Buffer.DirBlock),A
RRA RRA
RR E RR E
RRA RRA
RR E RR E
LD XH,E LD XH,E
LD L,A LD L,A
; ;
; ;
XOR A ; FILE MANIPULATOR = 0 XOR A ; FILE MANIPULATOR = 0
LD B,A ; ®â ­ ç «  ä ©«  LD B,A ; ®â ­ ç «  ä ©« 
CALL MOVE_FP CALL MOVE_FP
SET_PAGE_X DIRPAGE
SET_PAGE_X DIRPAGE
POP DE POP DE
AND A AND A
PUSH AF PUSH AF
; ;
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
LD (CORE_BUFFERS.FM_BUF.DRIVE),A LD (CORE_BUFFERS.FM_BUF.DRIVE),A
;;;;;;;; ; check fat12-16 root dir
XOR A XOR A
LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L) LD HL,(CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L)
EXX EXX
@ -2620,7 +2663,6 @@ LOAD_SAVE_DIR_PREPARE:
EXX EXX
OR H OR H
OR L OR L
;;;;;;;;
JR Z,.exit JR Z,.exit
; ;
PUSH AF PUSH AF
@ -2631,32 +2673,8 @@ LOAD_SAVE_DIR_PREPARE:
POP AF POP AF
RET RET
; ;
.CalcDirSize: ; check dir cache
;LD A,(CORE_BUFFERS.FS_Buffer.DirBlockDrive)
;LD E,A
;LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
;LD (CORE_BUFFERS.FM_BUF.DRIVE),A
;RET Z
;;
;CP E
;JR NZ,.goCalc
;;
;EX DE,HL
;LD HL,(CORE_BUFFERS.FS_Buffer.DirBlockStartCluster_L)
;SBC HL,DE
;EX DE,HL
;JR NZ,.goCalc
;;
;EXX
; EX DE,HL
; LD HL,(CORE_BUFFERS.FS_Buffer.DirBlockStartCluster_H)
; SBC HL,DE
; EX DE,HL
;EXX
;RET Z
;
; calc dir size in clusters ; calc dir size in clusters
.goCalc: LD DE,0 .CalcDirSize: LD DE,0
.loop: INC DE ; <20> ¤¥¥¬áï âãâ ­  â®, ç⮠ᯥæ¨ä¨ª æ¨ï ¢ë¯®«­ï¥âáï ¨ ¯¥à¥¯®«­¥­¨ï ­¥ ¡ã¤¥â .loop: INC DE ; <20> ¤¥¥¬áï âãâ ­  â®, ç⮠ᯥæ¨ä¨ª æ¨ï ¢ë¯®«­ï¥âáï ¨ ¯¥à¥¯®«­¥­¨ï ­¥ ¡ã¤¥â
PUSH DE PUSH DE
CALL READ_FROM_FAT CALL READ_FROM_FAT
@ -2669,14 +2687,14 @@ LOAD_SAVE_DIR_PREPARE:
; ;
; DE - à §¬¥à ¤¨à¥ªâ®à¨¨ ¢ ª« áâ¥à å ; DE - à §¬¥à ¤¨à¥ªâ®à¨¨ ¢ ª« áâ¥à å
;!FIXIT ¬®¦­® ®¯â¨¬¨§­ãâì ª®«-¢® ᤢ¨£®¢ ;!FIXIT ¬®¦­® ®¯â¨¬¨§­ãâì ª®«-¢® ᤢ¨£®¢
;0001 0000 0000 0000 max ª®«-¢® ª« áâ¥à®¢ ;0001 0000 0000 0000 max ª®«-¢® ª« áâ¥à®¢
; ¯à¨¬¥à ; ¯à¨¬¥à
;0000 0000 0000 0111 Clusters ;0000 0000 0000 0111 Clusters
; 0100 0000 SectorsPerCluster ; 0100 0000 SectorsPerCluster
;0000 0010 0000 0000 BytesPerSector ;0000 0010 0000 0000 BytesPerSector
; D' E' D E ; D' E' D E
;0000 0000 0000 0011 1000 0000 0000 0000 ;0000 0000 0000 0011 1000 0000 0000 0000
; ;
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster) LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector) LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerSector)
; DE':DE - ª®«-¢® ª« áâ¥à®¢ ; DE':DE - ª®«-¢® ª« áâ¥à®¢
@ -2691,25 +2709,20 @@ LOAD_SAVE_DIR_PREPARE:
RRCA RRCA
JR C,.loop2 JR C,.loop2
; ;
.loop1: ; .loop1: SLA E
SLA E
RL D RL D
EXX EXX
RL E RL E
RL D RL D
;RL C
EXX EXX
;
RRCA RRCA
JR NC,.loop1 JR NC,.loop1
; ;
.loop2: ; .loop2: SLA E
SLA E
RL D RL D
EXX EXX
RL E RL E
RL D RL D
;RL C
EXX EXX
; ;
SRL B SRL B
@ -2721,7 +2734,7 @@ LOAD_SAVE_DIR_PREPARE:
LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE + 2),DE LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE + 2),DE
RET RET
/* 4 3 2 1 /* ¯à¨¬¥à 4 3 2 1
#FFFF<<5 = #1FFFE0 = 0000 0000 0001 1111 1111 1111 1110 0000 #FFFF<<5 = #1FFFE0 = 0000 0000 0001 1111 1111 1111 1110 0000
#FFFF ­®¬¥à § ¯¨á¨ #FFFF ­®¬¥à § ¯¨á¨
@ -2735,32 +2748,21 @@ LOAD_SAVE_DIR_PREPARE:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ASSERT 0, "TODO! GET_ADDR_IN_DIR_CACHE" ;!TODO optimize
;!TODO ;!TODO .DIRSIZE ¯®¬¥è ¥â ¥á«¨ ¢ ªíè ¡ã¤¥â ¤à㣠ï áâà ­¨æ ?
; .DIRSIZE ¯®¬¥è ¥â ¥á«¨ ¢ ªíè ¡ã¤¥â ¤à㣠ï áâà ­¨æ ? ;!TODO LOAD_SAVE_DIR_PREPARE ¢®§¬®¦­® ­¥ ­ã¦¥­, ­ã¦­® ⮫쪮 ãáâ ­®¢¨âì ¯à ¢¨«ì­®¥ ᬥ饭¨¥ ¢ FM
; LOAD_SAVE_DIR_PREPARE ¢®§¬®¦­® ­¥ ­ã¦¥­, ­ã¦­® ⮫쪮 ãáâ ­®¢¨âì ¯à ¢¨«ì­®¥ ᬥ饭¨¥ ¢ FM ;!TODO Œ®¦¥â ¢®®¡é¥ ¯¥à¥¤¥« âì ¥ñ ¯®¤ à ¡®âã á Š<>˜
; Œ®¦¥â ¢®®¡é¥ ¯¥à¥¤¥« âì ¥ñ ¯®¤ à ¡®âã á Š<>˜ ;!TODO ; [ ] big dir ¯®«ãç âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
;
; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª. ; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª.
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à  ; ¢å®¤: HL - ID § ¯¨á¨, ª®â®à ï ¨§¬¥­¨« áì ¢ Š<>˜
; [ ] big dir ¯®«ãç âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£® ; ¢ ªíè ¤®«¦­  ¡ëâì ª®à४⭠ï áâà ­¨æ  ¤¨à¥ªâ®à¨¨, DirBlkSize ª®à४â­ë© ⮦¥
SAVEDIR: ;!TODO optimize SAVEDIR: SCF ; ­¥ áç¨â âì à §¬¥à ¤¨à¥ªâ®à¨¨
SCF ; ­¥ áç¨â âì à §¬¥à ¤¨à¥ªâ®à¨¨
CALL LOAD_SAVE_DIR_PREPARE CALL LOAD_SAVE_DIR_PREPARE
PUSH AF PUSH AF
EX AF,AF' EX AF,AF'
;JR NZ,.save_dir
JR Z,.SaveRootDir JR Z,.SaveRootDir
; ;
;LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
;CP FAT_TYPE.x32
;JR NZ,.SaveRootDir
; fat32
;LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
;LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
;LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
;LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),HL
;
.save_dir: LD HL,DIRPAGE.buffer .save_dir: LD HL,DIRPAGE.buffer
; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory ; à §¬¥à ᯨ᪠ ª â «®£  size_cash_directory
;!FIXIT ¥á«¨ ®­  ­ã¦­ , â® ¯à®¢¥à¨âì ­  ¡ £¨ (­ ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥­ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª) ;!FIXIT ¥á«¨ ®­  ­ã¦­ , â® ¯à®¢¥à¨âì ­  ¡ £¨ (­ ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥­ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
@ -2779,6 +2781,7 @@ SAVEDIR: ;!TODO optimize
LD B,32 ;!HARDCODE sector size 512, Root Dir max size in sectors LD B,32 ;!HARDCODE sector size 512, Root Dir max size in sectors
SUB B SUB B
JR NC,.RTD1S JR NC,.RTD1S
;
ADD A,B ADD A,B
LD B,A LD B,A
.RTD1S: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) .RTD1S: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
@ -2967,6 +2970,7 @@ WRITE_DATE_TIME_TO_DIRECTORY_RECORD:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â ; <20>८¡à §®¢ âì ¨¬ï 8.3 -> 11 ä®à¬ â
; !FIXIT ­ ¯¨á âì ­®à¬ «ì­®¥ ®¯¨á ­¨¥ ¢å®¤ /¢ë室 
; ¢å®¤: hl = 8.3 ¨¬ï ; ¢å®¤: hl = 8.3 ¨¬ï
; de = ¡ãä¥à ¨¬¥­¨ 11 ᨬ¢. ä®à¬ â  ; de = ¡ãä¥à ¨¬¥­¨ 11 ᨬ¢. ä®à¬ â 
; ¯à¨ ®è¨¡ª¥ CF - ­¥¤®¯. ¨¬ï ; ¯à¨ ®è¨¡ª¥ CF - ­¥¤®¯. ¨¬ï
@ -2976,7 +2980,12 @@ WRITE_DATE_TIME_TO_DIRECTORY_RECORD:
; RET: C=2 FILE WITHOUT EXTENTION ; RET: C=2 FILE WITHOUT EXTENTION
; C=1 FILE WITH EXTENTION ; C=1 FILE WITH EXTENTION
MASK: LD HL,CORE_BUFFERS.TMPNAME MASK: LD HL,CORE_BUFFERS.TMPNAME
;[-------------]
; ¢å®¤: hl = 8.3 ¨¬ï
.name: LD DE,CORE_BUFFERS.MASKARE .name: LD DE,CORE_BUFFERS.MASKARE
;[-------------]
; ¢å®¤: hl = 8.3 ¨¬ï
; de = ¡ãä¥à ¨¬¥­¨ 11 ᨬ¢. ä®à¬ â 
.custom: PUSH HL .custom: PUSH HL
PUSH DE PUSH DE
LD H,D LD H,D

View File

@ -1,5 +1,12 @@
<EFBFBD>® ¯®«­ë¬ ¤¨à¥ªâ®à¨ï¬. ‹¥£¥­¤ : [ ] ᤥ« âì
;[x] LOADDIR ¯®á«¥ READ ¢ë室¨âì á CF, ¥á«¨ ¯à®ç¨â ­® 0 [x] ᤥ« ­®
[!] ¯¥à¥¤¥« ­® ¨ ­¥ ᮢ¯ ¤ ¥â á ­ ¯¨á ­­ë¬
<EFBFBD>® ¯®«­ë¬ ¤¨à¥ªâ®à¨ï¬:
;[ ] F_FIRST ¢ .INIT_VARS § ¯®¬¨­ âì ¤¨áª ¨ ª« áâ¥àë ¤¨à¥ªâ®à¨¨ ¤«ï ¢®ááâ ­®¢«¥­¨ï ¯à¨ ¢ë§®¢¥ F_NEXT
;[ ] F_NEXT ¥á«¨ ¢ ªíè ¤¨à¥ªâ®à¨© ­¥ â , çâ® ¡ë«  ¯à¨ ¢ë§®¢¥ F_FIRST, â® § ¯®¬­¨âì çâ® ¥áâì, ¢®áâ ­®¢¨âì, çâ® ¡ë«®,
; ®âà ¡®â âì ¨ § £à㧨âì ®¡à â­®, çâ® ¡ë«® ­  ¢å®¤¥ ¢ äã­ªæ¨î. € ­¥ä¨£ ¢® ¢à¥¬ï F_NEXT « § âì ¯® ¤¨à¥ªâ®à¨ï¬.
;[!] LOADDIR ¯®á«¥ READ ¢ë室¨âì á CF, ¥á«¨ ¯à®ç¨â ­® 0
;[x] FINDDIR - ¯®ª  à ¡®â ¥â ⮫쪮 á ⥬, çâ® ¡ë«® § £à㦥­® ¢ ªíè ¨ ¬ «® çâ® ­ å®¤¨â, ¥á«¨ áâà ­¨æ ¡®«ìè¥ 1. ;[x] FINDDIR - ¯®ª  à ¡®â ¥â ⮫쪮 á ⥬, çâ® ¡ë«® § £à㦥­® ¢ ªíè ¨ ¬ «® çâ® ­ å®¤¨â, ¥á«¨ áâà ­¨æ ¡®«ìè¥ 1.
;[ ] <20>¥à¥¤¥« âì WRITE_DIR_HANDLE ¤«ï à ¡®âë á «î¡®© § ¯¨áìî ¢ ª â «®£¥ (ᥩç á ¨é¥â ¯¥à¢ãî ¯ãáâãî, ç⮡ § ¯¨á âì ¢ ­¥ñ) ;[ ] <20>¥à¥¤¥« âì WRITE_DIR_HANDLE ¤«ï à ¡®âë á «î¡®© § ¯¨áìî ¢ ª â «®£¥ (ᥩç á ¨é¥â ¯¥à¢ãî ¯ãáâãî, ç⮡ § ¯¨á âì ¢ ­¥ñ)
;[ ] ‚ᥠ¨§¬¥­¥­¨ï ¢ § ¯¨áïå ª â «®£  ¤¥« âì ¢ ¡ãä¥à¥ CORE_BUFFERS.HANDBUF ¨ á®åà ­ïâì ç¥à¥§ WRITE_DIR_HANDLE ;[ ] ‚ᥠ¨§¬¥­¥­¨ï ¢ § ¯¨áïå ª â «®£  ¤¥« âì ¢ ¡ãä¥à¥ CORE_BUFFERS.HANDBUF ¨ á®åà ­ïâì ç¥à¥§ WRITE_DIR_HANDLE