From 6333672fa61010b52eb9ff8a2e6c8eaa4d6cd482 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 15 Nov 2023 04:04:38 +1000 Subject: [PATCH] testing --- DSS/DOS5.ASM | 118 ++++++++++++++++++++++++++++---------------------- DSS/build.txt | 2 +- 2 files changed, 68 insertions(+), 52 deletions(-) diff --git a/DSS/DOS5.ASM b/DSS/DOS5.ASM index dc0721a..46573d5 100644 --- a/DSS/DOS5.ASM +++ b/DSS/DOS5.ASM @@ -7,7 +7,7 @@ ;Rev Date Name Description ;------------------------------------------------------------- ;R11 17-04-2023 BAO Временный костыль для недопускания переполнения буфера пути каталога -;R10 15-04-2023 BAO ;????? FIXED BUG WITH CHANGE DISK WITHOUT CHANGE PATH ;!FIXIT пока в виде заплатки полунеработающей +;R10 15-04-2023 BAO FIXED BUG WITH CHANGE DISK WITHOUT CHANGE PATH ;R09 13-04-2023 BAO FIX BUG WITH PARSING DIRECTORY BUFFER ;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 @@ -181,12 +181,12 @@ CREAT_N EQU CREATE.NEW ; INPUT: HL - "c:\dir\filename.ext",#00 without simbols * ? //////////////////////////////////////////////////////////////////////// DEL_FN: ;!TEST - ;!TEST Current Dir ;[x] 15/10/23 - PUSH HL - CALL DIR_PATH_CHECK - POP HL - RET C - ; + ;!TEST Current Dir ;[x] 15/10/23 + PUSH HL + CALL DIR_PATH_CHECK + POP HL + RET C + ; CALL GETWORD ; тест на допуст. имя и настр. на диск RET C ; LD HL,TMPNAME @@ -316,7 +316,7 @@ OPEN_FN:;!TEST Current Dir ;[x] 15/10/23 POP HL RET C LD A,C - ;!FIXIT сделать как в mkdir или rmdir + ;!FIXIT сделать как в mkdir или rmdir? ; ;R08 OPEN: LD (.TMP),A ; enter point for CREATE @@ -580,24 +580,18 @@ CHNDISK_FN: CALL DIR_PATH_CHANGE.FullCurrent POP AF RET -CHNDISK: - ;!TEST +CHNDISK:;[x] более корректная смена диска CALL OPENDSK - ;CALL OPENDSK.force ; - ;????? R10 - RET C + ;R10 + RET C LD HL,WorkDirectory - LD (HL),0 - PUSH AF - CALL OPENDIR - POP BC - RET C - LD A,B - ; RET C - ; PUSH AF - ; CALL LOADDIR - ; POP AF + LD (HL),0 + PUSH AF + CALL OPENDIR + POP BC + RET C + LD A,B RET //////////////////////////////////////////////////////////////////////// @@ -605,19 +599,24 @@ CHNDISK: ; ; вход: HL - буфер в памяти 256 байт ; выход: A - код ошибки, если CF=1 -; !FIXIT может выйти за пределы буфера? //////////////////////////////////////////////////////////////////////// CURRDIR: LD DE,WorkDirectory JR CURRDIR_FN.skip CURRDIR_FN: LD DE,CurrentDirectory .skip: EX DE,HL + LD BC,DIRECTORY_PATH_LENGTH ;[x] 15/11/2023 могло выйти за пределы буфера XOR A .loop: CP (HL) - LDI + LDI + JP PO,.error ;[x] 15/11/2023 могло выйти за пределы буфера JR NZ,.loop RET - + ;[x] 15/11/2023 могло выйти за пределы буфера +.error: LD A,DSS_Error.sys.TOO_DEEP_DIR_DEPTH + SCF + RET + ; //////////////////////////////////////////////////////////////////////// ; Функция #21. Текущая дата и время. ; @@ -1023,8 +1022,8 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23 LD E,L INC DE LD (HL),0 - LD BC,512-65 - LDIR ;!FIXIT нужно ли так много грохать? + LD BC,512-65 ;!HARDCODE + LDIR ; POP HL CALL NSECTOR @@ -1049,7 +1048,7 @@ MKDIR: ;!TEST Current Dir ;[x] 15/10/23 LD DE,CORE_BUFFERS.SECBUF+1 LD BC,511 LD (HL),0 - LDIR ;!FIXIT нужно ли так много грохать? + LDIR ; POP IX POP HL @@ -1453,7 +1452,7 @@ SEARCH: INC HL INC DE DJNZ .loop_compare - ;!TEST 9/11/23 + ;!TEST 9/11/23 ;[x] some optimize ; LD D,XH ; LD E,XL LD D,XH @@ -1472,7 +1471,7 @@ SEARCH: AND A RET .next_record: - ;!TEST 9/11/23 + ;!TEST 9/11/23 ;[x] some optimize ; EXX ; INC DE ; EXX @@ -1580,9 +1579,9 @@ TMPNAME: DZ ' ' ; 12 ;----------------------------------------------------------------------; ; IN: A - drive number ; - ;????? R10 + OPENDSK: - ;!TEST DRV.Open обход + ;!TEST DRV.Open обход R10 LD C,A LD A,(FatBuffer.DRIVE) CP C @@ -1610,19 +1609,25 @@ OPENDSK: ;----------------------------------------------------------------------; -OPENDIR: - XOR A - CALL SET_FM +OPENDIR:;!TEST ;[ ] some optimize + ;XOR A + ;CALL SET_FM + LD IY,CORE_BUFFERS.FM_BUF + ; LD A,(HL) OR A JR NZ,.SUBDIR .REROOT1: LD DE,0 - LD (IY+_sFM.ST_CLUSTER),E - LD (IY+_sFM.ST_CLUSTER+1),D + ;!TEST ;[ ] some optimize + ;LD (IY+_sFM.ST_CLUSTER),E + ;LD (IY+_sFM.ST_CLUSTER+1),D + EX DE,HL + LD (CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER),HL + EX DE,HL + ; CALL LOADDIR - ;LD HL,CurrentDirectory -.dir+1: LD HL,WorkDirectory + LD HL,WorkDirectory LD (HL),'\' INC HL LD (HL),#00 @@ -1631,8 +1636,11 @@ OPENDIR: .SUBDIR: CP "." JR NZ,.SUBDIR2 - LD A,(IY+_sFM.ST_CLUSTER) ;R05 ;!FIXIT можно переделать на прямые ссылки без IY - OR (IY+_sFM.ST_CLUSTER+1) ;R05 ;!FIXIT можно переделать на прямые ссылки без IY + ;!TEST ;[ ] some optimize + ;LD A,(IY+_sFM.ST_CLUSTER) ;R05 + LD A,(CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER) ;R05 + ; + OR (IY+_sFM.ST_CLUSTER+1) ;R05 JR NZ,.SUDI1 ;R05 INC HL ;R05 LD A,(HL) ;R05 @@ -1640,7 +1648,7 @@ OPENDIR: DEC HL ;R05 JR Z,.REROOT1 ;R05 .SUDI1: EXX - LD HL,MASKARE ;!FIXIT можно не затирать предварительно? + LD HL,MASKARE LD DE,MASKARE+1 LD BC,10 ;!HARDCODE LD (HL),' ' @@ -1653,17 +1661,23 @@ OPENDIR: JR NZ,.loop JR .SUBDIR3 .SUBDIR2: - ;LD DE,MASKARE CALL MASK.name RET C .SUBDIR3: CALL FINDDIR RET C - LD (IY+_sFM.ST_CLUSTER),E - LD (IY+_sFM.ST_CLUSTER+1),D - LD DE,#4000 ;!HARDCODE - LD (IY+_sFM.F_SIZE),E - LD (IY+_sFM.F_SIZE+1),D + ;!TEST ;[ ] some optimize + ;LD (IY+_sFM.ST_CLUSTER),E + ;LD (IY+_sFM.ST_CLUSTER+1),D + ;LD DE,#4000 ;!HARDCODE + ;LD (IY+_sFM.F_SIZE),E + ;LD (IY+_sFM.F_SIZE+1),D + EX DE,HL + LD (CORE_BUFFERS.FM_BUF + _sFM.ST_CLUSTER),HL + LD HL,#4000 ;!HARDCODE + LD (CORE_BUFFERS.FM_BUF + _sFM.F_SIZE),HL + EX DE,HL + ; CALL LOADDIR AND A RET @@ -1738,8 +1752,6 @@ FINDDIR: .ADDSPEC: LD E,XL LD D,XH - ;LD HL,CurrentDirectory+1 - ;LD BC,CurrentDirectory.DEPTH-1 LD HL,WorkDirectory+1 LD BC,WorkDirectory.DEPTH-1 ; XOR A @@ -1975,6 +1987,7 @@ LOADDIR: ; LD (HL),L ; LDIR ; + ; LD A,(FatBuffer.DRIVE) ; номер диска LD (IY+_sFM.DRIVE),A ; сохр. в дескриптор LD D,(IY+_sFM.ST_CLUSTER) ; de=номер первого кластера @@ -2204,7 +2217,10 @@ DIR_PATH_CHECK: LD A,(HL) ; Массив лог. номеров банок расширения DSS BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 для COREPAGE ; + HANDBUF: BLOCK HANDBUF.SIZE,0 +; + MASKARE: BLOCK 8,0 ; имя файла BLOCK 3,0 ; расш. BLOCK 21,0 ; 11+21=32 diff --git a/DSS/build.txt b/DSS/build.txt index 72b67e0..6001de1 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -579 \ No newline at end of file +595 \ No newline at end of file