286 AMI and AWARD BIOS with autodetect
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
286 AMI and AWARD BIOS with autodetect
Я модифицировал 286 BIOS на предмет добавления автодетекта. Приложена первая
модификация AMI D286, выпуск 04/09/90. Это BIOS для плат не требующих особой
инициализации чипсета, например VLSI 1xxx, G2, TACT8230x итп. Используемый
метод модификации очень простой, и в принципе патч можно встроить и в BIOS-ы,
где даже нет user type, лишь бы хватило места для патча.
Для автодетекта надо просто у желаемого HDD поставить зарезервированный тип,
я выбрал тип 30 (можно и любой другой, начиная с 16 и кончая 46). Если диск
поддерживает автодетект, то параметры C/H/S будут заменены на полученные из
диска, а если например стоит MFM диск (не поддерживающий автоопределение)
типа 30, то параметры останутся заданными в типе30 (последнее не проверялось).
Если диска вообще нет, то после штатного тайм-аута получим ошибку, и если
продолжим загрузку (по F1), то через int13h (ah=08h) будет сообщаться о
несуществующем диске, с параметрами из типа30 (это штатное поведение BIOS,
с патчем не связано).
Недостатком текущей версии является отсутствие вывода сообщений на экран,
относительно факта определения диска и его параметров, те автоопределение
"тихое". Для упрощения многие процедуры в коде автоопределения продублированы.
Но если использовать соответствующие штатные процедуры из BIOS, можно
сократить патч очень сильно (текущий размер патча ~500байтов).
А работает оно так. В BIOS есть процедура подачи диску команды INITIALIZE_DEVICE_PARAMS,
(int13h ah=09h). Параметры берутся из предварительно сформированных HDPT таблиц (адрес
таблицы хранится для первого диска по адресу 0000h:0104h, для второго 0000h:0118h. Я вставляю
перед вызовом этой процедуры дополнительный код, который подменяет HDPT таблицу, если тип
диска совпадает с зарезервированным для автоопределения CMOS type.
Относительно HDPT tables.
Если используются fixed type HDD, то таблица просто берется из BIOS table, начинается таблица типов
по адресу 0F000h:0E401h. Если же используем user type (или автоопределенные патчем параметры), то
таблица HDPT располагается в ОЗУ, причем расположение таблиц зависит от опции BIOS "Scratch RAM
option".
If required, BIOS will use 256 bytes of RAM
(1) : Using BIOS stack area at 0030:0000
(2) : Reducing base memory size by 1KB
Если выбрать 2, то базовая память будет ограничена 639 KB, а таблицы расположены в участке между
639 и 640KB, по адресам
disk0 9fc0h:003dh
disk1 9fc0h:004dh
На каждую таблицу требуется 16 байтов.
Если же выбрать 1, то базовая память не будет ограничена, а таблицы
расположены по адресам
disk0 002dh:003dh
disk1 002dh:004dh
При этом пропадают часть места под векторы прерываний, это соответственно
для disk0 будут c3 c4 c5 c6, а для disk0 будут c7 c8 c9 ca
Это надо иметь ввиду, и не использовать эти вектора в своих программах.
Код патча игнорирует "Scratch RAM option", и HDPT располагаются в областях disk0 002dh:003dh
и disk1 002dh:004dh, те как с "Scratch RAM option"=1. Временный буфер в 512байтов, для чтения из
диска параметров по команде ATA_IDENTIFY, располагается под границей 512KB, те 286 плата должна
быть оснащена хотя-бы 512KB RAM.
Я проверил с разными HDD, затруднение было только с ST157A, который очень тугодумен
и не успевал определиться с первого раза, после перезагрузки автоопределялся. Такое собственно
бывает и на заводских BIOS, иногда в относительно новых BIOS встречается опция типа "HDD delay"
Приложен оригинальный и модифицированный BIOS
модификация AMI D286, выпуск 04/09/90. Это BIOS для плат не требующих особой
инициализации чипсета, например VLSI 1xxx, G2, TACT8230x итп. Используемый
метод модификации очень простой, и в принципе патч можно встроить и в BIOS-ы,
где даже нет user type, лишь бы хватило места для патча.
Для автодетекта надо просто у желаемого HDD поставить зарезервированный тип,
я выбрал тип 30 (можно и любой другой, начиная с 16 и кончая 46). Если диск
поддерживает автодетект, то параметры C/H/S будут заменены на полученные из
диска, а если например стоит MFM диск (не поддерживающий автоопределение)
типа 30, то параметры останутся заданными в типе30 (последнее не проверялось).
Если диска вообще нет, то после штатного тайм-аута получим ошибку, и если
продолжим загрузку (по F1), то через int13h (ah=08h) будет сообщаться о
несуществующем диске, с параметрами из типа30 (это штатное поведение BIOS,
с патчем не связано).
Недостатком текущей версии является отсутствие вывода сообщений на экран,
относительно факта определения диска и его параметров, те автоопределение
"тихое". Для упрощения многие процедуры в коде автоопределения продублированы.
Но если использовать соответствующие штатные процедуры из BIOS, можно
сократить патч очень сильно (текущий размер патча ~500байтов).
А работает оно так. В BIOS есть процедура подачи диску команды INITIALIZE_DEVICE_PARAMS,
(int13h ah=09h). Параметры берутся из предварительно сформированных HDPT таблиц (адрес
таблицы хранится для первого диска по адресу 0000h:0104h, для второго 0000h:0118h. Я вставляю
перед вызовом этой процедуры дополнительный код, который подменяет HDPT таблицу, если тип
диска совпадает с зарезервированным для автоопределения CMOS type.
Относительно HDPT tables.
Если используются fixed type HDD, то таблица просто берется из BIOS table, начинается таблица типов
по адресу 0F000h:0E401h. Если же используем user type (или автоопределенные патчем параметры), то
таблица HDPT располагается в ОЗУ, причем расположение таблиц зависит от опции BIOS "Scratch RAM
option".
If required, BIOS will use 256 bytes of RAM
(1) : Using BIOS stack area at 0030:0000
(2) : Reducing base memory size by 1KB
Если выбрать 2, то базовая память будет ограничена 639 KB, а таблицы расположены в участке между
639 и 640KB, по адресам
disk0 9fc0h:003dh
disk1 9fc0h:004dh
На каждую таблицу требуется 16 байтов.
Если же выбрать 1, то базовая память не будет ограничена, а таблицы
расположены по адресам
disk0 002dh:003dh
disk1 002dh:004dh
При этом пропадают часть места под векторы прерываний, это соответственно
для disk0 будут c3 c4 c5 c6, а для disk0 будут c7 c8 c9 ca
Это надо иметь ввиду, и не использовать эти вектора в своих программах.
Код патча игнорирует "Scratch RAM option", и HDPT располагаются в областях disk0 002dh:003dh
и disk1 002dh:004dh, те как с "Scratch RAM option"=1. Временный буфер в 512байтов, для чтения из
диска параметров по команде ATA_IDENTIFY, располагается под границей 512KB, те 286 плата должна
быть оснащена хотя-бы 512KB RAM.
Я проверил с разными HDD, затруднение было только с ST157A, который очень тугодумен
и не успевал определиться с первого раза, после перезагрузки автоопределялся. Такое собственно
бывает и на заводских BIOS, иногда в относительно новых BIOS встречается опция типа "HDD delay"
Приложен оригинальный и модифицированный BIOS
- Вложения
-
- orig286.zip
- (41.19 КБ) 196 скачиваний
-
- 286_auto.zip
- (46.92 КБ) 194 скачивания
Последний раз редактировалось i8088 30.08.2020,16:52, всего редактировалось 1 раз.
- nimdasys_inbox_ru
- Advanced Member
- Сообщения: 3660
- Зарегистрирован: 05.06.2019,18:58
- Откуда: Черкесск
-
Вклад в сообщество
286 AMI BIOS with autodetect
У меня на мамке (DAT286 Rev D) на базе Headland HT-12 выставлен User Type = 47 и при значении "Scratch RAM option" равным 1 загрузка MS-DOS с диска не осуществляется, но при значении 2 всё работает! Поможет ли данный патч или это для данной платы так и задумано ?!
Последний раз редактировалось nimdasys_inbox_ru 25.06.2020,17:56, всего редактировалось 1 раз.
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
286 AMI BIOS with autodetect
Патч добавляет автодетект, и более ничего не меняет.
Но вообще это странно, что у Вас за версия DOS? Возможно HDPT "наезжает"
на какие-то используемые векторы прерываний. У вас в config.sys и autoexec.bat
ничего необычного нет?
HT-12 я не помню, что за чипсет, размер памяти перемычками ставится
или определяет сам?
Модифицированный BIOS только для плат, не требующих особой инициализации
чипсета. Признаки таких плат - размер памяти перемычками ставится и нет опций
в BIOS типа shadow, EMS, wait state
Но вообще это странно, что у Вас за версия DOS? Возможно HDPT "наезжает"
на какие-то используемые векторы прерываний. У вас в config.sys и autoexec.bat
ничего необычного нет?
HT-12 я не помню, что за чипсет, размер памяти перемычками ставится
или определяет сам?
Модифицированный BIOS только для плат, не требующих особой инициализации
чипсета. Признаки таких плат - размер памяти перемычками ставится и нет опций
в BIOS типа shadow, EMS, wait state
Последний раз редактировалось i8088 25.06.2020,17:58, всего редактировалось 1 раз.
- nimdasys_inbox_ru
- Advanced Member
- Сообщения: 3660
- Зарегистрирован: 05.06.2019,18:58
- Откуда: Черкесск
-
Вклад в сообщество
286 AMI BIOS with autodetect
MS-DOS 6.22i8088 писал(а): ↑25.06.2020,17:56 Патч добавляет автодетект, и более ничего не меняет.
Но вообще это странно, что у Вас за версия DOS?
HT-12 я не помню, что за чипсет, размер памяти перемычками ставится
или определяет сам?
Модифицированный BIOS только для плат, не требующих особой инициализации
чипсета. Признаки таких плат - размер памяти перемычками ставится и нет опций
в BIOS типа shadow, EMS, wait state
Сам определяет...
Вот тут про него написано...
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
286 AMI BIOS with autodetect
Тогда этот BIOS нельзя использовать с Вашей платой. После окончательной
отладки можно и другие BIOS модифицировать, я выбрал такой BIOS как подходящий
к большому количеству ранних плат, если кто захочет испытать.
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
286 AMI BIOS with autodetect
Странно, я теперь вспомнил, у меня очень похожая плата, в кейсе стоит. Никиаких
проблем с "Scratch RAM option" не припоминаю, но у меня там MSDOS версии 5 стоит
286 AMI BIOS with autodetect
Помню, на одной и той-же материнке 286 VLSI, вдруг перестал работать и пришлось переключать на "значение 2". В деталях вспомнить не смогу (в то время, точно знал что поменялось в железе), то-ли связанное с включением два CF-диска на кабеле, то-ли CF-Lite + Multi-IO с еще CF-диск, или Оверлей прослойка (для >500мб)...nimdasys_inbox_ru писал(а): ↑25.06.2020,17:49 Headland HT-12 выставлен User Type = 47 и при значении "Scratch RAM option" равным 1 загрузка MS-DOS с диска не осуществляется, но при значении 2 всё работает!
Потом эта проблема исчезла, когда изменил структуру в железе (сейчас не вспомню).
Последний раз редактировалось Ekb 25.06.2020,22:37, всего редактировалось 1 раз.
286 AMI BIOS with autodetect
Полезная вещь. Если получится настроить на 2x32 - попробую на своей VLSI с Winbond'ом.
286 AMI BIOS with autodetect
Проверил на VLSI (джампер на 32к на ней есть). В основном, работает, но сигейт ST3491 виснет при автоопределении (так же виснет при принудительной настройке, поэтому, похоже, проблема в BIOS, а не в патче). И... CF-ки не работают. Выдают HDD drive failure.
-
- Advanced Member
- Сообщения: 4383
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
-
Конкурсы
Вклад в сообщество
286 AMI BIOS with autodetect
Спасибо за проверку!
Очень странно, ST3491A я только сегодня утром проверял - перемычки у Вас правильно стоят?
CF тоже все работали, и как единственный master, и в паре с HDD. Сейчас еще раз
проверил flash CISKO 256MB как master с автоопределением - DRDOS с нее загрузился.
Правда я проверял на TACT8230x, но это не должно же от чипсета зависеть. Впрочем
VLSI 1xxx у меня тоже есть, можно будет проверить.
CF у Вас не работают вообще никак, с user type тоже? Может быть с мультикартой
проблема? Перемычка 1ws/0ws как стоит? Может быть мультикарта недостаточно
быстрой оказалась?