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 ; áâ ŕ訊 ­ŽŹĽŕ ἪâŽŕ 
EXX
;
XOR A ; 㬥­ìè¨âì
CALL SET_NEW_FREE_CLUSTERS ; [ ] free clusters for FSInfo
;
CALL WRITE_TO_FAT ; § Ż¨á âě ˘ ŞĽč FAT-  ­ŽŹĽŕ ŞŤ áâĽŕ 
CALL WRITE_FAT_TABLE ; ŻŽ¤ŞŤ. Ą ­Şă ŞĽč  FAT ¨ § Ż¨á âě ĽŁŽ ­  ¤¨áŞ
LD HL,MASKARE

View File

@ -133,28 +133,23 @@ DISKINF: LD C,B
.CheckFreeSpace:; ¥á«¨ GetFreeSpace ­¥ ¢ë§ë¢ ¥âáï
XOR A
OR B
LD A,#FF
LD B,A
LD C,A
LD BC,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L)
EXX
LD B,A
LD C,A
LD BC,(CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H)
EXX
CALL NZ,.GetFreeSpace
CALL NZ,GetFreeSpace
;
;.FRESP2:
; A = 0 if B != 0 before .GetFreeSpace
;
LD H,B
LD L,C
; LD DE,2
; SBC HL,DE
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_L),HL
EX DE,HL
EXX
LD H,B
LD L,C
; LD DE,2
; SBC HL,DE
LD (CORE_BUFFERS.FatBuffer.FREE_CLUSTERS_COUNT_H),HL
EX DE,HL
EXX
LD HL,(CORE_BUFFERS.FatBuffer.MaxClusterLow)
@ -170,8 +165,21 @@ DISKINF: LD C,B
AND A
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 ­®¬¥à ª« áâ¥à  ®â ª®â®à®£® áç¨â âì
XOR A
; fat32
EXX
LD H,A
@ -219,13 +227,6 @@ DISKINF: LD C,B
EXX
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'
;

View File

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

View File

@ -984,6 +984,10 @@ RD_BPB: ; LD C,SLOT3
LD (G_CLUST.low),HL
DEC L
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
RET
;

View File

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

View File

@ -104,10 +104,8 @@
.BPB_SERIAL_NUMBER DWORD #00000000
.BPB_LABEL BLOCK 11,' ' ; 11 ¤«ï FAT, 31 ¤«ï CDFS
.UPD_FSINFO BYTE 0
; IF USE_FSINFO_FAT32
;.FREE_CLUSTERS_COUNT_L WORD #FFFF
;.FREE_CLUSTERS_COUNT_H WORD #FFFF
; ENDIF
.FREE_CLUSTERS_COUNT_L WORD #FFFF
.FREE_CLUSTERS_COUNT_H WORD #FFFF
;.FilesPerSector: BYTE #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
;.ClustersPerBank: BYTE #00 ; A - Clusters per bank (16k) (ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“)
;.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
;
EX AF,AF'
LD A,(.full)
OR A
LD A,D
AND E
EXX
AND D
AND E
EXX
INC A
JR Z,.no_full_space_option
LD (.full),A
; ;
; LD A,(.full)
; OR A
; JR Z,.no_full_space_option
EX AF,AF'
;
; --> (HL':HL)*BC*A, (DE':DE)*BC*A = B':HL'HL, C':DE':DE

View File

@ -1 +1 @@
342
344