mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-18 19:00:38 +03:00
FSInfo: free clusters count DONE
This commit is contained in:
parent
a904026a45
commit
7c01581aae
@ -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
|
||||||
|
|||||||
@ -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'
|
||||||
|
;
|
||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
;
|
;
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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 ¥ ¨á¯®«ì§ãîâáï ¥ª®â®àë¥ § 票ï, ® § ¤ã¬ª ¥¯«®å ï)))
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
978
|
980
|
||||||
@ -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
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
342
|
344
|
||||||
Loading…
Reference in New Issue
Block a user