SysFn61/ru

From KolibriOS wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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

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

mov eax, [gs:0]

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

mov [gs:0], eax

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

Замечания:

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

Подфункция 1 - разрешение экрана

Параметры:

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

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

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

Замечания:

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

Константы для регистров:

eax - SF_GET_GRAPHICAL_PARAMS (61)
ebx - SSF_SCREEN_SIZE (1)

Подфункция 2 - число бит на пиксель

Параметры:

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

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

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

Константы для регистров:

eax - SF_GET_GRAPHICAL_PARAMS (61)
ebx - SSF_BITS_PER_PIXEL (2)

Подфункция 3 - число байт на строку

Параметры:

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

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

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

Константы для регистров:

eax - SF_GET_GRAPHICAL_PARAMS (61)
ebx - SSF_BYTES_PER_LINE (3)