mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
SEARCH_RECORD_IN_DIR_CACHE
допилить переключение страницы кэша при достижении конца директории (напоролись на ноль)
This commit is contained in:
parent
e8cf44ae6b
commit
ef258143e7
@ -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?
|
||||||
;
|
;
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
; ; ;
|
////////////////////////////////////////////////////////////////////////
|
||||||
@ -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
|
||||||
|
|||||||
185
DSS/FS/FAT.asm
185
DSS/FS/FAT.asm
@ -2172,9 +2172,13 @@ 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
|
||||||
;
|
;
|
||||||
LD HL,(CORE_BUFFERS.FS_Buffer.RootDirFirstSector_H);!TODO ¢®§¬®¦®, å¢ â¨â LD HL,0
|
XOR A
|
||||||
|
LD (CORE_BUFFERS.FS_Buffer.DirBlock),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
;
|
||||||
|
.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,8 +2624,8 @@ 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
|
||||||
@ -2597,12 +2642,10 @@ LOAD_SAVE_DIR_PREPARE:
|
|||||||
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
|
||||||
@ -2610,7 +2653,7 @@ LOAD_SAVE_DIR_PREPARE:
|
|||||||
;
|
;
|
||||||
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
|
||||||
@ -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
|
||||||
|
|||||||
11
DSS/ToDo.txt
11
DSS/ToDo.txt
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user