diff --git a/DSS/API/Attribute.asm b/DSS/API/Attribute.asm index 41343d6..da6381b 100644 --- a/DSS/API/Attribute.asm +++ b/DSS/API/Attribute.asm @@ -1,9 +1,9 @@ //////////////////////////////////////////////////////////////////////// -; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 +; INPUT: HL - "C:\DIR1\DIR2\filename.ext",#00 ; A - ATTRIB -; B - MODE -; B = #00 GET ATTRIB -; B = #01 SET ATTRIB +; B - MODE: +; 0 GET ATTRIB +; 1 SET ATTRIB ; OUTPUT: A - ATTRIB //////////////////////////////////////////////////////////////////////// ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 @@ -15,6 +15,10 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 POP BC POP HL RET C + ; [x] Hotfix 1. на случай чтения для обхода проверки CHECK_64kb_CLUSTER + LD A,1 + LD (OPEN_FN.TMP),A + ; LD A,C ; ; @@ -69,8 +73,11 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 CALL SetPath_GetName ; тест на допуст. имя и настр. на диск RET C ; [ ] 26/06/2024 - CALL CHECK_64kb_CLUSTER - RET C + ; [x] Hotfix 1. если это не чтение, то проверяем размер кластера + LD A,(OPEN_FN.TMP) + AND A + CALL Z,CHECK_64kb_CLUSTER + RET C ; CALL MASK RET C diff --git a/DSS/API/Execute.ASM b/DSS/API/Execute.ASM index b830d56..15969df 100644 --- a/DSS/API/Execute.ASM +++ b/DSS/API/Execute.ASM @@ -136,10 +136,10 @@ EXEC0_SHORT: ; CALL ENVIRON LD HL,(CMDLINE) LD DE,CORE_BUFFERS.EXEBUFF -COPYEXN: LD A,(HL) +.COPYEXN: LD A,(HL) LDI OR A - JR NZ,COPYEXN + JR NZ,.COPYEXN CALL FINDPATH ;[x] 1/10/2023 @@ -278,9 +278,9 @@ PRELOAD: EX DE,HL LD B,A LD A,H OR L - JR Z,NOINK2 + JR Z,.NOINK INC B -NOINK2: LD HL,_RET_2 +.NOINK: LD HL,_RET_2 LD (_ret),HL JR _TST_PROC ; @@ -293,6 +293,8 @@ _RET_2: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) ; ;-------------------------------------------------------------------;[ ] _TST_PROC: CALL GETMEM JP C,ERREXE0 + ; + DI LD (EXE_MEM),A EXX POP DE ;снимаем со стека адрес возврата @@ -312,7 +314,7 @@ _TST_PROC: CALL GETMEM PUSH AF ; +2 LD (EXSTACK),SP LD SP,HL - ; ; + ; EXX ; ;!TEST 27/03/2024 @@ -356,11 +358,12 @@ _TST_PROC: CALL GETMEM ; ; LD HL,(CMDLINE) - LD DE,CORE_BUFFERS.BUFFER+1 + ;LD DE,CORE_BUFFERS.BUFFER+1 + LD DE,CORE_BUFFERS.BUFFER_CLP + 1 CALL SCOPYS LD A,#80 ;!HARDCODE cmd line size SUB B - LD (CORE_BUFFERS.BUFFER),A + LD (CORE_BUFFERS.BUFFER_CLP),A ; LD SP,CORE_BUFFERS.EXEBUFF + _sEXE_HEADER ;R02 ; ! Далее стек в нулевой странице! BIOS и не DSS-MAIN не вызывать @@ -385,7 +388,7 @@ FR8000: LD A,(DE) INC DE FRC000: LD A,(DE) OUT (SLOT3),A - CALL M_PSP + ;CALL M_PSP ; LD HL,(CORE_BUFFERS.EXEBUFF.OFFCOD2) LD IX,(CORE_BUFFERS.EXEBUFF.OFFCOD1) @@ -393,10 +396,21 @@ FRC000: LD A,(DE) LD A,(EXE_FM) CALL MOVE_FP ; - LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. Устанавливается когда воткнуты SHARED_PAGE -_ret+1: JP 0 ;EXEC02.RET1 или _RET_2 - -_TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG) + ;LD SP,#403F ;R02 ;!HARDCODE STACK before start EXE. Устанавливается когда воткнуты SHARED_PAGE + ;LD A,R + ;DI + LD SP,#4100 ;R02 ;!HARDCODE STACK before start EXE. Устанавливается когда воткнуты SHARED_PAGE + ;PUSH AF +_ret+1: JP 0 ;EXEC02.RET_1 или _RET_2 + ; +; сюда возврат из EXEC02.RET_1 или _RET_2 +_TST_PROC_2: + ; ! Далее стек в нулевой странице! BIOS и не DSS-MAIN не вызывать + ; + LD SP,CORE_BUFFERS.EXEBUFF + _sEXE_HEADER + CALL M_PSP + LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG) + ; LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) LD DE,#0080 ;!HARDCODE CLP_Buffer XOR A @@ -404,10 +418,10 @@ _TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG) EX DE,HL LD XH,D LD XL,E - LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG) + ;LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG) LD DE,RETFAR ; адрес п/п "неожиданное завершение процесса" PUSH DE - PUSH HL + ;PUSH HL ;!TEST Current Dir ;[x] 15/10/23 PUSH IX LD HL,CORE_BUFFERS.CurrentPath @@ -420,7 +434,9 @@ _TST_PROC_2: LD SP,(CORE_BUFFERS.EXEBUFF.SP_REG) .set_path: CALL CHDIR_FN POP IX ; - RET + LD HL,(CORE_BUFFERS.EXEBUFF.PC_REG) + EI + JP (HL) ;----------------------------------------------------------------------- ; ! вызывается когда стек в нулевой странице! M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) @@ -428,17 +444,18 @@ M_PSP: LD HL,(CORE_BUFFERS.EXEBUFF.LD_ADDR) LD D,H LD E,L INC DE - LD BC,#00FF ;!HARDCODE + LD BC,#00FF ;!FIXIT LD (HL),B LDIR EX DE,HL DEC H - LD DE,#0080 + LD DE,#0080 ;!FIXIT ADD HL,DE EX DE,HL LD XH,D LD XL,E - LD HL,CORE_BUFFERS.BUFFER + ;LD HL,CORE_BUFFERS.BUFFER + LD HL,CORE_BUFFERS.BUFFER_CLP LD C,(HL) INC C LDIR @@ -540,8 +557,8 @@ EXSTACK: DW CORE_BUFFERS.XSTACK.Spoint ; ; 5) В регистр A помещается код возврата и выполняется RET. ; ;///////////////////////////////////////////////////////////////////// -LEAVE: LD A,R - PUSH AF ; INT ON/OFF +LEAVE: ;LD A,R + ;PUSH AF ; INT ON/OFF DI ; LD A,B @@ -552,7 +569,7 @@ LEAVE: LD A,R ; _mDECTASK ; - POP DE ; INT ON/OFF + ;POP DE ; INT ON/OFF LD SP,(EXSTACK) ; тут стек в нулевой странице! POP AF ; -2 EXSTACK size for 1 task @@ -563,15 +580,15 @@ LEAVE: LD A,R LD A,H OUT (SLOT3),A ; - LD A,E ; INT ON/OFF + ;LD A,E ; INT ON/OFF POP DE ; -2 POP HL ; -2 LD (EXSTACK),SP LD SP,HL ; ;!TEST - AND %0000'0100 ; PO/PE flag - JR Z,.no_ei + ;AND %0000'0100 ; PO/PE flag + ;JR Z,.no_ei EI .no_ei: ; EX DE,HL diff --git a/DSS/API/PChars.asm b/DSS/API/PChars.asm index a9c3bbe..271e6a7 100644 --- a/DSS/API/PChars.asm +++ b/DSS/API/PChars.asm @@ -12,9 +12,12 @@ ; CALL PUTCHAR ; JP PCHARS ;/////////////////////////////////////////////////////////////////////// -PCHARS: XOR A ; no attr-mode +PCHARS: XOR A +.NO_SCROLL: LD D,A LD A,(CLEAR.shell_color) LD B,A + LD A,D + AND A ; no attr-mode EX AF,AF' XOR A ; no XY-mode LD C,BIOS.LP_PR_LINE_DIR @@ -22,6 +25,7 @@ PCHARS: XOR A ; no attr-mode JP ToBIOS ;/////////////////////////////////////////////////////////////////////// ; A - атрибуты выводимого символа если CF' +; A' - если !=0 то без скролла ; CF - XY-mode ; DE - место символа в окне, если CF=1 ; HL - адрес с выводимой строкой diff --git a/DSS/API/PutChar.asm b/DSS/API/PutChar.asm index 49e9f79..74be50b 100644 --- a/DSS/API/PutChar.asm +++ b/DSS/API/PutChar.asm @@ -100,7 +100,8 @@ ;/////////////////////////////////////////////////////////////////////// -PUTCHAR: PUSH HL +PUTCHAR: LD C,0 +.NO_SCROLL: PUSH HL ; LD L,A XOR A ; no attr-mode @@ -111,6 +112,7 @@ PUTCHAR: PUSH HL ; LD A,(CLEAR.shell_color) LD B,A + LD A,C EX AF,AF' XOR A ; no XY-mode LD C,BIOS.LP_PR_LINE_DIR diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 3c84133..e941749 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -473,6 +473,7 @@ CurrentDirectory EQU BUFFERSplace.CurrentDirectory .DEPTH EQU DIRECTORY_PATH_LENGTH WorkDirectory EQU BUFFERSplace.WorkDirectory .DEPTH EQU DIRECTORY_PATH_LENGTH +BUFFER_CLP EQU BUFFERSplace.BUFFER_CLP ; буфер для CMD в Execute.asm ENDMODULE ; ; CurrentPath EQU CORE_BUFFERS.BUFFERSplace + _sBuffers @@ -486,6 +487,7 @@ CLEAR_ZONE.size EQU _sBuffers ASSERT (CLEAR_ZONE.start + _sBuffers)<#4000, "Warning!!! OUT OF SLOT0" + ASSERT (#4000 - CORE_BUFFERS.BUFFER_CLP) > #100, "Warning!!! No memory for buffer!!!" DISPLAY "--- --- --- --- --- --- --- ---" DISPLAY "CLEAR_ZONE.start ", /H, CLEAR_ZONE.start diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index 76c73f3..be37bd1 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -204,7 +204,8 @@ ECHOKEY: CALL Cursor_On ; POP AF OR A ; [x] -bug with Vasil's version of cursor - CALL NZ,PUTCHAR;.NO_SCROLL ; добавил вывод "a" на экран + LD C,A + CALL NZ,PUTCHAR.NO_SCROLL POP BC POP DE LD A,E diff --git a/DSS/Structures.inc b/DSS/Structures.inc index fdabc66..26630bf 100644 --- a/DSS/Structures.inc +++ b/DSS/Structures.inc @@ -130,5 +130,6 @@ .CurrentPath WORD 0 .CurrentDirectory BLOCK DIRECTORY_PATH_LENGTH,0 .WorkDirectory BLOCK DIRECTORY_PATH_LENGTH,0 +.BUFFER_CLP BLOCK CLP_Buffer,0 ; буфер для CMD в Execute.asm ENDS ; \ No newline at end of file diff --git a/DSS/build.txt b/DSS/build.txt index f0b5c72..fc9afb4 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -57 \ No newline at end of file +59 \ No newline at end of file diff --git a/SHELL/Commands/HELP.ASM b/SHELL/Commands/HELP.ASM index df431b4..906e4e1 100644 --- a/SHELL/Commands/HELP.ASM +++ b/SHELL/Commands/HELP.ASM @@ -24,11 +24,11 @@ cmd_help: LD HL,.help_txt ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;LP_PR_LINE_DIR: -; A - атрибуты выводимого символа если ZF=0 +; A - атрибуты выводимого символа если CF' +; A' - если !=0 то без скролла ; CF - XY-mode ; DE - место символа в окне, если CF=1 ; HL - адрес с выводимой строкой -; B - разделитель +; B - цвет консоли (используется при скролле и очистке окна) ; IY - два спец.символа для выхода с CF=1. Должны быть равны B, если не нужны -; A' - цвет консоли (используется при скролле и очистке окна) ; CF' - выводить символ с атрибутами \ No newline at end of file diff --git a/SHELL/Commands/PAUSE.ASM b/SHELL/Commands/PAUSE.ASM index 0c39baf..1d6d02c 100644 --- a/SHELL/Commands/PAUSE.ASM +++ b/SHELL/Commands/PAUSE.ASM @@ -9,14 +9,13 @@ cmd_pause: LD A,LF LD C,Dss.PutChar RST ToDSS - LD A,R - PUSH AF + ;LD A,R + ;PUSH AF LD C,Dss.WaitKey ; ждем нажатия клавиши - EI + ;EI RST ToDSS - POP AF - DI - RET PO - EI + ;POP AF + ;DI + ;RET PO + ;EI RET - ;ret diff --git a/SHELL/build.txt b/SHELL/build.txt index 8db1e5f..a9d3bc0 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -522 \ No newline at end of file +523 \ No newline at end of file