Домой | EN-US Английский | RU Русский | Другие проекты (EN-US Английский)


Проект VBEMP NT
Универсальный VESA/VBE Видео Драйвер
(для архитектуры Windows NT)

Проект начат в Мае 2004 г.

Обзор


Ключевые возможности :

Планируемые возможности :


Загрузить драйверы


Этот драйвер рекомендуется использовать в том случае, когда у Вас имеются новые или неизвестные видеокарты и у Вас нет для них соответствующих драйверов. Лучше всего связаться с производителем Вашей видеокарты или найти драйверы в ИНТЕРНЕТЕ. ТОЛЬКО ЕСЛИ Вам ваще не удалось найти драйверы, Я рекомендую использовать мой (vbemp.sys). Мой драйвер не обеспечивает аппаратного 3D ускорения (DirectX & OpenGL). Для этого существуют сторонние библиотеки.

Если Ваша карта - продукт AMD-ATI Technologies и эта карта определяется двумя устройствами ("Radeon xxxx" и "Radeon xxxx Secondary") только "Ручная" или "legacy" версия может заработать с ней.

Мой драйвер НЕ поддерживает подключение нескольких видеокарт одновременно и эта опция НЕ планируется.

Мой драйвер НЕ поддерживает любые версии Windows Vista/Windows 7/Windows 8.

Перед установкой VBEMP.SYS я настоятельно рекомендую удалить все драйверы видеокарт, включая любые версии драйвера VBEMP, установленные в системе и переключиться в стандартный VGA-режим 640x480x16цветов.

Системные требования :

* Если у Вас появляются проблемы с установкой VBEMP или любого другого драйвера в среде Windows NT 4.0 (и NT 3.51) - гаснет экран, система "виснет" после перезагрузки - прочтите эту статью MS. Подробности здесь: MSKB: AGP Video Support for Windows NT 3.51 and 4.0 (Q174567). Установите Service Pack 3 или новее для Windows NT 4.0, и Q174567 Hotfix для Windows NT 3.51 чтобы устранить эту проблему.

** Версия для Windows XP/Windows 2003, в принципе ваще не нужна, потому что ее базовая функциональность уже включена в стандартный VGA.SYS. В отличие от моего драйвера, VGA.SYS:

  1. Поддерживает 4-бит (16 цветов) режимы
  2. Поддержка VESA BIOS ограничена для некоторых карт:
    BIOS Buglist из Windows XP SP3 VGA.SYS
    
    Brookdale-G Graphics Controller
    ATI S1-370TL
    ArtX I
    Voodoo4 4500
    Voodoo3 3000 LC
    Voodoo3 2000 LC
    3Dfx Banshee
    MGA-G100
    SiS 5597
    NVidia Corporation
    NV11 (GeForce2) Board 
    Chip Rev B2
    Version 3.11.01.24N16
    
  3. Не переключается в разрешения экрана меньше 640x480
  4. Не может переключать частоту обновления экрана (refresh rate) по стандарту VBE 3.0
  5. Не поддерживает Write Combining (USWC)
  6. Режимы 15-бит R5G5B5 пропускаются

ОС

Версия

Описание

Ссылка

Windows NT,
Windows 2000,
Windows XP,
Windows 2003,
Windows PE x64/ia64

Release version
бета
01.01.2015

Универсальные VBE30 и VBE20 версии.**,
Панель управления для VBEMP.

[?],[?],[?]

Windows XP,
Windows 2003,
Windows PE x64/ia64

Release version
бета
07.09.2010

Универсальные VBE30 и VBE20 версии.**

[?],[?],[?]

Windows NT,
Windows 2000,
Windows XP,
Windows 2003,
Windows PE

Release version
бета
07.09.2010

Универсальные VBE30 и VBE20 версии.**

[?],[?],[?]

Windows NT,
Windows 2000,
Windows XP,
Windows 2003,
Windows PE

Release version
бета
01.14.2009

Универсальные VBE30 и VBE20 версии.**

[?],[?],[?]

Windows NT,
Windows 2000,
Windows XP,
Windows 2003,
Windows PE

Release version
бета
04.26.2008

Универсальные VBE30 и VBE20 версии.**

[?],[?],[?]

Windows NT,
Windows 2000,
Windows XP,
Windows 2003,
Windows PE***

"STABLE"
Release version
10.19.2007

Универсальные VBE30 и VBE20 версии.**

[?],[?],[?]

Windows NT клоны - ВСЕ из них

Release version
beta
01.08.2009

Специальная версия драйвера для чипов Cirrus Logic: CL-GD542x, CL-GD543x, CL-GD544x, CL-GD546x, CL-GD5480, включая CL-GD5446 который используется в qemu. В картах с 2Mb+ VRAM доступен 32-битный цвет.

[?],[?],[?]

Windows NT клоны - ВСЕ из них

Debug version * 01.03.2009

IBM Graphics driver работает на любых EGA/VGA-совместимых картах (моно, 16, 256 цветов).

[?],[?],[?]

Windows NT 4.0

Release version
10.28.2007

VGAMONO USWC специальный драйвер, к-рый эмулирует truecolor в 1,2 или 4-битовых режимах, работает на любых VBE-совместимых картах.

[?],[?],[?]

Windows NT 3.51,
Windows NT 4.0,
Windows 2000,
Windows XP,
Windows 2003

Release version
12.19.2008

Панель управления для VBEMP.

[?],[?],[?]

Windows NT 3.5x,
Windows NT 4.0

Release version
бета
07.05.2010

FRAMEVBE библиотека с поддержкой технологии теневого буфера.

[?],[?],[?]

Windows NT 3.5x,
Windows NT 4.0,
Windows 2000,
Windows XP,
Windows 2003,
Windows PE

Release version
бета
07.05.2010

