Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.238.195.81] |
|
Сообщ.
#1
,
|
|
|
Всех категорически приветствую!
Кто-нибудь знает, возможно ли прочитать из портов графического адаптера (VGA в частности) номер текущей строки (линии), на которой находится луч? Задача такая: вешаю обработчик на таймер (IRQ 0) и настраиваю частоту таймера как мне надо (чтобы он вызывался ≈ на каждой строке, на которой находится луч, либо раз в 5 строк). Процедура таймера совершает разные манипуляции (как банальный пример, рисует градиентную полосу с помощью настройки палитры). Зачем таймер? Чтобы параллельно можно было рисовать что-то ещё, а не тупо крутить цикл чтения порта 3DAh для трассировки луча Читаю RBIL, ничего по поводу чтения номера линии не нахожу (есть намёки, но всё не то, но мало ли?) Если такой возможности всё-таки нет, то как можно хотя бы понять, что начался новый фрейм? Причём даже при относительно низкой частоте таймера (к примеру, 1 срабатываение на 5 строк). Если проверять бит вертикального ретрейса, то при низкой частоте таймера можно проскочить этот момент (ретрейс длится довольно малое кол-во времени, буквально пару строк... и кстати говоря, окончание ретрейса не говорит о том, что луч находится в видимой области экрана). Бит горизонтального ретрейса включается на всё время отсутствия луча в области экрана. Выглядит примерно так (последовательные чтения из порта): V H - биты вертикального и горизонтального ретрейса --- 0 0 - луч в видимой области 0 1 - идёт горизонтальный ретрейс \ 0 0 - видимая область \ это повторяется 0 0 - видимая область / для каждой строки 0 0 - видимая область / 0 1 - луч вышел за область экрана (он находится снизу или сверху) 0 1 - луч за областью экрана 0 1 - луч за областью экрана 0 1 - луч за областью экрана 1 1 - вертикальный ретрейс 1 1 - вертикальный ретрейс 1 1 - вертикальный ретрейс 0 1 - луч пока ещё за областью экрана 0 1 - луч пока ещё за областью экрана 0 1 - луч пока ещё за областью экрана 0 1 - луч пока ещё за областью экрана 0 1 - луч пока ещё за областью экрана 0 0 - снова началась видимая область Что можно придумать для такого случая? Может, есть какой-то отдельный бит какого-то другого порта, с помощью которого можно узнать, что луч находится за кадром (ниже или выше)? |