Страница 36 из 47
Средний уровень. Функция D прерывания 10H возвращает код цвета указанной точки. BIOS имеющийся на плате EGA обеспечивает, что эта функция рабо- тает в любом режиме дисплея. Надо поместить номер строки (отсчи- тываемый от 0) в DX, а номер столбца (также отсчитываемый от 0) - в CX. Результат возвращается в AL.
;---определяем код палетты точки 100,200 MOV AH,0DH ;номер функции чтения цвета точки MOV DX,100 ;номер строки MOV CX,200 ;номер столбца INT 10H ;теперь код цвета в AL
Низкий уровень. Для графических режимов цветного адаптера и PCjr надо просто обратить процесс прямого отображения в память, которым устанавли- вается цвет точки, как показано в [4.4.2]. Можно испоьзовать приведенный там пример, который надо завершить следующим кодом:
;---изменение битов (место для вставки изменений) MOV AH,ES:[BX] ;берем байт из нужной позиции ROR AH,CL ;сдвигаем 2 нужных бита вниз AND AH,00000011B ;выключаем остальные биты RET ;теперь в AH - код палетты
Для режимов EGA от DH до 10H надо пользоваться регистрами, которые были описаны выше. В следующем примере режим чтения 0 испоьзуется для чтения битовой плоскости 2 по адресу A000:0012.
;---установка режима чтения MOV DX,3CEH ;индексный регистр MOV AL,5 ;сначала адресуем регистр режима OUT DX,AL ;посылаем индекс INC DX ;указываем на сам регистр MOV AL,0 ;устанавливаем режим чтения 0 OUT DX,AL ; ;---установка битовой плоскости, которую будем читать DEC DX ;назад к индексному регистру MOV AL,4 ;адрес регистра выбора карты OUT DX,AL ;посылаем индекс INC DX ;указываем на сам регистр MOV AL,2 ;запрос битовой плоскости 2 OUT DX,AL ;посылаем значение ;---чтение битовой плоскости MOV AX,0A000H ;адрес видеобуфера MOV ES,AX ; MOV BX,12 ;смещение в буфере MOV AL,ES:[BX] ;читаем из битовой плоскости 2
И, наконец, пример поиска кодов цвета 0010 и 1010 с использова- нием режима чтения 1:
;---установка режима чтения MOV DX,3CEH ;регистр индекса MOV AL,5 ;адресуем сначала регистр режима OUT DX,AL ;посылаем индекс INC DX ;указываем на сам регистр MOV AL,8 ;устанавливаем бит 3 для режима 1 OUT DX,AL ;устанавливаем режим
;---установка регистра сравнения цветов DEC DX ;возвращаемся к индексному регистру MOV AL,2 ;адрес регистра сравнения цветов OUT DX,AL ;посылаем индекс INC DX ;указываем на сам регистр MOV AL,0010B ;код цвета OUT DX,AL ;посылаем код ;---установка регистра безразличия цветов DEC DX ;возвращаемся к индексному регистру MOV AL,7 ;адрес регистра безразличия цветов OUT DX,AL ;посылаем индекс INC DX ;указываем на сам регистр MOV AL,0111B ;принимаем коды 1010 или 0010 OUT DX,AL ;посылаем данные ;---поиск цвета MOV AX,0A000H ;адрес видеобуфера MOV ES,AX ; MOV BX,12 ;смещение в буфере MOV AL,ES:[BX] ;читаем позицию буфера CMP AL,0 ;установлены биты? JNZ FOUND_IT ;если да, то ищем у какой точки
|