Попалась плата Foxconn NF4, мётрво стояшая на графической заставки биос в 50 посткоде, стал копать форум
и узнал о том что 50 код это инициализация usb,первая мысль была о том, что это своеобразный recovery mode - плата из за ошибок в прошивке просит скормить её биос, воткнул чистую флешку, дейтвительно в момент 50 кода было видно обрашение к флешке (на ней мигал светодиод). записал на неё биос и естественно результата не получил, потом узнал что NForce4( раньше я не имел с ними дело)висит на 50 коде из за проблем в мосте, не долго думая MODBINом поставил дефалтными настройками отключенное USB и принялся прошивать биос,тут то и началось самое интересное....вызвать рвоту (бутблок :) ) особого труда не составило, зато при попытке прошивки флэшер настойчиво кричал 'Bios ROM is write protected' ...снова курю форум, вобщем полдня носился с дисководом как проклятуший от компа и материнки и обратно (как назло bootblock видимо не знаком с мультяшным контроллером клавиатуры), испробуя всевозможные прошивальшики, их комбинации и различные положения перемычек на плате...всё бестолку...пошёл уже в кладовку за феном чтобы сдуть злосчастную, но тут лень взяла своё - СТАЛ ВНИМАТЕЛЬНО ЧИТАТЬ ДАТАШИТ НА SST49LF И УЗНАЛ ЧТО ДЛЯ РАЗРЕШЕНИЯ ПРОШИВКИ НА НОГАХ #TBL и #WP ДОЛЖНА БЫТЬ ЛОГ. 1, #TBL ЗАЩИЩАЕТ ПЕРВЫЕ 64КБ, А #WP ОСТАВШИЕСЯ, В МОЕМ ЖЕ СЛУЧАЕ ПРИ НОРМАЛЬНОЙ ЗАГРУЗКЕ НА НИХ 0, А ПРИ ЗАГРУЗКЕ ЧЕРЕЗ БУТБЛОК #WP ПОДНИМАЕТСЯ В ЛОГ. 1, НА ВТОРОЙ ЖЕ ПОПРЕЖНЕМУ 0, СТАЛ ОТСЛЕЖИВАТЬ ПУТЬ СИГНАЛА #TBL - ОН ЧЕРЕЗ ПЕРЕМЫЧКУ МОЖЕТ БЫТЬ ПОСАЖЕН НА ЗЕМЛЮ, ДАЛЬШЕ СЛЕДИТЬ НЕ СТАЛ ,РЕШИЛ ПОПРОСТУ ЗАМНКУТЬ #WP и #TBL (ЕСТЕСТВЕННО ПЕРЕМЫЧКА НЕ ДОЛЖНА САДИТЬ ОДИН ИЗ ВЫВОДОВ НА ЗЕМЛЮ) МЕЖДУ СОБОЙ (Я ИСПОЛЬЗОВАЛ КАПЕЛЬКУ ПРИПОЯ) И НЕ ОШИБСЯ ! BIOS ОТЛИЧНО ПРОШИЛСЯ. (ДАЖЕ БУТБЛОК НЕ ПРИШЛОСЬ ИСКУССТВЕННО ВЫЗВАТЬ)..убрав припой я с надеждой врубил материнку но всё осталось как было (даже флэшка мигает (!) ) - по прежнему вис на 50 посткоде, только заставка теперь другая....есть ли возможность полностью откючить инициализацию USB.?
Перенес в Редактирование BIOS.
maco
А что если:
=============================================================
было
seg001:8FF0 ; ---------------------------------------------------------------------------
seg001:8FF0 mov cx, 1
seg001:8FF3 mov di, 901Fh
seg001:8FF6 call sub_E08FFC
seg001:8FF9 jmp loc_E08612
seg001:8FFC
...................................
seg001:8612 loc_E08612: ; CODE XREF: seg001:8FF9j
seg001:8612 cli
seg001:8613
seg001:8613 loc_E08613: ; CODE XREF: seg001:loc_E08613j
seg001:8613 jmp short loc_E08613
стало:
seg001:8FF0 ; ---------------------------------------------------------------------------
seg001:8FF0 mov cx, 1
seg001:8FF3 mov di, 901Fh
seg001:8FF6 call sub_E08FFC
seg001:8FF9 jmp loc_E08612
seg001:8FFC
...................................
seg001:8612 loc_E08612: ; CODE XREF: seg001:8FF9j
seg001:8612 cli
seg001:8613
seg001:8613 loc_E08613: ; CODE XREF: seg001:loc_E08613j
seg001:8613 nop nop nop
Те, вне завизимости от результата пост флаг всегда чистый и за одно лишим эту сволочь возможности принудительно останавливатьса....НЭ??
вот что я делал (очень кратко)
1)делим original.bin на две половинки и грузим в IDA каждую из них в нужный сегмент
2) идём к стандартной точки входа F0000:F800D, далее следуем по стоящему там jmp
3) ищим инструкцию push 0E000h, это сегмент перехода, соответственно в индексном регистре si должен лежать адрес
в моём случае mov si, 8FF0h, соответственно переодим по адресу 0E000:8FF0, рядом здесь в регистр di заносится адрес начала таблицы указателей на процедуры пост, у меня было mov di, 901Fh, переходим туда
4) сворачиваем байты таблицы в слова, ищим указатеь на post50h, не трудно посчитать что это будет 80е слово в таблице
5) заносим сюда адрес пустышки, (луче брать где нибудь из начала таблицы, для того чтобы при последующем сжатии файл не получился компактнее
Очень странно что винда инициализирует контроллер нормально, а биос где-то спотыкается...