From f59cca8dfab21d990654ea28537e43825249e82a Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 3 Jul 2023 02:11:18 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BB=D0=B5=D1=87=D0=B8=D0=BC=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D0=B8...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Console/CONSOLE.ASM | 13 +++------ DSS/DOS5.ASM | 63 ++++++++++++++++++++++++++++++-------------- DSS/DOS_FM.ASM | 8 ++++-- DSS/DSS_MACROSES.Z80 | 23 ++++++++-------- DSS/defines.inc | 25 +++++++++--------- 5 files changed, 78 insertions(+), 54 deletions(-) diff --git a/Console/CONSOLE.ASM b/Console/CONSOLE.ASM index efbad1a..ea58827 100644 --- a/Console/CONSOLE.ASM +++ b/Console/CONSOLE.ASM @@ -130,8 +130,7 @@ B_FIND_SPACE RET -BATCH - PUSH HL +BATCH: PUSH HL LD DE,PRMLINE BCHL1 LD A,(HL) LDI @@ -164,8 +163,6 @@ B_ALL_P POP HL XOR A RET - - Restore_Screen: PUSH AF LD C,Dss.GetVMod @@ -178,8 +175,6 @@ Restore_Screen: .exit: POP AF RET - - NEWLINE LD DE,CMDLINE ADDBAT PUSH DE CALL READBAT @@ -530,13 +525,13 @@ EXEERR CP 5 JP NC,ERROR LD DE,0 ;BAD COMMAND OR FILENAME JP ERR_MSG - + RUN_BAT CALL BATCH JP C,EXEERR RET -BATLIST DB 'PAUSE' : DW CPAUSE - DB 'REM' : DW CREM +BATLIST DZ 'PAUSE' : DW CPAUSE + DZ 'REM' : DW CREM CMDLIST DZ 'CD' : DW CCHDIR DZ 'CHDIR' : DW CCHDIR DZ 'CLS' : DW CLS diff --git a/DSS/DOS5.ASM b/DSS/DOS5.ASM index 6f7b39a..647498e 100644 --- a/DSS/DOS5.ASM +++ b/DSS/DOS5.ASM @@ -9,7 +9,7 @@ ;R11 17-04-2023 BAO Временный костыль для недопускания переполнения буфера пути каталога ;R10 15-04-2023 BAO ;????? FIXED BUG WITH CHANGE DISK WITHOUT CHANGE PATH ;!FIXIT пока в виде заплатки полунеработающей ;R09 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER -;R08 15-04-2003 DNS SAVE AND RESTORE CURёPATH MACROS +;R08 15-04-2003 DNS SAVE AND RESTORE CUR-PATH MACROS ;R07 06-02-2003 DNS FIX BUG IN MASK ROUTINE, IT ALLOW NAMES WHICH BEGAN ; FROM "." ".NAM" ;R06 29-01-2003 DNS FIX BUG WITH SET FILE DATE AND TIME @@ -30,7 +30,7 @@ ; B = 0 GET ATTRIB ; B = 1 SET ATTRIB ; OUTPUT: A - ATTRIB -ATTRIB +ATTRIB: _mSavePath INC B DEC B @@ -72,7 +72,7 @@ WATTRIB PUSH AF ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; OUTPUT: A - FM -CREATE +CREATE: _mSavePath AND #E7 ;R04 LD (ACCESS),A @@ -90,7 +90,7 @@ CREATE ; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; OUTPUT: A - FM -CREAT_N +CREAT_N: _mSavePath AND #E7 ;R04 %76A00SHR LD (ACCESS),A @@ -229,7 +229,8 @@ RENAME PUSH DE RET ;R02 -OPENATR LD (ACCESS),A +OPENATR: + LD (ACCESS),A CALL GETWORD RET C LD HL,TMPNAME @@ -244,7 +245,7 @@ OPENATR LD (ACCESS),A OPEN_FN: _mSavePath -OPEN ;R08 +OPEN: ;R08 LD (ACCESS),A CALL GETWORD RET C @@ -252,9 +253,10 @@ OPEN ;R08 LD DE,MASKARE CALL MASK RET C -OPENEXE CALL SEARCH +OPENEXE: + CALL SEARCH RET C -OPENAT ;R02 +OPENAT: ;R02 CALL GET_FM RET C LD A,C @@ -289,7 +291,7 @@ OPENAT ;R02 AND A RET -CLOSE_FN +CLOSE_FN: _mSavePath CLOSE: ;R08 LD (ACCESS),A @@ -614,19 +616,25 @@ GETWORD: SUB #20 .next: SUB 'A' PUSH HL - CALL OPENDSK + ;!TEST CHNDISK OPENDSK + CALL OPENDSK + ; POP HL JP NC,GETWORD RET TMPNAME: DB ' ',#00 ; 12 пробелов и 0 +;!TODO сделать для каждого драйва запоминание текущей дирректории, пока тут заглушка +; RestoreDIR: + ; CHNDISK: + CALL OPENDSK ;????? R10 - CALL OPENDSK RET C - LD HL,DIRSPEC+1 + ;LD HL,DIRSPEC+1 + LD HL,DIRSPEC LD (HL),0 PUSH AF CALL OPENDIR @@ -634,6 +642,17 @@ CHNDISK: RET C LD A,B RET + + /* + RET C + + PUSH AF + CALL LOADDIR + POP AF + */ + + RET + ; ;????? R10 OPENDSK: PUSH AF @@ -851,18 +870,21 @@ CURDIR1 LD A,(HL) LOADDIR: XOR A - LD HL,0 + LD H,A + LD L,A LD IX,0 - LD B,0 + LD B,A CALL MOVE_FP LD A,DIRPAGE CALL BANK PUSH AF - LD HL,#C000 - LD DE,#C001 - LD BC,#3FFF - LD (HL),L - LDIR + ;!FIXIT слишком долго + LD HL,#C000 + LD DE,#C001 + LD BC,#3FFF + LD (HL),L + LDIR + ; LD A,(FatBuffer.DRIVE) LD (IY+_sFM.DRIVE),A LD D,(IY+_sFM.ST_CLUSTER) @@ -1652,7 +1674,8 @@ MKD11 POP AF RET ; INPUT: HL - "C:\DIR\DIR\DIR_NAME",0 -RMDIR: _mSavePath +RMDIR: + _mSavePath CALL GETWORD RET C LD HL,TMPNAME diff --git a/DSS/DOS_FM.ASM b/DSS/DOS_FM.ASM index 601f442..e49a52a 100644 --- a/DSS/DOS_FM.ASM +++ b/DSS/DOS_FM.ASM @@ -447,7 +447,9 @@ READ LD (R_POINT),HL JP Z,NOREAD PUSH DE LD A,(IY+_sFM.DRIVE) - CALL OPENDSK + ;!TEST CHNDISK OPENDSK + CALL OPENDSK + ; JP C,RPERR1 LD C,(IY+_sFM.F_POSITION) LD E,(IY+_sFM.F_POSITION+1) @@ -608,7 +610,9 @@ WRITE LD (R_POINT),HL SET 7,(IY+_sFM.ACCESS_MODE) SET 5,(IY+_sFM.ATTRIBUT) LD A,(IY+_sFM.DRIVE) - CALL OPENDSK + ;!TEST CHNDISK OPENDSK + CALL OPENDSK + ; JP C,PWERR1 LD C,(IY+32) LD A,(IY+33) diff --git a/DSS/DSS_MACROSES.Z80 b/DSS/DSS_MACROSES.Z80 index 8a85c11..7c984bd 100644 --- a/DSS/DSS_MACROSES.Z80 +++ b/DSS/DSS_MACROSES.Z80 @@ -1,20 +1,21 @@ ; MACRO _mSavePath -; PUSH HL -; LD HL,BACK_CUR_PATH -; EX (SP),HL -; CALL SAVE_CUR_PATH + IF SAVE_PATH_MACRO + PUSH HL + LD HL,BACK_CUR_PATH + EX (SP),HL + CALL SAVE_CUR_PATH + ENDIF ENDM -; -; MACRO _mRestorePath -; CALL BACK_CUR_PATH + IF SAVE_PATH_MACRO + CALL BACK_CUR_PATH + ENDIF ENDM -; - -; MACRO _mRestorStackAfterRestorePath -; POP HL ;CLEAR STACK "BACK_CUR_PATH" + IF SAVE_PATH_MACRO + POP HL ;CLEAR STACK "BACK_CUR_PATH" + ENDIF ENDM ; diff --git a/DSS/defines.inc b/DSS/defines.inc index 455c37f..8a921e7 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -1,26 +1,27 @@ ; - DEFINE TEST_FEATURE 1 + DEFINE TEST_FEATURE 1 ; ; - DEFINE SHORT_RSTx10_TABLE 0 ; укороченная таблица функций rst #10. 96 функций. + DEFINE SHORT_RSTx10_TABLE 0 ; укороченная таблица функций rst #10. 96 функций. ; ; - DEFINE MAX_RAMDRIVES 16 - DEFINE NeedSafePort_Y 1 - DEFINE TABisSPACES 1 - DEFINE CLASSIC_CURSOR 0 + DEFINE MAX_RAMDRIVES 16 + DEFINE NeedSafePort_Y 1 + DEFINE TABisSPACES 1 + DEFINE CLASSIC_CURSOR 0 + DEFINE SAVE_PATH_MACRO 0 ; ;-------------------[MEMORY]-------------------------; - DEFINE USING_MEMPAGES 4 + DEFINE USING_MEMPAGES 4 ;!FIXIT сделать типа DIRPAGE EQU 0 + BANKTBL и упростить BANK -DIRPAGE EQU 0 -FATPAGE EQU 1 -TXTPAGE EQU 2 -ENVPAGE EQU 2 -DRVPAGE EQU 3 +DIRPAGE EQU 0 +FATPAGE EQU 1 +TXTPAGE EQU 2 +ENVPAGE EQU 2 +DRVPAGE EQU 3 ; DIRSPEC.DEPTH EQU 256 ; '\' + 1..255