SysFn61/ru

From KolibriOS wiki
Revision as of 15:39, 10 April 2010 by Kogemyaka (talk | contribs) (Created page with ''''Функция 61 - получить параметры для прямого доступа к графике.''' Программе доступны данные графи...')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Функция 61 - получить параметры для прямого доступа к графике.

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

       mov     eax, [gs:0]

поместит в eax первый dword буфера, содержащий информацию о цвете левой верхней точки (и, возможно, цвета нескольких следующих).

       mov     [gs:0], eax

при работе в режимах VESA c LFB установит цвет левой верхней точки (и возможно, цвета нескольких следующих). Для интерпретации данных графического экрана требуется знание некоторых параметров, которые возвращаются этой функцией. Замечания:

 * Параметры графики очень редко меняются при работе системы,
   а именно, только в случаях, когда пользователь работает
   с программой VRR.
 * При изменении видеорежима система перерисовывает все окна
   (событие с кодом 1) и перерисовывает фон (событие 5).
   Эти же события происходят и в других случаях,
   которые встречаются значительно чаще, чем изменение видеорежима.
 * При работе в видеорежимах с LFB селектор gs указывает на
   собственно LFB, так что чтение/запись по gs приводят
   непосредственно к изменению содержимого экрана. При работе в
   видеорежимах без LFB gs указывает на некоторую область данных
   ядра, причём все функции вывода на экран добросовестно выполняют
   двойную работу по записи непосредственно на экран и по записи
   в этот буфер. В результате при чтении содержимого этого буфера
   результаты соответствуют содержимому экрана
   (с, вообще говоря, большим цветовым разрешением),
   а запись игнорируется.
   Исключением является режим 320*200, для которого в главном цикле
   системного потока выполняется обновление экрана в соответствии
   с движениями курсора мыши.

Разрешение экрана

Параметры:

 * eax = 61 - номер функции
 * ebx = 1 - номер подфункции

Возвращаемое значение:

 * eax = [разрешение по оси x]*65536 + [разрешение по оси y]

Замечания:

 * Можно использовать функцию 14 с учётом того, что она возвращает
   размеры на 1 меньше. Это полностью эквивалентный способ.

Число бит на пиксель

Параметры:

 * eax = 61 - номер функции
 * ebx = 2 - номер подфункции

Возвращаемое значение:

 * eax = число бит на пиксель (24 или 32)

Число байт на строку

Параметры:

 * eax = 61 - номер функции
 * ebx = 3 - номер подфункции

Возвращаемое значение:

 * eax = число байт, которое занимает одна строка развёртки
   (горизонтальная линия на экране)