Estex-DSS/DSS/FS/FAT/FAT32.asm
Anatoliy Belyanskiy 0312779217 Preparing for FAT32
2024-03-12 03:51:04 +10:00

138 lines
2.9 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;!TODO fat32
;=======================================================================
;BPB
;LD (FatBuffer.FAT2_XX),HL
;LD (FatBuffer.DIR_FRL),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
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;¢å®¤: DE:HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
GET_FAT32_CELL:
;[ ] fat32
DI
HALT
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) ; 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
*/
;