ещё несколько процедур

This commit is contained in:
Anatoliy Belyanskiy 2024-03-24 04:53:25 +10:00
parent 1f66e8af24
commit bd5919fdc4
14 changed files with 620 additions and 799 deletions

View File

@ -43,7 +43,7 @@ DEL_FN: ;!TEST
PUSH DE ; ­®¬¥à á«¥¤. ª« áâ¥à  PUSH DE ; ­®¬¥à á«¥¤. ª« áâ¥à 
PUSH AF PUSH AF
LD DE,#0000 ; ­®¬¥à ª« áâ¥à  LD DE,#0000 ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
POP AF POP AF
POP DE POP DE
JP NC,.loop JP NC,.loop

View File

@ -48,7 +48,6 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
RET C RET C
PUSH HL PUSH HL
; [ ] fat32 ; [ ] fat32
LD DE,(FatBuffer.ENDCLUS_LOW) ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
LD HL,MASKARE LD HL,MASKARE
@ -142,7 +141,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
LDIR LDIR
; ;
POP HL POP HL
CALL NSECTOR CALL CLUSTER_TO_SECTOR
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; ᥪâ®à®¢ ­  ª« áâ¥à LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; ᥪâ®à®¢ ­  ª« áâ¥à
.MKD12: PUSH AF .MKD12: PUSH AF
PUSH HL ; áâ. à §àï¤ PUSH HL ; áâ. à §àï¤

View File

@ -41,7 +41,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
PUSH IX PUSH IX
.RMD17: PUSH HL .RMD17: PUSH HL
CALL NSECTOR CALL CLUSTER_TO_SECTOR
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­® ; ­ ç¨­ ¥¬ ¢ëç¨â뢠âì ᮤ¥à¦¨¬®¥ ª â «®£  ¯®á¥ªâ®à­®
.read_dir_loop: .read_dir_loop:

View File

@ -18,7 +18,7 @@ WRITE.RD_ONLY:
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§ĄëâŽç­ëĽ ˘ë§Ž˘ë WRITE_FAT_TABLE WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§ĄëâŽç­ëĽ ˘ë§Ž˘ë WRITE_FAT_TABLE
CALL .Start CALL .Start
PUSH AF PUSH AF
LD A,(FatCache.Update) LD A,(FatBuffer.CacheUpdated)
OR A OR A
CALL NZ,WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą ­Şă ŞĽč  FAT ¨ § Ż¨á âě ĽŁŽ ­  ¤¨áŞ CALL NZ,WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą ­Şă ŞĽč  FAT ¨ § Ż¨á âě ĽŁŽ ­  ¤¨áŞ
POP AF POP AF

View File

@ -120,7 +120,7 @@ DISKINF:; [ ] 22/11/23
;.FRESP2: ;.FRESP2:
LD D,B LD D,B
LD E,C LD E,C
LD HL,(FAT_Max_Cluster_L) LD HL,(FatBuffer.MaxClusterLow)
DEC HL DEC HL
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector) LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)

View File

@ -357,6 +357,7 @@ ADRST10: ;DS 512 ;,0
INCLUDE "API.ASM" INCLUDE "API.ASM"
INCLUDE "DOS_Proc.asm" INCLUDE "DOS_Proc.asm"
INCLUDE "FS/FAT/FAT.ASM" INCLUDE "FS/FAT/FAT.ASM"
INCLUDE "FS/FAT/FAT_X.ASM"
INCLUDE "DOS_FM.ASM" INCLUDE "DOS_FM.ASM"
INCLUDE "EXECUTE.ASM" INCLUDE "EXECUTE.ASM"
@ -461,8 +462,11 @@ SECBUF EQU BUFFER
; ;
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||; ;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; !!!!! νβ  ―ΰ<E28095>ζ₯€γΰ  § βΰρβαο ―<>α«₯ ¨α<CEB1>«­­¨ο ; § âàñâáï ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  VERSION ; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  VERSION
F_START: DI F_START: DI
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£® ;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®

View File

@ -134,17 +134,11 @@ XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
; ;
MACRO SET_PAGE_X new_page MACRO SET_PAGE_X new_page
; IF OLD_SET_BANK
; LD A,new_page
; CALL BANK
; ELSE
LD A,(BANKTBL+new_page) LD A,(BANKTBL+new_page)
LD B,A LD B,A
LD C,SLOT3 LD C,SLOT3
IN A,(SLOT3) IN A,(SLOT3)
OUT (C),B OUT (C),B
; ENDIF
ENDM ENDM
; ;

View File

