Estex-DSS/DSS/API/MkDir.asm
2023-12-01 02:05:37 +10:00

167 lines
3.0 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

////////////////////////////////////////////////////////////////////////
; ”ã­ªæ¨ï #1B. ‘®§¤ ­¨¥ ª â «®£ .
;
; ¢å®¤: HL - 㪠§ â¥«ì ­  ¨¬ï ª â «®£ 
; ¢ë室: A - ª®¤ ®è¨¡ª¨, ¥á«¨ CF=1
;
; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0
////////////////////////////////////////////////////////////////////////
MKDIR: ;!TEST Current Dir ;[x] 15/10/23
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 ; ¯®¨áª § ¯¨á¨ ª â «®£  ¢ ᯨ᪥ ¤¨áª 
LD A,DSS_Error.sys.DIR_EXISTS
CCF
RET C ; ª â «®£ ­ ©¤¥­
;
CALL G_CLUST
RET C
PUSH HL
LD DE,(FatBuffer.ENDCLUS) ; ­®¬¥à ª« áâ¥à 
CALL W_T_FAT ; § ¯¨á âì ¢ ª¥è FAT-  ­®¬¥à ª« áâ¥à 
CALL WR_FAT ; ¯®¤ª«. ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
LD HL,MASKARE
LD DE,HANDBUF
LD BC,11
LDIR
EX DE,HL
LD A,#10 ;  âਡãâ § ¯¨á¨ ª â «®£ 
LD (HL),A
INC HL
LD BC,#0A00 ; b=áç¥â稪
;
.loop1: LD (HL),C
INC HL
DJNZ .loop1
;
PUSH HL
CALL SYSTIME ; ã§­ âì ⥪. ¤ âã ¨ ¢à¥¬ï
CALL MK_TIME ; § ª®¤¨à®¢ âì ¢à¥¬ï/¤ âã
POP HL
LD (HL),E ; de=¢à¥¬ï
INC HL
LD (HL),D
INC HL
LD (HL),C ; ¤¥­ì
INC HL
LD (HL),B ; ¬¥áïæ
INC HL
POP DE
PUSH DE
LD (HL),E
INC HL
LD (HL),D
INC HL
LD BC,#0400 ; b=áç¥â稪
;
.loop2: LD (HL),C
INC HL
DJNZ .loop2
;
CALL WRT_HND ; ᪮¯¨à. ­®¢ãî § ¯¨áì ¢ ᯨ᮪ ¤¨áª  (ª â «®£ )
;CALL SAVEDIR ; ¨ á¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª
LD HL,CORE_BUFFERS.SECBUF ; ¡ãä¥à
LD (HL),"." ; § ¯¨áì ⥪. ª â «®£ 
LD BC,10*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
;
.loop3: INC HL
LD (HL),C
DJNZ .loop3
;
INC HL
LD DE,HANDBUF+11 ; ï祩ª   âਡã⮢ ä ©« 
EX DE,HL
LD BC,21
LDIR
EX DE,HL
LD (HL),"." ; § ¯¨áì த¨â. ª â «®£ 
INC HL
LD (HL),"."
LD BC,9*256 + ' ' ; b=áç¥â稪, c=¯à®¡¥«
.MKD03: INC HL
LD (HL),C
DJNZ .MKD03
;
INC HL
SET_PAGE_X DIRPAGE
PUSH AF
;
LD A,(DIRPAGE.buffer)
CP "."
LD DE,DIRPAGE.buffer+11 ;  âਡãâë § ¯¨á¨ ;!HARDCODE
JP Z,.MKD04
LD IX,HANDBUF
XOR A
LD (IX+_sFM.ST_CLUSTER),A
LD (IX+_sFM.ST_CLUSTER+1),A
LD DE,HANDBUF+11 ; ï祩ª   âਡã⮢ ä ©« 
.MKD04: EX DE,HL
LD BC,HANDBUF.SIZE-11
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
LDIR
;
POP HL
CALL NSECTOR
LD A,(CORE_BUFFERS.BootSector.S_P_C) ; ᥪâ®à®¢ ­  ª« áâ¥à
.MKD12: PUSH AF
PUSH HL ; áâ. à §àï¤
PUSH IX ; ­®¬¥à «®£. ᥪâ®à 
IN A,(SLOT3)
PUSH AF
IN A,(SLOT0)
OUT (SLOT3),A
;
LD A,(FatBuffer.DRIVE)
LD DE,CORE_BUFFERS.SECBUF+#C000
LD BC,1*256 + Dss.DRV.Write
RST ToDSS.DRV
;
POP AF
OUT (SLOT3),A
;
LD HL,CORE_BUFFERS.SECBUF
LD DE,CORE_BUFFERS.SECBUF+1
LD BC,511
LD (HL),0
LDIR
;
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
;