prepare for FAT "big dir" support, step 2

This commit is contained in:
Tolik 2025-11-03 01:20:34 +10:00
parent 4da5e6c350
commit 0a649252ab
7 changed files with 79 additions and 36 deletions

View File

@ -42,14 +42,14 @@ F_FIRST: CALL .INIT_VARS
; ¯à¨ ¯à릪¥ á ­  á⥪¥ ¤®«¦¥­ «¥¦ âì record index
.FIND_S: INC DE
;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à  ª â «®£  > #4000 bytes
LD BC,FAT_DIRECTORY_RECORD
ADD IX,BC
;LD BC,FAT_DIRECTORY_RECORD
;ADD IX,BC
LD (F_NEXT.CURHND),IX
; record index ¬®¦¥â ¨ ­¥ ­ã¦­®
POP HL
;!FIXIT ­¥â ¯à®¢¥àª¨ ­  ¯¥à¥¯®«­¥­¨¥
; ­ ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢
INC HL
;INC HL
LD (F_NEXT.RecordIndex),HL
;
LD HL,CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.RESERVED_NT
@ -60,7 +60,7 @@ F_FIRST: CALL .INIT_VARS
INC DE
LD HL,CORE_BUFFERS.HANDBUF
.FNDMODE+1: LD A,0
OR A
AND %0111'1111
JR NZ,.FIND_M2
LD BC,11 ;!HARDCODE
LDIR
@ -114,7 +114,7 @@ F_NEXT:
;
.NSEARCH: EX AF,AF'
SET_PAGE_X DIRPAGE
;PUSH AF
PUSH AF
EX AF,AF'
CPL
LD C,A
@ -124,8 +124,12 @@ F_NEXT:
EXX
;
.CURHND+2: LD IX,0 ;  ¤à¥á á«¥¤ãî饩 § ¯¨á¨ ¢ ªíè¥ ¤¨à¥ªâ®à¨¨
LD A,XH
OR XL
JP Z,SEARCH.error_too_many_files ; [ ] big dir
JP SEARCH.loop
;LD A,XH
;OR XL
;JP Z,SEARCH.error_too_many_files ; [ ] big dir
;JP SEARCH.loop
JP SEARCH.next_record
;
/*
î¡ë¥ ¨§¬¥­¥­¨ï ¢ ¤¨à¥ªâ®à¨¨ ã¡ìîâ ¥ñ.
*/

View File

@ -278,8 +278,14 @@ DIR_PATH_CHECK: LD A,(HL)
CALL FINDDIR.CHECK_SLASH
LD A,DSS_Error.sys.PATH_NOT_FOUND
RET C
PUSH HL
LD HL,CORE_BUFFERS.CurrentPath
JP SetPath_GetName
CALL SetPath_GetName
POP HL
RET C
DEC HL
LD (HL),0
RET
;
.end: CP (HL)
RET Z

View File

@ -137,19 +137,17 @@ SEARCH:
.File: LD A,FAT_ATTR.NoDIRnoVolID
.Custom: EX AF,AF' ; A = 76ADLSHR
SET_PAGE_X DIRPAGE
;PUSH AF
PUSH AF
EX AF,AF'
;
CPL
LD C,A
LD IX,DIRPAGE.buffer
;!TEST 9/11/23 record index
; ®¯â¨¬¨§ æ¨ï ¤«ï ¨­¤¥ªá  § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ .
; <09>®­ ¤®¡¨âáï ¢¥à­ãâì ¤«ï ¯¥à¥¡®à  ª â «®£  > #4000 ¡ ©â
EXX
LD DE,0
EXX
;
.loop_big: LD IX,DIRPAGE.buffer
.loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
OR A
JR Z,.error_file_not_found
@ -184,11 +182,10 @@ SEARCH:
;
LD D,XH
LD E,XL
;!FIXIT ¬®¦¥â ­  ¢ë室¥ ¯à®áâ® EXX?
;!TEST 9/11/23 record index
EXX
PUSH DE ; record index
EXX
; EXX
; PUSH DE ; record index
; EXX
;PUSH IX
;
LD HL,CORE_BUFFERS.HANDBUF
@ -196,11 +193,13 @@ SEARCH:
LD BC,CORE_BUFFERS.HANDBUF.SIZE
LDIR
; record index
POP DE
EX AF,AF'
;POP DE
POP AF
;EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
;EX AF,AF'
AND A
EXX ; record index
RET
;
.next_record: ;!TEST 9/11/23 record index
@ -209,22 +208,53 @@ SEARCH:
EXX
;
LD DE,FAT_DIRECTORY_RECORD
ADD IX,DE ; [ ] big dir
ADD IX,DE
JR NC,.loop
;
.error_too_many_files:
EX AF,AF'
; [ ] big dir
LD A,(F_FIRST.FNDMODE) ;!FIXIT big dir - ­¥¯à ¢¨«ì­® ¨á¯®«ì§®¢ âì íâ®, ­ ¤® ­®¢ãî ¯¥à¥¬¥­­ãî
RLA
JR C,.readDirNext
;
;EX AF,AF'
POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
SCF
RET
;
.error_file_not_found:
EX AF,AF'
;EX AF,AF'
POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.FILE_NOT_FOUND
SCF
RET
;
; SLOT3 = DIRPAGE
; CF=1
; A' = áâà ­¨æ  ¤® ¢ë§®¢  ä㭪樨
; !FIXIT root dir in LOADDIR
; !FIXIT ¥á«¨ ¢ ªíè ¡ë«¨ ¨§¬¥­¥­¨ï?
.readDirNext: SBC A,A ; ZF=0
IN A,(SLOT3)
LD B,A
EX AF,AF'
PUSH HL
PUSH BC
EXX
PUSH DE ; record index
;
CALL LOADDIR.next
;
POP DE
EXX
POP BC
POP HL
LD A,B
OUT (SLOT3),A
JR NC,.loop_big
JR .error_file_not_found
;----------------------------------------------------------------------;
;
@ -511,7 +541,7 @@ OPENDIR: LD IY,CORE_BUFFERS.FM_BUF
; [x] fat32 ;!TEST
LOADDIR: ;!TODO optimize
CALL LOAD_SAVE_DIR_PREPARE
PUSH AF
.next: PUSH AF
EX AF,AF'
JR NZ,.read_dir ; root dir or not
; root dir
@ -532,9 +562,11 @@ LOADDIR: ;!TODO optimize
LD DE,#4000 ; ᪮«ìª®
XOR A ; ¤¥áªà¨¯â®à
CALL READ ; ç⥭¨¥ ¨§ ä ©« 
EX AF,AF'
LD (SAVEDIR.DIRSIZE),DE ; ç¨á«® ¯à®ç¨â. ¡ ©â®¢
POP AF
OUT (SLOT3),A
EX AF,AF'
RET
;
.LoadRootDir: LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H) ;!TODO ¢®§¬®¦­®, 墠â¨â LD HL,0

View File

@ -1 +1 @@
2
3

View File

@ -124,10 +124,11 @@ cmd_dir: push de
;
.NeXt: CALL Print_Header
; [ ] 01/10/23
ld hl,Buffers.work.free ; ¨¬ï ä ©« 
ld de,Buffers.work.buffer1 ; 80 ¡ãä¥à
ld a,FAT_ATTR.NoVolID ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
ld hl,Buffers.work.free ; ¨¬ï ä ©« 
ld de,Buffers.work.buffer1 ; 80 ¡ãä¥à
ld a,FAT_ATTR.NoVolID ;  âਡãâ (¢á¥, ªà®¬¥ ¬¥âª¨ ⮬ )
;ld bc,Dss.F_First.FATname ; f_first (ä®à¬ â 11)
ld bc,Dss.F_First.All_FATname ; f_first (ä®à¬ â 11) ; [ ] bigdir
RST ToDSS
JR C,.Dir_Empty ;R14
;

View File

@ -1 +1 @@
526
527

@ -1 +1 @@
Subproject commit 97d5ea8a4b1359d49fb706f24aae6af6bb4eef66
Subproject commit f5f85b3d14c65bfc2f8619b596815e350f1a9d5b