добить:

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 ; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
;CLOSE: ;CLOSE:
CLOSE_FN: LD (.TMP),A CLOSE_FN: LD (.TMP),A
CALL SET_FM CALL SET_FM
@ -18,8 +19,7 @@ CLOSE_FN: LD (.TMP),A
; ;
BIT 7,(IY+_sFM.ACCESS_MODE) BIT 7,(IY+_sFM.ACCESS_MODE)
JR Z,.NOTMODF JR Z,.NOTMODF
; ; ä ©« ¨§¬¥­ñ­
; ä ©« ¨§¬¥­ñ­
LD E,(IY+_sFM.DIR_CLUSTER_L) LD E,(IY+_sFM.DIR_CLUSTER_L)
LD D,(IY+_sFM.DIR_CLUSTER_L+1) LD D,(IY+_sFM.DIR_CLUSTER_L+1)
PUSH DE PUSH DE
@ -50,39 +50,64 @@ 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 ;!FIXIT check error ; CF=0
; [ ] big dir CALL LOADDIR.Custom ; [x] big dir ;!FIXIT check error
;!TODO ®â¬®â âì ªíè ¤® ­ã¦­®£® record index?
;
.TMP+1: LD A,0 .TMP+1: LD A,0
CALL SET_FM 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 SET_PAGE_X DIRPAGE
EX AF,AF' EX AF,AF'
; [ ] big dir LD L,(IY+_sFM.OffsetInDirCache)
;!TEST 9/11/23 record index LD H,(IY+_sFM.OffsetInDirCache+1)
LD HL,DIRPAGE.buffer PUSH HL
LD DE,FAT_DIRECTORY_RECORD LD E,YL
LD C,(IY+_sFM.HANDLE) LD D,YH
LD B,(IY+_sFM.HANDLE+1) EX DE,HL
JR .CLOSE2 LD BC,FAT_DIRECTORY_RECORD
; LDIR
.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 E,YL
EX DE,HL
LD BC,FAT_DIRECTORY_RECORD
LDIR
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£® POP HL
CALL SAVEDIR CALL SAVEDIR
.NOTMODF: LD A,(.TMP) .NOTMODF: LD A,(.TMP)
JP RES_FM JP RES_FM
@ -90,4 +115,3 @@ CLOSE_FN: LD (.TMP),A
.error: POP DE .error: POP DE
POP DE POP DE
RET RET
;

View File

