READ_FAT_TABLE, GET_FAT32_CELL

This commit is contained in:
Anatoliy Belyanskiy 2024-03-23 04:07:31 +10:00
parent 87c74c1ee7
commit 1f66e8af24
6 changed files with 261 additions and 143 deletions

View File

@ -227,8 +227,6 @@ PORTAL.out_MAIN: ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
;
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
;
;R01
; Area for boot sector BootSector.
@ -236,61 +234,12 @@ PORTAL.out_MAIN: ;
; end boot sector
;R01
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  VERSION
F_START: DI
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
;LD (.saveDRV),A
LD H,A
LD (.saveDRV),HL ; H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
;
;R12
LD C,BIOS.DRV_VERSION
RST ToBIOS
JR C,.err_oldBIOS
EX DE,HL
LD DE,MINIMUM_BIOS_VERSION
SBC HL,DE
JR NC,.good
LD A,(.saveDRV+1)
CP 2 ;¯à®¢¥àª  ­  § £à㧪ã á ¤¨áª¥âë, ¥á«¨ á ¤¨áª¥âë, â® ¬®¦­® ¯à®¨£­®à¨âì § ¯ã᪠­  BIOS ­¨¦¥ 2.55
JR NC,.err_oldBIOS
LD HL,#C9AF ; XOR A : RET opcodes
LD (DRV_CONTENT + INITDVC.if_old),HL ;!!!!!!
;
.good: CALL DEPLOY ;R07 ;íâ  ¯à®æ¥¤ãà  § âàñâáï ¯®á«¥ ¨á¯®«­¥­¨ï
RET C ;R10
CALL KEYBOARD_INIT
CALL PRINT_INIT
LD C,Dss.Mouse.Init
RST ToDSS.Mouse
LD A,(VMODE)
LD C,Dss.Mouse.SetVideoMode
RST ToDSS.Mouse
;CALL INITDVC ;R05
;R05
LD C,Dss.DRV.Init
RST ToDSS.DRV
LD (LDRIVE),A
;R05
.saveDRV+1:
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD HL,0 ; H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
;LD A,H
;LD A,0
;
LD B,1
CALL BOOTDSK
RET C
;
EI
;Set new address fn. VERSION
LD HL,ADRST10
LD (HL),low VERSION ;R03
INC H
LD (HL),high VERSION ;R03
CLEAR_BUFFER_AND_INIT_PROC:
;------[CLEAR BUFFERS]------;
;R07 ;R11
LD HL,CLEAR_ZONE.start
@ -304,7 +253,6 @@ F_START: DI
LD (HL),'.'
;R11
;---------------------------;
;R02
;LD B,#FF ;INIT ENVIRONMENT
CALL INITENV
@ -314,17 +262,6 @@ F_START: DI
;R02
JP VERSION
;R12
.err_oldBIOS:
LD HL,.err_oldBIOS_message
;LD C,Dss.PChars
;RST ToDSS
CALL PCHARS
SCF
RET
.err_oldBIOS_message:
DZ "\r\nWARNING! This version of DSS requires BIOS v2.55 or later to boot from IDE."
;
;R03
;R07Allocate memory
@ -524,9 +461,76 @@ SECBUF EQU BUFFER
;
;|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||;
; !!!!! íâ  ¯à®æ¥¤ãà  § âàñâáï ¯®á«¥ ¨á¯®«­¥­¨ï
; <20>¥à¢ë© áâ àâ á¨á⥬ë, ¯®á«¥ ¨­¨æ¨ «¨§ æ¨¨  ¤à¥á ¢ â ¡«¨æ¥ ¬¥­ï¥âáï ­  VERSION
F_START: DI
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
;LD (.saveDRV),A
LD H,A
LD (.saveDRV),HL ; H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
;
;R12
LD C,BIOS.DRV_VERSION
RST ToBIOS
JR C,.err_oldBIOS
EX DE,HL
LD DE,MINIMUM_BIOS_VERSION
SBC HL,DE
JR NC,.good
LD A,(.saveDRV+1)
CP 2 ;¯à®¢¥àª  ­  § £à㧪ã á ¤¨áª¥âë, ¥á«¨ á ¤¨áª¥âë, â® ¬®¦­® ¯à®¨£­®à¨âì § ¯ã᪠­  BIOS ­¨¦¥ 2.55
JR NC,.err_oldBIOS
LD HL,#C9AF ; XOR A : RET opcodes
LD (DRV_CONTENT + INITDVC.if_old),HL ;!!!!!!
;
.good: CALL DEPLOY ;R07 ;íâ  ¯à®æ¥¤ãà  § âàñâáï ¯®á«¥ ¨á¯®«­¥­¨ï
RET C ;R10
CALL KEYBOARD_INIT
CALL PRINT_INIT
LD C,Dss.Mouse.Init
RST ToDSS.Mouse
LD A,(VMODE)
LD C,Dss.Mouse.SetVideoMode
RST ToDSS.Mouse
;CALL INITDVC ;R05
;R05
LD C,Dss.DRV.Init
RST ToDSS.DRV
LD (LDRIVE),A
;R05
.saveDRV+1:
;[ ] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD HL,0 ; H - ­®¬¥à ãáâனá⢠, L - ­®¬¥à à §¤¥«  ­  ãáâனá⢥
;LD A,H
;LD A,0
;
LD B,1
CALL BOOTDSK
RET C
;
EI
;Set new address fn. VERSION
LD HL,ADRST10
LD (HL),low VERSION ;R03
INC H
LD (HL),high VERSION ;R03
JP CLEAR_BUFFER_AND_INIT_PROC
;
;R12
.err_oldBIOS:
LD HL,.err_oldBIOS_message
;LD C,Dss.PChars
;RST ToDSS
CALL PCHARS
SCF
RET
.err_oldBIOS_message:
DZ "\r\nWARNING! This version of DSS requires BIOS v2.55 or later to boot from IDE."
;
DEPLOY: ;Allocate memory
LD BC,USING_MEMPAGES*256 + BIOS.GetMem
RST ToBIOS

