[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
>have a vga that I want to use the above mentioned interrupt with. The
>problem is that I can't seem to get the interrupt to do its thing. The
>program seems to go through it with no effect at all. My question is how
>do I get the results?
The following procedures may help you. VGA has 8 font banks
(0..7). Load your font using LoadFont, then activate that bank with
SelectFont. Selecting two different font banks will let you display
two fonts simultaneously -- intensity bit selects secondary font (you
loose high intensity colors).
}
procedure SelectFont(Prim, Sec: byte);
var Tmp: byte;
begin
Tmp := (Prim and $3) or (Prim shl 2 and $10)
or (Sec shl 2 and $C) or (Sec shl 3 and $20);
asm
mov bl, Tmp
mov ax, $1103
int $10
end;
if (Prim and $7) = (Sec and $7) then
Tmp := $F
else
Tmp := $7;
asm
mov bh, Tmp
mov bl, $12
mov ax, $1000
int $10
end;
end;
procedure LoadFont(var Buf; Bank, Height: byte; First, Last: char); assembler;
asm
mov dl, First
xor dh, dh
mov cl, Last
sub cl, dl
mov ch, dh
inc cx
mov bl, Bank
mov bh, Height
les bp, Buf
mov ax, $1100
int $10
end;
var Buf: array [1..4096] of byte;
begin
{ Load 256 8x16 characters in buffer }
LoadFont(Buf, 0, 16, #0, #255);
SelectFont(0, 0);
end.
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]