mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 17:31:47 +03:00
починил ускорялку фат. в Shell считается правильно свободное место для большого раздела fat32, но не выводится пока корректно
This commit is contained in:
parent
34e1fc6773
commit
ebeb859eb1
@ -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
|
||||
;-----------------------------------------------------------------------
|
||||
;
|
||||
|
||||
@ -1 +1 @@
|
||||
972
|
||||
982
|
||||
@ -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
|
||||
|
||||
@ -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 " "
|
||||
|
||||
@ -1 +1 @@
|
||||
320
|
||||
323
|
||||
Loading…
Reference in New Issue
Block a user