@ -359,7 +359,7 @@ LOADDIR:
.LoadRootDir: .LoadRootDir:
LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤ LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
LD IX,(FatBuffer.RootDirFirstSector_L) ; ­®¬¥à «®£. ᥪâ®à  LD IX,(FatBuffer.RootDirFirstSector_L) ; ­®¬¥à «®£. ᥪâ®à 
LD A,(FatBuffer.DirSizeInSectros) LD A,(FatBuffer.DirSizeInSectors)
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£  LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£ 
CP B CP B
JR NC,.RTD1 JR NC,.RTD1
@ -464,7 +464,7 @@ SAVEDIR:
.SaveRootDir: .SaveRootDir:
LD HL,(FatBuffer.RootDirFirstSector_H) LD HL,(FatBuffer.RootDirFirstSector_H)
LD IX,(FatBuffer.RootDirFirstSector_L) LD IX,(FatBuffer.RootDirFirstSector_L)
LD A,(FatBuffer.DirSizeInSectros) LD A,(FatBuffer.DirSizeInSectors)
LD B,32 ;!HARDCODE sector size 512 LD B,32 ;!HARDCODE sector size 512
SUB B SUB B
JR NC,.RTD1S JR NC,.RTD1S
@ -576,7 +576,7 @@ RD_BPB: LD C,SLOT3
EX DE,HL EX DE,HL
LD C,A ; A - sectors in DIR LD C,A ; A - sectors in DIR
LD B,0 LD B,0
LD (FatBuffer.DirSizeInSectros),A LD (FatBuffer.DirSizeInSectors),A
ADD HL,BC ; Start DATA area ADD HL,BC ; Start DATA area
LD (FatBuffer.FirstDataSector_L),HL LD (FatBuffer.FirstDataSector_L),HL
; B = 0 ; B = 0
@ -602,13 +602,13 @@ RD_BPB: LD C,SLOT3
JP Z,DOS_X_Error.UnknownBPB JP Z,DOS_X_Error.UnknownBPB
SBC HL,DE SBC HL,DE
JR NC,.loop4 JR NC,.loop4
LD (FatBuffer.ClusterPerBank),A ; A - Clusters per bank (16k) LD (FatBuffer.ClustersPerBank),A ; A - Clusters per bank (16k)
; ;
;!TODO detect fat type by clusters! ;!TODO detect fat type by clusters!
;[ ] fat32 reset fat32 variables ;[ ] fat32 reset fat32 variables
LD HL,0 LD HL,0
LD (FatBuffer.ENDCLUS_HIGH),HL LD (FatBuffer.ENDCLUS_HIGH),HL
LD (FAT_Max_Cluster_H),HL LD (FatBuffer.MaxClusterHigh),HL
; ;
LD HL,CORE_BUFFERS.BootSector.ID_FAT ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £  LD HL,CORE_BUFFERS.BootSector.ID_FAT ;!!!!!   ¥á«¨ IY ¨á¯®«ì§ã¥âáï ¤«ï ¯¥à¥¬¥­­®£® BootSector, â® ¡ã¤¥â ¡ £ 
LD DE,FatBuffer.MSG LD DE,FatBuffer.MSG
@ -627,34 +627,28 @@ RD_BPB: LD C,SLOT3
JR Z,.loop6 JR Z,.loop6
; ;
CP '1' CP '1'
IF _FAT32_ENABLE
JP Z,.fat1x
;[ ] fat32 ;[ ] fat32
CP '2' JP Z,.fat1x
CP '3'
JP NZ,DOS_X_Error.UnknownBPB JP NZ,DOS_X_Error.UnknownBPB
LD A,#46 ; #46-#26 = 32 fat type LD A,#46 ; #46-#26 = 32 fat type
LD HL,#0FFF LD HL,#0FFF
LD (FatBuffer.ENDCLUS_HIGH),HL LD (FatBuffer.ENDCLUS_HIGH),HL
LD (FAT_Max_Cluster_H),HL LD (FatBuffer.MaxClusterHigh),HL
LD H,#FF LD H,L
JR .BPB_FAT JR .BPB_FAT
; ;
ELSE
JP NZ,DOS_X_Error.UnknownBPB
ENDIF
;
.fat1x: LD A,(HL) .fat1x: LD A,(HL)
CP '6' ; FAT16 CP '2' ; FAT16
LD HL,#FFFF
JR Z,.BPB_FAT
CP '2' ; FAT12
JP NZ,DOS_X_Error.UnknownBPB
LD HL,#0FFF LD HL,#0FFF
JR Z,.BPB_FAT
CP '6' ; FAT12
JP NZ,DOS_X_Error.UnknownBPB
LD H,L
.BPB_FAT: .BPB_FAT:
SUB #26 ; A-#26 = fat type (12, 16, 32) SUB #26 ; A-#26 = fat type (12, 16, 32)
LD (FatBuffer.FAT_TYPE),A LD (FatBuffer.FAT_TYPE),A
LD (FatBuffer.ENDCLUS_LOW),HL LD (FatBuffer.ENDCLUS_LOW),HL
;!TODO ­¥ ¨á¯®«ì§ã¥âáï §­ ç¥­¨¥ ¢ëç¨á«ï¥¬®¥ ¨ á®å࠭塞®¥ ¢ FatBuffer ;!TODO ­¥ ¨á¯®«ì§ã¥âáï §­ ç¥­¨¥ ¢ëç¨á«ï¥¬®¥ ¨ á®å࠭塞®¥ ¢ FatBuffer
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
; LD HL,0 ; LD HL,0
@ -694,13 +688,13 @@ RD_BPB: LD C,SLOT3
RR L RR L
JP .S4C01 JP .S4C01
.S4C02: INC HL .S4C02: INC HL
LD (FAT_Max_Cluster_L),HL LD (FatBuffer.MaxClusterLow),HL
; ;
XOR A XOR A
LD H,A LD H,A
LD L,A LD L,A
LD (FatCache.Block),HL LD (FatBuffer.CacheBlock),HL
LD (FatCache.Update),A LD (FatBuffer.CacheUpdated),A
SET_PAGE_X FATPAGE SET_PAGE_X FATPAGE
@ -722,13 +716,13 @@ RD_BPB: LD C,SLOT3
CP #F0 CP #F0
JR C,DOS_X_Error.UnknownBPB JR C,DOS_X_Error.UnknownBPB
; ID ram-¤¨áª  - #FA ; ID ram-¤¨áª  - #FA
CP #F8 ; !FIXIT ­¥ ®¡ï§ â¥«ì­® ¥á«¨ ¢¨­â, â® ­¥ FAT12 CP #F8 ; !FIXIT fat. ­¥ ®¡ï§ â¥«ì­® ¥á«¨ ¢¨­â, â® ­¥ FAT12
LD A,'6'
LD HL,#FFFF
JP Z,.BPB_FAT
;
LD A,'2' LD A,'2'
LD HL,#0FFF LD HL,#0FFF
JP NZ,.BPB_FAT
;
LD A,'6'
LD H,L
JP .BPB_FAT JP .BPB_FAT
; ;
DOS_X_Error: DOS_X_Error:
@ -745,11 +739,14 @@ DOS_X_Error:
;!TODO ª ¡ãä¥à ¬! ;!TODO ª ¡ãä¥à ¬!
FatBuffer: FatBuffer:
.MSG: DB 'FAT' .MSG: DB 'FAT'
.READ_PG: DB #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï))) .DRIVE: DB #FF
.BLOCK: DB #00 .FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
.CacheBlock: DW #00
.CacheUpdated: DB #00
;.SectorsPerBank: DB #00
.ClustersPerBank: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.RootDirStartCluster_L: DW #0000 .RootDirStartCluster_L: DW #0000
.RootDirStartCluster_H: DW #0000 ; [ ] fat32 .RootDirStartCluster_H: DW #0000 ; [ ] fat32
.DRIVE: DB #FF
.FAT1_SEC_L: DW #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM) .FAT1_SEC_L: DW #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
.FAT1_SEC_H: DW #0000 ; [ ] fat32 .FAT1_SEC_H: DW #0000 ; [ ] fat32
.FAT2_SEC_L: DW #0000 .FAT2_SEC_L: DW #0000
@ -757,20 +754,15 @@ FatBuffer:
.RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï .RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï
.RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR .RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥ .FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
.DirSizeInSectros: DB #00 ; DIR_SEC_SIZE .DirSizeInSectors: DB #00 ; DIR_SEC_SIZE
.FirstDataSector_L: DW #0000 ; MSD_DAT_SEC low .FirstDataSector_L: DW #0000 ; MSD_DAT_SEC low
.FirstDataSector_H: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ; [ ] fat32 .FirstDataSector_H: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ; [ ] fat32
.BytesPerCluster: DW #0000 ; CLUSTER_LEN .BytesPerCluster: DW #0000 ; CLUSTER_LEN
.ClusterPerBank: DB #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.FAT_TYPE: DB #00 ; TYPE FAT (12 - 12bit, 16 - 16bit, 32 - 32bit) ; [x] fat32
.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
.ENDCLUS_LOW: DW #FFFF .ENDCLUS_LOW: DW #FFFF
.ENDCLUS_HIGH: DW #FFFF ; [ ] fat32 .ENDCLUS_HIGH: DW #0FFF ; [ ] fat3
.MaxClusterLow: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
.MaxClusterHigh: DW #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
;.READ_PG: DB #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))
;.S_X_H: DW #0000 ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥ ; ????? íâ® ¨á¯®«ì§ã¥âáï?
; ;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
INCLUDE "FAT12_16.ASM"
IF _FAT32_ENABLE
INCLUDE "FAT32.ASM"
ENDIF
;

View File