FRAMEBUF библиотека с поддержкой 15-бит режимов.

[?],[?],[?]

Windows NT клоны - ВСЕ из них (до Windows 7 включительно)

Release version
16.12.2011

Специальный драйвер для VirtualBox за авторством Michal Necasek.

[?]

Windows NT клоны - ВСЕ из них (до Windows 7 включительно)

Release version 2
04.03.2012

Специальный драйвер для VirtualBox за авторством Michal Necasek.

[?]

Windows NT клоны - ВСЕ из них (до Windows 7 включительно)

Release version 3
01.08.2014

Специальный драйвер для VirtualBox за авторством Michal Necasek.

[?]

Примечание 1: Если Ваша карта работает медленно с установленным VBEMP, особенно при перемещении больших окон, прокрутке текста и заметно мерцание экрана Вы можете улучшить ситуацию:

Примечание 2: Начиная с версии датированной 10.19.2007, vbemp?.zip содержит эти варианты драйвера VBEMP:

Примечание 3: Как Вы уже заметили, для Windows 2000/XP/2003/PE существуют две версии - PnP и LEGACY. А еще каждый подвид драйвера имеет VBE30 и VBE20 версии. Для чего это сделано:

Примечание 4: По умолчанию любые Plug'n'Play видеокарты определяются КОРРЕКТНО 2000/XP/2003 версией моего драйвера. Но если Вы хотите, Вы МОЖЕТЕ добавить PCI VENDOR/DEVICE ID Вашей видеокарты в vbemppnp.inf для того, чтобы Ваша карта определялась под своим именем или можете выбрать драйвер вручную, когда Windows впервые находит неизвестное устройство. Это необязательное действие!
Пример:

; vbemp5.inf
;
; Installation file (.inf) for the VBE Miniport device.
;
; (c) Copyright 2006 AnaPa Corp 
;
 . . . . . .

 . . . . . .
[AnaPa.Mfg]
VBE Минипорт = Vbemp, NOPNP
VBE Минипорт - Standard PCI Graphics Adapter (VGA) = Vbemp, PCI\CC_0300
VBE Минипорт - Standard PCI Graphics Adapter (XGA) = Vbemp, PCI\CC_0301
VBE Минипорт - Standard PCI Graphics Adapter = Vbemp, PCI\CC_0380
VBE Минипорт - Standard Graphics Adapter (VGA) = Vbemp, *PNP0900
VBE Минипорт - VGA = Vbemp, *PNP0917
VBE Минипорт - SVGA = Vbemp, NOPNP
VBE Минипорт - 1394 = Vbemp,1394\&
VBE Минипорт (ATI, AMD) = Vbemp, PCI\VEN_1002&CC_0300
VBE Минипорт (Intel) = Vbemp, PCI\VEN_8086&CC_0300
VBE Минипорт (nVidia) = Vbemp, PCI\VEN_10DE&CC_0300
VBE Минипорт (ATI Rage 128PRO 4x pri) = Vbemp, PCI\VEN_1002&DEV_5046
VBE Минипорт (Intel D845G) = Vbemp, PCI\VEN_8086&DEV_2562&SUBSYS_52478086
Имя Вашей карты = Vbemp, PCI\VEN_xxxx&DEV_yyyy&SUBSYS_zzzzzzzz ; шаблон карты, смотри ниже
 . . . . . .

Чтобы вписать эту строку Вы можете использовать программу Craig Hart's PCI32 упомянутую ниже, вот пример отчета:

 . . . . . .
 Bus 1 (AGP), Device Number 0, Device Function 0
 Vendor 1002h ATI Technologies Inc
 Device 4966h Radeon 9000 Series (RV250)
 Command 0187h (I/O Access, Memory Access, BusMaster, Wait Cycles, System Errors)
 Status 02B0h (Has Capabilities List, Supports 66MHz, Supports Back-To-Back Trans., Medium Timing)
 Revision 01h, Header Type 80h, Bus Latency Timer FFh
 Minimum Bus Grant 08h, Maximum Bus Latency 00h
 Self test 00h (Self test not supported)
 Cache line size 32 Bytes (8 DWords)
 PCI Class Display, type VGA
 Subsystem ID 4F721002h Radeon 9000 Series (RV250)
 Subsystem Vendor 1002h ATI Technologies Inc
 . . . . . .