View File

@ -526,8 +526,13 @@ RD_BPB: LD C,SLOT3
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
; ADD HL,DE
;
LD (FatBuffer.FAT1_SEC_L),HL ; first sector FAT #1
LD (FatBuffer.FAT2_SEC_L),HL ; first sector FAT #2
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
LD (FatBuffer.FAT2_SEC_L),HL ; low word first sector FAT #2
;[ ] fat32 ;!FIXIT
LD DE,0
LD (FatBuffer.FAT1_SEC_H),DE ; high word first sector FAT #1
LD (FatBuffer.FAT2_SEC_H),DE ; high word first sector FAT #1
;
;
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16)
LD A,(CORE_BUFFERS.BootSector.Number_of_FATs) ; amount FATs

View File

@ -29,7 +29,7 @@ G_CLUST:
; [x] fat32
IF _FAT32_ENABLE
LD A,(FatBuffer.FAT_TYPE)
XOR 32
XOR FAT_TYPE.x32
CALL Z,SET_FAT32.CHECK_INC_HIGH_CLUSTER
ENDIF
;
@ -73,22 +73,22 @@ INC_FAT:
RET
;RX01
;-----------------------------------------------------------
;------------------------------------------------------------------------------------------------
; <20>à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
; ¢å®¤: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
; hl' - ­®¬¥à  ª« áâ¥à  (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32)
; ¢ë室: hl - ­®¬¥à ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
; hl' - ­®¬¥à  ª« áâ¥à  (áâ à襥 á«®¢®)
; de - ­ŽŹĽŕ ፼¤. ŞŤ áâĽŕ  (ŹŤ ¤čĽĽ ፎ˘Ž. ĽáŤ¨ 0, âŽ ŞŤ áâĽŕ hl ᢎĄŽ¤Ľ­)
; de' - ­ŽŹĽŕ ፼¤. ŞŤ áâĽŕ  (áâ ŕ輼 ፎ˘Ž. ĽáŤ¨ 0, âŽ ŞŤ áâĽŕ hl' ᢎĄŽ¤Ľ­)
; de - ­®¬¥à á«¥¤. ª« áâ¥à  (¬« ¤è¥¥ á«®¢®)
; de' - ­®¬¥à á«¥¤. ª« áâ¥à  (áâ à襥 á«®¢®)
; ¥á«¨ DE':DE = 0, â® ª« áâ¥à HL':HL ᢮¡®¤¥­
; CF - ª®­¥æ 楯®çª¨
;!FIXIT ¤ ŤĽĽ § âŽçŞ  ­  âŽ, ç⎠˘ DE ˘áĽŁ¤  0 - ä ŠŤ ­Ľ ĄŽŤěčĽ 2Gb
;-----------------------------------------------------------
;[ ] fat32
;------------------------------------------------------------------------------------------------
;[x] fat32 ;!TEST
READ_FROM_FAT:
;[x] fat32
LD A,(FatBuffer.FAT_TYPE)
XOR 32
XOR FAT_TYPE.x32
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
; ¯à®¢¥à塞 áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
; !FIXIT fat32 ¯à®¢¥àïâì ®¡  á«®¢  FAT_Max_Cluster
@ -101,7 +101,7 @@ READ_FROM_FAT:
EXX
LD A,DSS_Error.sys.DISK_FULL
RET C
JP NZ,.correct_cluster ; ĽáŤ¨ FAT_Max_Cluster_H - IX != 0, âŽ ŞŤ áâĽŕ ŞŽŕ༪â­ëŠ
JP NZ,.correct_cluster ; ¥á«¨ FAT_Max_Cluster_H - hl' != 0, â® ª« áâ¥à ª®à४â­ë©
;
; ¯à®¢¥à塞 ¬« ¤è¥ á«®¢® ­®¬¥à  ª« áâ¥à 
.low: EX DE,HL
@ -118,7 +118,7 @@ READ_FROM_FAT:
PUSH HL
PUSH AF
LD A,(FatBuffer.FAT_TYPE)
CP 16 ; fat16
CP FAT_TYPE.x16
JR C,.FAT12
JR NZ,.FAT32
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ­®¬¥à
@ -127,11 +127,13 @@ READ_FROM_FAT:
INC HL
LD D,(HL)
;
POP AF
LD HL,SERVICE_SECTORS.FAT16
.exit: POP AF
OUT (SLOT3),A
LD HL,#FFEF ;!HARDCODE
.exit: XOR A ; ŽĄ­ăŤďĽŹ CF ¨ ăáâ ­ ˘Ť¨˘ ĽŹ ŞŽ¤ Žč¨ĄŞ¨ = DssErr.sys.NO_ERROR
SBC HL,DE ; ŻŕŽ˘ĽŕŞ  ­  áŤăŚ. ŞŤ áâĽŕë
; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR
XOR A
; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë
SBC HL,DE
POP HL
; [x] fat32
EXX
@ -146,12 +148,8 @@ READ_FROM_FAT:
LD E,(HL)
INC HL
LD D,(HL)
JR C,.Correct_1
LD A,D
AND #0F
LD D,A
JR .Correct_2
;
LD HL,SERVICE_SECTORS.FAT12
JR NC,.Correct_2
.Correct_1:
LD A,E
AND #F0
@ -160,23 +158,60 @@ READ_FROM_FAT:
RRA
EDUP
LD E,A
.Correct_2:
POP AF
OUT (SLOT3),A
LD HL,#0FEF
JR .exit
;
.FAT32: ; [ ] fat32
.Correct_2
LD A,D
AND #0F
LD D,A
JR .exit
;
.FAT32: ; [x] fat32 ;!TEST
EXX
PUSH HL
EXX
;
CALL GET_FAT32_CELL
DI
HALT
; ¯à®ç¨â âì ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à 
LD E,(HL)
INC HL
LD D,(HL)
INC HL
; ¯à®ç¨â âì áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à 
LD A,(HL)
INC HL
EX AF,AF'
LD A,(HL)
EXX
AND #0F
LD D,A
EX AF,AF'
LD E,A
EXX
; ®¡­ã«ï¥¬ CF ¨ ãáâ ­ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR
XOR A
; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë ¬« ¤è¥£® á«®¢  ª« áâ¥à 
LD HL,SERVICE_SECTORS.FAT32.Low
SBC HL,DE
; ¯à®¢¥àª  ­  á«ã¦. ª« áâ¥àë áâ à襣® á«®¢  ª« áâ¥à 
EXX
LD HL,SERVICE_SECTORS.FAT32.High
SBC HL,DE
POP HL
EXX
;
POP BC
LD A,B
OUT (SLOT3),A
RET
;-----------------------------------------------------------
;------------------------------------------------------------------------------------------------
; ‡ ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
; ˘ĺޤ: hl = ­ŽŹĽŕ ŞŤ áâĽŕ  ˘ ŞŽâŽŕëŠ § Ż¨á âě
; de = ­ŽŹĽŕ ŞŤ áâĽŕ  ŞŽâŽŕëŠ ˘Ż¨á âě
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì
; hl' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ¢ ª®â®àë© § ¯¨á âì (⮫쪮 ¤«ï fat32)
; de = ¬« ¤è¥¥ á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì
; de' = áâ à襥 á«®¢® ­®¬¥à  ª« áâ¥à  ª®â®à®¥ ¢¯¨á âì (⮫쪮 ¤«ï fat32)
; ¢ë室: â ª®© ¦¥ ª ª ¨ ¢å®¤
;-----------------------------------------------------------
;------------------------------------------------------------------------------------------------
; [ ] fat32
WRITE_TO_FAT:
PUSH DE
@ -193,22 +228,22 @@ WRITE_TO_FAT:
EXX
PUSH HL
PUSH AF
PUSH DE ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
;LD A,1
;LD (FatCache.Update),A
;
LD A,(FatBuffer.FAT_TYPE)
CP 16 ; fat16
CP FAT_TYPE.x16
JR C,.FAT12
JR NZ,.FAT32
;
.FAT16: PUSH DE
CALL GET_FAT16_CELL
POP DE
.FAT16: CALL GET_FAT16_CELL
POP DE ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT- 
INC HL ; ­®¬¥à ª« áâ¥à 
LD (HL),D
POP AF ; ˘Žááâ. ŻŽŕâ
.exit: POP AF ; ¢®ááâ. ¯®àâ
POP HL
OUT (SLOT3),A
; [x] 2/12/23 FAT ­¥ ¢á¥£¤  ¬®£ § ¯¨á âìáï ­  HDD
@ -219,9 +254,8 @@ WRITE_TO_FAT:
RET
;
.FAT12: ;!FIXIT ¯¥à¥¤¥« âì ­  ¯¥à¥¬¥­­ë¥ FAT_CACHE
PUSH DE
CALL GET_FAT12_CELL
POP DE
POP DE ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
JR C,.Correct_1 ; ­®¬¥à ­¥çñâ­ë©
LD (HL),E
INC HL
@ -229,15 +263,8 @@ WRITE_TO_FAT:
AND #F0
OR D
LD (HL),A
POP AF
POP HL
OUT (SLOT3),A
; [x] 2/12/23 FAT ­Ľ ˘áĽŁ¤  ŹŽŁ § Ż¨á âěáď ­  HDD
XOR A
INC A
LD (FatCache.Update),A
; CF = 0
RET
JR .exit
;
.Correct_1:
; ¢«¥¢® ­  4 ¡¨âa
EX DE,HL
@ -267,15 +294,22 @@ WRITE_TO_FAT:
; CF = 0
RET
.FAT32: ; [ ] fat32
CALL GET_FAT32_CELL
POP DE ; de = ­®¬¥à ª« áâ¥à  ª®â®àë© ¢¯¨á âì
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT- 
INC HL ; ­®¬¥à ª« áâ¥à 
LD (HL),D
DI
HALT
;RE_FAT:
;RX01
; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT- 
; [ ] fat32
//; A - NEW FAT BLOCK
; [ ] fat32 ;!TEST
; DE - NEW FAT BLOCK
;
READ_FAT_TABLE:
PUSH HL
; [x] fat32
@ -297,24 +331,29 @@ READ_FAT_TABLE:
EX DE,HL
;
LD (FatCache.Block),HL
LD (FatCache.Update),A
;LD (FatCache.Update),A
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
DUP FAT_CACHE.Degree_16
DUP FAT_CACHE.Degree ; 4
ADD HL,HL ;x2
EDUP
LD DE,(FatBuffer.FAT1_SEC_L)
; ­®¬¥à «®£. ᥪâ®à 
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
LD DE,FATPAGE.cache ; Şă¤  ; DE - FAT ADDRESS
LD HL,(FatBuffer.FAT1_SEC_H)
LD DE,0
ADC HL,DE
; HL:IX - SECTOR FAT FOR READING
LD B,FAT_CACHE.Sectors_16
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
JR NZ,.nxt
LD B,FAT_CACHE.Sectors_32
.nxt: 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
LD C,Dss.DRV.Read ;ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
RST ToDSS.DRV
POP HL
RET
@ -333,13 +372,13 @@ WRITE_FAT_TABLE:
;
;LD H,0
;FAT BLOCK * 16 = SECTOR OF FAT
DUP FAT_CACHE.Degree_16
DUP FAT_CACHE.Degree
ADD HL,HL ;x2
EDUP
; HL - ­®¬¥à «®£. ᥪâ®à 
LD B,H
LD C,L ;BC - BLOCK OF FAT
LD DE,FAT_CACHE.Sectors
LD DE,FAT_CACHE.Sectors_16
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ ­  FAT
@ -347,7 +386,7 @@ WRITE_FAT_TABLE:
SBC HL,DE
JR C,.WALLFAT
EX DE,HL
LD HL,FAT_CACHE.Sectors
LD HL,FAT_CACHE.Sectors_16
; CF = 0
SBC HL,DE
JR C,.ERR
@ -499,7 +538,7 @@ GET_FAT12_CELL:
PUSH AF ; á®åà. ä« £
ADD HL,DE ; CLUSTER * 1.5
;
IF FAT_CACHE.Size < #2000
IF FAT_CACHE.Size_12 < #2000
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
LD A,H
LD B,H
@ -1093,8 +1132,8 @@ SaveGotCluster: LD A,C
FatCache: ;WORD #0000
.Block WORD #0000 ;EQU FatCache
.Update BYTE 0 ;EQU FatCache+1
.Block WORD #0000
.Update BYTE 0
FAT_Max_Cluster_L: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
FAT_Max_Cluster_H: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)

