FAT_X done

This commit is contained in:
Anatoliy Belyanskiy 2024-04-01 02:49:38 +10:00
parent 4fd82287e9
commit b515b2429f
8 changed files with 214 additions and 373 deletions

View File

@ -40,7 +40,7 @@ CLOSE_FN:
; ;
SET_PAGE_X DIRPAGE SET_PAGE_X DIRPAGE
; ;
;TEST 9/11/23 ;!TEST 9/11/23 record index
; LD HL,DIR ; LD HL,DIR
; LD DE,#0020 ; LD DE,#0020
; LD C,(IY+_sFM.HANDLE) ; LD C,(IY+_sFM.HANDLE)

View File

@ -3,26 +3,17 @@
; C - #19 ; C - #19
; HL - 㪠§ â¥«ì ­  ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î ; HL - 㪠§ â¥«ì ­  ä ©«®¢ãî ᯥæ¨ä¨ª æ¨î
; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨­ ç¥ 256 ¡ ©â ; DE - à ¡®ç¨© ¡ãä¥à 44 ¡ ©â , ¥á«¨ B=0, ¨­ ç¥ 256 ¡ ©â
; ;!!!!! ­  á ¬®¬ ¤¥«¥ ¯®ª  çâ® ¥á«¨ B=1, à ¡®ç¨© ¡ãä¥à 46 ¡ ©â
; A -  âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥ ; A -  âਡãâë, ¨á¯®«ì§ã¥¬ë¥ ¯à¨ ¯®¨áª¥
; B = 0 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ 11 ¡ ©â "FilenameExt" ; B = #00 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ 11 ¡ ©â "FilenameExt"
; B = 1 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0 ; B = #01 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0
; ¯®¨áª ¡¥§ ®£à ­¨ç¥­¨¥ ­  à §¬¥à ª â «®£ :
; !TODO B = #02 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS + LFN
; !TODO B = #80 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ 11 ¡ ©â "FilenameExt"
; !TODO B = #81 - ¨¬ï ­ ©¤¥­­®£® ä ©«  ¢ ä®à¬ â¥ DOS "filename.ext",0
;‚ë室­ë¥ §­ ç¥­¨ï: ;‚ë室­ë¥ §­ ç¥­¨ï:
; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1 ; A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
F_FIRST: F_FIRST:
; Current Dir [x] 15/10/23
; LD C,A
; PUSH HL
; PUSH DE
; PUSH BC
; CALL DIR_PATH_CHECK
; POP BC
; POP DE
; POP HL
; RET C
; LD A,C
; ;
LD (.TMP),A LD (.TMP),A
LD (.DTABUF),DE LD (.DTABUF),DE
LD A,B LD A,B
@ -50,7 +41,8 @@ F_FIRST:
LD (DE),A LD (DE),A
.FIND_S: .FIND_S:
INC DE INC DE
LD BC,#0020 ;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à  ª â «®£  > #4000 bytes
LD BC,#0020 ;!HARDCODE à §¬¥à ®¤­®© § ¯¨á¨ ª â «®£ 
ADD IX,BC ADD IX,BC
LD (F_NEXT.CURHND),IX LD (F_NEXT.CURHND),IX
LD HL,HANDBUF+12 ;!HARDCODE LD HL,HANDBUF+12 ;!HARDCODE
@ -112,7 +104,7 @@ F_NEXT:
EX AF,AF' EX AF,AF'
CPL CPL
LD C,A LD C,A
;TEST 9/11/23 ;!TEST 9/11/23 record index
; EXX ; EXX
; LD DE,0 ; LD DE,0
; EXX ; EXX

View File

@ -26,14 +26,14 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23
RET C RET C
.FILE: CALL SEARCH.File ; enter point from EXEC, CREATE .FILE: CALL SEARCH.File ; enter point from EXEC, CREATE
RET C RET C
;!TEST 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS ;!TEST 9/11/23 record index
PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH) PUSH DE ; á®å࠭塞 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS (¯®«ã祭 ¨§ SEARCH)
;R002 ; ;R002 ;
.FM: CALL GET_FM ; enter point from ATTRIB .FM: CALL GET_FM ; enter point from ATTRIB
RET C RET C
LD A,C LD A,C
EX AF,AF' EX AF,AF'
;!TEST 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS ;!TEST 9/11/23 record index 㪠§ â¥«ì ­  § ¯¨áì ¢ ª â «®£¥ FS
POP DE POP DE
; EXX ; EXX
LD (IY+_sFM.HANDLE),E LD (IY+_sFM.HANDLE),E

View File

@ -64,7 +64,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
PUSH BC PUSH BC
.R_POINT+2: .R_POINT+2:
LD IX,0 LD IX,0
CALL BLOK_WR CALL BLOK_WRITE
POP BC POP BC
JR C,.ERR3 JR C,.ERR3
LD C,B LD C,B
@ -114,7 +114,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
PUSH AF PUSH AF
IN A,(SLOT0) IN A,(SLOT0)
OUT (SLOT3),A OUT (SLOT3),A
CALL BLOK_WR CALL BLOK_WRITE
POP BC POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B
@ -192,7 +192,7 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ]
PUSH AF PUSH AF
IN A,(SLOT0) IN A,(SLOT0)
OUT (SLOT3),A OUT (SLOT3),A
CALL BLOK_WR CALL BLOK_WRITE
POP BC POP BC
LD C,SLOT3 LD C,SLOT3
OUT (C),B OUT (C),B

View File

