Current Directory

This commit is contained in:
Anatoliy Belyanskiy 2023-10-15 03:34:27 +10:00
parent 66c77848ed
commit 2df0b56e56
4 changed files with 169 additions and 370 deletions

View File

@ -561,8 +561,6 @@ F_NEXT:
;
;
////////////////////////////////////////////////////////////////////////
;!TODO ᤥ« âì ¤«ï ª ¦¤®£® ¤à ©¢  § ¯®¬¨­ ­¨¥ ⥪ã饩 ¤¨à४â®à¨¨, ¯®ª  âãâ § £«ã誠
; RestoreDIR:
CHNDISK_FN:
CALL CHNDISK
RET C
@ -577,8 +575,6 @@ CHNDISK:
;
;????? R10
RET C
;LD HL,CurrentDirectory+1
;LD HL,CurrentDirectory
LD HL,WorkDirectory
LD (HL),0
PUSH AF
@ -1553,6 +1549,8 @@ GETWORD:
INC HL
CP '\'
JR Z,.DIR_NAME
; AND A
; JR Z,.DIR_NAME
;CP ':'
;JR Z,.DRV_NAME
LD (DE),A
@ -1760,17 +1758,18 @@ FINDDIR:
;LD BC,CurrentDirectory.DEPTH-1
LD HL,WorkDirectory+1
LD BC,WorkDirectory.DEPTH-1
XOR A
CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  § ¢¥à襭¨¥ ¯® BC=0
DEC HL
DEC HL
LD A,'\' ; #5C
CP (HL)
INC HL
JR Z,.ADDSPE0
LD (HL),A
INC HL
.ADDSPE0:
; XOR A
; CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  § ¢¥à襭¨¥ ¯® BC=0
; DEC HL
; DEC HL
; LD A,'\' ; #5C
; CP (HL)
; INC HL
; JR Z,.ADDSPE0
; LD (HL),A
; INC HL
; .ADDSPE0:
CALL .CHECK_SLASH
;R11
LD A,B
AND A
@ -1815,6 +1814,18 @@ FINDDIR:
OUT (SLOT3),A
AND A
RET
.CHECK_SLASH:
XOR A
CPIR ;!FIXIT ­¥â ¯à®¢¥àª¨ ­  § ¢¥à襭¨¥ ¯® BC=0
DEC HL
DEC HL
LD A,'\' ; #5C
CP (HL)
INC HL
RET Z
LD (HL),A
INC HL
RET
;----------------------------------------------------------------------;
@ -2099,7 +2110,10 @@ DIR_PATH_CHECK: LD A,(HL)
CP ':'
RET Z
;
.forceCheck: CALL .checkDrive
.forceCheck: LD HL,CurrentDirectory+1
LD BC,CurrentDirectory.DEPTH-1
CALL FINDDIR.CHECK_SLASH
CALL .checkDrive
JR Z,.checkDir
;
LD HL,CurrentPath
@ -2122,7 +2136,7 @@ DIR_PATH_CHECK: LD A,(HL)
JR .ReDir
.end: CP (HL)
RET Z
.ReDir: LD HL,CurrentDirectory
.ReDir: LD HL,CurrentPath
JP GETWORD
;
.checkDrive: LD HL,CurrentPath

View File