Примечание 5: Мой драйвер не предоставляет никакой поддержки для корректного запуска полноэкранных DOS приложений в графических режимах VESA. Это контролирует VGA.SYS и в большинстве случаев он блокирует прямой доступ к портам ввода-вывода и препятствует запуску VESA программ. Существуют сторонние патчи - WinXPFix Utility (http://www.nomissoft.com/service.html#as2downloads) и 'Videoport driver patch for VESA in NTVDM' (http://www.volny.cz/martin.sulak/, прямая ссылка videoprt.zip) которые исправляет "поведение" VGA.SYS. Попробуйте их если Вам нужен запуск DOS программ в Windows. Я никаким образом не связан с разработчиком(-ами) данных программ.

Примечание 6: По умолчанию системная библиотека Microsoft FRAMEBUF.DLL используется в паре с VBEMP драйвером как компонент уровня пользователя. Но имеется проблема - она отфильтровывает 15-бит режимы. Существуют четыре варианта решения этой проблемы:

  1. Доступны только 16-бит режимы:
  2. Доступны только 15-бит режимы:
  3. Доступны 15-бит и 16-бит режимы (без акселерации):
  4. Доступны 15-бит и 16-бит режимы (с акселерацией):

Примечание 7: Если вы пытаетесь использовать VBEMP драйвер с ISA/MCA/VLB картами в большинстве случаев необходима предварительная регулировка значений следующих пунктов BIOS Setup:

чтобы системная память не пересекалась с памятью видеокарты.

* Для получения RELEASE-версии этого драйвера (которая более стабильна, вдвое меньше размером и работает быстрее DEBUG-версии) Вам нужно связаться со мной по e-mail и прислать мне отчет, сгенерированный утилитой INFOVBE.EXE, потом Я вышлю Вам RELEASE-версию драйвера по e-mail. Я рекомендую эту версию только после того, как Вы убедитесь в том, что DEBUG-версия работает с Вашей картой корректно.

** Если универсальная версия не работает с Вашей картой, Вы можете попробовать Ручную версию. Чтобы получить ее Вам нужно связаться со мной по e-mail и прислать мне отчет, сгенерированный INFOVBE.EXE, потом Я вышлю Вам перcональную версию драйвера для Вашей видеокарты по e-mail.

*** Как установить VBEMP драйвер в среде Windows PE:
  1. Для CD-инсталляции: поместите vbemp.sys в каталог \I386\SYSTEM32\DRIVERS, vbempnp.inf в каталог \I386\INF. Я очень рекомендую предварительно удалить display.inf из каталога \I386\INF.
  2. Для HDD-инсталляции: vbemp.sys в каталог \MININT\SYSTEM32\DRIVERS, vbempnp.inf в каталог \MININT\INF. Я очень рекомендую предварительно удалить display.inf из каталога \MININT\INF.
  3. После запуска WindowsPE выполните:
    factory.exe -winpe
    Эта строчка запустит драйвер.
Как установить legacy VBEMP драйвер в среде Windows PE:
  1. Заменить %SystemRoot%\SYSTEM32\DRIVERS\VGA.SYS моей версией и перезагрузиться.

Настройки реестра


Для "тонкой" настройки драйвера Вы можете использовать Панель управления для VBEMP.
Ветка : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vbemp\Device0
или HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vgasave\Device0 в legacy режиме

Обратите внимание что HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
это виртуальная ветка и она соответствует одной иэ следующих веток:

Ветка : HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\Vbemp\Device0
или HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX\Services\Vgasave\Device0 в legacy режиме
где XXX принимает значения 001, 002, 003 ...
в зависимости от выбранной конфигурации оборудования
согласно значению "Current" отсюда: HKEY_LOCAL_MACHINE\SYSTEM\Select 

В Windows XP и далее эти ключи дублируются:

Ветка : HKLM\SYSTEM\CurrentControlSet\Control\Video\{yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy}\XXXX
или HKLM\SYSTEM\CurrentControlSet\Control\Video\{23A77BF7-ED96-40EC-AF06-9B1F4867732A}\0000
в legacy режиме

Обратите внимание что HKLM\SYSTEM\CurrentControlSet\Control\Video
это "multi-device" ветка и она соответствует одной иэ следующих веток:
где XXXX принимает значения 0000, 0001, 0002, 0003 ... 
в зависимости от выбранного графического устройства вывода начиная с 0.

Значение {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy} зависит от
соответствующей конфигурации оборудования согласно значению "Service" отсюда:
HKLM\SYSTEM\CurrentControlSet\Control\Video\{yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy}\Video
где оно принимает значения "vbemp" или "Vgasave" в legacy режиме
Вот возможные параметры:
 
Ключ : Acceleration.Level
Значение : (REG_DWORD) уровень видео акселерации (0 - 5, 5 - наименьший уровень)
Пояснение : Если "0"-"4" или ключ отсутствует, теневой буфер отключен, а если "5" - включен. Эта установка имеет значение для всех версий VBEMP, работающих под Windows2000 и старше (XP/2003). Рекомендуемое значение - 5.
Необходима перезагрузка : Да.
 
Ключ : VBE_GREY
Значение : (REG_DWORD) 1 или 0
Пояснение : Если "0" или ключ отсутствует, VBEMP в 256-цветных режимах использует стандартную палитру, а если "1" - полутоновую.
Необходима перезагрузка : Нет.
 
Ключ : VBE_VENDORID
Значение : (REG_DWORD) PCI идентификатор устройства, допустимы только следующие значения:

1. 0x100C (Tseng Labs Inc) 2. 0x1013 (Cirrus Logic) 3. 0x5333 (S3 Inc) 4. 0x1023 (Trident Microsystems Inc)
Пояснение : Значение играет роль только для ISA/MCA/VLB карт. (появилось в версии от мая2007!).
Необходима перезагрузка : Да.
 
Ключ : VBE_MEMBASE
Значение : (REG_DWORD) базовый адрес буфера кадра, к примеру:
1. 0x80000000 (для карт S3 Inc)
2. 0xD00000 (для карт Cirrus Logic)
3. 0xE00000 (для карт Cirrus Logic)
4. 0xF00000 (для карт Cirrus Logic)
5. 0x4D00000 (для карт Cirrus Logic)
6. 0x4E00000 (для карт Cirrus Logic)
7. 0x4F00000 (для карт Cirrus Logic)
8. 0xC00000 (для карт Tseng Labs)
9. 0x100000-0x3F00000 (для карт Trident)
Пояснение : Значение играет роль только для ISA/MCA/VLB карт. Значение берется из документации на видеокарту, Вы должны знать его точно, у Вас есть варианты:
  1. Если это значение ниже линии 16Mb (< 0x1000000) и у Вас менее 16Mb системной памяти то Вы без проблем уcтановите VBEMP.
  2. Если это значение ниже линии 16Mb (< 0x1000000) и у Вас 16Mb или более системной памяти Вы должны включить опцию "Memory hole option" в BIOS Setup Program Вашего компьютера.
  3. Если это значение выше либо равно 16Mb (>= 0x1000000) и у Вас 16Mb или более системной памяти убедитесь что видео- и системная память не пересекаются. Если они пересекаются у Вас не будет возможности установить VBEMP на такой компьютер. В таком случае, Вы можете попытаться отключить или ограничить использование памяти выше адресов буфера кадра, используя ключи /MAXMEM или /BURNMEMORY в Вашем файле \boot.ini.
Буфер кадра НЕ МОЖЕТ перекрывать регион системной памяти!
Значение играет роль только для ISA/MCA/VLB карт. (появилось в версии от мая2007!).
Необходима перезагрузка : Да.
 
Ключ : VBE_USWC
Значение : (REG_DWORD) 1 или 0
Пояснение : Если "0" или ключ отсутствует, Комбинированная запись (USWC) отключена, а если "1" - включена. (появилось в версии от июня2007!).
Необходима перезагрузка : Да.
 
Ключ : VBE_ALIGN
Значение : (REG_DWORD) 2, 1 или 0
Пояснение : Если "0" или ключ отсутствует, память буфера кадра выравнивается по границе 64Kb, если "1" - по границе 4Mb, если "2" - по размеру всей памяти адаптера. Установка "1" рекомендуется когда Комбинированная запись (USWC) включена. (появилось в версии от июня2007!).
Необходима перезагрузка : Нет.
 
Ключ : VBE_VSYNC
Значение : (REG_DWORD) 1 или 0
Пояснение : Если "0" или ключ отсутствует, Полярность вертикальной синхронизации отрицательная, а если "1" - положительная. (появилось в VBE30 версии от июня2007!).
Необходима перезагрузка : Нет.
 
Ключ : VBE_HSYNC
Значение : (REG_DWORD) 1 или 0
Пояснение : Если "0" или ключ отсутствует, Полярность горизонтальной синхронизации отрицательная, а если "1" - положительная. (появилось в VBE30 версии от июня2007!).
Необходима перезагрузка : Нет.

Значения параметров для полярности HSync и VSync берутся из документации на монитор. Обычно можно принять что режим 640 x 400 использует -Hsync и +Vsync, режимы 640 x 480, в основном, используют +Hsync и +Vsync и все высшие режимы (800 x 600 и более) используют -Hsync и -Vsync полярности.

Ключ : VBE_FILTER
Значение : (REG_BINARY) максимум 32 строчки по 8 байт = 256 байт
Примеры:
08,00,06,00,00,00,00,00 - выключает все 800x600 режимы 
08,00,06,00,00,00,00,56 - выключает все 800x600 режимы с частотой выше 56гц 
08,00,06,00,00,70,00,85 - выключает все 800x600 режимы с частотой выше 85гц и ниже 70гц 
00,00,00,00,00,00,01,00 - выключает все режимы с частотой выше 100гц
Пояснение : Если ключ отсутствует, VBEMP не осуществляет фильтрацию режимов. (появилось в версии от июля2007!).
Необходима перезагрузка : Да.
 
Ключ : VBE_DDC
Значение : (REG_DWORD) 1 или 0
Пояснение : Если "0" или ключ отсутствует, VBEMP не определяет PNP монитор используя PNP-менеджер, а если "1" - определяет. (появилось в версии от июня2007! Не для legacy-mode драйверов!).
Необходима перезагрузка : Да.
 
Ключ : VBE_EDID
Значение : (REG_DWORD) 1 или 0
Пояснение : Если "0" или ключ отсутствует, VBEMP не определяет PNP монитор используя внутренние механизмы драйвера, а если "1" - определяет. (появилось в версии от июля2007!).
Необходима перезагрузка : Да.
 
Ключ : VBE_RAWEDID
Значение : (REG_BINARY)
Пояснение : Когда VBE_EDID = 1, EDID-блок пишется сюда. (появилось в версии от июля2007!).
 
Ключ : VBE_NVSCALE
Значение : (REG_DWORD) 2, 1 или 0
Пояснение : Если "0" или ключ отсутствует, масштабирование включено, если "1" - выключено и изображение центрировано, если "2" - выключено и изображение вверху слева. Значение играет роль только для карт nVidia, подключенных к LCD дисплею через DVI. (появилось в версии от января2009!).
Необходима перезагрузка : Да.
 
Ключ : VBE_RGB555
Значение : (REG_DWORD) 1 или 0
Пояснение : Если "0" или ключ отсутствует Режимы R5G5B5 отражаются как 15-бит и R5G6B5 - как 16-бит, если "1" - режимы R5G5B5 отражаются как 16-бит и R5G6B5 - как 15-бит. Это изменение нужно для их коррекной поддержки через Microsoft FRAMEBUF.DLL драйвер, который не умеет использовать режим еслии сообщается что он - 15-bpp. (появилось в версии от июня2010!).
Необходима перезагрузка : Да.

Скриншоты. Проект VBEMP NT в работе :)



