FSInfo: free clusters count DONE

This commit is contained in:
Anatoliy Belyanskiy 2024-04-29 08:10:35 +10:00
parent a904026a45
commit 7c01581aae
9 changed files with 92 additions and 46 deletions

View File

@ -52,6 +52,9 @@ MKDIR:
PUSH HL ; áâ ŕ訊 ­ŽŹĽŕ ἪâŽŕ  PUSH HL ; áâ ŕ訊 ­ŽŹĽŕ ἪâŽŕ 
EXX EXX
; ;
XOR A ; 㬥­ìè¨âì
CALL SET_NEW_FREE_CLUSTERS ; [ ] free clusters for FSInfo
;
CALL WRITE_TO_FAT ; § Ż¨á âě ˘ ŞĽč FAT-  ­ŽŹĽŕ ŞŤ áâĽŕ  CALL WRITE_TO_FAT ; § Ż¨á âě ˘ ŞĽč FAT-  ­ŽŹĽŕ ŞŤ áâĽŕ 
CALL WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą ­Şă ŞĽč  FAT ¨ § Ż¨á âě ĽŁŽ ­  ¤¨áŞ CALL WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą ­Şă ŞĽč  FAT ¨ § Ż¨á âě ĽŁŽ ­  ¤¨áŞ
LD HL,MASKARE LD HL,MASKARE

View File

@ -133,28 +133,23 @@ DISKINF: LD C,B
.CheckFreeSpace:; ¥á«¨ GetFreeSpace ­¥ ¢ë§ë¢ ¥âáï .CheckFreeSpace:; ¥á«¨ GetFreeSpace ­¥ ¢ë§ë¢ ¥âáï
XOR A XOR A
OR B OR B
LD A,#FF LD BC,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L)
LD B,A
LD C,A
EXX EXX
LD B,A LD BC,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H)
LD C,A
EXX EXX
CALL NZ,.GetFreeSpace CALL NZ,GetFreeSpace
; ;
;.FRESP2: ;.FRESP2:
; A = 0 if B != 0 before .GetFreeSpace ; A = 0 if B != 0 before .GetFreeSpace
; ;
LD H,B LD H,B
LD L,C LD L,C
; LD DE,2 LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
; SBC HL,DE
EX DE,HL EX DE,HL
EXX EXX
LD H,B LD H,B
LD L,C LD L,C
; LD DE,2 LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
; SBC HL,DE
EX DE,HL EX DE,HL
EXX EXX
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow) LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
@ -170,8 +165,21 @@ DISKINF: LD C,B
AND A AND A
RET RET
; ;
.GetFreeSpace: XOR A ; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®©
.mCOPY_LOOP: LD B,0
EX DE,HL
LD (HL),C
EX DE,HL
INC DE
LDIR
RET
;
;
GetFreeSpace: LD A,1
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
LD HL,2 ; fat32 ­®¬¥à ª« áâ¥à  ®â ª®â®à®£® áç¨â âì LD HL,2 ; fat32 ­®¬¥à ª« áâ¥à  ®â ª®â®à®£® áç¨â âì
XOR A
; fat32 ; fat32
EXX EXX
LD H,A LD H,A
@ -219,13 +227,6 @@ DISKINF: LD C,B
EXX EXX
JP .loop_free_space JP .loop_free_space
; ;
; [ ] 22/11/23 ¯®¤äã­ªæ¨ï á ¤®¯.¨­ä®©
.mCOPY_LOOP: LD B,0
EX DE,HL
LD (HL),C
EX DE,HL
INC DE
LDIR
RET
;
FAT_STRING: DB 'FAT12' FAT_STRING: DB 'FAT12'
;

View File

@ -247,8 +247,13 @@ CLEAR_BUFFER_AND_INIT_PROC:
LD BC,CLEAR_ZONE.size-1 LD BC,CLEAR_ZONE.size-1
LD (HL),A LD (HL),A
LDIR LDIR
; A = 0 LD HL,':'*256 + 'X'
DEC A LD (CurrentPath),HL
LD A,'\' ;
LD (CurrentDirectory),A
LD (WorkDirectory),A
;
LD A,#FF
LD (CORE_BUFFERS.FatBuffer.DRIVE),A LD (CORE_BUFFERS.FatBuffer.DRIVE),A
; ;
;R07 ;R11 ;R07 ;R11
@ -385,18 +390,21 @@ MASKARE: BLOCK 8,0 ;
;!TODO ª ¡ãä¥à ¬! ;!TODO ª ¡ãä¥à ¬!
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*
; 259
CurrentPath: DB 'X' CurrentPath: DB 'X'
DB ':' DB ':'
CurrentDirectory: DB '\' CurrentDirectory: DB '\'
.DEPTH: EQU DIRECTORY_PATH_LENGTH .DEPTH: EQU DIRECTORY_PATH_LENGTH
BLOCK CurrentDirectory.DEPTH,0 ; ­¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®­æ¥ BLOCK CurrentDirectory.DEPTH,0 ; ­¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®­æ¥
; ;
; !TODO ¤®¯¨«¨âì WorkPath? ; 257
;WorkPath: DB 'X'
; DB ':'
WorkDirectory: DB '\' WorkDirectory: DB '\'
.DEPTH: EQU DIRECTORY_PATH_LENGTH .DEPTH: EQU DIRECTORY_PATH_LENGTH
BLOCK WorkDirectory.DEPTH,0 ; ­¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®­æ¥ BLOCK WorkDirectory.DEPTH,0 ; ­¥ .DEPTH-1 ç⮡ ¡ë« 0 ¢ ª®­æ¥
; 516
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
; ;
@ -418,8 +426,17 @@ BUFFER EQU BUFFERSplace.Buffer
SECTOR_BUFFER EQU BUFFER ;!TODO ®â¤¥«¨âì SECTOR_BUFFER ®â BUFFER SECTOR_BUFFER EQU BUFFER ;!TODO ®â¤¥«¨âì SECTOR_BUFFER ®â BUFFER
MemoryTable EQU BUFFERSplace.MemoryTable MemoryTable EQU BUFFERSplace.MemoryTable
ENDMODULE ENDMODULE
;
CurrentPath EQU CORE_BUFFERS.BUFFERSplace + _sBuffers
CurrentDirectory EQU CurrentPath + 2
.DEPTH: EQU DIRECTORY_PATH_LENGTH
;
WorkDirectory EQU CurrentDirectory + 1 + CurrentDirectory.DEPTH
.DEPTH: EQU DIRECTORY_PATH_LENGTH
;
CLEAR_ZONE.size EQU _sBuffers CLEAR_ZONE.size EQU _sBuffers
ASSERT (CORE_BUFFERS.BUFFERSplace+_sBuffers)<#4000, "Warning!!! OUT OF SLOT0" ASSERT (CORE_BUFFERS.BUFFERSplace+_sBuffers)<#4000, "Warning!!! OUT OF SLOT0"
DISPLAY "--- --- --- --- --- --- --- ---" DISPLAY "--- --- --- --- --- --- --- ---"
DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start

View File

@ -984,6 +984,10 @@ RD_BPB: ; LD C,SLOT3
LD (G_CLUST.low),HL LD (G_CLUST.low),HL
DEC L DEC L
LD (G_CLUST.high),HL LD (G_CLUST.high),HL
;
DEC HL
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
XOR A XOR A
RET RET
; ;

View File

@ -70,15 +70,14 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
; [x] à ­ìè¥ ¡ë« è ­á 㯥à¥âìáï ¢ "DISK FULL" ¥á«¨ G_CLUST 㪠§ë¢ « ­  ª« áâ¥à ¤ «ìè¥, 祬 ¤à㣮© ᢮¡®¤­ë© ; [x] à ­ìè¥ ¡ë« è ­á 㯥à¥âìáï ¢ "DISK FULL" ¥á«¨ G_CLUST 㪠§ë¢ « ­  ª« áâ¥à ¤ «ìè¥, 祬 ¤à㣮© ᢮¡®¤­ë©
; [ ] free clusters for FSInfo ; [ ] free clusters for FSInfo
SET_NEW_FREE_CLUSTER: SET_NEW_FREE_CLUSTER:
XOR A LD A,1 ; 㢥«¨ç¨âì
;LD B,D CALL SET_NEW_FREE_CLUSTERS ; [ ] free clusters for FSInfo
;LD C,E ; CF=0
;
EX DE,HL EX DE,HL
LD HL,(G_CLUST.low) LD HL,(G_CLUST.low)
SBC HL,DE SBC HL,DE
EX DE,HL EX DE,HL
;LD D,B
;LD E,C
; ;
EXX EXX
LD B,D LD B,D
@ -147,13 +146,25 @@ G_CLUST: ;
; ‚室: A - 㬥­ìè¨âì (0) ¨«¨ 㢥«¨ç¨âì (!0) ç¨á«® ᢮¡®¤­ëå ª« áâ¥à®¢ ; ‚室: A - 㬥­ìè¨âì (0) ¨«¨ 㢥«¨ç¨âì (!0) ç¨á«® ᢮¡®¤­ëå ª« áâ¥à®¢
SET_NEW_FREE_CLUSTERS: SET_NEW_FREE_CLUSTERS:
EX AF,AF
PUSH HL PUSH HL
PUSH DE
EXX EXX
PUSH HL PUSH HL
PUSH DE
LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H) LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H)
LD A,H
AND L
EXX EXX
LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L) LD HL,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L)
AND H
AND L
INC A
EXX
JR Z,.no_change
EXX
; ;
EX AF,AF
OR A OR A
JR Z,.dec_clusters JR Z,.dec_clusters
; inc clusters ; inc clusters
@ -165,14 +176,17 @@ SET_NEW_FREE_CLUSTERS:
INC HL INC HL
EXX EXX
; ;
.set_new: LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL .set_new: LD A,1
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
;
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
EXX EXX
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
.no_change: POP DE
POP HL POP HL
EXX EXX
POP DE
POP HL POP HL
LD A,1
LD (CORE_BUFFERS.FatBuffer.UPD_FSINFO),A
RET RET
; ;
.dec_clusters: LD A,H .dec_clusters: LD A,H
@ -191,10 +205,7 @@ SET_NEW_FREE_CLUSTERS:
; ‚室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩ ; ‚室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨âì ¯ãá⮩
; ‚ë室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩ ; ‚ë室: HL':HL - ­®¬¥à ª« áâ¥à  ª ª®â®à®¬ã ¯à¨ªà¥¯¨«áï ¯ãá⮩
; DE':DE - ­®¬¥à ¯ãá⮣® ª« áâ¥à  ; DE':DE - ­®¬¥à ¯ãá⮣® ª« áâ¥à 
INC_FAT: ; [ ] free clusters for FSInfo INC_FAT: PUSH HL ; ⥪ã騩 ª« áâ¥à
;
;
PUSH HL ; ⥪ã騩 ª« áâ¥à
EXX EXX
PUSH HL ; ⥪ã騩 ª« áâ¥à PUSH HL ; ⥪ã騩 ª« áâ¥à
EXX EXX
@ -234,7 +245,9 @@ INC_FAT: ; [ ] free clusters for FSInfo
POP DE POP DE
EX DE,HL EX DE,HL
; ;
AND A ; [ ] free clusters for FSInfo
XOR A ; 㬥­ìè¨âì
CALL SET_NEW_FREE_CLUSTERS ; [ ] free clusters for FSInfo
RET RET
;RX01 ;RX01

View File

@ -104,10 +104,8 @@
.BPB_SERIAL_NUMBER DWORD #00000000 .BPB_SERIAL_NUMBER DWORD #00000000
.BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS .BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
.UPD_FSINFO BYTE 0 .UPD_FSINFO BYTE 0
; IF USE_FSINFO_FAT32 .FREE_CLUSTERS_COUNT_L WORD #FFFF
;.FREE_CLUSTERS_COUNT_L WORD #FFFF .FREE_CLUSTERS_COUNT_H WORD #FFFF
;.FREE_CLUSTERS_COUNT_H WORD #FFFF
; ENDIF
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥ ;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“) ;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“)
;.READ_PG: BYTE #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï))) ;.READ_PG: BYTE #00 ;!TODO ­¥ ¨á¯®«ì§ãîâáï ­¥ª®â®àë¥ §­ ç¥­¨ï, ­® § ¤ã¬ª  ­¥¯«®å ï)))

View File

@ -1 +1 @@
978 980

View File

@ -537,9 +537,19 @@ read_disk_info: OR #80
; max sector (LBA28) #0FFF'FFFF ; max sector (LBA28) #0FFF'FFFF
; ;
EX AF,AF' EX AF,AF'
LD A,(.full) LD A,D
OR A AND E
EXX
AND D
AND E
EXX
INC A
JR Z,.no_full_space_option JR Z,.no_full_space_option
LD (.full),A
; ;
; LD A,(.full)
; OR A
; JR Z,.no_full_space_option
EX AF,AF' EX AF,AF'
; ;
; --> (HL':HL)*BC*A, (DE':DE)*BC*A = B':HL'HL, C':DE':DE ; --> (HL':HL)*BC*A, (DE':DE)*BC*A = B':HL'HL, C':DE':DE

View File

@ -1 +1 @@
342 344