@ -17,6 +17,7 @@ CREATE: ; Current Dir 15/10/23 ;CREATE_FN:
CALL .Prepare CALL .Prepare
RET C RET C
CALL SEARCH.File 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 ; [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,DEL_FN.DELETE ;FILE EXIST RECREAT
CALL NC,.FILE_EXISTS_DEL ;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 CALL .Prepare
RET C RET C
CALL SEARCH.File CALL SEARCH.File
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024 JR NC,.FILE_EXISTS
; LD A,DSS_Error.sys.FILE_EXISTS
; CCF
; RET C
JR NC,.FILE_EXISTS
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;
; ;
CP DSS_Error.sys.FILE_NOT_FOUND
SCF
RET NZ
;no_file_found ;no_file_found
.DO: ; FAT_DIRECTORY_RECORD.NAME + .EXT .DO: ; FAT_DIRECTORY_RECORD.NAME + .EXT
LD HL,CORE_BUFFERS.MASKARE LD HL,CORE_BUFFERS.MASKARE
@ -72,10 +68,8 @@ CREATE: ; Current Dir 15/10/23 ;CREATE_FN:
INC HL INC HL
DJNZ .loop1 DJNZ .loop1
; .TIME .. .DATE ; .TIME .. .DATE
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD CALL WRITE_DATE_TIME_FOR_DIRECTORY_RECORD
;
LD BC,#0600 LD BC,#0600
;
.loop2: LD (HL),C .loop2: LD (HL),C
INC HL INC HL
DJNZ .loop2 DJNZ .loop2

View File

@ -459,6 +459,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
CP (HL) CP (HL)
INC HL INC HL
JR Z,.YP_ESLA JR Z,.YP_ESLA
;
LD (HL),A LD (HL),A
INC HL INC HL
.YP_ESLA: EX DE,HL .YP_ESLA: EX DE,HL
@ -467,6 +468,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LDI LDI
CP ' '+1 CP ' '+1
JR NC,.loop JR NC,.loop
;
DEC DE DEC DE
XOR A XOR A
LD (DE),A LD (DE),A

View File

@ -8,8 +8,8 @@
; B = #01 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0 ; B = #01 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0
; ¯®¨áª ¡¥§ ®£à ­¨ç¥­¨¥ ­  à §¬¥à ª â «®£ : ; ¯®¨áª ¡¥§ ®£à ­¨ç¥­¨¥ ­  à §¬¥à ª â «®£ :
; !TODO B = #02 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS + LFN ; !TODO B = #02 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS + LFN
; !TODO B = #80 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ 11 ¡ ©â "FilenameExt" ; B = #80 - ¨¬ן ­ ©¤¥­­®£® ה ©«  ¢ ה®א¬ ג¥ 11 <20> ©ג "FilenameExt"
; !TODO B = #81 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0 ; B = #81 - ¨¬ן ­ ©¤¥­­®£® ה ©«  ¢ ה®א¬ ג¥ DOS "filename.ext",0
;‚ë室­ë¥ §­ ç¥­¨ï: ;‚ë室­ë¥ §­ ç¥­¨ï:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1 ; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
@ -39,7 +39,7 @@ F_FIRST: CALL .INIT_VARS
PUSH DE ; record index ¬®¦¥â ¨ ­¥ ­ã¦­® PUSH DE ; record index ¬®¦¥â ¨ ­¥ ­ã¦­®
LD HL,CORE_BUFFERS.MASKARE LD HL,CORE_BUFFERS.MASKARE
.DTABUF+1: LD DE,0 .DTABUF+1: LD DE,0
LD BC,FAT_DIRECTORY_RECORD.ATTRIBUT ; ª®¯¨à㥬 .NAME ¨ .EXT LD BC,FAT_DIRECTORY_RECORD.ATTRIBUT ; ×®¯¨אד¥¬ .NAME ¨ .EXT
LDIR LDIR
.SEARCH_ATTRIBUT+1: .SEARCH_ATTRIBUT+1:
LD A,0 ; DSS_FCB_MAIN.SEARCH_ATTRIBUT LD A,0 ; DSS_FCB_MAIN.SEARCH_ATTRIBUT
@ -144,4 +144,4 @@ F_NEXT:
LD DE,SEARCH.for_F_NEXT LD DE,SEARCH.for_F_NEXT
PUSH DE ; ¢ë室 ¢ SEARCH ¨§ SEARCH_RECORD_IN_DIR_CACHE PUSH DE ; ¢ë室 ¢ SEARCH ¨§ SEARCH_RECORD_IN_DIR_CACHE
JP SEARCH_RECORD_IN_DIR_CACHE.next_record JP SEARCH_RECORD_IN_DIR_CACHE.next_record
; ////////////////////////////////////////////////////////////////////////

View File

@ -83,7 +83,7 @@ MKDIR:
LD (HL),D LD (HL),D
INC HL INC HL
; ;
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD CALL WRITE_DATE_TIME_FOR_DIRECTORY_RECORD
; § ¯¨áì ¬« ¤è¥£® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_L ; § ¯¨áì ¬« ¤è¥£® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_L
POP BC ; áâ à訩 ­®¬¥à ᥪâ®à  POP BC ; áâ à訩 ­®¬¥à ᥪâ®à 
POP DE ; ¬« ¤è¨© ­®¬¥à ᥪâ®à  POP DE ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 

View File

@ -2,6 +2,7 @@
; A - FILE MANIPULATOR ; A - FILE MANIPULATOR
MOVE_FP: CALL SET_FM MOVE_FP: CALL SET_FM
RET C RET C
;
INC B INC B
DJNZ .B_1 DJNZ .B_1
;from Start File ;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 .FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
RET C RET C
; ;
; IX - ᬥ饭¨¥ ­  § ¯¨áì ¢ SLOT3 DIRPAGE.buffer
.FM: ; enter point from ATTRIB .FM: ; enter point from ATTRIB
;R002 ;!TEST 9/11/23 record index PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;
CALL GET_FM CALL GET_FM
;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS POP DE
POP DE
;
RET C RET C
;
LD A,C ; ¤¥áªà¨¯â®à ä ©«  LD A,C ; ¤¥áªà¨¯â®à ä ©« 
EX AF,AF' EX AF,AF'
;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS LD (IY+_sFM.HANDLE),E
;POP DE LD (IY+_sFM.HANDLE+1),D
; EXX LD D,XH
LD (IY+_sFM.HANDLE),E LD E,XL
LD (IY+_sFM.HANDLE+1),D LD (IY+_sFM.OffsetInDirCache),E
; EXX LD (IY+_sFM.OffsetInDirCache+1),D
;
LD D,YH LD D,YH
LD E,YL LD E,YL
LD HL,CORE_BUFFERS.HANDBUF LD HL,CORE_BUFFERS.HANDBUF
@ -53,95 +50,53 @@ 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
; !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 PUSH IY
POP HL POP HL
LD DE,_sFM.F_POSITION LD DE,_sFM.F_POSITION
ADD HL,DE ADD HL,DE
XOR A ; ‡ ­ã«ï¥¬
LD (HL),A ; _sFM.F_POSITION ; _sFM.F_POSITION
INC HL ; _sFM.F_POSITION + 1
LD (HL),A ; _sFM.F_POSITION + 1 ; _sFM.F_POSITION + 2
INC HL ; _sFM.F_POSITION + 3
LD (HL),A ; _sFM.F_POSITION + 2 LD BC,#0400 ; B - áç¥â稪
INC HL .loopZ0: LD (HL),C
LD (HL),A ; _sFM.F_POSITION + 3 INC HL
INC HL DJNZ .loopZ0
; ;
EX DE,HL EX DE,HL
LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L
LDI ; _sFM.DIR_CLUSTER_L LDI ; _sFM.DIR_CLUSTER_L
LDI ; _sFM.DIR_CLUSTER_L + 1 LDI ; _sFM.DIR_CLUSTER_L + 1
LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H LD HL,CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_H
LDI ; _sFM.DIR_CLUSTER_H LDI ; _sFM.DIR_CLUSTER_H
LDI ; _sFM.DIR_CLUSTER_H + 1 LDI ; _sFM.DIR_CLUSTER_H + 1
EX DE,HL EX DE,HL
; ;
INC HL INC HL
INC HL INC HL
LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) LD A,(CORE_BUFFERS.FS_Buffer.DRIVE)
LD (HL),A ; _sFM.DRIVE LD (HL),A ; _sFM.DRIVE
INC HL INC HL
INC HL INC HL
LD A,(TASK) LD A,(TASK)
LD (HL),A ; _sFM.TASK_NUM LD (HL),A ; _sFM.TASK_NUM
INC HL 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' EX AF,AF'
AND A AND A
RET RET
;

