числом 5 выбирается и регистр режимов записи. На самом деле этим кодом указывается регистр режимов, младшие 2 бита которого определяют режим записи, а третий разряд — режим чтения. Для выбора битовой плоскости нужно указать регистр карты, послав 4 в порт $ЗСЕ, а затем послать номер плоскости — число от 0 до 3 — в порт $3CF.

В следующей программе иллюстрируется техника использования режима чтения 0 и попутно — использование спецэффектов в режиме записи 0. Вначале программа в режиме записи 0 выводит байт со значением 128, указав на необходимость его сдвига на 7 разрядов вправо. В результате вместо самого левого пиксела будет зажжен белым цветом восьмой по счету пиксел верхней строки. Затем устанавливается красный фоновый цвет и выводится байт со значением 1. В результате седьмой по счету пиксел (сдвиг на 7 разрядов сохраняется!) станет белым, в то время как остальные пикселы — красными. В заключение программа четырежды читает видеопамять по одному и тому же адресу, каждый раз указывая очередной код битовой плоскости, и преобразует прочитанное в коды цветов первых восьми пиксел самой верхней строки. В результате на экран будет выведено:

444444 15 4

Uses Graph;

var

d,r,e: Integer;

k,j,c: Byte;

a: array [ 0..3] of Byte ;

begin

d := Detect;

InitGraph(d,r,'') ;

e := GraphResult;

if eOgrOk then

WriteLn(GraphErrorMsg(e))

else begin

Port[$3CE] := 5 {Регистр режима} Port[$3CF] := 0 {Режим записи 0} Port[$3CE] := 8 {Регистр маски} Port[$3CF] := $FF; {Разрешаем все биты} Port[$3C4] := 2 {Регистр цвета} Port[$3C5] := White; {Устанавливаем цвет} Port[$3CE] := 3 {Регистр спецэффектов} Port[$3CF] := 7 {Сместить на 1 пиксел вправо} Мет[$АООО:0] := 128; {Выводим пиксел со сдвигом} ReadLn; {Ждем нажатия Enter} Port[$3CE] := 0; {Регистр фонового цвета} Port[$3CF] := Red; {Красный фон} Port[$3CE] := 1; {Регистр разрешения установки} Port[$3CF] := $4; {Разрешить красный} Мет[$АООО:0] := 1; {Выводим пиксел со сдвигом}