@ -1,194 +0,0 @@
;!TODO fat32
;=======================================================================
;BPB
;LD (FatBuffer.FAT2_SEC_L),HL
;LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
;BPB32
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2) 4 ¡ ©â 
;FAT Max Cluster
;LD (FAT_Max_Cluster_L),HL
;=======================================================================
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; ª®áâ뫨
MODULE SET_FAT32
; ‚•Ž„: HL - ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¯®á«¥ ¨­ªà¥¬¥­â 
; ‚›•Ž„: HL - ª ª ¨ ¢å®¤
; DE - áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¯®á«¥ ¨­ªà¥¬¥­â 
CHECK_INC_HIGH_CLUSTER:
LD DE,(R_CLUST.FAT32)
;
LD A,H
OR L
RET NZ
;
INC DE
; !FIXIT ¯à®¢¥àïâì ¯¥à¥¯®«­¥­¨¥?
RET
ENDMODULE
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-----------------------------------------------------------------------
;¢å®¤: HL':HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
;
;[x] fat32 ;!TEST
GET_FAT32_CELL:
; ¤¢¨£ ¥¬ ¢«¥¢® HL':H
LD A,H
EXX
LD C,A
LD A,H
AND FAT_CACHE.Size_Mask_32 ; #0F
LD H,A
LD A,C
;
LD B,FAT_CACHE.Degree_32 ; 4 ᤢ¨£ 
.loop_block:
RLCA ; << H
RL L ; << L'
RL H ; << H'
DJNZ .loop_block
EXX
; ¨â®£¥ âãâ ¢ HL' ­®¬¥à ¡«®ª  FAT
;
; HL - FAT32 OFFSET (FROM CASH)
LD A,H
AND FAT_CACHE.Size_Mask_32 ; #0F
LD H,A
ADD HL,HL
ADD HL,HL
PUSH HL ; á®å࠭塞 ­  á«ãç ©, ¥á«¨ READ_FAT_TABLE ¨á¯®àâ¨â
AND A
;
EXX
EX DE,HL
LD HL,(FatCache.Block) ; BC - BLOCK FAT IN CASH
SBC HL,DE
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
POP HL
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
RET
; FOR 8192 bytes cache
; 1ÿ073ÿ741ÿ824 bytes max fat32 size
; 1073741824/8192=131072
; 0x40000000 / 0x2000 = 0x20000
; FOR 16384 bytes cache
; 1ÿ073ÿ741ÿ824 bytes max fat32 size
; 1073741824/16384=65536
; 0x40000000 / 0x4000 = 0x10000
/*
D E H L
0xEAB1022 - block 0x1D562
D E H
0xEAB10 >>> 0x1D562
[ ] fat32 ¤®¤¥« âì âãâ
LD A,H
LD B,H
AND #0F
;AND FAT_CACHE.Size_Mask_16 ; #0F
LD H,A
LD A,B
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
;DUP FAT_CACHE.Degree_16
RRCA
RRCA
RRCA
RRCA
;EDUP
AND #0F
;AND FAT_CACHE.Part_Mask_16
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH
CP C
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
RET
*/
;-----------------------------------------------------------------------
/*
; <20>à®ç¨â âì ¢ ª¥è 16 ᥪâ®à®¢ FAT- 
; A - NEW FAT BLOCK
READ_FAT32:
PUSH HL
PUSH AF
LD A,(FatCache.Update)
OR A
CALL NZ,WRITE_FAT_TABLE.Start
POP AF
LD L,A
XOR A
LD H,A ;!FIXIT fat32
LD (FatCache.Block),HL
LD (FatCache.Update),A
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
DUP FAT_CACHE.Degree_16
ADD HL,HL ;x2
EDUP
LD DE,(FatBuffer.FAT_FRM)
ADD HL,DE
EX DE,HL
;
LD XH,D
LD XL,E
;LD IX,0
;ADD IX,DE ; ­®¬¥à «®£. ᥪâ®à 
;
LD HL,0 ; áâ. à §àï¤ ; HL:IX - SECTOR FAT FOR READING ;!TODO FAT32
LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD BC,FAT_CACHE.Sectors*256 + Dss.DRV.Read ;ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
RST ToDSS.DRV
POP HL
RET
;¢å®¤: HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
GET_FAT32_CELL:
LD A,H
LD B,H
;AND #0F
AND FAT_CACHE.Size_Mask_16
LD H,A
LD A,B
; A=A/16 ; A - BLOCK FAT (1 BLOCK = 8192 BYTES)
DUP FAT_CACHE.Degree_16
RRCA
EDUP
;AND #0F
AND FAT_CACHE.Part_Mask_16
;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
LD BC,(FatCache.Block) ; C - BLOCK FAT IN CASH
CP C
CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT
RET
R_F_F16:
CALL GET_FAT16_CELL
LD E,(HL) ; ¯à®ç¨â âì ­®¬¥à ª« áâ¥à 
INC HL
LD D,(HL)
POP AF
OUT (SLOT3),A
;!TODO #FFF7 - ª« áâ¥à á ª®áïªç­ë¬¨ ᥪâ®à ¬¨
LD HL,#FFEF ;!HARDCODE
XOR A ; DssErr.sys.NO_ERROR
SBC HL,DE ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
POP HL
RET
*/
;

View File

