From 3480195912d61c92311edfa92dd17bae3a52c77b Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 26 Jun 2024 04:09:40 +1000 Subject: [PATCH] write protected partition with 64 kb cluster --- DSS/API/Attribute.asm | 4 + DSS/API/Create.asm | 6 +- DSS/API/Delete.asm | 4 + DSS/API/MkDir.asm | 8 +- DSS/API/Rename.asm | 149 +++++++++++++++++++----------------- DSS/API/RmDir.asm | 4 + DSS/API/SetDateTime.asm | 37 ++++----- DSS/API/Write.asm | 4 + DSS/DSS-MAIN.ASM | 17 +++- DSS/FS/FAT/FAT.asm | 3 +- DSS/build.txt | 2 +- SHELL/Messages/main_txt.asm | 2 +- SHELL/build.txt | 2 +- 13 files changed, 142 insertions(+), 100 deletions(-) diff --git a/DSS/API/Attribute.asm b/DSS/API/Attribute.asm index f0dcb81..8f07db9 100644 --- a/DSS/API/Attribute.asm +++ b/DSS/API/Attribute.asm @@ -76,6 +76,10 @@ ATTRIB: ;!TEST Current Dir ;[x] 15/10/23 ; CALL GETWORD ; тест на допуст. имя и настр. на диск RET C + ; [ ] 26/06/2024 + CALL CHECK_64kb_CLUSTER + RET C + ; CALL MASK RET C LD A,FAT_ATTR.NoVolID diff --git a/DSS/API/Create.asm b/DSS/API/Create.asm index 6189a72..d41492b 100644 --- a/DSS/API/Create.asm +++ b/DSS/API/Create.asm @@ -108,8 +108,10 @@ CREATE: ;!TEST Current Dir ;[x] 15/10/23 ;CREATE_FN: LD (.PATH0),HL CALL GETWORD RET C - ; LD HL,TMPNAME - ; LD DE,MASKARE + ; [ ] 26/06/2024 + CALL CHECK_64kb_CLUSTER + RET C + ; JP MASK ; ; [x] fixed a bug with incorrect search when there were too many files in the directory 12/03/2024 diff --git a/DSS/API/Delete.asm b/DSS/API/Delete.asm index 25017f3..8c032f4 100644 --- a/DSS/API/Delete.asm +++ b/DSS/API/Delete.asm @@ -19,6 +19,10 @@ DEL_FN: ;!TEST ; .old_EXE: CALL GETWORD ; тест на допуст. имя и настр. на диск RET C + ; [ ] 26/06/2024 + CALL CHECK_64kb_CLUSTER + RET C + ; CALL MASK RET C ; diff --git a/DSS/API/MkDir.asm b/DSS/API/MkDir.asm index 55b3a95..581ec75 100644 --- a/DSS/API/MkDir.asm +++ b/DSS/API/MkDir.asm @@ -34,9 +34,11 @@ MKDIR: ; .START: CALL GETWORD ; тест на допуст. имя и настр. на диск RET C - ;LD HL,TMPNAME ; 8.3 имя - ;LD DE,MASKARE ; буфер имени 11 симв. формата - CALL MASK ; преобр. имя 8.3 -> 11 формат + ; [ ] 26/06/2024 + CALL CHECK_64kb_CLUSTER + RET C + ; + CALL MASK RET C ;!TEST optimization ранее GETWORD уже загрузил директорию ;CALL LOADDIR ; прочитать список каталога diff --git a/DSS/API/Rename.asm b/DSS/API/Rename.asm index df90e5d..03f8e1f 100644 --- a/DSS/API/Rename.asm +++ b/DSS/API/Rename.asm @@ -9,77 +9,82 @@ ; INPUT: HL - "old_name.ext",#00 without simbols * ? ; DE - "new_name.ext",#00 without simbols * ? //////////////////////////////////////////////////////////////////////// -RENAME: ;!TEST Current Dir ;[x] 15/10/23 - ; [ ] 10/06/24 - IF OLD_DSS_FOR_OLD_EXE - LD A,(EXE_VERSION) - OR A - JR Z,.old_EXE - ENDIF - ; - PUSH HL - PUSH DE - CALL DIR_PATH_CHECK.forceCheck - POP DE - POP HL - RET C - ; -.old_EXE: - PUSH DE - ;LD DE,MASKARE - CALL MASK.name - POP DE - RET C - ;!TEST optimization - ;LD HL,MASKARE - ;LD BC,11 - ;LD A,"?" - ;CPIR - ;LD A,DSS_Error.sys.INVALID_NAME - ;SCF - CALL CHECK_NAME - ; - RET Z - PUSH DE - CALL LOADDIR ; прочитать список каталога - ;LD A,#33 - LD A,FAT_ATTR.NoSYSnoVolID - CALL SEARCH.Custom ; поиск записи в списке диска - POP HL - RET C - ;LD DE,MASKARE - CALL MASK.name - RET C - ;!TEST optimization - ;LD HL,MASKARE - ;LD BC,11 - ;LD A,"?" - ;CPIR - ;LD A,DSS_Error.sys.INVALID_NAME - ;SCF - CALL CHECK_NAME - ; - RET Z - PUSH IX - LD A,FAT_ATTR.NoSYSnoVolID - CALL SEARCH.Custom ; поиск записи в списке диска - POP IX - LD A,DSS_Error.sys.FILE_EXISTS - CCF - RET C +RENAME: ;!TEST Current Dir ;[x] 15/10/23 + ; [ ] 10/06/24 + IF OLD_DSS_FOR_OLD_EXE + LD A,(EXE_VERSION) + OR A + JR Z,.old_EXE + ENDIF + ; + PUSH HL + PUSH DE + CALL DIR_PATH_CHECK.forceCheck + POP DE + POP HL + RET C + ; +.old_EXE: ; + ; !TODO воткнуть тут GETWORD, чтоб можно было удалять по относительным путям? + ; + ; [ ] 26/06/2024 + CALL CHECK_64kb_CLUSTER + RET C + ; + PUSH DE + CALL MASK.name + POP DE + RET C + ;!TEST optimization + ;LD HL,MASKARE + ;LD BC,11 + ;LD A,"?" + ;CPIR + ;LD A,DSS_Error.sys.INVALID_NAME + ;SCF + CALL CHECK_NAME + ; + RET Z + PUSH DE + CALL LOADDIR ; прочитать список каталога + ;LD A,#33 + LD A,FAT_ATTR.NoSYSnoVolID + CALL SEARCH.Custom ; поиск записи в списке диска + POP HL + RET C + ;LD DE,MASKARE + CALL MASK.name + RET C + ;!TEST optimization + ;LD HL,MASKARE + ;LD BC,11 + ;LD A,"?" + ;CPIR + ;LD A,DSS_Error.sys.INVALID_NAME + ;SCF + CALL CHECK_NAME + ; + RET Z + PUSH IX + LD A,FAT_ATTR.NoSYSnoVolID + CALL SEARCH.Custom ; поиск записи в списке диска + POP IX + LD A,DSS_Error.sys.FILE_EXISTS + CCF + RET C SET_PAGE_X DIRPAGE - EX AF,AF' - ; - LD HL,MASKARE - LD D,XH - LD E,XL - LD BC,11 - LDIR - ; - CALL DELETE_LFN_RECORDS ; [ ] удаление записи LFN - ; - EX AF,AF' - OUT (SLOT3),A - JP SAVEDIR -; \ No newline at end of file + EX AF,AF' + ; + LD HL,MASKARE + LD D,XH + LD E,XL + LD BC,11 + LDIR + ; + CALL DELETE_LFN_RECORDS ; [ ] удаление записи LFN + ; + EX AF,AF' + OUT (SLOT3),A + JP SAVEDIR +; ; ; \ No newline at end of file diff --git a/DSS/API/RmDir.asm b/DSS/API/RmDir.asm index fc7a0b9..4df8bfd 100644 --- a/DSS/API/RmDir.asm +++ b/DSS/API/RmDir.asm @@ -30,6 +30,10 @@ RMDIR: ;!TEST Current Dir ;[x] 15/10/23 ; .START: CALL GETWORD RET C + ; [ ] 26/06/2024 + CALL CHECK_64kb_CLUSTER + RET C + ; CALL MASK RET C ;!TEST optimization diff --git a/DSS/API/SetDateTime.asm b/DSS/API/SetDateTime.asm index 38aab39..ee36795 100644 --- a/DSS/API/SetDateTime.asm +++ b/DSS/API/SetDateTime.asm @@ -10,22 +10,23 @@ ; B - секунды ; выход: A - код ошибки, если CF=1 //////////////////////////////////////////////////////////////////////// -PUT_D_T: - PUSH AF - CALL MK_TIME ; закодировать время/дату - POP AF ; дескриптор - PUSH DE - PUSH BC - CALL SET_FM - POP BC - POP DE - RET C - ; [ ] VFAT - LD (IY + _sFM.FS_REC.TIME),E - LD (IY + _sFM.FS_REC.TIME+1),D - LD (IY + _sFM.FS_REC.DATE),C - LD (IY + _sFM.FS_REC.DATE+1),B - SET 7,(IY + _sFM.ACCESS_MODE) ;R006 ; уст. признак изменения файла - AND A - RET + +;!FIXIT надо? CHECK_64kb_CLUSTER +PUT_D_T: PUSH AF + CALL MK_TIME ; закодировать время/дату + POP AF ; дескриптор + PUSH DE + PUSH BC + CALL SET_FM + POP BC + POP DE + RET C + ; [ ] VFAT + LD (IY + _sFM.FS_REC.TIME),E + LD (IY + _sFM.FS_REC.TIME+1),D + LD (IY + _sFM.FS_REC.DATE),C + LD (IY + _sFM.FS_REC.DATE+1),B + SET 7,(IY + _sFM.ACCESS_MODE) ;R006 ; уст. признак изменения файла + AND A + RET ; \ No newline at end of file diff --git a/DSS/API/Write.asm b/DSS/API/Write.asm index 8a1473c..ec87280 100644 --- a/DSS/API/Write.asm +++ b/DSS/API/Write.asm @@ -37,6 +37,10 @@ WRITE: ;!TEST ;!TODO 5/12/23 ; [ ] LD A,(IY + _sFM.DRIVE) CALL OPENDSK JR C,.ERR1 + ; [ ] 26/06/2024 + CALL CHECK_64kb_CLUSTER + RET C + ; CALL GET_OFFSET_IN_SECTORS ; JP NZ,.WOV1 diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 8d69e39..6b2f37a 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -166,9 +166,10 @@ RST_38_IM1: JP .Handler POP AF JR .Portal ; - //////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////// ; ;NMI: RETN ; @@ -180,6 +181,7 @@ RST_38_IM1: JP .Handler NMI_0x66: RETN ;JP NMI ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; +//////////////////////////////////////////////////////////////////////// ; RST_10: PUSH HL @@ -404,6 +406,19 @@ ADRST10: ;DS 512 ;,0 INCLUDE "Procedures.asm" INCLUDE "Kernel_Panic.asm" + +; [ ] 26/06/2024& read only 64kb cluster ; !TODO cluster 64kb +CHECK_64kb_CLUSTER: + LD HL,(CORE_BUFFERS.FatBuffer.BytesPerCluster) + ; CF=0 + ADC HL,HL + LD A,DSS_Error.sys.WRITE_PROTECT + RET NZ + CCF + RET + ; + + ;!FIXIT к буферам ; Массив лог. номеров банок расширения DSS BANKTBL: BLOCK USING_MEMPAGES+1,#FF ; +1 для COREPAGE diff --git a/DSS/FS/FAT/FAT.asm b/DSS/FS/FAT/FAT.asm index 7dff503..18ee8d3 100644 --- a/DSS/FS/FAT/FAT.asm +++ b/DSS/FS/FAT/FAT.asm @@ -579,7 +579,8 @@ LOAD_SAVE_DIR_PREPARE: ; скопировать запись в список диска (каталога) de ix iy ; и сбросить кеш каталога на диск ; вход: (HANDBUF) - запись каталога -WRT_HND: SET_PAGE_X DIRPAGE +WRT_HND: + SET_PAGE_X DIRPAGE EX AF,AF' LD HL,DIRPAGE.buffer ;!TEST 9/11/23 record index diff --git a/DSS/build.txt b/DSS/build.txt index 8b42f88..1345866 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -993 \ No newline at end of file +994 \ No newline at end of file diff --git a/SHELL/Messages/main_txt.asm b/SHELL/Messages/main_txt.asm index ce06ba4..222c708 100644 --- a/SHELL/Messages/main_txt.asm +++ b/SHELL/Messages/main_txt.asm @@ -45,7 +45,7 @@ MAIN_MSG: stN .ECHO_ : DZ "Echo is %1\r\n" stN .ON_ : DZ "on" stN .OFF_ : DZ "off" - stN .DIR_2_ : db " %3 File(s)\r %1 byte(s)\r\n" + stN .DIR_2_ : db "\r\n %3 File(s)\r %1 byte(s)\r\n" DZ " %4 Dir(s)\r %5 byte(s) capacity\r\n" stN .DIR_4_ : DZ " Free space %5 byte(s)\r\n" stN .DIR_3_ : DZ "%4 %5 %3 %1 %2 \r\n" ;DATE TIME SIZE FILENAME EXT diff --git a/SHELL/build.txt b/SHELL/build.txt index 3cf63f9..b872400 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -425 \ No newline at end of file +427 \ No newline at end of file