@ -671,18 +671,18 @@ ABSOLUTE_DIR EQU 1
FINDPATH:
SET_PAGE_X ENVPAGE
PUSH AF
CALL CURRDSK_FN
ADD A,"A"
LD HL,TMP_CURDIR
LD (HL),A
INC HL
LD A,":"
LD (HL),A
INC HL
CALL CURRDIR_FN
CALL MAKE_PATH_ARRAY
;!TEST
;CALL CURRDSK_FN
;ADD A,"A"
;LD HL,TMP_CURDIR
;LD (HL),A
;INC HL
;LD A,":"
;LD (HL),A
;INC HL
;CALL CURRDIR_FN
;
CALL .MAKE_PATH_ARRAY
LD HL,PATH_PNT_ARRAY
.NEXTPATHI:
LD E,(HL)
@ -694,8 +694,8 @@ FINDPATH:
PUSH HL
PUSH BC
EX DE,HL
CALL Z,GOTO_CURDIR
CALL CHDIR
CALL Z,.GOTO_CURDIR
CALL NZ,CHDIR
JR C,.BADPATH
LD HL,CORE_BUFFERS.EXEBUFF
LD DE,MASKARE
@ -716,19 +716,21 @@ FINDPATH:
OUT (SLOT3),A
LD A,DSS_Error.sys.PATH_NOT_FOUND
RET
GOTO_CURDIR:
.GOTO_CURDIR:
PUSH AF
PUSH HL
LD HL,TMP_CURDIR
;LD HL,TMP_CURDIR
LD HL,CurrentDirectory
CALL CHDIR
POP HL
POP AF
RET
MAKE_PATH_ARRAY:
.MAKE_PATH_ARRAY:
LD HL,PATH_PNT_ARRAY-1 ;R04 -1
LD DE,ENVTEMP-1
LD B,#00
NEXTAR: LD (HL),C ;R04
.NEXTAR:
LD (HL),C ;R04
INC HL ;R04
XOR A
LD (DE),A
@ -741,21 +743,25 @@ NEXTAR: LD (HL),C ;R04
;R04 LD (HL),C
;R04 INC HL
INC B
NEXTRT: LD A,(DE)
.NEXTRT:
LD A,(DE)
CP '\'
JR NZ,NEXTCH
NEXTDR: SET ABSOLUTE_DIR,C
NEXTRL: ;SET RELATIVE_DIR,C ;!TODO ????
NEXTCH: LD A,(DE)
JR NZ,.NEXTCH
.NEXTDR:
SET ABSOLUTE_DIR,C
.NEXTRL:
;SET RELATIVE_DIR,C ;!TODO ????
.NEXTCH:
LD A,(DE)
CP ";"
JR Z,NEXTAR
JR Z,.NEXTAR
INC DE
; CP "."
; JR Z,NEXTRL
CP ":"
JR Z,NEXTRT
JR Z,.NEXTRT
OR A
JR NZ,NEXTCH
JR NZ,.NEXTCH
LD (HL),C ;R04
INC HL ;R04
LD (HL),A
@ -953,93 +959,6 @@ NOINK: LD A,H
LD HL,_RET_1
LD (_ret),HL
JP _TST_PROC
/*
;!FIXIT double 1
CALL GETMEM
JP C,ERREXE0
LD (EXE_MEM),A
EXX
POP DE ;á­¨¬ ¥¬ á® á⥪   ¤à¥á ¢®§¢à â 
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
PUSH HL
PUSH DE
IN A,(SLOT3)
LD D,A
IN A,(SLOT2)
LD E,A
IN A,(SLOT1)
PUSH DE
PUSH AF
LD (EXSTACK),SP
LD SP,HL
EXX
; <20>Ž•<C5BD><EFBFBD>Ÿ…Ÿ DE ¯¥à¥¤ ¢ë§®¢®¬ BIOS,   ¡¨®á ¯®ª  ¥£® ¨ ­¥ ¯®àâ¨â
LD A,(EXE_MEM)
LD DE,RAMMAP
LD BC,0*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,1*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,2*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,3*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
;^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^;
LD HL,(CMDLINE)
LD DE,CORE_BUFFERS.SECBUF+1
CALL SCOPYS
LD A,#80 ;!HARDCODE cmd line size
SUB B
LD (CORE_BUFFERS.SECBUF),A
;R02
LD SP,CORE_BUFFERS.EXEBUFF+510 ;‚áâ ¢«ï¥âáï ¢ SHARED_PAGE
;
LD A,SHARED_PAGE
OUT (SLOT1),A
OUT (SLOT2),A
OUT (SLOT3),A
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,RAMMAP
LD A,H
AND #C0
CP #40
JR Z,FR4000
CP #80
JR Z,FR8000
CP #C0
JR Z,FRC000
FR4000: LD A,(DE)
OUT (SLOT1),A
INC DE
FR8000: LD A,(DE)
OUT (SLOT2),A
INC DE
FRC000: LD A,(DE)
OUT (SLOT3),A
CALL M_PSP
LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2)
LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1)
LD B,Dss.Move_FP.FrStart
LD A,(EXE_FM)
CALL MOVE_FP
;R02
LD SP,#403F ;!HARDCODE STACK before start EXE. “áâ ­ ¢«¨¢ ¥âáï ª®£¤  ¢®âª­ãâë SHARED_PAGE
;
;
*/
_RET_1: LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
XOR A
@ -1053,30 +972,7 @@ _RET_1: LD DE,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD A,(EXE_FM) ; ¤¥áªà. ä ©« 
CALL CLOSE ; § ªàëâì ä ©«
JP _TST_PROC_2
/*
;!FIXIT double 2
;R09
;_mRestorePath
;
LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,#0080
AND A
SBC HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
LD DE,RETFAR ;  ¤à¥á ¯/¯ "­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à®æ¥áá "
PUSH DE
PUSH HL
_mRestorePath
RET
;
*/
;[ ]
RETFAR: LD B,DSS_Error.sys.UNEXPECTED_APP_TRMN
JP LEAVE ; § ¢¥àè¨âì ¯à®£à ¬¬ã (¯à®æ¥áá)
@ -1133,234 +1029,123 @@ PRELOAD: EX DE,HL
NOINK2: LD HL,_RET_2
LD (_ret),HL
JR _TST_PROC
/*
;!FIXIT double 1
CALL GETMEM
JP C,ERREXE0
LD (EXE_MEM),A
EXX
POP DE
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
PUSH HL
PUSH DE
IN A,(SLOT3)
LD D,A
IN A,(SLOT2)
LD E,A
IN A,(SLOT1)
PUSH DE
PUSH AF
LD (EXSTACK),SP
LD SP,HL
EXX
; <20>Ž•<C5BD><EFBFBD>Ÿ…Ÿ DE ¯¥à¥¤ ¢ë§®¢®¬ BIOS,   ¡¨®á ¯®ª  ¥£® ¨ ­¥ ¯®àâ¨â
LD A,(EXE_MEM)
LD DE,RAMMAP
LD BC,#00*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,1*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,2*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,3*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
;^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^;
LD HL,(CMDLINE)
LD DE,CORE_BUFFERS.SECBUF+1
CALL SCOPYS
LD A,#80
SUB B
LD (CORE_BUFFERS.SECBUF),A
;R02
LD SP,CORE_BUFFERS.EXEBUFF+510 ;‚áâ ¢«ï¥âáï ¢ SHARED_PAGE
;
LD A,SHARED_PAGE
OUT (SLOT1),A
OUT (SLOT2),A
OUT (SLOT3),A
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,RAMMAP
LD A,H
AND #C0
CP #40
JR Z,FR4000H
CP #80
JR Z,FR8000H
CP #C0
JR Z,FRC000H
FR4000H: LD A,(DE)
OUT (SLOT1),A
INC DE
FR8000H: LD A,(DE)
OUT (SLOT2),A
INC DE
FRC000H: LD A,(DE)
OUT (SLOT3),A
CALL M_PSP
LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2)
LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1)
LD B,Dss.Move_FP.FrStart
LD A,(EXE_FM)
CALL MOVE_FP
;R02
LD SP,#403F ;!HARDCODE STACK before start EXE. “áâ ­ ¢«¨¢ ¥âáï ª®£¤  ¢®âª­ãâë SHARED_PAGE
;
;
*/
_RET_2: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) ; ¡ãä¥à
LD DE,(CORE_BUFFERS.EXEBUFF.LOADER) ; ç¨á«® ç¨â. ¡ ©â
LD A,(EXE_FM) ; ¤¥áªà. ä ©« 
CALL READ ; ç⥭¨¥ ¨§ ä ©« 
JP _TST_PROC_2
/*
;!FIXIT double 2
;R09
;_mRestorePath
;
LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,#0080
AND A
SBC HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
LD DE,RETFAR
PUSH DE
PUSH HL
_mRestorePath
RET
;
*/
;-----------------------------------------------------------------------
;-------------------------------------------------------------------;[ ]
_TST_PROC:
;!FIXIT double 1
CALL GETMEM
JP C,ERREXE0
LD (EXE_MEM),A
EXX
POP DE ;á­¨¬ ¥¬ á® á⥪   ¤à¥á ¢®§¢à â 
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
PUSH HL
PUSH DE
IN A,(SLOT3)
LD D,A
IN A,(SLOT2)
LD E,A
IN A,(SLOT1)
PUSH DE
PUSH AF
LD (EXSTACK),SP
LD SP,HL
EXX
CALL GETMEM
JP C,ERREXE0
LD (EXE_MEM),A
EXX
POP DE ;á­¨¬ ¥¬ á® á⥪   ¤à¥á ¢®§¢à â 
LD HL,#0000
ADD HL,SP
LD SP,(EXSTACK)
PUSH HL
PUSH DE
IN A,(SLOT3)
LD D,A
IN A,(SLOT2)
LD E,A
IN A,(SLOT1)
PUSH DE
PUSH AF
LD (EXSTACK),SP
LD SP,HL
EXX
; <20>Ž•<C5BD><EFBFBD>Ÿ…Ÿ DE ¯¥à¥¤ ¢ë§®¢®¬ BIOS,   ¡¨®á ¯®ª  ¥£® ¨ ­¥ ¯®àâ¨â
LD A,(EXE_MEM)
LD DE,RAMMAP
LD BC,0*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,1*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,2*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,3*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
;^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^;
LD HL,(CMDLINE)
LD DE,CORE_BUFFERS.SECBUF+1
CALL SCOPYS
LD A,#80 ;!HARDCODE cmd line size
SUB B
LD (CORE_BUFFERS.SECBUF),A
;R02
LD SP,CORE_BUFFERS.EXEBUFF+510 ;‚áâ ¢«ï¥âáï ¢ SHARED_PAGE
;
LD A,SHARED_PAGE
OUT (SLOT1),A
OUT (SLOT2),A
OUT (SLOT3),A
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,RAMMAP
LD A,H
AND #C0
CP #40
JR Z,FR4000
CP #80
JR Z,FR8000
CP #C0
JR Z,FRC000
FR4000: LD A,(DE)
OUT (SLOT1),A
INC DE
FR8000: LD A,(DE)
OUT (SLOT2),A
INC DE
FRC000: LD A,(DE)
OUT (SLOT3),A
CALL M_PSP
LD A,(EXE_MEM)
LD DE,RAMMAP
LD BC,0*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,1*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,2*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
INC DE
LD A,(EXE_MEM)
LD BC,3*256 + BIOS.GetMemPage
RST ToBIOS
LD (DE),A
LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2)
LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1)
LD B,Dss.Move_FP.FrStart
LD A,(EXE_FM)
CALL MOVE_FP
;R02
LD SP,#403F ;!HARDCODE STACK before start EXE. “áâ ­ ¢«¨¢ ¥âáï ª®£¤  ¢®âª­ãâë SHARED_PAGE
;
_ret+1: JP 0
LD HL,(CMDLINE)
LD DE,CORE_BUFFERS.SECBUF+1
CALL SCOPYS
LD A,#80 ;!HARDCODE cmd line size
SUB B
LD (CORE_BUFFERS.SECBUF),A
;R02
LD SP,CORE_BUFFERS.EXEBUFF+510 ;‚áâ ¢«ï¥âáï ¢ SHARED_PAGE
;
LD A,SHARED_PAGE
OUT (SLOT1),A
OUT (SLOT2),A
OUT (SLOT3),A
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,RAMMAP
LD A,H
AND #C0
CP #40
JR Z,FR4000
CP #80
JR Z,FR8000
CP #C0
JR Z,FRC000
FR4000: LD A,(DE)
OUT (SLOT1),A
INC DE
FR8000: LD A,(DE)
OUT (SLOT2),A
INC DE
FRC000: LD A,(DE)
OUT (SLOT3),A
CALL M_PSP
LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2)
LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1)
LD B,Dss.Move_FP.FrStart
LD A,(EXE_FM)
CALL MOVE_FP
;R02
LD SP,#403F ;!HARDCODE STACK before start EXE. “áâ ­ ¢«¨¢ ¥âáï ª®£¤  ¢®âª­ãâë SHARED_PAGE
;
_ret+1: JP 0
_TST_PROC_2:
;!FIXIT double 2
;R09
;_mRestorePath
;
LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,#0080
AND A
SBC HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
LD DE,RETFAR ;  ¤à¥á ¯/¯ "­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à®æ¥áá "
PUSH DE
PUSH HL
LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG)
LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD DE,#0080
AND A
SBC HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG)
LD DE,RETFAR ;  ¤à¥á ¯/¯ "­¥®¦¨¤ ­­®¥ § ¢¥à襭¨¥ ¯à®æ¥áá "
PUSH DE
PUSH HL
_mRestorePath
RET
PUSH IX
LD HL,CurrentDirectory
CALL CHDIR_FN
POP IX
RET
;
;-----------------------------------------------------------------------
@ -1451,7 +1236,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD (HL),B
INC HL
;!FIXIT âãâ ¢®ááâ ­ ¢«¨¢ âì ¯à ¢¨«ì­ë© ª â «®£
CALL CURRDSK_FN
CALL CURRDSK
ADD A,'A'
LD (HL),A
INC HL
@ -1459,7 +1244,7 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR)
LD (HL),A
INC HL
PUSH HL
CALL CURRDIR_FN
CALL CURRDIR
;
POP HL
XOR A

View File

@ -1 +1 @@
483
495

@ -1 +1 @@
Subproject commit a7128fd1547d624249d95fdcbbb3aaa090f90357
Subproject commit 12ce1947adb0a8d902cd6d89042fe23cb9a33c21