Инструкция: Полное удаление драйвера VBEMP из системы WinNT/2K/XP/2K3


  1. Удалить файлы:
    \%WINDOWS_DIR%\SYSTEM32\DRIVERS\VBEMP.SYS 
    \%WINDOWS_DIR%\INF\oem?.inf
    \%WINDOWS_DIR%\INF\oem?.pnf
    где ? принимает значения 1,2,3,4.....
    содержимое oem?.inf должно соответствовать:
    vbemp4.inf (для Windows NT 4.0)
    vbempnp.inf (для Windows 2000/XP/2003)
    
    \%WINDOWS_DIR%\SYSTEM32\oemvio?.inf (для Windows NT 3.x)
    где ? принимает значения 1,2,3,4.....
    содержимое oemvio?.inf/ должно соответствовать:
    oemsetup.inf (для Windows NT 3.x)
    
  2. Удалить Вашу карту из Менеджера устройств или вычистить ветки реестра:
    Все: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Vbemp
    Только для Windows XP/2003: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Video\{yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy}
    где расположение {yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy} описано выше в Настройках реестра
    

Функция Ke386CallBios()


Декларация функции, импорт NTOSKRNL.LIB

#define SIZE_OF_80387_REGISTERS      80
typedef struct _FLOATING_SAVE_AREA {
    ULONG   ControlWord;
    ULONG   StatusWord;
    ULONG   TagWord;
    ULONG   ErrorOffset;
    ULONG   ErrorSelector;
    ULONG   DataOffset;
    ULONG   DataSelector;
    UCHAR   RegisterArea[SIZE_OF_80387_REGISTERS];
    ULONG   Cr0NpxState;
} FLOATING_SAVE_AREA;

