From 78c229e75a9b03b78930e1f3312b9f9ffcfeca7c Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 7 Mar 2025 23:09:47 +1000 Subject: [PATCH] =?UTF-8?q?DiskINF:=20=D0=BA=D0=BE=D1=81=D1=82=D1=8B=D0=BB?= =?UTF-8?q?=D1=8C=20=D0=B4=D0=BB=D1=8F=20=D0=B0=D1=82=D1=80=D0=B8=D0=B1?= =?UTF-8?q?=D1=83=D1=82=D0=B0=200.=20=D0=9D=D0=B0=D1=81=D1=82=D0=BE=D1=8F?= =?UTF-8?q?=D0=BB=20=D0=A1=D0=B0=D0=B2=D0=B5=D0=BB=D0=B8=D0=B9))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DSS/API/Execute.ASM | 26 +++++-- DSS/API/diskINF.asm | 10 ++- DSS/FS/FAT.asm | 182 ++++++++++++++++++++++---------------------- DSS/build.txt | 2 +- Shared_Includes | 2 +- 5 files changed, 119 insertions(+), 103 deletions(-) diff --git a/DSS/API/Execute.ASM b/DSS/API/Execute.ASM index c4c9fc6..def5b39 100644 --- a/DSS/API/Execute.ASM +++ b/DSS/API/Execute.ASM @@ -540,19 +540,26 @@ EXSTACK: DW CORE_BUFFERS.XSTACK.Spoint ; ; ; Выход из EXE-файла: ; -; 1) Освобождаются все блоки памяти которые выделялась данному приложению. -; 2) Восстанавливаются страницы которые были подключены до запуска EXE-файла. -; 3) Вспоминается стек. -; 4) В регистр A помещается код возврата и выполняется RET. +; 1) Освобождаются все блоки памяти которые выделялись данному приложению. +; 2) Закрываются все файлы открытые приложением +; 3) Восстанавливаются страницы которые были подключены до запуска EXE-файла. +; 4) Вспоминается стек. +; 5) В регистр A помещается код возврата и выполняется RET. ; ;///////////////////////////////////////////////////////////////////// -LEAVE: LD A,B +LEAVE: LD A,R + PUSH AF ; INT ON/OFF + DI + ; + LD A,B LD (ErrorLevel),A CALL FREE_PROCESS_MEMORY ;[x] 10/12/23 close EXE FMs CALL FREE_PROCESS_FMs ; - _mDECTASK + _mDECTASK + ; + POP DE ; INT ON/OFF LD SP,(EXSTACK) ; тут стек в нулевой странице! POP AF ; -2 EXSTACK size for 1 task @@ -563,14 +570,17 @@ LEAVE: LD A,B LD A,H OUT (SLOT3),A ; + LD A,E ; INT ON/OFF POP DE ; -2 POP HL ; -2 LD (EXSTACK),SP LD SP,HL ; ;!TEST - ;EI - ; + AND %0000'0100 ; PO/PE flag + JR Z,.no_ei + EI +.no_ei: ; EX DE,HL LD A,(ErrorLevel) ;R12 diff --git a/DSS/API/diskINF.asm b/DSS/API/diskINF.asm index f802a6d..12e9bc9 100644 --- a/DSS/API/diskINF.asm +++ b/DSS/API/diskINF.asm @@ -245,11 +245,17 @@ GET_LABEL: PUSH DE LD A,FAT_ATTR.VOLUME_ID ; атрибут метки тома LD B,high Dss.F_First.FATname CALL F_FIRST - ;LD BC,Dss.F_First.FATname ; f_first, формат 11 - ;RST ToDSS POP DE LD HL,CORE_BUFFERS.FatBuffer.BPB_LABEL RET C + ; [ ] 07/03/2025 костыль для атрибута 0. Настоял Савелий)) + LD HL,BUFFER_FIND.REC_Attr + ADD HL,DE + LD A,(HL) + OR A + SCF + RET Z + ; LD HL,BUFFER_FIND.REC_Name ADD HL,DE RET diff --git a/DSS/FS/FAT.asm b/DSS/FS/FAT.asm index 69ce24f..f353292 100644 --- a/DSS/FS/FAT.asm +++ b/DSS/FS/FAT.asm @@ -130,99 +130,99 @@ DELETE_LFN_RECORDS: ; (HANDBUF) = file's direcory record ; CF - каталог не найден SEARCH: -.Dir: ;LD A,FAT_ATTR.DIRECTORY - LD A,FAT_ATTR.HiddenSysDir - CALL .Custom - RET NC - CP DSS_Error.sys.PATH_NOT_FOUND + 1 - RET C - ; - SCF - LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR - RET - ; -.File: LD A,FAT_ATTR.NoDIRnoVolID -.Custom: EX AF,AF' ; A = 76ADLSHR - SET_PAGE_X DIRPAGE - ;PUSH AF - EX AF,AF' - ; - CPL - LD C,A - LD IX,DIRPAGE.buffer - ;!TEST 9/11/23 record index - ; оптимизация для индекса записи в списке каталога. - ; Понадобится вернуть для перебора каталога > #4000 байт - ; EXX - ; LD DE,0 - ; EXX - ; -.loop: LD A,(IX+FAT_DIRECTORY_RECORD.NAME) - OR A - JR Z,.error_file_not_found - CP #E5 ;!HARDCODE #E5 - запись в директории свободна, так как файл/директория были удалены - JR Z,.next_record - LD A,(IX+FAT_DIRECTORY_RECORD.ATTRIBUT) - AND C - JR NZ,.next_record - LD HL,MASKARE - LD D,XH - LD E,XL - LD B,11 - EX DE,HL -.loop_compare: - LD A,(DE) - CP '?' - JR Z,.next_char - CP (HL) - JR NZ,.next_record -.next_char: - INC HL - INC DE - DJNZ .loop_compare - ; - LD D,XH - LD E,XL - ;!TEST 9/11/23 record index - ; EXX - ; PUSH DE - ; EXX - PUSH IX - ; - LD HL,HANDBUF - EX DE,HL - LD BC,HANDBUF.SIZE - LDIR - ;!TEST 9/11/23 record index - POP DE - ; - EX AF,AF' - OUT (SLOT3),A - EX AF,AF' - AND A - RET -.next_record: - LD DE,FAT_DIRECTORY_RECORD - ;!TEST 9/11/23 record index - ; EXX - ; INC DE - ; EXX - ; - ADD IX,DE - JR NC,.loop +.Dir: ;LD A,FAT_ATTR.DIRECTORY + LD A,FAT_ATTR.HiddenSysDir + CALL .Custom + RET NC + CP DSS_Error.sys.PATH_NOT_FOUND + 1 + RET C + ; + SCF + LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR + RET + ; +.File: LD A,FAT_ATTR.NoDIRnoVolID +.Custom: EX AF,AF' ; A = 76ADLSHR + SET_PAGE_X DIRPAGE + ;PUSH AF + EX AF,AF' + ; + CPL + LD C,A + LD IX,DIRPAGE.buffer + ;!TEST 9/11/23 record index + ; оптимизация для индекса записи в списке каталога. + ; Понадобится вернуть для перебора каталога > #4000 байт + ; EXX + ; LD DE,0 + ; EXX + ; +.loop: LD A,(IX+FAT_DIRECTORY_RECORD.NAME) + OR A + JR Z,.error_file_not_found + CP #E5 ;!HARDCODE #E5 - запись в директории свободна, так как файл/директория были удалены + JR Z,.next_record + LD A,(IX+FAT_DIRECTORY_RECORD.ATTRIBUT) + AND C + JR NZ,.next_record + ; +.not_zero_attr: LD HL,MASKARE + LD D,XH + LD E,XL + LD B,11 + EX DE,HL +.loop_compare: LD A,(DE) + CP '?' + JR Z,.next_char + CP (HL) + JR NZ,.next_record + ; +.next_char: INC HL + INC DE + DJNZ .loop_compare + ; + LD D,XH + LD E,XL + ;!TEST 9/11/23 record index + ; EXX + ; PUSH DE + ; EXX + PUSH IX + ; + LD HL,HANDBUF + EX DE,HL + LD BC,HANDBUF.SIZE + LDIR + ;!TEST 9/11/23 record index + POP DE + ; + EX AF,AF' + OUT (SLOT3),A + EX AF,AF' + AND A + RET + ; +.next_record: LD DE,FAT_DIRECTORY_RECORD + ;!TEST 9/11/23 record index + ; EXX + ; INC DE + ; EXX + ; + ADD IX,DE + JR NC,.loop .error_too_many_files: - EX AF,AF' - OUT (SLOT3),A - LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR - SCF - RET - ; + EX AF,AF' + OUT (SLOT3),A + LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR + SCF + RET + ; .error_file_not_found: - EX AF,AF' - OUT (SLOT3),A - LD A,DSS_Error.sys.FILE_NOT_FOUND - SCF - RET + EX AF,AF' + OUT (SLOT3),A + LD A,DSS_Error.sys.FILE_NOT_FOUND + SCF + RET ;----------------------------------------------------------------------; ; diff --git a/DSS/build.txt b/DSS/build.txt index cabf43b..978b4e8 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -24 \ No newline at end of file +26 \ No newline at end of file diff --git a/Shared_Includes b/Shared_Includes index 60b5ff6..d22e7b9 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 60b5ff6a74b57614b1f54fbe5611585cd46582ab +Subproject commit d22e7b9aae7efe3d24bdf767e057abc51e37ea2d