mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
119 lines
2.6 KiB
NASM
119 lines
2.6 KiB
NASM
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #1C. “¤ «¥¨¥ ª â «®£ .
|
||
; Œ®¦® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
|
||
;
|
||
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
;
|
||
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||
////////////////////////////////////////////////////////////////////////
|
||
RMDIR: ; Current Dir 15/10/23
|
||
PUSH HL
|
||
CALL DIR_PATH_CHECK
|
||
POP HL
|
||
RET C
|
||
CALL .START
|
||
PUSH AF
|
||
LD HL,CORE_BUFFERS.CurrentDirectory
|
||
CALL CHDIR
|
||
CALL DIR_PATH_CHANGE.Current
|
||
POP AF
|
||
RET
|
||
;
|
||
.START: CALL SetPath_GetName
|
||
RET C
|
||
; [x] 26/06/2024 {64 kb cluster}
|
||
CALL CHECK_64kb_CLUSTER
|
||
RET C
|
||
;
|
||
CALL MASK
|
||
RET C
|
||
;
|
||
CALL CHECK_NAME
|
||
RET Z
|
||
;
|
||
CALL LOADDIR ; [ ] big dir ; !FIXIT ¤ã¡«¨àã¥â ¤¥©á⢨¥ ¨§ SetPath_GetName?
|
||
CALL SEARCH.Dir
|
||
RET C
|
||
; fat32 ; [ ] CDFS
|
||
LD HL,(CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
|
||
EXX
|
||
LD HL,(CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||
PUSH IX ;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
||
;
|
||
;!FIXIT ;[ ] big dir. ¯à®¢¥àïâì, çâ® ¯ãá⮩ ç¥à¥§ ®¢ë© ¢ë§®¢ Find.
|
||
;!TODO <20>à®æ¥¤ãà ¯®«®£® ¢ëç¨âë¢ ¨ï ª â «®£ (¢á¥ ª« áâ¥àë). Œ®¦® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
|
||
.read_dir_big_loop:
|
||
PUSH HL
|
||
EXX
|
||
PUSH HL
|
||
EXX
|
||
CALL CLUSTER_TO_SECTOR
|
||
LD A,(CORE_BUFFERS.FS_Buffer.SectorsPerCluster)
|
||
LD B,A
|
||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||
.read_dir_loop: ;PUSH AF
|
||
PUSH BC
|
||
PUSH HL
|
||
PUSH IX
|
||
CALL READ_SECTOR
|
||
; !FIXIT ¥â ¯à®¢¥àª¨ ®è¨¡ªã
|
||
;
|
||
;!HARDCODE sector size. 16 * 32 = 512; 32 - à §¬¥à § ¯¨á¨, 512 - à §¬¥à áç¨â ®£® ᥪâ®à
|
||
LD B,16
|
||
LD HL,CORE_BUFFERS.SECTOR_BUFFER
|
||
.check_dir_loop:;
|
||
LD A,(HL)
|
||
OR A
|
||
JP Z,.dir_empty
|
||
CP "."
|
||
JR Z,.next_record
|
||
CP #E5 ;!HARDCODE ¡ ©â 㤠«¥¨ï ä ©«
|
||
JR Z,.next_record
|
||
LD DE,FAT_DIRECTORY_RECORD.ATTRIBUT ; ᬥé. ¤® ¡ ©â âਡã⮢
|
||
ADD HL,DE
|
||
LD A,(HL)
|
||
SBC HL,DE
|
||
AND FAT_ATTR.VOLUME_ID
|
||
SCF
|
||
JP Z,.error ;DIR NOT EMPTY
|
||
.next_record: LD DE,FAT_DIRECTORY_RECORD
|
||
ADD HL,DE
|
||
DJNZ .check_dir_loop
|
||
;
|
||
POP IX
|
||
POP HL
|
||
INC IX
|
||
LD A,XH
|
||
OR XL
|
||
JR NZ,.no_inc_hl
|
||
INC HL
|
||
.no_inc_hl: POP BC
|
||
DJNZ .read_dir_loop
|
||
; fat32
|
||
EXX
|
||
POP HL ; ®¬¥à ª« áâ¥à
|
||
EXX
|
||
POP HL ; ®¬¥à ª« áâ¥à
|
||
CALL READ_FROM_FAT ; ¯à®ç¨â âì ¨§ ª¥è FAT- ®¬¥à á«¥¤. ª« áâ¥à
|
||
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||
EXX
|
||
EX DE,HL ; hl=®¬¥à á«¥¤. ª« áâ¥à
|
||
EXX
|
||
JR NC,.read_dir_big_loop ; ¥ ª®¥æ 楯®çª¨
|
||
;
|
||
.delete: POP IX
|
||
JP DELETE_REC_FAT ; ¯®¬¥â¨âì § ¯¨áì ª ª "㤠«¥ ï"
|
||
;
|
||
.dir_empty: ; CF = 0
|
||
.error: ; CF = 1
|
||
POP HL
|
||
POP HL
|
||
POP HL
|
||
POP HL
|
||
POP HL
|
||
JR NC,.delete
|
||
POP HL
|
||
LD A,DSS_Error.sys.DIR_NOT_EMPTY
|
||
RET
|
||
; |