Идеальный скриншот BIOS'а ? Запросто !
125 килобайт. Естественно, в таком виде на страницу в web его лучше не выкладывать. Желательно сначала переконвертировать BMP-файл в формат PNG при помощи подручных средств (ACDSee, например). Объем полученного в итоге файла RES.PNG в очень редком случае превысит 10..15 килобайт ! И это скриншот всего экрана, не говоря уж об избранных частях картинки. Примеры: Сравните сами размеры файлов и четкость картинки.
Надеюсь, надобность в дальнейшей рекламе отпала. Но не все так радужно. 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 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:
- Откомпилировать в TurboAssembler'е.
- В полученном .COM файле выдрать весь код (512 bytes начиная с сигнатуры "55h AAh").
- Подсчитать контрольную сумму и внести ее в кусок, полученный в п.2 (можно закинуть в последний байт).
- Дополнить полученный кусок нулями, увеличив таким образом его размер до размера флэшки.
- Залить полученный в п.4 бинарник во флэшку PCI-контроллера (если флэшер позволит).
<PAS> - папка, содержащая исходники утилит для считывания сохраненного образа экрана с дискеты и перевода его в графический файл формата BMP. Компилировалось в Turbo Pascal'е. Можно попробовать запихнуть все это хозяйство в один файл ради удобства. И попутно "портировать" все это под Delphi/VirtualPascal, но возможно придется немного повозиться с процедурой чтения сектора с дискеты. -=- (C) xKVtor ;)