From 32dca48eafa31fcd57acf9be11b128a956f0fee5 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Wed, 14 Jan 2026 22:22:32 +1000 Subject: [PATCH] =?UTF-8?q?big=5Fdir:=20F=5FFIRST=20=C2=A8=20F=5FNEXT=20?= =?UTF-8?q?=C2=AF=C2=AE=C3=A7=C3=A2=C2=A8=20OK=20-bugfix:=20fdd-drv.asm=20?= =?UTF-8?q?GetBPB=20RomanRom2=20bug=20fix))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DSS/API/Find.asm | 57 +++++++++++++++-------------------- DSS/DOS_FS.ASM | 3 ++ DSS/drivers/media/fdd-drv.asm | 39 ++++++++++++++++++++---- SHELL/version.inc | 31 +++++++++++++++++++ 4 files changed, 92 insertions(+), 38 deletions(-) diff --git a/DSS/API/Find.asm b/DSS/API/Find.asm index 61aac52..d689123 100644 --- a/DSS/API/Find.asm +++ b/DSS/API/Find.asm @@ -29,7 +29,6 @@ F_FIRST: CALL .INIT_VARS LD A,(CORE_BUFFERS.FS_Buffer.DirBlock) AND A CALL NZ,LOADDIR ;!FIXIT check error - ; CALL MASK RET C ; @@ -47,15 +46,9 @@ F_FIRST: CALL .INIT_VARS LD (DE),A ; при прыжке сюда на стеке должен лежать record index .FIND_S: INC DE - ;!TODO лучше тут использовать как в record index для перебора каталога > #4000 bytes - ;LD BC,FAT_DIRECTORY_RECORD - ;ADD IX,BC LD (F_NEXT.CURHND),IX POP HL ; record index - ;!FIXIT нет проверки на переполнение - ; надеемся, что FAT без косяков - ;INC HL - LD (F_NEXT.RecordIndex),HL + LD (F_NEXT.RecordIndex),HL ; нет проверки на переполнение. надеемся, что FAT без косяков ; LD HL,CORE_BUFFERS.HANDBUF + FAT_DIRECTORY_RECORD.RESERVED_NT LD BC,CORE_BUFFERS.HANDBUF.SIZE - FAT_DIRECTORY_RECORD.RESERVED_NT @@ -67,27 +60,34 @@ F_FIRST: CALL .INIT_VARS .FNDMODE+1: LD A,0 AND %0111'1111 JR NZ,.FIND_M2 + ; LD BC,11 ;!HARDCODE LDIR .exit: LD A,F_NEXT.NO_NEXT.NO LD (F_NEXT.NO_NEXT),A .FindCounter+1: LD HL,0 - INC HL + DEC HL LD (.FindCounter),HL - XOR A - RET + ; CF=0 + ;XOR A + RET + ; .FIND_M2: ;!TODO LFN ;CP 2 ;CALL NC,GetName_LFN ;CALL C,GetName + CALL GetName ; - CALL GetName JR .exit ; .INIT_VARS: LD (.SEARCH_ATTRIBUT),A LD (.DTABUF),DE - LD DE,0 - LD (.FindCounter),DE + LD DE,0 ; [ ] big dir for new directory read functions + RLA + JR C,.setCounter + ; + LD DE,512 ; for old directory read functions +.setCounter: LD (.FindCounter),DE LD A,B LD (.FNDMODE),A RET @@ -112,17 +112,14 @@ F_NEXT: ; XOR A ; F_NEXT.NO_NEXT.YES LD (F_NEXT.NO_NEXT),A - ; проверка на режим кучи файлов или не больше 512 - LD A,(F_FIRST.FindCounter + 1) ; старший байт счётчика - CP 2 - JR C,.nextSearch + ; проверка на режим. куча файлов или не больше 512? + LD BC,(F_FIRST.FindCounter) + LD A,B + OR C + LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR + SCF + RET Z ; - LD A,(F_FIRST.FNDMODE) ;!FIXIT big dir - неправильно использовать это, надо новую переменную - RLA - LD A,DSS_Error.sys.TOO_MANY_FILES_IN_DIR - CCF - RET C - ; ; .nextSearch: LD A,(HL) PUSH HL CALL .NSEARCH @@ -139,16 +136,12 @@ F_NEXT: EX AF,AF' CPL LD C,A - ;!TEST 9/11/23 record index - EXX -.RecordIndex+1: LD DE,0 ; record index может и не нужно - EXX + EXX +.RecordIndex+1: LD DE,0 ; record index может и не нужно + EXX ; .CURHND+2: LD IX,0 ; адрес следующей записи в кэше директории LD DE,SEARCH.for_F_NEXT PUSH DE ; выход в SEARCH из SEARCH_RECORD_IN_DIR_CACHE JP SEARCH_RECORD_IN_DIR_CACHE.next_record -; -/* -Любые изменения в директории убьют её. -*/ \ No newline at end of file +; \ No newline at end of file diff --git a/DSS/DOS_FS.ASM b/DSS/DOS_FS.ASM index f09c1bc..6087cb4 100644 --- a/DSS/DOS_FS.ASM +++ b/DSS/DOS_FS.ASM @@ -6,6 +6,7 @@ GetName: LD BC,#08FF ;!HARDCODE LD A,' ' .loop: CP (HL) JR Z,.skip + ; LDI DJNZ .loop JR .extension @@ -17,6 +18,7 @@ GetName: LD BC,#08FF ;!HARDCODE .extension: CP (HL) LD A,"." JR NZ,.copy_ext + ; XOR A .copy_ext: LD (DE),A INC DE @@ -26,6 +28,7 @@ GetName: LD BC,#08FF ;!HARDCODE LD A,' ' .loop2: CP (HL) JR Z,.exit + ; LDI DJNZ .loop2 .exit: XOR A diff --git a/DSS/drivers/media/fdd-drv.asm b/DSS/drivers/media/fdd-drv.asm index db7cb0a..75923f4 100644 --- a/DSS/drivers/media/fdd-drv.asm +++ b/DSS/drivers/media/fdd-drv.asm @@ -217,6 +217,13 @@ MediaCheck: CALL Open ;DE - ADDRESS GetBPB: LD IX,0 + ; fix bug 14/01/2026. если нет MBR, то никаких муток + LD H,D + LD L,E + LD BC,BOOT_SECTOR.MBR_SIGNATURE + ADD HL,BC + LD (HL),C + ; LD HL,0 PUSH DE PUSH AF @@ -225,18 +232,38 @@ GetBPB: LD IX,0 POP DE POP HL RET C + ; LD BC,BOOT_SECTOR.SectorsPerTrack ADD HL,BC LD E,(HL) - PUSH DE + ; fix bug 14/01/2026. если нет MBR, то никаких муток + LD BC,BOOT_SECTOR.MBR_SIGNATURE - BOOT_SECTOR.SectorsPerTrack + ADD HL,BC + LD C,(HL) + INC HL + LD B,(HL) + LD HL,#AA55 + SBC HL,BC + LD A,DSS_Error.drv.UNKNOWN_FORMAT + SCF + RET NZ + ; + PUSH DE ; D - drive, E - Sectors Per Track LD A,D LD C,BIOS.DRV_GET_PAR RST ToBIOS - LD A,H - POP HL - PUSH HL - LD H,A - POP AF + ; !TEST + ;LD A,H ; A heads + ;POP HL ; H - drive, L - Sectors Per Track + ;PUSH HL + ;LD H,A ; H - heads, L - Sectors Per Track + ;POP AF ; A - drive + ; + LD C,H ; C heads + POP HL ; H - drive, L - Sectors Per Track + LD A,H ; A - drive + LD H,C ; H - heads, L - Sectors Per Track + ; LD C,BIOS.DRV_SET_PAR RST ToBIOS XOR A diff --git a/SHELL/version.inc b/SHELL/version.inc index d78a3bc..24e4b3d 100644 --- a/SHELL/version.inc +++ b/SHELL/version.inc @@ -1,6 +1,23 @@ ;------------------[ Достаём текущую дату и BUILD++ ]-----------------[] LUA PASS1 Console_build = increase_build("./SHELL/build.txt") + if Console_build > 999 then + Console_build = 999 + print("WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","\aWARNING! Build > 999\a") + end + ENDLUA IFNDEF INCREASE_BUILD + DEFINE INCREASE_BUILD 0 + ELSE + DEFINE+ INCREASE_BUILD 1 + ENDIF +;------------------[ Достаём текущую дату и BUILD++ ]-----------------[] + LUA PASS1 + if sj.get_define("INCREASE_BUILD") > "0" then + Console_build = increase_build("./SHELL/build.txt") + else + Console_build = get_build("./SHELL/build.txt") + end + if Console_build > 999 then Console_build = 999 print("WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","WARNING! Build > 999","\aWARNING! Build > 999\a") @@ -11,6 +28,20 @@ ENDLUA ;---------------------------------------------------------------------[] +; +; Shell full version +; номер версии (0..9) +CONSOLE_VERS EQU 1 +; номер модификации (0..99) +CONSOLE_MODF EQU 2 +; номер билда (0..999) +CONSOLE_BUILD EQU lua_BUILD +; + LUA ALLPASS + sj.insert_label("lua_BUILD", Console_build) + ENDLUA +;---------------------------------------------------------------------[] + ; ; Shell full version ; номер версии (0..9)