mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
добить:
LOAD_NEXT_DIR_PART_TO_DIR_CACHE WRITE_DIR_HANDLE
This commit is contained in:
parent
32dca48eaf
commit
90433ea1ec
@ -5,6 +5,7 @@
|
||||
;‚ëå®¤ë¥ § 票ï:
|
||||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
;CLOSE:
|
||||
CLOSE_FN: LD (.TMP),A
|
||||
CALL SET_FM
|
||||
@ -18,7 +19,6 @@ CLOSE_FN: LD (.TMP),A
|
||||
;
|
||||
BIT 7,(IY+_sFM.ACCESS_MODE)
|
||||
JR Z,.NOTMODF
|
||||
;
|
||||
; ä ©« ¨§¬¥ñ
|
||||
LD E,(IY+_sFM.DIR_CLUSTER_L)
|
||||
LD D,(IY+_sFM.DIR_CLUSTER_L+1)
|
||||
@ -50,39 +50,64 @@ CLOSE_FN: LD (.TMP),A
|
||||
;
|
||||
LD L,(IY+_sFM.HANDLE)
|
||||
LD H,(IY+_sFM.HANDLE+1)
|
||||
CALL LOADDIR.Custom ; [ ] big dir ;!FIXIT check error
|
||||
; [ ] big dir
|
||||
;!TODO ®â¬®â âì ªíè ¤® 㦮£® record index?
|
||||
;
|
||||
; CF=0
|
||||
CALL LOADDIR.Custom ; [x] big dir ;!FIXIT check error
|
||||
.TMP+1: LD A,0
|
||||
CALL SET_FM
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; ;
|
||||
; SET_PAGE_X DIRPAGE
|
||||
; EX AF,AF'
|
||||
; LD HL,DIRPAGE.buffer
|
||||
; LD DE,FAT_DIRECTORY_RECORD
|
||||
; LD C,(IY+_sFM.HANDLE)
|
||||
; LD B,(IY+_sFM.HANDLE+1)
|
||||
; PUSH BC ; record index
|
||||
; LD A,1 ; [x] big dir
|
||||
; AND B
|
||||
; LD B,A
|
||||
; JR .next_add
|
||||
; ;
|
||||
; .loop_add: ADD HL,DE
|
||||
; DEC BC
|
||||
; LD A,B
|
||||
; .next_add: OR C
|
||||
; JR NZ,.loop_add
|
||||
; ;
|
||||
; LD D,YH
|
||||
; LD E,YL
|
||||
; EX DE,HL
|
||||
; LD BC,FAT_DIRECTORY_RECORD
|
||||
; LDIR
|
||||
; EX AF,AF'
|
||||
; OUT (SLOT3),A
|
||||
; POP HL
|
||||
; CALL SAVEDIR
|
||||
; .NOTMODF: LD A,(.TMP)
|
||||
; JP RES_FM
|
||||
; ;
|
||||
; .error: POP DE
|
||||
; POP DE
|
||||
; RET
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
;
|
||||
SET_PAGE_X DIRPAGE
|
||||
EX AF,AF'
|
||||
; [ ] big dir
|
||||
;!TEST 9/11/23 record index
|
||||
LD HL,DIRPAGE.buffer
|
||||
LD DE,FAT_DIRECTORY_RECORD
|
||||
LD C,(IY+_sFM.HANDLE)
|
||||
LD B,(IY+_sFM.HANDLE+1)
|
||||
JR .CLOSE2
|
||||
;
|
||||
.CLOSE1: ADD HL,DE
|
||||
DEC BC
|
||||
.CLOSE2: LD A,B
|
||||
OR C
|
||||
JR NZ,.CLOSE1
|
||||
;LD L,(IY+_sFM.HANDLE)
|
||||
;LD H,(IY+_sFM.HANDLE+1)
|
||||
;;;;;;;;;
|
||||
LD D,YH
|
||||
LD L,(IY+_sFM.OffsetInDirCache)
|
||||
LD H,(IY+_sFM.OffsetInDirCache+1)
|
||||
PUSH HL
|
||||
LD E,YL
|
||||
LD D,YH
|
||||
EX DE,HL
|
||||
LD BC,FAT_DIRECTORY_RECORD
|
||||
LDIR
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
POP HL
|
||||
CALL SAVEDIR
|
||||
.NOTMODF: LD A,(.TMP)
|
||||
JP RES_FM
|
||||
@ -90,4 +115,3 @@ CLOSE_FN: LD (.TMP),A
|
||||
.error: POP DE
|
||||
POP DE
|
||||
RET
|
||||
;
|
||||
@ -17,6 +17,7 @@ CREATE: ; Current Dir 15/10/23 ;CREATE_FN:
|
||||
CALL .Prepare
|
||||
RET C
|
||||
CALL SEARCH.File
|
||||
; DE - record index
|
||||
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||
;CALL NC,DEL_FN.DELETE ;FILE EXIST RECREAT
|
||||
CALL NC,.FILE_EXISTS_DEL ;FILE EXIST RECREAT
|
||||
@ -45,16 +46,11 @@ CREATE: ; Current Dir 15/10/23 ;CREATE_FN:
|
||||
CALL .Prepare
|
||||
RET C
|
||||
CALL SEARCH.File
|
||||
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||||
; LD A,DSS_Error.sys.FILE_EXISTS
|
||||
; CCF
|
||||
; RET C
|
||||
JR NC,.FILE_EXISTS
|
||||
;
|
||||
CP DSS_Error.sys.FILE_NOT_FOUND
|
||||
SCF
|
||||
RET NZ
|
||||
;
|
||||
;
|
||||
;no_file_found
|
||||
.DO: ; FAT_DIRECTORY_RECORD.NAME + .EXT
|
||||
LD HL,CORE_BUFFERS.MASKARE
|
||||
@ -72,10 +68,8 @@ CREATE: ; Current Dir 15/10/23 ;CREATE_FN:
|
||||
INC HL
|
||||
DJNZ .loop1
|
||||
; .TIME .. .DATE
|
||||
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||||
;
|
||||
CALL WRITE_DATE_TIME_FOR_DIRECTORY_RECORD
|
||||
LD BC,#0600
|
||||
;
|
||||
.loop2: LD (HL),C
|
||||
INC HL
|
||||
DJNZ .loop2
|
||||
|
||||
@ -459,6 +459,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||
CP (HL)
|
||||
INC HL
|
||||
JR Z,.YP_ESLA
|
||||
;
|
||||
LD (HL),A
|
||||
INC HL
|
||||
.YP_ESLA: EX DE,HL
|
||||
@ -467,6 +468,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
|
||||
LDI
|
||||
CP ' '+1
|
||||
JR NC,.loop
|
||||
;
|
||||
DEC DE
|
||||
XOR A
|
||||
LD (DE),A
|
||||
|
||||
@ -8,8 +8,8 @@
|
||||
; B = #01 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS "filename.ext",0
|
||||
; ¯®¨áª ¡¥§ ®£à ¨ç¥¨¥ à §¬¥à ª â «®£ :
|
||||
; !TODO B = #02 - ¨¬ï ©¤¥®£® ä ©« ¢ ä®à¬ ⥠DOS + LFN
|
||||
; !TODO B = #80 - ¨¬ן ©¤¥®£® ה ©« ¢ ה®א¬ ג¥ 11 <20> ©ג "FilenameExt"
|
||||
; !TODO B = #81 - ¨¬ן ©¤¥®£® ה ©« ¢ ה®א¬ ג¥ DOS "filename.ext",0
|
||||
; B = #80 - ¨¬ן ©¤¥®£® ה ©« ¢ ה®א¬ ג¥ 11 <20> ©ג "FilenameExt"
|
||||
; B = #81 - ¨¬ן ©¤¥®£® ה ©« ¢ ה®א¬ ג¥ DOS "filename.ext",0
|
||||
;‚ëå®¤ë¥ § 票ï:
|
||||
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
@ -144,4 +144,4 @@ F_NEXT:
|
||||
LD DE,SEARCH.for_F_NEXT
|
||||
PUSH DE ; ¢ë室 ¢ SEARCH ¨§ SEARCH_RECORD_IN_DIR_CACHE
|
||||
JP SEARCH_RECORD_IN_DIR_CACHE.next_record
|
||||
;
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@ -83,7 +83,7 @@ MKDIR:
|
||||
LD (HL),D
|
||||
INC HL
|
||||
;
|
||||
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||||
CALL WRITE_DATE_TIME_FOR_DIRECTORY_RECORD
|
||||
; § ¯¨áì ¬« ¤è¥£® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_L
|
||||
POP BC ; áâ à訩 ®¬¥à ᥪâ®à
|
||||
POP DE ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
; A - FILE MANIPULATOR
|
||||
MOVE_FP: CALL SET_FM
|
||||
RET C
|
||||
;
|
||||
INC B
|
||||
DJNZ .B_1
|
||||
;from Start File
|
||||
|
||||
101
DSS/API/Open.asm
101
DSS/API/Open.asm
@ -28,24 +28,21 @@ OPEN_FN: ; Current Dir 15/10/23
|
||||
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
|
||||
RET C
|
||||
;
|
||||
; IX - ᬥ饨¥ § ¯¨áì ¢ SLOT3 DIRPAGE.buffer
|
||||
.FM: ; enter point from ATTRIB
|
||||
;R002 ;!TEST 9/11/23 record index
|
||||
PUSH DE ; á®åà 塞 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS (¯®«ãç¥ ¨§ SEARCH)
|
||||
;
|
||||
CALL GET_FM
|
||||
;!TEST 9/11/23 record index 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS
|
||||
POP DE
|
||||
;
|
||||
RET C
|
||||
;
|
||||
LD A,C ; ¤¥áªà¨¯â®à ä ©«
|
||||
EX AF,AF'
|
||||
;!TEST 9/11/23 record index 㪠§ â¥«ì § ¯¨áì ¢ ª â «®£¥ FS
|
||||
;POP DE
|
||||
; EXX
|
||||
LD (IY+_sFM.HANDLE),E
|
||||
LD (IY+_sFM.HANDLE+1),D
|
||||
; EXX
|
||||
;
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
LD (IY+_sFM.OffsetInDirCache),E
|
||||
LD (IY+_sFM.OffsetInDirCache+1),D
|
||||
LD D,YH
|
||||
LD E,YL
|
||||
LD HL,CORE_BUFFERS.HANDBUF
|
||||
@ -53,55 +50,19 @@ OPEN_FN: ; Current Dir 15/10/23
|
||||
LDIR
|
||||
.TMP+1: LD A,0
|
||||
LD (IY+_sFM.ACCESS_MODE),A
|
||||
; !FIXIT ®¯â¨¬¨§ã« âãâ
|
||||
;LD A,(TASK)
|
||||
;LD (IY+_sFM.TASK_NUM),A
|
||||
;XOR A
|
||||
;LD (IY+_sFM.OptimizedClusters),A
|
||||
;LD (IY+_sFM.KnownCluster_L),A
|
||||
;LD (IY+_sFM.KnownCluster_L+1),A
|
||||
;LD (IY+_sFM.KnownOffset_L),A
|
||||
;LD (IY+_sFM.KnownOffset_L+1),A
|
||||
;; fat32
|
||||
; LD (IY+_sFM.KnownCluster_H),A
|
||||
; LD (IY+_sFM.KnownCluster_H+1),A
|
||||
; LD (IY+_sFM.KnownOffset_H),A
|
||||
; LD (IY+_sFM.KnownOffset_H+1),A
|
||||
;;
|
||||
;LD (IY+_sFM.F_POSITION),A
|
||||
;LD (IY+_sFM.F_POSITION+1),A
|
||||
;LD (IY+_sFM.F_POSITION+2),A
|
||||
;LD (IY+_sFM.F_POSITION+3),A
|
||||
;LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
|
||||
;LD (IY+_sFM.DRIVE),A
|
||||
;; fat32
|
||||
;LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H
|
||||
;LD E,(HL)
|
||||
;INC HL
|
||||
;LD D,(HL)
|
||||
;LD (IY+_sFM.DIR_CLUSTER_H),E
|
||||
;LD (IY+_sFM.DIR_CLUSTER_H+1),D
|
||||
;;
|
||||
;LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L ; work directory FM
|
||||
;LD E,(HL)
|
||||
;INC HL
|
||||
;LD D,(HL)
|
||||
;LD (IY+_sFM.DIR_CLUSTER_L),E
|
||||
;LD (IY+_sFM.DIR_CLUSTER_L+1),D
|
||||
;
|
||||
PUSH IY
|
||||
POP HL
|
||||
LD DE,_sFM.F_POSITION
|
||||
ADD HL,DE
|
||||
XOR A
|
||||
LD (HL),A ; _sFM.F_POSITION
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.F_POSITION + 1
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.F_POSITION + 2
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.F_POSITION + 3
|
||||
; ‡ ã«ï¥¬
|
||||
; _sFM.F_POSITION
|
||||
; _sFM.F_POSITION + 1
|
||||
; _sFM.F_POSITION + 2
|
||||
; _sFM.F_POSITION + 3
|
||||
LD BC,#0400 ; B - áç¥â稪
|
||||
.loopZ0: LD (HL),C
|
||||
INC HL
|
||||
DJNZ .loopZ0
|
||||
;
|
||||
EX DE,HL
|
||||
LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L
|
||||
@ -121,27 +82,21 @@ OPEN_FN: ; Current Dir 15/10/23
|
||||
LD A,(TASK)
|
||||
LD (HL),A ; _sFM.TASK_NUM
|
||||
INC HL
|
||||
; ‡ ã«ï¥¬
|
||||
; _sFM.OptimizedClusters
|
||||
; _sFM.KnownCluster_L
|
||||
; _sFM.KnownCluster_L + 1
|
||||
; _sFM.KnownCluster_H
|
||||
; _sFM.KnownCluster_H + 1
|
||||
; _sFM.KnownOffset_L
|
||||
; _sFM.KnownOffset_L + 1
|
||||
; _sFM.KnownOffset_H
|
||||
; _sFM.KnownOffset_H + 1
|
||||
LD BC,#0900 ; B - áç¥â稪
|
||||
.loopZ1: LD (HL),C
|
||||
INC HL
|
||||
DJNZ .loopZ1
|
||||
;
|
||||
XOR A
|
||||
LD (HL),A ; _sFM.OptimizedClusters
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.KnownCluster_L
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.KnownCluster_L + 1
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.KnownCluster_H
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.KnownCluster_H + 1
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.KnownOffset_L
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.KnownOffset_L + 1
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.KnownOffset_H
|
||||
INC HL
|
||||
LD (HL),A ; _sFM.KnownOffset_H + 1
|
||||
; ;
|
||||
EX AF,AF'
|
||||
AND A
|
||||
RET
|
||||
;
|
||||
|
||||
@ -6,8 +6,8 @@ READ: LD (.R_POINT),HL
|
||||
LD (.S_POINT),HL
|
||||
CALL SET_FM
|
||||
RET C
|
||||
CALL .TEST_SIZE
|
||||
;
|
||||
CALL .TEST_SIZE
|
||||
LD A,D
|
||||
OR E
|
||||
JP Z,.NOREAD
|
||||
|
||||
@ -367,9 +367,11 @@ FM_FIND: CP FMCOUNT+1
|
||||
LD DE,CORE_BUFFERS.FM_BUF.Size
|
||||
AND A
|
||||
JR Z,.endLoop
|
||||
;
|
||||
.loop: ADD IY,DE
|
||||
DEC A
|
||||
JR NZ,.loop
|
||||
;
|
||||
.endLoop: POP DE
|
||||
; A=0
|
||||
OR (IY) ;+00 NAME
|
||||
@ -378,29 +380,25 @@ FM_FIND: CP FMCOUNT+1
|
||||
.error: XOR A
|
||||
LD A,DSS_Error.sys.INVALID_HANDLE
|
||||
RET
|
||||
;
|
||||
|
||||
|
||||
SET_FM: CALL FM_FIND
|
||||
RET NZ ; no error
|
||||
; error
|
||||
;LD A,DSS_Error.sys.INVALID_HANDLE
|
||||
; CF = 1
|
||||
SCF
|
||||
RET Z
|
||||
; no error
|
||||
XOR A ;LD A,DSS_Error.sys.NO_ERROR
|
||||
; CF = 0
|
||||
RET
|
||||
|
||||
;
|
||||
|
||||
RES_FM: CALL FM_FIND
|
||||
; error
|
||||
; LD A,DSS_Error.sys.INVALID_HANDLE
|
||||
SCF
|
||||
RET Z
|
||||
RET Z ; error
|
||||
; no error
|
||||
XOR A
|
||||
LD (IY + _sFM.FS_REC.NAME),A
|
||||
RET
|
||||
;
|
||||
|
||||
;!TODO CHECK LOCKING
|
||||
GET_FM: LD B,FMCOUNT
|
||||
LD C,#FF
|
||||
@ -411,10 +409,12 @@ GET_FM: LD B,FMCOUNT
|
||||
LD A,(IY + _sFM.FS_REC.NAME)
|
||||
OR A
|
||||
RET Z
|
||||
;
|
||||
DJNZ .loop
|
||||
LD A,DSS_Error.sys.NO_HANDLES
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
;FP COMPARE
|
||||
; CY - FILE POINTER > SIZE
|
||||
@ -439,6 +439,7 @@ UPPER: CP 'a'
|
||||
RET C
|
||||
CP 'z' + 1
|
||||
JR NC,.CheckRUS
|
||||
;
|
||||
.Dec: SUB #20
|
||||
RET
|
||||
;
|
||||
|
||||
157
DSS/FS/FAT.asm
157
DSS/FS/FAT.asm
@ -2168,18 +2168,29 @@ SEARCH:
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; ‚室:
|
||||
; ‚ë室: DE'
|
||||
;
|
||||
SET_RECORD_INDEX_FROM_DIR_BLOCK:
|
||||
SLA A
|
||||
EXX
|
||||
; record index
|
||||
LD D,A
|
||||
LD E,0
|
||||
EXX
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
SEARCH_RECORD_IN_DIR_CACHE:
|
||||
;CPL
|
||||
LD C,A
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
|
||||
LD (.StartPage),A
|
||||
SLA A
|
||||
;!TEST 9/11/23 record index
|
||||
EXX
|
||||
LD D,A
|
||||
LD E,0
|
||||
EXX
|
||||
LD (LOAD_NEXT_DIR_PART_TO_DIR_CACHE.StartPage),A
|
||||
CALL SET_RECORD_INDEX_FROM_DIR_BLOCK
|
||||
;
|
||||
.loop_big: LD IX,DIRPAGE.buffer
|
||||
.loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
|
||||
@ -2216,19 +2227,35 @@ SEARCH_RECORD_IN_DIR_CACHE:
|
||||
;JR NZ,.next_record
|
||||
JR Z,.next_char
|
||||
;
|
||||
.next_record: ;!TEST 9/11/23 record index
|
||||
.next_record: EXX
|
||||
INC DE ; record index
|
||||
EXX
|
||||
INC DE
|
||||
EXX
|
||||
;
|
||||
LD DE,FAT_DIRECTORY_RECORD
|
||||
ADD IX,DE
|
||||
JR NC,.loop
|
||||
;
|
||||
; CF=1
|
||||
CALL LOAD_NEXT_DIR_PART_TO_DIR_CACHE
|
||||
RET C
|
||||
JR NZ,.loop_big
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
|
||||
.next_char: INC HL
|
||||
INC DE
|
||||
DJNZ .loop_compare
|
||||
; CF=0
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------; LOAD_NEXT_DIR_PART_TO_DIR_CACHE
|
||||
; !FIXIT root dir in LOADDIR
|
||||
; !FIXIT ¥á«¨ ¢ ªíè ¡ë«¨ ¨§¬¥¥¨ï?
|
||||
.readDirNext: PUSH BC
|
||||
; CF=1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
LOAD_NEXT_DIR_PART_TO_DIR_CACHE:
|
||||
PUSH BC
|
||||
EXX
|
||||
PUSH DE ; record index
|
||||
EX DE,HL
|
||||
@ -2238,8 +2265,7 @@ SEARCH_RECORD_IN_DIR_CACHE:
|
||||
POP BC
|
||||
;JR NC,.loop_big ; !FIXIT ¬®¦¥â ¡ëâì ®è¨¡ª çâ¥¨ï ¨«¨ ¯à¨ ZF - ª®¥æ ¤¨à¥ªâ®à¨¨
|
||||
;RET
|
||||
|
||||
RET C
|
||||
RET C ; ¥á«¨ ¢áñ ¯¥à¥¡à «¨
|
||||
;
|
||||
; ¯®«ë© ®¡å®¤ ª â «®£ ç¨ ï á § £à㦥®© áâà ¨æë
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
|
||||
@ -2251,15 +2277,81 @@ SEARCH_RECORD_IN_DIR_CACHE:
|
||||
EXX
|
||||
.toStartPage: ;
|
||||
.StartPage+1: CP 0
|
||||
JR NZ,.loop_big
|
||||
;JR NZ,.loop_big
|
||||
;;
|
||||
;SCF
|
||||
;RET
|
||||
SCF
|
||||
CCF
|
||||
RET ; ¥á«¨ ¢áñ ¯¥à¥¡à «¨
|
||||
;
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; [ ] big dir ;!FIXIT ç¨ âì ¯à®å®¤ á ç « ¤¨à¥ªâ®à¨¨ ¢á¥£¤ , ç⮡ ¥ § å« ¬«ïâì
|
||||
; !FIXIT â®ç® «¨ ¢ ã«¥¢®¬ FM ª®®à¤¨ âë 㦮© ¤¨à¥ªâ®à¨¨?
|
||||
; ᪮¯¨à®¢ âì § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ ) de ix iy
|
||||
; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
; ¢å®¤: (HANDBUF) - § ¯¨áì ª â «®£
|
||||
; ¢ë室: DE - record index
|
||||
WRITE_DIR_HANDLE:
|
||||
SET_PAGE_X DIRPAGE
|
||||
EX AF,AF'
|
||||
LD IX,DIRPAGE.buffer ; IX
|
||||
;!TEST 9/11/23 record index
|
||||
EXX
|
||||
LD DE,0
|
||||
EXX
|
||||
;
|
||||
LD DE,FAT_DIRECTORY_RECORD
|
||||
.loop: LD A,(IX + FAT_DIRECTORY_RECORD.NAME); IX
|
||||
OR A
|
||||
JR Z,.WRT_HN2
|
||||
;
|
||||
CP #E5
|
||||
JR Z,.WRT_HN2
|
||||
;
|
||||
EXX
|
||||
INC DE ; record index
|
||||
EXX
|
||||
ADD IX,DE ; IX,
|
||||
JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£ = áâà ¨æ
|
||||
;
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
LD A,DSS_Error.sys.ROOT_OVERFLOW
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
.next_char: INC HL
|
||||
INC DE
|
||||
DJNZ .loop_compare
|
||||
; CF=0
|
||||
.WRT_HN2: EX DE,HL
|
||||
LD HL,CORE_BUFFERS.HANDBUF
|
||||
LD BC,CORE_BUFFERS.HANDBUF.SIZE
|
||||
LDIR
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
; ¯à®¢¥à塞, 㢥«¨ç¨«áï «¨ à §¬¥à ¤ ëå ¤¨à¥ªâ®à¨¨
|
||||
LD HL,DIRPAGE.buffer
|
||||
LD BC,(SAVEDIR.DirBlkSize)
|
||||
DEC BC
|
||||
ADD HL,BC
|
||||
AND A
|
||||
SBC HL,DE
|
||||
JR NC,.SAVEDIR
|
||||
;
|
||||
; à §¬¥à ¤ ëå ¤¨à¥ªâ®à¨¨ 㢥«¨ç¨«áï
|
||||
LD HL,(SAVEDIR.DirBlkSize)
|
||||
LD BC,(CORE_BUFFERS.FS_Buffer.BytesPerCluster)
|
||||
ADD HL,BC
|
||||
LD (SAVEDIR.DirBlkSize),HL
|
||||
AND A
|
||||
.SAVEDIR: EXX
|
||||
PUSH DE
|
||||
EXX
|
||||
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
CALL SAVEDIR
|
||||
POP DE
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
@ -2811,13 +2903,12 @@ WRITE_DIR_HANDLE:
|
||||
EXX
|
||||
;
|
||||
LD BC,FAT_DIRECTORY_RECORD
|
||||
.loop: ;LD A,(IX+00)
|
||||
LD A,(HL)
|
||||
.loop: LD A,(HL)
|
||||
OR A
|
||||
JR Z,.WRT_HN2
|
||||
;
|
||||
CP #E5
|
||||
JR Z,.WRT_HN2
|
||||
;ADD IX,BC
|
||||
ADD HL,BC
|
||||
JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£ = áâà ¨æ
|
||||
;
|
||||
@ -2827,9 +2918,7 @@ WRITE_DIR_HANDLE:
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
.WRT_HN2: ;LD D,XH
|
||||
;LD E,XL
|
||||
EX DE,HL
|
||||
.WRT_HN2: EX DE,HL
|
||||
LD HL,CORE_BUFFERS.HANDBUF
|
||||
LD BC,CORE_BUFFERS.HANDBUF.SIZE
|
||||
LDIR
|
||||
@ -2889,12 +2978,16 @@ GET_ADDR_IN_DIR_CACHE:
|
||||
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; !TODO ®¯â¨¬¨§¨à®¢ âì ¯®áâ®ïë¥ á®åà ¥¨ï Dir Cache
|
||||
; “¤ «ï¥â § ¯¨áì ¢ ª â «®£¥ ¨ ®á¢®¡®¦¤ ¥â § ïâãî æ¥¯®çªã ª« áâ¥à®¢
|
||||
; ‚室: IX - 㪠§ ⥫ì 㤠«ï¥¬ãî § ¯¨áì ¢ DIRPAGE
|
||||
; ¢ Š<>˜ ¤¨à¥ªâ®à¨¨ ¤®«¦ ¡ëâì § £à㦥 ç áâì á 㦮© § ¯¨áìî
|
||||
;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
||||
DELETE_REC_FAT: SET_PAGE_X DIRPAGE
|
||||
EX AF,AF'
|
||||
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
|
||||
CALL SET_RECORD_INDEX_FROM_DIR_BLOCK
|
||||
; DE' - record index
|
||||
;CALL DELETE_LFN_RECORDS ; [ ] big dir ; [x] 㤠«¥¨¥ § ¯¨á¨ LFN
|
||||
LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§ ª 㤠«¥¨ï ä ©«
|
||||
; fat32
|
||||
@ -2911,13 +3004,13 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
|
||||
EX AF,AF'
|
||||
OUT (SLOT3),A
|
||||
EX AF,AF'
|
||||
; ¥á«¨ ¤«¨ ä ©« ã«¥¢ ï, â® ¤ «ìè¥ «®¢¨âì âã⠥祣®.
|
||||
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
EX DE,HL ; record index ¨§ SET_RECORD_INDEX_FROM_DIR_BLOCK
|
||||
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
; ¥á«¨ à §¬¥à ä ©« ¥ ®«ì
|
||||
.loop: ;EX DE,HL ; hl=®¬¥à ª« áâ¥à
|
||||
;EXX
|
||||
; EX DE,HL
|
||||
;EXX
|
||||
PUSH HL ; record index
|
||||
.loop: ; hl=®¬¥à ª« áâ¥à
|
||||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||
EXX
|
||||
PUSH DE ; ®¬¥à á«¥¤. ª« áâ¥à
|
||||
@ -2938,8 +3031,10 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
|
||||
EXX
|
||||
;EX DE,HL
|
||||
JP NC,.loop
|
||||
;
|
||||
CALL WRITE_FAT_TABLE
|
||||
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤ ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥¨«®áì ¢ ªíè, ç⮡ ¥ ¯¨á âì ¤¨áª «¨è¥£®
|
||||
POP HL ; record index
|
||||
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
@ -2948,7 +3043,7 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
|
||||
;----------------------------------------------------------------------;
|
||||
; ‚室: HL - ¤à¥á ªã¤ ¯¨á âì
|
||||
; ‚ë室: HL - ¤à¥á á«¥¤ãî騩 ¯®á«¥ § ¯¨á ®£®
|
||||
WRITE_DATE_TIME_TO_DIRECTORY_RECORD:
|
||||
WRITE_DATE_TIME_FOR_DIRECTORY_RECORD:
|
||||
; [ ] VFAT date
|
||||
PUSH HL
|
||||
CALL SYSTIME ; ã§ âì ⥪. ¤ âã ¨ ¢à¥¬ï
|
||||
|
||||
@ -310,6 +310,20 @@ DIV_by_Shifts:
|
||||
LD L,A
|
||||
RET
|
||||
;----------------------------------------------------------------------;
|
||||
;
|
||||
|
||||
;----------------------------------------------------------------------;
|
||||
; ‚•Ž„: HL - ¤à¥á ¢ ¯ ¬ï⨠¤«ï § ã«¥¨ï
|
||||
; B - ª®«¨ç¥á⢮ ¡ ©â®¢
|
||||
; ‚›•Ž„: HL - á«¥¤ãî騩 ¤à¥á
|
||||
; SET_HL_MEM_ZERO:
|
||||
; XOR A
|
||||
; LD (HL),A
|
||||
; INC HL
|
||||
; DJNZ .loop
|
||||
; RET
|
||||
;----------------------------------------------------------------------;
|
||||
;
|
||||
|
||||
;===============================================================================================================================
|
||||
MACRO PRINT_LINE_KERNEL_PANIC coordY, txtString, txtStringSize, txtColor
|
||||
|
||||
@ -39,13 +39,13 @@
|
||||
; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
|
||||
; .TIME: WORD #0000 ;+ #16 +22 TIME
|
||||
; .DATE: WORD #0000 ;+ #18 +24 DATE
|
||||
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ; [ ] fat32
|
||||
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER
|
||||
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
|
||||
; from Core
|
||||
.F_POSITION DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
|
||||
.DIR_CLUSTER_L WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW
|
||||
.DIR_CLUSTER_H WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32
|
||||
.HANDLE WORD #0000 ;+ #28 +40 HANDLE NUMBER
|
||||
.DIR_CLUSTER_H WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; fat32
|
||||
.HANDLE WORD #0000 ;+ #28 +40 HANDLE NUMBER (record index)
|
||||
.DRIVE BYTE #00 ;+ #2A +42 DRIVE OR CURRENT
|
||||
.ACCESS_MODE BYTE #00 ;+ #2B +43 ACCESS MODE
|
||||
.TASK_NUM BYTE #00 ;+ #2C +44 TASK
|
||||
@ -54,6 +54,7 @@
|
||||
.KnownCluster_H WORD #0000 ;+ #30 +48 ‘â à襥 á«®¢® ®¬¥à ª« áâ¥à ¤«ï ª®â®à®£® ¨§¢¥áâ® ®â®á¨â¥«ì®¥ ᬥ饨¥ ¢ãâà¨ ä ©«
|
||||
.KnownOffset_L WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.KnownOffset_H WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饨ï (¢ ª« áâ¥à å) ®â®á¨â¥«ì® ç « ä ©« ¤«ï á®åà ¥®£® ®¬¥à ª« áâ¥à .
|
||||
.OffsetInDirCache WORD #0000 ;+ #36 +54 ᬥ饨¥ § ¯¨áì ¢ SLOT3 DIRPAGE.buffer
|
||||
ENDS
|
||||
|
||||
;ACCESS MODE: A=0 ç⥨¥/§ ¯¨áì
|
||||
|
||||
@ -22,10 +22,16 @@
|
||||
;[x] FINDDIR
|
||||
;[x] LOAD_SAVE_DIR_PREPARE
|
||||
;[x] LOADDIR
|
||||
;[ ] SAVEDIR
|
||||
;[x] DELETE_REC_FAT
|
||||
;[x] SAVEDIR
|
||||
;[ ] RENAME
|
||||
;[ ] CLOSE_FN
|
||||
;[ ] DEL_FN
|
||||
;[ ] RMDIR
|
||||
;[ ] OPENDIR
|
||||
;[ ] DELETE_LFN_RECORDS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Current dir ¤«ï ª ¦¤®£® ¤¨áª :
|
||||
;[ ] ‘®åà ïâì ¯ãâì ª ª [¤«¨ ¬ áᨢ ][RECORD_INDEX,DIR_CLUSTER][RECORD_INDEX,DIR_CLUSTER]..[RECORD_INDEX,DIR_CLUSTER]
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit f5f85b3d14c65bfc2f8619b596815e350f1a9d5b
|
||||
Subproject commit 6073b8787867fe5d217d064c9f5f77972303148c
|
||||
Loading…
Reference in New Issue
Block a user