mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
ещё несколько процедур
This commit is contained in:
parent
1f66e8af24
commit
bd5919fdc4
@ -43,7 +43,7 @@ DEL_FN: ;!TEST
|
||||
PUSH DE ; ®¬¥à á«¥¤. ª« áâ¥à
|
||||
PUSH AF
|
||||
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
POP AF
|
||||
POP DE
|
||||
JP NC,.loop
|
||||
|
||||
@ -48,7 +48,6 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
RET C
|
||||
PUSH HL
|
||||
; [ ] fat32
|
||||
LD DE,(FatBuffer.ENDCLUS_LOW) ; ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
LD HL,MASKARE
|
||||
@ -142,7 +141,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
LDIR
|
||||
;
|
||||
POP HL
|
||||
CALL NSECTOR
|
||||
CALL CLUSTER_TO_SECTOR
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster) ; ᥪâ®à®¢ ª« áâ¥à
|
||||
.MKD12: PUSH AF
|
||||
PUSH HL ; áâ. à §àï¤
|
||||
|
||||
@ -41,7 +41,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||||
PUSH IX
|
||||
.RMD17: PUSH HL
|
||||
CALL NSECTOR
|
||||
CALL CLUSTER_TO_SECTOR
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||||
.read_dir_loop:
|
||||
|
||||
@ -18,7 +18,7 @@ WRITE.RD_ONLY:
|
||||
WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] ¨§ĄëâŽçëĽ ˘ë§Ž˘ë WRITE_FAT_TABLE
|
||||
CALL .Start
|
||||
PUSH AF
|
||||
LD A,(FatCache.Update)
|
||||
LD A,(FatBuffer.CacheUpdated)
|
||||
OR A
|
||||
CALL NZ,WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą Şă ŞĽč FAT ¨ § ݍá âě ĽŁŽ ¤¨áŞ
|
||||
POP AF
|
||||
|
||||
@ -120,7 +120,7 @@ DISKINF:; [ ] 22/11/23
|
||||
;.FRESP2:
|
||||
LD D,B
|
||||
LD E,C
|
||||
LD HL,(FAT_Max_Cluster_L)
|
||||
LD HL,(FatBuffer.MaxClusterLow)
|
||||
DEC HL
|
||||
LD BC,(CORE_BUFFERS.BootSector.BytesPerSector)
|
||||
LD A,(CORE_BUFFERS.BootSector.SectorsPerCluster)
|
||||
|
||||
@ -357,6 +357,7 @@ ADRST10: ;DS 512 ;,0
|
||||
INCLUDE "API.ASM"
|
||||
INCLUDE "DOS_Proc.asm"
|
||||
INCLUDE "FS/FAT/FAT.ASM"
|
||||
INCLUDE "FS/FAT/FAT_X.ASM"
|
||||
INCLUDE "DOS_FM.ASM"
|
||||
|
||||
INCLUDE "EXECUTE.ASM"
|
||||
@ -461,8 +462,11 @@ SECBUF EQU BUFFER
|
||||
;
|
||||
|
||||
|
||||
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||;
|
||||
; !!!!! νβ ―ΰ<E28095>ζ₯€γΰ § βΰρβαο ―<>α«₯ ¨α―<CEB1>«₯¨ο
|
||||
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
; § âàñâáï ¯®á«¥ ¨¨æ¨ «¨§ 樨
|
||||
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
|
||||
|
||||
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨¨æ¨ «¨§ 樨 ¤à¥á ¢ â ¡«¨æ¥ ¬¥ï¥âáï VERSION
|
||||
F_START: DI
|
||||
;[ ] 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
|
||||
; IF OLD_SET_BANK
|
||||
; LD A,new_page
|
||||
; CALL BANK
|
||||
|
||||
; ELSE
|
||||
LD A,(BANKTBL+new_page)
|
||||
LD B,A
|
||||
LD C,SLOT3
|
||||
IN A,(SLOT3)
|
||||
OUT (C),B
|
||||
; ENDIF
|
||||
LD A,(BANKTBL+new_page)
|
||||
LD B,A
|
||||
LD C,SLOT3
|
||||
IN A,(SLOT3)
|
||||
OUT (C),B
|
||||
ENDM
|
||||
;
|
||||
|
||||
|
||||
@ -359,7 +359,7 @@ LOADDIR:
|
||||
.LoadRootDir:
|
||||
LD HL,(FatBuffer.RootDirFirstSector_H) ; áâ. à §àï¤
|
||||
LD IX,(FatBuffer.RootDirFirstSector_L) ; ®¬¥à «®£. ᥪâ®à
|
||||
LD A,(FatBuffer.DirSizeInSectros)
|
||||
LD A,(FatBuffer.DirSizeInSectors)
|
||||
LD B,32 ; !HARDCODE sector size 512. 16384/(sector 512). à §¬¥à root-ª â «®£
|
||||
CP B
|
||||
JR NC,.RTD1
|
||||
@ -464,7 +464,7 @@ SAVEDIR:
|
||||
.SaveRootDir:
|
||||
LD HL,(FatBuffer.RootDirFirstSector_H)
|
||||
LD IX,(FatBuffer.RootDirFirstSector_L)
|
||||
LD A,(FatBuffer.DirSizeInSectros)
|
||||
LD A,(FatBuffer.DirSizeInSectors)
|
||||
LD B,32 ;!HARDCODE sector size 512
|
||||
SUB B
|
||||
JR NC,.RTD1S
|
||||
@ -576,7 +576,7 @@ RD_BPB: LD C,SLOT3
|
||||
EX DE,HL
|
||||
LD C,A ; A - sectors in DIR
|
||||
LD B,0
|
||||
LD (FatBuffer.DirSizeInSectros),A
|
||||
LD (FatBuffer.DirSizeInSectors),A
|
||||
ADD HL,BC ; Start DATA area
|
||||
LD (FatBuffer.FirstDataSector_L),HL
|
||||
; B = 0
|
||||
@ -602,13 +602,13 @@ RD_BPB: LD C,SLOT3
|
||||
JP Z,DOS_X_Error.UnknownBPB
|
||||
SBC HL,DE
|
||||
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!
|
||||
;[ ] fat32 reset fat32 variables
|
||||
LD HL,0
|
||||
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 DE,FatBuffer.MSG
|
||||
@ -627,34 +627,28 @@ RD_BPB: LD C,SLOT3
|
||||
JR Z,.loop6
|
||||
;
|
||||
CP '1'
|
||||
IF _FAT32_ENABLE
|
||||
JP Z,.fat1x
|
||||
;[ ] fat32
|
||||
CP '2'
|
||||
JP Z,.fat1x
|
||||
CP '3'
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
LD A,#46 ; #46-#26 = 32 fat type
|
||||
LD HL,#0FFF
|
||||
LD (FatBuffer.ENDCLUS_HIGH),HL
|
||||
LD (FAT_Max_Cluster_H),HL
|
||||
LD H,#FF
|
||||
LD (FatBuffer.MaxClusterHigh),HL
|
||||
LD H,L
|
||||
JR .BPB_FAT
|
||||
;
|
||||
ELSE
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
ENDIF
|
||||
;
|
||||
.fat1x: LD A,(HL)
|
||||
CP '6' ; FAT16
|
||||
LD HL,#FFFF
|
||||
JR Z,.BPB_FAT
|
||||
CP '2' ; FAT12
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
CP '2' ; FAT16
|
||||
LD HL,#0FFF
|
||||
JR Z,.BPB_FAT
|
||||
CP '6' ; FAT12
|
||||
JP NZ,DOS_X_Error.UnknownBPB
|
||||
LD H,L
|
||||
.BPB_FAT:
|
||||
SUB #26 ; A-#26 = fat type (12, 16, 32)
|
||||
LD (FatBuffer.FAT_TYPE),A
|
||||
LD (FatBuffer.ENDCLUS_LOW),HL
|
||||
|
||||
;!TODO ¥ ¨á¯®«ì§ã¥âáï § 票¥ ¢ëç¨á«ï¥¬®¥ ¨ á®åà 塞®¥ ¢ FatBuffer
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; LD HL,0
|
||||
@ -694,13 +688,13 @@ RD_BPB: LD C,SLOT3
|
||||
RR L
|
||||
JP .S4C01
|
||||
.S4C02: INC HL
|
||||
LD (FAT_Max_Cluster_L),HL
|
||||
LD (FatBuffer.MaxClusterLow),HL
|
||||
;
|
||||
XOR A
|
||||
LD H,A
|
||||
LD L,A
|
||||
LD (FatCache.Block),HL
|
||||
LD (FatCache.Update),A
|
||||
LD (FatBuffer.CacheBlock),HL
|
||||
LD (FatBuffer.CacheUpdated),A
|
||||
|
||||
SET_PAGE_X FATPAGE
|
||||
|
||||
@ -722,13 +716,13 @@ RD_BPB: LD C,SLOT3
|
||||
CP #F0
|
||||
JR C,DOS_X_Error.UnknownBPB
|
||||
; ID ram-¤¨áª - #FA
|
||||
CP #F8 ; !FIXIT ¥ ®¡ï§ â¥«ì® ¥á«¨ ¢¨â, â® ¥ FAT12
|
||||
LD A,'6'
|
||||
LD HL,#FFFF
|
||||
JP Z,.BPB_FAT
|
||||
;
|
||||
CP #F8 ; !FIXIT fat. ¥ ®¡ï§ â¥«ì® ¥á«¨ ¢¨â, â® ¥ FAT12
|
||||
LD A,'2'
|
||||
LD HL,#0FFF
|
||||
JP NZ,.BPB_FAT
|
||||
;
|
||||
LD A,'6'
|
||||
LD H,L
|
||||
JP .BPB_FAT
|
||||
;
|
||||
DOS_X_Error:
|
||||
@ -745,11 +739,14 @@ DOS_X_Error:
|
||||
;!TODO ª ¡ãä¥à ¬!
|
||||
FatBuffer:
|
||||
.MSG: DB 'FAT'
|
||||
.READ_PG: DB #00 ;!TODO ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||
.BLOCK: DB #00
|
||||
.DRIVE: DB #FF
|
||||
.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_H: DW #0000 ; [ ] fat32
|
||||
.DRIVE: DB #FF
|
||||
.FAT1_SEC_L: DW #0000 ; MSD_FAT_SEC first sector FAT (FAT_FRM)
|
||||
.FAT1_SEC_H: DW #0000 ; [ ] fat32
|
||||
.FAT2_SEC_L: DW #0000
|
||||
@ -757,20 +754,15 @@ FatBuffer:
|
||||
.RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ;!FIXIT ¥ ¨á¯®«ì§ã¥âáï
|
||||
.RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR
|
||||
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
|
||||
.DirSizeInSectros: DB #00 ; DIR_SEC_SIZE
|
||||
.DirSizeInSectors: DB #00 ; DIR_SEC_SIZE
|
||||
.FirstDataSector_L: DW #0000 ; MSD_DAT_SEC low
|
||||
.FirstDataSector_H: DW #0000 ; MSD_DAT_SEC high ; !TODO ®£à ¨ç¥¨¥ ¢ 32 ƒ¨£ ; [ ] fat32
|
||||
.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_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
|
||||
*/
|
||||
;
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,4 @@
|
||||
;!TODO ¯à¨¢¥á⨠ª ®¡é¥¬ã ¢¨¤ã ¢ ®¤ã ¨áâàãªæ¨î, ¯à®¢¥à¨âì ª®à४â®áâì
|
||||
;---------------------------------------------------------------
|
||||
;Rev Date Name Description
|
||||
;---------------------------------------------------------------
|
||||
@ -7,167 +8,167 @@
|
||||
;
|
||||
; Disk Driver Specification ver. 2.20
|
||||
;[]===========================================================[0]
|
||||
;Procedure : Initialization
|
||||
;Procedure: Initialization
|
||||
;
|
||||
;Function : Initialization device(s)
|
||||
;Function: Initialization device(s)
|
||||
;
|
||||
;Input : C = 00h
|
||||
; IX - Environment
|
||||
;Output : A = Amount drive support
|
||||
; HL = Size driver
|
||||
;Input: C = #00
|
||||
; IX = Environment
|
||||
;
|
||||
;Output: A = Amount drive support
|
||||
;[]===========================================================[0]
|
||||
|
||||
;[]===========================================================[1]
|
||||
;Procedure : Open
|
||||
;Procedure: Open
|
||||
;
|
||||
;Function : Open disk
|
||||
;Function: Open disk
|
||||
;
|
||||
;Input : C = 01h
|
||||
; A - Drive
|
||||
;Output : None
|
||||
;Input: C = #01
|
||||
; A = Drive
|
||||
;
|
||||
;Output: None
|
||||
;[]===========================================================[1]
|
||||
|
||||
;[]===========================================================[2]
|
||||
;Procedure : Close
|
||||
;Procedure: Close
|
||||
;
|
||||
;Function : Close disk
|
||||
;Function: Close disk
|
||||
;
|
||||
;Input : C = 02h
|
||||
; A - Drive
|
||||
;Output : None
|
||||
;Input: C = #02
|
||||
; A = Drive
|
||||
;
|
||||
;Output: None
|
||||
;[]===========================================================[2]
|
||||
|
||||
;[]===========================================================[3]
|
||||
;Procedure : Media check
|
||||
;Procedure: Media check
|
||||
;
|
||||
;Function : Checking change line
|
||||
;Function: Checking change line
|
||||
;
|
||||
;Input : C = 03h
|
||||
; A - Drive
|
||||
;Output : A = 00h disk no changed
|
||||
; A = 0FFh disk changed
|
||||
;Input: C = #03
|
||||
; A = Drive
|
||||
;
|
||||
;Output: A = #00 disk no changed
|
||||
; #FF disk changed
|
||||
;[]===========================================================[3]
|
||||
|
||||
;[]===========================================================[4]
|
||||
;Procedure : Get BPB
|
||||
;Procedure: Get BPB
|
||||
;
|
||||
;Function : Get Block Parameters BIOS
|
||||
;Function: Get Block Parameters BIOS
|
||||
;
|
||||
;Input : C = 04h
|
||||
; DE - Address
|
||||
;Output : None
|
||||
;Input: C = #04
|
||||
; A = Drive
|
||||
; DE = Address
|
||||
;
|
||||
;Output: None
|
||||
;[]===========================================================[4]
|
||||
|
||||
;[]===========================================================[5]
|
||||
;Procedure : Input
|
||||
;Procedure: Read
|
||||
;
|
||||
;Function : Input from disk
|
||||
;Function: Read from disk
|
||||
;
|
||||
;Input : C = 05h
|
||||
; HL:IX - Logical Block (sector)
|
||||
; DE - Address
|
||||
; B - Sector count
|
||||
;Output : None
|
||||
;Input: C = #05
|
||||
; HL:IX = Logical Block (sector)
|
||||
; DE = Address
|
||||
; B = Sector count
|
||||
; A = Drive
|
||||
;
|
||||
;Output: None
|
||||
;[]===========================================================[5]
|
||||
|
||||
;[]===========================================================[6]
|
||||
;Procedure : Output
|
||||
;Procedure: Write
|
||||
;
|
||||
;Function : Output to disk
|
||||
;Function: Write to disk
|
||||
;
|
||||
;Input : C = 06h
|
||||
; HL:IX - Logical Block (sector)
|
||||
; DE - Address
|
||||
; B - Sector count
|
||||
;Output : None
|
||||
;Input: C = #06
|
||||
; HL:IX = Logical Block (sector)
|
||||
; DE = Address
|
||||
; B = Sector count
|
||||
;
|
||||
;Output: None
|
||||
;[]===========================================================[6]
|
||||
|
||||
;[]===========================================================[7]
|
||||
;Procedure : Removable
|
||||
;Procedure: Removable
|
||||
;
|
||||
;Function : Checking change line
|
||||
;Function: Checking change line
|
||||
;
|
||||
;Input : C = 07h
|
||||
; A - Drive
|
||||
;Output : A = 00h Removable
|
||||
; A = FFh Nonremovable
|
||||
;Input: C = #07
|
||||
; A = Drive
|
||||
;
|
||||
;Output: A = #00 Removable
|
||||
; A = #FF Non-removable
|
||||
;[]===========================================================[7]
|
||||
|
||||
;[]===========================================================[8]
|
||||
;Procedure : Generic IOCTL
|
||||
;Procedure: Generic IOCTL
|
||||
;
|
||||
;Function : Generic Input Output Control
|
||||
;Function: Generic Input Output Control
|
||||
;
|
||||
;Input : C = 08h
|
||||
; B - Subcommand
|
||||
; DE = 55AAh Magic Number
|
||||
; Subcommand
|
||||
;----------------------
|
||||
; 00h - Get Device Parameters
|
||||
; 01h - Read track
|
||||
; 02h - Test track
|
||||
; 80h - Set Device Parameters
|
||||
; 81h - Write track
|
||||
; 82h - Format track
|
||||
;Output :
|
||||
;Input: C = #08
|
||||
; B = Subcommand
|
||||
; DE = #55AA Magic Number
|
||||
;
|
||||
;Subcommands: #00 - Get Device Parameters
|
||||
; #01 - Read track
|
||||
; #02 - Test track
|
||||
; #80 - Set Device Parameters
|
||||
; #81 - Write track
|
||||
; #82 - Format track
|
||||
;Output:
|
||||
;[]===========================================================[8]
|
||||
|
||||
;[]===========================================================[9]
|
||||
;Procedure : Read Long
|
||||
;Procedure: Read Long
|
||||
;
|
||||
;Function : Reading sectors from disk
|
||||
;Function: Reading sectors from disk
|
||||
;
|
||||
;Input : C = 0Ah
|
||||
; HL:IX - Logical Block (sector)
|
||||
; DE - Address
|
||||
; B - Sector count
|
||||
; A'- Page
|
||||
;Output : A'- Next Page
|
||||
; HL:IX - Next Logical Block (sector)
|
||||
; DE - Next Address
|
||||
;Input: C = #0A
|
||||
; HL:IX = Logical Block (sector)
|
||||
; DE = Address
|
||||
; B = Sector count
|
||||
; A' = Page
|
||||
;
|
||||
;Output: A' = Next Page
|
||||
; HL:IX = Next Logical Block (sector)
|
||||
; DE = Next Address
|
||||
;[]===========================================================[9]
|
||||
|
||||
;[]===========================================================[10]
|
||||
;Procedure : Write Long
|
||||
;Procedure: Write Long
|
||||
;
|
||||
;Function : Writing sectors to disk
|
||||
;Function: Writing sectors to disk
|
||||
;
|
||||
;Input : C = 0Bh
|
||||
; HL:IX - Logical Block (sector)
|
||||
; DE - Address
|
||||
; B - Sector count
|
||||
; A'- Page
|
||||
;Output : A'- Next Page
|
||||
; HL:IX - Next Logical Block (sector)
|
||||
; DE - Next Address
|
||||
;Input: C = #0B
|
||||
; HL:IX = Logical Block (sector)
|
||||
; DE = Address
|
||||
; B = Sector count
|
||||
; A' = Page
|
||||
;
|
||||
;Output: A' = Next Page
|
||||
; HL:IX = Next Logical Block (sector)
|
||||
; DE = Next Address
|
||||
;[]===========================================================[10]
|
||||
|
||||
;
|
||||
; Errors:
|
||||
; 0 (00h) - NO ERRORS
|
||||
; 1 (01h) - BAD COMMAND
|
||||
; 2 (02h) - BAD DRIVE NUMBER
|
||||
; 3 (03h) - UNKNOW FORMAT
|
||||
; 4 (04h) - NOT READY
|
||||
; 5 (05h) - SEEK ERROR
|
||||
; 6 (06h) - SECTOR NOT FOUND
|
||||
; 7 (07h) - CRC ERROR
|
||||
; 8 (08h) - WRITE PROTECT
|
||||
; 9 (09h) - READ ERROR
|
||||
; 10 (0Ah) - WRITE ERROR
|
||||
; 11 (0Bh) - FAILURE
|
||||
; 12 (0Ch) - BUSY (DEVICE OPENED)
|
||||
; 13 (0Dh) - RESERVED
|
||||
; 0 (#00) - NO ERRORS
|
||||
; 1 (#01) - BAD COMMAND
|
||||
; 2 (#02) - BAD DRIVE NUMBER
|
||||
; 3 (#03) - UNKNOW FORMAT
|
||||
; 4 (#04) - NOT READY
|
||||
; 5 (#05) - SEEK ERROR
|
||||
; 6 (#06) - SECTOR NOT FOUND
|
||||
; 7 (#07) - CRC ERROR
|
||||
; 8 (#08) - WRITE PROTECT
|
||||
; 9 (#09) - READ ERROR
|
||||
; 10 (#0A) - WRITE ERROR
|
||||
; 11 (#0B) - FAILURE
|
||||
; 12 (#0C) - BUSY (DEVICE OPENED)
|
||||
; 13 (#0D) - RESERVED
|
||||
|
||||
; IDE0 EQU #0C1C0
|
||||
; IDE1 EQU #0C1C8
|
||||
@ -286,7 +287,7 @@ SELHDD: PUSH DE
|
||||
;
|
||||
LD L,A
|
||||
LOGDRV_ENTRY_FIND LOGDRV
|
||||
;
|
||||
; !HARDCODE
|
||||
LD C,(IY+1)
|
||||
LD B,(IY+2)
|
||||
LD E,(IY+3)
|
||||
@ -431,14 +432,14 @@ CHEK_H: ;LD A,#FF
|
||||
RET
|
||||
|
||||
|
||||
;HL:IX - SECTOR
|
||||
; DE - ADDRESS
|
||||
; A - DRIVE
|
||||
GBPB_H: PUSH IY
|
||||
PUSH DE
|
||||
LD L,A
|
||||
;
|
||||
LOGDRV_ENTRY_FIND LOGDRV
|
||||
;
|
||||
; !HARDCODE
|
||||
LD E,(IY+1)
|
||||
LD D,(IY+2)
|
||||
LD L,(IY+3)
|
||||
@ -469,7 +470,7 @@ LREADH: PUSH IY
|
||||
; DE - ADDRESS
|
||||
; B - COUNTER
|
||||
; A'- PAGE
|
||||
; A - HDD NUMBER +#80
|
||||
; A - HDD LOG NUMBER
|
||||
;WRITE SECTOR
|
||||
LWRITEH:
|
||||
PUSH IY
|
||||
@ -482,7 +483,7 @@ LWRITEH:
|
||||
;HL:IX - SECTOR
|
||||
; DE - ADDRESS
|
||||
; B - COUNTER
|
||||
; A - HDD NUMBER +#80
|
||||
; A - HDD LOG NUMBER
|
||||
;WRITE SECTOR
|
||||
WRITEH: PUSH IY
|
||||
CALL SELHDD
|
||||
@ -494,7 +495,7 @@ WRITEH: PUSH IY
|
||||
;HL:IX - SECTOR
|
||||
; DE - ADDRESS
|
||||
; B - COUNTER
|
||||
; A - HDD NUMBER +#80
|
||||
; A - HDD LOG NUMBER
|
||||
;READ SECTOR
|
||||
READH: PUSH IY
|
||||
CALL SELHDD
|
||||
@ -506,7 +507,7 @@ READH: PUSH IY
|
||||
;HL:IX - SECTOR
|
||||
; DE - ADDRESS
|
||||
; B - COUNTER
|
||||
; A - HDD NUMBER +#80
|
||||
; A - HDD LOG NUMBER
|
||||
;CHECK SECTOR
|
||||
CHECKH: PUSH IY
|
||||
CALL SELHDD
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
|
||||
|
||||
; DISK DRIVER SPECIFICATION
|
||||
; !FIXIT ⑤<>玻オ皚<E382AA><E79A9A>!
|
||||
;---------------------------------------------
|
||||
; COMMAND 00h (INITIALIZATION)
|
||||
;
|
||||
|
||||
@ -1 +1 @@
|
||||
945
|
||||
955
|
||||
@ -66,7 +66,7 @@ FAT_CACHE:
|
||||
; for FAT32
|
||||
.Size_32 EQU #4000
|
||||
.Sectors_32 EQU .Size_32 / .Sector_Size ; #20
|
||||
.Degree_32 EQU .Degree
|
||||
.Degree_32 EQU 5
|
||||
.Size_Mask_32 EQU #0F
|
||||
.Part_Mask_32 EQU #0F
|
||||
.bytes_record_32 EQU 2
|
||||
|
||||
Loading…
Reference in New Issue
Block a user