typedef struct _CONTEXT {
    ULONG ContextFlags;
    ULONG   Dr0;
    ULONG   Dr1;
    ULONG   Dr2;
    ULONG   Dr3;
    ULONG   Dr6;
    ULONG   Dr7;
    FLOATING_SAVE_AREA FloatSave;
    ULONG   SegGs;
    ULONG   SegFs;
    ULONG   SegEs;
    ULONG   SegDs;
    ULONG   Edi;
    ULONG   Esi;
    ULONG   Ebx;
    ULONG   Edx;
    ULONG   Ecx;
    ULONG   Eax;
    ULONG   Ebp;
    ULONG   Eip;
    ULONG   SegCs;              // НЕ ТРОЖЬ - ХУЖЕ БУДЕТ
    ULONG   EFlags;             // НЕ ТРОЖЬ - ХУЖЕ БУДЕТ
    ULONG   Esp;
    ULONG   SegSs;

} CONTEXT;
typedef CONTEXT *PCONTEXT;

NTSTATUS
Ke386CallBios (
    IN ULONG BiosCommand,
    IN OUT PCONTEXT BiosArguments
    );

Пример Вызова Ke386CallBios()

Важно!!! Вызывается из любой точки Windows 2000 (XP/2003 или NT) драйвера видео минипорта кроме DriverEntry() и HwFindAdapter(), кроме того еще нужно добавить след. строки в HwFindAdapter():
ConfigInfo->>VdmPhysicalVideoMemoryAddress.LowPart = 0x000A0000; 
ConfigInfo->>VdmPhysicalVideoMemoryAddress.HighPart = 0x00000000; 
ConfigInfo->>VdmPhysicalVideoMemoryLength = 0x00020000; 
ConfigInfo->>NumEmulatorAccessEntries = 0; 
ConfigInfo->>EmulatorAccessEntries = NULL; 
ConfigInfo->>EmulatorAccessEntriesContext = 0; 
ConfigInfo->>HardwareStateSize = 0; 
А вот сам вызов ф-ции ( при IRQL = 0!!! ):
VOID
Sample()
{
  CONTEXT BiosRegisters;
  NTSTATUS Status;

  ...
  VideoPortZeroMemory(&BiosRegisters, sizeof(BiosRegisters));
  BiosRegisters.Eax = 0x0F00;
  Status = Ke386CallBios(0x10, &BiosRegisters);
  ...
}
Windows NT 3.x особый случай, типа. Перед ПЕРВЫМ ВЫЗОВОМ Ke386CallBios() Вам нужно обратиться к VideoPortInt10() как-нибудь. Типа:
BOOLEAN 
Sample2(PVOID HwDeviceExtension)
{
  PVBE_DEVICE_EXTENSION VBEDeviceExtension = 
    (PVBE_DEVICE_EXTENSION)HwDeviceExtension;
  VIDEO_X86_BIOS_ARGUMENTS BiosRegs;
  CONTEXT BiosRegisters;
  NTSTATUS Status;

  ...
  VideoPortZeroMemory(&BiosRegs, sizeof(BiosRegs));
  BiosRegs.Eax = 0x0F00;
  VideoPortInt10(HwDeviceExtension, &BiosRegs);
  ...
  VideoPortZeroMemory(&BiosRegisters, sizeof(BiosRegisters));
  BiosRegisters.Eax = 0x0F00;
  Status = Ke386CallBios(0x10, &BiosRegisters);
  ...
}

Дополнительная информация


Официальная информация по стандарту VESA BIOS Extensions 3.0 - http://www.vesa.org/public/vbe/vbe3.pdf.

THE VESA GENERALIZED TIMING FORMULA (GTF) Excel™ spreadsheet - http://www.vesa.org/Public/GTF/GTF_V1R1.xls.

VESA COORDINATED VIDEO TIMING (CVT) GENERATOR Revision 1.1 Excel™ spreadsheet - http://www.vesa.org/Public/CVT/CVTd6r1.xls.

Файл справки "Дисплеи и устройства печати: Windows XP DDK" (Built on Friday, February 18, 2005) - [?],[?],[?].

SciTech Software Inc выпустила коммерческую версию аналогичного драйвера (SciTech SNAP Graphics changelog) для Windows, OS/2, QNX & Linux. Эти версии пробные на 21 день.

  1. Скачать Windows 2000/XP Version 3.1.4 DPVL beta2 [dpvlbeta2.zip].
  2. Скачать Windows NT 4.0 Версия 3.1.1 [snap-winnt-3.1.1.exe]. Поддерживаемое оборудование.
  3. Скачать Windows NT 4.0 Версия 3.1.3 beta 1284 [snap-winnt-3.1.3-1284.exe].
  4. Скачать DOS Версия 3.1.1 [snap-dos-3.1.1.exe]. Поддерживаемое оборудование.
  5. Скачать IBM OS/2 (eCS) Версия 3.1.8 [snap-os2-3.1.8.exe]. Поддерживаемое оборудование.

Более новую Персональную версию (пробную на 6 месяцев) можно скачать БЕСПЛАТНО зарегистрировавшись на http://my.scitechsoft.com/navigate.php.