View File

@ -32,12 +32,47 @@ CHECK_INC_HIGH_CLUSTER:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;-----------------------------------------------------------------------
;¢å®¤: DE:HL - ­®¬¥à ª« áâ¥à 
;¢å®¤: HL':HL - ­®¬¥à ª« áâ¥à 
;¢ë室: HL -  ¤à¥á ­ã¦­®© ï祩ª¨ ¢ áâà ­¨æ¥ FATPAGE
;
;[x] fat32 ;!TEST
GET_FAT32_CELL:
;[ ] fat32
DI
HALT
; ¤¢¨£ ¥¬ ¢«¥¢® 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

View File

@ -1 +1 @@
946
945

View File

@ -21,6 +21,17 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
DEFINE _FAT32_ENABLE 1 ;!TODO ¯®ª  ­¥¤®¤¥« ­®
SERVICE_SECTORS:
.FAT12 EQU #0FEF
.FAT16 EQU #FFEF
.FAT32.High EQU #0FFF
.FAT32.Low EQU #FFEF
FAT_TYPE:
.x32 EQU 32
.x16 EQU 16
.x12 EQU 12
/*
define _bit (1<?((FAT_CACHE.Sectors-1)
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
;
@ -48,6 +59,30 @@ FAT_CACHE:
DISPLAY "Part_Mask_12 = ",/H,.Part_Mask_12
undefine _bit
undefine _shift
*/
FAT_CACHE:
.Sector_Size EQU #200
.Degree EQU 4
; for FAT32
.Size_32 EQU #4000
.Sectors_32 EQU .Size_32 / .Sector_Size ; #20
.Degree_32 EQU .Degree
.Size_Mask_32 EQU #0F
.Part_Mask_32 EQU #0F
.bytes_record_32 EQU 2
; for FAT16
.Size_16 EQU #2000
.Sectors_16 EQU .Size_16 / .Sector_Size ; #10
.Degree_16 EQU .Degree
.Size_Mask_16 EQU #0F
.Part_Mask_16 EQU #0F
.bytes_record_16 EQU 2
; for FAT12 ;!TODO
.Size_12 EQU #2000
;.bytes_record_12 EQU 2
;.Degree_12 EQU _shift
;.Size_Mask_12 EQU high (.Size/.bytes_record_12 - 1)
;.Part_Mask_12 EQU ((1<<(.bytes_record_12*8)) / (.Size/2))-1
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
;
DSS_MAX_DRIVES_AMOUNT EQU 26