Автор | Сообщение |
kirill9242
|
Iwan, ну вот уж теперь я расскажу, как работает ранняя инициализация BIOS на примере Award Phoenix 6.0 6A6LVD4H (Boot Block, расположенный в диапазоне 0FFFFE000h - 0FFFFFFFFh). Все сказанное справедливо для всех BIOS типа Award. Как известно, процессор производит самотестирование в момент включения питания или нажатия Reset без участия BIOS при наличии на линии #BUSY низкого уровня одновременно с наличием сигнала #RESET. Если самотестирование прошло успешно, то в регистре EAX находятся нули, в противном случае микросхема некондиционна. В регистре EDX при успешном завершении будет находиться номер версии процессора.
Процессор начинает выполнение инструкций с адреса FFFFFFF0, причем база селектора CS настроена на сегмент FFFF0000, а регистр IP содержит FFF0. По этому адресу располагается инструкция JMP F000:E05B. После выполнения этой команды старшие разряды базы селектора обнуляются и обращение производится по базе F000. Эта особенность учтена в чипсете следующим образом: сразу после начальной установки область FFFF0000 отображается на базу F000.
Первым этапом является программирование блока RTC (Real Time Clock) через кодовые последовательности в порты 2Eh и 2Fh.
Следующий этап, обозначенный в диагностическом регистре 0CFh - проверка CMOS. По смещению 3Dh с маской NMI записывается тестовый байт 55h, и далее считывается. В том случае, если считанный байт не совпадает с записанным, процесс повторяется. Именно об этой проверке я говорил. Ни о какой инициализации устройств или оперативной памяти здесь не может быть и речи, равно как и о динамике, поэтому при неисправности CMOS просто произойдет зацикливание.
Здесь же на основании операций с регистром EFLAGS процессора проверяется тип процессора, который, как правило, только X86.
Далее выбирается тип старта материнской платы. Продолжим при нормальном старте.
Следующий этап содержит программирование конфигурационных регистров чипсета, после которого шина уже функционирует нормально, а также устанавливается отображение памяти BIOS на страницу F000, а страница E000 удаляется, запись в обе страницы запрещается.
Этап 0C0h сброс обоих мостов и запрет трансляции незанятых областей на шину PCI. Обнуляются регистры страниц DMA, программируются контроллер прерываний, основной таймер, контроллер DMA, сбрасываются регистры синхронизации видеоконтроллера.
Далее производится поиск так называемой структуры BBSS, содержащую контрольную сумму блоков BIOS. Для нее возможно наличие программы инициализации, которая в этом случае выполняется. В BBSS первый элемент – контрольная сумма блока расстановки оперативной памяти по строкам. Если он есть, то эта сумма проверяется. При несовпадении выполняется блок по умолчанию (FFFFC700), при совпадении – блок по адресу FFFF5000.
И вот только лишь потом происходит тестирование основной памяти с 00000000 по 00040000 (256 КБайт, а не 64!). Тестирование производится путем записи сначала нулевых, а потом единичных значений по указанным адресам. В случае ошибки будет выдан звуковой сигнал (впервые!) протяженностью 4 секунды, бесконечно повторяющийся с интервалом в 2 секунды.
Далее в защищенном режиме производится копирование всей страницы FFFF0000 в 00020000, а страниц FFFE0000 и FFFF0000 в страницы 00180000 и 00190000 соответственно.
Теперь начинается очень важный этап 0С – подготовка к распаковке. Проверяется контрольная сумма декомпрессора, при ее несоответствии управление передается блоку загрузки по умолчанию. В памяти по адресу 00006000 закладывается основа для будущей таблицы обращения к упакованным файлам.
Перед распаковкой весь упакованный BIOS пересылается в память 00160000, а затем проверяется его контрольная сумма. Если она не совпадает, то управление передается блоку загрузки по умолчанию. Далее производится распаковка основного модуля (этап C3).
В случае успешного завершения распаковки головная процедура декомпрессии выдает сегмент данных 5000, где размещен распакованный файл, иначе – сегмент 1000, где размещен скопированный Boot Block.
Наконец, последнее, что здесь происходит – копирование 2 страниц из указанного сегмента в память F000 с предварительным отключением отображения ее в FFFF0000 и разрешения записи, а также активизации страницы E000 (этап С5).
Управление передается на адрес F000:F7E0 при ошибке BBSS и F000:F80D при нормальном завершении.
При ошибке контрольной суммы, как вы знаете, происходит выполнение зашитого фрагмента Boot Block, который сильно ограничен в функциональности и служит лишь для того, чтобы перепрошить BIOS.
Вот такая процедура. После нее начинается средняя инициализационная фаза, которая уже сильно зависит от конкретного BIOS. |
|
Iwan
Завсегдатай
Сообщения: 556
|
kirill9242, Ну молодец, не поленился инет перелопатить в поисках описания процедур испонения, вот за это уважаю! Хоть теперь похоже на правду! Хотя конечно и с оговорками: 1) по поводу 64/256 кб, 256 это действительно справедливо для версии 6 от Аварда но не справедливо если рассматривать от феникса там все же присутствует 64, хотя и для машин более раннего выпуска (примерно первых пней), ну это бог с ним - мелочи, а вот дальше интересней: Цитирую :-"Первым этапом является программирование блока RTC (Real Time Clock) через кодовые последовательности в порты 2Eh и 2Fh.
Следующий этап, обозначенный в диагностическом регистре 0CFh - проверка CMOS. " (конец цитаты)
Про RTC все верно, а дальше (перед CMOS) почему-то пропал целый кусок! Это не понятно!
Что бы было понятней и не переписывать лишний раз, я выкладываю ПэДэФ от "ICBOOK" с описанием пост кодов и их расшифровкой прямо сюда, там есть "Medallion" о котором ты и говорил
Читай и сравнивай!
Удачи.
postcode_AWD.pdf 193.11 КБ Скачано: 4118 раз(а)
|
|
kirill9242
|
А какой, собственно, кусок пропал? Там у вас коды идут просто в порядке возрастания! А то, что я писал, взято из непосредственного разбора программ BIOS на ассемблере! И Internet тут ни причем!
Могу точно назвать адресацию по сегменту 0F000h для 6A6LVD4H: программирование блока RTC - 0E0B0h - 0E126h (процедура с обращением c E068h), проверка CMOS и определение типа процессора - 0E469h - 0E531h (процедура с обращением с 0E07Ch).
Мы, по-видимому, все-таки говорим о разных вещах. Вы говорите о проверке CMOS на поздней фазе инициализации, а я говорю о таковой на ранней.
И речь-то идет о Award Phoenix, а не Medallion! |
|
Iwan
Завсегдатай
Сообщения: 556
|
kirill9242, Видимо ты прав, говорили об одном и том же но на разных "уровнях"! что ж, бывает. Про адресацию ни чего сказать не могу - не занимался дизассемблированием прошивок, но мне кажется что в такую глубину при обычном ремонте и влезать врядли стоит. Как правило бывает достаточно показаний стандартного пост-тестера по 80 порту. Мы же не занимаемся ремонтом самих чипов , и тем более их разработкой. А показания тестера не затрагивают тех тонкоскей, о которых ты говорил. Вероятно отсюда и возник наш с тобой спор. За сим приношу свои извинения, если что-то из моих высказываний тебе показалось через чур резким!
Кстати, все же где автор темы? |
|
almaks
Спокойный как удав
Сообщения: 313
|
kirill9242, Iwan, битву закончили жаль я бы с удовольствием почитал еще. |
|
Iwan
Завсегдатай
Сообщения: 556
|
almaks, А сам что не поучаствовал в прениях? Все бы только почитать... |
|
almaks
Спокойный как удав
Сообщения: 313
|
Iwan, ассемблерную битву я проиграл давно лет 15 назад еще для 8086 когда чегой то пописывал на языке железа, сейчас просто ностальгические темы почитать попытаться разобраться. Участвовать извини не догоню ни когда даже если вы сейчас остановитесь. (вы это не обращение, участники подобных прений) |
|
Iwan
Завсегдатай
Сообщения: 556
|
almaks, Что касается программирования на ассемблере, то все что я помню (увы!) это 2 команды: PUSH и POP! Это было году так в 1989, когда меня знакомый прграммер пытался (и надо заметить не без успешно, хотя и частично!) приобщить к "высокому и светлому". Т.е. не только Бэйсик и Паскаль (еще под ДОС), но и делать ассемблерные вставки. Но к сожалению у меня дальше написания драйвера для мышки (под ДОС ес-но!) с изменяющимся видом курсора (в зависимости от его места нахождения на экране) дело не пошло! Ну еще конечно Синклер был, там я достиг не много большего, да же игрушку простую написал, но это все же не то!
Было дело еще , когда создавался нами тестер для регулировки и настройки флопов любого типа, с управлением спец. прогой от 286, но там мы в паре с программером работали.... |
|
SeRgEi_77
|
Да добавить почти не чего, разве одну маленькую деталь, на которую, по-моему, не кто не обратил внимания, а зря. Что бы скинуть БИОС перемычкой, как раз и не надо вытаскивать батарейку, это делается при присутствующей батарейкой. А вот без нее можно прождать и сутки, если не отключить блок питания. Второй способ сброса БИОСа выдернуть батарейку, шнур питания с розетки и замкнуть обычным нажатием кнопку включения, сек на 15. Не разу не сталкивался, что бы машина при живом железе не обнулила БИОС на заводские установки. Это для вас kirill9242. В остальном согласен с вами Iwan |
|
kirill9242
|
|
|