home *** CD-ROM | disk | FTP | other *** search
- program Lo_Res_Graphics;
-
- type
- scr = array[1..16000] of byte;
- color = array[0..7] of byte;
-
- const
- blue :color = (1,16,9,24,18,51,26,110);
- green :color = (2,37,31,10,39,102,85,115);
- cyan :color = (17,32,25,52,94,86,116,125);
- red :color = (4,58,62,12,66,126,131,132);
- magneta :color = (5,19,73,59,71,27,78,130);
- brown :color = (6,81,83,41,87,68,128,133);
- gray :color = (0,8,100,7,92,107,90,135);
-
- var
- i,j,k,l : byte;
- stop : char;
- screen : scr absolute $B800:$0000;
- color_table : array[0..135,0..1] of byte;
-
- Procedure Set_Lo_Res;
- type
- reg = array[0..11] of byte;
- const
- modereg = $03D8;
- colorreg = $03D9;
- crtreg = $03D4;
- crtdata = $03D5;
- regdata: reg = (113,80,90,10,127,6,100,112,2,1,32,0);
- var
- i : byte;
- j : integer;
- modesave : byte absolute $0000:$0465;
- colorsave : byte absolute $0000:$0466;
- begin
- modesave:=0;
- port[modereg]:=0;
- colorsave:=0;
- port[colorreg]:=0;
- for i:=0 to 11 do
- begin
- port[crtreg]:=i;
- port[crtdata]:=regdata[i];
- end;
- for j:=1 to 16000 do
- begin
- screen[j]:=177;
- j:=j+1;
- screen[j]:=0;
- end;
- modesave:=9;
- port[modereg]:=9;
- end;
-
- procedure Set_Text_Mode;
- type
- reg = array[0..11] of byte;
- const
- crtreg = $03D4;
- crtdata = $03D5;
- regdata: reg = (113,80,90,10,31,6,25,28,2,7,6,7);
- var
- i : byte;
- begin
- for i:=0 to 11 do
- begin
- port[crtreg]:=1;
- port[crtdata]:=regdata[i];
- end;
- textmode(3);
- clrscr;
- end;
-
- procedure Clear_Screen;
- var
- i : integer;
- begin
- for i:=1 to 16000 do
- begin
- i:=i+1;
- screen[i]:=0;
- end;
- end;
-
- Procedure Set_Colors;
- var
- i,c,fg,bg : byte;
- begin
- c:=0;
- for i:=0 to 255 do
- begin
- bg:=i div 16;
- fg:=i mod 16;
- if bg<=fg then
- begin
- color_table[c,0]:=bg;
- color_table[c,1]:=fg;
- c:=c+1;
- end;
- end;
- end;
-
- procedure Point(x,y,c:integer);
- var
- bg,fg : integer;
- begin
- bg:=color_table[c,0];
- fg:=color_table[c,1];
- screen[2*(x+1)+160*y]:=fg+bg*16;
- end;
-
- procedure Display_All_Colors;
- var
- i,j,k,l : integer;
- begin
- for i:=0 to 16 do
- for j:=0 to 7 do
- for k:=0 to 3 do
- for l:=0 to 11 do
- point(i*4+k,j*12+l,8*i+j);
- end;
-
- procedure Display_Palette;
- var
- i,j,k : integer;
- begin
- for i:=0 to 7 do
- for j:=0 to 3 do
- for k:=0 to 11 do
- begin
- point(4*i+j,k,blue[i]);
- point(4*i+j,k+12,green[i]);
- point(4*i+j,k+24,cyan[i]);
- point(4*i+j,k+36,red[i]);
- point(4*i+j,k+48,magneta[i]);
- point(4*i+j,k+60,brown[i]);
- point(4*i+j,k+72,gray[i]);
- end;
- end;
-
- begin
- Set_Lo_Res;
- Set_Colors;
- Display_All_Colors;
- read(Kbd,stop);
- Clear_Screen;
- Display_Palette;
- read(kbd,stop);
- clear_screen;
- Set_Text_Mode;
- end.
-