fat32 - 98%

This commit is contained in:
Anatoliy Belyanskiy 2024-04-21 05:11:18 +10:00
parent beb5dd8196
commit ed82bbff78
9 changed files with 374 additions and 234 deletions

View File

@ -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
;

View File

@ -27,48 +27,5 @@ DEL_FN: ;!TEST
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 ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥­­ ï"
;

View File

@ -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
;

View File

@ -101,15 +101,13 @@
;
; ‚•Ž„: 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
LD IY,tbl_addr
ADD IY,DE

View File

@ -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

View File

@ -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
EXX
INC A
LD (CORE_BUFFERS.FatBuffer.RESET_FSINFO),A
RET
;
@ -56,8 +144,7 @@ G_CLUST: ;
; ‚室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
; ‚ë室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
; DE':DE - ­®¬¥à ¯ãá⮣® ª« áâ¥à 
INC_FAT:
PUSH HL ; ⥪ã騩 ª« áâ¥à
INC_FAT: PUSH HL ; ⥪ã騩 ª« áâ¥à
EXX
PUSH HL ; ⥪ã騩 ª« áâ¥à
EXX
@ -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,13 +861,19 @@ GET_FAT12_CELL:
; in: HL':HL - CLUSTER
; out: HL:IX - SECTOR
CLUSTER_TO_SECTOR:
PUSH BC
EXX
PUSH HL
EXX
POP DE
; 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)
XOR 1
JR Z,.skip
@ -725,6 +900,7 @@ CLUSTER_TO_SECTOR:
;LD E,A
;
ADC HL,DE
POP BC
RET
////////////////////////////////////////////////////////////////////////

View File

@ -175,7 +175,7 @@
; IDE1 EQU #0C1C8
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
HDDRIVE INC C
HDDRIVE: INC C
DEC C
JP Z,INIT_H ; c=0 Initialization
DEC C
@ -195,12 +195,13 @@ HDDRIVE INC C
DEC C
JP Z,IOCTL_H ; c=8 ã§­ âì £¥®¬¥âà¨î ¤¨áª  Generic IOCTL
DEC C
JP Z,RESR_H ; c=9 Reserved
JP Z,.Reserved ; 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
;
.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

View File

@ -1 +1 @@
954
955

View File

@ -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