Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Вывод прямоугольника [TurboPascal]


Автор: oshilan 1.6.2011, 12:02
Есть работающая программа, выводящая зелёный прямоугольник на экран в режиме записи 2. Просьба переделать программу, чтоб она работала в режиме записи 1. Замена двойки на единицу не помогает smile
Код
uses
  crt,dos;
const
  clr=2; {зеленый}
  x1=160;
  y1=120;
  x2=480;
  y2=240; {высота одной горизонтальной линии}
var
  reg:registers;
  i,j,o,q:word;
begin
  clrscr;
  reg.ah:=0;
  reg.al:=$10;
  intr($10,reg);
  for i:=x1 to x2 do {- - - -}
    for j:=y1 to y2 do begin {| | | |}
      port[$3CE]:=$05;
      port[$3CF]:=$02; {режим записи 2}
      o:=j*80+i div 8;
      q:=mem[$A000:o];
      mem[$A000:o]:=clr;
    end;
  readln;
end.


Зараннее спасибо!  ;)

Автор: oshilan 3.6.2011, 07:20
Код
uses
  dos;
const
  clr=2;
  x1=16;
  y1=16;
  x2=32;
  y2=32;
var
  reg:registers;
  x,y:word;
  ghost:byte;
begin
  reg.al:=$10;
  intr($10,reg);
  port[$3ce]:=5;
  port[$3cf]:=2;
  mem[$a000:0]:=clr; {во 2-м (прямом) режиме рисуем зелёную точку}
  port[$3ce]:=5;
  port[$3cf]:=1; {активируем "любимый" 1-й режим}
  ghost:=mem[$a000:0]; {делаем чтение в никуда из видеопамяти пикселя, которым надо зарисовать прямоугольник (в регистры-защёлки занесли зелёный цвет)}
  for x:=x1 to x2 do
    for y:=y1 to y2 do
      mem[$a000:y*80+x div 8]:=clr; {заполняем память зелёным, хотя цвет не имеет значения, т.к. считывание идёт с регистров-защёлок)}
  port[$3ce]:=5;
  port[$3cf]:=2;
  mem[$a000:0]:=0; {во 2-м (прямом) режиме зарисовунм зелёную точку чёрным}
  readln;
end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)