починил ускорялку фат. в Shell считается правильно свободное место для большого раздела fat32, но не выводится пока корректно

This commit is contained in:
Anatoliy Belyanskiy 2024-04-26 06:20:12 +10:00
parent 34e1fc6773
commit ebeb859eb1
5 changed files with 177 additions and 155 deletions

View File

@ -16,30 +16,30 @@
; “¤ «ï¥â § ¯¨áì ¢ ª â «®£¥ ¨ ®á¢®¡®¦¤ ¥â § ­ïâãî æ¥¯®çªã ª« áâ¥à®¢
; ‚室: IX - 㪠§ â¥«ì ­  㤠«ï¥¬ãî § ¯¨áì ¢ DIRPAGE
;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
DELETE_REC_FAT: SET_PAGE_X DIRPAGE
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
LD L,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à 
LD H,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD A,L
OR H
EXX
LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
OR E
OR D
LD L,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD H,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
OR L
OR H
;
EX AF,AF'
OUT (SLOT3),A
EX AF,AF'
JP Z,SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
; ¥á«¨ à §¬¥à ä ©«  ­¥ ­®«ì
.loop: EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
EXX
EX DE,HL
EXX
.loop: ;EX DE,HL ; hl=­®¬¥à ª« áâ¥à 
;EXX
; EX DE,HL
;EXX
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è  FAT-  ­®¬¥à á«¥¤. ª« áâ¥à 
EXX
PUSH DE ; ­®¬¥à á«¥¤. ª« áâ¥à 
@ -52,11 +52,13 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
;
LD DE,#0000 ; ­®¬¥à ª« áâ¥à 
CALL WRITE_TO_FAT.Custom ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
POP DE
POP HL
EXX
POP AF
POP DE
POP HL
;EX DE,HL
EXX
;EX DE,HL
JP NC,.loop
CALL WRITE_FAT_TABLE
JP SAVEDIR ; á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
@ -64,17 +66,18 @@ DELETE_REC_FAT: SET_PAGE_X DIRPAGE
; “áâ ­®¢¨âì ¯¥à¢ë¬ ¨§¢¥áâ­ë¬ ª« áâ¥à®¬ ¤«ï ¯®¨áª  ᢮¡®¤­®£®.
; “áâ ­®¢¨âáï ⮫쪮 ¥á«¨ ¬¥­ìè¥ ¯à¥¤ë¤ã饣®
; ‚室: HL':HL - cluster
; ¯®àâ¨â DE, BC' ¨ A
; [x] à ­ìè¥ ¡ë« è ­á 㯥à¥âìáï ¢ "DISK FULL" ¥á«¨ G_CLUST 㪠§ë¢ « ­  ª« áâ¥à ¤ «ìè¥, 祬 ¤à㣮© ᢮¡®¤­ë©
SET_NEW_FREE_CLUSTER:
XOR A
LD B,D
LD C,E
;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
;LD D,B
;LD E,C
;
EXX
LD B,D
@ -327,12 +330,12 @@ READ_FROM_FAT: CALL CHECK_CLUSTER_IS_SMALLER
; ‚室: HL - <20>®¬¥à ¯¥à¢®© ï祩ª¨ ª« áâ¥à  ¢ ¡«®ª¥ ä â 
; <20>®àâ¨âì ⮫쪮 HL ¨ A
SET_FAT32_CACHE_BLOCK_CHANGED_REGION:
DEC HL
LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
CP FAT_TYPE.x16 + 1
JR C,.start
DEC HL
DEC HL
;DEC HL
;LD A,(CORE_BUFFERS.FatBuffer.FAT_TYPE)
;CP FAT_TYPE.x16 + 1
;JR C,.start
;DEC HL
;DEC HL
;
.start: LD A,H
AND #38
@ -340,6 +343,7 @@ SET_FAT32_CACHE_BLOCK_CHANGED_REGION:
JR Z,.set_region
;
.loop: SLA H
AND A
SUB L
JR NZ,.loop
;
@ -716,7 +720,7 @@ WRITE_FAT_TABLE:
LD E,A
;
.good_blk: SRL C
JR C,.SAVE_FAT_CACHE_REGION
CALL C,.SAVE_FAT_CACHE_REGION
EXX
ADD HL,DE
EXX
@ -731,26 +735,33 @@ WRITE_FAT_TABLE:
PUSH AF
PUSH DE
PUSH BC
PUSH HL
PUSH IX
;
EXX
PUSH HL
PUSH HL
EXX
LD B,E ; ª®«-¢® ᥪâ®à®¢
POP DE ; €¤à¥á ¢ áâà ­¨æ¥ Š<>˜ 
LD A,(CORE_BUFFERS.FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD C,Dss.DRV.Write
RST ToDSS.DRV
PUSH DE
; HL:IX = Sector + Sector counter
; DE = Address + (Sector counter * Size sector)
EXX
POP HL
POP HL ;  ¤à¥á ¢ áâà ­¨æ¥ Š<>˜ 
LD DE,#0800 ;!HARDCODE à §¬¥à ॣ¨®­  ¢ ¡«®ª¥ Š<>˜  FAT (¡ ©â®¢)
EXX
;
POP IX
POP HL
POP BC
POP DE
POP AF
DJNZ .region_loop
RET
; DJNZ .region_loop
; RET
ENDIF
;-----------------------------------------------------------------------
;

View File

@ -1 +1 @@
972
982

View File

@ -29,7 +29,7 @@
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
DEFINE USE_FSINFO_FAT32 1 ; ­¥¤®¤¥« ­®. ­ã¦­® «¨?
DEFINE CHANGE_FREE_CLU_AFTER_DEL 1
DEFINE FAST_FAT_CASHE 0 ; !FIXIT ¡ £¨ ¯à¨ áâ¨à ­¨¨
DEFINE FAST_FAT_CASHE 1 ; !FIXIT ¡ £¨ ¯à¨ áâ¨à ­¨¨
SERVICE_SECTORS:
.FAT12 EQU #0FEF

View File

@ -291,7 +291,7 @@ A89A4: ld a,(ix+32)
ld h,(ix+31)
exx
push ix
call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
call MAKE_LN ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
ld hl,T8B37
ld a,(hl)
cp " "
@ -299,7 +299,7 @@ A89A4: ld a,(ix+32)
ld a,"0"
ld (hl),a
A89CD: ld de,T8B46 ; "0 000 000 000"
ld hl,T8B2E ; "0000000000"
ld hl,L32BIT_ ; "0000000000"
ldi
ld a," "
ld (de),a
@ -411,89 +411,100 @@ A8A7E: ld c,2Fh
;!TODO ¯¥à¥â é¨âì ¢ procedures/math.asm
; „¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
A8A8F: ld ix,T8B2E ; "0000000000"
exx
ld de,3B9Ah
exx
ld de,0CA00h
call A8B15 ; 1,000,000,000
exx
ld de,05F5h
exx
ld de,0E100h
call A8B15 ; 100,000,000...999,999,999
exx
ld de,98h
exx
ld de,9680h
call A8B15 ; 10,000,000...99,999,999
exx
ld de,0Fh
exx
ld de,4240h
call A8B15 ; 1,000,000...9,999,999
exx
ld de,1
exx
ld de,86A0h
call A8B15 ; 100,000...999,999
exx
ld de,0
exx
ld de,10000
call A8B15 ; 10,000...99,999
exx
ld de,0
exx
ld de,1000
call A8B15 ; 1,000...9,999
exx
ld de,0
exx
ld de,100
call A8B15 ; 100..999
exx
ld de,0
exx
ld de,10
call A8B15 ; 10..99
ld a,l
add a,"0"
ld (ix+0),a
inc ix
ld hl,T8B2E ; "0000000000"
ld de,2030h ; " ","0"
A8B04: ld a,(hl)
cp e
jr nz,A8B0D
ld (hl),d
inc hl
jr A8B04
;
A8B0D: ld hl,T8B37 ; "0"
ld a,(hl)
cp d
ret nz
ld (hl),e
ret
; HL':HL - ç¨á«® ¤«ï ¯¥à¥¢®¤ 
MAKE_LN: ld ix,L32BIT_ ; "0000000000"
exx
ld de,#3B9A
exx
ld de,#CA00
; DE':DE = 1,000,000,000
call GET_DIG
exx
ld de,#05F5
exx
ld de,#E100
; DE':DE = 100,000,000
call GET_DIG ; 100,000,000...999,999,999
exx
ld de,#98
exx
ld de,#9680
; DE':DE = 10,000,000
call GET_DIG ; 10,000,000...99,999,999
exx
ld de,#0F
exx
ld de,#4240
; DE':DE = 1,000,000
call GET_DIG ; 1,000,000...9,999,999
exx
ld de,#01
exx
ld de,#86A0
; DE':DE = 100,000
call GET_DIG ; 100,000...999,999
exx
ld de,#00
exx
ld de,#2710
; DE':DE = 10,000
call GET_DIG ; 10,000...99,999
exx
ld de,#00
exx
ld de,#03E8
; DE':DE = 1,000
call GET_DIG ; 1,000...9,999
exx
ld de#00
exx
ld de,#64
; DE':DE = 100
call GET_DIG ; 100..999
exx
ld de,#00
exx
ld de,#0A
; DE':DE = 10
call GET_DIG ; 10..99
ld a,l
add a,"0"
ld (ix+0),a
inc ix
ld hl,L32BIT_ ; "0000000000"
ld de,#2030 ; " ","0"
.KILLZ: ld a,(hl)
cp e
jr nz,.KILLZ2
ld (hl),d
inc hl
jr .KILLZ
;
.KILLZ2: ld hl,T8B37 ; "0"
ld a,(hl)
cp d
ret nz
ld (hl),e
ret
A8B15: xor a
A8B16: inc a
sbc hl,de
exx
sbc hl,de
exx
jp nc,A8B16
add hl,de
exx
adc hl,de
exx
dec a
add a,"0"
ld (ix+0),a
inc ix
ret
GET_DIG: xor a
.loop: inc a
sbc hl,de
exx
sbc hl,de
exx
jp nc,.loop
;
add hl,de
exx
adc hl,de
exx
dec a
add a,"0"
ld (ix+0),a
inc ix
ret
;
D88DC: WORD 0
@ -505,11 +516,11 @@ free_space_medium: WORD 0
free_space_high: BYTE 0
;
T8B2E: db "000000000"
T8B37: db "0"
T8B38: db "<DIR> ",0
T8B46: db "0 000 000 000",0
db 0
L32BIT_: db "000000000"
T8B37: db "0"
T8B38: db "<DIR> ",0
T8B46: db "0 000 000 000",0
db 0
;
; [x] ⥯¥àì ­¥ «¥§¥â ­ ¯àï¬ãî, ¤¥« ¥â ç¥à¥§ ­®¢ë© ¯ à ¬¥âà ä㭪樨 DskInfo
@ -523,18 +534,17 @@ read_disk_info: OR #80
; ” ©«®¢ ï á¨á⥬ 
; ‘¥à¨©­ë© ­®¬¥à ¤¨áª 
; Œ¥âª  ¤¨áª  ¢ BPB
;
; HL':HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; DE':DE - ᢮¡®¤­ëå ª« áâ¥à®¢
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
; max sector (LBA28) #0FFF'FFFF
;
EX AF,AF'
LD A,(.full)
OR A
JR Z,.no_full_space_option
;
; max sector (LBA28) #0FFF'FFFF
; HL - ®¡é¥¥ ª®«-¢® ª« áâ¥à®¢
; DE - ᢮¡®¤­ëå ª« áâ¥à®¢ low
; DE' - ᢮¡®¤­ëå ª« áâ¥à®¢ high
; A - à §¬¥à ª« áâ¥à  ¢ ᥪâ®à å
; BC - à §¬¥à ᥪâ®à  ¢ ¡ ©â å
PUSH IX
;
PUSH BC ; à §¬¥à ᥪâ®à  ¢ ¡ ©â å
EX AF,AF'
@ -547,45 +557,46 @@ read_disk_info: OR #80
; A:HL = DE*C
;
; free_clu_H * clu_size_in_sect
EXX
EX AF,AF'
LD C,A
PUSH BC
CALL Mult16X8 ; DE*C = A:HL
; max #0FFF'FFFF sectors for LBA28
EX AF,AF'
LD D,0
LD E,A
ADD HL,DE
EXX
; HL':HL - ᢮¡®¤­ëå ᥪâ®à®¢
LD C,A
CALL Mult16X8 ; DE*C = A:HL
; A:HL = DE*C
; max #0FFF'FFFF sectors for LBA28
EX AF,AF'
LD D,0
LD E,A
ADD HL,DE
EXX
;
EX DE,HL
; HL':DE - ᢮¡®¤­ëå ᥪâ®à®¢
;
POP BC ; à §¬¥à ᥪâ®à  ¢ ¡ ©â å
PUSH BC
CALL Mult_16x16 ; DE*BC = HL:DE.
EXX
POP BC
CALL Mult_16x16 ; DE*BC = HL:DE.
LD XH,D
LD XL,E
EXX
EX DE,HL
ADD IX,DE
POP BC
EX DE,HL
CALL Mult_16x16 ; DE*BC = HL:DE.
LD XH,D
LD XL,E
EXX
JR NC,.no_inc_HL
INC L
EX DE,HL
ADD IX,DE
EX DE,HL
EXX
JR NC,.no_inc_HL
INC L
; ¯®â®¬ã çâ® ­¥ ¤®«¦­® ¡ëâì ¡®«ìè¥ #001F'FFFF'FE00
; ¯à¨ ᥪâ®à¥ ¢ 512 ¡ ©â®¢
;
.no_inc_HL: LD A,L
LD (free_space_high),A
LD (free_space_medium),IX
.no_inc_HL: ;
LD A,L
LD (free_space_high),A
LD (free_space_medium),IX
EXX
LD (free_space_low),DE
POP IX
;
;
.no_full_space_option:
; parse
LD D,0
@ -767,7 +778,7 @@ cmd_dir_pause:
jp cmd_dir.parse
///////////////////////////////////////////////////////////////////////////////////////
Size2Char:
call A8A8F ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
call MAKE_LN ; ¤¥áïâ¨ç­ë© 32-å à §àï¤­ë© ¢ë¢®¤
ld hl,T8B37 ; "0"
ld a,(hl)
cp " "
@ -776,7 +787,7 @@ Size2Char:
ld (hl),a
.not_zero:
ld de,T8B46 ; "0 000 000 000"
ld hl,T8B2E ; "0000000000"
ld hl,L32BIT_ ; "0000000000"
ld a,(hl)
ldi
cp " "

View File

@ -1 +1 @@
320
323