From 2df0b56e56a968b7bb0d01c30ce081ae692179ff Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 15 Oct 2023 03:34:27 +1000 Subject: [PATCH] Current Directory --- DSS/DOS5.ASM | 48 +++-- DSS/EXECUTE.ASM | 487 ++++++++++++++---------------------------------- DSS/build.txt | 2 +- Shared_Includes | 2 +- 4 files changed, 169 insertions(+), 370 deletions(-) diff --git a/DSS/DOS5.ASM b/DSS/DOS5.ASM index 00c5de1..1cd16ee 100644 --- a/DSS/DOS5.ASM +++ b/DSS/DOS5.ASM @@ -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 diff --git a/DSS/EXECUTE.ASM b/DSS/EXECUTE.ASM index aa6c19e..f9e4c44 100644 --- a/DSS/EXECUTE.ASM +++ b/DSS/EXECUTE.ASM @@ -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 - ; НЕ СОХРАНЯЕТСЯ 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 - ; НЕ СОХРАНЯЕТСЯ 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 ; НЕ СОХРАНЯЕТСЯ 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 + + PUSH IX + LD HL,CurrentDirectory + CALL CHDIR_FN + POP IX - RET + 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 diff --git a/DSS/build.txt b/DSS/build.txt index 9301519..755ab3c 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -483 \ No newline at end of file +495 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index a7128fd..12ce194 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit a7128fd1547d624249d95fdcbbb3aaa090f90357 +Subproject commit 12ce1947adb0a8d902cd6d89042fe23cb9a33c21