добить:

LOAD_NEXT_DIR_PART_TO_DIR_CACHE
WRITE_DIR_HANDLE
;-bug: GenIOCTL.GetParams - выдавала неправильное количество секторов для FDD
This commit is contained in:
Tolik 2026-01-16 22:51:22 +10:00
parent 32dca48eaf
commit 05c9224a7b
16 changed files with 301 additions and 206 deletions

View File

@ -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
;

View File

@ -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

View File

@ -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

View File

@ -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
;
////////////////////////////////////////////////////////////////////////

View File

@ -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 ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 

View File

@ -2,6 +2,7 @@
; A - FILE MANIPULATOR
MOVE_FP: CALL SET_FM
RET C
;
INC B
DJNZ .B_1
;from Start File

View File

@ -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
;

View File

@ -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

View File

@ -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
;

View File

@ -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,35 +2978,39 @@ 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
LD L,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à 
LD H,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD L,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à 
LD H,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD A,L
OR H
EXX
LD L,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD H,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
LD L,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD H,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
OR L
OR H
;
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 ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï

View File

@ -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

View File

@ -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 ç⥭¨¥/§ ¯¨áì

View File

@ -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]

View File

@ -1 +1 @@
5
6

View File

@ -357,9 +357,11 @@ GenIOCTL: BIT 7,B
PUSH HL
PUSH DE
LD A,H
LD H,0
LD C,L
LD HL,0
LD B,H
;
.mull_loop1: ADD HL,HL
.mull_loop1: ADD HL,BC
DEC A
JR NZ,.mull_loop1
;

@ -1 +1 @@
Subproject commit f5f85b3d14c65bfc2f8619b596815e350f1a9d5b
Subproject commit 2fec6202f716cfa3ed48fb9bfd79d1081cc2721b