mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
246 lines
4.8 KiB
NASM
246 lines
4.8 KiB
NASM
//////////////////////////////////////////////////////////////////////
|
||
; ”ãªæ¨ï #45. <20> §¡®à ª®¬ ¤®© áâப¨.
|
||
;
|
||
; ¢å®¤: HL - 㪠§ â¥«ì ª®¬ ¤®© áâப¨
|
||
; DE - 㪠§ â¥«ì ¡ãä¥à ¯®«ì§®¢ ⥫ï
|
||
; B - ®¬¥à ¯®¤äãªæ¨¨:
|
||
; 0 - <20> §®¡à âì áâபã
|
||
; 1 - ‚뤥«¨âì ¨¬ï ¤¨áª
|
||
; 2 - ‚뤥«¨âì ¤¨à¥ªâ®à¨î
|
||
; 3 - ‚뤥«¨âì ¨¬ï ä ©«
|
||
; 4 - ‚뤥«¨âì à áè¨à¥¨¥ ä ©«
|
||
; 5 - ‚뤥«¨âì ¨¬ï ¤¨áª , ¯ãâì ª ä ©«ã, ¨¬ï ä ©« ¨ à áè. ä ©«
|
||
; 6 - ‡ १¥à¢¨à®¢ ® ;!TODO ¯à¥®¡à §®¢ âì ®â®á¨â¥«ìë© ¯ãâì ¢ ¯®«ë© ; [ ]
|
||
; 7 - ‚뤥«¨âì ¯ à ¬¥âà ª®¬ ¤®© áâப¨
|
||
; 8 - <20>८¡à §®¢ âì ¨§ 11 ᨬ¢®«ì®£® ä®à¬ â ¢ ä®à¬ â „Ž‘
|
||
; 9 - <20>८¡à §®¢ âì ¨§ ä®à¬ â „Ž‘ ¢ 11 ᨬ¢®«ìë© ä®à¬ â
|
||
; ¢ë室: ¥â
|
||
//////////////////////////////////////////////////////////////////////
|
||
GLOB_PR EQU 7 ;%10000000
|
||
DRIV_PR EQU 3 ;%00001000
|
||
PATH_PR EQU 2 ;%00000100
|
||
EXTN_PR EQU 1 ;%00000010
|
||
NAM_PR EQU 0 ;%00000001
|
||
|
||
EX_PATH: EXX
|
||
LD HL,NM_PATH_A ;BUILT-IN BUFFER FOR PATH ;!!!!! ¨á¯®«ì§ã¥âáï ®¡é¨© ¡ãä¥à
|
||
LD (NM_PATH),HL
|
||
LD HL,NM_NAME_A
|
||
LD (NM_NAME),HL
|
||
LD HL,NM_EXTN_A
|
||
LD (NM_EXTN),HL
|
||
LD HL,NM_DRIVE_A
|
||
LD (NM_DRIVE),HL
|
||
EXX
|
||
INC B
|
||
DEC B
|
||
JR Z,.FULL ;0 ; à §®¡à âì áâபã
|
||
DEC B
|
||
JR Z,.GET_DRIVE ;1 ; ¢ë¤¥«¨âì ¨¬ï ¤¨áª
|
||
DEC B
|
||
JR Z,.GET_PATH ;2 ; ¢ë¤¥«¨âì ¤¨à¥ªâ®à¨î
|
||
DEC B
|
||
JR Z,.GET_NAME ;3 ; ¢ë¤¥«¨âì ¨¬ï ä ©«
|
||
DEC B
|
||
JR Z,.GET_TYPE ;4 ; ¢ë¤¥«¨âì à áè¨à¥¨¥ ä ©«
|
||
DEC B
|
||
JR Z,.GET_ALL_EX ;5 ; ¢ë¤¥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
|
||
DEC B
|
||
JR Z,.EX_RESR ;6 ; § १¥à¢¨à®¢ ®
|
||
DEC B
|
||
JP Z,GSWITCH ;7 ; ¢ë¤¥«¨âì ¯ à ¬¥âà ª®¬-áâப¨
|
||
DEC B
|
||
JP Z,GetName ;8 ; ¯à¥®¡à. ¨¬ï 11 -> 8.3 ä®à¬ â
|
||
DEC B
|
||
JP Z,MASK.custom ;9 ; ¯à¥®¡à. ¨¬ï 8.3 -> 11 ä®à¬ â
|
||
.EX_RESR: LD A,DSS_Error.sys.INVALID_FUNCTION
|
||
SCF
|
||
RET
|
||
; ‚뤥«¨âì ¨¬ï ¤¨áª
|
||
.GET_DRIVE: LD (NM_DRIVE),DE
|
||
CALL .FULL
|
||
RET C
|
||
LD DE,(NM_DRIVE)
|
||
LD A,(DE)
|
||
DEC A
|
||
CP #FF
|
||
RET Z
|
||
CP "A"-1
|
||
JR C,.GD_error
|
||
CP "Z"
|
||
JR NC,.GD_error
|
||
SUB "A"-1
|
||
RET
|
||
;
|
||
.GD_error: LD A,DSS_Error.sys.INVALID_DRIVE
|
||
SCF
|
||
RET
|
||
|
||
; ‚뤥«¨âì ¤¨à¥ªâ®à¨î
|
||
.GET_PATH: LD (NM_PATH),DE
|
||
JR .FULL
|
||
|
||
; ‚뤥«¨âì ¨¬ï ä ©«
|
||
.GET_NAME: LD (NM_NAME),DE
|
||
JR .FULL
|
||
|
||
; ‚뤥«¨âì à áè¨à¥¨¥ ä ©«
|
||
.GET_TYPE: LD (NM_EXTN),DE
|
||
JR .FULL
|
||
; ‚뤥«¨âì ¤¨áª, ¯ãâì, ä ©« ¨ à áè.
|
||
.GET_ALL_EX: EX DE,HL
|
||
LD C,(HL)
|
||
INC HL
|
||
LD B,(HL)
|
||
INC HL
|
||
LD (NM_DRIVE),BC
|
||
LD C,(HL)
|
||
INC HL
|
||
LD B,(HL)
|
||
INC HL
|
||
LD (NM_PATH),BC
|
||
LD C,(HL)
|
||
INC HL
|
||
LD B,(HL)
|
||
INC HL
|
||
LD (NM_NAME),BC
|
||
LD C,(HL)
|
||
INC HL
|
||
LD B,(HL)
|
||
LD (NM_EXTN),BC
|
||
EX DE,HL
|
||
;JR EX_FULL
|
||
; <20> §®¡à âì áâபã
|
||
.FULL: EX AF,AF'
|
||
EXX
|
||
XOR A
|
||
LD HL,(NM_PATH)
|
||
LD (HL),A
|
||
LD HL,(NM_NAME) ; ¤à¥á ¡ãä¥à ¯®¤ ¨¬ï ä ©«
|
||
LD (HL),A
|
||
LD HL,(NM_EXTN)
|
||
LD (HL),A
|
||
LD HL,(NM_DRIVE)
|
||
LD (HL),A
|
||
EXX
|
||
EX AF,AF'
|
||
.PAT0: LD DE,TMPBUF
|
||
LD BC,256*TMPBUF.Size + 1 ; áç¥â稪¨
|
||
.PAT1: LD A,(HL)
|
||
CALL UPPER ; a..z -> A..Z
|
||
LD (DE),A
|
||
INC HL
|
||
INC DE
|
||
INC C ; ++áç¥â稪
|
||
CP '\'
|
||
JR Z,.PATH_YEP
|
||
CP ":"
|
||
JR Z,.DRIVE_YEP
|
||
CP "!"
|
||
JR C,.NAME_YEP
|
||
CP "?"
|
||
JR Z,.GLOBP1
|
||
CP "*"
|
||
JR Z,.GLOBP1
|
||
.PAT2: DJNZ .PAT1
|
||
LD A,DSS_Error.sys.INVALID_NAME
|
||
SCF
|
||
RET
|
||
;
|
||
.GLOBP1: EX AF,AF'
|
||
SET GLOB_PR,A
|
||
EX AF,AF'
|
||
JR .PAT2
|
||
;
|
||
.NAME_YEP: LD A,2
|
||
CP C
|
||
JR Z,.NOFNAME
|
||
PUSH HL
|
||
LD HL,TMPBUF
|
||
LD DE,(NM_NAME) ; ¤à¥á ¡ãä¥à ¯®¤ ¨¬ï ä ©«
|
||
LD B,0
|
||
DEC C
|
||
DEC C
|
||
LD A,C
|
||
LDIR
|
||
LD C,A
|
||
XOR A
|
||
LD (DE),A
|
||
LD HL,(NM_NAME)
|
||
LD A,"."
|
||
CPIR
|
||
JR NZ,.NOEXTN
|
||
LD C,3
|
||
LD DE,(NM_EXTN)
|
||
.EXTSK0: LD A,(HL)
|
||
OR A
|
||
JR NZ,.EXTSK1
|
||
LD A,' '
|
||
DEC HL
|
||
.EXTSK1: LD (DE),A
|
||
INC HL
|
||
INC DE
|
||
DEC C
|
||
JR NZ,.EXTSK0
|
||
XOR A
|
||
LD (DE),A
|
||
EX AF,AF'
|
||
SET EXTN_PR,A ; 㪠§ ® à áè. ä ©«
|
||
EX AF,AF'
|
||
.NOEXTN: EX AF,AF'
|
||
SET NAM_PR,A ; 㪠§ ® ¨¬ï ä ©«
|
||
EX AF,AF'
|
||
POP HL
|
||
.NOFNAME: EX AF,AF'
|
||
AND A
|
||
RET
|
||
;
|
||
.DRIVE_YEP: XOR A
|
||
LD (DE),A
|
||
PUSH HL
|
||
LD HL,TMPBUF
|
||
LD DE,(NM_DRIVE)
|
||
LD B,0
|
||
LDIR
|
||
POP HL
|
||
EX AF,AF'
|
||
SET DRIV_PR,A ; 㪠§ ® ¨¬ï ¤¨áª
|
||
EX AF,AF'
|
||
JP .PAT0
|
||
;
|
||
.PATH_YEP: XOR A
|
||
LD (DE),A
|
||
PUSH HL
|
||
PUSH BC
|
||
LD HL,(NM_PATH)
|
||
LD BC,#00FF ; !FIXIT £«ã¡¨ ¡ãä¥à ¥ § ¢¨á¨â ®â CurrentDirectory.DEPTH
|
||
CPIR
|
||
DEC HL
|
||
EX DE,HL
|
||
LD HL,TMPBUF ; 12 ¯à®¡¥«®¢
|
||
POP BC
|
||
LD B,0
|
||
LDIR
|
||
POP HL
|
||
EX AF,AF'
|
||
SET PATH_PR,A
|
||
EX AF,AF'
|
||
JP .PAT0
|
||
;
|
||
|
||
;TMPBUF: DB " ",#00 ; 13 ¯à®¡¥«®¢ + 0
|
||
;TMPBUF: DB " ",#00 ; 12 ¯à®¡¥«®¢ + 0
|
||
TMPBUF EQU CORE_BUFFERS.TMPNAME
|
||
.Size EQU CORE_BUFFERS.TMPNAME.Size
|
||
NM_DRIVE: DW NM_DRIVE_A
|
||
NM_NAME: DW NM_NAME_A
|
||
NM_EXTN: DW NM_EXTN_A
|
||
NM_PATH: DW NM_PATH_A
|
||
;!TODO ¯¥à¥¥áâ¨/§ ¬¥¨âì ®¡é¨© ¡ãä¥à
|
||
NM_DRIVE_A: BLOCK 9,0
|
||
NM_NAME_A: DB " ",#00 ; 12 ¯à®¡¥«®¢
|
||
NM_EXTN_A: DB " ",0
|
||
NM_PATH_A EQU CORE_BUFFERS.BUFFER ;DS 256 ;!!!!! shared buffer
|
||
|
||
|