FINDDIR вроде OK

This commit is contained in:
Tolik 2026-01-12 20:46:33 +10:00
parent 48b9504b37
commit e8cf44ae6b
7 changed files with 133 additions and 140 deletions

View File

@ -140,7 +140,9 @@ F_NEXT:
EXX EXX
; ;
.CURHND+2: LD IX,0 ;  ¤à¥á á«¥¤ãî饩 § ¯¨á¨ ¢ ªíè¥ ¤¨à¥ªâ®à¨¨ .CURHND+2: LD IX,0 ;  ¤à¥á á«¥¤ãî饩 § ¯¨á¨ ¢ ªíè¥ ¤¨à¥ªâ®à¨¨
JP SEARCH.next_record LD DE,SEARCH.for_F_NEXT
PUSH DE ; ¢ë室 ¢ SEARCH ¨§ SEARCH_RECORD_IN_DIR_CACHE
JP SEARCH_RECORD_IN_DIR_CACHE.next_record
; ;
/* /*
î¡ë¥ ¨§¬¥­¥­¨ï ¢ ¤¨à¥ªâ®à¨¨ ã¡ìîâ ¥ñ. î¡ë¥ ¨§¬¥­¥­¨ï ¢ ¤¨à¥ªâ®à¨¨ ã¡ìîâ ¥ñ.

View File

@ -53,7 +53,7 @@ OPEN_FN: ; Current Dir 15/10/23
LDIR LDIR
.TMP+1: LD A,0 .TMP+1: LD A,0
LD (IY+_sFM.ACCESS_MODE),A LD (IY+_sFM.ACCESS_MODE),A
; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> ; !FIXIT ®¯â¨¬¨§­ã« âãâ
;LD A,(TASK) ;LD A,(TASK)
;LD (IY+_sFM.TASK_NUM),A ;LD (IY+_sFM.TASK_NUM),A
;XOR A ;XOR A

View File

@ -40,29 +40,41 @@ RENAME: ; Current Dir 15/10/23
; ;
LD A,FAT_ATTR.NoSYSnoVolID LD A,FAT_ATTR.NoSYSnoVolID
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ "old_name.ext" ¢ ᯨ᪥ ¤¨áª  CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ "old_name.ext" ¢ ᯨ᪥ ¤¨áª 
; DE - record index
POP HL POP HL
RET C RET C
;LD DE,MASKARE ;
LD (.recordAddr),IX
; ­  á«ãç © ¯¥à¥ª«î祭¨ï áâà ­¨æë ªíè  ¯®á«¥ SEARCH.Custom "new_name.ext"
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
LD (.DirBlock),A
LD (.recordIndex),DE
;
CALL MASK.name CALL MASK.name
RET C RET C
; ;
CALL CHECK_NAME CALL CHECK_NAME
RET Z RET Z
; ;
PUSH IX ;PUSH IX
LD A,FAT_ATTR.NoSYSnoVolID LD A,FAT_ATTR.NoSYSnoVolID
CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ "new_name.ext" ¢ ᯨ᪥ ¤¨áª  CALL SEARCH.Custom ; ¯®¨áª § ¯¨á¨ "new_name.ext" ¢ ᯨ᪥ ¤¨áª 
POP IX ;POP IX
LD A,DSS_Error.sys.FILE_EXISTS LD A,DSS_Error.sys.FILE_EXISTS
CCF CCF
RET C RET C
; ;
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
EX AF,AF' EX AF,AF'
; ­  á«ãç © ¯¥à¥ª«î祭¨ï áâà ­¨æë ªíè  ¯®á«¥ SEARCH.Custom "new_name.ext"
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
.DirBlock+1: CP 0
.recordIndex+1: LD DE,0
SCF ; ­¥ ¯¥à¥áç¨â뢠âì à §¬¥à ¤¨à¥ªâ®à¨¨
CALL NZ,LOADDIR.next
; ;
LD HL,CORE_BUFFERS.MASKARE LD HL,CORE_BUFFERS.MASKARE
LD D,XH .recordAddr+1: LD DE,0
LD E,XL
LD BC,11 LD BC,11
LDIR LDIR
; ;

View File

@ -29,13 +29,15 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
PUSH DE PUSH DE
CALL SET_FM CALL SET_FM
JR C,.ERR1 JR C,.ERR1
;
LD A,(IY+_sFM.ACCESS_MODE) LD A,(IY+_sFM.ACCESS_MODE)
AND Dss.Open.R AND Dss.Open.R
JR NZ,.RD_ONLY JR NZ,.RD_ONLY
;
SET 7,(IY + _sFM.ACCESS_MODE) SET 7,(IY + _sFM.ACCESS_MODE)
SET 5,(IY + _sFM.FS_REC.ATTRIBUT) SET 5,(IY + _sFM.FS_REC.ATTRIBUT)
LD A,(IY + _sFM.DRIVE) LD A,(IY + _sFM.DRIVE)
CALL OPENDSK CALL OPENDSK ;!FIXIT ¤«ï á®åà ­¥­¨ï ¤¨à¥ªâ®à¨¨ ¨á¯®«ì§ã¥âáï. Œ®¦¥â «¨ á«ãç¨âìáï, çâ® ¤¨áª ᬥ­¨âáï?
JR C,.ERR1 JR C,.ERR1
; [x] 26/06/2024 {64 kb cluster} ; [x] 26/06/2024 {64 kb cluster}
CALL CHECK_64kb_CLUSTER CALL CHECK_64kb_CLUSTER
@ -49,6 +51,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
PUSH BC PUSH BC
SRL B SRL B
JR Z,.WOV2 JR Z,.WOV2
;
PUSH HL PUSH HL
PUSH DE PUSH DE
PUSH BC PUSH BC
@ -56,6 +59,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
CALL BLOCK_WRITE CALL BLOCK_WRITE
POP BC POP BC
JR C,.ERR3 JR C,.ERR3
;
LD C,B LD C,B
LD HL,(.R_POINT) LD HL,(.R_POINT)
LD DE,#0200 ;!HARDCODE sector size LD DE,#0200 ;!HARDCODE sector size
@ -76,6 +80,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
LD B,A LD B,A
OR C OR C
JR Z,.WOV6 JR Z,.WOV6
;
PUSH HL PUSH HL
PUSH DE PUSH DE
PUSH BC PUSH BC
@ -93,6 +98,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
LD HL,(.R_POINT) LD HL,(.R_POINT)
POP BC POP BC
JP C,.ERR2 JP C,.ERR2
;
LDIR LDIR
LD (.R_POINT),HL LD (.R_POINT),HL
POP DE POP DE
@ -108,6 +114,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
RET C RET C
;
.WOV6: LD HL,(.R_POINT) .WOV6: LD HL,(.R_POINT)
.S_POINT+1: LD DE,0 .S_POINT+1: LD DE,0
; CF=0 ; CF=0
@ -152,6 +159,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
EXX EXX
POP DE POP DE
JP C,.ERR1 JP C,.ERR1
;
LD HL,512 ;!HARDCODE ;!FIXIT ; [ ] sector size LD HL,512 ;!HARDCODE ;!FIXIT ; [ ] sector size
AND A AND A
SBC HL,DE SBC HL,DE
@ -161,6 +169,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
AND A AND A
SBC HL,BC SBC HL,BC
JR NC,.WOV3 JR NC,.WOV3
;
ADD HL,BC ADD HL,BC
LD B,H LD B,H
LD C,L LD C,L
@ -187,6 +196,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
OUT (C),B OUT (C),B
POP HL POP HL
JP C,.ERR2 JP C,.ERR2
;
LD BC,1 LD BC,1
ADD HL,BC ADD HL,BC
EX DE,HL EX DE,HL

View File

@ -114,12 +114,15 @@ OPENDSK: ;!TEST DRV.Open
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
CP B CP B
JR NZ,.open JR NZ,.open
;
PUSH BC PUSH BC
LD C,Dss.DRV.MediaCheck LD C,Dss.DRV.MediaCheck
RST ToDSS.DRV RST ToDSS.DRV
POP BC POP BC
JR Z,.exit JR Z,.exit
;
JR C,.error JR C,.error
;
JR .skip_open ;!FIXIT ª®£¤  DRV.MediaCheck ¨ DRV.Open ¡ã¤ã⠮⫨ç âìáï JR .skip_open ;!FIXIT ª®£¤  DRV.MediaCheck ¨ DRV.Open ¡ã¤ã⠮⫨ç âìáï
; ;
.open: LD A,B .open: LD A,B

View File

@ -2116,12 +2116,14 @@ DELETE_LFN_RECORDS:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; [ ] big dir £à㧨âì âãâ ­ ç «ì­ãî áâà ­¨æã ¢ dir cache ¨«¨ ¯¥à¥¤ ¢ë§®¢®¬?
; [ ] big dir ¢á¥£¤  «¨ ¯à¨ ¢ë§®¢¥ ã ­ á ¯à ¢¨«ì­ë¥ (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L ¨ H) ¤«ï LOADDIR?
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£  ; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£ 
; ¢å®¤: a =  âਡãâ § ¯¨á¨ (.Custom) ; ¢å®¤: A =  âਡãâ § ¯¨á¨ (.Custom)
; (CORE_BUFFERS.MASKARE) - ¬ áª  ¤«ï ¯®¨áª  ; (CORE_BUFFERS.MASKARE) - ¬ áª  ¤«ï ¯®¨áª 
; ¢ë室: de = ¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£  ; ¢ë室: DE - ¨­¤¥ªá § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ 
; IX -  ¤à¥á ­ ©¤¥­®© § ¯¨á¨ ¢ SLOT3
; (HANDBUF) = file's directory record ; (HANDBUF) = file's directory record
; CF - ª â «®£ ­¥ ­ ©¤¥­ ; CF - ª â «®£ ­¥ ­ ©¤¥­
SEARCH: SEARCH:
@ -2141,8 +2143,34 @@ SEARCH:
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
PUSH AF PUSH AF
EX AF,AF' EX AF,AF'
;
CPL CPL
CALL SEARCH_RECORD_IN_DIR_CACHE
.for_F_NEXT: JR C,.error
;
LD D,XH
LD E,XL
LD HL,CORE_BUFFERS.HANDBUF
EX DE,HL
LD BC,CORE_BUFFERS.HANDBUF.SIZE
LDIR
POP AF
OUT (SLOT3),A
AND A
EXX ; record index
RET
;
.error: POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.FILE_NOT_FOUND
SCF
RET
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
SEARCH_RECORD_IN_DIR_CACHE:
;CPL
LD C,A LD C,A
;!TEST 9/11/23 record index ;!TEST 9/11/23 record index
EXX EXX
@ -2152,13 +2180,16 @@ SEARCH:
.loop_big: LD IX,DIRPAGE.buffer .loop_big: LD IX,DIRPAGE.buffer
.loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME) .loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
OR A OR A
JR Z,.error_file_not_found SCF
RET Z ; not found
;
CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤­ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥­ë CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤­ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥­ë
JR Z,.next_record JR Z,.next_record
;
LD A,(IX + FAT_DIRECTORY_RECORD.ATTRIBUT) LD A,(IX + FAT_DIRECTORY_RECORD.ATTRIBUT)
LD D,A LD D,A
AND C AND C
JR NZ,.next_record .type+0: JR NZ,.next_record
; ;
LD A,C LD A,C
INC A INC A
@ -2170,55 +2201,27 @@ SEARCH:
.found_attr: LD HL,CORE_BUFFERS.MASKARE .found_attr: LD HL,CORE_BUFFERS.MASKARE
LD D,XH LD D,XH
LD E,XL LD E,XL
LD B,11 LD B,11 ;!HARDCODE dos name not LFN
EX DE,HL EX DE,HL
;
.loop_compare: LD A,(DE) .loop_compare: LD A,(DE)
CP '?' CP '?'
JR Z,.next_char JR Z,.next_char
;
CP (HL) CP (HL)
JR NZ,.next_record ;JR NZ,.next_record
; JR Z,.next_char
.next_char: INC HL
INC DE
DJNZ .loop_compare
;
LD D,XH
LD E,XL
;!TEST 9/11/23 record index
; EXX
; PUSH DE ; record index
; EXX
;PUSH IX
;
LD HL,CORE_BUFFERS.HANDBUF
EX DE,HL
LD BC,CORE_BUFFERS.HANDBUF.SIZE
LDIR
; record index
;POP DE
POP AF
;EX AF,AF'
OUT (SLOT3),A
;EX AF,AF'
AND A
EXX ; record index
RET
; ;
.next_record: ;!TEST 9/11/23 record index .next_record: ;!TEST 9/11/23 record index
EXX EXX
INC DE INC DE
EXX EXX
; ;
.inc_rec_num: LD DE,FAT_DIRECTORY_RECORD LD DE,FAT_DIRECTORY_RECORD
ADD IX,DE ADD IX,DE
JR NC,.loop JR NC,.loop
; ;
; [ ] big dir ; CF=1
; LD A,(F_FIRST.FNDMODE) ;!FIXIT big dir - ­¥¯à ¢¨«ì­® ¨á¯®«ì§®¢ âì íâ®, ­ ¤® ­®¢ãî ¯¥à¥¬¥­­ãî
; RLA
; JR NC,.error_too_many_files
;
; CF=1
; !FIXIT root dir in LOADDIR ; !FIXIT root dir in LOADDIR
; !FIXIT ¥á«¨ ¢ ªíè ¡ë«¨ ¨§¬¥­¥­¨ï? ; !FIXIT ¥á«¨ ¢ ªíè ¡ë«¨ ¨§¬¥­¥­¨ï?
.readDirNext: PUSH BC .readDirNext: PUSH BC
@ -2229,59 +2232,40 @@ SEARCH:
POP DE POP DE
EXX EXX
POP BC POP BC
JR NC,.loop_big ; !FIXIT â ¬ ­¥â CF ­  ¢ë室¥ JR NC,.loop_big ; !FIXIT ¬®¦¥â ¡ëâì ®è¨¡ª  ç⥭¨ï ¨«¨ ¯à¨ ZF - ª®­¥æ ¤¨à¥ªâ®à¨¨
; ;
.error_file_not_found:
POP AF
OUT (SLOT3),A
LD A,DSS_Error.sys.FILE_NOT_FOUND
SCF
RET RET
; ;
; .error_too_many_files: .next_char: INC HL
; POP AF INC DE
; OUT (SLOT3),A DJNZ .loop_compare
; LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR ; CF=0
; SCF RET
; RET
;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
;----------------------------------------------------------------------; ;----------------------------------------------------------------------; 20 28
; FIND "MASKAREA" IN DIRECTORY ; FIND "MASKAREA" IN DIRECTORY
; ¢ë室: IY:DE - cluster number ; ¢ë室: IY:DE - cluster number
; [ ] big dir ¢á¥£¤  «¨ ¯à¨ ¢ë§®¢¥ ã ­ á ¯à ¢¨«ì­ë¥ (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L ¨ H) ¤«ï LOADDIR?
FINDDIR: SET_PAGE_X DIRPAGE FINDDIR: SET_PAGE_X DIRPAGE
; ;
PUSH AF PUSH AF
LD IX,DIRPAGE.buffer ;[ ] big dir ; !FIXIT § ¬¥­¨âì ­  横«¨ç­ë© ¯¥à¥¡®à ¤¨à¥ªâ®à¨¨ ¯® áâà ­¨æ ¬, ç⮡ ­¥ ¤¥« âì «¨è­¨å § £àã§®ª
.big_loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME) LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
OR A AND A
JR Z,.error CALL NZ,LOADDIR
; ;
CP #E5 LD A,#28 ; JR Z,...
JR Z,.next_step LD (SEARCH_RECORD_IN_DIR_CACHE.type),A ; search directory
; LD A,FAT_ATTR.DIRECTORY
LD A,(IX + FAT_DIRECTORY_RECORD.ATTRIBUT) CALL SEARCH_RECORD_IN_DIR_CACHE
AND FAT_ATTR.DIRECTORY EX AF,AF
JR Z,.next_step LD A,#20 ; JR NZ,...
; LD (SEARCH_RECORD_IN_DIR_CACHE.type),A ; search
LD HL,CORE_BUFFERS.MASKARE EX AF,AF
LD D,XH JR C,.error
LD E,XL
EX DE,HL
LD B,11 ;!HARDCODE
.loop: LD A,(DE)
CP "?"
JR Z,.compared
CP (HL)
JR NZ,.next_step
;
.compared: INC HL
INC DE
DJNZ .loop
; ;
LD A,(IX + FAT_DIRECTORY_RECORD.NAME) LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
CP "." CP "."
@ -2315,10 +2299,6 @@ FINDDIR: SET_PAGE_X DIRPAGE
.MM3: LD (HL),0 .MM3: LD (HL),0
JP .ITs_DIR JP .ITs_DIR
; ;
.next_step: LD BC,FAT_DIRECTORY_RECORD
ADD IX,BC
JR NC,.big_loop
;
.error: POP AF .error: POP AF
OUT (SLOT3),A OUT (SLOT3),A
LD A,DSS_Error.sys.PATH_NOT_FOUND LD A,DSS_Error.sys.PATH_NOT_FOUND
@ -2344,36 +2324,6 @@ FINDDIR: SET_PAGE_X DIRPAGE
CALL GetName CALL GetName
EX DE,HL EX DE,HL
; ;
; LD BC,256*8 + ' ' ;!HARDCODE
; .MM1: LD A,(DE)
; INC DE
; CP C
; JR Z,.MM2
; LD (HL),A
; INC HL
; .MM2 DJNZ .MM1 ;x42-40 50-55
; LD A,(DE)
; INC DE
; CP C
; JR Z,.MM3
; LD (HL),"."
; INC HL
; LD (HL),A
; INC HL
; LD A,(DE)
; INC DE
; CP C
; JR Z,.MM3
; LD (HL),A
; INC HL
; LD A,(DE)
; CP C
; JR Z,.MM3
; LD (HL),A
; .MM2_5: INC HL
; .MM3: LD (HL),0
; ; JP IT_DIR
;
.ITs_DIR: ; fat32 .ITs_DIR: ; fat32
LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1) LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
@ -2488,8 +2438,8 @@ OPENDIR: ; init
JR NZ,.SUBDIR2 JR NZ,.SUBDIR2
; fat32 ; fat32
; !TEST 04/01/2026 ; !TEST 04/01/2026
;EX DE,HL EX DE,HL
CALL CHECK_ROOT_CLUSTER CALL CHECK_ROOT_CLUSTER
;CALL CHECK_FIRST_CLUSTER ;CALL CHECK_FIRST_CLUSTER
EX DE,HL EX DE,HL
; ;
@ -2524,21 +2474,29 @@ OPENDIR: ; init
RET C RET C
; ;
EX DE,HL EX DE,HL
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL ; fat32 LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),IY ; fat32 CP FAT_TYPE.x32
JR NZ,.setCluster
; [ ] big dir ; [ ] big dir
; ... LD A,H
OR L
OR YH
OR YL
JR NZ,.setCluster
; set root dir for fat32
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
LD IY,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_H)
.setCluster: LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_L),HL
LD (CORE_BUFFERS.FM_BUF.FS_REC.FIRST_CLUSTER_H),IY ; fat32
; ;
;LD HL,#4000 ;!HARDCODE ;-------------; JP LOADDIR
;LD (CORE_BUFFERS.FM_BUF.FS_REC.F_SIZE),HL
;-------------; EX DE,HL
; JP LOADDIR
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; <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: ;!TODO optimize
;!FIXIT ¥á«¨ HL ¢ë©¤¥â §  à §¬¥àë ¤¨à¥ªâ®à¨¨ ¨ DirBlock ¡ã¤¥â ­¥ª®à४â­ë¬?
LD HL,0 ; ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜ LD HL,0 ; ID § ¯¨á¨, ª®â®àë© ¤®«¦¥­ ¯®¯ áâì ¢ Š<>˜
.Custom: AND A ; ¢ LOAD_SAVE_DIR_PREPARE ¯®áç¨â ¥âáï à §¬¥à ª â «®£  ¤¨à¥ªâ®à¨¨ .Custom: AND A ; ¢ LOAD_SAVE_DIR_PREPARE ¯®áç¨â ¥âáï à §¬¥à ª â «®£  ¤¨à¥ªâ®à¨¨
.next: CALL LOAD_SAVE_DIR_PREPARE .next: CALL LOAD_SAVE_DIR_PREPARE
PUSH AF PUSH AF
EX AF,AF' EX AF,AF'
@ -2546,7 +2504,7 @@ LOADDIR: ;!TODO optimize
; root dir ; root dir
;LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE) ;LD A,(CORE_BUFFERS.FS_Buffer.FAT_TYPE)
;CP FAT_TYPE.x32 ;CP FAT_TYPE.x32
JR Z,.LoadRootDir JR Z,.LoadRootDirFAT12_16
;CALL LOAD_SAVE_DIR_PREPARE.CalcDirSize ;CALL LOAD_SAVE_DIR_PREPARE.CalcDirSize
; fat32 ; fat32
; LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L) ; LD HL,(CORE_BUFFERS.FS_Buffer.RootDirStartCluster_L)
@ -2575,10 +2533,17 @@ LOADDIR: ;!TODO optimize
RET NZ RET NZ
; ç¨â ¥¬ á ­ ç «  ; ç¨â ¥¬ á ­ ç « 
CALL LOADDIR CALL LOADDIR
.no_more: XOR A ;!FIXIT ­ ãç¨âì í⮬㠢ë§ë¢ î騥 ¯à®æ¥¤ãàë ; 0 - ­¥â ®è¨¡®ª. ¯à¨§­ ª ª®­æ  ª â «®£ 
SCF SCF
RET RET
; ;
.LoadRootDir: LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H);!TODO ¢®§¬®¦­®, 墠â¨â LD HL,0 .LoadRootDirFAT12_16:
; [ ] big dir
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
AND A
JR NZ,.no_more
;
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
@ -2780,6 +2745,7 @@ LOAD_SAVE_DIR_PREPARE:
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à  ; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à 
; [ ] big dir ¯®«ãç âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£® ; [ ] big dir ¯®«ãç âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
SAVEDIR: ;!TODO optimize SAVEDIR: ;!TODO optimize
SCF ; ­¥ áç¨â âì à §¬¥à ¤¨à¥ªâ®à¨¨
CALL LOAD_SAVE_DIR_PREPARE CALL LOAD_SAVE_DIR_PREPARE
PUSH AF PUSH AF
EX AF,AF' EX AF,AF'
@ -2800,7 +2766,7 @@ SAVEDIR: ;!TODO optimize
;!FIXIT ¥á«¨ ®­  ­ã¦­ , â® ¯à®¢¥à¨âì ­  ¡ £¨ (­ ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥­ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª) ;!FIXIT ¥á«¨ ®­  ­ã¦­ , â® ¯à®¢¥à¨âì ­  ¡ £¨ (­ ¯à¨¬¥à, à §¬¥à ¤¨à४â®à¨¨ ¬¥­ìè¥ ¯à¨ ®âªàë⨨ ¨ ¡®«ìè¥ ¯®á«¥ ¯à ¢®ª)
; ª®£¤  ¡ã¤¥â ç⥭¨¥ ªã᪠¬¨ ª â «®£  ¢ ªíè, âãâ ¥éñ áçñâ稪 ¯à¨ªàãâ¨âì ; ª®£¤  ¡ã¤¥â ç⥭¨¥ ªã᪠¬¨ ª â «®£  ¢ ªíè, âãâ ¥éñ áçñâ稪 ¯à¨ªàãâ¨âì
.DirBlkSize+1: LD DE,0 .DirBlkSize+1: LD DE,0
XOR A XOR A ; FM
CALL WRITE CALL WRITE
POP AF POP AF
OUT (SLOT3),A OUT (SLOT3),A

View File

@ -1,6 +1,6 @@
<EFBFBD>® ¯®«­ë¬ ¤¨à¥ªâ®à¨ï¬. <EFBFBD>® ¯®«­ë¬ ¤¨à¥ªâ®à¨ï¬.
;[x] LOADDIR ¯®á«¥ READ ¢ë室¨âì á CF, ¥á«¨ ¯à®ç¨â ­® 0 ;[x] LOADDIR ¯®á«¥ READ ¢ë室¨âì á CF, ¥á«¨ ¯à®ç¨â ­® 0
;[ ] 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
;[x] <20>¥à¥¬¥­­ ï DirBlock ¯®ª §ë¢ îé ï ª ª®© ¡«®ª ¤¨à¥ªâ®à¨¨ ¢ ªíè. ;[x] <20>¥à¥¬¥­­ ï DirBlock ¯®ª §ë¢ îé ï ª ª®© ¡«®ª ¤¨à¥ªâ®à¨¨ ¢ ªíè.
@ -12,9 +12,9 @@
<EFBFBD>¥à¥«®¯ â¨âì <EFBFBD>¥à¥«®¯ â¨âì
;[ ] FINDDIR ;[x] FINDDIR
;[ ] LOAD_SAVE_DIR_PREPARE ;[x] LOAD_SAVE_DIR_PREPARE
;[ ] LOADDIR ;[x] LOADDIR
;[ ] SAVEDIR ;[ ] SAVEDIR
;[ ] RENAME ;[ ] RENAME
;[ ] CLOSE_FN ;[ ] CLOSE_FN