@ -14,33 +14,43 @@
;--------------------------------------------------------------- ;---------------------------------------------------------------
; “áâ ­®¢¨âì ­ ç «ì­ë© ª« áâ¥à ¤«ï ç⥭¨ï ; “áâ ­®¢¨âì ­ ç «ì­ë© ª« áâ¥à ¤«ï ç⥭¨ï
; [ ] fat32 ; [x] fat32 ;!TEST
R_CLUST: R_CLUST: LD HL,#0001
LD HL,#0001 LD (G_CLUST.low),HL
LD (G_CLUST.num),HL DEC L
LD (G_CLUST.high),HL
RET RET
.FAT32: WORD 0
; ­ ©â¨ ¯¥à¢ë© ᢮¡®¤­ë© ª« áâ¥à
; [ ] fat32 ; ­ ©â¨ ¯¥à¢ë© ᢮¡®¤­ë© ª« áâ¥à ;!TODO ¯à®¢¥à¨âì ¯¥à¥¡®à ª« áâ¥à®¢
G_CLUST: ; [x] fat32 ;!TEST
.num+1: LD HL,#0001 G_CLUST: ;
.low+1: LD HL,#0001
.loop: INC HL ; ­®¬¥à ª« áâ¥à  .loop: INC HL ; ­®¬¥à ª« áâ¥à 
LD A,L
OR H
; [x] fat32 ; [x] fat32
IF _FAT32_ENABLE EXX
LD A,(FatBuffer.FAT_TYPE) .high+1: LD HL,0
XOR FAT_TYPE.x32 JR NZ,.no_inc
CALL Z,SET_FAT32.CHECK_INC_HIGH_CLUSTER INC HL
ENDIF .no_inc: EXX
; ;
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
CP DSS_Error.sys.DISK_FULL CP DSS_Error.sys.DISK_FULL
SCF SCF
RET Z ; ®è¨¡ª  ? RET Z ; ®è¨¡ª  ?
EXX
LD A,D LD A,D
OR E OR E
EXX
OR D
OR E
JR NZ,.loop JR NZ,.loop
LD (G_CLUST.num),HL LD (G_CLUST.low),HL
EXX
LD (G_CLUST.high),HL
EXX
; XOR A ; XOR A
RET RET
@ -60,11 +70,10 @@ INC_FAT:
; JR NC,.loop ; ­¥ ª®­¥æ 楯®çª¨ ; JR NC,.loop ; ­¥ ª®­¥æ 楯®çª¨
EX DE,HL EX DE,HL
; POP DE ; ­®¬¥à ª« áâ¥à  ; POP DE ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!FIXIT <­¥â ª®­âà®«ï ®è¨¡ª¨> ;!FIXIT <­¥â ª®­âà®«ï ®è¨¡ª¨>
; ;
POP HL POP HL
LD DE,(FatBuffer.ENDCLUS_LOW) ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE? ;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE?
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª ;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
@ -73,6 +82,35 @@ INC_FAT:
RET RET
;RX01 ;RX01
; ¢å®¤: de = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï áà ¢­¥­¨ï á FAT_Max_Cluster
; de' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¤«ï áà ¢­¥­¨ï á FAT_Max_Cluster (⮫쪮 ¤«ï fat32)
; [x] fat32 ;!TEST
CHECK_CLUSTER_IS_SMALLER:
LD A,(FatBuffer.FAT_TYPE)
XOR FAT_TYPE.x32
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
; ¯à®¢¥à塞 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
EXX
EX DE,HL
LD HL,(FatBuffer.MaxClusterHigh)
; CF = 0
SBC HL,DE
EX DE,HL
EXX
LD A,DSS_Error.sys.DISK_FULL
;RET C
RET NZ ; ¥á«¨ FatBuffer.MaxClusterHigh - hl' != 0, â® ª« áâ¥à ª®à४â­ë©
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ­®¬¥à  ª« áâ¥à 
.low: EX DE,HL
LD HL,(FatBuffer.MaxClusterLow)
; CF = 0
SBC HL,DE
EX DE,HL
LD A,DSS_Error.sys.DISK_FULL
RET
;
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à  ; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; ¢å®¤: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®) ; ¢å®¤: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
@ -85,34 +123,9 @@ INC_FAT:
; CF - ª®­¥æ 楯®çª¨ ; CF - ª®­¥æ 楯®çª¨
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
;[x] fat32 ;!TEST ;[x] fat32 ;!TEST
READ_FROM_FAT: READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
;[x] fat32
LD A,(FatBuffer.FAT_TYPE)
XOR FAT_TYPE.x32
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
; ¯à®¢¥à塞 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
; !FIXIT fat32 ¯à®¢¥àïâì ®¡  á«®¢  FAT_Max_Cluster
EXX
EX DE,HL
LD HL,(FAT_Max_Cluster_H)
; CF = 0
SBC HL,DE
EX DE,HL
EXX
LD A,DSS_Error.sys.DISK_FULL
RET C
JP NZ,.correct_cluster ; ¥á«¨ FAT_Max_Cluster_H - hl' != 0, â® ª« áâ¥à ª®à४â­ë©
;
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ­®¬¥à  ª« áâ¥à 
.low: EX DE,HL
LD HL,(FAT_Max_Cluster_L)
; CF = 0
SBC HL,DE
EX DE,HL
LD A,DSS_Error.sys.DISK_FULL
RET C RET C
; ;
.correct_cluster:
SET_PAGE_X FATPAGE SET_PAGE_X FATPAGE
; ;
PUSH HL PUSH HL
@ -135,7 +148,6 @@ READ_FROM_FAT:
; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë ; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
SBC HL,DE SBC HL,DE
POP HL POP HL
; [x] fat32
EXX EXX
LD H,A LD H,A
LD L,A LD L,A
@ -150,8 +162,7 @@ READ_FROM_FAT:
LD D,(HL) LD D,(HL)
LD HL,SERVICE_SECTORS.FAT12 LD HL,SERVICE_SECTORS.FAT12
JR NC,.Correct_2 JR NC,.Correct_2
.Correct_1: .Correct_1: LD A,E
LD A,E
AND #F0 AND #F0
DUP 4 ; ¢¯à ¢® ­  4 ¡¨âa DUP 4 ; ¢¯à ¢® ­  4 ¡¨âa
RR D RR D
@ -160,14 +171,12 @@ READ_FROM_FAT:
LD E,A LD E,A
JR .exit JR .exit
; ;
.Correct_2 .Correct_2: LD A,D
LD A,D
AND #0F AND #0F
LD D,A LD D,A
JR .exit JR .exit
; ;
.FAT32: ; [x] fat32 ;!TEST .FAT32: EXX
EXX
PUSH HL PUSH HL
EXX EXX
; ;
@ -199,7 +208,6 @@ READ_FROM_FAT:
SBC HL,DE SBC HL,DE
POP HL POP HL
EXX EXX
;
POP BC POP BC
LD A,B LD A,B
OUT (SLOT3),A OUT (SLOT3),A
@ -208,30 +216,36 @@ READ_FROM_FAT:
; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à  ; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì ; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
; hl' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì (⮫쪮 ¤«ï fat32) ; hl' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì (⮫쪮 ¤«ï fat32)
; .Custom:
; de = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì ; de = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì
; de' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì (⮫쪮 ¤«ï fat32) ; de' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì (⮫쪮 ¤«ï fat32)
; ¢ë室: â ª®© ¦¥ ª ª ¨ ¢å®¤ ; ¢ë室: â ª®© ¦¥ ª ª ¨ ¢å®¤
;------------------------------------------------------------------------------------------------ ;------------------------------------------------------------------------------------------------
; [ ] fat32 ; [x] fat32 ;!TEST
WRITE_TO_FAT: WRITE_TO_FAT: LD DE,(FatBuffer.ENDCLUS_LOW) ; ­®¬¥à ª« áâ¥à 
EXX
LD DE,(FatBuffer.ENDCLUS_HIGH) ; ­®¬¥à ª« áâ¥à 
EXX
.Custom: PUSH DE
EXX
PUSH DE PUSH DE
EX DE,HL EXX
LD HL,(FAT_Max_Cluster_L) CALL CHECK_CLUSTER_IS_SMALLER
AND A EXX
SBC HL,DE POP DE
EX DE,HL EXX
POP DE POP DE
LD A,DSS_Error.sys.DISK_FULL
RET C RET C
;
EXX EXX
SET_PAGE_X FATPAGE SET_PAGE_X FATPAGE
EXX EXX
PUSH HL PUSH HL
PUSH AF PUSH AF
PUSH DE ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì PUSH DE ; ¬« ¤è¨© ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD ; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
;LD A,1 ;LD A,1
;LD (FatCache.Update),A ;LD (FatBuffer.CacheUpdated),A
; ;
LD A,(FatBuffer.FAT_TYPE) LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x16 CP FAT_TYPE.x16
@ -239,7 +253,7 @@ WRITE_TO_FAT:
JR NZ,.FAT32 JR NZ,.FAT32
; ;
.FAT16: CALL GET_FAT16_CELL .FAT16: CALL GET_FAT16_CELL
POP DE ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì POP DE ; ¬« ¤è¨© ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-  LD (HL),E ; á®åà. ¢ ª¥è¥ FAT- 
INC HL ; ­®¬¥à ª« áâ¥à  INC HL ; ­®¬¥à ª« áâ¥à 
LD (HL),D LD (HL),D
@ -249,13 +263,13 @@ WRITE_TO_FAT:
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD ; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
XOR A XOR A
INC A INC A
LD (FatCache.Update),A LD (FatBuffer.CacheUpdated),A
; CF = 0 ; CF = 0
RET RET
; ;
.FAT12: ;!FIXIT ¯¥à¥¤¥« âì ­  ¯¥à¥¬¥­­ë¥ FAT_CACHE .FAT12: ;!FIXIT ¯¥à¥¤¥« âì ­  ¯¥à¥¬¥­­ë¥ FAT_CACHE
CALL GET_FAT12_CELL CALL GET_FAT12_CELL
POP DE ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì POP DE ; ¬« ¤è¨© ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
JR C,.Correct_1 ; ­®¬¥à ­¥çñâ­ë© JR C,.Correct_1 ; ­®¬¥à ­¥çñâ­ë©
LD (HL),E LD (HL),E
INC HL INC HL
@ -265,8 +279,7 @@ WRITE_TO_FAT:
LD (HL),A LD (HL),A
JR .exit JR .exit
; ;
.Correct_1: .Correct_1: ; ¢«¥¢® ­  4 ¡¨âa
; ¢«¥¢® ­  4 ¡¨âa
EX DE,HL EX DE,HL
ADD HL,HL ADD HL,HL
ADD HL,HL ADD HL,HL
@ -280,84 +293,94 @@ WRITE_TO_FAT:
LD (HL),A ; á®åà. ¢ ª¥è¥ FAT-  LD (HL),A ; á®åà. ¢ ª¥è¥ FAT- 
INC HL ; ­®¬¥à ª« áâ¥à  INC HL ; ­®¬¥à ª« áâ¥à 
LD (HL),D LD (HL),D
POP AF JR .exit
POP HL ;
OUT (SLOT3),A .FAT32: ; [x] fat32 ;!TEST
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD EXX
XOR A PUSH DE ; áâ à訩 ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
INC A PUSH HL ; áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
LD (FatCache.Update),A EXX
; LD A,1
; LD (FatCache.Update),A
; AND A
; CF = 0
RET
.FAT32: ; [ ] fat32
CALL GET_FAT32_CELL CALL GET_FAT32_CELL
POP DE ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì EXX
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-  POP HL ; áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
INC HL ; ­®¬¥à ª« áâ¥à  EXX
POP DE ; áâ à訩 ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
POP BC ; ¬« ¤è¨© ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
; á®åà. ¢ ª¥è¥ FAT-  ­®¬¥à ª« áâ¥à 
LD (HL),C
INC HL
LD (HL),B
INC HL
LD (HL),E
INC HL
LD (HL),D LD (HL),D
JR .exit
;;;;;;;;;
DI
HALT ;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
; in: HL - Cache block
; out: C:HL - logical number
GET_SECTOR_OF_FAT:
XOR A
LD B,A
LD C,A
DUP FAT_CACHE.Degree ; 4
ADD HL,HL ;x2
ADC A,C
EDUP
LD C,A
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
RET NZ
ADD HL,HL ;x2
RET NC
INC C
RET
;;;;;;;;;
;RE_FAT: ;RE_FAT:
;RX01 ;RX01
; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT-  ; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT- 
; [ ] fat32 ;!TEST ; [x] fat32 ;!TEST
; DE - NEW FAT BLOCK ; DE - NEW FAT BLOCK
READ_FAT_TABLE: READ_FAT_TABLE: PUSH HL
PUSH HL
; [x] fat32
; PUSH AF
PUSH DE PUSH DE
; LD A,(FatBuffer.CacheUpdated)
LD A,(FatCache.Update)
OR A OR A
CALL NZ,WRITE_FAT_TABLE.Start CALL NZ,WRITE_FAT_TABLE.Start
; [x] fat32
; POP AF
POP DE POP DE
; ;
;[ ] fat32
; LD L,A
; XOR A
; LD H,A
EX DE,HL EX DE,HL
LD (FatBuffer.CacheBlock),HL
;
CALL GET_SECTOR_OF_FAT
; ;
LD (FatCache.Block),HL
;LD (FatCache.Update),A
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
DUP FAT_CACHE.Degree ; 4
ADD HL,HL ;x2
EDUP
LD DE,(FatBuffer.FAT1_SEC_L) LD DE,(FatBuffer.FAT1_SEC_L)
; ­®¬¥à «®£. ᥪâ®à  ; BC:HL - ­®¬¥à «®£. ᥪâ®à 
ADD HL,DE ADD HL,DE
EX DE,HL EX DE,HL
LD XH,D LD XH,D
LD XL,E LD XL,E
LD HL,(FatBuffer.FAT1_SEC_H) LD HL,(FatBuffer.FAT1_SEC_H)
LD DE,0 JR NC,.no_inc
ADC HL,DE INC HL
.no_inc: ADD HL,BC
; HL:IX - SECTOR FAT FOR READING ; HL:IX - SECTOR FAT FOR READING
LD B,FAT_CACHE.Sectors_16
LD A,(FatBuffer.FAT_TYPE) LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32 CP FAT_TYPE.x32
LD BC,FAT_CACHE.Sectors_16 * 256 + Dss.DRV.Read ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
JR NZ,.nxt JR NZ,.nxt
LD B,FAT_CACHE.Sectors_32 LD B,FAT_CACHE.Sectors_32 ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
.nxt: LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS .nxt: LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD C,Dss.DRV.Read ;ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
RST ToDSS.DRV RST ToDSS.DRV
POP HL POP HL
RET RET
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª ; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
; [ ] fat32 ; [ ] fat32
WRITE_FAT_TABLE: WRITE_FAT_TABLE:
@ -368,16 +391,14 @@ WRITE_FAT_TABLE:
OUT (SLOT3),A OUT (SLOT3),A
RET RET
; ‡ ¯¨áì ª¥è  FAT-  ­  ¤¨áª ; ‡ ¯¨áì ª¥è  FAT-  ­  ¤¨áª
.Start: LD HL,(FatCache.Block) .Start: LD HL,(FatBuffer.CacheBlock)
; ;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
;LD H,0 CALL GET_SECTOR_OF_FAT
;FAT BLOCK * 16 = SECTOR OF FAT ; BC:HL - ­®¬¥à «®£. ᥪâ®à 
DUP FAT_CACHE.Degree ; [ ] fat32 ;!FIXIT
ADD HL,HL ;x2
EDUP
; HL - ­®¬¥à «®£. ᥪâ®à 
LD B,H LD B,H
LD C,L ;BC - BLOCK OF FAT LD C,L
; [ ] fat32
LD DE,FAT_CACHE.Sectors_16 LD DE,FAT_CACHE.Sectors_16
ADD HL,DE ;+ SIZE CASH (16 SECTORS) ADD HL,DE ;+ SIZE CASH (16 SECTORS)
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè
@ -385,17 +406,17 @@ WRITE_FAT_TABLE:
AND A AND A
SBC HL,DE SBC HL,DE
JR C,.WALLFAT JR C,.WALLFAT
;
EX DE,HL EX DE,HL
LD HL,FAT_CACHE.Sectors_16 LD HL,FAT_CACHE.Sectors_16
; CF = 0 ; CF = 0
SBC HL,DE SBC HL,DE
JR C,.ERR JR C,.ERR ;!TODO ¯à®¢¥à¨âì
LD A,L LD A,L
.WALLFAT:; !TODO çñ¡ áà §ã ¢ IX ­¥ £à㧨âì FAT_FRM? .WALLFAT:
LD H,B LD H,B
LD L,C LD L,C
PUSH HL ; HL - ­®¬¥à «®£. ᥪâ®à  PUSH HL
;
LD DE,(FatBuffer.FAT1_SEC_L) LD DE,(FatBuffer.FAT1_SEC_L)
LD B,A ; ç¨á«® ᥪâ®à®¢ LD B,A ; ç¨á«® ᥪâ®à®¢
LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢ LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
@ -416,7 +437,7 @@ WRITE_FAT_TABLE:
AND A ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª AND A ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
.only_one_FAT: .only_one_FAT:
.ERR: LD A,0 .ERR: LD A,0
LD (FatCache.Update),A LD (FatBuffer.CacheUpdated),A
RET RET
; ;
.SAVE_FAT_XX: .SAVE_FAT_XX:
@ -438,66 +459,50 @@ WRITE_FAT_TABLE:
LD DE,FATPAGE.cache ; ®âªã¤  LD DE,FATPAGE.cache ; ®âªã¤ 
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
JP ToDSS.DRV JP ToDSS.DRV
/*
.WALLFAT:; !TODO çñ¡ áà §ã ¢ IX ­¥ £à㧨âì FAT_FRM? ;-----------------------------------------------------------------------
LD H,B ;¢å®¤: HL':HL - ­®¬¥à ª« áâ¥à 
LD L,C ;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
PUSH HL ; HL - ­®¬¥à «®£. ᥪâ®à 
; ;
LD DE,(FatBuffer.FAT1_SEC_L) ;[x] fat32 ;!TEST
ADD HL,DE GET_FAT32_CELL:
EX DE,HL ; ¤¢¨£ ¥¬ ¢«¥¢® HL':H
; ­®¬¥à «®£. ᥪâ®à  LD A,H
;LD IX,0 EXX
;ADD IX,DE LD C,A
LD XH,D LD A,H
LD XL,E AND FAT_CACHE.Size_Mask_32 ; #0F
LD H,A
LD A,C
; ;
LD HL,0 ; áâ. à §àï¤ LD B,FAT_CACHE.Degree_32 ; 4 ᤢ¨£ 
;HL:IX - SECTOR OF FAT FOR SAVE .loop_block:
LD DE,FATPAGE.cache ; ®âªã¤  RLCA ; << H
LD B,A ; ç¨á«® ᥪâ®à®¢ RL L ; << L'
LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢ RL H ; << H'
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª  DJNZ .loop_block
PUSH BC EXX
RST ToDSS.DRV ; ¨â®£¥ âãâ ¢ HL' ­®¬¥à ¡«®ª  FAT
; [ ] ¥á«¨ ¢á¥£® ®¤­  â ¡«¨æ  FAT, â® ¯®¢â®à­®© § ¯¨á¨ ­¥ ¯à®¨á室¨â 13/03/2024 ;
LD DE,(FatBuffer.FAT2_SEC_L) ; HL - FAT32 OFFSET (FROM CASH)
LD HL,(FatBuffer.FAT1_SEC_L) LD A,H
AND FAT_CACHE.Size_Mask_32 ; #0F
LD H,A
ADD HL,HL
ADD HL,HL
PUSH HL ; [ ] fat32 á®å࠭塞 ­  á«ãç ©, ¥á«¨ READ_FAT_TABLE ¨á¯®àâ¨â
AND A AND A
SBC HL,DE
POP BC ; b=ç¨á«® ᥪâ®à®¢
POP HL
JR Z,.only_one_FAT
; POP BC ; b=ç¨á«® ᥪâ®à®¢
; POP HL
; LD DE,(FatBuffer.FAT2_SEC_L)
; ;
ADD HL,DE EXX
EX DE,HL EX DE,HL
LD XH,D LD HL,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
LD XL,E SBC HL,DE
; CALL NZ,READ_FAT_TABLE ; A != C - READ NEW BLOCK FAT
LD HL,0 POP HL
; CF = ADD HL,DE LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
; [ ] fat32 - ¢â®à ï â ¡«¨æ  ä â ¬®¦¥â ¦¥ ã¥å âì ¤ «ìè¥ 16-¡¨â «®£¨ç¥áª®£® ᥪâ®à ? ADD HL,DE ; ­  ï祩ªã FAT
IF _FAT32_ENABLE
RL L
ENDIF
;
LD DE,FATPAGE.cache
LD A,(FatBuffer.DRIVE)
LD C,Dss.DRV.Write
RST ToDSS.DRV
AND A ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
.only_one_FAT:
;
.ERR: LD A,0
LD (FatCache.Update),A
RET RET
*/ ;-----------------------------------------------------------------------
;¢å®¤: HL - ­®¬¥à ª« áâ¥à  ;¢å®¤: HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE ;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
GET_FAT16_CELL: GET_FAT16_CELL:
@ -516,9 +521,9 @@ GET_FAT16_CELL:
; ;
ADD HL,HL ; HL - FAT OFFSET (FROM CASH) ADD HL,HL ; HL - FAT OFFSET (FROM CASH)
; [ ] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï ; [ ] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï
; LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH ; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
; CP C ; CP C
LD DE,(FatCache.Block) ; BC - BLOCK FAT IN CASH LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
CP E CP E
LD E,A LD E,A
; ;
@ -526,7 +531,7 @@ GET_FAT16_CELL:
LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT-  LD DE,FATPAGE.cache ; ­ ç «® ª¥è  FAT- 
ADD HL,DE ; ­  ï祩ªã FAT ADD HL,DE ; ­  ï祩ªã FAT
RET RET
;-----------------------------------------------------------------------
;¢å®¤: HL - ­®¬¥à ª« áâ¥à  ;¢å®¤: HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE ;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
; CF - çñâ­ë©/­¥çñâ­ë©  ¤à¥á ª« áâ¥à  ; CF - çñâ­ë©/­¥çñâ­ë©  ¤à¥á ª« áâ¥à 
@ -538,7 +543,7 @@ GET_FAT12_CELL:
PUSH AF ; á®åà. ä« £ PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5 ADD HL,DE ; CLUSTER * 1.5
; ;
IF FAT_CACHE.Size_12 < #2000 IF FAT_CACHE.Size_12 < #1800
;!FIXIT ®¯â¨¬¨§¨à®¢ âì ;!FIXIT ®¯â¨¬¨§¨à®¢ âì
LD A,H LD A,H
LD B,H LD B,H
@ -559,9 +564,9 @@ GET_FAT12_CELL:
;AND FAT_CACHE.Part_Mask_16 ;AND FAT_CACHE.Part_Mask_16
; ;
; [ ] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï ; [ ] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï
; LD BC,(FatCache.Block) ; BC - BLOCK FAT IN CASH ; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
; CP C ; CP C
LD DE,(FatCache.Block) ; BC - BLOCK FAT IN CASH LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
CP E CP E
LD E,A LD E,A
; ;
@ -572,12 +577,20 @@ GET_FAT12_CELL:
ADD HL,DE ADD HL,DE
POP AF POP AF
RET RET
;-----------------------------------------------------------------------
; in: DE:HL - CLUSTER
;NSECTOR:
; in: HL':HL - CLUSTER
; out: HL:IX - SECTOR ; out: HL:IX - SECTOR
NSECTOR:;[ ] fat32 ;[ ] fat32
LD DE,(FAT_Max_Cluster_H) ; [ ] fat32 - § ¬¥­¨âì ¤à㣮© ¯¥à¥¬¥­­®© CLUSTER_TO_SECTOR:
EXX
PUSH HL
EXX
POP DE
; DE:HL - cluster
DEC HL DEC HL
DEC HL DEC HL
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
@ -645,7 +658,7 @@ BLOCK_READ: PUSH BC
;DE : BC - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (D=D+1, B=B+1) ;DE : BC - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (D=D+1, B=B+1)
; ;
PUSH DE ; [x] ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®) PUSH DE ; [x] ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®)
JP .enter_loop1 JR .enter_loop1
; ;
.fast_exit_5: POP DE .fast_exit_5: POP DE
.fast_exit_4: ; [x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE .fast_exit_4: ; [x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
@ -678,26 +691,26 @@ 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
POP BC POP BC ; B - Amount sectors
CALL SaveGotCluster CALL SaveGotCluster
; ;
POP DE ; ®áâ â®ª DIV_for_SPC POP DE ; D = 0, E = ®áâ â®ª DIV_for_SPC
POP BC ; HL:DE - FP (in sectors) POP BC ; B = Amount sectors
; (SP) = (RET) ; (SP) = (RET)
; ; à ¡®â  á ®áâ âª®¬ ®â ¤¥«¥­¨ï
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
SUB E SUB E
LD C,A ;\ LD C,A
CP B ; \ CP B
JR C,.skip1 ;SIZE > RESIDUE CLUSTER ; \ JR C,.skip1 ;SIZE > RESIDUE CLUSTER
LD C,B ;SIZE < CLUSTER ;->-|--> ; !TODO à §®¡à âìáï LD C,B ;SIZE < CLUSTER
.skip1: LD A,B ; / .skip1: LD A,B
SUB C ; / SUB C
LD B,A ;/ LD B,A
PUSH HL PUSH HL ; ­®¬¥à ª« áâ¥à  ¬« ¤è ï ç áâì
PUSH BC PUSH BC
PUSH DE PUSH DE
CALL NSECTOR CALL CLUSTER_TO_SECTOR
POP DE POP DE
ADD IX,DE ADD IX,DE
JR NC,.skip2 JR NC,.skip2
@ -745,7 +758,7 @@ BLOCK_READ: PUSH BC
EX DE,HL EX DE,HL
PUSH HL PUSH HL
PUSH BC PUSH BC
CALL NSECTOR CALL CLUSTER_TO_SECTOR
LD DE,(READ.PointerOnBuffer) LD DE,(READ.PointerOnBuffer)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
LD B,C LD B,C
@ -826,7 +839,6 @@ BLOK_WR: PUSH BC
LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),H LD (IY+_sFM.FS_REC.FIRST_CLUSTER_H+1),H
EXX EXX
; ;
LD DE,(FatBuffer.ENDCLUS_LOW)
CALL WRITE_TO_FAT CALL WRITE_TO_FAT
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE? ;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç­®© § ¯¨áìî WRITE_FAT_TABLE?
;PUSH HL ;PUSH HL
@ -903,7 +915,7 @@ BLOK_WR: PUSH BC
PUSH HL PUSH HL
PUSH BC PUSH BC
PUSH DE PUSH DE
CALL NSECTOR CALL CLUSTER_TO_SECTOR
POP DE POP DE
ADD IX,DE ADD IX,DE
JR NC,.WR4 JR NC,.WR4
@ -954,7 +966,7 @@ BLOK_WR: PUSH BC
EX DE,HL EX DE,HL
PUSH HL PUSH HL
PUSH BC PUSH BC
CALL NSECTOR CALL CLUSTER_TO_SECTOR
; DOUBLE 1 ; DOUBLE 1
LD DE,(READ.PointerOnBuffer) LD DE,(READ.PointerOnBuffer)
LD A,(FatBuffer.DRIVE) LD A,(FatBuffer.DRIVE)
@ -988,53 +1000,53 @@ BLOK_WR: PUSH BC
;SCF ;SCF
RET RET
/*
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ; ;GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
; ‚室: HL - ¯¥à¢ë© ª« áâ¥à ä ©«  (¬« ¤è¥¥ á«®¢®) ; ; ‚室: HL - ¯¥à¢ë© ª« áâ¥à ä ©«  (¬« ¤è¥¥ á«®¢®)
; BC - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®) ; ; BC - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
; ‚ë室: HL - ¨§¢¥áâ­ë© ª« áâ¥à ä ©«  ¤«ï ®âáçñâ  (¬« ¤è¥¥ á«®¢®) ; ; ‚ë室: HL - ¨§¢¥áâ­ë© ª« áâ¥à ä ©«  ¤«ï ®âáçñâ  (¬« ¤è¥¥ á«®¢®)
; BC - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®) ; ; BC - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®)
GetSavedCluster: ; GetSavedCluster:
INC B ; INC B
;PUSH DE ; ¯¥à¢ë© ª« áâ¥à ä ©«  (áâ à襥 á«®¢®) ; ;PUSH DE ; ¯¥à¢ë© ª« áâ¥à ä ©«  (áâ à襥 á«®¢®)
LD E,(IY+_sFM.KnownCluster_L) ; LD E,(IY+_sFM.KnownCluster_L)
LD D,(IY+_sFM.KnownCluster_L+1) ; LD D,(IY+_sFM.KnownCluster_L+1)
LD A,E ; LD A,E
OR D ; OR D
RET Z ; RET Z
; ; ;
DEC B ; DEC B
PUSH DE ; KnownCluster_H ; PUSH DE ; KnownCluster_H
PUSH HL ; ¯¥à¢ë© ª« áâ¥à ä ©«  (¬« ¤è¥¥ á«®¢®) ; PUSH HL ; ¯¥à¢ë© ª« áâ¥à ä ©«  (¬« ¤è¥¥ á«®¢®)
PUSH BC ; ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å ; PUSH BC ; ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å
LD E,(IY+_sFM.KnownOffset_L) ; LD E,(IY+_sFM.KnownOffset_L)
LD D,(IY+_sFM.KnownOffset_L+1) ; LD D,(IY+_sFM.KnownOffset_L+1)
LD A,D ; LD A,D
OR E ; OR E
JR Z,.noOptimization_3 ; JR Z,.noOptimization_3
; ; ;
POP HL ; ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å ; POP HL ; ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å
SBC HL,DE ; SBC HL,DE
JR C,.noOptimization_2 ; JR C,.noOptimization_2
LD C,L ; LD C,L
LD B,H ; LD B,H
POP DE ; ¡ « ­á á⥪  ; POP DE ; ¡ « ­á á⥪ 
POP HL ; POP HL
; ®¯â¨¬¨§ æ¨ï: HL - ­¥ ¯¥à¢ë© ª« áâ¥à ä ©« ,   KnownCluster ; ; ®¯â¨¬¨§ æ¨ï: HL - ­¥ ¯¥à¢ë© ª« áâ¥à ä ©« ,   KnownCluster
; BC - à ááâ®ï­¨¥ ¤® âॡ㥬®£® ᬥ饭¨ï ®â KnownCluster ; ; BC - à ááâ®ï­¨¥ ¤® âॡ㥬®£® ᬥ饭¨ï ®â KnownCluster
; ; ;
INC B ; INC B
RET ; RET
; ; ;
.noOptimization_3: ; .noOptimization_3:
POP BC ; POP BC
.noOptimization_2: ; .noOptimization_2:
POP HL ; POP HL
.noOptimization_1: ; .noOptimization_1:
POP DE ; POP DE
INC B ; INC B
RET ; RET
*/
;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
; ‚室: DE - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®) ; ‚室: DE - ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®)
@ -1131,11 +1143,23 @@ SaveGotCluster: LD A,C
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
FatCache: ;WORD #0000 ;!TODO fat32
.Block WORD #0000 ;=======================================================================
.Update BYTE 0 ;BPB
FAT_Max_Cluster_L: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.) ;LD (FatBuffer.FAT2_SEC_L),HL
FAT_Max_Cluster_H: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.) ;LD (FatBuffer.RootDirFirstSector_L),HL ; first sector DIR
;BPB32
;LD HL,(CORE_BUFFERS.BootSector+#2C) ;fat32 <20>¥à¢ë© ª« áâ¥à ª®à­¥¢®£® ª â «®£  (®¡ëç­® 2) 4 ¡ ©â 
;FAT Max Cluster
;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]
@ -1258,7 +1282,7 @@ FAT_Max_Cluster_H: WORD #0000 ;
////////////// OLD //////////////// ////////////// OLD ////////////////
; HL - CLUSTER ; HL - CLUSTER
; HL:IX - SECTOR ; HL:IX - SECTOR
; NSECTOR: DEC HL ; CLUSTER_TO_SECTOR: DEC HL
; DEC HL ; DEC HL
; EX DE,HL ; EX DE,HL
; LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)

