OSFree VideoSubsystem

Материал из Русский WINE
Перейти к: навигация, поиск

Видеоподсистема OS/2

Оно же VIO API.

Family API (режим OS/2)

Видеоподсистема OS/2 (сокращённо VIO) предназначена для обеспечения вывода в текстовом и графическом режимах (только полноэкранные сессии).

Оригинальная VIO поддерживает 43 функции, которые в основном являются улучшением API Video BIOS INT 10H. Функции значительно богаче по сравнению с Video BIOS. Она поддерживает логический видеобуфер (Logical Video Buffer), который позволяет выводить данные в фоновых сессиях, когда экран недоступен. Временная видеосессия позволяет построить систему уведомлений о сообщениях для обработки ошибок и исключений.

Большинство функций (41 функция) могут быть заменены пользовательскими функциями с помощью Alternate Video System. Alternate Video System может обработать функцию и затем вернуть управление вызывающему или передать управление ниже, в Base Video System.

Вы можете зарегистрировать не все, а только некоторые функции Alternate Video Subsystem и использовать Base Video Subsystem для остальных функций. Некоторые функции VIO поддерживаются в Dual-mode приложениях через Family API.

Под DOS функции проще, но мощные. Многие инструменты командной строки являются Dual Mode приложениями, как и многие продукты Microsoft на базе MS-DOS также являются dual-mode приложениями. VIO также обеспечивает ограниченный набор поддержки графических режимов. VIO изначально 16-битная и реализована начиная с первой версии OS/2.

 +-------------------------------+
 |          Приложение           |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |           VIOCALLS            |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |   Alternate Video Subsystem   |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Base Video Subsystem     |
 +-------------------------------+

Видеоподсистема OS/2 размещена в VIOCALLS.DLL. Вызываемая функция VIO передаёт управление внутренней функции маршрутизации VIO, которая, в зависимости от зарегистрированных замен функций, направляет вызов в Base Video Subsystem (BVSCALLS.DLL) или в зарегистрированный Alternate Video Subsystem.

В псевдокоде это выглядит так:

Application calls VioGetAnsi in VIOCALLS
VioGetAnsi calls VioRoute
if AVS registered then
  VioRoute calls AVS VioGetAnsi
  if AVS VioGetAnsi requires to call BVS then
    VioRouter calls BVS VioGetAnsi
else
  VioRouter calls BVS VioGetAnsi
Return to application

OS/2 1.1 представила Program Manager, и VIO была расширена для поддержки оконных текстовых сессий OS/2. Это расширенное VIO было названо Advanced VIO.

Такой маршрут характерен для OS/2 1.0 и 1.1. OS/2 1.2 включает дополнительную функциональность. Base Video Subsystem теперь использует Base Video Handlers для доступа к оборудованию. Также был добавлен хук Global Video Subsystem. Base Video Handler — это своего рода уровень абстракции видеооборудования. Global Video Subsystem позволяет добавлять хуки уведомлений после вызова VioRoute.

 +-------------------------------+
 |          Приложение           |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |           VIOCALLS            |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |   Alternate Video Subsystem   |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Base Video Subsystem     |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Base Video Handlers      |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Base Video Subsystem     |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |    Global Video Subsystem     |
 +-------------------------------+

В псевдокоде это выглядит так:

Application calls VioGetAnsi in VIOCALLS
VioGetAnsi calls VioRoute
if AVS registered then
  VioRoute calls AVS VioGetAnsi
  if AVS VioGetAnsi requires to call BVS then
    VioRouter calls BVS VioGetAnsi
else
  VioRouter calls BVS VioGetAnsi
If GVS registered then
  VioRouter calls GVS VioGetAnsi
Return to application

В OS/2 2.0 и более поздних версиях VIO по-прежнему 16-битная. В поздних версиях OS/2 (3.x?) фактический код видеоподсистемы и Base Video Subsystem был перемещён в DOSCALLS.DLL (см. рис.). VIOCALLS и BVSCALLS являются форвардерами в DOSCALLS.