View File

@ -6,8 +6,8 @@ READ: LD (.R_POINT),HL
LD (.S_POINT),HL LD (.S_POINT),HL
CALL SET_FM CALL SET_FM
RET C RET C
CALL .TEST_SIZE
; ;
CALL .TEST_SIZE
LD A,D LD A,D
OR E OR E
JP Z,.NOREAD JP Z,.NOREAD

View File

@ -367,9 +367,11 @@ FM_FIND: CP FMCOUNT+1
LD DE,CORE_BUFFERS.FM_BUF.Size LD DE,CORE_BUFFERS.FM_BUF.Size
AND A AND A
JR Z,.endLoop JR Z,.endLoop
;
.loop: ADD IY,DE .loop: ADD IY,DE
DEC A DEC A
JR NZ,.loop JR NZ,.loop
;
.endLoop: POP DE .endLoop: POP DE
; A=0 ; A=0
OR (IY) ;+00 NAME OR (IY) ;+00 NAME
@ -378,29 +380,25 @@ FM_FIND: CP FMCOUNT+1
.error: XOR A .error: XOR A
LD A,DSS_Error.sys.INVALID_HANDLE LD A,DSS_Error.sys.INVALID_HANDLE
RET RET
;
SET_FM: CALL FM_FIND SET_FM: CALL FM_FIND
RET NZ ; no error
; error ; error
;LD A,DSS_Error.sys.INVALID_HANDLE
; CF = 1
SCF SCF
RET Z
; no error
XOR A ;LD A,DSS_Error.sys.NO_ERROR
; CF = 0
RET RET
;
RES_FM: CALL FM_FIND RES_FM: CALL FM_FIND
; error
; LD A,DSS_Error.sys.INVALID_HANDLE
SCF SCF
RET Z RET Z ; error
; no error ; no error
XOR A XOR A
LD (IY + _sFM.FS_REC.NAME),A LD (IY + _sFM.FS_REC.NAME),A
RET RET
; ;
;!TODO CHECK LOCKING ;!TODO CHECK LOCKING
GET_FM: LD B,FMCOUNT GET_FM: LD B,FMCOUNT
LD C,#FF LD C,#FF
@ -411,10 +409,12 @@ GET_FM: LD B,FMCOUNT
LD A,(IY + _sFM.FS_REC.NAME) LD A,(IY + _sFM.FS_REC.NAME)
OR A OR A
RET Z RET Z
;
DJNZ .loop DJNZ .loop
LD A,DSS_Error.sys.NO_HANDLES LD A,DSS_Error.sys.NO_HANDLES
SCF SCF
RET RET
;
;FP COMPARE ;FP COMPARE
; CY - FILE POINTER > SIZE ; CY - FILE POINTER > SIZE
@ -439,6 +439,7 @@ UPPER: CP 'a'
RET C RET C
CP 'z' + 1 CP 'z' + 1
JR NC,.CheckRUS JR NC,.CheckRUS
;
.Dec: SUB #20 .Dec: SUB #20
RET 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: SEARCH_RECORD_IN_DIR_CACHE:
;CPL ;CPL
LD C,A LD C,A
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock) LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
LD (.StartPage),A LD (LOAD_NEXT_DIR_PART_TO_DIR_CACHE.StartPage),A
SLA A CALL SET_RECORD_INDEX_FROM_DIR_BLOCK
;!TEST 9/11/23 record index
EXX
LD D,A
LD E,0
EXX
; ;
.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)
@ -2216,19 +2227,35 @@ SEARCH_RECORD_IN_DIR_CACHE:
;JR NZ,.next_record ;JR NZ,.next_record
JR Z,.next_char JR Z,.next_char
; ;
.next_record: ;!TEST 9/11/23 record index .next_record: EXX
EXX INC DE ; record index
INC DE EXX
EXX
;
LD DE,FAT_DIRECTORY_RECORD LD DE,FAT_DIRECTORY_RECORD
ADD IX,DE ADD IX,DE
JR NC,.loop 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 root dir in LOADDIR
; !FIXIT ¥á«¨ ¢ ªíè ¡ë«¨ ¨§¬¥­¥­¨ï? ; !FIXIT ¥á«¨ ¢ ªíè ¡ë«¨ ¨§¬¥­¥­¨ï?
.readDirNext: PUSH BC ; CF=1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
LOAD_NEXT_DIR_PART_TO_DIR_CACHE:
PUSH BC
EXX EXX
PUSH DE ; record index PUSH DE ; record index
EX DE,HL EX DE,HL
@ -2238,8 +2265,7 @@ SEARCH_RECORD_IN_DIR_CACHE:
POP BC POP BC
;JR NC,.loop_big ; !FIXIT ¬®¦¥â ¡ëâì ®è¨¡ª  ç⥭¨ï ¨«¨ ¯à¨ ZF - ª®­¥æ ¤¨à¥ªâ®à¨¨ ;JR NC,.loop_big ; !FIXIT ¬®¦¥â ¡ëâì ®è¨¡ª  ç⥭¨ï ¨«¨ ¯à¨ ZF - ª®­¥æ ¤¨à¥ªâ®à¨¨
;RET ;RET
RET C ; ¥á«¨ ¢áñ ¯¥à¥¡à «¨
RET C
; ;
; ¯®«­ë© ®¡å®¤ ª â «®£  ­ ç¨­ ï á § £à㦥­­®© áâà ­¨æë ; ¯®«­ë© ®¡å®¤ ª â «®£  ­ ç¨­ ï á § £à㦥­­®© áâà ­¨æë
LD A,(CORE_BUFFERS.FS_Buffer.DirBlock) LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
@ -2251,15 +2277,81 @@ SEARCH_RECORD_IN_DIR_CACHE:
EXX EXX
.toStartPage: ; .toStartPage: ;
.StartPage+1: CP 0 .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 SCF
RET RET
; ;
.next_char: INC HL .WRT_HN2: EX DE,HL
INC DE LD HL,CORE_BUFFERS.HANDBUF
DJNZ .loop_compare LD BC,CORE_BUFFERS.HANDBUF.SIZE
; CF=0 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 RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -2811,13 +2903,12 @@ WRITE_DIR_HANDLE:
EXX EXX
; ;
LD BC,FAT_DIRECTORY_RECORD LD BC,FAT_DIRECTORY_RECORD
.loop: ;LD A,(IX+00) .loop: LD A,(HL)
LD A,(HL)
OR A OR A
JR Z,.WRT_HN2 JR Z,.WRT_HN2
;
CP #E5 CP #E5
JR Z,.WRT_HN2 JR Z,.WRT_HN2
;ADD IX,BC
ADD HL,BC ADD HL,BC
JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£  = áâà ­¨æ  JR NC,.loop ;!FIXIT ª®«¨ç¥á⢮ § ¯¨á¥© ª â «®£  = áâà ­¨æ 
; ;
@ -2827,9 +2918,7 @@ WRITE_DIR_HANDLE:
SCF SCF
RET RET
; ;
.WRT_HN2: ;LD D,XH .WRT_HN2: EX DE,HL
;LD E,XL
EX DE,HL
LD HL,CORE_BUFFERS.HANDBUF LD HL,CORE_BUFFERS.HANDBUF
LD BC,CORE_BUFFERS.HANDBUF.SIZE LD BC,CORE_BUFFERS.HANDBUF.SIZE
LDIR LDIR
@ -2889,47 +2978,51 @@ GET_ADDR_IN_DIR_CACHE:
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; !TODO ®¯â¨¬¨§¨à®¢ âì ¯®áâ®ï­­ë¥ á®åà ­¥­¨ï Dir Cache
; “¤ «ï¥â § ¯¨áì ¢ ª â «®£¥ ¨ ®á¢®¡®¦¤ ¥â § ­ïâãî æ¥¯®çªã ª« áâ¥à®¢ ; “¤ «ï¥â § ¯¨áì ¢ ª â «®£¥ ¨ ®á¢®¡®¦¤ ¥â § ­ïâãî æ¥¯®çªã ª« áâ¥à®¢
; ‚室: IX - 㪠§ â¥«ì ­  㤠«ï¥¬ãî § ¯¨áì ¢ DIRPAGE ; ‚室: IX - 㪠§ â¥«ì ­  㤠«ï¥¬ãî § ¯¨áì ¢ DIRPAGE
; ¢ Š<>˜ ¤¨à¥ªâ®à¨¨ ¤®«¦­  ¡ëâì § £à㦥­  ç áâì á ­ã¦­®© § ¯¨áìî ; ¢ Š<>˜ ¤¨à¥ªâ®à¨¨ ¤®«¦­  ¡ëâì § £à㦥­  ç áâì á ­ã¦­®© § ¯¨áìî
;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë ;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
DELETE_REC_FAT: SET_PAGE_X DIRPAGE DELETE_REC_FAT: SET_PAGE_X DIRPAGE
EX AF,AF' EX AF,AF'
;CALL DELETE_LFN_RECORDS ; [ ] big dir ; [x] 㤠«¥­¨¥ § ¯¨á¨ LFN LD A,(CORE_BUFFERS.FS_Buffer.DirBlock)
LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§­ ª 㤠«¥­¨ï ä ©«  CALL SET_RECORD_INDEX_FROM_DIR_BLOCK
; fat32 ; DE' - record index
LD L,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à  ;CALL DELETE_LFN_RECORDS ; [ ] big dir ; [x] 㤠«¥­¨¥ § ¯¨á¨ LFN
LD H,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1) LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§­ ª 㤠«¥­¨ï ä ©« 
LD A,L ; fat32
OR H LD L,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à 
EXX LD H,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD L,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à  LD A,L
LD H,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1) OR H
OR L EXX
OR H 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' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
EX AF,AF' EX AF,AF'
; ¥á«¨ ¤«¨­  ä ©«  ­ã«¥¢ ï, â® ¤ «ìè¥ «®¢¨âì âãâ ­¥ç¥£®.
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£® ; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª EX DE,HL ; record index ¨§ SET_RECORD_INDEX_FROM_DIR_BLOCK
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ¥á«¨ à §¬¥à ä ©«  ­¥ ­®«ì ; ¥á«¨ à §¬¥à ä ©«  ­¥ ­®«ì
.loop: ;EX DE,HL ; hl=­®¬¥à ª« áâ¥à  PUSH HL ; record index
;EXX .loop: ; hl=­®¬¥à ª« áâ¥à 
; EX DE,HL CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
;EXX
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EXX EXX
PUSH DE ; ­®¬¥à á«¥¤. ª« áâ¥à  PUSH DE ; ­®¬¥à á«¥¤. ª« áâ¥à 
PUSH AF PUSH AF
LD DE,#0000 ; ­®¬¥à ª« áâ¥à  LD DE,#0000 ; ­®¬¥à ª« áâ¥à 
EXX EXX
PUSH DE PUSH DE
; ;
CALL SET_NEW_FREE_CLUSTER CALL SET_NEW_FREE_CLUSTER
; ;
LD DE,#0000 ; ­®¬¥à ª« áâ¥à  LD DE,#0000 ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
POP HL POP HL
EXX EXX
POP AF POP AF
@ -2938,9 +3031,11 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
EXX EXX
;EX DE,HL ;EX DE,HL
JP NC,.loop JP NC,.loop
;
CALL WRITE_FAT_TABLE CALL WRITE_FAT_TABLE
; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£® ; [ ] big dir ¯¥à¥¤ ¢ âì ®âªã¤  ¨ ᪮«ìª® ¡ ©â®¢ ¨§¬¥­¨«®áì ¢ ªíè, ç⮡ ­¥ ¯¨á âì ­  ¤¨áª «¨è­¥£®
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª POP HL ; record index
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -2948,7 +3043,7 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; ‚室: HL -  ¤à¥á ªã¤  ¯¨á âì ; ‚室: HL -  ¤à¥á ªã¤  ¯¨á âì
; ‚ë室: HL -  ¤à¥á á«¥¤ãî騩 ¯®á«¥ § ¯¨á ­®£® ; ‚ë室: HL -  ¤à¥á á«¥¤ãî騩 ¯®á«¥ § ¯¨á ­®£®
WRITE_DATE_TIME_TO_DIRECTORY_RECORD: WRITE_DATE_TIME_FOR_DIRECTORY_RECORD:
; [ ] VFAT date ; [ ] VFAT date
PUSH HL PUSH HL
CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï

View File

@ -310,6 +310,20 @@ DIV_by_Shifts:
LD L,A LD L,A
RET 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 MACRO PRINT_LINE_KERNEL_PANIC coordY, txtString, txtStringSize, txtColor

View File

@ -39,13 +39,13 @@
; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED ; .FIRST_CLUSTER_H: WORD #0000 ;+ #14 +20 RESERVED
; .TIME: WORD #0000 ;+ #16 +22 TIME ; .TIME: WORD #0000 ;+ #16 +22 TIME
; .DATE: WORD #0000 ;+ #18 +24 DATE ; .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 ; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
; from Core ; from Core
.F_POSITION DWORD #00000000 ;+ #20 +32 FILE POSITION (FP) .F_POSITION DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
.DIR_CLUSTER_L WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW .DIR_CLUSTER_L WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW
.DIR_CLUSTER_H WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; [x] fat32 .DIR_CLUSTER_H WORD #0000 ;+ #24 +38 DIRECTORY CLUSTER HIGH ; fat32
.HANDLE WORD #0000 ;+ #28 +40 HANDLE NUMBER .HANDLE WORD #0000 ;+ #28 +40 HANDLE NUMBER (record index)
.DRIVE BYTE #00 ;+ #2A +42 DRIVE OR CURRENT .DRIVE BYTE #00 ;+ #2A +42 DRIVE OR CURRENT
.ACCESS_MODE BYTE #00 ;+ #2B +43 ACCESS MODE .ACCESS_MODE BYTE #00 ;+ #2B +43 ACCESS MODE
.TASK_NUM BYTE #00 ;+ #2C +44 TASK .TASK_NUM BYTE #00 ;+ #2C +44 TASK
@ -54,6 +54,7 @@
.KnownCluster_H WORD #0000 ;+ #30 +48 ‘â à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩«  .KnownCluster_H WORD #0000 ;+ #30 +48 ‘â à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï ª®â®à®£® ¨§¢¥áâ­® ®â­®á¨â¥«ì­®¥ ᬥ饭¨¥ ¢­ãâਠ䠩« 
.KnownOffset_L WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à . .KnownOffset_L WORD #0000 ;+ #32 +50 Œ« ¤è¥¥ á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.KnownOffset_H WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à . .KnownOffset_H WORD #0000 ;+ #34 +52 ‘â à襥 á«®¢® ᬥ饭¨ï (¢ ª« áâ¥à å) ®â­®á¨â¥«ì­® ­ ç «  ä ©«  ¤«ï á®åà ­¥­­®£® ­®¬¥à  ª« áâ¥à .
.OffsetInDirCache WORD #0000 ;+ #36 +54 ᬥ饭¨¥ ­  § ¯¨áì ¢ SLOT3 DIRPAGE.buffer
ENDS ENDS
;ACCESS MODE: A=0 ç⥭¨¥/§ ¯¨áì ;ACCESS MODE: A=0 ç⥭¨¥/§ ¯¨áì

View File

@ -22,10 +22,16 @@
;[x] FINDDIR ;[x] FINDDIR
;[x] LOAD_SAVE_DIR_PREPARE ;[x] LOAD_SAVE_DIR_PREPARE
;[x] LOADDIR ;[x] LOADDIR
;[ ] SAVEDIR ;[x] DELETE_REC_FAT
;[x] SAVEDIR
;[ ] RENAME ;[ ] RENAME
;[ ] CLOSE_FN ;[ ] CLOSE_FN
;[ ] DEL_FN ;[ ] DEL_FN
;[ ] RMDIR ;[ ] RMDIR
;[ ] OPENDIR ;[ ] OPENDIR
;[ ] DELETE_LFN_RECORDS ;[ ] 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 HL
PUSH DE PUSH DE
LD A,H 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 DEC A
JR NZ,.mull_loop1 JR NZ,.mull_loop1
; ;

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