mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-16 01:41:17 +03:00
fat32 - 98%
This commit is contained in:
parent
beb5dd8196
commit
ed82bbff78
@ -24,7 +24,7 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
.FILE_EXISTS_DEL:
|
.FILE_EXISTS_DEL:
|
||||||
CALL DEL_FN.DELETE
|
CALL DELETE_REC_FAT
|
||||||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
|||||||
@ -27,48 +27,5 @@ DEL_FN: ;!TEST
|
|||||||
CALL LOADDIR
|
CALL LOADDIR
|
||||||
CALL SEARCH.File
|
CALL SEARCH.File
|
||||||
RET C
|
RET C
|
||||||
; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||||
;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
|
||||||
.DELETE:
|
|
||||||
SET_PAGE_X DIRPAGE
|
|
||||||
EX AF,AF'
|
|
||||||
CALL DELETE_LFN_RECORDS ; [ ] 㤠«¥¨¥ § ¯¨á¨ LFN
|
|
||||||
LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§ ª 㤠«¥¨ï ä ©«
|
|
||||||
; fat32
|
|
||||||
LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à
|
|
||||||
LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
|
|
||||||
LD A,E
|
|
||||||
OR D
|
|
||||||
EXX
|
|
||||||
LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à
|
|
||||||
LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
|
|
||||||
OR D
|
|
||||||
OR E
|
|
||||||
;
|
|
||||||
EX AF,AF'
|
|
||||||
OUT (SLOT3),A
|
|
||||||
EX AF,AF'
|
|
||||||
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
|
||||||
; ¥á«¨ à §¬¥à ä ©« ¥ ®«ì
|
|
||||||
.loop: EX DE,HL ; hl=®¬¥à ª« áâ¥à
|
|
||||||
EXX
|
|
||||||
EX DE,HL
|
|
||||||
EXX
|
|
||||||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
|
||||||
EXX
|
|
||||||
PUSH DE ; ®¬¥à á«¥¤. ª« áâ¥à
|
|
||||||
PUSH AF
|
|
||||||
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
|
||||||
EXX
|
|
||||||
PUSH DE
|
|
||||||
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
|
||||||
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
|
||||||
POP DE
|
|
||||||
EXX
|
|
||||||
POP AF
|
|
||||||
POP DE
|
|
||||||
EXX
|
|
||||||
JP NC,.loop
|
|
||||||
CALL WRITE_FAT_TABLE
|
|
||||||
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
|
||||||
;
|
;
|
||||||
@ -89,6 +89,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
LD A,(HL)
|
LD A,(HL)
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
AND FAT_ATTR.VOLUME_ID
|
AND FAT_ATTR.VOLUME_ID
|
||||||
|
SCF
|
||||||
JP Z,.error ;DIR NOT EMPTY
|
JP Z,.error ;DIR NOT EMPTY
|
||||||
.next_record: LD DE,FAT_DIRECTORY_RECORD
|
.next_record: LD DE,FAT_DIRECTORY_RECORD
|
||||||
ADD HL,DE
|
ADD HL,DE
|
||||||
@ -119,22 +120,17 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
|||||||
JR NC,.read_dir_big_loop ; ¥ ª®¥æ 楯®çª¨
|
JR NC,.read_dir_big_loop ; ¥ ª®¥æ 楯®çª¨
|
||||||
;
|
;
|
||||||
.delete: POP IX
|
.delete: POP IX
|
||||||
JP DEL_FN.DELETE ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||||
;
|
;
|
||||||
.dir_empty: POP HL
|
.dir_empty: ; CF = 0
|
||||||
|
.error: ; CF = 1
|
||||||
POP HL
|
POP HL
|
||||||
POP HL
|
|
||||||
POP HL
|
|
||||||
POP HL
|
|
||||||
JR .delete
|
|
||||||
;
|
|
||||||
.error: POP HL
|
|
||||||
POP HL
|
POP HL
|
||||||
POP HL
|
POP HL
|
||||||
POP HL
|
POP HL
|
||||||
POP HL
|
POP HL
|
||||||
|
JR NC,.delete
|
||||||
POP HL
|
POP HL
|
||||||
LD A,DSS_Error.sys.DIR_NOT_EMPTY
|
LD A,DSS_Error.sys.DIR_NOT_EMPTY
|
||||||
SCF
|
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
@ -101,15 +101,13 @@
|
|||||||
;
|
;
|
||||||
; ‚•Ž„: L - «®£¨ç¥áª¨© ®¬¥à ¢ â ¡«¨æ¥
|
; ‚•Ž„: L - «®£¨ç¥áª¨© ®¬¥à ¢ â ¡«¨æ¥
|
||||||
; ‚›•Ž„: IY - ç «® § ¯¨á¨
|
; ‚›•Ž„: IY - ç «® § ¯¨á¨
|
||||||
; <20>Ž<EFBFBD>’ˆ’: HL, IY. HL<-->DE
|
; <20>Ž<EFBFBD>’ˆ’: HL, DE, IY.
|
||||||
MACRO LOGDRV_ENTRY_FIND tbl_addr
|
MACRO LOGDRV_ENTRY_FIND tbl_addr
|
||||||
LD H,0
|
LD H,0
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
ADD HL,HL
|
ADD HL,HL
|
||||||
;LD B,H
|
|
||||||
;LD C,L
|
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD IY,tbl_addr
|
LD IY,tbl_addr
|
||||||
ADD IY,DE
|
ADD IY,DE
|
||||||
|
|||||||
@ -10,20 +10,23 @@
|
|||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
; á¡à áë¢ ¥â § 票ï ᢮¡®¤ëå ¨ ¯¥à¢®£® ᢮¡®¤®£® ᥪâ®à®¢ "¥®¯à¥¤¥«¥®"
|
; á¡à áë¢ ¥â § 票¥ ᢮¡®¤ëå ª« áâ¥à®¢ "¥®¯à¥¤¥«¥®"
|
||||||
RESET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
; ¬¥ï¥â § 票¥ ¯¥à¢®£® ᢮¡®¤®£® ª« áâ¥à
|
||||||
|
SET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
||||||
OR A
|
OR A
|
||||||
RET Z
|
RET Z
|
||||||
;
|
;
|
||||||
CALL READ_FSinfo
|
CALL READ_FSinfo
|
||||||
;
|
;
|
||||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT
|
;!TODO FREE_CLUSTERS_COUNT
|
||||||
LD B,8 ; 2 x DWORD
|
LD HL,#FFFF
|
||||||
LD A,#FF
|
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
|
||||||
;
|
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2),HL
|
||||||
.fsinfo_loop: LD (HL),A
|
; FIRST_FREE_CLUSTER
|
||||||
INC HL
|
LD HL,(G_CLUST.low)
|
||||||
DJNZ .fsinfo_loop
|
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
|
||||||
|
LD HL,(G_CLUST.high)
|
||||||
|
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2),HL
|
||||||
;
|
;
|
||||||
XOR A
|
XOR A
|
||||||
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||||
@ -32,18 +35,16 @@ RESET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
|||||||
; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
|
; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
|
||||||
READ_BPB: LD C,Dss.DRV.GetBPB
|
READ_BPB: LD C,Dss.DRV.GetBPB
|
||||||
JR RW_SECTOR
|
JR RW_SECTOR
|
||||||
;
|
|
||||||
; ‡ ¯¨á âì FSinfo ¨§ SECTOR_BUFFER
|
; ‡ ¯¨á âì FSinfo ¨§ SECTOR_BUFFER
|
||||||
WRITE_FSinfo: LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
WRITE_FSinfo: LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
||||||
LD HL,0
|
LD HL,0
|
||||||
|
;JR WRITE_SECTOR
|
||||||
; ‡ ¯¨á âì ᥪâ®à ¨§ SECTOR_BUFFER
|
; ‡ ¯¨á âì ᥪâ®à ¨§ SECTOR_BUFFER
|
||||||
; ‚室: HL:IX = Logical Block (sector)
|
; ‚室: HL:IX = Logical Block (sector)
|
||||||
WRITE_SECTOR: LD BC,1*256 + Dss.DRV.Write
|
WRITE_SECTOR: LD BC,1*256 + Dss.DRV.Write
|
||||||
JR RW_SECTOR
|
JR RW_SECTOR
|
||||||
;
|
|
||||||
; <20>à®ç¨â âì FSinfo ¢ SECTOR_BUFFER
|
; <20>à®ç¨â âì FSinfo ¢ SECTOR_BUFFER
|
||||||
READ_FSinfo:
|
READ_FSinfo: LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
||||||
LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
|
||||||
LD HL,0
|
LD HL,0
|
||||||
; <20>à®ç¨â âì ᥪâ®à ¢ SECTOR_BUFFER
|
; <20>à®ç¨â âì ᥪâ®à ¢ SECTOR_BUFFER
|
||||||
; ‚室: HL:IX = Logical Block (sector)
|
; ‚室: HL:IX = Logical Block (sector)
|
||||||
@ -712,7 +713,7 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
||||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
||||||
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
|
.skip_high: LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_L),DE
|
||||||
;
|
;!TODO ¢ë¡®à ªâ¨¢®© FAT ¤«ï fat32
|
||||||
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
LD A,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.Number_of_FATs) ; amount FATs
|
||||||
CP 1
|
CP 1
|
||||||
JR Z,.one_FAT
|
JR Z,.one_FAT
|
||||||
@ -1023,25 +1024,38 @@ RD_BPB: ; LD C,SLOT3
|
|||||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE + 2)
|
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE + 2)
|
||||||
LD BC,#7272
|
LD BC,#7272
|
||||||
SBC HL,BC
|
SBC HL,BC
|
||||||
JR NZ,.error_sig
|
JR NZ,.error
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD DE,#6141
|
LD DE,#6141
|
||||||
SBC HL,DE
|
SBC HL,DE
|
||||||
JR NZ,.error_sig
|
JR NZ,.error
|
||||||
; !FIXIT ᤥ« âì ¯à®¢¥àªã ª« áâ¥à®¢ ¢ «¨¤®áâì (¥ ¡®«ìè¥ ¬ ªá¨¬ «ì®£® ¤«ï à §¤¥« )
|
; FIRST_FREE_CLUSTER
|
||||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER)
|
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2)
|
||||||
LD (G_CLUST.low),HL
|
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER)
|
||||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||||
LD (G_CLUST.high),HL
|
; CF = 0
|
||||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT)
|
;!TODO MaxCluster - ¬ ªá¨¬ «ì® ¤®¯ãáâ¨¬ë© ¨«¨ 1 ¡®«ìè¥ ¬ ªá¨¬ «ì® ¤®¯ãá⨬®£®?
|
||||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
SBC HL,BC
|
||||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT+2)
|
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
SBC HL,DE
|
||||||
|
JR C,.error
|
||||||
|
;
|
||||||
|
LD (G_CLUST.high),DE
|
||||||
|
LD (G_CLUST.low),BC
|
||||||
|
;!TODO FREE_CLUSTERS_COUNT
|
||||||
|
;LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT)
|
||||||
|
;LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
||||||
|
;LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT+2)
|
||||||
|
;LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
||||||
|
;
|
||||||
XOR A
|
XOR A
|
||||||
RET
|
.error: LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||||
.error_sig: LD HL,#FFFF
|
RET Z
|
||||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
;!TODO FREE_CLUSTERS_COUNT
|
||||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
;LD HL,#FFFF
|
||||||
|
;LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
||||||
|
;LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
||||||
|
;
|
||||||
XOR A
|
XOR A
|
||||||
LD H,A
|
LD H,A
|
||||||
LD L,2
|
LD L,2
|
||||||
|
|||||||
@ -13,6 +13,91 @@
|
|||||||
;RX01 10-02-1999 DNS UPGRADE FAT CASH
|
;RX01 10-02-1999 DNS UPGRADE FAT CASH
|
||||||
;---------------------------------------------------------------
|
;---------------------------------------------------------------
|
||||||
|
|
||||||
|
; “¤ «ï¥â § ¯¨áì ¢ ª â «®£¥ ¨ ®á¢®¡®¦¤ ¥â § ïâãî æ¥¯®çªã ª« áâ¥à®¢
|
||||||
|
; ‚室: IX - 㪠§ ⥫ì 㤠«ï¥¬ãî § ¯¨áì ¢ DIRPAGE
|
||||||
|
;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
||||||
|
DELETE_REC_FAT: SET_PAGE_X DIRPAGE
|
||||||
|
EX AF,AF'
|
||||||
|
CALL DELETE_LFN_RECORDS ; [x] 㤠«¥¨¥ § ¯¨á¨ LFN
|
||||||
|
LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§ ª 㤠«¥¨ï ä ©«
|
||||||
|
; fat32
|
||||||
|
LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à
|
||||||
|
LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
|
||||||
|
LD A,E
|
||||||
|
OR D
|
||||||
|
EXX
|
||||||
|
LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à
|
||||||
|
LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
|
||||||
|
OR D
|
||||||
|
OR E
|
||||||
|
;
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
EX AF,AF'
|
||||||
|
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
; ¥á«¨ à §¬¥à ä ©« ¥ ®«ì
|
||||||
|
.loop: EX DE,HL ; hl=®¬¥à ª« áâ¥à
|
||||||
|
EXX
|
||||||
|
EX DE,HL
|
||||||
|
EXX
|
||||||
|
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
EXX
|
||||||
|
PUSH DE ; ®¬¥à á«¥¤. ª« áâ¥à
|
||||||
|
PUSH AF
|
||||||
|
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
||||||
|
EXX
|
||||||
|
PUSH DE
|
||||||
|
;
|
||||||
|
CALL SET_NEW_FREE_CLUSTER
|
||||||
|
;
|
||||||
|
LD DE,#0000 ; ®¬¥à ª« áâ¥à
|
||||||
|
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||||
|
POP DE
|
||||||
|
EXX
|
||||||
|
POP AF
|
||||||
|
POP DE
|
||||||
|
EXX
|
||||||
|
JP NC,.loop
|
||||||
|
CALL WRITE_FAT_TABLE
|
||||||
|
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||||
|
|
||||||
|
; “áâ ®¢¨âì ¯¥à¢ë¬ ¨§¢¥áâë¬ ª« áâ¥à®¬ ¤«ï ¯®¨áª ᢮¡®¤®£®.
|
||||||
|
; “áâ ®¢¨âáï ⮫쪮 ¥á«¨ ¬¥ìè¥ ¯à¥¤ë¤ã饣®
|
||||||
|
; ‚室: HL':HL - cluster
|
||||||
|
; [x] à ìè¥ ¡ë« è á 㯥à¥âìáï ¢ "DISK FULL" ¥á«¨ G_CLUST 㪠§ë¢ « ª« áâ¥à ¤ «ìè¥, 祬 ¤à㣮© ᢮¡®¤ë©
|
||||||
|
SET_NEW_FREE_CLUSTER:
|
||||||
|
XOR A
|
||||||
|
LD B,D
|
||||||
|
LD C,E
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(G_CLUST.low)
|
||||||
|
SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
LD D,B
|
||||||
|
LD E,C
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
LD B,D
|
||||||
|
LD C,E
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,(G_CLUST.high)
|
||||||
|
SBC HL,DE
|
||||||
|
EX DE,HL
|
||||||
|
LD D,B
|
||||||
|
LD E,C
|
||||||
|
EXX
|
||||||
|
RET C
|
||||||
|
;
|
||||||
|
JR G_CLUST.set_new
|
||||||
|
; LD (G_CLUST.low),HL
|
||||||
|
; EXX
|
||||||
|
; LD (G_CLUST.high),HL
|
||||||
|
; EXX
|
||||||
|
; XOR A
|
||||||
|
; INC A
|
||||||
|
; LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||||
|
; RET
|
||||||
|
|
||||||
;
|
;
|
||||||
; [x] fat32 ;!TEST
|
; [x] fat32 ;!TEST
|
||||||
; ©â¨ ¯¥à¢ë© ᢮¡®¤ë© ª« áâ¥à ;!TODO ¯à®¢¥à¨âì ¯¥à¥¡®à ª« áâ¥à®¢
|
; ©â¨ ¯¥à¢ë© ᢮¡®¤ë© ª« áâ¥à ;!TODO ¯à®¢¥à¨âì ¯¥à¥¡®à ª« áâ¥à®¢
|
||||||
@ -44,10 +129,13 @@ G_CLUST: ;
|
|||||||
OR D
|
OR D
|
||||||
OR E
|
OR E
|
||||||
JR NZ,.loop
|
JR NZ,.loop
|
||||||
|
.set_new: ; A = 0
|
||||||
LD (G_CLUST.low),HL
|
LD (G_CLUST.low),HL
|
||||||
EXX
|
EXX
|
||||||
LD (G_CLUST.high),HL
|
LD (G_CLUST.high),HL
|
||||||
EXX
|
EXX
|
||||||
|
INC A
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||||
RET
|
RET
|
||||||
|
|
||||||
;
|
;
|
||||||
@ -56,8 +144,7 @@ G_CLUST: ;
|
|||||||
; ‚室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
|
; ‚室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
|
||||||
; ‚ë室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
|
; ‚ë室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
|
||||||
; DE':DE - ®¬¥à ¯ãá⮣® ª« áâ¥à
|
; DE':DE - ®¬¥à ¯ãá⮣® ª« áâ¥à
|
||||||
INC_FAT:
|
INC_FAT: PUSH HL ; ⥪ã騩 ª« áâ¥à
|
||||||
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
|
||||||
EXX
|
EXX
|
||||||
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
||||||
EXX
|
EXX
|
||||||
@ -235,6 +322,24 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
|||||||
POP HL
|
POP HL
|
||||||
LD A,0
|
LD A,0
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
; ‚室: HL - <20>®¬¥à ¯¥à¢®© ï祩ª¨ ª« áâ¥à ¢ ¡«®ª¥ ä â
|
||||||
|
; <20>®àâ¨âì ⮫쪮 HL ¨ A
|
||||||
|
SET_FAT32_CACHE_BLOCK_CHANGED_REGION:
|
||||||
|
LD A,H
|
||||||
|
AND #38
|
||||||
|
LD HL,#0108
|
||||||
|
JR Z,.set_region
|
||||||
|
;
|
||||||
|
.loop: SLA H
|
||||||
|
SUB L
|
||||||
|
JR NZ,.loop
|
||||||
|
;
|
||||||
|
.set_region: LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
|
||||||
|
OR H
|
||||||
|
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||||
|
RET
|
||||||
|
|
||||||
;
|
;
|
||||||
; [x] fat32 ;!TEST
|
; [x] fat32 ;!TEST
|
||||||
@ -302,13 +407,17 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ;
|
|||||||
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-
|
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-
|
||||||
INC HL ; ®¬¥à ª« áâ¥à
|
INC HL ; ®¬¥à ª« áâ¥à
|
||||||
LD (HL),D
|
LD (HL),D
|
||||||
.exit: POP AF ; ¢®ááâ. ¯®àâ
|
;
|
||||||
|
.exit: ; [ ] ã᪮२¥ à ¡®âë á ªí襬 FAT
|
||||||
|
CALL SET_FAT32_CACHE_BLOCK_CHANGED_REGION
|
||||||
|
;
|
||||||
|
POP AF ; ¢®ááâ. ¯®àâ
|
||||||
POP HL
|
POP HL
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||||
XOR A
|
;XOR A
|
||||||
INC A
|
;INC A
|
||||||
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
;LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||||
; CF = 0
|
; CF = 0
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
@ -362,7 +471,10 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ;
|
|||||||
INC HL
|
INC HL
|
||||||
LD (HL),C
|
LD (HL),C
|
||||||
INC HL
|
INC HL
|
||||||
LD (HL),B
|
LD A,(HL)
|
||||||
|
AND #F0
|
||||||
|
OR B
|
||||||
|
LD (HL),A
|
||||||
JR .exit
|
JR .exit
|
||||||
;;;;;;;;;
|
;;;;;;;;;
|
||||||
|
|
||||||
@ -459,7 +571,7 @@ WRITE_FAT_TABLE:
|
|||||||
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
||||||
.Start: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
.Start: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||||
CP FAT_TYPE.x32
|
CP FAT_TYPE.x32
|
||||||
CALL Z,RESET_FSInfo
|
CALL Z,SET_FSInfo
|
||||||
LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
||||||
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
||||||
CALL GET_SECTOR_OF_FAT
|
CALL GET_SECTOR_OF_FAT
|
||||||
@ -556,16 +668,73 @@ WRITE_FAT_TABLE:
|
|||||||
LD D,XH
|
LD D,XH
|
||||||
LD E,XL
|
LD E,XL
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
; LD H,0
|
|
||||||
; LD L,C
|
|
||||||
LD XH,D
|
LD XH,D
|
||||||
LD XL,E
|
LD XL,E
|
||||||
; HL:IX - ᬥ饨¥ ¢ãâà¨ à §¤¥« ç «® 㦮£® ¡«®ª FAT
|
; HL:IX - ᬥ饨¥ ¢ãâà¨ à §¤¥« ç «® 㦮£® ¡«®ª FAT
|
||||||
|
LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
|
||||||
|
CP #FF
|
||||||
|
JR NZ,.SAVE_NOT_ALL_BLOCK
|
||||||
|
;
|
||||||
LD DE,FATPAGE.cache ; ®âªã¤
|
LD DE,FATPAGE.cache ; ®âªã¤
|
||||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
LD C,Dss.DRV.Write
|
LD C,Dss.DRV.Write
|
||||||
JP ToDSS.DRV
|
JP ToDSS.DRV
|
||||||
|
.SAVE_NOT_ALL_BLOCK:
|
||||||
|
; A = CORE_BUFFERS.FatBuffer.CacheBlock
|
||||||
|
; HL:IX - ᬥ饨¥ ¢ãâà¨ à §¤¥« ç «® 㦮£® ¡«®ª FAT
|
||||||
|
; B = ¬ ªá¨¬ «ì®¥ ç¨á«® ¡«®ª®¢ ¤«ï § ¯¨á¨
|
||||||
|
EXX
|
||||||
|
LD HL,FATPAGE.cache
|
||||||
|
LD DE,#0800 ;!HARDCODE à §¬¥à ॣ¨® ¢ ¡«®ª¥ Š<>˜ FAT (¡ ©â®¢)
|
||||||
|
EXX
|
||||||
|
LD C,A
|
||||||
|
LD A,B
|
||||||
|
|
||||||
|
LD B,8 ;!HARDCODE ª®«¨ç¥á⢮ ॣ¨®®¢ ¢ ¡«®ª¥ Š<>˜ FAT
|
||||||
|
LD DE,4 ;!HARDCODE à §¬¥à ॣ¨® ¢ ¡«®ª¥ Š<>˜ FAT (ᥪâ®à®¢)
|
||||||
|
; ç⮡ ¥ áà âì § £à ¨æë FAT
|
||||||
|
.region_loop: SUB A,E
|
||||||
|
JR NC,.good_blk
|
||||||
|
; ¬ ªá¨¬ «ì® ¤®¯ãáâ¨¬ë© ¡«®ª ¤«ï § ¯¨á¨ ¬¥ìè¥, 祬 å®ç¥âáï
|
||||||
|
ADD A,E
|
||||||
|
LD E,A
|
||||||
|
;
|
||||||
|
.good_blk: SRL C
|
||||||
|
JR C,.SAVE_FAT_CACHE_REGION
|
||||||
|
EXX
|
||||||
|
ADD HL,DE
|
||||||
|
EXX
|
||||||
|
ADD IX,DE
|
||||||
|
JR NC,.no_inc_HL
|
||||||
|
INC HL
|
||||||
|
.no_inc_HL: DJNZ .region_loop
|
||||||
|
RET
|
||||||
|
; HL' - €¤à¥á ¢ áâà ¨æ¥ Š<>˜
|
||||||
|
; HL:IX - ᬥ饨¥ ¢ãâà¨ à §¤¥« ç «® 㦮£® <20>…ƒˆŽ<CB86>€ ¡«®ª FAT
|
||||||
|
.SAVE_FAT_CACHE_REGION:
|
||||||
|
PUSH AF
|
||||||
|
PUSH DE
|
||||||
|
PUSH BC
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
LD B,E ; ª®«-¢® ᥪâ®à®¢
|
||||||
|
POP DE ; €¤à¥á ¢ áâà ¨æ¥ Š<>˜
|
||||||
|
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||||
|
LD C,Dss.DRV.Write
|
||||||
|
RST ToDSS.DRV
|
||||||
|
PUSH DE
|
||||||
|
EXX
|
||||||
|
POP HL
|
||||||
|
LD DE,#0800 ;!HARDCODE à §¬¥à ॣ¨® ¢ ¡«®ª¥ Š<>˜ FAT (¡ ©â®¢)
|
||||||
|
EXX
|
||||||
|
;
|
||||||
|
POP BC
|
||||||
|
POP DE
|
||||||
|
POP AF
|
||||||
|
DJNZ .region_loop
|
||||||
|
RET
|
||||||
;-----------------------------------------------------------------------
|
;-----------------------------------------------------------------------
|
||||||
;
|
;
|
||||||
;[x] fat32 ;!TEST
|
;[x] fat32 ;!TEST
|
||||||
@ -692,13 +861,19 @@ GET_FAT12_CELL:
|
|||||||
; in: HL':HL - CLUSTER
|
; in: HL':HL - CLUSTER
|
||||||
; out: HL:IX - SECTOR
|
; out: HL:IX - SECTOR
|
||||||
CLUSTER_TO_SECTOR:
|
CLUSTER_TO_SECTOR:
|
||||||
|
PUSH BC
|
||||||
EXX
|
EXX
|
||||||
PUSH HL
|
PUSH HL
|
||||||
EXX
|
EXX
|
||||||
POP DE
|
POP DE
|
||||||
; DE:HL - cluster
|
; DE:HL - cluster
|
||||||
DEC HL
|
;
|
||||||
DEC HL
|
LD BC,-2
|
||||||
|
ADD HL,BC
|
||||||
|
JR C,.no_dec_de
|
||||||
|
DEC DE
|
||||||
|
.no_dec_de: ; cluster = cluster - 2
|
||||||
|
;
|
||||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||||
XOR 1
|
XOR 1
|
||||||
JR Z,.skip
|
JR Z,.skip
|
||||||
@ -725,6 +900,7 @@ CLUSTER_TO_SECTOR:
|
|||||||
;LD E,A
|
;LD E,A
|
||||||
;
|
;
|
||||||
ADC HL,DE
|
ADC HL,DE
|
||||||
|
POP BC
|
||||||
RET
|
RET
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@ -175,7 +175,7 @@
|
|||||||
; IDE1 EQU #0C1C8
|
; IDE1 EQU #0C1C8
|
||||||
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
|
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
|
||||||
|
|
||||||
HDDRIVE INC C
|
HDDRIVE: INC C
|
||||||
DEC C
|
DEC C
|
||||||
JP Z,INIT_H ; c=0 Initialization
|
JP Z,INIT_H ; c=0 Initialization
|
||||||
DEC C
|
DEC C
|
||||||
@ -195,12 +195,13 @@ HDDRIVE INC C
|
|||||||
DEC C
|
DEC C
|
||||||
JP Z,IOCTL_H ; c=8 ã§ âì £¥®¬¥âà¨î ¤¨áª Generic IOCTL
|
JP Z,IOCTL_H ; c=8 ã§ âì £¥®¬¥âà¨î ¤¨áª Generic IOCTL
|
||||||
DEC C
|
DEC C
|
||||||
JP Z,RESR_H ; c=9 Reserved
|
JP Z,.Reserved ; c=9 Reserved
|
||||||
DEC C
|
DEC C
|
||||||
JP Z,LREADH ; c=10 Read Long
|
JP Z,LREADH ; c=10 Read Long
|
||||||
DEC C
|
DEC C
|
||||||
JP Z,LWRITEH ; c=11 Write Long
|
JP Z,LWRITEH ; c=11 Write Long
|
||||||
RESR_H LD A,DSS_Error.drv.INVALID_COMMAND
|
;
|
||||||
|
.Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
|
||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
|
|
||||||
@ -280,23 +281,20 @@ DRVCLC: ; INC A
|
|||||||
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0
|
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0
|
||||||
; .TBL_Entry EQU 16
|
; .TBL_Entry EQU 16
|
||||||
; .Size EQU $-LOGDRV
|
; .Size EQU $-LOGDRV
|
||||||
|
|
||||||
SELHDD: PUSH DE
|
SELHDD: PUSH DE
|
||||||
PUSH BC
|
|
||||||
PUSH HL
|
PUSH HL
|
||||||
;
|
;
|
||||||
LD L,A
|
LD L,A
|
||||||
LOGDRV_ENTRY_FIND LOGDRV
|
LOGDRV_ENTRY_FIND LOGDRV
|
||||||
; !HARDCODE
|
; !HARDCODE
|
||||||
LD C,(IY+1)
|
LD E,(IY+1)
|
||||||
LD B,(IY+2)
|
LD D,(IY+2)
|
||||||
|
ADD IX,DE
|
||||||
LD E,(IY+3)
|
LD E,(IY+3)
|
||||||
LD D,(IY+4)
|
LD D,(IY+4)
|
||||||
POP HL
|
POP HL
|
||||||
ADD IX,BC
|
|
||||||
ADC HL,DE
|
ADC HL,DE
|
||||||
LD A,(IY+0) ;DRIVE NUMBER
|
LD A,(IY+0) ;DRIVE NUMBER
|
||||||
POP BC
|
|
||||||
POP DE
|
POP DE
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
954
|
955
|
||||||
@ -27,7 +27,8 @@
|
|||||||
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
|
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
DEFINE USE_FSINFO_FAT32 0 ; ¥¤®¤¥« ®. € 㦮 «¨?
|
DEFINE USE_FSINFO_FAT32 1 ; ¥¤®¤¥« ®. € 㦮 «¨?
|
||||||
|
DEFINE CHANGE_FREE_CLU_AFTER_DEL 1
|
||||||
|
|
||||||
SERVICE_SECTORS:
|
SERVICE_SECTORS:
|
||||||
.FAT12 EQU #0FEF
|
.FAT12 EQU #0FEF
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user