Установка контрольной точки по ходу выполнения кода бутблока

Hi all, великий и ужасный! БИОС AWARD, MB Gigabyte 8I945P-G. Посткарта NM9221 МастерКит.
Проблема вот в чем. Пробую установить контрольную точку в бутблоке (это ради тренировки) путем замены кода своим:

	       mov al, 0EEh
Label1:   mov dx,80h
	       out dx,al
	       jmp Label1

Но после прошивки МВ просто не стартует. Пробовал и длинные переходы и короткие, вывод в 80-й порт и вывод в dx - разницы никакой. Просто не заводится - на посткарте начальное состояние (спецсимволы). Причем можно ЭТО вставить хоть в самое начало, хоть в середину, хоть в конец - результат один.
Если же без внедрения кода просто изменить ход выполнения бутблока, например занопить что-нибудь, пару переходов поставить - все работает.

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

Аватар пользователя Santa

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

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Аватар пользователя icbook

Santa писал(-а):
В этом куске 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

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

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

-=Кто сказал что бесполезно биться головой об стену...=- (НП)
Пх’нглуи мглв’нафх Ктулху Р’льех вгах’нагл фхтагн
Хочешь сделать хорошо - сделай это сам

Аватар пользователя icbook

Santa писал(-а):
Контрольные точки ставили?

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

____Вывод - моя пост-карта гуано :E
Иначе - ??

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

/OFF

Santa писал(-а):
Возьмите меня к себе падаваном, сенсей.

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

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

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

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

Вопрос второй, теоретический. Такой код, очевидно, будет работать.

        out     80h, al 
label1: jmp     short label1 

А такой?
label0: out     80h, al 
        jmp     short label0 

Любая ли пост-карта сможет правильно обработать и отобразить бесконечную запись в порт?

Аватар пользователя Root

Strelets

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

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

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

XX и YY - какие-то разные числа.

Аццкий ромбовод {:€
Я пока не волшебник - я только учусь! :-P

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

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

Аватар пользователя icbook

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

Совершенно верно. POST-карта переводится в пошаговый режим, и процесс выполнения POST или BBlock останавливается в случае появления в диагностическом порту информации, ожидая нажатия кнопки на борту устройства. Пошаговый режим безусловно нужно взять в кавычки, т.к. его не может быть, но в результате каких-то ухищрений он есть.
Strelets писал(-а):
Вопрос второй, теоретический. Такой код, очевидно, будет работать.
        out     80h, al 
label1: jmp     short label1 

А такой?
label0: out     80h, al 
        jmp     short label0 

Любая ли пост-карта сможет правильно обработать и отобразить бесконечную запись в порт?

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

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

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

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

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

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

Аватар пользователя icbook

Strelets писал(-а):
Каких именно ухищрений? Или это секрет фирмы?

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

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей