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