From a8d7de85179f4ca0bb4cbb2ca880fe84e26ee22c Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Mon, 21 Apr 2025 01:50:31 +1000 Subject: [PATCH] =?UTF-8?q?SYS.EXE:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=BA=D0=BE=20=D0=B1=D0=B0=D0=B3=D0=BE=D0=B2=20=D1=81=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=BE=D0=B9=20=D0=B8?= =?UTF-8?q?=20=D0=B1=D1=83=D1=84=D0=B5=D1=80=D0=B0=D0=BC=D0=B8.=20LOADDIR:?= =?UTF-8?q?=20fix=20=D0=BC=D1=83=D1=81=D0=BE=D1=80=20=D0=B2=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B5=20=D0=BA=D0=B0=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=B0,=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=82=D0=B0=D0=BB=D0=BE=D0=B3=20=D0=BC=D0=B5=D0=BD=D1=8C?= =?UTF-8?q?=D1=88=D0=B5=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BOOT/DSSBOOT.ASM | 60 +++++++++++++++++++++++++++++++++--------------- BOOT/boot.asm | 4 ++-- DSS/FS/FAT.asm | 12 ++++++++-- DSS/build.txt | 2 +- DSS/defines.inc | 1 - Shared_Includes | 2 +- 6 files changed, 55 insertions(+), 26 deletions(-) diff --git a/BOOT/DSSBOOT.ASM b/BOOT/DSSBOOT.ASM index 58e9b84..1a71a5a 100644 --- a/BOOT/DSSBOOT.ASM +++ b/BOOT/DSSBOOT.ASM @@ -22,10 +22,11 @@ DEFINE UNIVERSAL_BOOT 1 ;------------------------------------------------------------------------------ -ORG_ADDRESS EQU #8000 -LOAD_SECTORS EQU SECTORS_OF_LOADER.AFTER_BPB +ORG_ADDRESS EQU #8000 +MAX_SECTORS_PER_PAGE EQU #20 ;максимальное кол-во секторов в странице ;!TODO а если сектор больше 512? +LOAD_SECTORS EQU SECTORS_OF_LOADER.AFTER_BPB LOADER_IN_BPB: -.MAX_SIZE EQU _sBOOT_SECTOR.PARTITION_TABLE - _sBOOT_SECTOR_PARAMS_FAT32 +.MAX_SIZE EQU _sBOOT_SECTOR.PARTITION_TABLE - _sBOOT_SECTOR_PARAMS_FAT32 ;------------------------------------------------------------------------------ DISP ORG_ADDRESS @@ -154,7 +155,6 @@ CONTINUE: LD HL,0 LD BC,1*256 + BIOS.GetMem RST ToBIOS_18 ;GET PAGE FOR DOS LD (LOAD_CORE.BANKDOS),A - ; OUT (SLOT0),A ; CALL GET_BPB ;READ BPB @@ -183,6 +183,10 @@ CONTINUE: LD HL,0 EXX LD HL,(FCLUSTR_L) LD DE,#C000 + ; -bug: счётчик для .SMALL_CLUSTER, баг отрепортил Vasil Ivanov + ; LD A,MAX_SECTORS_PER_PAGE + ; LD (LOAD_CORE.BIG_CORE),A + ; CALL LOAD_CORE ; [ ] загрузка system.dos больше #4000 байтов EX AF,AF' @@ -193,12 +197,12 @@ CONTINUE: LD HL,0 ; IN A,(SLOT1) LD (LOAD_CORE.BANKDOS),A - LD A,SUBLOAD_SIZE + LD A,SUBLOAD_SIZE + 1 LD (LOAD_CORE.max_sectors),A LD (LOAD_CORE.BIG_CORE),A ; теперь это счётчик оставшихся секторов ; LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster) - CP #20 + 1 ; !HARDCODE кол-во загружаемых секторов + CP MAX_SECTORS_PER_PAGE + 1 ; кол-во загружаемых секторов JP NC,INC_SECTOR_NUM CALL READ_FROM_FAT ; next cluster in chain EX DE,HL @@ -209,6 +213,11 @@ CONTINUE: LD HL,0 CALL NC,LOAD_CORE .no_big_core: ; RUN_CORE: DI + ; + LD A,(READ_FAT_TABLE.FAT_PAGE) + LD C,BIOS.FreeMem + RST ToBIOS_18 + ; XOR A OUT (SYS_PORT.OFF),A ; @@ -264,7 +273,7 @@ RUN_CORE: DI INC_SECTOR_NUM: PUSH DE CALL CLUSTER_TO_SECTOR CALL GET_ABSOLUTE_SECTOR - LD DE,#20 ;!HARDCODE количество прочитанных секторов + LD DE,MAX_SECTORS_PER_PAGE ; количество прочитанных секторов ADD IX,DE JR NC,.no_inc INC HL @@ -371,11 +380,17 @@ YEPDOS: ;[ ] 17.12.2023 ; GET_BPB: XOR A + LD HL,FatBuffer + LD B,_sysFatBuffer +.loop_clear: LD (HL),A + INC HL + DJNZ .loop_clear + LD H,A LD L,A - LD (FatBuffer.FAT1_SEC_H),HL ; high word first sector FAT #1 - LD (FatBuffer.RootDirFirstSector_H),HL - LD (FatBuffer.SectorsPerFAT_H),A + ; LD (FatBuffer.FAT1_SEC_H),HL ; high word first sector FAT #1 + ; LD (FatBuffer.RootDirFirstSector_H),HL + ; LD (FatBuffer.SectorsPerFAT_H),A ; PUSH HL POP IX @@ -390,6 +405,12 @@ GET_BPB: XOR A LD BC,ZERO_SECTOR_OF_BPB.Size LDIR ; + ; -bug: пересечение буферов FAT и SYSTEM.DOS, баг отрепортил Vasil Ivanov + LD BC,1*256 + BIOS.GetMem + RST ToBIOS_18 ;GET PAGE FOR DOS + LD (READ_FAT_TABLE.FAT_PAGE),A + ; + ; LD A,(DRIVE) LD B,A AND #F0 @@ -427,7 +448,7 @@ GET_BPB: XOR A CP #F0 RET C ; - LD HL,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector) + ;LD HL,(BOOT_BUFFER + BOOT_SECTOR.BytesPerSector) LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster) LD (FatBuffer.SectorsPerCluster),A ; calc. first sector FAT @@ -625,8 +646,8 @@ GET_BPB: XOR A OR E JR NZ,.its_FAT32 ; DE=0 - LD (FatBuffer.RootDirStartCluster_L),DE - LD (FatBuffer.RootDirStartCluster_H),DE + ; LD (FatBuffer.RootDirStartCluster_L),DE + ; LD (FatBuffer.RootDirStartCluster_H),DE LD HL,4084 SBC HL,BC LD A,FAT_TYPE.x12 @@ -786,9 +807,9 @@ GETROOT: LD HL,(FatBuffer.RootDirStartCluster_L) LD BC,1 ; [x] 28/04/2024. Bug with incorrect reading root dir. Reported by Roman "Romychs" Boykov. ADD IX,BC - ADC HL,BC - DEC HL - ; + JR NC,.no_inc_HL + INC HL +.no_inc_HL: ; DEC A JR NZ,.NEXT_SECTOR RET @@ -870,7 +891,7 @@ LOAD_CORE: LD (READMEM),DE ;.skip_it: ; LD DE,(READMEM) LD A,(BOOT_BUFFER + BOOT_SECTOR.SectorsPerCluster) -.max_sectors+1: CP #20 +.max_sectors+1: CP MAX_SECTORS_PER_PAGE JR C,.SMALL_CLUSTER ; .subload: LD A,(.max_sectors) @@ -1082,7 +1103,7 @@ READ_FAT_TABLE: PUSH HL ; IN A,(SLOT3) PUSH AF - LD A,SHARED_PAGE +.FAT_PAGE+1: LD A,0 OUT (SLOT3),A ; LD A,(FatBuffer.FAT_TYPE) @@ -1151,7 +1172,7 @@ READ_FROM_FAT: PUSH HL ; IN A,(SLOT3) PUSH AF - LD A,SHARED_PAGE + LD A,(READ_FAT_TABLE.FAT_PAGE) OUT (SLOT3),A ; LD A,(FatBuffer.FAT_TYPE) @@ -1277,6 +1298,7 @@ PARTITION_START_H EQU FSIZE1+2 PARTITION_START_L EQU PARTITION_START_H+2 READMEM EQU PARTITION_START_L+2 ;BIG_CORE EQU READMEM+2 +;FAT_PAGE EQU READMEM+2 diff --git a/BOOT/boot.asm b/BOOT/boot.asm index de0d349..7ddae5f 100644 --- a/BOOT/boot.asm +++ b/BOOT/boot.asm @@ -637,8 +637,8 @@ messages: db 0 db major_version + '0','.' db (minor_version / 10) + '0',(minor_version % 10) + '0','.' db "\r\nBuild date ",SYS_BUILD_DATE - db "\r\nCopyright (c) 2006 Vasil Ivanov." - db "\r\nCopyright (c) 2023-2025 Sprinter Team." + ;db "\r\nCopyright (c) 2006 Vasil Ivanov." + db "\r\nCopyright (c) Sprinter Team." db "\r\n\n",0 ; db "System successfully installed on disk " ;1 diff --git a/DSS/FS/FAT.asm b/DSS/FS/FAT.asm index bcaa5d0..90e021d 100644 --- a/DSS/FS/FAT.asm +++ b/DSS/FS/FAT.asm @@ -548,11 +548,19 @@ LOADDIR: ;!TODO optimize CP B JR NC,.RTD1 LD B,A ; число секторов -.RTD1: LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; номер диска +.RTD1: PUSH AF ; 21/04/2025 fix мусор в странице каталога, если каталог меньше страницы + LD A,(CORE_BUFFERS.FS_Buffer.DRIVE) ; номер диска LD DE,DIRPAGE.buffer ; буфер LD C,Dss.DRV.Read ; чтение секторов RST ToDSS.DRV - POP AF + ; !FIXIT нет проверки на ошибку + ; 21/04/2025 fix мусор в странице каталога, если каталог меньше страницы + POP AF + JR NC,.exit + XOR A + LD (DE),A + ; +.exit: POP AF OUT (SLOT3),A RET ;----------------------------------------------------------------------; diff --git a/DSS/build.txt b/DSS/build.txt index 3e932fe..597975b 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -34 \ No newline at end of file +35 \ No newline at end of file diff --git a/DSS/defines.inc b/DSS/defines.inc index 7ffd5d8..d5fd64f 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -156,6 +156,5 @@ MOUSE_BAUD: ; ;----------------------------------------------------; -; Внимание, стек хранится в той же странице! SUBLOAD_SIZE EQU 2 ; кол-во секторов которое надо подгрузить после загрузки system.dos в страницу ;----------------------------------------------------; diff --git a/Shared_Includes b/Shared_Includes index 040541d..e0dd54c 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 040541dcbc42338505524aae36b43aecca4dee47 +Subproject commit e0dd54cb5615a23ea55bd217578aab57481fcf77