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

View File

@ -1 +1 @@
972 982

View File

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

View File

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

View File

@ -1 +1 @@
320 323