Идеальный скриншот BIOS'а ? Запросто !

13 июня 2006, вторник 06:10
для раздела Блоги
Посвящается благополучному
исключению моей скромной персоны
с первого курса ФАИ местного полутеха.


English
Скриншот BIOS'а ? Запросто !

Идеальным обзорам -- идеальные screenshot'ы !!!

Не знаю, как Вы, а я последние несколько лет частенько обращаю пристальное внимание на скриншоты биосов, которые можно встретить практически в любом обзоре материнских плат.

Точнее, мое внимание приковывают геометрические и цветовые искажения на них -- редкий скриншот обходится без подобных дефектов. Очень часто это отрицательным образом сказывается на их читабельности.

Но еще больше меня ужасает размер среднестатистических скриншотов биоса, точнее соотношение геометрических размеров к занимаемому объему на диске (размеру файла). При относительно малых размерах по вертикали и горизонтали размер подавляющего большинства скриншотов превышает 10..15 килобайт даже в случае, если изображение содержит только часть захваченного экрана.

Вот типичный пример (500x375, 65 Kb!):


И чего только не увидишь на подобных скриншотах: вплоть до отражения вспышки (бывают и такие спецы по фотографии) или физиономии самого экспериментатора.

Все замеченные недостатки и подтолкнули меня к неспешному изучению данного вопроса.

2-3 года назад меня посетила первая идея. Наверное, многие в курсе, что экран биоса можно спокойно распечатать на [хардварном] принтере, подключенном к LPT-порту компьютера. Для этого надо лишь нажать на клавиатуре клавишу <Print Screen>.

Собственно, первоначальная идея состояла в том, чтобы:

* соединить 2 компьютера спец. кабелем;
* зайти на 1-м в сетап биоса;
* запустить на 2-м специальную программу, эмулирующую поведение принтера;
* нажать на 1-м компьютере клавишу <Print Screen>;
* эмулятор принтера на 2-м компе получает изображение и сохраняет его в графический файл.

Выглядит заманчиво. Но пока я разобрался со всеми возможными режимами работы LPT-портов (для того, чтобы написать программу-эмулятор), пока спаял кабель для связи компов, весь мой экспериментаторский пыл поугас. К тому же выяснилось, что изображение на принтер передается в черно-белом виде. Сомневаюсь, что кому-то из читатей нужны черно-белые скриншоты в статьях. В итоге проект заглох...

До тех пор, пока в октябре-ноябре 2005 я не нарвался на какой-то обзор с кучей скриншотов биоса, потянувших чуть ли не на мегабайт. Поскольку оплата за интернет у меня помегабайтная, то пришлось вновь заинтересоваться решением этой проблемы. Т.к. никаких шевелений в данном направлении видно не было (обзорщикам пофиг, программерам -- тоже) , то пришлось браться за дело самому. Кое-какие успехи вроде есть. Даже появилась надежда, что в будущем (по крайней мере на просторах рунета, или хотя бы на сайте www.overclockers.ru) объем скриншотов в статьях-обзорах материнок будет исчисляться не мегабайтами, а десятками килобайт.

Суть идеи:

1) Предыдущая неудачная попытка показала: чтобы запустить программный код, сохраняющий полноцветный образ экрана, необходимо инжектировать его в биос.

Т.е. проще говоря, придется модифицировать биос: либо биос материнской платы, либо биос PCI-карточек (IDE/SATA/LAN/etc-контроллеров), установленных в компьютере.

2) Сохранять скриншот лучше не через LPT/COM/USB/etc, а желательно найти способ попроще. Оказалось, самый элементарный и самый надежный способ -- запись на обыкновенную дискету !

Описание проекта scr2fdd.


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

Нужные файлы выложил в архиве Scr2FDD_ver001.rar (37.4 Кбайт)

Пару слов, как этим безобразием пользоваться.

В архиве содержатся:

1) БИОСЫ, точнее, ПСЕВДОбиосы для контроллеров Silicon Image SiI0680 и SiI3112. В этих псевдобиосах содержится только код, необходимый для записи скриншота на дискету. В принципе, их несложно подогнать для любого контроллера. Нужно лишь в любом псевдобиосе:
* поменять идентификаторы VendorID (1095h - SiliconImage) и DeviceID (0680h, 3112h) на нужный;
* подправить чексумму, чтобы контрольная сумма всего образа псевдобиоса (точнее, первых 512 байтов) была равна нулю.

Может потом как-нибудь допишу прожку, облегчающую эту задачу.

2) УТИЛИТЫ. Набор утилит, считывающих образ экрана с дискеты и преобразующих его в файл формата BMP (размером 128118 байт).


Инструкция по применению:

0. Скачать и распаковать архив.

