Следующая программа иллюстрирует описанный алгоритм. В ней выводится вертикальная белая линия в центре экрана, после чего программа ожидает нажатия на клавишу Enter.
Uses Graph;
var
d,r,e,x: Integer;
y: Word;
b,bb: Byte;
begin
d := Detect;
InitGraph(d,r,''); {Инициируем графику} e := GraphResult;
if eOgrOk then
WriteLn(GraphErrorMsg(e) ) {Ошибка инициации} else begin
x := succ(GetMaxX) div 2; {Середина экрана} b := x mod 8; {Смещение в байте} b := 128 shi b; {Маска для битов} Port[$3CE] := 5; {Выбираем регистр режима} Port[$3CF] := 0; {Режим записи 0} Port[$3CE] := 8; {Выбираем регистр маски} Port[$3CF] := b; {Маскируем биты} Port[$3C4] := 2; {Выбираем регистр цвета} Port[$3C5] := White; {Устанавливаем цвет} for у := 0 to GetMaxY do {Цикл по строкам} begin
bb := Mem[$AOOO:Y*80+X div 8]; {Заполняем регистры? Mem[$AOOO:Y*80+X div 8] := $FF {Выводим точку} end;
ReadLn;
CloseGraph end end.
До сих пор были рассмотрены лишь простейшие возможности режима записи 0. С помощью предварительных настроек трех других управляющих регистров можно получать самые разнообразные эффекты.
Регистр специальных эффектов управляет способом взаимодействия данных, передаваемых ЦП, с содержимым буферных регистров. Назначение разрядов этого регистра показано на рис. 1.2.
Количество циклических сдвигов определяет, на сколько разрядов вправо будут циклически сдвинуты данные перед тем, как они поступят в буферные регистры. При циклическом сдвиге данных выталкиваемые справа младшие разряды переносятся в старшие (левые) разряды байта. Код операции задает способ взаимодействия данных, передаваемых ЦП, с содержимым буферных регистров: