SysFn61/ru: Difference between revisions
(Created page with ''''Функция 61 - получить параметры для прямого доступа к графике.''' Программе доступны данные графи...') |
No edit summary |
||
Line 4: | Line 4: | ||
собственно и отображает содержимое экрана) напрямую без вызовов | собственно и отображает содержимое экрана) напрямую без вызовов | ||
системных функций через селектор gs: | системных функций через селектор gs: | ||
<CODE>mov eax, [gs:0]</CODE> | |||
поместит в eax первый dword буфера, содержащий информацию о цвете | поместит в eax первый dword буфера, содержащий информацию о цвете | ||
левой верхней точки (и, возможно, цвета нескольких следующих). | левой верхней точки (и, возможно, цвета нескольких следующих). | ||
<CODE>mov [gs:0], eax</CODE> | |||
при работе в режимах VESA c LFB | при работе в режимах VESA c LFB | ||
установит цвет левой верхней точки | установит цвет левой верхней точки | ||
Line 13: | Line 17: | ||
Для интерпретации данных графического экрана требуется знание | Для интерпретации данных графического экрана требуется знание | ||
некоторых параметров, которые возвращаются этой функцией. | некоторых параметров, которые возвращаются этой функцией. | ||
Замечания: | |||
''Замечания:'' | |||
* Параметры графики очень редко меняются при работе системы, а именно, только в случаях, когда пользователь работает с программой VRR. | |||
* При изменении видеорежима система перерисовывает все окна (событие с кодом 1) и перерисовывает фон (событие 5). Эти же события происходят и в других случаях, которые встречаются значительно чаще, чем изменение видеорежима. | |||
* При работе в видеорежимах с LFB селектор gs указывает на собственно LFB, так что чтение/запись по gs приводят непосредственно к изменению содержимого экрана. При работе в видеорежимах без LFB gs указывает на некоторую область данных ядра, причём все функции вывода на экран добросовестно выполняют двойную работу по записи непосредственно на экран и по записи в этот буфер. В результате при чтении содержимого этого буфера результаты соответствуют содержимому экрана (с, вообще говоря, большим цветовым разрешением), а запись игнорируется. Исключением является режим 320*200, для которого в главном цикле системного потока выполняется обновление экрана в соответствии с движениями курсора мыши. | |||
=== Разрешение экрана === | === Разрешение экрана === | ||
Параметры: | |||
''Параметры:'' | |||
* eax = 61 - номер функции | * eax = 61 - номер функции | ||
* ebx = 1 - номер подфункции | * ebx = 1 - номер подфункции |
Revision as of 15:40, 10 April 2010
Функция 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 = число байт, которое занимает одна строка развёртки (горизонтальная линия на экране)