1. Необходимо прошить образы псевдобиосов в контроллеры (Silicon Image SiI0680 и SiI3112). Предварительно (на всякий случай) необходимо слить с карточек их старые биосы, дабы потом не было мучительно больно (всякое случается). Для этих целей в архиве имеется прошивальщик: UPDFLASH.EXE

2. После перепрошивки биоса перезагружайтесь, входите в сетап биоса материнки по клавише <DEL> (подавляющее большинство десктопных компьютеров с AWARD-овскими и AMI-шными биосами) или <F2> (биосы материнских плат ASRock и некоторые брэндовые компьютеры).

3. Ползайте на здоровье по менюшкам сетапа. Как только возникнет потребность в сохранении экрана (скриншоте), жмите клавишу <PrintScreen>.

Тут нужно сделать пару замечаний:

* Текущая версия имеет неприятное ограничение: на дискете остается только скриншот, записанный по последнему нажатию клавиши <PrintScreen>. Это ограничение легко обходится, если у вас есть несколько дискет, или под рукой есть второй (основной) компьютер.

* Информация, содержащаяся на дискетах, будет повреждена !!! Запись идет не на уровне FAT, а на уровне секторов. Не забывайте об этом! Рекомендую все же перед использованием дискету отформатировать.

4. Затем дискету переносите на компьютер, на котором установлены утилиты из папки UTILS скачанного архива. Вставляете дискету в дисковод и запускаете с жесткого диска командный файл _RunAll.bat. После того, как батник отработает, в том же каталоге, где расположены утилиты, появится файл RES.BMP, представляющий из себя скриншот биоса. Объем этого файла ~125 килобайт. Естественно, в таком виде на страницу в web его лучше не выкладывать. Желательно сначала переконвертировать BMP-файл в формат PNG при помощи подручных средств (ACDSee, например). Объем полученного в итоге файла RES.PNG в очень редком случае превысит 10..15 килобайт ! И это скриншот всего экрана, не говоря уж об избранных частях картинки.

Примеры: Сравните сами размеры файлов и четкость картинки.


{13764 bytes}

{2395 bytes}

{19996 bytes}

{3477 bytes}

{29959 bytes}

{4968 bytes}


Надеюсь, надобность в дальнейшей рекламе отпала.
Но не все так радужно.

1) Было замечено, что на некоторых платах (обычно производства ASUS) со встроенным видео скриншот может не сохраняться.

2) Некоторые биосы (например, на моей EPoX 8KHA+) перед входом в сетап биоса не передают управление биосам PCI-карточек. В итоге, скриншот на материнках с такими биосами описанным способом сделать невозможно.

Теоретически этот недуг можно побороть, модифицировав биос видеокарты. Заодно появится возможность делать скриншот на этапе определения процессора и тестирования памяти. Но в ближайшее время я этим заниматься не собираюсь.

3) На супер экзотических биосах, работающих в нестандартные видеорежимах, использующих свою собственную палитру и рисующих в других видеостраницах, представленный мною способ работать не будет -- необходима доработка. Правда, таких биосов я пока что еще не встречал.

4) Будьте внимательны ! Покуда в вашем компьютере будет стоять карточка с прошитым псевдобиосом (текущей версией), всегда будет существовать опасность порчи дискеты при случайном нажатии клавиши <PrintScreen>. Причем, как в сетапе биоса, так и в досовском режиме. Даже под виндой для ДОС-окон, если для этих окон разрешина отработка нажатия на <PrintScreen> !

В будущем во избежание порчи дискет, надо бы предварительно записывать на дискету сигнатурку, и проверять ее наличие перед записью скриншота: если ее нет, то на дискету записано ничего не будет. Но это все [опять] когда-нибудь потом.

5) Теоретически, как я уже упоминал, существует возможность интегрировать нужный код под видом ISA/PCI Expansion ROM в биос материнки. Благо для биосов некоторых производителей существуют спец.утилиты: CBROM для AWARD и AMIBCP для AMI. Но я этот способ не испытывал, да и обзорщикам он вряд ли пригодится, т.к. они обозревают обычно самые современные платы, а с ними упомянутые утилиты не всегда безошибочно работают. Да и денег у обзорщиков должно хватать на PCI-карточку с флэшкой на борту.

Можно, опять же теоретически, делать скриншоты сетапов биосов сказевых адаптеров. Но на практике мне такой возможности не предоставлялось. Возможно, предварительно придется поперетыкать PCI-карточки по слотам, чтобы добиться нужной последовательности запуска их набортных биосов.

---
Если еще какие косяки потом вспомню -- обязательно допишу.


ToDo: (что надо бы сделать, но что никогда не сделаю по причине своей природной лени )

1) записывать не один, а несколько скриншотов на дискету;

