Компьютер - электронное устройство, которое не заменит человека до тех пор, пока не научится смеяться шуткам начальника и сваливать свои собственные ошибки на соседний компьютер.




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). Доступ к этому регистру о