mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +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
|
||||
RET
|
||||
.FILE_EXISTS_DEL:
|
||||
CALL DEL_FN.DELETE
|
||||
CALL DELETE_REC_FAT
|
||||
LD A,DSS_Error.sys.FILE_NOT_FOUND
|
||||
RET
|
||||
;
|
||||
|
||||
@ -2,73 +2,30 @@
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
; INPUT: HL - "c:\dir\filename.ext",#00 without simbols * ?
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
DEL_FN: ;!TEST
|
||||
;!TEST Current Dir ;[x] 15/10/23
|
||||
PUSH HL
|
||||
CALL DIR_PATH_CHECK
|
||||
POP HL
|
||||
RET C
|
||||
;
|
||||
CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
RET C
|
||||
CALL MASK
|
||||
RET C
|
||||
;
|
||||
;!TEST optimization
|
||||
;LD HL,MASKARE
|
||||
;LD BC,11
|
||||
;LD A,"?"
|
||||
;CPIR
|
||||
;LD A,DSS_Error.sys.INVALID_NAME
|
||||
;SCF
|
||||
CALL CHECK_NAME
|
||||
;
|
||||
RET Z
|
||||
CALL LOADDIR
|
||||
CALL SEARCH.File
|
||||
RET C
|
||||
; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||
;!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 ; á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||||
DEL_FN: ;!TEST
|
||||
;!TEST Current Dir ;[x] 15/10/23
|
||||
PUSH HL
|
||||
CALL DIR_PATH_CHECK
|
||||
POP HL
|
||||
RET C
|
||||
;
|
||||
CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||||
RET C
|
||||
CALL MASK
|
||||
RET C
|
||||
;
|
||||
;!TEST optimization
|
||||
;LD HL,MASKARE
|
||||
;LD BC,11
|
||||
;LD A,"?"
|
||||
;CPIR
|
||||
;LD A,DSS_Error.sys.INVALID_NAME
|
||||
;SCF
|
||||
CALL CHECK_NAME
|
||||
;
|
||||
RET Z
|
||||
CALL LOADDIR
|
||||
CALL SEARCH.File
|
||||
RET C
|
||||
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||||
;
|
||||
@ -89,6 +89,7 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
LD A,(HL)
|
||||
SBC HL,DE
|
||||
AND FAT_ATTR.VOLUME_ID
|
||||
SCF
|
||||
JP Z,.error ;DIR NOT EMPTY
|
||||
.next_record: LD DE,FAT_DIRECTORY_RECORD
|
||||
ADD HL,DE
|
||||
@ -119,22 +120,17 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||||
JR NC,.read_dir_big_loop ; ¥ ª®¥æ 楯®çª¨
|
||||
;
|
||||
.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
|
||||
JR .delete
|
||||
;
|
||||
.error: POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
POP HL
|
||||
JR NC,.delete
|
||||
POP HL
|
||||
LD A,DSS_Error.sys.DIR_NOT_EMPTY
|
||||
SCF
|
||||
RET
|
||||
;
|
||||
@ -101,16 +101,14 @@
|
||||
;
|
||||
; ‚•Ž„: L - «®£¨ç¥áª¨© ®¬¥à ¢ â ¡«¨æ¥
|
||||
; ‚›•Ž„: IY - ç «® § ¯¨á¨
|
||||
; <20>Ž<EFBFBD>’ˆ’: HL, IY. HL<-->DE
|
||||
; <20>Ž<EFBFBD>’ˆ’: HL, DE, IY.
|
||||
MACRO LOGDRV_ENTRY_FIND tbl_addr
|
||||
LD H,0
|
||||
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
|
||||
ADD IY,DE
|
||||
ENDM
|
||||
|
||||
@ -10,20 +10,23 @@
|
||||
;---------------------------------------------------------------
|
||||
;----------------------------------------------------------------------;
|
||||
|
||||
; á¡à áë¢ ¥â § 票ï ᢮¡®¤ëå ¨ ¯¥à¢®£® ᢮¡®¤®£® ᥪâ®à®¢ "¥®¯à¥¤¥«¥®"
|
||||
RESET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
||||
; á¡à áë¢ ¥â § 票¥ ᢮¡®¤ëå ª« áâ¥à®¢ "¥®¯à¥¤¥«¥®"
|
||||
; ¬¥ï¥â § 票¥ ¯¥à¢®£® ᢮¡®¤®£® ª« áâ¥à
|
||||
SET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
||||
OR A
|
||||
RET Z
|
||||
;
|
||||
CALL READ_FSinfo
|
||||
;
|
||||
LD HL,CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FREE_CLUSTERS_COUNT
|
||||
LD B,8 ; 2 x DWORD
|
||||
LD A,#FF
|
||||
;
|
||||
.fsinfo_loop: LD (HL),A
|
||||
INC HL
|
||||
DJNZ .fsinfo_loop
|
||||
;!TODO FREE_CLUSTERS_COUNT
|
||||
LD HL,#FFFF
|
||||
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER),HL
|
||||
LD (CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2),HL
|
||||
; FIRST_FREE_CLUSTER
|
||||
LD HL,(G_CLUST.low)
|
||||
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
|
||||
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||
@ -32,18 +35,16 @@ RESET_FSInfo: LD A,(CORE_BUFFERS.FatBuffer.RESET_FSINFO)
|
||||
; <20>à®ç¨â âì BPB ¢ SECTOR_BUFFER
|
||||
READ_BPB: LD C,Dss.DRV.GetBPB
|
||||
JR RW_SECTOR
|
||||
;
|
||||
; ‡ ¯¨á âì FSinfo ¨§ SECTOR_BUFFER
|
||||
WRITE_FSinfo: LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
||||
LD HL,0
|
||||
;JR WRITE_SECTOR
|
||||
; ‡ ¯¨á âì ᥪâ®à ¨§ SECTOR_BUFFER
|
||||
; ‚室: HL:IX = Logical Block (sector)
|
||||
WRITE_SECTOR: LD BC,1*256 + Dss.DRV.Write
|
||||
JR RW_SECTOR
|
||||
;
|
||||
; <20>à®ç¨â âì FSinfo ¢ SECTOR_BUFFER
|
||||
READ_FSinfo:
|
||||
LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
||||
READ_FSinfo: LD IX,(CORE_BUFFERS.FatBuffer.FSINFO_Sector)
|
||||
LD HL,0
|
||||
; <20>à®ç¨â âì ᥪâ®à ¢ SECTOR_BUFFER
|
||||
; ‚室: HL:IX = Logical Block (sector)
|
||||
@ -712,7 +713,7 @@ RD_BPB: ; LD C,SLOT3
|
||||
LD (CORE_BUFFERS.FatBuffer.SectorsPerFAT_H),A
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerFAT32)
|
||||
.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
|
||||
CP 1
|
||||
JR Z,.one_FAT
|
||||
@ -1023,25 +1024,38 @@ RD_BPB: ; LD C,SLOT3
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.DATA_SIGNATURE + 2)
|
||||
LD BC,#7272
|
||||
SBC HL,BC
|
||||
JR NZ,.error_sig
|
||||
JR NZ,.error
|
||||
EX DE,HL
|
||||
LD DE,#6141
|
||||
SBC HL,DE
|
||||
JR NZ,.error_sig
|
||||
; !FIXIT ᤥ« âì ¯à®¢¥àªã ª« áâ¥à®¢ ¢ «¨¤®áâì (¥ ¡®«ìè¥ ¬ ªá¨¬ «ì®£® ¤«ï à §¤¥« )
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER)
|
||||
LD (G_CLUST.low),HL
|
||||
LD HL,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2)
|
||||
LD (G_CLUST.high),HL
|
||||
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
|
||||
JR NZ,.error
|
||||
; FIRST_FREE_CLUSTER
|
||||
LD DE,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER+2)
|
||||
LD BC,(CORE_BUFFERS.SECTOR_BUFFER + _sFSinfo.FIRST_FREE_CLUSTER)
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
|
||||
; CF = 0
|
||||
;!TODO MaxCluster - ¬ ªá¨¬ «ì® ¤®¯ãáâ¨¬ë© ¨«¨ 1 ¡®«ìè¥ ¬ ªá¨¬ «ì® ¤®¯ãá⨬®£®?
|
||||
SBC HL,BC
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterHigh)
|
||||
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
|
||||
RET
|
||||
.error_sig: LD HL,#FFFF
|
||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
||||
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
||||
.error: LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||
RET Z
|
||||
;!TODO FREE_CLUSTERS_COUNT
|
||||
;LD HL,#FFFF
|
||||
;LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
|
||||
;LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
|
||||
;
|
||||
XOR A
|
||||
LD H,A
|
||||
LD L,2
|
||||
|
||||
@ -13,6 +13,91 @@
|
||||
;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
|
||||
; ©â¨ ¯¥à¢ë© ᢮¡®¤ë© ª« áâ¥à ;!TODO ¯à®¢¥à¨âì ¯¥à¥¡®à ª« áâ¥à®¢
|
||||
@ -44,10 +129,13 @@ G_CLUST: ;
|
||||
OR D
|
||||
OR E
|
||||
JR NZ,.loop
|
||||
.set_new: ; A = 0
|
||||
LD (G_CLUST.low),HL
|
||||
EXX
|
||||
LD (G_CLUST.high),HL
|
||||
LD (G_CLUST.high),HL
|
||||
EXX
|
||||
INC A
|
||||
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
|
||||
RET
|
||||
|
||||
;
|
||||
@ -56,49 +144,48 @@ G_CLUST: ;
|
||||
; ‚室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
|
||||
; ‚ë室: HL':HL - ®¬¥à ª« áâ¥à ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
|
||||
; DE':DE - ®¬¥à ¯ãá⮣® ª« áâ¥à
|
||||
INC_FAT:
|
||||
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
||||
EXX
|
||||
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
||||
EXX
|
||||
;
|
||||
CALL G_CLUST
|
||||
;
|
||||
EXX
|
||||
POP DE ; ⥪ã騩 ª« áâ¥à
|
||||
EXX
|
||||
POP DE ; ⥪ã騩 ª« áâ¥à
|
||||
RET C
|
||||
; HL':HL - ᢮¡®¤ë© ª« áâ¥à, DE':DE - ⥪ã騩 ª« áâ¥à
|
||||
;
|
||||
EX DE,HL
|
||||
EXX
|
||||
EX DE,HL
|
||||
EXX
|
||||
;
|
||||
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
;!FIXIT <¥â ª®âà®«ï ®è¨¡ª¨>
|
||||
;
|
||||
PUSH HL
|
||||
EX DE,HL
|
||||
EXX
|
||||
PUSH HL
|
||||
EX DE,HL
|
||||
EXX
|
||||
;
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WRITE_FAT_TABLE?
|
||||
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
;
|
||||
EXX
|
||||
POP DE
|
||||
EX DE,HL
|
||||
EXX
|
||||
POP DE
|
||||
EX DE,HL
|
||||
;
|
||||
AND A
|
||||
RET
|
||||
INC_FAT: PUSH HL ; ⥪ã騩 ª« áâ¥à
|
||||
EXX
|
||||
PUSH HL ; ⥪ã騩 ª« áâ¥à
|
||||
EXX
|
||||
;
|
||||
CALL G_CLUST
|
||||
;
|
||||
EXX
|
||||
POP DE ; ⥪ã騩 ª« áâ¥à
|
||||
EXX
|
||||
POP DE ; ⥪ã騩 ª« áâ¥à
|
||||
RET C
|
||||
; HL':HL - ᢮¡®¤ë© ª« áâ¥à, DE':DE - ⥪ã騩 ª« áâ¥à
|
||||
;
|
||||
EX DE,HL
|
||||
EXX
|
||||
EX DE,HL
|
||||
EXX
|
||||
;
|
||||
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
;!FIXIT <¥â ª®âà®«ï ®è¨¡ª¨>
|
||||
;
|
||||
PUSH HL
|
||||
EX DE,HL
|
||||
EXX
|
||||
PUSH HL
|
||||
EX DE,HL
|
||||
EXX
|
||||
;
|
||||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||||
;!TEST ;!TODO 2/12/23 ; [ ] ¡ £ á ¨§¡ëâ®ç®© § ¯¨áìî WRITE_FAT_TABLE?
|
||||
;CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||||
;
|
||||
EXX
|
||||
POP DE
|
||||
EX DE,HL
|
||||
EXX
|
||||
POP DE
|
||||
EX DE,HL
|
||||
;
|
||||
AND A
|
||||
RET
|
||||
;RX01
|
||||
|
||||
|
||||
@ -235,6 +322,24 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
|
||||
POP HL
|
||||
LD A,0
|
||||
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
|
||||
@ -302,13 +407,17 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ;
|
||||
LD (HL),E ; á®åà. ¢ ª¥è¥ FAT-
|
||||
INC HL ; ®¬¥à ª« áâ¥à
|
||||
LD (HL),D
|
||||
.exit: POP AF ; ¢®ááâ. ¯®àâ
|
||||
;
|
||||
.exit: ; [ ] ã᪮२¥ à ¡®âë á ªí襬 FAT
|
||||
CALL SET_FAT32_CACHE_BLOCK_CHANGED_REGION
|
||||
;
|
||||
POP AF ; ¢®ááâ. ¯®àâ
|
||||
POP HL
|
||||
OUT (SLOT3),A
|
||||
; [x] 2/12/23 FAT ¥ ¢á¥£¤ ¬®£ § ¯¨á âìáï HDD
|
||||
XOR A
|
||||
INC A
|
||||
LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||
;XOR A
|
||||
;INC A
|
||||
;LD (CORE_BUFFERS.FatBuffer.CacheUpdated),A
|
||||
; CF = 0
|
||||
RET
|
||||
;
|
||||
@ -362,7 +471,10 @@ WRITE_TO_FAT: LD DE,(CORE_BUFFERS.FatBuffer.END_CHAIN_CLUSTER_L) ;
|
||||
INC HL
|
||||
LD (HL),C
|
||||
INC HL
|
||||
LD (HL),B
|
||||
LD A,(HL)
|
||||
AND #F0
|
||||
OR B
|
||||
LD (HL),A
|
||||
JR .exit
|
||||
;;;;;;;;;
|
||||
|
||||
@ -459,7 +571,7 @@ WRITE_FAT_TABLE:
|
||||
; ‡ ¯¨áì ª¥è FAT- ¤¨áª
|
||||
.Start: LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
|
||||
CP FAT_TYPE.x32
|
||||
CALL Z,RESET_FSInfo
|
||||
CALL Z,SET_FSInfo
|
||||
LD HL,(CORE_BUFFERS.FatBuffer.CacheBlock)
|
||||
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
|
||||
CALL GET_SECTOR_OF_FAT
|
||||
@ -556,16 +668,73 @@ WRITE_FAT_TABLE:
|
||||
LD D,XH
|
||||
LD E,XL
|
||||
EX DE,HL
|
||||
; LD H,0
|
||||
; LD L,C
|
||||
LD XH,D
|
||||
LD XL,E
|
||||
; HL:IX - ᬥ饨¥ ¢ãâà¨ à §¤¥« ç «® 㦮£® ¡«®ª FAT
|
||||
LD A,(CORE_BUFFERS.FatBuffer.CacheUpdated)
|
||||
CP #FF
|
||||
JR NZ,.SAVE_NOT_ALL_BLOCK
|
||||
;
|
||||
LD DE,FATPAGE.cache ; ®âªã¤
|
||||
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ®¬¥à ¤¨áª
|
||||
LD C,Dss.DRV.Write
|
||||
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
|
||||
@ -692,40 +861,47 @@ GET_FAT12_CELL:
|
||||
; in: HL':HL - CLUSTER
|
||||
; out: HL:IX - SECTOR
|
||||
CLUSTER_TO_SECTOR:
|
||||
EXX
|
||||
PUSH HL
|
||||
EXX
|
||||
POP DE
|
||||
; DE:HL - cluster
|
||||
DEC HL
|
||||
DEC HL
|
||||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||||
XOR 1
|
||||
JR Z,.skip
|
||||
;
|
||||
RRA
|
||||
.loop: ADD HL,HL
|
||||
RL E
|
||||
RL D
|
||||
;
|
||||
RRA
|
||||
JP NC,.loop
|
||||
;
|
||||
.skip: EX DE,HL
|
||||
LD XL,E
|
||||
LD XH,D
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
|
||||
; [x] fat32
|
||||
;XOR A
|
||||
;
|
||||
ADD IX,DE
|
||||
; [x] fat32
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_H)
|
||||
;LD D,A
|
||||
;LD E,A
|
||||
;
|
||||
ADC HL,DE
|
||||
RET
|
||||
PUSH BC
|
||||
EXX
|
||||
PUSH HL
|
||||
EXX
|
||||
POP DE
|
||||
; DE:HL - cluster
|
||||
;
|
||||
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)
|
||||
XOR 1
|
||||
JR Z,.skip
|
||||
;
|
||||
RRA
|
||||
.loop: ADD HL,HL
|
||||
RL E
|
||||
RL D
|
||||
;
|
||||
RRA
|
||||
JP NC,.loop
|
||||
;
|
||||
.skip: EX DE,HL
|
||||
LD XL,E
|
||||
LD XH,D
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L)
|
||||
; [x] fat32
|
||||
;XOR A
|
||||
;
|
||||
ADD IX,DE
|
||||
; [x] fat32
|
||||
LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_H)
|
||||
;LD D,A
|
||||
;LD E,A
|
||||
;
|
||||
ADC HL,DE
|
||||
POP BC
|
||||
RET
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@ -175,34 +175,35 @@
|
||||
; IDE1 EQU #0C1C8
|
||||
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
|
||||
|
||||
HDDRIVE INC C
|
||||
DEC C
|
||||
JP Z,INIT_H ; c=0 Initialization
|
||||
DEC C
|
||||
JP Z,RESE_H ; c=1 open
|
||||
DEC C
|
||||
JP Z,STAT_H ; c=2 close
|
||||
DEC C
|
||||
JP Z,CHEK_H ; c=3 media check (ᬥ ®á¨â¥«ï)
|
||||
DEC C
|
||||
JP Z,GBPB_H ; c=4 get BPB
|
||||
DEC C
|
||||
JP Z,READH ; c=5 read (ç⥨¥ ᥪâ®à®¢)
|
||||
DEC C
|
||||
JP Z,WRITEH ; c=6 write (§ ¯¨áì ᥪâ®à®¢)
|
||||
DEC C
|
||||
JP Z,REMOV_H ; c=7 Removable
|
||||
DEC C
|
||||
JP Z,IOCTL_H ; c=8 ã§ âì £¥®¬¥âà¨î ¤¨áª Generic IOCTL
|
||||
DEC C
|
||||
JP Z,RESR_H ; c=9 Reserved
|
||||
DEC C
|
||||
JP Z,LREADH ; c=10 Read Long
|
||||
DEC C
|
||||
JP Z,LWRITEH ; c=11 Write Long
|
||||
RESR_H LD A,DSS_Error.drv.INVALID_COMMAND
|
||||
SCF
|
||||
RET
|
||||
HDDRIVE: INC C
|
||||
DEC C
|
||||
JP Z,INIT_H ; c=0 Initialization
|
||||
DEC C
|
||||
JP Z,RESE_H ; c=1 open
|
||||
DEC C
|
||||
JP Z,STAT_H ; c=2 close
|
||||
DEC C
|
||||
JP Z,CHEK_H ; c=3 media check (ᬥ ®á¨â¥«ï)
|
||||
DEC C
|
||||
JP Z,GBPB_H ; c=4 get BPB
|
||||
DEC C
|
||||
JP Z,READH ; c=5 read (ç⥨¥ ᥪâ®à®¢)
|
||||
DEC C
|
||||
JP Z,WRITEH ; c=6 write (§ ¯¨áì ᥪâ®à®¢)
|
||||
DEC C
|
||||
JP Z,REMOV_H ; c=7 Removable
|
||||
DEC C
|
||||
JP Z,IOCTL_H ; c=8 ã§ âì £¥®¬¥âà¨î ¤¨áª Generic IOCTL
|
||||
DEC C
|
||||
JP Z,.Reserved ; c=9 Reserved
|
||||
DEC C
|
||||
JP Z,LREADH ; c=10 Read Long
|
||||
DEC C
|
||||
JP Z,LWRITEH ; c=11 Write Long
|
||||
;
|
||||
.Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
|
||||
SCF
|
||||
RET
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
@ -280,23 +281,20 @@ DRVCLC: ; INC A
|
||||
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0
|
||||
; .TBL_Entry EQU 16
|
||||
; .Size EQU $-LOGDRV
|
||||
|
||||
SELHDD: PUSH DE
|
||||
PUSH BC
|
||||
PUSH HL
|
||||
;
|
||||
LD L,A
|
||||
LOGDRV_ENTRY_FIND LOGDRV
|
||||
; !HARDCODE
|
||||
LD C,(IY+1)
|
||||
LD B,(IY+2)
|
||||
LD E,(IY+1)
|
||||
LD D,(IY+2)
|
||||
ADD IX,DE
|
||||
LD E,(IY+3)
|
||||
LD D,(IY+4)
|
||||
POP HL
|
||||
ADD IX,BC
|
||||
ADC HL,DE
|
||||
LD A,(IY+0) ;DRIVE NUMBER
|
||||
POP BC
|
||||
POP DE
|
||||
RET
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
954
|
||||
955
|
||||
@ -27,7 +27,8 @@
|
||||
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
DEFINE USE_FSINFO_FAT32 0 ; ¥¤®¤¥« ®. € 㦮 «¨?
|
||||
DEFINE USE_FSINFO_FAT32 1 ; ¥¤®¤¥« ®. € 㦮 «¨?
|
||||
DEFINE CHANGE_FREE_CLU_AFTER_DEL 1
|
||||
|
||||
SERVICE_SECTORS:
|
||||
.FAT12 EQU #0FEF
|
||||
|
||||
Loading…
Reference in New Issue
Block a user