В общем есть задачка - хочу сделать себе в AWARD BIOS штуку - интегрированный memtest86+. Данная штука реальна и сделана в матплатах Biostar TForce 550. Необходимые модули для этого лежат здесь - http://www.rebelshavenforum.com/sis-bin/ultimatebb.cgi?ubb=get_topic;f=52;t=000074;p=0. Точнее http://www.lejabeach.com/sisubb/memtest170rom.zip. Первая ссылка обсуждение на буржуйском форуме как обновить данную штуку.
В общем в чём стопор у меня - пока теоретизирую. Как сделать данную функцию вызываемой к примеру после прохождения POST, например вместо Alt+F2 вместо awdflash или ezflash? Award BIOS дулает какие-то проверки? Второе - в идеале сделать эту функцию пунктом в BIOS Setup - там же на этом буржуйском форуме описано добавление нового пункта в Award BIOS Setup.
Все предложения - обсуждаются здесь - авось мой опыт поможет кому ещё.
Прошу помощи.
- Как? Всю возвышенность? - заявил Балаганов. - А не дать ли тебе еще Мелитополь впридачу? Или Бобруйск?
:)
не нужны там даташиты, если только ты конечно не собрался дописывать memtest (который похоже далеко не все чипсеты поддерживает). Но nforce4 он вроде поддерживает, включая и intel edition. Я особо не вдавался в сорцы мемтеста, но он похоже не сильно опирается на работу с чипсетом, в основном идентификация. ;) Так, немного.
Руками добавлять полноценный пункт меню -- геморрой, даже с использованием вспомогательных утилиток (типа дампера menuitem'ов или добавления своего текста к _xx_code.bin). Особенно, если не какой-нть банальный выбор из нескольких пунктов, а тотально опирающийся на код, т.е. на обработчики. В модбине же не редактор меню, а залепа, для серьёзных целей не годится.
Чтобы можно было при добавлении новой функции автоматически
1. добавить новый пункт меню с заданными атрибутами, в т.ч. и заданием special-обработчиков для menuitem'а
2. найти свободное место в original.tmp
3. записать туда код своего обработчика(-ов)
4. для этого пункта сделать релокацию страницы menuitem'ов в свободное место (актуально для special'ов и меню в original.tmp).
5. автоматом изменять/добавлять строки в _xx_code.bin
6. соответственно настроить все указатели на special'ы и обработчики
Ну и ессно редактирование/удаление существующих пунктов.
E.T.A. = на этой неделе.
Минус в совместимость. Не во всех BIOS есть свободное место, а где есть - не всегда можно автоматизировать его поиск для корректного использования. Так работал патчер самых первых версий.
Выход - использовать модульность и учитывать "динамичность" (не пытаясь рассчитывать на "статичное" свободное место в E000/F000).
C радостью предоставлю исходники биоспатчера для реализации подобного (вряд ли особо помогут-понадобятся), равно как и ромпатчера (с реализации виндовой оболочки и не только для аварда) - в нём была заложена как раз реализация всего вышеописанного в том числе.
насчет своб.места пока следующие мысли:
- взвалить задачу нахождения своб.места на программера -- поиском или принесением чего-либо в жертву и соотв. подсовыванием проге смещения и размера этой области.
- пробовать определенный набор известных мест, ессно проверять их на n-ое кол-во 00/FF. Сейчас весьма лакомой областью является большой массив нулей перед +E000h в F-Seg (т.е. 1E000h в original.tmp). Пока проверил примерно десяток авардов -- во всех перед E000h имеются нули.
- задействовать неиспользуемые menuitem'ы, если конечно таковые найдутся. Много места и не надо в принципе, если найдутся хотя бы несколько подходящих -- уже неплохо. Здесь также предусматривается определенный ручной режим, т.е. возможность принести в жертву какой-то menuitem по указанию пользователя, т.к. далеко не всегда программа может автоматически определить, что menuitem не нужен.
Пока мне бы пригодилась свежая инфа по управляющим последовательностям в сообщениях (BORDER, POS, etc.), т.к. они похоже со времен исходников 6го аварда немного поменялись. Сужу по тому, что на выходе дампера _en_code.bin есть некоторые строки с кракозябрами. Пока с ними не разбирался, может и просто какой баг, но вообще похоже на новые/изменившиеся управляющие структуры.
А что за ром патчер, где его взять можно? На сайте вроде только bios patcher нашел.
"Писаться" - это слово цепляет целую кучу не всегда очевидных проблем, погрязнув с разрешением которых у большинства опускаются руки и "до задуманного" дело просто обычно не доходит. ;) Любое вмешательство потребует пересчёта изменённых контрольных сумм и соблюдения формата структуры образа BIOS при сборке. Это учёт вариантов с разными по объёму BIOS, учёт "оемных" вариаций, "исторических" модификаций и т.д. и т.п. Потому "ломовой" метод (с записью поверх и последующей перепаковкой) - стратегически неверный подход. Основания к таковому утверждению у меня есть - намучался с первыми версиями патчера, пытаясь "всё учесть". Всё перевешивает то, что гарантировать народу работу такого пересобранного BIOS - невозможно по определению. И в результате - смысл сделанного может быть полностью убит потенциальным риском убить систему.
В общем, чтобы такого не произошло - просто предлагаю не ходить по всем граблям, на которые наступал сам многократно и по которым ходит любой, кто плотно занимается этой темой. :)
п.с. Исходники скину - стукнись в аську...