|
Листинг 4-3 ил-
люстрирует,как избежать "снег" путем синхронизации с горизонталь-
- 4-8 -
ным сигналом возвращения с использованием младшего значащего бита
регистра состояния 6845 по адресу 03DAh.
Листинг 4-3. Прямая запись в память CGA
-----------------------------------------------------------------
; Запись приветствия на экране в начале изображения (0,0).
;Семерка, следующая за каждой буквой является атрибутом отоб-
;ражения. Значение 7 описывает нормальный режим (запись букв
;на темном фоне, с обычной интенсивностью). Предполагается
;текстовый режим CGA.
Hello DB 'H',7,'e',7,'l',7,'l',7,'o',7
HelloLength EQU $-Hello
HRetrace EQU 1
mov dx,3dah ; dx <== регистр состояния CGA
mov ax,0b800h
mov es,ax ; es <== память адаптера CGA
xor di,di ; di <== смещение памяти экрана
mov si,OFFSET Hello ; si <== строка для записи
mov cx,HelloLength/2; cx <== слова для записи
_nextbyte:
_sync: in al,dx ; al <== состояние 6845
test al,HRetrace ; горизонтальное возвращение?
jz _sync ; если z - еще нет
stosb ; запись 1 байта в HRetrace
loop _nextbyte ; ожидание следующего HRetrace
-----------------------------------------------------------------
Хотя это не очевидно, но для короткой строки эта программа
не слишком эффективна. Для перемещения больших блоков текста надо
пользоваться значительно большим интервалом вертикального возвра-
щения.
Видео-поддержка ROM-BIOS
ROM-BIOS полностью обеспечивает поддержку видео-режимов по-
средством прерывания 10h. Для множества приложений эта программа
обеспечивает достаточную производительность. Для поддержки
горячих ключей требуется соответствующая установка экранных пе-
реключателей, обеспечивающей возможности рутин ROM, особенно на
медленных 8088 процессорах. Эту проблему решают наличие расширен-
ной памяти и наличие двух режимов использования CGA. ROM-BIOS
поддерживает доступ CGA в текстовом и графическом режиме и обес-
печивает переключение режимов. Вы могли бы заметить, что побочным
эффектом переключения режимов является очищение памяти дисплея.
Подмена прерывания
Процесс изменения строки IVT (таблицы векторов прерываний)
известен как подмена прерывания.
|