[Back to CRT SWAG index] [Back to Main SWAG index] [Original]
Unit CrtSeg;
{
CRTSEG.TPU - Written by Tom Donnelly and placed into the public domain.
Allow the video segment address in CRT.TPU
to be overridden with a different address.
Particularly useful under DesqView, to make
Turbo Pascal programs more DesqView compliant.
Example: SetCrtSeg(Desqview_video_buffer);
This unit has only been tested under Turbo Pascal 6. It may or may not
work under different TP versions. It is distributed "as is" without any
claims or warranties expressed or implied. Use at your own risk.
If anyone finds a problem with this code, I'd appreciate hearing about it.
Tom Donnelly - 73200,1323
07/23/92 - Version 1.0 - Initial public-domain release.
}
Interface
Uses
CRT;
Procedure SetCrtSeg(iSeg: Word);
Implementation
Const
CRTSEGOFFSET = $5D3; {Offset in CRT.TPU to CRT buff seg value}
OldCrtSeg : Word
= $B800;
Procedure SetCrtSeg;
Var
CrtSegAddr : ^Word; {Pointer to CRT buffer segment literal}
CrtNoOps : ^Byte; {Pointer to area to no-op}
Begin
CrtSegAddr := Ptr(Seg(AssignCrt),CRTSEGOFFSET);
CrtNoOps := Ptr(Seg(AssignCrt),CRTSEGOFFSET+2);
If CrtSegAddr^<>OldCrtSeg Then
Begin
Writeln('CRTSEG.TPU: Could not find CRT segment address hook');
If ReadKey<>#0 Then;
End
Else
Begin
OldCrtSeg :=CrtSegAddr^;
CrtSegAddr^:=iSeg; {Plug in new CRT buffer segment}
FillChar(CrtNoOps^,9,$90); {No-op the remainder of the code}
End;
End;
End.
[Back to CRT SWAG index] [Back to Main SWAG index] [Original]