Автор: Santa , 8 апреля 2007
Hi all, великий и ужасный! БИОС AWARD, MB Gigabyte 8I945P-G. Посткарта NM9221 МастерКит.
Проблема вот в чем. Пробую установить контрольную точку в бутблоке (это ради тренировки) путем замены кода своим:
[code:1] mov al, 0EEh
Label1: mov dx,80h
out dx,al
jmp Label1
[/code:1]
Но после прошивки МВ просто не стартует. Пробовал и длинные переходы и короткие, вывод в 80-й порт и вывод в dx - разницы никакой. Просто не заводится - на посткарте начальное состояние (спецсимволы). Причем можно ЭТО вставить хоть в самое начало, хоть в середину, хоть в конец - результат один.
Если же без внедрения кода просто изменить ход выполнения бутблока, например занопить что-нибудь, пару переходов поставить - все работает.

Вопрос:
- виновата/глючит посткарта? Те точка остановки срабатывает, но не отображается?
- вывод кодов в 80h порт начинается со старта системы? (Идиотский вопрос, но все-же)
- все ли я делаю правильно?
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

Santa

18 лет 10 месяцев назад

В этом куске IMHO определяется интерфейс флешки:
[code:1]mov eax, 8000F8D8h ; Firmware hub decode en reg[/code:1]
и все...

icbook

18 лет 10 месяцев назад

В этом куске IMHO определяется интерфейс флешки: ... и все...

Забавно. Мы же с нее уже стартовали :)

Добавлено спустя 17 часов 9 минут 24 секунды:

Итак, продолжаем на свежую голову:
F000:FC08 mov eax, 0D0001h
;устанавливаем базовый адрес для memory-mapped ригистров,
;равный D000 и разрешаем картирование в память
F000:FC0E out dx, eax
F000:FC10 mov si, 0
F000:FC13 mov ax, 0D000h
F000:FC16 mov ds, ax
; Теперь Root Complex memory Block доступен по D000h
F000:FC18 or byte ptr ds:[si+3410h], 100b
; в GSC-регистре устанавливаем бит 2 для разрешения вывода
; POST-кодов в порты 80h...8Еh на PCI
F000:FC1D mov al, ds:[si+3411h]
F000:FC21 and al, 1100b
; работаем только с битами 10 и 11 регистра GSC
; Это Boot BIOS Straps (т.е. где находится BIOS):
; 00 - reserved
; 01 - SPI
; 10 - PCI
; 11 - LPC
F000:FC23 cmp al, 1000b
F000:FC25 jnz SKIP
; Если Boot BIOS Straps не установлен на PCI,
; то настраиваем регион для LPC. Иначе - SKIP
F000:FC27 mov eax, 8000F8D8h
F000:FC2D mov dx, 0CF8h
F000:FC30 out dx, eax
F000:FC32 add dx, 4
F000:FC35 in al, dx
F000:FC36 and al, 111111b
; Запрещаем Legacy-регион, оставляем только хабовый
F000:FC38 out dx, al
F000:FC39 SKIP:
; Restore F0 ...

Вывод: POST-коды должны выводится. Но нужен эксперимент, который, возможно, сегодня и состоится.

Добавлено спустя 5 часов 11 минут 18 секунд:

Проверено на следующих платформах: GA-945PL-S3 (rev. 1.0) и GA-945GZM-S2 (rev. 3.0). Выполнено трассирование в пошаговом режиме от кода CFh до кода 2Bh.

Santa

18 лет 10 месяцев назад

Контрольные точки ставили?
Если да, то:
____ПОСТ-карта, надо полагать, IC80.
____Вывод - моя пост-карта гуано :E
Иначе - ??


[offtop]Возьмите меня к себе падаваном, сенсей[/offtop]

icbook

18 лет 10 месяцев назад

Контрольные точки ставили?

Нет, т.к. тестирование в молниеносном режиме. Но по опыту написания BIOS и его корректировки других вариантов не вижу.
____ПОСТ-карта, надо полагать, IC80.
____Вывод - моя пост-карта гуано :E
Иначе - ??

То, что использовалась IC80 - без сомнений, но совсем неочевидно, что для контроля стояла и какая-то "левая" на трех GAL-ах, которая тоже исправно отображала все коды. Моих комментариев по поводу чужих POST-карт не будет.

/OFF
Возьмите меня к себе падаваном, сенсей.

Во-первых, не становитесь ни на какие колени, как говорила Мусик, жена инженера Брунса. Во-вторых, прописка нужна киевская и справка об участии в обеих революциях :)

Strelets

18 лет 10 месяцев назад

