home *** CD-ROM | disk | FTP | other *** search
- {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.