В архивных целях закину сюда инфо:
1) Я не мог найти исходные тексты БИОС версии 2.6, но я нашел исходные тексты для версии 2.1. Я дизассеблировал файл БИОС версии 2.6 и внес правки в код версии 2.1 таким образом, что из него собирается файл, идентичный файлу версии 2.6. Исходный текст версии 2.1 был при этом немного почищен от мусора, который в компиляции не участвует. Получившийся в результате текст выложен на облаке Mail.ru в zip-архиве. В архиве есть сам текст и автоматический сборщик, в результате работы которого получаются 2 файла, которые можно зашить в микросхемы БИОС. И в архиве есть инструкция. Начните с нее.
2) Кстати, я в начале 2023 года смог найти контакты программиста из Киева, который этот БИОС написал. Максим Парамонов, его копирайт есть в файле БИОС версии 2.6. Я ему написал на предмет исходных текстов для версии 2.6, но он ответил, что у него ничего не сохранилось. А у меня руки только сейчас дошли этим заняться. Из полезной информации, которую сообщил автор, можно выделить только то, что микросхемы перекодировщика адресов ОЗУ, который есть в Поиске-2, вносили дополнительные задержки, что привело к увеличению проблем с ОЗУ. Возможно, это была одна из причин, по которой в Поиске-3 от перекодировщика отказались.
3) В общих чертах, изменения в БИОС с версии 2.1 по 2.6 следующие:
1. Введена задержка при включении компьютера;
2. Убрано тестирование памяти при перезагрузке по нажатию Ctrl+Alt+Del;
3. Добавлено тестирование наличия 4 COM-портов и 2 параллельных портов;
4. Внесены многочисленные, но небольшие, исправления в работу с дисководами и жесткими дисками;
5. Внесены мелкие изменения в обработчик INT10 (видео) и из него полностью убрана процедура работы со световым пером;
6. Введена возможность выбора между загрузкой с дискеты и загрузкой с жесткого диска;
7. Убран учет результатов внешнего теста памяти (видимо, на производстве использовали и результаты в CMOS записывали);
8. Убрана возможность запуска отладочного БИОС с адреса C8000H (тоже использовали при производстве);
9. Сокращено количество вариантов выбора конфигурации жесткого диска с 14 до 5;
10. Исправлено формирование слова конфигурации, которое размещается при загрузке компьютера в ОЗУ в сегменте данных 400H;
11. Частично убран мусорный код, использовавшийся для отладки.
При этом была допущена, как минимум, 1 ошибка. Код в файле POISKPR.ASM, отвечающий за запись значений 0xFFH в перекодирощик адресов ОЗУ, был перемещен. В результате пропала первоначальное обнуление регистра AL, необходимое для работы этого фрагмента кода. Этот фрагмент кода может исполняться только в двух случаях: сразу при включении компьютера и при перезагрузке после выхода из меню SETUP БИОС. В первом случае регистр и так аппаратно обнулен (хотя это неэстетично - использовать значение из регистра предварительно не записав в него ничего). Второй случай хуже, так как AL при выходе из SETUP содержит младший байт контрольной суммы CMOS. Куда при этом будет осуществляться запись при инициализации перекодировщика, предсказать нельзя. Спасает ситуацию то, что дальше осуществляется тестирование памяти, которое записывает в перекодировщик новые данные. А исправлять ошибку автор не стал, так как код оказался написан настолько плотно, что просто нет места в bin-файле. Для этого надо перемещать еще фрагмент кода на другой адрес.
Поиск-2 и все-все-все
Re: Поиск-2 и все-все-все
Еще инфо от автора.
Были выявлены еще 2 ошибки, на этот раз в обработчике прерывания int 1A.
1. При вызове процедуры (AH) = 3 УСТАНОВКА ТЕКУЩЕГО ВРЕМЕНИ при установке бита перехода на летнее время применяется команда маскирования AND AL,23H. Собственно, этот бит - последний в регистре B часов, и его старое значение надо обнулить, поэтому правильная команда AND AL,22H. Но при отсутствии перехода на летнее время эта ошибка никак себя не проявит.
2. При вызове процедуры (AH) = 6 УСТАНОВКА СИГНАЛА БУДИЛЬНИКА выполняется такой код:
IN AL,0A1H
AND AL,0FEH
OUT 0A1H,AL
Этот код должен разрешать прерывание, которое генерируют часы при срабатывании будильника. Этот код был скопирован один в один из исходных текстов БИОС IBM PC AT. И адрес порта A1H оставлен без изменения. Это грубейшая ошибка, так как в IBM PC AT этот адрес соответствует ведомому контроллеру прерываний (всего их там 2), а команда AND AL,0FEH разрешает прерывание по тому входу ведомого, на котором висят часы. Но в Поиске нет ведомого контроллера, там только 1 контроллер, а часы могут висеть на IRQ 2, 3, 4, 7 в зависимости от переключателя на материнской плате. Такая возможность выбора представляет сложность при программировании. Если предположить, что часы находятся на IRQ 2, то правильный код должен выглядеть так:
IN AL,021H
AND AL,0FBH
OUT 021H,AL
где 21H - адрес порта единственного контроллера.
Если разрешать сразу 4 входа прерываний, то AND AL,0FBH надо заменить на AND AL,063H
А теперь - к вопросу о периоде регенерации оперативной памяти.
Регенерация осуществляется таймером номер 1 микросхемы КР580ВИ53 с периодом 15,9 мкс. Но по техническим условиям (ТУ) на микросхемы памяти КР565РУ5 период регенерации должен быть 2 мс / 128 строк = 15,625 мкс. Для КР565РУ7 - аналогично (8 мс / 512 строк). Программистом был выбран период 15,9 мкс как наиболее близкий к тому, который должен быть. Но выбранный период больше, поэтому микросхемы памяти, вообще говоря, не обязаны работать в таком режиме. Будут работать, скорее всего, но не обязаны. Более того, эксперименты с периодом регенерации показали, что этот период можно еще увеличить. Но никаких гарантий работоспособности в этом случае быть не может. Чтобы память работала стабильно, период регенерации надо, к сожалению, уменьшить. Ближайшее значение, укладывающееся в ТУ, - 15,1 мкс. Для этого в исходных текстах в файле poiskpr.asm в строке 317 MOV AL,19 надо заменить 19 на 18. Интересно, что в исходных текстах есть большие фрагменты кода, которые были заимствованы из IBM PC XT. Заимствованы вместе с комментариями. В том числе код для работы с дисководами. В нем есть временные задержки, которые привязаны не к числу тактов процессора, а к числу периодов регенерации, для этого опрашивается состояние контроллера ПДП. И если сравнить код и те длительности, которые указаны в комментариях, становится ясно, что в той системе IBM PC XT, из которой код был заимствован, период регенерации был 15,1 мкс.
Есть такой документ - ОСТ 11 0083-84 "Микросхемы интегральные. Серия К565 (К565РУ5). Руководство по применению." В нем сказано, что после подачи питания микросхема переходит в нормальный режим функционирования через 2 мс и после проведения потом 16 рабочих циклов. Поэтому то, что программист в версию 2.6 добавил задержку в самом начале, - это абсолютно правильное решение. Она даже больше, чем необходимо. Видимо, на это были причины. А вот 16 циклов регенерации не добавил. Задержку в 16 циклов надо вставить после запуска контроллера ПДП (строка 334 в файле poiskpr.asm) и перед первым обращением к ОЗУ (тестирование первого сегмента памяти, строка 457). Органичнее всего она смотрится между строками 382 jz NOT_MAP и 398 LOK_7. Но места в bin-файле нет, поэтому вставить в лоб не получится. Задержка нужна в 16 циклов x 8 мс (для РУ7; будем считать, что им тоже нужна задержка, на всякий случай) = 128 мс.
Многое в этом коде хочется улучшить и исправить, поэтому я неспеша переписываю исходные тексты. Но это будет долгий процесс.
Были выявлены еще 2 ошибки, на этот раз в обработчике прерывания int 1A.
1. При вызове процедуры (AH) = 3 УСТАНОВКА ТЕКУЩЕГО ВРЕМЕНИ при установке бита перехода на летнее время применяется команда маскирования AND AL,23H. Собственно, этот бит - последний в регистре B часов, и его старое значение надо обнулить, поэтому правильная команда AND AL,22H. Но при отсутствии перехода на летнее время эта ошибка никак себя не проявит.
2. При вызове процедуры (AH) = 6 УСТАНОВКА СИГНАЛА БУДИЛЬНИКА выполняется такой код:
IN AL,0A1H
AND AL,0FEH
OUT 0A1H,AL
Этот код должен разрешать прерывание, которое генерируют часы при срабатывании будильника. Этот код был скопирован один в один из исходных текстов БИОС IBM PC AT. И адрес порта A1H оставлен без изменения. Это грубейшая ошибка, так как в IBM PC AT этот адрес соответствует ведомому контроллеру прерываний (всего их там 2), а команда AND AL,0FEH разрешает прерывание по тому входу ведомого, на котором висят часы. Но в Поиске нет ведомого контроллера, там только 1 контроллер, а часы могут висеть на IRQ 2, 3, 4, 7 в зависимости от переключателя на материнской плате. Такая возможность выбора представляет сложность при программировании. Если предположить, что часы находятся на IRQ 2, то правильный код должен выглядеть так:
IN AL,021H
AND AL,0FBH
OUT 021H,AL
где 21H - адрес порта единственного контроллера.
Если разрешать сразу 4 входа прерываний, то AND AL,0FBH надо заменить на AND AL,063H
А теперь - к вопросу о периоде регенерации оперативной памяти.
Регенерация осуществляется таймером номер 1 микросхемы КР580ВИ53 с периодом 15,9 мкс. Но по техническим условиям (ТУ) на микросхемы памяти КР565РУ5 период регенерации должен быть 2 мс / 128 строк = 15,625 мкс. Для КР565РУ7 - аналогично (8 мс / 512 строк). Программистом был выбран период 15,9 мкс как наиболее близкий к тому, который должен быть. Но выбранный период больше, поэтому микросхемы памяти, вообще говоря, не обязаны работать в таком режиме. Будут работать, скорее всего, но не обязаны. Более того, эксперименты с периодом регенерации показали, что этот период можно еще увеличить. Но никаких гарантий работоспособности в этом случае быть не может. Чтобы память работала стабильно, период регенерации надо, к сожалению, уменьшить. Ближайшее значение, укладывающееся в ТУ, - 15,1 мкс. Для этого в исходных текстах в файле poiskpr.asm в строке 317 MOV AL,19 надо заменить 19 на 18. Интересно, что в исходных текстах есть большие фрагменты кода, которые были заимствованы из IBM PC XT. Заимствованы вместе с комментариями. В том числе код для работы с дисководами. В нем есть временные задержки, которые привязаны не к числу тактов процессора, а к числу периодов регенерации, для этого опрашивается состояние контроллера ПДП. И если сравнить код и те длительности, которые указаны в комментариях, становится ясно, что в той системе IBM PC XT, из которой код был заимствован, период регенерации был 15,1 мкс.
Есть такой документ - ОСТ 11 0083-84 "Микросхемы интегральные. Серия К565 (К565РУ5). Руководство по применению." В нем сказано, что после подачи питания микросхема переходит в нормальный режим функционирования через 2 мс и после проведения потом 16 рабочих циклов. Поэтому то, что программист в версию 2.6 добавил задержку в самом начале, - это абсолютно правильное решение. Она даже больше, чем необходимо. Видимо, на это были причины. А вот 16 циклов регенерации не добавил. Задержку в 16 циклов надо вставить после запуска контроллера ПДП (строка 334 в файле poiskpr.asm) и перед первым обращением к ОЗУ (тестирование первого сегмента памяти, строка 457). Органичнее всего она смотрится между строками 382 jz NOT_MAP и 398 LOK_7. Но места в bin-файле нет, поэтому вставить в лоб не получится. Задержка нужна в 16 циклов x 8 мс (для РУ7; будем считать, что им тоже нужна задержка, на всякий случай) = 128 мс.
Многое в этом коде хочется улучшить и исправить, поэтому я неспеша переписываю исходные тексты. Но это будет долгий процесс.
Re: Поиск-2 и все-все-все
Новости от автора!
"Я внес изменения в БИОС, и в результате появилась более-менее стабильная новая версия. Народ, у кого есть возможность (И ЖЕЛАНИЕ!!!), поучаствуйте, пожалуйста, в тестировании. Меня интересует работа этой версии в сравнении с версией 2.6.
БИОС рассчитан на использование процессора ВМ86М, работающего с тактовой частотой 8 МГц.
Архив прикреплен к сообщению."
"Я внес изменения в БИОС, и в результате появилась более-менее стабильная новая версия. Народ, у кого есть возможность (И ЖЕЛАНИЕ!!!), поучаствуйте, пожалуйста, в тестировании. Меня интересует работа этой версии в сравнении с версией 2.6.
БИОС рассчитан на использование процессора ВМ86М, работающего с тактовой частотой 8 МГц.
Архив прикреплен к сообщению."
У вас недостатньо прав для перегляду приєднаних до цього повідомлення файлів.