Автоопределение ATA диска из MBR

Описания, советы, ремонт, эксплуатация старых IBM PC-совместимых ПК
i8088
Advanced Member
Сообщения: 4383
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан

Конкурсы

Вклад в сообщество

Автоопределение ATA диска из MBR

Сообщение i8088 » 13.08.2020,15:56

Этот проект разработан на основе предыдущего,
https://www.phantom.sannata.org/viewtop ... &start=121
но с CF bug-ом он уже не связан, и очень сильно переработан. Во избежание путаницы,
я создал новую тему.

Идея состоит в возможности загрузки с любых дисков до 504MB, даже если BIOS не позволяет
выставить произвольную геометрию, а также просто если нежелательно (лень) каждый раз
выставлять в SETUP геометрию вручную. Установив предлагаемый загрузчик на часто используемые
HDD/CF, можно их переставлять, не выставляя каждый раз геометрию в SETUP, а просто один раз
выставить тип 1 (у него самые маленькте параметры CHS, и установленный HDD/CF как правило
имеет параметры CHS больше, чем у типа 1 (чтобы не было ошибки при загрузке). Разумеется, для
загрузки с CF, BIOS не должен иметь CF бага. DOS должен быть заранее установлен на другой
машине с native геометрией диска. Если нужно подключить два диска (master/slave), то выставьте
для обеих дисков тип 1 в SETUP.

Важно отметить, что это решение НЕ ПОТРЕБЛЯЕТ RAM вообще, загрузчик делает свое дело
и более не нужен. Вся работа с диском ведется штатным BIOS.

Я убрал из кода загрузчика все 286 инструкции, чтобы не было зависаний на XT, если Вы хотите
подключать HDD/CF поперемено то к XT-IDE/CF, то к 286. Загрузчик не должен создать проблем с
XT-IDE/CF, тк на XT адреса другие (он просто не определит диски и не будет менять HDPT), но я не
могу это проверить ввиду отсутствия у меня XT-IDE/CF.


Ограничения.

1. Теоретически возможна проблема с совсем старыми BIOS, если есть ограничения (баги) на
параметры CHS (в пределах 1024/16/63 естественно), но мне пока такой BIOS не встретился.

2. Нельзя загружаться с канала, отличного от Primary master (на более современых машинах), если к
Primary Master/Slave подключен диск(и), это может привести к замене штатной HDPT в RAM (и потере
трансляции для Primary master/slave).

3. Теоретически возможна проблема, если подключенный SCSI диск встал между master и slave:
(80 - Primary Master, 81 - SCSI, 82 - Primary Slave). Но на старых BIOS это невозможно, SCSI BIOS либо
встанет после ATA, либо вообще запортит ATA BIOS (если контроллер совсем старый, или это MFM),
и доступ к ATA пропадает. Если же подключен Primary Master и SCSI, то загрузчик не определит
отсутствующий Primary Slave, и не будет менять подавть init для SCSI. Хотя SCSI диски вообще должны
игнорировать эту функцию, и проблем в принципе не должно быть. С системой из двух ATA дисков и
одним SCSI (на AHA-1542CF) проблем не было.

4. Этот способ может не работать с Conner HDD - они запоминают неверную геометрию, которую подал
BIOS, и для восстановления нужно выставить правильные параметры и подать ATA команду
INITIALIZE_DEVICE_PARAMS.

5. Пока что, при "неверном" fixed type невозможно работать с HDD, загрузившись c дискеты.
Изменение HDPT и init_hdd_params при загруженном DOS работает с точки зрения int13h нормально,
но DOS продолжает работать со старой геометрией. Как заставить произвольную версию DOS изменить
геометрию на ходу, я не знаю, боюсь штатно с любой версией DOS это невозможно. Если кто знает,
просьба подсказать.

Тем не менее, возможно попробовать модификацию загрузчика на FDD, по аналогии с HDD.
Свободного места на первой дорожке на FDD, в отличие от HDD, нет, но придумать что-нибудь можно (нужно запрятать два сектора, например записать файл в строго определенные 2 сектора дискеты).

Устанавливать загрузчик так-же, как и ранее (CFI.EXE).
AUTODI.EXE MB drv - backup MBR
AUTODI.EXE MR drv - restore MBR
AUTODI.EXE AI drv - установить загрузчик с autodetect
drv - номер диска в нотации int13h (80-83)
Вложения
ad_v15.zip
(18.74 КБ) 139 скачиваний

i8088
Advanced Member
Сообщения: 4383
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан

Конкурсы

Вклад в сообщество

Автоопределение ATA диска из MBR

Сообщение i8088 » 16.08.2020,09:11

i8088 писал(а): 13.08.2020,15:56 1. Теоретически возможна проблема с совсем старыми BIOS, если есть ограничения (баги) на
параметры CHS (в пределах 1024/16/63 естественно), но мне пока такой BIOS не встретился.
Обнаружился AWARD 2.09 с ограничением на количество секторов (31 максимум), из-за
неправильной маски выделения номера сектора.

i8088
Advanced Member
Сообщения: 4383
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан

Конкурсы

Вклад в сообщество

Автоопределение ATA диска из MBR

Сообщение i8088 » 22.08.2020,08:11

Итак, новая версия 2.4, код сильно переработан.

Внесены следующие изменения.

1. Поскольку на XT этот загрузчик бесполезен, то в случае если machine-ID не равно 0xFC (те это не AT),
исполняется только стандартная часть загрузчика. Это не проверено, тк я пока не могу подключить ATA
диск к XT. Если кто проверит, буду признателен.

2. Положение буфера для автодетекта теперь вычисляется динамически и располагается он под верхней
границей base DRAM, ниже кода автоопределения (DOS затирает все это при загрузке).

3. Решен вопрос работы с HDD при загрузке с FDD! Теперь после пере-определения диска будет
сообщение: <Press F for boot from FDD, any key from HDD>
Если нажать любую клавишу (кроме F или f), загрузимся с HDD, если F или f - то с FDD (а если дискеты
в дисководе не окажется (или вернет ошибку чтения), то после 3-х "опробований" FDD, загрузимся с HDD.
А если ничего не нажимать, то примерно через 8-10s загрузчик автоматически переходит на загрузку с HDD.
Вложения
ad_v24.zip
(19.07 КБ) 126 скачиваний

beabut
Advanced Member
Сообщения: 369
Зарегистрирован: 18.08.2020,11:07
Откуда: Муром

Автоопределение ATA диска из MBR

Сообщение beabut » 22.08.2020,21:56

Всё хорошо, но по мне так лучше с минимальным временем ожиданием нажатия F, или вообще без ожидания. Клавишу можно и заранее зажать, а загрузка с дисковода не так часто нужна ведь.

i8088
Advanced Member
Сообщения: 4383
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан

Конкурсы

Вклад в сообщество

Автоопределение ATA диска из MBR

Сообщение i8088 » 23.08.2020,08:29

beabut, тут один нюанс. Старые BIOS (особенно, где только fixed type, для которых собственно
загрузчик и создавался) обычно не позволяют менять загрузочную последовательность, и дискету нужно
успеть вставить когда POST и загрузчик уже прошел, но до того как загрузчик начнет "пробовать"
дискету. Без паузы очень трудно поймать этот момент. Если в BIOS есть изменение <C: A:> <A: C:>, то
тогда да, можно и отказаться от паузы.

Однако сократить паузу не проблема, сколько секунд будет приемлимо?
Последний раз редактировалось i8088 24.08.2020,11:25, всего редактировалось 1 раз.

beabut
Advanced Member
Сообщения: 369
Зарегистрирован: 18.08.2020,11:07
Откуда: Муром

Автоопределение ATA диска из MBR

Сообщение beabut » 23.08.2020,14:53

i8088, не подумал про это. тогда может 3-5 секунд? Или вообще на выбор для установки две версии, с ожиданием или без.

i8088
Advanced Member
Сообщения: 4383
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан

Конкурсы

Вклад в сообщество

Автоопределение ATA диска из MBR

Сообщение i8088 » 23.08.2020,17:58

beabut писал(а): 23.08.2020,14:53 i8088, не подумал про это. тогда может 3-5 секунд? Или вообще на выбор для установки две версии, с ожиданием или без.
OK, я подумаю. Самое простое - разместить константу задержки например в последних двух байтах
atadet.bin, и каждый может поменять, по своему вкусу. Сейчас конечно тоже можно "врукопашную"
менять, но смещение плавает в зависимости от версии, и это неудобно для пользователя.

i8088
Advanced Member
Сообщения: 4383
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан

Конкурсы

Вклад в сообщество

Автоопределение ATA диска из MBR

Сообщение i8088 » 24.08.2020,08:15

beabut, ловите версию 2.5!

Теперь можно задавать задержку из AUTODI.EXE, последним необязательным
параметром, приблизительно в секундах

AUTODI AI 80 4 - установить загрузчик на диск 80 с задержкой в ~4sec

Если поставить 0, не вводить ничего, или ввести значение, которое не может быть
интерпретировано как целое число, то оно игнорируется, и остается задержка по
умолчанию. Сама задержка хранится в последних двух байтах atadet.bin, гранулярность
задержки ~ 55-60ms. Максимально возможная задержка - около часа.
Вложения
ad_v25.zip
(20.8 КБ) 122 скачивания

beabut
Advanced Member
Сообщения: 369
Зарегистрирован: 18.08.2020,11:07
Откуда: Муром

Автоопределение ATA диска из MBR

Сообщение beabut » 24.08.2020,19:05

i8088, отлично, спасибо. Теперь даже на LS-486E со встроенным контроллером работает. Самая первая версия не работала, только если отдельную мультяшку вставить.

i8088
Advanced Member
Сообщения: 4383
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан

Конкурсы

Вклад в сообщество

Автоопределение ATA диска из MBR

Сообщение i8088 » 24.08.2020,19:20

beabut, и Вам спасибо за проверку! Странно, что первая версия не работала
на LS-486E, тк я отлаживал ее как раз на LS-486E и на VLSI 286. Может настройка
в BIOS какая поменялась?

beabut
Advanced Member
Сообщения: 369
Зарегистрирован: 18.08.2020,11:07
Откуда: Муром

Автоопределение ATA диска из MBR

Сообщение beabut » 24.08.2020,20:01

i8088, проверил V15, и вправду работает. В том числе и после загрузки дефолтных значений cmos. Работает даже после автодетекта биосом в LBA, загрузчик выдаёт ошибку, но дос грузит. Так что не знаю что это было.

Ответить