View File

@ -1,3 +1,4 @@
;!TODO ¯à¨¢¥á⨠ª ®¡é¥¬ã ¢¨¤ã ¢ ®¤­ã ¨­áâàãªæ¨î, ¯à®¢¥à¨âì ª®à४⭮áâì
;--------------------------------------------------------------- ;---------------------------------------------------------------
;Rev Date Name Description ;Rev Date Name Description
;--------------------------------------------------------------- ;---------------------------------------------------------------
@ -11,10 +12,10 @@
; ;
;Function: Initialization device(s) ;Function: Initialization device(s)
; ;
;Input : C = 00h ;Input: C = #00
; IX - Environment ; IX = Environment
;
;Output: A = Amount drive support ;Output: A = Amount drive support
; HL = Size driver
;[]===========================================================[0] ;[]===========================================================[0]
;[]===========================================================[1] ;[]===========================================================[1]
@ -22,10 +23,10 @@
; ;
;Function: Open disk ;Function: Open disk
; ;
;Input : C = 01h ;Input: C = #01
; A - Drive ; A = Drive
;Output : None
; ;
;Output: None
;[]===========================================================[1] ;[]===========================================================[1]
;[]===========================================================[2] ;[]===========================================================[2]
@ -33,10 +34,10 @@
; ;
;Function: Close disk ;Function: Close disk
; ;
;Input : C = 02h ;Input: C = #02
; A - Drive ; A = Drive
;Output : None
; ;
;Output: None
;[]===========================================================[2] ;[]===========================================================[2]
;[]===========================================================[3] ;[]===========================================================[3]
@ -44,11 +45,11 @@
; ;
;Function: Checking change line ;Function: Checking change line
; ;
;Input : C = 03h ;Input: C = #03
; A - Drive ; A = Drive
;Output : A = 00h disk no changed
; A = 0FFh disk changed
; ;
;Output: A = #00 disk no changed
; #FF disk changed
;[]===========================================================[3] ;[]===========================================================[3]
;[]===========================================================[4] ;[]===========================================================[4]
@ -56,36 +57,38 @@
; ;
;Function: Get Block Parameters BIOS ;Function: Get Block Parameters BIOS
; ;
;Input : C = 04h ;Input: C = #04
; DE - Address ; A = Drive
;Output : None ; DE = Address
; ;
;Output: None
;[]===========================================================[4] ;[]===========================================================[4]
;[]===========================================================[5] ;[]===========================================================[5]
;Procedure : Input ;Procedure: Read
; ;
;Function : Input from disk ;Function: Read from disk
;
;Input: C = #05
; HL:IX = Logical Block (sector)
; DE = Address
; B = Sector count
; A = Drive
; ;
;Input : C = 05h
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
;Output: None ;Output: None
;
;[]===========================================================[5] ;[]===========================================================[5]
;[]===========================================================[6] ;[]===========================================================[6]
;Procedure : Output ;Procedure: Write
; ;
;Function : Output to disk ;Function: Write to disk
;
;Input: C = #06
; HL:IX = Logical Block (sector)
; DE = Address
; B = Sector count
; ;
;Input : C = 06h
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
;Output: None ;Output: None
;
;[]===========================================================[6] ;[]===========================================================[6]
;[]===========================================================[7] ;[]===========================================================[7]
@ -93,11 +96,11 @@
; ;
;Function: Checking change line ;Function: Checking change line
; ;
;Input : C = 07h ;Input: C = #07
; A - Drive ; A = Drive
;Output : A = 00h Removable
; A = FFh Nonremovable
; ;
;Output: A = #00 Removable
; A = #FF Non-removable
;[]===========================================================[7] ;[]===========================================================[7]
;[]===========================================================[8] ;[]===========================================================[8]
@ -105,19 +108,17 @@
; ;
;Function: Generic Input Output Control ;Function: Generic Input Output Control
; ;
;Input : C = 08h ;Input: C = #08
; B - Subcommand ; B = Subcommand
; DE = 55AAh Magic Number ; DE = #55AA Magic Number
; Subcommand
;----------------------
; 00h - Get Device Parameters
; 01h - Read track
; 02h - Test track
; 80h - Set Device Parameters
; 81h - Write track
; 82h - Format track
;Output :
; ;
;Subcommands: #00 - Get Device Parameters
; #01 - Read track
; #02 - Test track
; #80 - Set Device Parameters
; #81 - Write track
; #82 - Format track
;Output:
;[]===========================================================[8] ;[]===========================================================[8]
;[]===========================================================[9] ;[]===========================================================[9]
@ -125,15 +126,15 @@
; ;
;Function: Reading sectors from disk ;Function: Reading sectors from disk
; ;
;Input : C = 0Ah ;Input: C = #0A
; HL:IX - Logical Block (sector) ; HL:IX = Logical Block (sector)
; DE - Address ; DE = Address
; B - Sector count ; B = Sector count
; A'- Page ; A' = Page
;Output : A'- Next Page
; HL:IX - Next Logical Block (sector)
; DE - Next Address
; ;
;Output: A' = Next Page
; HL:IX = Next Logical Block (sector)
; DE = Next Address
;[]===========================================================[9] ;[]===========================================================[9]
;[]===========================================================[10] ;[]===========================================================[10]
@ -141,33 +142,33 @@
; ;
;Function: Writing sectors to disk ;Function: Writing sectors to disk
; ;
;Input : C = 0Bh ;Input: C = #0B
; HL:IX - Logical Block (sector) ; HL:IX = Logical Block (sector)
; DE - Address ; DE = Address
; B - Sector count ; B = Sector count
; A'- Page ; A' = Page
;Output : A'- Next Page
; HL:IX - Next Logical Block (sector)
; DE - Next Address
; ;
;Output: A' = Next Page
; HL:IX = Next Logical Block (sector)
; DE = Next Address
;[]===========================================================[10] ;[]===========================================================[10]
; ;
; Errors: ; Errors:
; 0 (00h) - NO ERRORS ; 0 (#00) - NO ERRORS
; 1 (01h) - BAD COMMAND ; 1 (#01) - BAD COMMAND
; 2 (02h) - BAD DRIVE NUMBER ; 2 (#02) - BAD DRIVE NUMBER
; 3 (03h) - UNKNOW FORMAT ; 3 (#03) - UNKNOW FORMAT
; 4 (04h) - NOT READY ; 4 (#04) - NOT READY
; 5 (05h) - SEEK ERROR ; 5 (#05) - SEEK ERROR
; 6 (06h) - SECTOR NOT FOUND ; 6 (#06) - SECTOR NOT FOUND
; 7 (07h) - CRC ERROR ; 7 (#07) - CRC ERROR
; 8 (08h) - WRITE PROTECT ; 8 (#08) - WRITE PROTECT
; 9 (09h) - READ ERROR ; 9 (#09) - READ ERROR
; 10 (0Ah) - WRITE ERROR ; 10 (#0A) - WRITE ERROR
; 11 (0Bh) - FAILURE ; 11 (#0B) - FAILURE
; 12 (0Ch) - BUSY (DEVICE OPENED) ; 12 (#0C) - BUSY (DEVICE OPENED)
; 13 (0Dh) - RESERVED ; 13 (#0D) - RESERVED
; IDE0 EQU #0C1C0 ; IDE0 EQU #0C1C0
; IDE1 EQU #0C1C8 ; IDE1 EQU #0C1C8
@ -286,7 +287,7 @@ SELHDD: PUSH DE
; ;
LD L,A LD L,A
LOGDRV_ENTRY_FIND LOGDRV LOGDRV_ENTRY_FIND LOGDRV
; ; !HARDCODE
LD C,(IY+1) LD C,(IY+1)
LD B,(IY+2) LD B,(IY+2)
LD E,(IY+3) LD E,(IY+3)
@ -431,14 +432,14 @@ CHEK_H: ;LD A,#FF
RET RET
;HL:IX - SECTOR
; DE - ADDRESS ; DE - ADDRESS
; A - DRIVE
GBPB_H: PUSH IY GBPB_H: PUSH IY
PUSH DE PUSH DE
LD L,A LD L,A
; ;
LOGDRV_ENTRY_FIND LOGDRV LOGDRV_ENTRY_FIND LOGDRV
; ; !HARDCODE
LD E,(IY+1) LD E,(IY+1)
LD D,(IY+2) LD D,(IY+2)
LD L,(IY+3) LD L,(IY+3)
@ -469,7 +470,7 @@ LREADH: PUSH IY
; DE - ADDRESS ; DE - ADDRESS
; B - COUNTER ; B - COUNTER
; A'- PAGE ; A'- PAGE
; A - HDD NUMBER +#80 ; A - HDD LOG NUMBER
;WRITE SECTOR ;WRITE SECTOR
LWRITEH: LWRITEH:
PUSH IY PUSH IY
@ -482,7 +483,7 @@ LWRITEH:
;HL:IX - SECTOR ;HL:IX - SECTOR
; DE - ADDRESS ; DE - ADDRESS
; B - COUNTER ; B - COUNTER
; A - HDD NUMBER +#80 ; A - HDD LOG NUMBER
;WRITE SECTOR ;WRITE SECTOR
WRITEH: PUSH IY WRITEH: PUSH IY
CALL SELHDD CALL SELHDD
@ -494,7 +495,7 @@ WRITEH: PUSH IY
;HL:IX - SECTOR ;HL:IX - SECTOR
; DE - ADDRESS ; DE - ADDRESS
; B - COUNTER ; B - COUNTER
; A - HDD NUMBER +#80 ; A - HDD LOG NUMBER
;READ SECTOR ;READ SECTOR
READH: PUSH IY READH: PUSH IY
CALL SELHDD CALL SELHDD
@ -506,7 +507,7 @@ READH: PUSH IY
;HL:IX - SECTOR ;HL:IX - SECTOR
; DE - ADDRESS ; DE - ADDRESS
; B - COUNTER ; B - COUNTER
; A - HDD NUMBER +#80 ; A - HDD LOG NUMBER
;CHECK SECTOR ;CHECK SECTOR
CHECKH: PUSH IY CHECKH: PUSH IY
CALL SELHDD CALL SELHDD

View File

@ -9,6 +9,7 @@
; DISK DRIVER SPECIFICATION ; DISK DRIVER SPECIFICATION
; !FIXIT ⑤<>玻オ皚<E382AA><E79A9A>!
;--------------------------------------------- ;---------------------------------------------
; COMMAND 00h (INITIALIZATION) ; COMMAND 00h (INITIALIZATION)
; ;

View File

@ -1 +1 @@
945 955

View File

@ -66,7 +66,7 @@ FAT_CACHE:
; for FAT32 ; for FAT32
.Size_32 EQU #4000 .Size_32 EQU #4000
.Sectors_32 EQU .Size_32 / .Sector_Size ; #20 .Sectors_32 EQU .Size_32 / .Sector_Size ; #20
.Degree_32 EQU .Degree .Degree_32 EQU 5
.Size_Mask_32 EQU #0F .Size_Mask_32 EQU #0F
.Part_Mask_32 EQU #0F .Part_Mask_32 EQU #0F
.bytes_record_32 EQU 2 .bytes_record_32 EQU 2