Проверено на следующих платформах: GA-945PL-S3 (rev. 1.0) и GA-945GZM-S2 (rev. 3.0). Выполнено трассирование в пошаговом режиме от кода CFh до кода 2Bh.

У меня к Вам два вопроса.

Вопрос первый, дилетантский. Что такое "трассирование в пошаговом режиме"? Это обеспечивается "умной" пост-картой? Какой принцип ее работы?

Вопрос второй, теоретический. Такой код, очевидно, будет работать.
[code:1]
out 80h, al
label1: jmp short label1
[/code:1]
А такой?
[code:1]
label0: out 80h, al
jmp short label0
[/code:1]
Любая ли пост-карта сможет правильно обработать и отобразить бесконечную запись в порт?

Root

18 лет 10 месяцев назад

Strelets
Что такое "трассирование в пошаговом режиме"? Это обеспечивается "умной" пост-картой? Какой принцип ее работы?

я в свое время даже патенты находил на такую фичу.
вроде такого - http://www.patentstorm.us/patents/6751754.html
вообще же понятие "пошагового" режима весьма широко и тут следует уточнить о чем именно идет речь.
Любая ли пост-карта сможет правильно обработать и отобразить бесконечную запись в порт?

да. Другой вопрос заключается в том, что Вы все равно ничего не увидите - смены пост-кодов то не будет ;)
Гораздо содержательнее такой код:
[code:1]label0: mov al, XX
out 80h, al
mov al, YY
out 80h, al
jmp short label0[/code:1]
XX и YY - какие-то разные числа.

Strelets

18 лет 10 месяцев назад

вообще же понятие "пошагового" режима весьма широко и тут следует уточнить о чем именно идет речь.

Вот я и пытаюсь это понять :)
Получается, что если пост-карта находится в пошаговом режиме, то после очередной записи байта в порт 80h процессор не переходит к выполнению следующей команды, пока его не "отпустит" пост-карта (пока юзер не нажмет спец. кнопку на пост-карте). Или я что-то не так понимаю? :)

icbook

18 лет 10 месяцев назад

У меня к Вам два вопроса.
Вопрос первый, дилетантский. Что такое "трассирование в пошаговом режиме"? Это обеспечивается "умной" пост-картой? Какой принцип ее работы?

Совершенно верно. POST-карта переводится в пошаговый режим, и процесс выполнения POST или BBlock останавливается в случае появления в диагностическом порту информации, ожидая нажатия кнопки на борту устройства. Пошаговый режим безусловно нужно взять в кавычки, т.к. его не может быть, но в результате каких-то ухищрений он есть.
Вопрос второй, теоретический. Такой код, очевидно, будет работать.
[code:1]
out 80h, al
label1: jmp short label1
[/code:1]
А такой?
[code:1]
label0: out 80h, al
jmp short label0
[/code:1]
Любая ли пост-карта сможет правильно обработать и отобразить бесконечную запись в порт?

При кажущейся простоте этого вопроса ответ очень неочевиден. Безусловно, правильный - вариант #1, с той оговоркой, что jmp - команда кешируемая, что есть в некоторых случаях плохо. American Megatrends для обхода этой ситуации рекомендует команду jcxz, которая не должна кешироваться в силу зависимости от контента.
Вариант #2 может сыграть злую шутку, если архитектура POST-карты (или даже PCI-моста, например, старенького NEC или "редкоземельного" HiNT) нам неведома. И Ваше предложение так не делать - правильное. Но в нашей практике на наших диагностических устройствах такое не встречалось ни разу. Мы даже предпродажную подготовку выполняем путем бесконечного цикла при PCI=83/2 MHz в течение суток.

Добавлено спустя 11 минут 40 секунд:

Я в свое время даже патенты находил на такую фичу.
вроде такого - http://www.patentstorm.us/patents/6751754.html

Таким пошаговым режимом Windows не заставишь "замерзать", в ожидании следующей контрольной точки в 80-м порту
:)

Strelets

18 лет 10 месяцев назад

Пошаговый режим безусловно нужно взять в кавычки, т.к. его не может быть, но в результате каких-то ухищрений он есть.

Каких именно ухищрений? Или это секрет фирмы?

icbook

18 лет 10 месяцев назад

Каких именно ухищрений? Или это секрет фирмы?

Глобально - никаких секретов нет. Всё следует из спецификации PCI плюс описание выше упомянутого патента. В деталях - да, секрет фирмы. Кроме того, у нас на плате есть еще и псевдо-пошаговый режим
:)
P.S. Все прекрасно представляют, как выпустить джинна из бутылки, но никто не задает себе вопрос, как заставить его вернуться в ту же посудину.
:)