Difference between revisions of "SysFn61/ru"

From KolibriOS wiki
Jump to navigation Jump to search
(Created page with ''''Функция 61 - получить параметры для прямого доступа к графике.''' Программе доступны данные графи...')
 
Line 4: Line 4:
 
собственно и отображает содержимое экрана) напрямую без вызовов
 
собственно и отображает содержимое экрана) напрямую без вызовов
 
системных функций через селектор gs:
 
системных функций через селектор gs:
        mov    eax, [gs:0]
+
 
 +
<CODE>mov    eax, [gs:0]</CODE>
 +
 
 
поместит в eax первый dword буфера, содержащий информацию о цвете
 
поместит в eax первый dword буфера, содержащий информацию о цвете
 
левой верхней точки (и, возможно, цвета нескольких следующих).
 
левой верхней точки (и, возможно, цвета нескольких следующих).
        mov    [gs:0], eax
+
 
 +
<CODE>mov    [gs:0], eax</CODE>
 +
 
 
при работе в режимах VESA c LFB
 
при работе в режимах VESA c LFB
 
установит цвет левой верхней точки
 
установит цвет левой верхней точки
Line 13: Line 17:
 
Для интерпретации данных графического экрана требуется знание
 
Для интерпретации данных графического экрана требуется знание
 
некоторых параметров, которые возвращаются этой функцией.
 
некоторых параметров, которые возвращаются этой функцией.
Замечания:
+
 
  * Параметры графики очень редко меняются при работе системы,
+
''Замечания:''
    а именно, только в случаях, когда пользователь работает
+
 
    с программой VRR.
+
* Параметры графики очень редко меняются при работе системы, а именно, только в случаях, когда пользователь работает с программой VRR.
  * При изменении видеорежима система перерисовывает все окна
+
* При изменении видеорежима система перерисовывает все окна (событие с кодом 1) и перерисовывает фон (событие 5). Эти же события происходят и в других случаях, которые встречаются значительно чаще, чем изменение видеорежима.
    (событие с кодом 1) и перерисовывает фон (событие 5).
+
* При работе в видеорежимах с LFB селектор gs указывает на собственно LFB, так что чтение/запись по gs приводят непосредственно к изменению содержимого экрана. При работе в видеорежимах без LFB gs указывает на некоторую область данных ядра, причём все функции вывода на экран добросовестно выполняют двойную работу по записи непосредственно на экран и по записи в этот буфер. В результате при чтении содержимого этого буфера результаты соответствуют содержимому экрана (с, вообще говоря, большим цветовым разрешением), а запись игнорируется. Исключением является режим 320*200, для которого в главном цикле системного потока выполняется обновление экрана в соответствии с движениями курсора мыши.
    Эти же события происходят и в других случаях,
 
    которые встречаются значительно чаще, чем изменение видеорежима.
 
  * При работе в видеорежимах с 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 = число байт, которое занимает одна строка развёртки
   (горизонтальная линия на экране)