{ After several tricks to redefine Characters in EGA and VGA in this echo, here is one you can use in CGA mode 4,5,6. You will find an Unit, and a test Program. } Unit graftabl; { released into the public domain author : Emmanuel ROUSSIN FIDO : 2:320/200.21 Email : roussin@frmug.fr.mugnet.org for using redefined Characters (128 to 255) in CGA mode 4,5 and 6 Without using GRAFTABL.EXE } Interface Type Tcaractere8 = Array [1..8] of Byte; Tgraftabl = Array [128..255] of Tcaractere8; { if you want to use only one font, define it in this Unit, For example : Const the_only_font : Tgraftabl = ( (x,x,x,x,x,x,x,x), . . (x,x,x,x,x,x,x,x), (x,x,x,x,x,x,x,x) ); Or you can in your main Program : Var my_font : Tgraftabl; and define it after } Var seg_graftabl, ofs_graftabl : Word; {internal Procedures} Procedure get_graftabl(Var segment, offset : Word); Procedure put_graftabl(segment, offset : Word); {Procedures to use in your Programs} Procedure init_graftabl; Procedure use_graftabl(Var aray : Tgraftabl); Procedure end_graftabl; Implementation Procedure get_graftabl(Var segment, offset : Word); begin segment := memw[0 : $1F * 4 + 2]; offset := memw[0 : $1f * 4]; end; Procedure put_graftabl(segment, offset : Word); begin memw[0 : $1f * 4 + 2] := segment; memw[0 : $1f * 4] := offset end; Procedure init_graftabl; { interrupt 1F is a Pointer to bitmaps For high 128 Chars (8 Bytes per Character) defined by GRAFTABL.EXE we save this initial Pointer } begin get_graftabl(seg_graftabl, ofs_graftabl); end; Procedure use_graftabl(Var aray : Tgraftabl); { we define a new Pointer : the address of an Array } begin put_graftabl(seg(aray),ofs(aray)); end; Procedure end_graftabl; { we restore the original Pointer } begin put_graftabl(seg_graftabl,ofs_graftabl); end; end. Program test; Uses Graph3, Crt, graftabl; Var font : Tgraftabl; i,j,tmp : Byte; rid : Char; begin hires; init_graftabl; fillChar(font,sizeof(font),0); use_graftabl(font); {$F000:$FA6E is the ROM address where the Characters 0 to 127 are defined} For i := 1 to 26 do For j := 0 to 7 do begin tmp := mem[$F000 : $FA6E + 97 * 8 + (i - 1) * 8 + j] xor $FF; tmp := tmp xor $FF; tmp := tmp or (tmp div 2); font[i + 127, j + 1] := tmp; { Char 128 to 153 are redefined } end; For i := 1 to 26 do For j := 0 to 7 do begin tmp := mem[$F000 : $FA6E + 97 * 8 + (i - 1) * 8 + j] or $55; font[i + 153, j + 1 ] := tmp; { Char 154 to 181 are redefined } end; Writeln('the normal Characters ($61 to $7A) :'); Writeln; For i := $61 to $7A do Write(chr(i)); Writeln; Writeln; Writeln('now, these same Characters, but thick :'); Writeln; For i := 128 to 153 do Write(chr(i)); Writeln; Writeln; Writeln('the same Characters, but greyed :'); Writeln; For i := 154 to 181 do Write(chr(i)); rid := ReadKey; end_graftabl; Textmode(co80); end.