Assembler - язык неограниченных возможностей

         

Внешние регистры контроллера VGA (03C2h – 03CFh)


Доступ к этим регистрам осуществляется прямым обращением к соответствующим портам ввода-вывода.

Регистр состояния ввода 0 (ISR0) — доступен для чтения из порта 03С2

бит 7: произошло прерывание обратного хода луча IRQ2

бит 6: дополнительное устройство 1 (линия FEAT1)

бит 5: дополнительное устройство 0 (линия FEAT0)

бит 4: монитор присутствует

Регистр вывода (MOR) — доступен для чтения из порта 3CCh и для записи как 3C2h

биты 7 – 6: полярность сигналов развертки — (01, 10, 11) = (350, 400, 480) линий

бит 5: 1/0 — нечетная/четная страница видеопамяти

биты 3 – 2: частота — (00, 01) = (25,175 MHz, 28,322 MHz)

бит 1: 1/0 — доступ CPU к видеопамяти разрешен/запрещен

бит 0: 1/0 — адрес порта контроллера CRT = 03D4h/03B4h

Регистр состояния ввода 1 (ISR1) — доступен для чтения из порта 03DAH

бит 3: происходит вертикальный обратный ход луча

бит 0: происходит любой обратный ход луча

Лучший момент для вывода данных в видеопамять — момент, когда электронный луч двигается от конца экрана к началу и экран не обновляется, то есть вертикальный обратный ход луча. Перед копированием в видеопамять полезно вызывать, например, следующую процедуру:

; процедура wait_retrace ; возвращает управление в начале обратного вертикального хода луча ; wait_retrace proc near push ax push dx mov dx,03DAh ; порт регистра ISR1 wait_retrace_end: in al,dx test al,1000b ; проверить бит 3 ; Если не ноль - jnz wait_retrace_end ; подождать конца ; текущего обратного хода wait_retrace_start: in al,dx test al,1000b ; а теперь подождать ; начала следующего jz wait_retrace_start pop dx pop ax ret wait_retrace endp



Содержание раздела