+ new func DELETE_LFS_RECORDS

This commit is contained in:
Anatoliy Belyanskiy 2024-04-17 03:02:12 +10:00
parent bb5748091c
commit 453d3d6b68
16 changed files with 105 additions and 61 deletions

View File

@ -400,8 +400,8 @@ GETROOT: LD HL,(DIR_FRH)
;
SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
LD IX,DIR-#0020
.SKIPNAM: LD DE,#0020
LD IX,DIR - FAT_DIRECTORY_RECORD
.SKIPNAM: LD DE,FAT_DIRECTORY_RECORD
ADD IX,DE
DEC C
RET Z
@ -428,7 +428,7 @@ SEARCH: LD C,17 ;HANDELS PER SECTOR 512/32 + 1
LD E,XL
LD HL,HANDBUF
EX DE,HL
LD BC,#0020
LD BC,FAT_DIRECTORY_RECORD
LDIR
XOR A
INC A

View File

@ -26,7 +26,7 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23
CALL .OPENATR ;R002
RET C
;!TEST ;[x] 16/11/23 optimize get attribute
LD A,(HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
LD A,(HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT)
;LD B,(IY+_sFM.ATTRIBUT)
;PUSH BC
;CALL CLOSE

View File

@ -55,7 +55,7 @@ CLOSE_FN:
;
;!TEST 9/11/23 record index
; LD HL,DIR
; LD DE,#0020
; LD DE,FAT_DIRECTORY_RECORD
; LD C,(IY+_sFM.HANDLE)
; LD B,(IY+_sFM.HANDLE+1)
; JR .CLOSE2
@ -75,7 +75,7 @@ CLOSE_FN:
;PUSH HL
;SET_PAGE_X DIRPAGE
;POP HL
LD BC,#0020 ;!HARDCODE
LD BC,FAT_DIRECTORY_RECORD
LDIR
OUT (SLOT3),A
CALL SAVEDIR

View File

@ -54,14 +54,14 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23
;
;
;no_file_found
.DO: ; _sFAT_DIRECTORY_RECORD.NAME + .EXT
.DO: ; FAT_DIRECTORY_RECORD.NAME + .EXT
LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
.TMP+1: LD A,0
; _sFAT_DIRECTORY_RECORD.ATTRIBUT
; FAT_DIRECTORY_RECORD.ATTRIBUT
LD (HL),A
INC HL
LD BC,#0A00 ;!HARDCODE

View File

@ -32,15 +32,16 @@ DEL_FN: ;!TEST
.DELETE:
SET_PAGE_X DIRPAGE
EX AF,AF'
LD (IX + _sFAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§­ ª 㤠«¥­¨ï ä ©« 
CALL DELETE_LFN_RECORDS ; [ ] 㤠«¥­¨¥ § ¯¨á¨ LFN
LD (IX + FAT_DIRECTORY_RECORD.NAME),#E5 ; ¯à¨§­ ª 㤠«¥­¨ï ä ©« 
; fat32
LD E,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD A,E
OR D
EXX
LD E,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
LD E,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L) ; ü ¯¥à¢®£® ª« áâ¥à 
LD D,(IX+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
OR D
OR E
;

View File

@ -42,7 +42,7 @@ F_FIRST:
.FIND_S:
INC DE
;!TODO «ãçè¥ âã⠨ᯮ«ì§®¢ âì ª ª ¢ record index ¤«ï ¯¥à¥¡®à  ª â «®£  > #4000 bytes
LD BC,#0020 ;!HARDCODE à §¬¥à ®¤­®© § ¯¨á¨ ª â «®£ 
LD BC,FAT_DIRECTORY_RECORD
ADD IX,BC
LD (F_NEXT.CURHND),IX
LD HL,HANDBUF+12 ;!HARDCODE

View File

@ -53,14 +53,14 @@ MKDIR:
EXX
;
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
LD A,FAT_ATTR.DIRECTORY ;  âਡãâ § ¯¨á¨ ª â «®£ 
; _sFAT_DIRECTORY_RECORD.ATTRIBUT
; FAT_DIRECTORY_RECORD.ATTRIBUT
LD (HL),A
INC HL
LD BC,#0800 ; b=áç¥â稪
@ -68,7 +68,7 @@ MKDIR:
.loop1: LD (HL),C
INC HL
DJNZ .loop1
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
; FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
; fat32 § ¯¨áì áâ à襣® ­®¬¥à  ª« áâ¥à  .FIRST_CLUSTER_H
POP DE
PUSH DE ; áâ à訩 ­®¬¥à ᥪâ®à 
@ -83,12 +83,12 @@ MKDIR:
POP DE ; ¬« ¤è¨© ­®¬¥à ᥪâ®à 
PUSH DE
PUSH BC
; _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L
; FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L
LD (HL),E
INC HL
LD (HL),D
INC HL
; _sFAT_DIRECTORY_RECORD.F_SIZE
; FAT_DIRECTORY_RECORD.F_SIZE
LD BC,#0400 ; b=áç¥â稪
.loop2: LD (HL),C
INC HL
@ -106,9 +106,9 @@ MKDIR:
.loop3: INC HL
LD (HL),C
DJNZ .loop3
; ᪮¯¨à®¢ âì ¡ ©âë 11..31 _sFAT_DIRECTORY_RECORD
; ᪮¯¨à®¢ âì ¡ ©âë 11..31 FAT_DIRECTORY_RECORD
INC HL
LD DE,HANDBUF+_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
LD DE,HANDBUF+FAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
EX DE,HL
LD BC,21 ; !HARDCODE
LDIR
@ -126,7 +126,7 @@ MKDIR:
SET_PAGE_X DIRPAGE
PUSH AF
;
LD DE,DIRPAGE.buffer + _sFAT_DIRECTORY_RECORD.ATTRIBUT ;  âਡãâë § ¯¨á¨
LD DE,DIRPAGE.buffer + FAT_DIRECTORY_RECORD.ATTRIBUT ;  âਡãâë § ¯¨á¨
;
LD A,(DIRPAGE.buffer)
CP "."
@ -134,14 +134,14 @@ MKDIR:
;
;LD IX,HANDBUF
XOR A
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),A
LD (HANDBUF + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1),A
LD DE,HANDBUF + _sFAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L),A
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1),A
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H),A
LD (HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1),A
LD DE,HANDBUF + FAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª   âਡã⮢ ä ©« 
.copy_dir_record:
EX DE,HL
LD BC,HANDBUF.SIZE - _sFAT_DIRECTORY_RECORD.ATTRIBUT ; 21
LD BC,HANDBUF.SIZE - FAT_DIRECTORY_RECORD.ATTRIBUT ; 21
LDIR
POP AF
OUT (SLOT3),A
@ -151,7 +151,7 @@ MKDIR:
LD E,L
INC DE
LD (HL),0
LD BC,512-65 ;!HARDCODE
LD BC,512-65 ;!HARDCODE sector size
LDIR
;
POP HL ; áâ à訩 ­®¬¥à ᥪâ®à 
@ -182,7 +182,7 @@ MKDIR:
JR Z,.skip_clean
;
LD DE,CORE_BUFFERS.SECBUF+1
LD BC,511 ;!HARDCODE
LD BC,511 ;!HARDCODE sector size
LD (HL),0
LDIR
.skip_clean: ;

View File

@ -61,12 +61,17 @@ RENAME: ;!TEST Current Dir ;[x] 15/10/23
RET C
SET_PAGE_X DIRPAGE
EX AF,AF'
;
LD HL,MASKARE
LD D,XH
LD E,XL
LD BC,11
LDIR
LDIR
;
CALL DELETE_LFN_RECORDS ; [ ] 膉𠼻平言 <20>祠嶁 LFN
;
EX AF,AF'
OUT (SLOT3),A
JP SAVEDIR
;

View File

@ -39,9 +39,9 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
CALL SEARCH.Dir
RET C
; fat32
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
LD HL,(HANDBUF+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
EXX
LD HL,(HANDBUF+_sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
LD HL,(HANDBUF+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
PUSH IX ;!TODO record index. ¢®§¬®¦­®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ­¨æë
;
;!TODO <20>à®æ¥¤ãà  ¯®«­®£® ¢ëç¨â뢠­¨ï ª â «®£  (¢á¥ ª« áâ¥àë). Œ®¦­® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
@ -83,13 +83,13 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23
JR Z,.next_record
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥­¨ï ä ©« 
JR Z,.next_record
LD DE,_sFAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢
LD DE,FAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â   âਡã⮢
ADD HL,DE
LD A,(HL)
SBC HL,DE
AND FAT_ATTR.VOLUME_ID
JP Z,.error ;DIR NOT EMPTY
.next_record: LD DE,#0020
.next_record: LD DE,FAT_DIRECTORY_RECORD
ADD HL,DE
DJNZ .check_dir_loop
;

View File

@ -28,15 +28,15 @@
//SPRINTER EQU 2000
includelua 'Shared_includes/lua/Functions.lua'
INCLUDE 'defines.inc'
include 'shared_includes/structures/FileSystem.inc'
include 'shared_includes/constants/sp2000.inc'
INCLUDE 'defines.inc'
include 'Structures.inc'
include 'shared_includes/constants/standart_colors.inc'
include 'shared_includes/constants/bios_equ.inc'
include 'shared_includes/constants/dss_equ.inc'
include 'shared_includes/structures/FileSystem.inc'
include 'shared_includes/macroses/accelerator.z80'
include 'shared_includes/macroses/macros.z80'
include 'Structures.inc'
INCLUDE 'VERSION.INC'
INCLUDE 'DSS_MACROSES.Z80'
@ -605,11 +605,14 @@ DEPLOY: ;Allocate memory
DISPLAY "Space for DRV-MAIN: ",/A,#4000-$," bytes."
DRV_CONTENT:
DISP 0
INCLUDE 'DRV-MAIN.ASM'
INCLUDE 'DRV-MAIN.ASM'
ENT
DRV_CONTENT.SIZE EQU $-DRV_CONTENT
DISPLAY "END ADDRESS: ",/H,$
BIN_END_ADDRESS EQU $
DISPLAY "END ADDRESS: ",/H,BIN_END_ADDRESS
DISPLAY "Memory leacks when > ",/H, #4000+SUBLOAD_SIZE*512
ASSERT $ < (#4001+SUBLOAD_SIZE*512),'-> Memory leack!!!';
ASSERT DRV_CONTENT.SIZE < #4001,'-> Drivers code size > #4000!!!';

View File

@ -9,6 +9,41 @@
;R07 17-12-1999 DNS BUG FIX SIGNATURE #55AA AT 510 OFFSET
;---------------------------------------------------------------
;----------------------------------------------------------------------;
; [ ] 㤠«¥­¨¥ § ¯¨á¨ LFN
;
; ¢å®¤: IX = ⥪ãé ï § ¯¨áì ¢ áâà ­¨æ¥ á ª â «®£®¬ FAT
; ¤«ï ª®â®à®© ­ ¤® 㤠«¨âì § ¯¨á¨ LFS
DELETE_LFN_RECORDS:
PUSH IX
LD A,XH
AND #C0
SUB 1
LD C,A
; ॣ¨áâॠC ¬ áª  ¤«ï ®¯à¥¤¥«¥­¨ï ¢ë室  §  ¯à¥¤¥«ë áâà ­¨æë
;
.find_LFN: LD DE, -(FAT_DIRECTORY_RECORD)
LD A,FAT_ATTR.LFS_Entry
;
.loop: ADD IX,DE
LD A,XH
CP C
JR Z,.beyond_boundaries
;
LD A,FAT_ATTR.LFS_Entry
CP (IX+FAT_DIRECTORY_RECORD.ATTRIBUT)
JR NZ,.exit
LD (IX+FAT_DIRECTORY_RECORD.NAME),#E5
JR .loop
;
.exit: AND A
.beyond_boundaries: ; !TODO ¯®¤£à㧪  ¤à㣮© ç á⨠ª â «®£ . ¯®ª  § £«ã誠
POP IX
RET
;----------------------------------------------------------------------;
; <20>®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ª â «®£ 
;
; ¢å®¤: a =  âਡãâ § ¯¨á¨
@ -43,12 +78,12 @@ SEARCH:
; LD DE,0
; EXX
;
.loop: LD A,(IX+_sFAT_DIRECTORY_RECORD.NAME)
.loop: LD A,(IX+FAT_DIRECTORY_RECORD.NAME)
OR A
JR Z,.error_file_not_found
CP #E5 ;!HARDCODE #E5 - § ¯¨áì ¢ ¤¨à¥ªâ®à¨¨ ᢮¡®¤­ , â ª ª ª ä ©«/¤¨à¥ªâ®à¨ï ¡ë«¨ 㤠«¥­ë
JR Z,.next_record
LD A,(IX+_sFAT_DIRECTORY_RECORD.ATTRIBUT)
LD A,(IX+FAT_DIRECTORY_RECORD.ATTRIBUT)
AND C
JR NZ,.next_record
LD HL,MASKARE
@ -93,7 +128,7 @@ SEARCH:
; INC DE
; EXX
;
LD DE,#0020 ;!HARDCODE
LD DE,FAT_DIRECTORY_RECORD
ADD IX,DE
JR NC,.loop
.error_too_many_files:
@ -122,7 +157,7 @@ SEARCH:
; CALL LOADDIR
; POP DE
; LD HL,DIR
; LD BC,#0020
; LD BC,FAT_DIRECTORY_RECORD
;G_HAND2:
; LD A,D
; OR E
@ -178,12 +213,12 @@ FINDDIR:
PUSH AF
LD IX,DIRPAGE.buffer
.big_loop:
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME)
LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
OR A
JR Z,.error
CP #E5
JR Z,.next_step
LD A,(IX + _sFAT_DIRECTORY_RECORD.ATTRIBUT)
LD A,(IX + FAT_DIRECTORY_RECORD.ATTRIBUT)
AND FAT_ATTR.DIRECTORY
JR Z,.next_step
LD HL,MASKARE
@ -201,10 +236,10 @@ FINDDIR:
INC DE
DJNZ .loop
;
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME)
LD A,(IX + FAT_DIRECTORY_RECORD.NAME)
CP "."
JP NZ,.ADDSPEC
LD A,(IX + _sFAT_DIRECTORY_RECORD.NAME + 1)
LD A,(IX + FAT_DIRECTORY_RECORD.NAME + 1)
CP "."
JP NZ,.IT_DIR
LD HL,WorkDirectory
@ -231,7 +266,7 @@ FINDDIR:
JP .IT_DIR
;
.next_step:
LD BC,#0020 ;!HARDCODE
LD BC,FAT_DIRECTORY_RECORD
ADD IX,BC
JR NC,.big_loop
;
@ -293,12 +328,12 @@ FINDDIR:
; ; JP IT_DIR
;
.IT_DIR:; fat32
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H+1)
LD YH,D
LD YL,E
LD E,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
LD D,(IX + _sFAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
LD E,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
LD D,(IX + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L+1)
POP AF
OUT (SLOT3),A
AND A
@ -534,7 +569,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
; LD DE,0
; EXX
;
LD BC,#0020
LD BC,FAT_DIRECTORY_RECORD
.loop: ;LD A,(IX+00)
LD A,(HL)
OR A

View File

@ -1233,12 +1233,12 @@ WRITE_DATE_TIME_TO_DIRECTORY_RECORD:
CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
POP HL
; _sFAT_DIRECTORY_RECORD.TIME
; FAT_DIRECTORY_RECORD.TIME
LD (HL),E ; de=¢à¥¬ï
INC HL
LD (HL),D
INC HL
; _sFAT_DIRECTORY_RECORD.DATE
; FAT_DIRECTORY_RECORD.DATE
LD (HL),C ; ¤¥­ì
INC HL
LD (HL),B ; ¬¥áïæ

View File

@ -37,7 +37,7 @@
; .DATE: WORD #0000 ;+ #18 +24 DATE
; .FIRST_CLUSTER_L: WORD #0000 ;+ #1A +26 START CLUSTER ; [ ] fat32
; .F_SIZE: DWORD #00000000 ;+ #1C +28 SIZE FILE
.FS_REC _sFAT_DIRECTORY_RECORD
.FS_REC FAT_DIRECTORY_RECORD
; from Core
.F_POSITION DWORD #00000000 ;+ #20 +32 FILE POSITION (FP)
.DIR_CLUSTER_L WORD #0000 ;+ #24 +36 DIRECTORY CLUSTER LOW

View File

@ -1 +1 @@
951
952

View File

@ -129,7 +129,7 @@ ENVADDR EQU #E400
;FAT_CACHE EQU #C000
FMCOUNT EQU 10 ; Š®«¨ç¥á⢮ ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢
HANDBUF.SIZE EQU 32 ; !HARDCODE _sFAT_DIRECTORY_RECORD
HANDBUF.SIZE EQU FAT_DIRECTORY_RECORD
;----------------------------------------------------;
;

@ -1 +1 @@
Subproject commit 17acd882094d59946a9cd430a03e736e36fea49b
Subproject commit 73f764ccd1ab8de8dea7eef3b4f5cd27e2ea8dab