home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* SCRTOG.PAS *)
- (* Routine zum Umschalten der Hercules-Grafikkarte *)
- (* *)
- (* Status: Monitor off = 0 *)
- (* on im Textmodus = 1 *)
- (* on im Grafikmodus = 2 *)
- (* *)
- (* (c) 1988 by Chr. Diederichsen und TOOLBOX *)
- (* ------------------------------------------------------ *)
-
- {$M 1024,0,0} (* minimaler Stack, kein Heap *)
-
- PROGRAM ScreenToggle;
-
- USES Crt, Dos;
-
- TYPE CrtControl = ARRAY[0..11] OF Byte;
-
- CONST
- NewIntr : Byte = 5; (* Print Screen *)
-
- TTable : CrtControl = ($61,$50,$52,$0F,$19,$06,$19,$19,
- $02,$0D,$0B,$0C);
- GTable : CrtControl = ($35,$2d,$2e,$07,$5b,$02,$57,$57,
- $02,$03,$00,$00);
-
- VAR
- OldIntVec : pointer;
- status : 0..2;
-
- PROCEDURE ToggleScr(Flags,CS,IP,AX,BX,CX,DX,
- SI,DI,DS,ES,BP : Word);
- INTERRUPT;
-
- VAR i : Byte;
-
- BEGIN (* CRT-Controller 6845 programmieren *)
- IF status = 0 THEN BEGIN
- status := 1;
- Port[$03B8] := $20; (* Textmodus, Monitor aus *)
- FOR i := 0 TO 11 DO BEGIN (* 12 Register gibt es *)
- Port[$03B4] := i; (* indirekte Adressierung *)
- Port[$03B5] := TTable[i];
- END;
- Port[$03B8] := $28; (* Monitor im Textmodus *)
- END ELSE (* einschalten *)
- IF status = 1 THEN BEGIN
- status := 2;
- Port[$03B8] := 2; (* Grafikmodus,Monitor aus*)
- FOR i := 0 TO 11 DO BEGIN
- Port[$03B4] := i;
- Port[$03B5] := GTable[i];
- END;
- Port[$03B8] := $A; (* Grafikmodus,Monitor ein*)
- END ELSE BEGIN (* Seite 0 *)
- status := 0;
- Port[$03B8] := $20; (* Textmodus programmieren*)
- FOR i := 0 TO 11 DO BEGIN (* Monitor bleibt aus *)
- Port[$03B4] := i;
- Port[$03B5] := TTable[i];
- END;
- Port[$03B8] := $20;
- END;
- Exit; (* Ende des residenten Interrupts *)
- END;
-
-
- (* ------------------------------------------------------ *)
- (* Installieren der Interrupt-Routine beim ersten Aufruf, *)
- (* Bildschirm ist eingeschaltet und im Textmodus *)
-
- BEGIN
- status := 1;
- WriteLn('ToggleScr Vers. 1.0 ist installiert.');
- WriteLn('Aktivieren mit <Shift>+<Print-Screen>');
- GetIntVec(NewIntr, OldIntVec);
- SetIntVec(NewIntr, Addr(ToggleScr));
- Keep(0); (* TSR *)
- END.
-
- (* ------------------------------------------------------ *)
- (* Ende von SCRTOG.PAS *)