Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал
Страница 36. Определение цвета точки экрана. Часть 2


   Средний уровень.


   Функция 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      ;если да, то ищем у какой точки

 
« Предыдущая статья   Следующая статья »