mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
207 lines
4.6 KiB
NASM
207 lines
4.6 KiB
NASM
; [x] fat32 ;!TEST
|
||
////////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #1B. ‘®§¤ ¨¥ ª â «®£ .
|
||
;
|
||
; ¢å®¤: HL - 㪠§ â¥«ì ¨¬ï ª â «®£
|
||
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
|
||
;
|
||
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
|
||
////////////////////////////////////////////////////////////////////////
|
||
MKDIR:
|
||
;error
|
||
.DIR_EXISTS: LD A,DSS_Error.sys.DIR_EXISTS
|
||
CCF
|
||
RET
|
||
;
|
||
; Entry point ;!TEST Current Dir ;[x] 15/10/23
|
||
.B: PUSH HL
|
||
CALL DIR_PATH_CHECK
|
||
POP HL
|
||
RET C
|
||
CALL .START
|
||
PUSH AF
|
||
LD HL,CurrentDirectory
|
||
CALL CHDIR
|
||
POP AF
|
||
RET
|
||
;
|
||
.START: CALL GETWORD ; â¥áâ ¤®¯ãáâ. ¨¬ï ¨ áâà. ¤¨áª
|
||
RET C
|
||
;LD HL,TMPNAME ; 8.3 ¨¬ï
|
||
;LD DE,MASKARE ; ¡ãä¥à ¨¬¥¨ 11 ᨬ¢. ä®à¬ â
|
||
CALL MASK ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
|
||
RET C
|
||
;!TEST optimization à ¥¥ GETWORD 㦥 § £à㧨« ¤¨à¥ªâ®à¨î
|
||
;CALL LOADDIR ; ¯à®ç¨â âì ᯨ᮪ ª â «®£
|
||
;
|
||
CALL SEARCH.Dir ; ¯®¨áª § ¯¨á¨ ª â «®£ ¢ ᯨ᪥ ¤¨áª
|
||
; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024
|
||
; LD A,DSS_Error.sys.DIR_EXISTS
|
||
; CCF
|
||
; RET C ; ª â «®£ ©¤¥
|
||
JR NC,.DIR_EXISTS
|
||
CP DSS_Error.sys.FILE_NOT_FOUND
|
||
SCF
|
||
RET NZ
|
||
;
|
||
CALL G_CLUST
|
||
RET C
|
||
; fat32
|
||
PUSH HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||
EXX
|
||
PUSH HL ; áâ à訩 ®¬¥à ᥪâ®à
|
||
EXX
|
||
;
|
||
XOR A ; 㬥ìè¨âì
|
||
CALL SET_NEW_FREE_CLUSTERS ; [ ] free clusters for FSInfo
|
||
;
|
||
CALL WRITE_TO_FAT ; § ¯¨á âì ¢ ª¥è FAT- ®¬¥à ª« áâ¥à
|
||
CALL WRITE_FAT_TABLE ; ¯®¤ª«. ¡ ªã ª¥è FAT ¨ § ¯¨á âì ¥£® ¤¨áª
|
||
LD HL,MASKARE
|
||
LD DE,HANDBUF
|
||
LD BC,11
|
||
LDIR
|
||
EX DE,HL
|
||
LD A,FAT_ATTR.DIRECTORY ; âਡãâ § ¯¨á¨ ª â «®£
|
||
; FAT_DIRECTORY_RECORD.ATTRIBUT
|
||
LD (HL),A
|
||
INC HL
|
||
LD BC,#0800 ; b=áç¥â稪
|
||
;
|
||
.loop1: LD (HL),C
|
||
INC HL
|
||
DJNZ .loop1
|
||
; FAT_DIRECTORY_RECORD.FIRST_CLUSTER_H
|
||
; fat32 § ¯¨áì áâ à襣® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_H
|
||
POP DE
|
||
PUSH DE ; áâ à訩 ®¬¥à ᥪâ®à
|
||
LD (HL),E
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
;
|
||
CALL WRITE_DATE_TIME_TO_DIRECTORY_RECORD
|
||
; § ¯¨áì ¬« ¤è¥£® ®¬¥à ª« áâ¥à .FIRST_CLUSTER_L
|
||
POP BC ; áâ à訩 ®¬¥à ᥪâ®à
|
||
POP DE ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||
PUSH DE
|
||
PUSH BC
|
||
; FAT_DIRECTORY_RECORD.FIRST_CLUSTER_L
|
||
LD (HL),E
|
||
INC HL
|
||
LD (HL),D
|
||
INC HL
|
||
; FAT_DIRECTORY_RECORD.F_SIZE
|
||
LD BC,#0400 ; b=áç¥â稪
|
||
.loop2: LD (HL),C
|
||
INC HL
|
||
DJNZ .loop2
|
||
;
|
||
CALL WRT_HND ; ᪮¯¨à. ®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª (ª â «®£ )
|
||
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£ ¤¨áª
|
||
;
|
||
; á®§¤ ñ¬ á«ã¦¥¡ë¥ ª â «®£¨ "." ¨ ".." ¢ á®§¤ ®¬ ª â «®£¥
|
||
; Š€’€‹Žƒ "."
|
||
LD HL,CORE_BUFFERS.SECTOR_BUFFER ; ¡ãä¥à
|
||
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£
|
||
LD BC,10*256 + ' ' ; !HARDCODE b=áç¥â稪, c=¯à®¡¥«
|
||
;
|
||
.loop3: INC HL
|
||
LD (HL),C
|
||
DJNZ .loop3
|
||
; ᪮¯¨à®¢ âì ¡ ©âë 11..31 FAT_DIRECTORY_RECORD
|
||
INC HL
|
||
LD DE,HANDBUF+FAT_DIRECTORY_RECORD.ATTRIBUT ; ï祩ª âਡã⮢ ä ©«
|
||
EX DE,HL
|
||
LD BC,21 ; !HARDCODE
|
||
LDIR
|
||
; Š€’€‹Žƒ ".."
|
||
EX DE,HL
|
||
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£
|
||
INC HL
|
||
LD (HL),"."
|
||
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
|
||
.loop4: INC HL
|
||
LD (HL),C
|
||
DJNZ .loop4
|
||
;
|
||
INC HL
|
||
SET_PAGE_X DIRPAGE
|
||
PUSH AF
|
||
;
|
||
LD DE,DIRPAGE.buffer + FAT_DIRECTORY_RECORD.ATTRIBUT ; âਡãâë § ¯¨á¨
|
||
;
|
||
LD A,(DIRPAGE.buffer)
|
||
CP "."
|
||
JR Z,.copy_dir_record
|
||
;
|
||
;LD IX,HANDBUF
|
||
XOR A
|
||
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 - FAT_DIRECTORY_RECORD.ATTRIBUT ; 21
|
||
LDIR
|
||
POP AF
|
||
OUT (SLOT3),A
|
||
;
|
||
EX DE,HL
|
||
LD D,H
|
||
LD E,L
|
||
INC DE
|
||
LD (HL),0
|
||
LD BC,512-65 ;!HARDCODE sector size
|
||
LDIR
|
||
;
|
||
POP HL ; áâ à訩 ®¬¥à ᥪâ®à
|
||
EXX
|
||
POP HL ; ¬« ¤è¨© ®¬¥à ᥪâ®à
|
||
CALL CLUSTER_TO_SECTOR
|
||
LD A,(CORE_BUFFERS.FatBuffer.SectorsPerCluster) ; ᥪâ®à®¢ ª« áâ¥à
|
||
.MKD12: PUSH AF
|
||
PUSH HL ; áâ. à §àï¤
|
||
PUSH IX ; ®¬¥à «®£. ᥪâ®à
|
||
;
|
||
; IN A,(SLOT3)
|
||
; PUSH AF
|
||
; IN A,(SLOT0)
|
||
; OUT (SLOT3),A
|
||
; ;
|
||
; LD A,(CORE_BUFFERS.FatBuffer.DRIVE)
|
||
; LD DE,CORE_BUFFERS.SECTOR_BUFFER+#C000
|
||
; LD BC,1*256 + Dss.DRV.Write
|
||
; RST ToDSS.DRV
|
||
; ;
|
||
; POP AF
|
||
; OUT (SLOT3),A
|
||
CALL WRITE_SECTOR
|
||
; !FIXIT ¥â ¯à®¢¥àª¨ ®è¨¡ªã
|
||
;
|
||
LD HL,CORE_BUFFERS.SECTOR_BUFFER
|
||
; [x] optimization
|
||
LD A,(HL)
|
||
OR A
|
||
JR Z,.skip_clean
|
||
;
|
||
LD DE,CORE_BUFFERS.SECTOR_BUFFER+1
|
||
LD BC,511 ;!HARDCODE sector size
|
||
LD (HL),0
|
||
LDIR
|
||
.skip_clean: ;
|
||
POP IX
|
||
POP HL
|
||
INC IX
|
||
LD A,XH
|
||
OR XL
|
||
JR NZ,.MKD11
|
||
INC HL
|
||
.MKD11 POP AF
|
||
DEC A
|
||
JR NZ,.MKD12
|
||
AND A
|
||
RET
|
||
; |