mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
158 lines
3.2 KiB
NASM
158 lines
3.2 KiB
NASM
;!TODO fat32
|
||
;=======================================================================
|
||
;BPB
|
||
;LD (FatBuffer.FAT2_SEC_L),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
|
||
|
||
; 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
|
||
*/
|
||
|
||
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
|
||
*/
|
||
; |