mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
ещё несколько процедур
This commit is contained in:
parent
1f66e8af24
commit
bd5919fdc4
@ -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
|
||||||
|
|||||||
@ -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 ; áâ. à §àï¤
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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 § £à㧪 á ªâ¨¢®£® à §¤¥« , ¥ á ¯¥à¢®£®
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
@ -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
|
|
||||||
;
|
|
||||||
@ -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
|
|
||||||
*/
|
|
||||||
;
|
|
||||||
@ -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)
|
||||||
@ -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
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
|
|
||||||
; DISK DRIVER SPECIFICATION
|
; DISK DRIVER SPECIFICATION
|
||||||
|
; !FIXIT ⑤<>玻オ皚<E382AA><E79A9A>!
|
||||||
;---------------------------------------------
|
;---------------------------------------------
|
||||||
; COMMAND 00h (INITIALIZATION)
|
; COMMAND 00h (INITIALIZATION)
|
||||||
;
|
;
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
945
|
955
|
||||||
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user