mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-16 01:41:17 +03:00
READ_FAT_TABLE, GET_FAT32_CELL
This commit is contained in:
parent
87c74c1ee7
commit
1f66e8af24
140
DSS/DSS-MAIN.ASM
140
DSS/DSS-MAIN.ASM
@ -227,8 +227,6 @@ PORTAL.out_MAIN: ;
|
|||||||
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';
|
||||||
;
|
;
|
||||||
|
|
||||||
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
|
|
||||||
;
|
|
||||||
|
|
||||||
;R01
|
;R01
|
||||||
; Area for boot sector BootSector.
|
; Area for boot sector BootSector.
|
||||||
@ -236,61 +234,12 @@ PORTAL.out_MAIN: ;
|
|||||||
; end boot sector
|
; end boot sector
|
||||||
;R01
|
;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]------;
|
;------[CLEAR BUFFERS]------;
|
||||||
;R07 ;R11
|
;R07 ;R11
|
||||||
LD HL,CLEAR_ZONE.start
|
LD HL,CLEAR_ZONE.start
|
||||||
@ -304,7 +253,6 @@ F_START: DI
|
|||||||
LD (HL),'.'
|
LD (HL),'.'
|
||||||
;R11
|
;R11
|
||||||
;---------------------------;
|
;---------------------------;
|
||||||
|
|
||||||
;R02
|
;R02
|
||||||
;LD B,#FF ;INIT ENVIRONMENT
|
;LD B,#FF ;INIT ENVIRONMENT
|
||||||
CALL INITENV
|
CALL INITENV
|
||||||
@ -314,17 +262,6 @@ F_START: DI
|
|||||||
;R02
|
;R02
|
||||||
JP VERSION
|
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
|
;R03
|
||||||
;R07Allocate memory
|
;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
|
DEPLOY: ;Allocate memory
|
||||||
LD BC,USING_MEMPAGES*256 + BIOS.GetMem
|
LD BC,USING_MEMPAGES*256 + BIOS.GetMem
|
||||||
RST ToBIOS
|
RST ToBIOS
|
||||||
|
|||||||
@ -526,8 +526,13 @@ RD_BPB: LD C,SLOT3
|
|||||||
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
; LD D,(IY+_sBOOT_SECTOR_PARAMS.HIDDEN+1)
|
||||||
; ADD HL,DE
|
; ADD HL,DE
|
||||||
;
|
;
|
||||||
LD (FatBuffer.FAT1_SEC_L),HL ; first sector FAT #1
|
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
|
||||||
LD (FatBuffer.FAT2_SEC_L),HL ; first sector FAT #2
|
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 DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16)
|
||||||
LD A,(CORE_BUFFERS.BootSector.Number_of_FATs) ; amount FATs
|
LD A,(CORE_BUFFERS.BootSector.Number_of_FATs) ; amount FATs
|
||||||
|
|||||||
@ -29,7 +29,7 @@ G_CLUST:
|
|||||||
; [x] fat32
|
; [x] fat32
|
||||||
IF _FAT32_ENABLE
|
IF _FAT32_ENABLE
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(FatBuffer.FAT_TYPE)
|
||||||
XOR 32
|
XOR FAT_TYPE.x32
|
||||||
CALL Z,SET_FAT32.CHECK_INC_HIGH_CLUSTER
|
CALL Z,SET_FAT32.CHECK_INC_HIGH_CLUSTER
|
||||||
ENDIF
|
ENDIF
|
||||||
;
|
;
|
||||||
@ -73,22 +73,22 @@ INC_FAT:
|
|||||||
RET
|
RET
|
||||||
;RX01
|
;RX01
|
||||||
|
|
||||||
;-----------------------------------------------------------
|
;------------------------------------------------------------------------------------------------
|
||||||
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
; <20>à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
; ¢å®¤: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
; ¢å®¤: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
||||||
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32)
|
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®. ⮫쪮 ¤«ï FAT32)
|
||||||
; ¢ë室: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
; ¢ë室: hl - ®¬¥à ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
||||||
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®)
|
; hl' - ®¬¥à ª« áâ¥à (áâ à襥 á«®¢®)
|
||||||
; de - ŽŹĽŕ ፼¤. ŞŤ áâĽŕ (ŹŤ ¤čĽĽ ፎ˘Ž. ĽáŤ¨ 0, âŽ ŞŤ áâĽŕ hl ᢎĄŽ¤Ľ)
|
; de - ®¬¥à á«¥¤. ª« áâ¥à (¬« ¤è¥¥ á«®¢®)
|
||||||
; de' - ŽŹĽŕ ፼¤. ŞŤ áâĽŕ (áâ ŕ輼 ፎ˘Ž. ĽáŤ¨ 0, âŽ ŞŤ áâĽŕ hl' ᢎĄŽ¤Ľ)
|
; de' - ®¬¥à á«¥¤. ª« áâ¥à (áâ à襥 á«®¢®)
|
||||||
|
; ¥á«¨ DE':DE = 0, â® ª« áâ¥à HL':HL ᢮¡®¤¥
|
||||||
; CF - ª®¥æ 楯®çª¨
|
; CF - ª®¥æ 楯®çª¨
|
||||||
;!FIXIT ¤ ŤĽĽ § âŽçŞ âŽ, ç⎠˘ DE ˘áĽŁ¤ 0 - ä ŠŤ Ľ ĄŽŤěčĽ 2Gb
|
;------------------------------------------------------------------------------------------------
|
||||||
;-----------------------------------------------------------
|
;[x] fat32 ;!TEST
|
||||||
;[ ] fat32
|
|
||||||
READ_FROM_FAT:
|
READ_FROM_FAT:
|
||||||
;[x] fat32
|
;[x] fat32
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(FatBuffer.FAT_TYPE)
|
||||||
XOR 32
|
XOR FAT_TYPE.x32
|
||||||
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
JR NZ,.low ; Z=0 ¯à®¢¥à塞 ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à
|
||||||
; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
; ¯à®¢¥à塞 áâ à襥 á«®¢® ®¬¥à ª« áâ¥à
|
||||||
; !FIXIT fat32 ¯à®¢¥àïâì ®¡ á«®¢ FAT_Max_Cluster
|
; !FIXIT fat32 ¯à®¢¥àïâì ®¡ á«®¢ FAT_Max_Cluster
|
||||||
@ -101,7 +101,7 @@ READ_FROM_FAT:
|
|||||||
EXX
|
EXX
|
||||||
LD A,DSS_Error.sys.DISK_FULL
|
LD A,DSS_Error.sys.DISK_FULL
|
||||||
RET C
|
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
|
.low: EX DE,HL
|
||||||
@ -118,7 +118,7 @@ READ_FROM_FAT:
|
|||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(FatBuffer.FAT_TYPE)
|
||||||
CP 16 ; fat16
|
CP FAT_TYPE.x16
|
||||||
JR C,.FAT12
|
JR C,.FAT12
|
||||||
JR NZ,.FAT32
|
JR NZ,.FAT32
|
||||||
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ®¬¥à
|
; fat16, ¯à®áâ® ç¨â âì á«¥¤. ®¬¥à
|
||||||
@ -127,11 +127,13 @@ READ_FROM_FAT:
|
|||||||
INC HL
|
INC HL
|
||||||
LD D,(HL)
|
LD D,(HL)
|
||||||
;
|
;
|
||||||
POP AF
|
LD HL,SERVICE_SECTORS.FAT16
|
||||||
|
.exit: POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD HL,#FFEF ;!HARDCODE
|
; ®¡ã«ï¥¬ CF ¨ ãáâ ¢«¨¢ ¥¬ ª®¤ ®è¨¡ª¨ = DssErr.sys.NO_ERROR
|
||||||
.exit: XOR A ; ŽĄăŤďĽŹ CF ¨ ăáâ ˘Ť¨˘ ĽŹ ŞŽ¤ Žč¨ĄŞ¨ = DssErr.sys.NO_ERROR
|
XOR A
|
||||||
SBC HL,DE ; ŻŕŽ˘ĽŕŞ áŤăŚ. ŞŤ áâĽŕë
|
; ¯à®¢¥àª á«ã¦. ª« áâ¥àë
|
||||||
|
SBC HL,DE
|
||||||
POP HL
|
POP HL
|
||||||
; [x] fat32
|
; [x] fat32
|
||||||
EXX
|
EXX
|
||||||
@ -146,12 +148,8 @@ READ_FROM_FAT:
|
|||||||
LD E,(HL)
|
LD E,(HL)
|
||||||
INC HL
|
INC HL
|
||||||
LD D,(HL)
|
LD D,(HL)
|
||||||
JR C,.Correct_1
|
LD HL,SERVICE_SECTORS.FAT12
|
||||||
LD A,D
|
JR NC,.Correct_2
|
||||||
AND #0F
|
|
||||||
LD D,A
|
|
||||||
JR .Correct_2
|
|
||||||
;
|
|
||||||
.Correct_1:
|
.Correct_1:
|
||||||
LD A,E
|
LD A,E
|
||||||
AND #F0
|
AND #F0
|
||||||
@ -160,23 +158,60 @@ READ_FROM_FAT:
|
|||||||
RRA
|
RRA
|
||||||
EDUP
|
EDUP
|
||||||
LD E,A
|
LD E,A
|
||||||
.Correct_2:
|
|
||||||
POP AF
|
|
||||||
OUT (SLOT3),A
|
|
||||||
LD HL,#0FEF
|
|
||||||
JR .exit
|
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
|
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
|
RET
|
||||||
;-----------------------------------------------------------
|
;------------------------------------------------------------------------------------------------
|
||||||
; ‡ ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
; ‡ ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||||
; ˘ĺޤ: hl = ŽŹĽŕ ŞŤ áâĽŕ ˘ ŞŽâŽŕëŠ § ݍá âě
|
; ¢å®¤: hl = ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ¢ ª®â®àë© § ¯¨á âì
|
||||||
; de = ŽŹĽŕ ŞŤ áâĽŕ ŞŽâŽŕëŠ ˘Ż¨á âě
|
; hl' = áâ à襥 á«®¢® ®¬¥à ª« áâ¥à ¢ ª®â®àë© § ¯¨á âì (⮫쪮 ¤«ï fat32)
|
||||||
|
; de = ¬« ¤è¥¥ á«®¢® ®¬¥à ª« áâ¥à ª®â®à®¥ ¢¯¨á âì
|
||||||
|
; de' = áâ à襥 á«®¢® ®¬¥à ª« áâ¥à ª®â®à®¥ ¢¯¨á âì (⮫쪮 ¤«ï fat32)
|
||||||
; ¢ë室: â ª®© ¦¥ ª ª ¨ ¢å®¤
|
; ¢ë室: â ª®© ¦¥ ª ª ¨ ¢å®¤
|
||||||
;-----------------------------------------------------------
|
;------------------------------------------------------------------------------------------------
|
||||||
; [ ] fat32
|
; [ ] fat32
|
||||||
WRITE_TO_FAT:
|
WRITE_TO_FAT:
|
||||||
PUSH DE
|
PUSH DE
|
||||||
@ -193,22 +228,22 @@ WRITE_TO_FAT:
|
|||||||
EXX
|
EXX
|
||||||
PUSH HL
|
PUSH HL
|
||||||
PUSH AF
|
PUSH AF
|
||||||
|
PUSH DE ; de = ®¬¥à ª« áâ¥à ª®â®àë© ¢¯¨á âì
|
||||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||||
;LD A,1
|
;LD A,1
|
||||||
;LD (FatCache.Update),A
|
;LD (FatCache.Update),A
|
||||||
;
|
;
|
||||||
LD A,(FatBuffer.FAT_TYPE)
|
LD A,(FatBuffer.FAT_TYPE)
|
||||||
CP 16 ; fat16
|
CP FAT_TYPE.x16
|
||||||
JR C,.FAT12
|
JR C,.FAT12
|
||||||
JR NZ,.FAT32
|
JR NZ,.FAT32
|
||||||
;
|
;
|
||||||
.FAT16: PUSH DE
|
.FAT16: CALL GET_FAT16_CELL
|
||||||
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
|
||||||
POP AF ; ˘Žááâ. ŻŽŕâ
|
.exit: POP AF ; ¢®ááâ. ¯®àâ
|
||||||
POP HL
|
POP HL
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||||
@ -219,9 +254,8 @@ WRITE_TO_FAT:
|
|||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
.FAT12: ;!FIXIT ¯¥à¥¤¥« âì ¯¥à¥¬¥ë¥ FAT_CACHE
|
.FAT12: ;!FIXIT ¯¥à¥¤¥« âì ¯¥à¥¬¥ë¥ FAT_CACHE
|
||||||
PUSH DE
|
|
||||||
CALL GET_FAT12_CELL
|
CALL GET_FAT12_CELL
|
||||||
POP DE
|
POP DE ; de = ®¬¥à ª« áâ¥à ª®â®àë© ¢¯¨á âì
|
||||||
JR C,.Correct_1 ; ®¬¥à ¥çñâë©
|
JR C,.Correct_1 ; ®¬¥à ¥çñâë©
|
||||||
LD (HL),E
|
LD (HL),E
|
||||||
INC HL
|
INC HL
|
||||||
@ -229,15 +263,8 @@ WRITE_TO_FAT:
|
|||||||
AND #F0
|
AND #F0
|
||||||
OR D
|
OR D
|
||||||
LD (HL),A
|
LD (HL),A
|
||||||
POP AF
|
JR .exit
|
||||||
POP HL
|
;
|
||||||
OUT (SLOT3),A
|
|
||||||
; [x] 2/12/23 FAT Ľ ˘áĽŁ¤ ŹŽŁ § ݍá âěáď HDD
|
|
||||||
XOR A
|
|
||||||
INC A
|
|
||||||
LD (FatCache.Update),A
|
|
||||||
; CF = 0
|
|
||||||
RET
|
|
||||||
.Correct_1:
|
.Correct_1:
|
||||||
; ¢«¥¢® 4 ¡¨âa
|
; ¢«¥¢® 4 ¡¨âa
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
@ -267,15 +294,22 @@ WRITE_TO_FAT:
|
|||||||
; CF = 0
|
; CF = 0
|
||||||
RET
|
RET
|
||||||
.FAT32: ; [ ] fat32
|
.FAT32: ; [ ] fat32
|
||||||
|
CALL GET_FAT32_CELL
|
||||||
|
POP DE ; de = ®¬¥à ª« áâ¥à ª®â®àë© ¢¯¨á âì
|
||||||
|
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-
|
||||||
|
INC HL ; ®¬¥à ª« áâ¥à
|
||||||
|
LD (HL),D
|
||||||
|
|
||||||
|
|
||||||
DI
|
DI
|
||||||
HALT
|
HALT
|
||||||
|
|
||||||
|
|
||||||
;RE_FAT:
|
;RE_FAT:
|
||||||
;RX01
|
;RX01
|
||||||
; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT-
|
; <20>à®ç¨â âì ¢ ª¥è •• ᥪâ®à®¢ FAT-
|
||||||
; [ ] fat32
|
; [ ] fat32 ;!TEST
|
||||||
//; A - NEW FAT BLOCK
|
|
||||||
; DE - NEW FAT BLOCK
|
; DE - NEW FAT BLOCK
|
||||||
;
|
|
||||||
READ_FAT_TABLE:
|
READ_FAT_TABLE:
|
||||||
PUSH HL
|
PUSH HL
|
||||||
; [x] fat32
|
; [x] fat32
|
||||||
@ -297,24 +331,29 @@ READ_FAT_TABLE:
|
|||||||
EX DE,HL
|
EX DE,HL
|
||||||
;
|
;
|
||||||
LD (FatCache.Block),HL
|
LD (FatCache.Block),HL
|
||||||
LD (FatCache.Update),A
|
;LD (FatCache.Update),A
|
||||||
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
|
;FAT BLOCK ^ FAT_CACHE.Degree = SECTOR OF FAT
|
||||||
DUP FAT_CACHE.Degree_16
|
DUP FAT_CACHE.Degree ; 4
|
||||||
ADD HL,HL ;x2
|
ADD HL,HL ;x2
|
||||||
EDUP
|
EDUP
|
||||||
LD DE,(FatBuffer.FAT1_SEC_L)
|
LD DE,(FatBuffer.FAT1_SEC_L)
|
||||||
|
; ®¬¥à «®£. ᥪâ®à
|
||||||
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 IX,0
|
LD HL,(FatBuffer.FAT1_SEC_H)
|
||||||
;ADD IX,DE ; ŽŹĽŕ ŤŽŁ. ἪâŽŕ
|
LD DE,0
|
||||||
;
|
ADC HL,DE
|
||||||
LD HL,0 ; áâ. ŕ §ŕď¤ ; HL:IX - SECTOR FAT FOR READING
|
; HL:IX - SECTOR FAT FOR READING
|
||||||
LD DE,FATPAGE.cache ; Şă¤ ; DE - FAT ADDRESS
|
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 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
|
RST ToDSS.DRV
|
||||||
POP HL
|
POP HL
|
||||||
RET
|
RET
|
||||||
@ -333,13 +372,13 @@ WRITE_FAT_TABLE:
|
|||||||
;
|
;
|
||||||
;LD H,0
|
;LD H,0
|
||||||
;FAT BLOCK * 16 = SECTOR OF FAT
|
;FAT BLOCK * 16 = SECTOR OF FAT
|
||||||
DUP FAT_CACHE.Degree_16
|
DUP FAT_CACHE.Degree
|
||||||
ADD HL,HL ;x2
|
ADD HL,HL ;x2
|
||||||
EDUP
|
EDUP
|
||||||
; HL - ®¬¥à «®£. ᥪâ®à
|
; HL - ®¬¥à «®£. ᥪâ®à
|
||||||
LD B,H
|
LD B,H
|
||||||
LD C,L ;BC - BLOCK OF FAT
|
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)
|
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
|
||||||
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè
|
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï çâ¥¨ï ¢ ªíè
|
||||||
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ FAT
|
||||||
@ -347,7 +386,7 @@ WRITE_FAT_TABLE:
|
|||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR C,.WALLFAT
|
JR C,.WALLFAT
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD HL,FAT_CACHE.Sectors
|
LD HL,FAT_CACHE.Sectors_16
|
||||||
; CF = 0
|
; CF = 0
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR C,.ERR
|
JR C,.ERR
|
||||||
@ -499,7 +538,7 @@ GET_FAT12_CELL:
|
|||||||
PUSH AF ; á®åà. ä« £
|
PUSH AF ; á®åà. ä« £
|
||||||
ADD HL,DE ; CLUSTER * 1.5
|
ADD HL,DE ; CLUSTER * 1.5
|
||||||
;
|
;
|
||||||
IF FAT_CACHE.Size < #2000
|
IF FAT_CACHE.Size_12 < #2000
|
||||||
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
|
;!FIXIT ®¯â¨¬¨§¨à®¢ âì
|
||||||
LD A,H
|
LD A,H
|
||||||
LD B,H
|
LD B,H
|
||||||
@ -1093,8 +1132,8 @@ SaveGotCluster: LD A,C
|
|||||||
|
|
||||||
|
|
||||||
FatCache: ;WORD #0000
|
FatCache: ;WORD #0000
|
||||||
.Block WORD #0000 ;EQU FatCache
|
.Block WORD #0000
|
||||||
.Update BYTE 0 ;EQU FatCache+1
|
.Update BYTE 0
|
||||||
FAT_Max_Cluster_L: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
FAT_Max_Cluster_L: WORD #0FF0 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
FAT_Max_Cluster_H: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
FAT_Max_Cluster_H: WORD #0000 ; ¬ ªá. ç¨á«® ª« áâ¥à®¢ (¡¥§ á«ã¦.)
|
||||||
|
|
||||||
|
|||||||
@ -32,12 +32,47 @@ CHECK_INC_HIGH_CLUSTER:
|
|||||||
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
|
||||||
|
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
;¢å®¤: DE:HL - ®¬¥à ª« áâ¥à
|
;¢å®¤: HL':HL - ®¬¥à ª« áâ¥à
|
||||||
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
;¢ë室: HL - ¤à¥á 㦮© ï祩ª¨ ¢ áâà ¨æ¥ FATPAGE
|
||||||
|
;
|
||||||
|
;[x] fat32 ;!TEST
|
||||||
GET_FAT32_CELL:
|
GET_FAT32_CELL:
|
||||||
;[ ] fat32
|
; ¤¢¨£ ¥¬ ¢«¥¢® HL':H
|
||||||
DI
|
LD A,H
|
||||||
HALT
|
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
|
; FOR 8192 bytes cache
|
||||||
; 1ÿ073ÿ741ÿ824 bytes max fat32 size
|
; 1ÿ073ÿ741ÿ824 bytes max fat32 size
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
946
|
945
|
||||||
@ -21,6 +21,17 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
DEFINE _FAT32_ENABLE 1 ;!TODO ¯®ª ¥¤®¤¥« ®
|
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 _bit (1<?((FAT_CACHE.Sectors-1)
|
||||||
define _shift _bit&1)) + _bit&2)) + _bit&4)) + _bit&8)) + _bit&16)) + _bit&32)) + _bit&64)) + _bit&128))
|
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
|
DISPLAY "Part_Mask_12 = ",/H,.Part_Mask_12
|
||||||
undefine _bit
|
undefine _bit
|
||||||
undefine _shift
|
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
|
DSS_MAX_DRIVES_AMOUNT EQU 26
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user