|
|
0 FOR N = 0 TO 79 'для всех 80 байтов строки
130 X = PEEK(N) 'заполняем задвижки
140 POKE N+80,Y 'копируем в следующую строку
150 NEXT 'переходим к следующему сегменту
Режим записи 2:
100 'рисуем красную точку в левом верхнем углу экрана
110 DEF SEG = &HA000 'указываем на видеобуфер
120 OUT &H3CE,8 'адресуем регистр маски битов
130 OUT &H3CF,128 'маскируем все биты, кроме седьмого
140 X = PEEK(0) 'читаем текущее значение в задвижку
150 POKE 0,4 'посылаем красный цвет
Средний уровень.
EGA поддерживает стандартные графические функции BIOS. Можно
вывести точку с помощью функции CH прерывания 10H, так же как для
цветного дисплея или PCjr. При входе DX должен содержать номер
строки, а CX - номер столбца, и то и другое отсчитывается от 0.
Код цвета помещается в AL. Содержимое AX меняется при выполнении
прерывания.
;---рисуем точку по адресу 50,100
MOV AH,0CH ;функция вывода точки
MOV AL,12 ;выбираем регистр палетты 12
MOV CX,100 ;номер строки
MOV DX,50 ;номер столбца
INT 10H ;рисуем точку
Низкий уровень.
Ниже приведены примеры для трех режимов записи. Перед их ис-
пользованием необходимо установить режим дисплея, использующий
видеобуфер с адреса A000:0000. Для этого можно использовать стан-
дартную функцию BIOS, например, для установки режима D:
MOV AH,0 ;функция установки режима
MOV AL,0DH ;выбираем режим D
INT 10H ;устанавливаем режим
Не забудьте восстановить режим перед завершением программы. Кроме
того, Вам необходимо установить требуемый режим записи. Вот при-
мер установки режима записи 2:
MOV DX,3CEH ;указываем на регистр адреса
MOV AL,5 ;инедксируем регистр 5
OUT DX,AL ;посылаем индекс
INC DX ;указываем на регистр режима
MOV AL,2 ;выбираем режим записи 2
OUT DX,AL ;устанавливаем режим
И, наконец, примеры трех режимов записи:
Режим записи 0:
;---рисуем красную точку в левом верхнем углу экрана
MOV AX,0A000H ;указываем на видеобуфер
MOV ES,AX ;
MOV BX,0 ;указываем на первый байт буфера
;---маскируем все биты, кроме седьмого
MOV DX,3CEH ;указываем на адресный регистр
MOV AL,8 ;номер регистра
OUT DX,AL ;посылаем его
INC DX ;указываем на регистр данных
MOV AL,10000000B ;маска
OUT DX,AL ;посылаем данные
;---чистим текущее содержимое задвижки
MOV AL,ES:[BX] ;читаем содержимое в задвижку
MOV AL,0 ;готовимся к очистке
MOV ES:[BX],AL ;чистим задвижку
;---установка регистра маски карты для красного цвета
MOV DX,3C4H ;указываем на адресный регистр
MOV AL,2 ;индекс регистра маски карты
OUT DX,AL ;установка адреса
INC DX ;указываем на регистр данных
MOV AL,4 ;код цвета
OUT DX,AL ;посылаем код цвета
;---рисуем точку
MOV AL,0FFH ;любое значение с установленным 7 битом
MOV ES:[BX],AL ;выводим точку
Режим записи 1:
;---копируем строку в следующую строку
MOV CX,80 ;число байтов в строке
MOV BX,0 ;начинаем с 1-го байта буфера
MOV AX,0A000H ;адрес буфера
MOV ES,AX ;
NEXT_BYTE: MOV AL,ES:[BX] ;заполняем задвижку
MOV ES:[BX]+80,AL ;выводим в следующую строку
INC BX ;переходим к следующему байту
LOOP NEXT_BYTE ;
Режим записи 2:
;---рисуем красную точку в левом верхнем углу экрана
MOV AX,0A000H ;адрес буфера
MOV ES,AX ;
MOV BX,0 ;указываем на первый байт буфера
;---установка регистра маски битов
MOV DX,3CEH ;указываем на адресный регистр
MOV AL,8 ;регистр маски битов
OUT DX,AL ;адресуем регистр
INC DX ;указываем на регистр данных
MOV AL,10000000B ;маскируем все биты, кроме 7-го
OUT DX,AL ;посылаем данные
;---рисуем красную точку
MOV AL,ES:[BX] ;заполняем регистры задвижки
MOV AL,4 ;красный цвет
MOV ES:[BX],AL ;рисуем точку
4.4.4 Определение цвета точки экрана.
Для графических режимов цветного адаптора или PCjr определение
цвета точки на низком уровне состоит в обращении процедуры вывода
точки: программа читает из видеобуфера и выделяет интересующие
биты. Однако для EGA этот метод непригоден, поскольку в режимах
DH - 10H каждому адресу памяти соответствует два или четыре бай-
та. EGA имеет два режима чтения, чтобы преодолеть эту трудность.
Имейте ввиду, что для PCjr и EGA, после того, как Вы определили
код цвета точки, необходимо еще проверить установку текущего ре-
гистра палетты для этого кода, чтобы определить какой цвет ему
приписан.
Любой язык программирования имеет доступ к двум режимам чтения
EGA. В режиме 0 возвращается байт, содержащийся во всех четырех
битовых плоскостях, по указанному адресу. Режим 1 ищет указанный
код цвета и возвращает байт, в котором бит установлен в 1, когда
соответствующая точка имеет данный цвет. Бит 3 регистра режима
определяет какой режим чтения установлен (0 = режим 0). Доступ к
этому регистру о
|