Автоопределение ATA диска из MBR
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
Автоопределение ATA диска из MBR
Этот проект разработан на основе предыдущего,
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)
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 скачиваний
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
Автоопределение ATA диска из MBR
Обнаружился AWARD 2.09 с ограничением на количество секторов (31 максимум), из-за
неправильной маски выделения номера сектора.
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
Автоопределение ATA диска из MBR
Итак, новая версия 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.
Внесены следующие изменения.
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 скачиваний
Автоопределение ATA диска из MBR
Всё хорошо, но по мне так лучше с минимальным временем ожиданием нажатия F, или вообще без ожидания. Клавишу можно и заранее зажать, а загрузка с дисковода не так часто нужна ведь.
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
Автоопределение ATA диска из MBR
beabut, тут один нюанс. Старые BIOS (особенно, где только fixed type, для которых собственно
загрузчик и создавался) обычно не позволяют менять загрузочную последовательность, и дискету нужно
успеть вставить когда POST и загрузчик уже прошел, но до того как загрузчик начнет "пробовать"
дискету. Без паузы очень трудно поймать этот момент. Если в BIOS есть изменение <C: A:> <A: C:>, то
тогда да, можно и отказаться от паузы.
Однако сократить паузу не проблема, сколько секунд будет приемлимо?
загрузчик и создавался) обычно не позволяют менять загрузочную последовательность, и дискету нужно
успеть вставить когда POST и загрузчик уже прошел, но до того как загрузчик начнет "пробовать"
дискету. Без паузы очень трудно поймать этот момент. Если в BIOS есть изменение <C: A:> <A: C:>, то
тогда да, можно и отказаться от паузы.
Однако сократить паузу не проблема, сколько секунд будет приемлимо?
Последний раз редактировалось i8088 24.08.2020,11:25, всего редактировалось 1 раз.
Автоопределение ATA диска из MBR
i8088, не подумал про это. тогда может 3-5 секунд? Или вообще на выбор для установки две версии, с ожиданием или без.
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
Автоопределение ATA диска из MBR
OK, я подумаю. Самое простое - разместить константу задержки например в последних двух байтах
atadet.bin, и каждый может поменять, по своему вкусу. Сейчас конечно тоже можно "врукопашную"
менять, но смещение плавает в зависимости от версии, и это неудобно для пользователя.
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
Автоопределение ATA диска из MBR
beabut, ловите версию 2.5!
Теперь можно задавать задержку из AUTODI.EXE, последним необязательным
параметром, приблизительно в секундах
AUTODI AI 80 4 - установить загрузчик на диск 80 с задержкой в ~4sec
Если поставить 0, не вводить ничего, или ввести значение, которое не может быть
интерпретировано как целое число, то оно игнорируется, и остается задержка по
умолчанию. Сама задержка хранится в последних двух байтах atadet.bin, гранулярность
задержки ~ 55-60ms. Максимально возможная задержка - около часа.
Теперь можно задавать задержку из AUTODI.EXE, последним необязательным
параметром, приблизительно в секундах
AUTODI AI 80 4 - установить загрузчик на диск 80 с задержкой в ~4sec
Если поставить 0, не вводить ничего, или ввести значение, которое не может быть
интерпретировано как целое число, то оно игнорируется, и остается задержка по
умолчанию. Сама задержка хранится в последних двух байтах atadet.bin, гранулярность
задержки ~ 55-60ms. Максимально возможная задержка - около часа.
- Вложения
-
- ad_v25.zip
- (20.8 КБ) 122 скачивания
Автоопределение ATA диска из MBR
i8088, отлично, спасибо. Теперь даже на LS-486E со встроенным контроллером работает. Самая первая версия не работала, только если отдельную мультяшку вставить.
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
Автоопределение ATA диска из MBR
beabut, и Вам спасибо за проверку! Странно, что первая версия не работала
на LS-486E, тк я отлаживал ее как раз на LS-486E и на VLSI 286. Может настройка
в BIOS какая поменялась?
на LS-486E, тк я отлаживал ее как раз на LS-486E и на VLSI 286. Может настройка
в BIOS какая поменялась?
Автоопределение ATA диска из MBR
i8088, проверил V15, и вправду работает. В том числе и после загрузки дефолтных значений cmos. Работает даже после автодетекта биосом в LBA, загрузчик выдаёт ошибку, но дос грузит. Так что не знаю что это было.