From abe98890123efb9cda9192a796206937e906757b Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 25 Apr 2025 23:21:55 +1000 Subject: [PATCH] =?UTF-8?q?BOOT:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0?= =?UTF-8?q?=20x86=20=D0=B2=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D1=87?= =?UTF-8?q?=D0=B8=D0=BA=D0=B5=20JMP=20$=20=D1=87=D1=82=D0=BE=D0=B1=20?= =?UTF-8?q?=D0=BD=D0=B0=20PC=20=D0=B2=D1=81=D1=91=20=D0=B7=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D0=BB=D0=BE=20=D0=B5=D1=81=D0=BB=D0=B8=20?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=20=D0=B7=D0=B0=D1=85=D0=BE=D1=87=D0=B5=D1=82?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8=D1=82=D1=8C=D1=81?= =?UTF-8?q?=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BOOT/boot.asm | 39 ++++++++++++++++++++++++++++----------- DSS/CHANGES.LOG | 14 +++++++++++++- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/BOOT/boot.asm b/BOOT/boot.asm index 7ddae5f..3514291 100644 --- a/BOOT/boot.asm +++ b/BOOT/boot.asm @@ -370,12 +370,13 @@ write_to_floppy: sbc hl,de ret c overwrite_floppy: - ; перекидывание части загрузчика в 0 сектор - LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical - LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size) - LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size - LDIR - ; + CALL SETUP_ZERO_SECTOR + ;; перекидывание части загрузчика в 0 сектор + ;LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical + ;LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size) + ;LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size + ;LDIR + ;; ; записать boot-сектор назад ld a,(disk) ; заданный номер диска ld hl,0 ; ст. разряд лог. сектора @@ -467,11 +468,15 @@ write_to_hard_disk: ; JR write_to_BPB.no_push write_to_BPB: PUSH BC - ; перекидывание части загрузчика в 0 сектор -.no_push: LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical - LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size) - LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size - LDIR +.no_push: CALL SETUP_ZERO_SECTOR + ;; перекидывание части загрузчика в 0 сектор + ;LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical + ;LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size) + ;LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size + ;LDIR + ;; защита от бакланизма (загрузка с этого диска на PC приведет к зависанию. JMP $) + ;LD HL,#FEEB ; opcode jmp $ + ;LD (buffer),HL ; запись в 0 сектор куска загрузчика pop af ; заданный номер диска ld hl,0 ; ст. разряд лог. сектора @@ -539,6 +544,18 @@ Read_MBR: LD HL,0 SBC HL,DE SCF RET + + +SETUP_ZERO_SECTOR: + ; перекидывание части загрузчика в 0 сектор + LD HL,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.physical + LD DE,buffer + (_sBOOT_SECTOR.PARTITION_TABLE - DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size) + LD BC,DSS_Boot_Loader.ZERO_SECTOR_OF_BPB.Size + LDIR + ; защита от бакланизма (загрузка с этого диска на PC приведет к зависанию. JMP $) + LD HL,#FEEB ; opcode jmp $ + LD (buffer),HL + RET ;------------------------------------------------- ; Выделить заданный диск из ком-строки ; diff --git a/DSS/CHANGES.LOG b/DSS/CHANGES.LOG index 4ea1f7b..4ac6f67 100644 --- a/DSS/CHANGES.LOG +++ b/DSS/CHANGES.LOG @@ -14,11 +14,23 @@ [ ] блокировка файлов в файловых манипуляторах (чтоб не открывать на запись уже открытый на запись файл, например) Среднее: [x] перед ресканом драйвов проверять открытые хэндлы и если буква диска меняется, то менять драйв в хэндле -[ ] начать работать с функциями REMOVABLE и MEDIA CHECK rst #18. Возвращать значение #FF, если порядок букв изменился +[?] начать работать с функциями REMOVABLE и MEDIA CHECK rst #18. Возвращать значение #FF, если порядок букв изменился Вообще не важное: [ ] исправить выход из функции #41 при возможном увеличении номера таски на 1 при 255 ----------------------------------------------------------------------------------------------------------------------------------------------- +DSS 1.71.35 +Изменения после версии 1.70.2 +- дос и биос могут устанавливать зачем-то режим txt 40x32 и нормально в нём выводить текст +- LOADDIR:fix мусор в странице каталога, если каталог меньше страницы +- DiskINF: костыль для атрибута 0. Настоял Савелий)). Если в корне раньше метки диска попадался файл с атрибутом 0, то функция возвращала его имя как метку диска +- процедура запуска EXE могла залезть не в ту папку перед передачей управления запускаемому приложению с версией EXE = 0 в заголовке +- ATAPI устройство всегда получает букву, даже без носителя +- Обрабатывается ошибка "смена носителя" +- файл не создастся, если нет свободного манипулятора +- поменял квадратик курсора в консоли для режима OVR (который после нажатия на Ins) +- Мелкие правки, рюшечки, багфиксы неупомянутые в этом списке по причине амнезии и халатности + DSS 1.70.2 Изменения после версии 1.70