mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-16 01:41:17 +03:00
143 lines
2.9 KiB
NASM
143 lines
2.9 KiB
NASM
; [x] fat32 ;!TEST
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #1C. “¤ «¥¨¥ ª â «®£ .
|
||
; Œ®¦® 㤠«¨âì ⮫쪮 ¯ãá⮩ ª â «®£.
|
||
;
|
||
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
;
|
||
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||
////////////////////////////////////////////////////////////////////////
|
||
RMDIR: ;!TEST Current Dir ;[x] 15/10/23
|
||
; [ ] 10/06/24
|
||
IF OLD_DSS_FOR_OLD_EXE
|
||
LD A,(EXE_VERSION)
|
||
OR A
|
||
JR Z,.START
|
||
ENDIF
|
||
;
|
||
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 GETWORD
|
||
RET C
|
||
CALL MASK
|
||
RET C
|
||
;!TEST optimization
|
||
;LD HL,MASKARE
|
||
;LD BC,11
|
||
;LD A,"?"
|
||
;CPIR
|
||
;LD A,DSS_Error.sys.INVALID_NAME
|
||
;SCF
|
||
CALL CHECK_NAME
|
||
;
|
||
RET Z
|
||
CALL LOADDIR
|
||
CALL SEARCH.Dir
|
||
RET C
|
||
; fat32
|
||
LD HL,(HANDBUF+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H)
|
||
EXX
|
||
LD HL,(HANDBUF+FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L)
|
||
PUSH IX ;!TODO record index. ¢®§¬®¦®, çâ® ¬®¦¥â á«®¬ âìáï, ¥á«¨ ¡®«ìè¥ áâà ¨æë
|
||
;
|
||
;!TODO <20>à®æ¥¤ãà ¯®«®£® ¢ëç¨âë¢ ¨ï ª â «®£ (¢á¥ ª« áâ¥àë). Œ®¦® § ¤¥©á⢮¢ âì ¢ ¤àã£¨å ¬¥áâ å
|
||
.read_dir_big_loop:
|
||
PUSH HL
|
||
EXX
|
||
PUSH HL
|
||
EXX
|
||
CALL CLUSTER_TO_SECTOR
|
||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster)
|
||
LD B,A
|
||
; ç¨ ¥¬ ¢ëç¨âë¢ âì ᮤ¥à¦¨¬®¥ ª â «®£ ¯®á¥ªâ®à®
|
||
.read_dir_loop: ;PUSH AF
|
||
PUSH BC
|
||
PUSH HL
|
||
PUSH IX
|
||
;
|
||
; IN A,(SLOT3)
|
||
; PUSH AF
|
||
; IN A,(SLOT0)
|
||
; OUT (SLOT3),A
|
||
; ;
|
||
; LD DE,CORE_BUFFERS.SECTOR_BUFFER+#C000
|
||
; LD BC,1*256 + Dss.DRV.Read
|
||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||
; RST ToDSS.DRV
|
||
; POP AF
|
||
; OUT (SLOT3),A
|
||
CALL READ_SECTOR
|
||
; !FIXIT ¥â ¯à®¢¥àª¨ ®è¨¡ªã
|
||
;
|
||
;!HARDCODE 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 AF
|
||
; DEC A
|
||
; JR NZ,.read_dir_loop
|
||
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
|
||
; |