[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{
From: Robert Palmqvist <rpt@c3consult.comm.se>
> need to know how to display a high intensity background character set in
> text mode. I remeber seeing something somewhere about sacrificing the
> blink attribute to get it, but I cant for the life of me remember how.
This is one way of doing it ... Hope that it will help you out
}
Uses DOS;
Function GotCGA: boolean;
var Monitor: byte absolute $0040:$0010;
begin
GotCGA:= true;
if Monitor and 48 = 48 then
GotCGA:= false
else
if Monitor and 32 = 32 then
GotCGA:= true;
end;
Function GotEGA: boolean;
var Regs: registers;
begin
with Regs do
begin
AX:= $1200;
BX:= $0010;
CX:= $FFFF;
Intr($10, Regs);
GotEGA:= (CX <> $FFFF);
end;
end;
Function GotVGA: boolean;
var Regs: registers;
begin
with Regs do
begin
AX:= $1A00;
Intr($10,Regs);
GotVGA:= (AL = $1A);
end;
end;
Procedure SetBlink(On : boolean);
{Enable text mode attribute blinking if On is True}
const
PortVal: array[0..4] of byte = ($0C, $08, $0D, $09, $09);
var
PortNum: word;
Index, PVal: byte;
Mode: byte absolute $0000:$0449;
begin
if GotEGA then
begin
inline(
$8A/$5E/<On/ {mov bl,[bp+<On]}
$B8/$03/$10/ {mov ax,$1003}
$CD/$10); {int $10}
exit;
end
else
if GotCGA then
begin
PortNum:= $3D8;
case Mode of
0..3: Index := Mode;
else
exit;
end;
end
else
begin
PortNum:= $3B8;
Index:= 4;
end;
PVal:= PortVal[Index];
if On then
PVal:= PVal or $20;
Port[PortNum]:= PVal;
end;
Procedure BlinkOff;
begin
SetBlink(false);
end;
Procedure BlinkOn;
begin
SetBlink(true);
end;
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]