The Russian Electronic Developer Magazine | |
Русский электронный журнал разработчика | |
Согласно информации фирмы IBM, последующие обновления для GRADD и прочих дисплейных драйверов по мере опубликования следует искать в Интернете: http://ps.software.ibm.com
Насколько хороша данная технология? Мнения, как обычно, различаются. GRADD драйверы компактны, просты в установке, и, будучи успешно установленными, практически никогда не являются причиной сбоев в работе системы. Generic драйвер дает возможность использовать любые (или практически любые) графические адаптеры, имеющие в своем BIOS поддержку VESA, в режимах SVGA разрешений, т.е. становится возможным более комфортное пользование теми из адаптеров, которые не снабжены штатными драйверами для OS/2. Однако Generic драйвер не позволит переключить частоту обновления кадров (vertical refresh rate) с универсального значения 60 Гц, и достаточно медленно работает с графическими примитивами типа линий или растров (bitmaps).
С точки же зрения программиста, GRADD драйвер на порядок (возможно, и на два) проще в написании по сравнению с драйвером традиционной схемы, и заслуживает самого пристального внимания.
Видеоподсистема GRADD состоит из следующих компонентов:
ULONG EXPENTRY HWEntry( GID gid, ULONG ulFun, PVOID pInput, PVOID pOutput )
Любая функция GRADD обслуживается в контексте вызова этой точки входа. Параметр gid обозначает идентификатор модуля GRADD, ulFun - номер функции, pInput и pOutput - указатели на входной и выходной блоки данных, соответственно. В зависимости от вида функции один или оба этих указателя могут быть нулевыми.
GRADD драйвер получает запросы в формате GHI на исполнение команд с заранее определенными кодами. Обслуживание пяти из этих команд обязательно для каждого драйвера - инициализация драйвера, запрос возможностей драйвера, запрос поддерживаемых драйвером видеорежимов, установка видеорежима, запрос и установка палитры (для 256-цветных режимов). Некоторые команды допускается не обслуживать, а некоторые можно перенаправить в библиотеку программной эмуляции.
Команды GHI конвертируются модулем VMAN из команд VHI, которые, в свою очередь, исходят из модулей трансляции запросов графических подсистем (пример такого модуля - GRE2VMAN.DLL). Конкретный модуль GRADD или самостоятельно обслуживает запрос, или же возвращает код неподдерживаемой функции (тогда запрос передается следующему в цепочке модулю GRADD), или же код запроса программной эмуляции функции (тогда VMAN обращается с данным запросом к модулю программной эмуляции рисования SOFTDRAW). Для расширения системы кодами команд, не предусмотренных заранее, существует специальный вид запроса - операция расширенная.
Для получения драйверами GRADD системных сервисов в интерфейсе VMI существуют вспомогательные функции (helpers): VHAllocMem, VHFreeMem, VHLockMem, VHMap, VHMapVRAM, а также вспомогательные функции для работы с аппаратурой: HWInpByte, HWInpWord, HWInpDWord, HWOutpByte, HWOutpWord, HWOutpDWord, HWOutpString, HWOutpRect, HWOutpBitRect, HWOutpTransRect, HWInpString (определены в DDI.H). Также GRADD драйвера имеют возможность использования функций VESA Video BIOS Extensions через вызовы SVGA Protected Mode Interface, в том числе имеется возможность вызова программных прерываний BIOS. Эти вызовы широко используются как в видеодрайверах традиционной модели, так и в видеодрайверах GRADD. (В качестве интересного нюанса заметим, что в видеодрайверах NT4 такая возможность тоже есть - и тоже используется :)
Ralph Brown Interrupt List rev.59 даёт следующую информацию относительно частот вертикальной развёртки для адаптеров Tseng ET4000 (предшественник ET6000, практически совместимый снизу-вверх):
INT 10 - Tseng ET-4000 BIOS - GET/SET SCREEN REFRESH RATE AH = 12h BL = F1h AL = subfunction 00h set refresh rate 01h get refresh rate BH = video mode 00h 640x480 01h 800x600 02h 1024x768 03h 1280x1024 CX = new refresh rate (see #00034) if AL = 00h Return: AL = 12h if supported CX = current rate (for AL=00h, a changed CX indicates failure) (Table 00034) Values for Tseng ET4000 refresh rate: CX 640x480 800x600 1024x768/1280x1024 00h 60 Hz 56 Hz interlaced 01h 72 Hz 60 Hz 60 Hz 02h 75 Hz 72 Hz 70 Hz 03h 90 Hz 75 Hz 75 Hz 04h -- 90 Hz --В процедуру загрузки параметров всех доступных видеорежимов добавлено "размножение" записей для режимов соответствующих разрешений согласно количеству частот вертикальной развёртки, которые можно включить в видеоадаптерах Tseng средствами BIOS для данных разрешений. Это значит, что для, например, общего количества 22 видеорежимов каждый из доступных режимов 800х600 пикселов должен быть занесён в результирующую таблицу 5 раз, с частотами вертикальной развёртки 56, 60, 72, 75 и 90 Гц. Позже из этих режимов будут выбраны те, которые можно установить на подключенном мониторе.
При установке режима проверяется, определены ли для него значения регистров вызова Video BIOS, и если это так, то перед вызовом SVGAPMI PMIREQUEST_SETMODE (стандартная методика в GENGRADD) производится вызов PMIREQUEST_SOFTWAREINT с соответствующими параметрами.
Эти два простые добавления позволили с минимальными усилиями получить на адаптерах ET6000 возможность включения более приятных частот вертикальной развёртки (правда, отсутствие более подробной информации не позволило ввести полезные промежуточные значения частот, например, 85 Гц). Этот драйвер для ET6000 доступен со страницы http://www.geocities.com/SiliconValley/Pines/4388/et6/. Попутно выявилось то, что при наличии в системе DDC монитора (теоретически обладающего широким набором возможных разрешений), SVGAPMI предоставляет пользователю выбор из трёх стандартных разрешений 640х480, 800х600, 1024х768, а это значит, что, несмотря на наличие в адаптере ET6000 режима 1152х864, включен этот режим никогда не будет. Известная фирма SciTech обходит эту проблему в своих драйверах тем, что добавляет в файл описания мониторов PRIVATE.DIF псевдо-монитор SciTech, в котором описывает все (но на самом деле не все :) ) возможные разрешения с одной частотой развёртки 60 Гц.
За более подробной информацией следует обратиться в DDK Documentation и DDK header files (они более актуальны в отношении состава структур данных, чем давно не обновляемая документация).
Yury Tarasievich
http://www.geocities.com/SiliconValley/Pines/4388
Комментариев к странице: 0 | Добавить комментарий
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов