big_dir: F_FIRST ¨ F_NEXT ¯®ç⨠OK

-bugfix: fdd-drv.asm GetBPB RomanRom2 bug fix))
This commit is contained in:
Tolik committed 2026-01-16 00:38:41 +10:00
1 parent ef258143e7
commit 32dca48eaf
4 files changed
+92 -38

No files matched your search

+25 -32
View File
@@ -29,7 +29,6 @@ F_FIRST: CALL .INIT_VARS
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
AND A
CALL NZ,LOADDIR ;!FIXIT check error
;
CALL MASK
RET C
;
@@ -47,15 +46,9 @@ F_FIRST: CALL .INIT_VARS
LD (DE),A
; ¯à¨ ¯à릪¥ á ­  á⥪¥ ¤®«¦¥­ «¥¦ âì record index
.FIND_S: INC DE
;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à  ª â «®£  > #4000 bytes
;LD BC,FAT_DIRECTORY_RECORD
;ADD IX,BC
LD (F_NEXT.CURHND),IX
POP HL ; record index
;!FIXIT ­¥â ¯à®¢¥àª¨ ­  ¯¥à¥¯®«­¥­¨¥
; ­ ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢
;INC HL
LD (F_NEXT.RecordIndex),HL
LD (F_NEXT.RecordIndex),HL ; ­¥â ¯à®¢¥àª¨ ­  ¯¥à¥¯®«­¥­¨¥. ­ ¤¥¥¬áï, çâ® FAT ¡¥§ ª®á类¢
;
LD HL,CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.RESERVED_NT
LD BC,CORE_BUFFERS.HANDBUF.SIZE - FAT_DIRECTORY_RECORD.RESERVED_NT
@@ -67,27 +60,34 @@ F_FIRST: CALL .INIT_VARS
.FNDMODE+1: LD A,0
AND %0111'1111
JR NZ,.FIND_M2
;
LD BC,11 ;!HARDCODE
LDIR
.exit: LD A,F_NEXT.NO_NEXT.NO
LD (F_NEXT.NO_NEXT),A
.FindCounter+1: LD HL,0
INC HL
DEC HL
LD (.FindCounter),HL
XOR A
RET
; CF=0
;XOR A
RET
;
.FIND_M2: ;!TODO LFN
;CP 2
;CALL NC,GetName_LFN
;CALL C,GetName
CALL GetName
;
CALL GetName
JR .exit
;
.INIT_VARS: LD (.SEARCH_ATTRIBUT),A
LD (.DTABUF),DE
LD DE,0
LD (.FindCounter),DE
LD DE,0 ; [ ] big dir for new directory read functions
RLA
JR C,.setCounter
;
LD DE,512 ; for old directory read functions
.setCounter: LD (.FindCounter),DE
LD A,B
LD (.FNDMODE),A
RET
@@ -112,17 +112,14 @@ F_NEXT:
;
XOR A ; F_NEXT.NO_NEXT.YES
LD (F_NEXT.NO_NEXT),A
; ¯à®¢¥àª  ­  ०¨¬ ªãç¨ ä ©«®¢ ¨«¨ ­¥ ¡®«ìè¥ 512
LD A,(F_FIRST.FindCounter + 1) ; áâ à訩 ¡ ©â áçñâ稪 
CP 2
JR C,.nextSearch
; ¯à®¢¥àª  ­  ०¨¬. ªãç  ä ©«®¢ ¨«¨ ­¥ ¡®«ìè¥ 512?
LD BC,(F_FIRST.FindCounter)
LD A,B
OR C
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
SCF
RET Z
;
LD A,(F_FIRST.FNDMODE) ;!FIXIT big dir - ­¥¯à ¢¨«ì­® ¨á¯®«ì§®¢ âì íâ®, ­ ¤® ­®¢ãî ¯¥à¥¬¥­­ãî
RLA
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
CCF
RET C
; ;
.nextSearch: LD A,(HL)
PUSH HL
CALL .NSEARCH
@@ -139,16 +136,12 @@ F_NEXT:
EX AF,AF'
CPL
LD C,A
;!TEST 9/11/23 record index
EXX
.RecordIndex+1: LD DE,0 ; record index ¬®¦¥â ¨ ­¥ ­ã¦­®
EXX
EXX
.RecordIndex+1: LD DE,0 ; record index ¬®¦¥â ¨ ­¥ ­ã¦­®
EXX
;
.CURHND+2: LD IX,0 ;  ¤à¥á á«¥¤ãî饩 § ¯¨á¨ ¢ ªíè¥ ¤¨à¥ªâ®à¨¨
LD DE,SEARCH.for_F_NEXT
PUSH DE ; ¢ë室 ¢ SEARCH ¨§ SEARCH_RECORD_IN_DIR_CACHE
JP SEARCH_RECORD_IN_DIR_CACHE.next_record
;
/*
‹î¡ë¥ ¨§¬¥­¥­¨ï ¢ ¤¨à¥ªâ®à¨¨ ã¡ìîâ ¥ñ.
*/
;