[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]
{CD> Can someone tell me how to get 320x200x256 screen mode in Turbo
CD>Pascal 5.5.
Yes.
}
Program DemoMode13;
Uses Dos,Crt;
Var
LM : Word;
CD : Word;
{
; Enable 320*200*256, return True if successful, otherwise False
;
; Reasons For False return : Already in mode 13, mode 13 unsupported.
}
Function Enable13:Boolean;
Var
Regs : Registers;
begin
LM:=LastMode;
Regs.AH:=$0F;
intr($10,Regs);
if Regs.AL<>$13 then begin
Regs.AH:=$03;
intr($10,Regs);
CD:=Regs.CX;
Regs.AX:=$0013;
intr($10,Regs);
if (Regs.Flags and 1)=0 then begin
Enable13:=True;
end else begin
Enable13:=False;
end;
end else begin
Enable13:=False;
end;
end;
{
; Exit 310*200*256 mode, True if successful, False if not
;
; Reasons For False return : not in mode 13.
}
Function Release13:Boolean;
Var
Regs : Registers;
begin
Regs.AH:=$0F;
intr($10,Regs);
if Regs.AL=$13 then begin
TextMode(LM);
Regs.AH:=$01;
Regs.CX:=CD;
intr($10,Regs);
Release13:=True;
end else begin
Release13:=False;
end;
end;
{
; Plot a pixel in 320*200*256 mode.
;
; This may appear quite obvious at first, but take a closer look if you think
; it is Really simple. if you read your Turbo Pascal book, though, you are
; required to only ponder the usage of `Absolute' For a moment.
}
Procedure DrawPixel(X,Y:Word;Colour:Byte);
Var
Screen : Array [0..319,0..199] of Byte Absolute $A000:$0000;
begin
Screen[Y,X]:=Colour;
end;
{
; Main Program. Draws points in four corners in random colours, reads a like
; of Text (odd, but it displays it!) then returns to Text mode and quits.
}
begin
Writeln;
CheckBreak:=False;
CheckSnow:=False;
DirectVideo:=False;
if Enable13 then begin
Randomize;
DrawPixel(0,0,Random(255));
DrawPixel(319,0,Random(255));
DrawPixel(0,199,Random(255));
DrawPixel(319,199,Random(255));
GotoXY(1,2);
Writeln('Type something then press [Enter]');
readln;
if (not enable13) then begin
ClrScr;
end else begin
Writeln;
Writeln('Error Exiting mode 13.');
Writeln('Enter MODE CO80 or MODE MONO to');
Writeln('restore your screen to Text mode.');
end;
end else begin
Writeln('Error invoking mode 13');
end;
Writeln;
end.
[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]