Посетите сайт http://et6000.narod.ru/ который содержит драйвер и исходный код к нему для видеокарт Tseng Labs ET6000, ET6100 и ET6300 PCI для Windows 2000/XP.

VIDEOSIM.SYS frame buffer simulator пример видеодрайвера (исходный код) из комплекта разработчика устройств (DDK) Windows NT 4.0 [?],[?],[?].

MIRROR.SYS frame buffer mirror пример видеодрайвера (исходный код) из комплекта разработчика устройств (DDK) Windows 2000 [?],[?],[?].

Посетите ReactOS operating system 'tm subversion repository для обзора исходников последней версии видео драйверов - http://svn.reactos.org/.../miniport/

Посетите VirtualBox 'tm subversion repository для обзора исходников последней версии драйвера для виртуального видеоадаптера - http://www.virtualbox.de/.../WINNT/Graphics?rev=1

Здесь Вы можете найти некоторые тесты и бенчмарки, которые я использовал для тестирования производительности моего драйвера - benches.rar

Вот список протестированного стороннего програмнного обеспечения, совместимого с VBEMP драйвером и обеспечивающее ограниченную поддержку 3D ускорения. Данный список также относится к драйверу VGA.SYS из Windows XP/2003 и далее.

Наименование ПО

Владелец

API

Совместимость

Заметки

Reference Rasterizer (DitectX SDK)

Microsoft

DX8, DX9

Aналогично DirectX, x86/x64

Поддержка шейдеров, Медленно

RGB Rasterizer (DitectX SDK)

Microsoft

DX8, DX9

Aналогично DirectX, x86/x64

Нет поддержки шейдеров, быстрее чем reference

Pixomatic

RAD Game Tools

DX8, DX9

Windows9x/NT4 и далее

Поддержка SMP. Нет поддержки шейдеров, быстрее чем MS RGB Rasterizer

SwiftShader 2.0/3.0

TransGaming

DX8, DX9

Windows 2000 и далее

Поддержка SMP. С версии 3.0 умеет x64, но нет поддержки Windows 2000. Немного медленнее Pixomatic. Умеет шейдеры. Проблемы при FFP рендеринге.

Mesa3D

open-source

OpenGL

Windows9x/NT4 и далее

Новые версии совместимы только с Windows XP и новее.

Посетите сайт VOGONS Vintage Driver Library для скачивания Mesa3D, SwiftShader.

Вот список прочего ПО, которое было протестировано: Realtech VR DXGL Wrapper, AltOpenGL, TechLand Soft OpenGL, mesaFX OpenGL, SciTech Software GLDirect.


Протестированные видеокарты/чипсеты


  1. VBE 3.00 INTERNAL Intel G33 (GMA 3100) Graphics
  2. VBE 3.00 INTERNAL Intel Q963 (GMA 3000) Graphics
  3. VBE 3.00 INTERNAL Intel 915G Graphics
  4. VBE 3.00 INTERNAL Intel 910G Graphics
  5. VBE 3.00 INTERNAL Intel 865G Graphics
  6. VBE 3.00 INTERNAL Intel 845G Graphics
  7. VBE 3.00 INTERNAL Intel 815G Graphics
  8. VBE 3.00 INTERNAL Intel 810G Graphics
  9. VBE 2.00 AGP 8Mb ATI Rage 3D Pro AGP 2x (BGA Package)
  10. VBE 2.00 AGP 8Mb ATI Rage P/M Mobility AGP 2x
  11. VBE 2.00 AGP 32Mb ATI Rage128 PF/Pro AGP 4x (TMDS)
  12. VBE 2.00 AGP 64Mb ATI Radeon 9000 Series (RV250)
  13. VBE 2.00 INTERNAL ATI Radeon Xpress 200M Series
  14. VBE 3.00 16Mb? ATI Radeon X1650 Series (RV530 LE)
  15. VBE 3.00 16Mb? ATI Radeon X1950 GT [RV570]
  16. VBE 3.00 AGP 16Mb 3Dfx Interactive Voodoo3 2000
  17. VBE 3.00 PCI 4Mb nVidia RIVA 128 2D/3D Gui Accelerator
  18. VBE 3.00 AGP 4Mb nVidia RIVA 128 2D/3D Gui Accelerator
  19. VBE 3.00 AGP 16Mb nVidia RIVA TNT GUI+3D Accelerator [NV4]
  20. VBE 3.00 AGP 16Mb nVidia RIVA TNT2 Model 64 [NVM64]
  21. VBE 3.00 AGP 32Mb nVidia GeForce2 MX/MX400 [NV11]
  22. VBE 3.00 AGP 64Mb nVidia GeForce2 GTS/PRO [NV15]
  23. VBE 3.00 AGP 64Mb nVidia Geforce3 Ti 200 [NV20]
  24. VBE 3.00 AGP 128Mb nVidia GeForce FX 5200 [NV34.3]
  25. VBE 3.00 INTERNAL nVidia GeForce 6100 nForce 430
  26. VBE 3.00 nVidia GeForce 7600GS
  27. VBE 2.00 PCI 4Mb Matrox MGA-2164W Millenium II PCI
  28. VBE 2.00 AGP 4Mb Matrox MGA-G100 AGP
  29. VBE 1.32 INTERNAL 1Mb TSENG LABS Inc ET4000
  30. VBE 2.00 PCI 4Mb TSENG LABS Inc ET6000
  31. VBE 2.00 VLB 2Mb S3 Inc Vision964
  32. VBE 2.00 PCI 2Mb S3 Inc 86C375 ViRGE/DX
  33. VBE 2.00 AGP 4Mb S3 Inc 86C368 Trio3D/2X
  34. VBE 1.02 INTERNAL 1Mb Cirrus Logic CL-GD5428
  35. VBE 1.02 INTERNAL 512Kb Cirrus Logic CL-GD5424
  36. VBE 1.02 VLB 1Mb Cirrus Logic CL-GD5428
  37. VBE 1.02 PCI 1Mb Cirrus Logic CL-GD5446 PCI
  38. VBE 2.00 INTERNAL Trident CyberBlade i7
  39. VBE 1.02 ISA 1Mb Trident 8900
  40. VBE 1.02 ISA 512Kb Trident 9000i [TrueColor DAC]
  41. VBE 1.02 ISA 256Kb Realtek 3106 [RTG3106]
  42. без VBE ISA 256KB Cirrus Logic CL-GD5401 - Acumos VGA (AVGA1)
  43. VBE 2.00 PCI 8Mb? VirtualBox VBE Adapter (Innotek VirtualBox)
  44. VBE 2.00 PCI 16Mb VMware SVGA II (VMware)
  45. VBE 2.00 PCI 4Mb Cirrus Logic CL-GD5446 PCI (QEMU)
  46. VBE 2.00 PCI 4Mb IBM Plex86/Bochs VBE Adapter (QEMU/Bochs)
  47. VBE 2.00 PCI ?Mb IBM Plex86/Bochs VBE Adapter [vmware] (QEMU/Bochs)
  48. без VBE ISA 256KB Elpin VGABIOS (Bochs)