Поскольку это не является частью официального дистрибутива OS/2, было разработано три независимые версии 32-к-16-битным wrapper-подсистем (см. рис.). EXMWRAP.DLL был частью eComstation 1.0 и более поздних выпусков.

          [16/32-битное приложение] [32-битное приложение]
                 |                         |
                 |             +-----------+-----------+
                 |             |           |           |
                 |             v           v           v
                 |        +----------+ +----------+ +----------+
                 |        | EMXWRAP  | | OS2CHAR2 | | CON3216  | 
                 |        +----------+ +----------+ +----------+
                 |          |           |           |
                 |          +-----------+-----------+
                 |          |
                 v          v
 +-------------------------------+
 |           VIOCALLS            |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |           DOSCALLS            |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |   Alternate Video Subsystem   |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |      Base Video Subsystem     |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |           DOSCALLS            |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |      Base Video Handlers      |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |      Base Video Subsystem     |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                            |
                            v
 +-------------------------------+
 |    Global Video Subsystem     |
 +-------------------------------+
Application calls VioGetAnsi in VIOCALLS
VIOCALLS forwards to DOSCALLS
VioGetAnsi calls VioRoute
if AVS registered then
  VioRoute calls AVS VioGetAnsi
  if AVS VioGetAnsi requires to call BVS then
    VioRouter calls BVS VioGetAnsi
    BVSCALLS forwards to DOSCALLS
else
  VioRouter calls BVS VioGetAnsi
  BVSCALLS forwards to DOSCALLS
If GVS registered then
  VioRouter calls GVS VioGetAnsi
Return to application

osFree пытается объединить все подходы и обеспечить следующий поток вызовов

          [16/32-битное приложение]                     [32-битное приложение]
                 |                                             |
                 |                                 +-----------+-----------+
                 |                                 |           |           |
                 |                                 |           v           v
                 |                                 |     +----------+ +----------+
                 |                                 |     | OS2CHAR2 | | CON3216  | 
                 |                                 |     +----------+ +----------+
                 |                                 |           |           |
                 |                                 |           |           |
                 |                                 |           |           |
                 v                                 |           +-----------+
 +-------------------------------+                 |                 |
 |           VIOCALLS            |                 |                 |
 +-------------------------------+                 |                 |
                 |                                 |                 |
                 v                                 v                 v
 +-------------------------------+     +-------------------------------+
 |           DOSCALLS            |---->|            EMXWRAP            |
 +-------------------------------+     +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |          SUB32                |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |      Маршрутизатор VIO        |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |   Alternate Video Subsystem   |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |      Маршрутизатор VIO        |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |      Base Video Subsystem     |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |           DOSCALLS            |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |      Base Video Handlers      |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |      Base Video Subsystem     |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |      Маршрутизатор VIO        |
                                       +-------------------------------+
                                                   |
                                                   v
                                       +-------------------------------+
                                       |    Global Video Subsystem     |
                                       +-------------------------------+


Family API (режим DOS)

Под DOS оригинальные приложения IBM Family API или JdeBP's Family API используют следующий маршрут вызовов

 +-------------------------------+
 |          Приложение           |
 +-------------------------------+
                |
                v
 +---------------------------------+
 | API.LIB / FAPI.LIB / FAMAPI.LIB |
 +---------------------------------+

Под HX DOS Extender OS/2 Emulation приложения Family API используют следующий маршрут

 +-------------------------------+
 |          Приложение           |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |           VIOCALLS            |
 +-------------------------------+

Под DOS osFree Family API поддерживает следующий маршрут

 +-------------------------------+
 |          Приложение           |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |           VIOCALLS            |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |   Alternate Video Subsystem   |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Маршрутизатор VIO        |
 +-------------------------------+
                |
                v
 +-------------------------------+
 |      Base Video Subsystem     |
 +-------------------------------+
OSFree
Search.png
osFree Архитектура • План работ • Компоненты • Используемые проекты • Экраны • FreePM • L4 • Скриншоты
Загрузчик [ Последовательность загрузки: поток выполнения • изменение карты памяти ] • Загрузочный сектор • L4Ka::Kickstart
Personalities Win16 personality • MVM/DOS/Win16 personality
Разработка Получение исходных кодов • Сборка • Отладка • Отправка отчетов
API TPCrt • FamilyAPI • Win16API • VIO API • MVM API
Сообщество IRC
OS/2 Presentation Manager • IFS • Петиции к IBM