{**********************************************************************}
{ Display 512 different characters at a time }
{**********************************************************************}
procedure print_512_chars;
const
MONO = 5;
VMONO = 7;
ON = 1;
OFF = 0;
var
buffer : array[0..255,0..31] of char; { Buffer for char gen }
i,j : integer;
c : char;
begin
{--- Set default text mode }
i := get_display_type;
if i = MONO then set_mode(7)
else if i = VMONO then set_mode (7)
else set_mode(3);
{--- Download a second 256 character set }
read_char_gen(seg(buffer),ofs(buffer)); {Read old character generator}
for i := 0 to 254 do begin {Create a new char set }
for j := 0 to 3 do begin {from the old by slewing}
buffer[i,j] := char(integer(buffer[i,j]) shr 1);
buffer[i,j+10] := char(integer(buffer[i,j+10]) shl 1);
end;
end; { Download new char gen }
write_char_gen(seg(buffer),ofs(buffer), 512, 256);
enable_second_set; { Enable 512 char set }
for i := 0 to 255 do begin { Display chars 0 - 255 }
write_attribute(i div 64, i mod 64, 0, 7);
write_char(char(i), i div 64, i mod 64);
end;
for i := 0 to 255 do begin { Display chars 256-512 }
write_attribute(4 + i div 64, i mod 64, 0,15);
write_char(char(i), 4 + i div 64, i mod 64);
end;
{--- Wait for <Enter> and then disable the second character set}
c := readkey;
disable_second_set;
end;