Решение проблем с драйвером


Когда у Вас возникают проблемы с VBEMP, обычно существуют два базовых сценария:

  1. Компьютер стартует, но драйвер работает неправильно.
  2. Компьютер не стартует, т.е. "падает", показывает BSOD или "зависает".

Перед отладкой попробуйте эти операции, указанные ниже:

  1. Физически удалите чипы памяти или используйте опцию /MAXMEM в boot.ini для этого по образцу (например если у Вас 1024 Mb RAM): 512 -> 256 -> 128 -> 64 -> 32 -> 16 -> 8.
  2. Обновите BIOS материнской платы до последней версии.
  3. Очистите настройки CMOS до безопасных или по умолчанию.
  4. Уменьшите AGP Aperture в BIOS т.к. она не используется VBEMP.
  5. Временно удалите внешние контроллеры как то: usb, sound, hdd, lan и пр.
  6. Попробуйте использовать видеокарту с другой шиной: AGP, PCIe, PCI, набортную.

Для начала процесса отладки Вы ДОЛЖНЫ запросить у меня LOGGED-версию (для метода 1) или DEBUG-версию (для методов 2,3) драйвера по e-mail. Для методов 2,3 Вы ДОЛЖНЫ ПРОЧЕСТЬ эту статью Отладка в WinDbg пособие для тестировщика чтобы понять какая методика отладки наиболее подходит в Вашем случае. Вот возможные шаги, кратко:

После того как Вы получили логи от драйвера Вы можете предоставить мне дополнительную информацию по системе и видеокарте. Это необязательный шаг!!! Без логов от драйвера эта информация бессмысленна для меня!!!

  1. Собрать информацию о VESA BIOS и о системе :

  2. Для владельцев ISA/MCA/VLB карт: Выпущены новые утилиты - lfb_det.exe/lfb.exe, которые умеют автоматически определять адрес буфера кадра в системном адресном пространстве. Они распространяются только по запросу по e-mail. Прочтите пп. 1 ("Собрать информацию о системе"), сделайте логи и я пришлю Вам эти утилиты.


VBE ЧАВО: Список отклонений от стандарта VESA Видео BIOS Расширений

Карты (чипы) affected

Описание

Intel 845G, 855G, 865G, 915G и далее

PRB: Не удается установить "родные" разрешения вроде 1024x600, 800x480, 1280x800, в основном на ноутбуках с встроенной графикой Intel.
DETAILS: В таблицах режимов Video BIOS эти режимы отсутствуют или фильтруются. Когда Вы пытаетесь через BIOS установить эти разрешения, BIOS немедленно возвращает ошибку.
FIX: Обновите Ваш BIOS последней версией или самостоятельно сделайте патч. В DOS/Windows9x возможно использование программного Intel TSR VBIOS VESA-драйвера.

Intel 845G, 855G, 865G, 915G и далее

PRB: Не удается установить разрешение выше 800x600x8бит и 640x480x16бит.
DETAILS: В Video BIOS размер буфера кадра жестко ограничен 832 Кбайт, а этого недостаточно даже для 1024x768x16бит = 1024*768*2 = 1572864, 1572864 > 832K.
FIX: Обновите Ваш BIOS последней версией или самостоятельно сделайте патч. В DOS/Windows9x возможно использование программного Intel TSR VBIOS VESA-драйвера.

Intel 810E, 815E series

PRB: Не удается использовать линейный буфер кадра, хотя карта идентифицирует себя как VBE 3.0 совместимая.
DETAILS: В Video BIOS поддержка линейного буфера кадра отсутствует, а сама карта поддерживает линейный буфер кадра.
FIX: Не известно.

ATI Radeon Xkkkk series (начиная с X700)

PRB: Не удается использовать пользовательские частоты обновления экрана, хотя карта идентифицирует себя как VBE 3.0 совместимая.
DETAILS: В Video BIOS код переключения пользовательских частот обновления экрана отсутствует. Когда Вы пытаетесь через BIOS установить эти разрешения, BIOS немедленно возвращает ошибку VBE 0x34F.
FIX: Не известно.

nVidia GeForce 5xxx/6xxx/7xxx (и более новые)

PRB: Не удается использовать пользовательские частоты обновления экрана, хотя карта идентифицирует себя как VBE 3.0 совместимая.
DETAILS: В Video BIOS код переключения пользовательских частот обновления экрана изменен. Когда Вы пытаетесь через BIOS установить эти разрешения, BIOS всегда использует разрешение по умолчанию (60 Hz).
FIX: Не известно.

nVidia GeForce 5xxx/6xxx/7xxx (и более новые)

PRB: Не удается установить разрешение выше 800x600.
DETAILS: В таблицах режимов Video BIOS режимы 1024x768 и выше отсутствуют или фильтруются. Когда Вы пытаетесь через BIOS установить эти разрешения, BIOS немедленно возвращает ошибку.
FIX: Обновите Ваш BIOS последней версией или самостоятельно сделайте патч.

Карты VESA 1.x

PRB: Когда переключаемся в полноэкранный текстовой режим, компьютер "зависает".
DETAILS: В коде Video BIOS подпрограммы установки режимов "коряво" написаны и некорректно отрабатываются в 32 бит защищённом режиме.
FIX: Не известно. В DOS/Windows9x возможно использование программного VESA-драйвера.

Разнообразные VESA карты

PRB: При вызове VBE функций, старшее слово EAX и возможно других регистров (т.е. 0x????0000) може содержать "мусор".
DETAILS: В коде Video BIOS VESA подпрограммы "коряво" написаны и некорректно отрабатывают использование 32 бит регистров.
FIX: Фильтровать старшее слово в EAX.

Карты Matrox, Trident, TsengLabs

PRB: вызове VBE функций, 16-бит R5G5B5 и R5B6G5 режимы вместе сообщаются как 16-битные. В некоторых случаях это ввди в аблуждение VESA программы - если я выбираю 16-бит режим, какую "битность" (555 или 565) использовать?
DETAILS: В коде Video BIOS VESA подпрограммы "коряво" написаны. Microsoft FRAMEBUF.DLL драйвер путается и пропускает 15-бит режимы если они сообщаются как 15-bpp. Если оба 555 и 565 режима сообщаются как 16-бит, FRAMEBUF.DLL использует первый попавшийся.
FIX: Выбирая такие режимы проверять и "битность" (15 or 16) и распределение каналов 555 или 565). Я выпукаю исправленную версию FRAMEVBE.DLL.




История проекта



Лог разработчика


[!] Важно
[+] Новое
[-] Исправлена ошибка
[*] Изменения
[?] Комментарии

Лог разработчика представлен только в английском варианте. Сорри. :)

Лицензия


Проект VBEMP NT драйвер *
Лицензия на использование и распространение

* далее по тексту - VBEMP.

  1. Все авторские права на VBEMP принадлежат только авторам - Bearwindows и Корпорации АнаПа.
  2. Любой пользователь имеет право использовать VBEMP в некоммерческих целях бесплатно.
  3. Для коммерческого использования пришлите запрос на электронную почту.
  4. VBEMP распространяется свободно, при условии того, что настоящий дистрибутив не изменен. Ни одно частное лицо или организация не может брать плату за распространение VBEMP без письменного разрешения автора. Распространение любой версии VBEMP датированной до 19/10/2007 или создание "зеркал" содержимого сайта VBEMP категорически запрещено.
  5. VBEMP ПОСТАВЛЯЕТСЯ ПО ПРИНЦИПУ "AS IS". НИКАКИХ ГАРАНТИЙ НЕ ПРИЛАГАЕТСЯ И НЕ ПРЕДУСМАТРИВАЕТСЯ. ВЫ ИСПОЛЬЗУЕТЕ ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ НА СВОЙ РИСК. АВТОР НЕ БУДЕТ ОТВЕЧАТЬ НИ ЗА КАКИЕ ПОТЕРИ ИЛИ ИСКАЖЕНИЯ ДАННЫХ, ЛЮБУЮ УПУЩЕННУЮ ВЫГОДУ В ПРОЦЕССЕ ИСПОЛЬЗОВАНИЯ ИЛИ НЕПРАВИЛЬНОГО ИСПОЛЬЗОВАНИЯ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ. УСЛОВИЯ ЛИЦЕНЗИИ, СОДЕРЖАЩИЕСЯ В ЭТОМ ДОКУМЕНТЕ МОГУТ БЫТЬ ИЗМЕНЕНЫ БЕЗ ПРЕДВАРИТЕЛЬНОГО УВЕДОМЛЕНИЯ, В БУДУЮЩИХ ИЗДАНИЯХ.
  6. Вы не можете использовать, копировать, эмулировать, создавать новые версии, сдавать в наем или аренду, продавать, изменять, декомпилировать, дизассемблировать, изучать код программы другими способами, передавать зарегистрированную программу или любые из ее составляющих, иначе, чем определено настоящим лицензионным соглашением. Любое такое нелегальное использование означает автоматическое и немедленное прекращение действия настоящего соглашения и может преследоваться по закону.
  7. Все права, не предоставленные здесь явно, сохраняются за Bearwindows и Корпорацией АнаПа.
  8. Установка и использование VBEMP означает, что Вы понимаете положения настоящего лицензионного соглашения и согласны с ними.
  9. Если почему-либо вы не согласны с этим лицензионным соглашением, вам необходимо удалить файлы дистрибутива VBEMP с ваших устройств хранения информации и прекратить использование VBEMP.

Благодарим за использование VBEMP.

Bearwindows и Корпорация АнаПа


Direct3D, DirectDraw, DirectShow, DirectSound, DirectX, Microsoft, MS-DOS, Visual C++, Win32, Win32s, Windows, Windows XP, Windows 2003 Server и Windows NT это либо зарегистрированные торговые марки или торговые марки Корпорации Майкрософт в США и/или других странах/регионах.

Имена компаний и продуктов упомянутые здесь могут быть торговыми знаками их уважаемых владельцев.

© Корпорация АнаПа 1988 – 2015. Все права защищены.

E-Mail: bearwindows_at_operamail_dot_com | Последнее обновление: 31 января 2015