@ -276,8 +276,8 @@ OPENDIR:;[x] some optimizations
.REROOT1: .REROOT1:
LD DE,0 LD DE,0
;[x] some optimizations ;[x] some optimizations
;LD (IY+_sFM.FIRST_CLUSTER_L),E ; LD (IY+_sFM.FIRST_CLUSTER_L),E
;LD (IY+_sFM.FIRST_CLUSTER_L+1),D ; LD (IY+_sFM.FIRST_CLUSTER_L+1),D
; [ ] fat32 ; [ ] fat32
EX DE,HL EX DE,HL
LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL LD (CORE_BUFFERS.FM_BUF + _sFM.FS_REC.FIRST_CLUSTER_L),HL

View File

@ -18,7 +18,7 @@
SEARCH: SEARCH:
.Dir: ;LD A,FAT_ATTR.DIRECTORY .Dir: ;LD A,FAT_ATTR.DIRECTORY
LD A,FAT_ATTR.HiddenSysDir LD A,FAT_ATTR.HiddenSysDir
CALL SEARCH.Custom CALL .Custom
RET NC RET NC
CP DSS_Error.sys.PATH_NOT_FOUND + 1 CP DSS_Error.sys.PATH_NOT_FOUND + 1
RET C RET C
@ -36,7 +36,9 @@ SEARCH:
CPL CPL
LD C,A LD C,A
LD IX,DIRPAGE.buffer LD IX,DIRPAGE.buffer
;[x] 9/11/23 <20>―⨬¨§ ζ¨ο €«ο ¨­€₯ͺα  § ―¨α¨ α―¨αͺ₯ ͺ β «<C2A0>£  (<>§¬<C2A7>¦­<C2A6><>­ <C2A0>¨βαο ’₯ΰ­γβμ) ;!TEST 9/11/23 record index
; ®¯â¨¬¨§ æ¨ï ¤«ï ¨­¤¥ªá  § ¯¨á¨ ¢ ᯨ᪥ ª â «®£ .
; <09>®­ ¤®¡¨âáï ¢¥à­ãâì ¤«ï ¯¥à¥¡®à  ª â «®£  > #4000 ¡ ©â
; EXX ; EXX
; LD DE,0 ; LD DE,0
; EXX ; EXX
@ -67,18 +69,17 @@ SEARCH:
; ;
LD D,XH LD D,XH
LD E,XL LD E,XL
;[x] 9/11/23 <20>―⨬¨§ ζ¨ο €«ο ¨­€₯ͺα  § ―¨α¨ α―¨αͺ₯ ͺ β «<C2A0>£  (<>§¬<C2A7>¦­<C2A6><>­ <C2A0>¨βαο ’₯ΰ­γβμ) ;!TEST 9/11/23 record index
EXX ; EXX
; LD D,XH ; PUSH DE
; LD E,XL ; EXX
PUSH IX PUSH IX
EXX
; ;
LD HL,HANDBUF LD HL,HANDBUF
EX DE,HL EX DE,HL
LD BC,HANDBUF.SIZE LD BC,HANDBUF.SIZE
LDIR LDIR
;[x] 9/11/23 <20>―⨬¨§ ζ¨ο €«ο ¨­€₯ͺα  § ―¨α¨ α―¨αͺ₯ ͺ β «<C2A0>£  (<>§¬<C2A7>¦­<C2A6><>­ <C2A0>¨βαο γ€ «¨βμ) ;!TEST 9/11/23 record index
POP DE POP DE
; ;
EX AF,AF' EX AF,AF'
@ -87,7 +88,7 @@ SEARCH:
AND A AND A
RET RET
.next_record: .next_record:
;[x] 9/11/23 <20>―⨬¨§ ζ¨ο €«ο ¨­€₯ͺα  § ―¨α¨ α―¨αͺ₯ ͺ β «<C2A0>£  (<>§¬<C2A7>¦­<C2A6><>­ <C2A0>¨βαο ’₯ΰ­γβμ) ;!TEST 9/11/23 record index
; EXX ; EXX
; INC DE ; INC DE
; EXX ; EXX
@ -96,7 +97,6 @@ SEARCH:
ADD IX,DE ADD IX,DE
JR NC,.loop JR NC,.loop
.error_too_many_files: .error_too_many_files:
;POP AF
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR
@ -104,7 +104,6 @@ SEARCH:
RET RET
; ;
.error_file_not_found: .error_file_not_found:
;POP AF
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
LD A,DSS_Error.sys.FILE_NOT_FOUND LD A,DSS_Error.sys.FILE_NOT_FOUND
@ -383,7 +382,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
; ;
;LD IX,DIRPAGE.buffer ;LD IX,DIRPAGE.buffer
LD HL,DIRPAGE.buffer LD HL,DIRPAGE.buffer
;TEST 9/11/23 ;!TEST 9/11/23 record index
; EXX ; EXX
; LD DE,0 ; LD DE,0
; EXX ; EXX

View File

@ -1,5 +1,5 @@
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; FAT 12-16 ; FAT 12-16-32
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;[BEGIN] ;[BEGIN]
@ -13,8 +13,8 @@
;RX01 10-02-1999 DNS UPGRADE FAT CASH ;RX01 10-02-1999 DNS UPGRADE FAT CASH
;--------------------------------------------------------------- ;---------------------------------------------------------------
; “áâ ­®¢¨âì ­ ç «ì­ë© ª« áâ¥à ¤«ï ç⥭¨ï
; [x] fat32 ;!TEST ; [x] fat32 ;!TEST
; “áâ ­®¢¨âì ­ ç «ì­ë© ª« áâ¥à ¤«ï ç⥭¨ï
R_CLUST: LD HL,#0001 R_CLUST: LD HL,#0001
LD (G_CLUST.low),HL LD (G_CLUST.low),HL
DEC L DEC L
@ -22,6 +22,7 @@ R_CLUST: LD HL,#0001
RET RET
;
; [x] fat32 ;!TEST ; [x] fat32 ;!TEST
; ­ ©â¨ ¯¥à¢ë© ᢮¡®¤­ë© ª« áâ¥à ;!TODO ¯à®¢¥à¨âì ¯¥à¥¡®à ª« áâ¥à®¢ ; ­ ©â¨ ¯¥à¢ë© ᢮¡®¤­ë© ª« áâ¥à ;!TODO ¯à®¢¥à¨âì ¯¥à¥¡®à ª« áâ¥à®¢
; ¢ë室: HL - ¬« ¤è¨© ­®¬¥à ᢮¡®¤­®£® ª« áâ¥à  ; ¢ë室: HL - ¬« ¤è¨© ­®¬¥à ᢮¡®¤­®£® ª« áâ¥à 
@ -56,11 +57,12 @@ G_CLUST: ;
EXX EXX
RET RET
;
; [x] fat32 ;!TEST
; <20>ਪ९¨âì ª ¯®á«¥¤­¥¬ã ª« áâ¥àã æ¥¯®çª¨ ­®¢ë© ¯ãá⮩ ª« áâ¥à ; <20>ਪ९¨âì ª ¯®á«¥¤­¥¬ã ª« áâ¥àã æ¥¯®çª¨ ­®¢ë© ¯ãá⮩ ª« áâ¥à
; ‚室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩ ; ‚室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
; ‚ë室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩ ; ‚ë室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
; DE':DE - ­®¬¥à ¯ãá⮣® ª« áâ¥à  ; DE':DE - ­®¬¥à ¯ãá⮣® ª« áâ¥à 
; [x] fat32 ;!TEST
INC_FAT: INC_FAT:
PUSH HL ; ⥪ã騩 ª« áâ¥à PUSH HL ; ⥪ã騩 ª« áâ¥à
EXX EXX
@ -107,9 +109,9 @@ INC_FAT:
;RX01 ;RX01
; ¢å®¤: de = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï áà ¢­¥­¨ï á FAT_Max_Cluster
; de' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï áà ¢­¥­¨ï á FAT_Max_Cluster (⮫쪮 ¤«ï fat32)
; [x] fat32 ;!TEST ; [x] fat32 ;!TEST
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï áà ¢­¥­¨ï á FAT_Max_Cluster
; hl' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï áà ¢­¥­¨ï á FAT_Max_Cluster (⮫쪮 ¤«ï fat32)
CHECK_CLUSTER_IS_SMALLER: CHECK_CLUSTER_IS_SMALLER:
LD A,(FatBuffer.FAT_TYPE) LD A,(FatBuffer.FAT_TYPE)
XOR FAT_TYPE.x32 XOR FAT_TYPE.x32
@ -133,20 +135,21 @@ CHECK_CLUSTER_IS_SMALLER:
EX DE,HL EX DE,HL
LD A,DSS_Error.sys.DISK_FULL LD A,DSS_Error.sys.DISK_FULL
RET RET
; ;
;
;[x] fat32 ;!TEST
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  ; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; ¢å®¤: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®) ; ¢å®¤: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
; hl' - ­®¬¥à  ª« áâ¥à  (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32) ; hl' - ­®¬¥à ª« áâ¥à  (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32)
; ¢ë室: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®) ; ¢ë室: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
; hl' - ­®¬¥à  ª« áâ¥à  (áâ à襥 á«®¢®) ; hl' - ­®¬¥à ª« áâ¥à  (áâ à襥 á«®¢®)
; de - ­®¬¥à á«¥¤. ª« áâ¥à  (¬« ¤è¥¥ á«®¢®) ; de - ­®¬¥à á«¥¤. ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
; de' - ­®¬¥à á«¥¤. ª« áâ¥à  (áâ à襥 á«®¢®) ; de' - ­®¬¥à á«¥¤. ª« áâ¥à  (áâ à襥 á«®¢®)
; ¥á«¨ DE':DE = 0, â® ª« áâ¥à HL':HL ᢮¡®¤¥­ ; ¥á«¨ DE':DE = 0, â® ª« áâ¥à HL':HL ᢮¡®¤¥­
; CF - ª®­¥æ 楯®çª¨ ; CF - ª®­¥æ 楯®çª¨
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
;[x] fat32 ;!TEST
READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
RET C RET C
; ;
@ -172,6 +175,7 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
SBC HL,DE SBC HL,DE
POP HL POP HL
;!FIXIT fat32 ¯¥à¥áâà å®¢ª 
EXX EXX
LD H,A LD H,A
LD L,A LD L,A
@ -180,6 +184,7 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
EXX EXX
RET RET
; ;
;
.FAT12: CALL GET_FAT12_CELL .FAT12: CALL GET_FAT12_CELL
LD E,(HL) LD E,(HL)
INC HL INC HL
@ -236,17 +241,20 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
LD A,B LD A,B
OUT (SLOT3),A OUT (SLOT3),A
RET RET
;
; [x] fat32 ;!TEST
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  ; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì ; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
; hl' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì (⮫쪮 ¤«ï fat32) ; hl' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì (⮫쪮 ¤«ï fat32)
; .Custom:
; de = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì ; de = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì
; de' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì (⮫쪮 ¤«ï fat32) ; de' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì (⮫쪮 ¤«ï fat32)
; ¢ë室: HL':HL â ª¨¥ ¦¥ ª ª ¨ ­  ¢å®¤¥ ; ¢ë室: HL':HL â ª¨¥ ¦¥ ª ª ¨ ­  ¢å®¤¥
; .Custom: ; .Custom:
; HL':HL ¨ DE':DE â ª¨¥ ¦¥ ª ª ¨ ­  ¢å®¤¥ ; HL':HL ¨ DE':DE â ª¨¥ ¦¥ ª ª ¨ ­  ¢å®¤¥
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
; [x] fat32 ;!TEST
WRITE_TO_FAT: LD DE,(FatBuffer.ENDCLUS_LOW) ; ­®¬¥à ª« áâ¥à  WRITE_TO_FAT: LD DE,(FatBuffer.ENDCLUS_LOW) ; ­®¬¥à ª« áâ¥à 
EXX EXX
LD DE,(FatBuffer.ENDCLUS_HIGH) ; ­®¬¥à ª« áâ¥à  LD DE,(FatBuffer.ENDCLUS_HIGH) ; ­®¬¥à ª« áâ¥à 
@ -346,11 +354,11 @@ WRITE_TO_FAT: LD DE,(FatBuffer.ENDCLUS_LOW) ;
; [x] fat32 ;!TEST
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT ;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
; in: HL - Cache block ; in: HL - Cache block
; out: C:HL - logical number ; out: C:HL - logical number
; B = 0 ; B = 0
; [x] fat32 ;!TEST
GET_SECTOR_OF_FAT: GET_SECTOR_OF_FAT:
LD A,(FatBuffer.FAT_TYPE) LD A,(FatBuffer.FAT_TYPE)
LD B,FAT_CACHE.Degree_32 ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥­­ãî LD B,FAT_CACHE.Degree_32 ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥­­ãî
@ -385,10 +393,10 @@ GET_SECTOR_OF_FAT:
;;;;;;;;; ;;;;;;;;;
; [x] fat32 ;!TEST
;RE_FAT: ;RE_FAT:
;RX01 ;RX01
; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT-  ; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT- 
; [x] fat32 ;!TEST
; DE - NEW FAT BLOCK ; DE - NEW FAT BLOCK
READ_FAT_TABLE: PUSH HL READ_FAT_TABLE: PUSH HL
PUSH DE PUSH DE
@ -425,8 +433,8 @@ READ_FAT_TABLE: PUSH HL
RET RET
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
; [x] fat32 ;!TEST ; [x] fat32 ;!TEST
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
WRITE_FAT_TABLE: WRITE_FAT_TABLE:
SET_PAGE_X FATPAGE SET_PAGE_X FATPAGE
PUSH AF PUSH AF
@ -543,10 +551,10 @@ WRITE_FAT_TABLE:
JP ToDSS.DRV JP ToDSS.DRV
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
;¢å®¤: HL':HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
; ;
;[x] fat32 ;!TEST ;[x] fat32 ;!TEST
;¢å®¤: HL':HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
GET_FAT32_CELL: GET_FAT32_CELL:
; ¤¢¨£ ¥¬ ¢«¥¢® HL':H ; ¤¢¨£ ¥¬ ¢«¥¢® HL':H
LD A,H LD A,H
@ -572,7 +580,7 @@ GET_FAT32_CELL:
LD H,A LD H,A
ADD HL,HL ADD HL,HL
ADD HL,HL ADD HL,HL
PUSH HL ; [ ] fat32 á®å࠭塞 ­  á«ãç ©, ¥á«¨ READ_FAT_TABLE ¨á¯®àâ¨â PUSH HL ; [ç] fat32 á®å࠭塞 ­  á«ãç ©, ¥á«¨ READ_FAT_TABLE ¨á¯®àâ¨â
AND A AND A
; ;
EXX EXX
@ -663,10 +671,10 @@ GET_FAT12_CELL:
;[x] fat32 ;!TEST
;NSECTOR: ;NSECTOR:
; in: HL':HL - CLUSTER ; in: HL':HL - CLUSTER
; out: HL:IX - SECTOR ; out: HL:IX - SECTOR
;[x] fat32 ;!TEST
CLUSTER_TO_SECTOR: CLUSTER_TO_SECTOR:
EXX EXX
PUSH HL PUSH HL
@ -705,17 +713,16 @@ CLUSTER_TO_SECTOR:
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; [x] fat32 ;!TEST
; 225ÿ937ÿ408 / 512 = 0x6BBC4 / 4 = 0x1AEF1 ; READ SECTORS OF FILE
; ; ¢å®¤: HL:DE - FP (in sectors)
;READ SECTORS OF FILE ; IY - FM
;HL:DE - FP (in sectors)
; B - Amount sectors
; IX - buffer in RAM ; IX - buffer in RAM
; [ ] fat32 ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï
BLOCK_READ: PUSH BC BLOCK_READ: LD (READ.PointerOnBuffer),IX
LD (READ.PointerOnBuffer),IX
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
LD C,A
PUSH BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï, C - SectorsPerCluster
; HL:DE / A => DE:BC, H=0, L - ®áâ â®ª ; HL:DE / A => DE:BC, H=0, L - ®áâ â®ª
CALL DIV_for_SPC CALL DIV_for_SPC
PUSH HL ; ®áâ â®ª DIV_for_SPC PUSH HL ; ®áâ â®ª DIV_for_SPC
@ -723,16 +730,17 @@ BLOCK_READ: PUSH BC
PUSH BC ; ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  PUSH BC ; ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
PUSH DE ; [x] fat32 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  PUSH DE ; [x] fat32 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
; ;
EXX ; EXX
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High ; LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1) ; LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
LD A,L ; LD A,L
OR H ; OR H
EXX ; EXX
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER Low ; LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER Low
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) ; LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
OR L ; OR L
OR H ; OR H
CALL CHECK_FIRST_CLUSTER
JR Z,.fast_exit_4 JR Z,.fast_exit_4
CALL GetSavedCluster CALL GetSavedCluster
;HL': HL - ¨§¢¥áâ­ë© ª« áâ¥à ä ©«  ¤«ï ®âáçñâ  ;HL': HL - ¨§¢¥áâ­ë© ª« áâ¥à ä ©«  ¤«ï ®âáçñâ 
@ -771,28 +779,32 @@ BLOCK_READ: PUSH BC
;;;; ;;;;
; ;
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
POP DE POP DE ; [x] fat32 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
POP BC ; B - Amount sectors POP BC ; ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
CALL SaveGotCluster CALL SaveGotCluster
; ;
POP DE ; D = 0, E = ®áâ â®ª DIV_for_SPC POP DE ; D = 0, E = ®áâ â®ª DIV_for_SPC
POP BC ; B = Amount sectors POP BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï, C - SectorsPerCluster
; (SP) = (RET) ; (SP) = (RET)
; à ¡®â  á ®áâ âª®¬ ®â ¤¥«¥­¨ï ; à ¡®â  á ®áâ âª®¬ ®â ¤¥«¥­¨ï
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) LD A,C
SUB E SUB E
LD C,A LD C,A
CP B CP B ; (SectorsPerCluster - ®áâ â®ª) - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï
JR C,.skip1 ;SIZE > RESIDUE CLUSTER JR C,.skip1 ; SIZE > RESIDUE CLUSTER
LD C,B ;SIZE < CLUSTER LD C,B ; SIZE < CLUSTER
.skip1: LD A,B .skip1: LD A,B
SUB C SUB C
LD B,A LD B,A
;
EXX
PUSH HL ; ­®¬¥à ª« áâ¥à  áâ àè ï ç áâì
EXX
PUSH HL ; ­®¬¥à ª« áâ¥à  ¬« ¤è ï ç áâì PUSH HL ; ­®¬¥à ª« áâ¥à  ¬« ¤è ï ç áâì
PUSH BC PUSH BC ; B = ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  ¤®ç¨âªã, C = (SectorsPerCluster - ®áâ â®ª) «¨¡® ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï
PUSH DE PUSH DE ; D = 0, E = ®áâ â®ª DIV_for_SPC
CALL CLUSTER_TO_SECTOR CALL CLUSTER_TO_SECTOR
POP DE POP DE ; D = 0, E = ®áâ â®ª DIV_for_SPC
ADD IX,DE ADD IX,DE
JR NC,.skip2 JR NC,.skip2
INC HL INC HL
@ -801,23 +813,24 @@ BLOCK_READ: PUSH BC
LD B,C LD B,C
LD C,Dss.DRV.Read LD C,Dss.DRV.Read
RST ToDSS.DRV RST ToDSS.DRV
;
JR C,.Error JR C,.Error
; [ ] fat32 ??? POP BC ; B = ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  ¤®ç¨âªã, C = (SectorsPerCluster - ®áâ â®ª) «¨¡® ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï
POP BC
LD HL,(READ.PointerOnBuffer) LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector) LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
;!TEST ;!TEST
LD A,B LD A,B
LD B,C LD B,C
.loop2: ADD HL,DE .loop2: ADD HL,DE
;DEC C
;JR NZ,.loop2
DJNZ .loop2 DJNZ .loop2
;
LD (READ.PointerOnBuffer),HL LD (READ.PointerOnBuffer),HL
POP DE POP DE ; ­®¬¥à ª« áâ¥à  ¬« ¤è ï ç áâì
;LD A,B EXX
POP HL ; ­®¬¥à ª« áâ¥à  áâ àè ï ç áâì
EXX
OR A OR A
RET Z RET Z ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  ¤®ç¨âªã = 0?
LD B,A LD B,A
; ;
.loop4: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster .loop4: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
@ -834,11 +847,17 @@ BLOCK_READ: PUSH BC
; ;
.BLOKRD7: EX DE,HL .BLOKRD7: EX DE,HL
PUSH BC PUSH BC
; HL':HL - ­®¬¥à ª« áâ¥à 
CALL READ_FROM_FAT CALL READ_FROM_FAT
POP BC POP BC
JR C,.ECL1 ;RY01 JR C,.ECL1 ;RY01
;
EXX
EX DE,HL EX DE,HL
PUSH HL PUSH HL ; ­®¬¥à á«¥¤. ª« áâ¥à  (áâ à襥 á«®¢®)
EXX
EX DE,HL
PUSH HL ; ­®¬¥à á«¥¤. ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
PUSH BC PUSH BC
CALL CLUSTER_TO_SECTOR CALL CLUSTER_TO_SECTOR
LD DE,(READ.PointerOnBuffer) LD DE,(READ.PointerOnBuffer)
@ -847,6 +866,7 @@ BLOCK_READ: PUSH BC
LD C,Dss.DRV.Read LD C,Dss.DRV.Read
RST ToDSS.DRV RST ToDSS.DRV
JR C,.Error JR C,.Error
;
POP BC POP BC
LD HL,(READ.PointerOnBuffer) LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector) LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
@ -854,11 +874,15 @@ BLOCK_READ: PUSH BC
DEC C DEC C
JR NZ,.loop3 JR NZ,.loop3
LD (READ.PointerOnBuffer),HL LD (READ.PointerOnBuffer),HL
POP DE POP DE ; ­®¬¥à á«¥¤. ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
EXX
POP HL ; ­®¬¥à á«¥¤. ª« áâ¥à  (áâ à襥 á«®¢®)
EXX
JP .loop4 JP .loop4
; ;
.Error: POP BC .Error: POP BC
POP DE POP DE
POP HL
;SCF ;SCF
RET RET
; ;
@ -866,34 +890,12 @@ BLOCK_READ: PUSH BC
RET RET
;----------------------------------------------------------------------- ;-----------------------------------------------------------------------
; BLOK_WR.Error:
; POP BC
; ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
; POP BC
;
; BLOK_WR.ErrorWrite:
; POP BC
; POP DE
; LD A,DSS_Error.sys.WRITE_ERROR
; SCF
; RET
;
; [x] fat32
;WRITE SECTORS OF FILE ; ¢å®¤: IY - FM
;HL:DE - FP (in sectors), IX - data in RAM ; ¢ë室: HL':HL - first cluster
; B - Amount sectors ; ZF = 0 ¥á«¨ ¯¥à¢®£® ª« áâ¥à  ­¥â
; [ ] fat32 CHECK_FIRST_CLUSTER:
BLOK_WR: PUSH BC
LD (READ.PointerOnBuffer),IX
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
; HL:DE / A => DE:BC, H=0, L - ®áâ â®ª
CALL DIV_for_SPC
PUSH HL ; ®áâ â®ª DIV_for_SPC
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
PUSH BC ; ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
PUSH DE ; [x] fat32 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
;
EXX EXX
LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1) LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
@ -904,19 +906,48 @@ BLOK_WR: PUSH BC
LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1) LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
OR L OR L
OR H OR H
RET
; [x] fat32 ;!TEST
; WRITE SECTORS OF FILE
; ¢å®¤: HL:DE - FP (in sectors)
; IX - data in RAM
; IY - FM
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï § ¯¨á¨
BLOK_WRITE: LD (READ.PointerOnBuffer),IX
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ;SECTORS PER CLUSTER
LD C,A
PUSH BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï, C - SectorsPerCluster
; HL:DE / A => DE:BC, H=0, L - ®áâ â®ª
CALL DIV_for_SPC
PUSH HL ; ®áâ â®ª DIV_for_SPC
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
PUSH BC ; ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
PUSH DE ; [x] fat32 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
;
; EXX
; LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_H) ; START CLUSTER High
; LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_H+1)
; LD A,L
; OR H
; EXX
; LD L,(IY+_sFM.FS_REC.FIRST_CLUSTER_L) ; START CLUSTER
; LD H,(IY+_sFM.FS_REC.FIRST_CLUSTER_L+1)
; OR L
; OR H
CALL CHECK_FIRST_CLUSTER
JR NZ,.FindCluster JR NZ,.FindCluster
; ;
PUSH BC ; ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  PUSH BC ; ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
PUSH DE ; [x] fat32 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  PUSH DE ; [x] fat32 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
; [ ] fat32 ; [x] fat32
CALL G_CLUST CALL G_CLUST
JP C,.Error_6 JP C,.Error_6
; ;
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),L LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L),L
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),H LD (IY+_sFM.FS_REC.FIRST_CLUSTER_L+1),H
; [ ] fat32 ; [x] fat32
EXX EXX
LD HL,0 ;!FIXIT
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H),L ; START CLUSTER High LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H),L ; START CLUSTER High
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),H LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),H
EXX EXX
@ -949,19 +980,11 @@ BLOK_WR: PUSH BC
CALL READ_FROM_FAT CALL READ_FROM_FAT
JR NC,.next JR NC,.next
; end of chain - get new cluster ; end of chain - get new cluster
; [ ] fat32
; PUSH HL
; EXX
; PUSH HL
; EXX
CALL INC_FAT CALL INC_FAT
; EXX
; POP HL
; EXX
; POP HL
JP C,.Error_6 JP C,.Error_6
; [x] ¨§¡ëâ®ç­®¥ ®¡à é¥­¨¥ 01/04/2024
;CALL READ_FROM_FAT
; ;
CALL READ_FROM_FAT
.next: POP BC .next: POP BC
EX DE,HL EX DE,HL
EXX EXX
@ -981,49 +1004,58 @@ BLOK_WR: PUSH BC
POP BC POP BC
CALL SaveGotCluster CALL SaveGotCluster
; ;
POP DE POP DE ; D = 0, E = ®áâ â®ª DIV_for_SPC
POP BC POP BC ; B - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï, C - SectorsPerCluster
; (SP) = (RET) ; (SP) = (RET)
; ;
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) LD A,C
SUB E SUB E
LD C,A LD C,A
CP B CP B ; (SectorsPerCluster - ®áâ â®ª) - ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï
JR C,.WR3 ;SIZE > RESIDUE CLUSTER JR C,.skip1 ;SIZE > RESIDUE CLUSTER
LD C,B ;SIZE < CLUSTER LD C,B ;SIZE < CLUSTER
.WR3: LD A,B .skip1: LD A,B
SUB C SUB C
LD B,A LD B,A
PUSH HL ;
PUSH BC EXX
PUSH DE PUSH HL ; ­®¬¥à ª« áâ¥à  áâ àè ï ç áâì
EXX
PUSH HL ; ­®¬¥à ª« áâ¥à  ¬« ¤è ï ç áâì
PUSH BC ; B = ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  ¤®ç¨âªã, C = (SectorsPerCluster - ®áâ â®ª) «¨¡® ª®«¨ç¥á⢮ ᥪâ®à®¢ ¤«ï ç⥭¨ï
PUSH DE ; D = 0, E = ®áâ â®ª DIV_for_SPC
CALL CLUSTER_TO_SECTOR CALL CLUSTER_TO_SECTOR
POP DE POP DE ; D = 0, E = ®áâ â®ª DIV_for_SPC
ADD IX,DE ADD IX,DE
JR NC,.WR4 JR NC,.skip2
INC HL INC HL
; DOUBLE 1 ; DOUBLE 1
.WR4: LD DE,(READ.PointerOnBuffer) .skip2: LD DE,(READ.PointerOnBuffer)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD B,C LD B,C
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
RST ToDSS.DRV RST ToDSS.DRV
;
LD A,DSS_Error.sys.WRITE_ERROR LD A,DSS_Error.sys.WRITE_ERROR
JR C,.ErrorWrite JR C,.Error_3
POP BC POP BC
LD HL,(READ.PointerOnBuffer) LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector) LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
; ;
LD A,B
LD B,C
.loop2: ADD HL,DE .loop2: ADD HL,DE
DEC C DJNZ .loop2
JR NZ,.loop2
; ;
LD (READ.PointerOnBuffer),HL LD (READ.PointerOnBuffer),HL
POP DE POP DE ; ­®¬¥à ª« áâ¥à  ¬« ¤è ï ç áâì
EXX
POP HL ; ­®¬¥à ª« áâ¥à  áâ àè ï ç áâì
EXX
; ;
LD A,B
OR A OR A
RET Z RET Z ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  ¤®ç¨âªã = 0?
LD B,A
; ;
.big_loop: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster .big_loop: LD HL,CORE_BUFFERS.BootSector.SectorsPerCluster
LD A,B LD A,B
@ -1036,18 +1068,24 @@ BLOK_WR: PUSH BC
LD C,A LD C,A
OR A ;CLEAR CF OR A ;CLEAR CF
RET Z RET Z
;
.WR7: EX DE,HL .WR7: EX DE,HL
PUSH BC PUSH BC
; HL':HL - ­®¬¥à ª« áâ¥à 
CALL READ_FROM_FAT CALL READ_FROM_FAT
JR NC,.WR9 JR NC,.WR9
;PUSH HL
CALL INC_FAT CALL INC_FAT
;POP HL
JR C,.ErrorFull JR C,.ErrorFull
; [x] ¨§¡ëâ®ç­®¥ ®¡à é¥­¨¥ 01/04/2024
;CALL READ_FROM_FAT ;CALL READ_FROM_FAT
;
.WR9: POP BC .WR9: POP BC
EXX
EX DE,HL EX DE,HL
PUSH HL PUSH HL ; ­®¬¥à á«¥¤. ª« áâ¥à  (áâ à襥 á«®¢®)
EXX
EX DE,HL
PUSH HL ; ­®¬¥à á«¥¤. ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
PUSH BC PUSH BC
CALL CLUSTER_TO_SECTOR CALL CLUSTER_TO_SECTOR
; DOUBLE 1 ; DOUBLE 1
@ -1057,7 +1095,7 @@ BLOK_WR: PUSH BC
LD C,Dss.DRV.Write LD C,Dss.DRV.Write
RST ToDSS.DRV RST ToDSS.DRV
LD A,DSS_Error.sys.WRITE_ERROR LD A,DSS_Error.sys.WRITE_ERROR
JR C,.ErrorWrite JR C,.Error_3
POP BC POP BC
LD HL,(READ.PointerOnBuffer) LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector) LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
@ -1065,15 +1103,17 @@ BLOK_WR: PUSH BC
DEC C DEC C
JR NZ,.loop3 JR NZ,.loop3
LD (READ.PointerOnBuffer),HL LD (READ.PointerOnBuffer),HL
POP DE POP DE ; ­®¬¥à á«¥¤. ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
; EXX
POP HL ; ­®¬¥à á«¥¤. ª« áâ¥à  (áâ à襥 á«®¢®)
EXX
JP .big_loop JP .big_loop
; ;
.Error_6: POP BC .Error_6: POP BC
POP BC POP BC
POP BC POP BC
POP BC ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE .Error_3: POP BC ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
.ErrorWrite: POP BC POP BC
POP DE POP DE
;LD A,DSS_Error.sys.WRITE_ERROR ;LD A,DSS_Error.sys.WRITE_ERROR
;SCF ;SCF
@ -1084,54 +1124,8 @@ BLOK_WR: PUSH BC
;SCF ;SCF
RET RET
;
; ;GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] fat32
; ; ‚室: HL - ¯¥à¢ë© ª« áâ¥à ä ©«  (¬« ¤è¥¥ á«®¢®)
; ; BC - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
; ; ‚ë室: HL - ¨§¢¥áâ­ë© ª« áâ¥à ä ©«  ¤«ï ®âáçñâ  (¬« ¤è¥¥ á«®¢®)
; ; BC - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
; GetSavedCluster:
; INC B
; ;PUSH DE ; ¯¥à¢ë© ª« áâ¥à ä ©«  (áâ à襥 á«®¢®)
; LD E,(IY+_sFM.KnownCluster_L)
; LD D,(IY+_sFM.KnownCluster_L+1)
; LD A,E
; OR D
; RET Z
; ;
; DEC B
; PUSH DE ; KnownCluster_H
; PUSH HL ; ¯¥à¢ë© ª« áâ¥à ä ©«  (¬« ¤è¥¥ á«®¢®)
; PUSH BC ; ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å
; LD E,(IY+_sFM.KnownOffset_L)
; LD D,(IY+_sFM.KnownOffset_L+1)
; LD A,D
; OR E
; JR Z,.noOptimization_3
; ;
; POP HL ; ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å
; SBC HL,DE
; JR C,.noOptimization_2
; LD C,L
; LD B,H
; POP DE ; ¡ « ­á á⥪ 
; POP HL
; ; ®¯â¨¬¨§ æ¨ï: HL - ­¥ ¯¥à¢ë© ª« áâ¥à ä ©« ,   KnownCluster
; ; BC - à ááâ®ï­¨¥ ¤® âॡ㥬®£® ᬥ饭¨ï ®â KnownCluster
; ;
; INC B
; RET
; ;
; .noOptimization_3:
; POP BC
; .noOptimization_2:
; POP HL
; .noOptimization_1:
; POP DE
; INC B
; RET
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
; ‚室: DE - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®) ; ‚室: DE - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®)
; BC - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®) ; BC - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
@ -1142,7 +1136,6 @@ BLOK_WR: PUSH BC
; DE - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®, D=D+1) ; DE - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®, D=D+1)
; BC - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®, B=B+1) ; BC - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®, B=B+1)
; ­¥ ¯®àâ¨â HL, HL' ¨ DE:BC ¥á«¨ ®¯â¨¬¨§ æ¨ï ­¥ áà ¡®â «  ; ­¥ ¯®àâ¨â HL, HL' ¨ DE:BC ¥á«¨ ®¯â¨¬¨§ æ¨ï ­¥ áà ¡®â « 
;[ ] fat32
GetSavedCluster: GetSavedCluster:
XOR A XOR A
CP (IY+_sFM.OptimizedClusters) CP (IY+_sFM.OptimizedClusters)
@ -1239,148 +1232,5 @@ SaveGotCluster: LD A,C
;LD (FatBuffer.MaxClusterLow),HL ;LD (FatBuffer.MaxClusterLow),HL
;======================================================================= ;=======================================================================
;FatCache:
;.Block WORD #0000
;.Update BYTE 0
;FAT_Max_Cluster_L: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
;FAT_Max_Cluster_H: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
;//MODULE: FAT_X ;//MODULE: FAT_X
;[END] ;[END]
;RX01
;; HL - CLUSTER
;; DE - (CLUSTER)
;
;READ_FROM_FAT EX DE,HL
; LD HL,(FAT_Max_Cluster)
; AND A
; SBC HL,DE
; EX DE,HL
; LD A,10
; RET C
; PUSH HL
; LD A,(FAT_TYP)
; CP "2"
; JP Z,R_F_F12
;R_F_F16 LD DE,768 ; DE - CLUSTERS IN CASH
; XOR A
;R_F_00H INC A ; HL - CLUSTER
; SBC HL,DE
; JP NC,R_F_00H
; ADD HL,DE
; ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
; DEC A
; LD BC,(FatCache) ; A - ELEMENT OF CASH
; CP C
; CALL NZ,READ_FAT_TABLE
; LD DE,FAT
; ADD HL,DE
; LD E,(HL)
; INC HL
; LD D,(HL)
; LD HL,#FFEF
; AND A
; SBC HL,DE
; POP HL
; LD A,0
; RET
;
;R_F_F12 LD D,H
; LD E,L
; ADD HL,HL
; ADD HL,DE
; RR H
; RR L
; PUSH AF
; EX DE,HL
; LD HL,(B_P_S)
; LD B,H
; LD C,L
; ADD HL,HL
; ADD HL,BC
; EX DE,HL
; XOR A ; DE - SIZE SECTOR * 3
;R_F_00 INC A ; HL - FAT OFFSET
; SBC HL,DE
; JP NC,R_F_00
; ADD HL,DE
; DEC A
;
;
;WRITE_FAT_TABLE LD HL,(FatCache)
; LD H,0
; LD (FatCache),HL
; LD E,L
; LD D,H
; ADD HL,HL
; ADD HL,DE
; PUSH HL
; LD B,H
; LD C,L
; INC HL
; INC HL
; INC HL
; LD DE,(S_P_F)
; LD A,3
; AND A
; SBC HL,DE
; JP C,WR_FAT1
; EX DE,HL
; LD HL,3
; AND A
; SBC HL,DE
; JP C,FATERR
; LD A,L
;WR_FAT1 LD H,B
; LD L,C
; LD DE,(FAT_FRM)
; ADD HL,DE
; EX DE,HL
; LD IX,0
; ADD IX,DE
; LD DE,FAT
; LD HL,0
; LD B,A
; LD C,6
; LD A,(DRIVE)
; PUSH BC
; RST #18
; POP BC
; POP HL
; LD DE,(FAT2_SEC_L)
; ADD HL,DE
; EX DE,HL
; LD IX,0
; ADD IX,DE
; LD DE,FAT
; LD HL,0
; LD A,(DRIVE)
; LD C,6
; RST #18
; RET
////////////// OLD ////////////////
; HL - CLUSTER
; HL:IX - SECTOR
; CLUSTER_TO_SECTOR: DEC HL
; DEC HL
; EX DE,HL
; LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
; LD B,A
; LD HL,0
; LD IX,0
; ADD_DE1: ADD IX,DE
; JR NC,ADD_DE2
; INC HL
; ADD_DE2: DJNZ ADD_DE1
; LD DE,(FatBuffer.FirstDataSector_L) ;first data sector
; ADD IX,DE
; LD DE,#0000
; ADC HL,DE
; RET
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1 +1 @@
948 953