mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
prepare for FAT "big dir" support, step 2
This commit is contained in:
parent
4da5e6c350
commit
0a649252ab
@ -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
|
||||
;
|
||||
/*
|
||||
‹î¡ë¥ ¨§¬¥¥¨ï ¢ ¤¨à¥ªâ®à¨¨ ã¡ìîâ ¥ñ.
|
||||
*/
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -1 +1 @@
|
||||
2
|
||||
3
|
||||
@ -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
|
||||
;
|
||||
|
||||
@ -1 +1 @@
|
||||
526
|
||||
527
|
||||
@ -1 +1 @@
|
||||
Subproject commit 97d5ea8a4b1359d49fb706f24aae6af6bb4eef66
|
||||
Subproject commit f5f85b3d14c65bfc2f8619b596815e350f1a9d5b
|
||||
Loading…
Reference in New Issue
Block a user