2) интегрировать программный код в биос контроллера, а не заменять полностью биос этим самым программным кодом; в принципе, я это уже делал, когда возился с антистарфорсовским биосом для SiI0680 -- нужно лишь слегка доработать и написать тулзу для автоматической модификации биосов (в том числе VGA, в том числе объемом больше 64Кб);

3) ввести защиту от записи на произвольные дискеты (об этом уже писал выше);

4) создать вариант кода для нестандартных биосов (нестандартный видеорежим, палитра, страница, прочее);

5) [высший пилотаж - я на это не способен ]: записывать скриншоты на диски прямо в формате BMP (мечты, мечты...). Объем кода резко возрастет, но зато не понадобится никаких дополнительных утилит (сомительное преимущество).


Вот, пожалуй, и все, что я хотел сообщить сегодня.

Если есть какие-то вопросы, предложения, замечания, то просьба высказывать их в соответствующей ветке форума.



Вадим Карпов

Псков
(13-06-2006)


[14-06-2006] Небольшое дополнение:

Чтобы не получить картинку с такой вот шапкой



запомните один совет: после смены дискеты для нормального сохранения скриншота желательно нажать клавишу <PrintScreen> не один, а два раза! Можно и больше, но не нужно.


[22-06-2006] Небольшое дополнение:

Как говорится, в семье производителей материнских плат не без ASUS'а.
Вот такой вот "замечательный" скрин получается на материнках этого производителя со встроенным видео:

(ASUS P5P800-MX)


Одна из мамок без встроенного видео (AMI биос):

(ASUS P5GD1 Pro rev. 105)


От себя порекомендую нашему брату-экспериментатору лишний раз с платами этого производителя не связываться. Иначе рискуете наступить на заботливо разложенные данным брэндом фирменные грабельки.


[12-07-2006] Небольшое дополнение:

Случайно обнаружил на форуме www.xtremesystems.org ветку BIOS screenshot tutorial .

Спасибо огромное господину Cooper'у за популяризацию идеи на Западе и краткий перевод моей статьи на English.

С большим сожалением должен констатировать тот печальный факт, что первый скрин по описанному в моей статье способу сделали и опубликовали посетители их форума, а не нашего.


[29-08-2006] Небольшое дополнение:

Сегодня с большим удовлетворением обнаружил в интернете первый обзор материнской платы, в котором в качестве иллюстраций использованы скриншоты биоса, сделанные при помощи описанного в моей статье способа. Заодно с интересом прочел соответствующие комментарии автора обзора. Не знаю почему, но он предпочел конвертировать рисунки в GIF, а не в PNG.

[14-06-2007] Выложил ИСХОДНИКИ обсуждаемой программы:

Scr2FDD_ver001_SRC.rar (7Kb)

Может кого заинтересуют. ;)

!ReadMe_rus.txt:

цитата:
И вот, спустя год после опубликования статьи о программном комплексе для сохранения текстового экрана сетапа биоса в графический файл (подробности см. на http://people.overclockers.ru/xKVtor/record21),
поняв, что заниматься далее этим проектом у меня нет абсолютно никакого желания, я решил опубликовать исходники.

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

Если кто-то усовершенствует приведенный код либо напишет альтернативный аналогичной функциональности, то советую отписаться на форуме:
http://forums.overclockers.ru/viewtopic.php?t=146371

-------------------------------------------------------------------

s2f_001.asm - исходники PCI ROM-модуля

Порядок действий:

  1. Откомпилировать в TurboAssembler'е.
  2. В полученном .COM файле выдрать весь код (512 bytes начиная с сигнатуры "55h AAh").
  3. Подсчитать контрольную сумму и внести ее в кусок, полученный в п.2 (можно закинуть в последний байт).
  4. Дополнить полученный кусок нулями, увеличив таким образом его размер до размера флэшки.
  5. Залить полученный в п.4 бинарник во флэшку PCI-контроллера (если флэшер позволит).


NB1:

При необходимости правятся идентификаторы (VEN_ID/DEV_ID) под тот PCI контроллер, который есть в наличии.
Можно в исходнике, а можно прямо в полученном бинарнике (не забудьте пересчитать контрольную сумму!).
Напомню, что идентификаторы можно подсмотреть, например, в WpcrEdit.

NB2:

В s2f_001.asm используется условная компиляция.
Так что после внесения изменений советую поиграться с опциями TSR и EXE.
Последний вариант удобно отлаживать в Turbo Debugger'е.

-------------------------------------------------------------------


<PAS> - папка, содержащая исходники утилит для считывания сохраненного образа экрана с дискеты и перевода его в графический файл формата BMP.

Компилировалось в Turbo Pascal'е.
Можно попробовать запихнуть все это хозяйство в один файл ради удобства.
И попутно "портировать" все это под Delphi/VirtualPascal,
но возможно придется немного повозиться с процедурой чтения сектора с дискеты.

-=-
(C) xKVtor ;)
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают