home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 01 / praxis / scrtog.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-09-01  |  2.9 KB  |  83 lines

  1. (* ------------------------------------------------------ *)
  2. (*                    SCRTOG.PAS                          *)
  3. (*     Routine zum Umschalten der Hercules-Grafikkarte    *)
  4. (*                                                        *)
  5. (*          Status: Monitor off                = 0        *)
  6. (*                          on  im Textmodus   = 1        *)
  7. (*                          on  im Grafikmodus = 2        *)
  8. (*                                                        *)
  9. (*       (c) 1988 by Chr. Diederichsen und TOOLBOX        *)
  10. (* ------------------------------------------------------ *)
  11.  
  12. {$M 1024,0,0}               (* minimaler Stack, kein Heap *)
  13.  
  14. PROGRAM ScreenToggle;
  15.  
  16. USES  Crt, Dos;
  17.  
  18. TYPE  CrtControl = ARRAY[0..11] OF Byte;
  19.  
  20. CONST
  21.   NewIntr : Byte = 5;       (* Print Screen *)
  22.  
  23.   TTable  : CrtControl = ($61,$50,$52,$0F,$19,$06,$19,$19,
  24.                           $02,$0D,$0B,$0C);
  25.   GTable  : CrtControl = ($35,$2d,$2e,$07,$5b,$02,$57,$57,
  26.                           $02,$03,$00,$00);
  27.  
  28. VAR
  29.   OldIntVec : pointer;
  30.   status    : 0..2;
  31.  
  32. PROCEDURE ToggleScr(Flags,CS,IP,AX,BX,CX,DX,
  33.                                      SI,DI,DS,ES,BP : Word);
  34. INTERRUPT;
  35.  
  36. VAR i : Byte;
  37.  
  38. BEGIN                (* CRT-Controller 6845 programmieren *)
  39.   IF status = 0 THEN BEGIN
  40.     status := 1;
  41.     Port[$03B8] := $20;         (* Textmodus, Monitor aus *)
  42.     FOR i := 0 TO 11 DO BEGIN   (* 12 Register gibt es    *)
  43.       Port[$03B4] := i;         (* indirekte Adressierung *)
  44.       Port[$03B5] := TTable[i];
  45.     END;
  46.     Port[$03B8] := $28;         (* Monitor im Textmodus   *)
  47.   END ELSE                      (* einschalten            *)
  48.     IF status = 1 THEN BEGIN
  49.       status := 2;
  50.       Port[$03B8] := 2;         (* Grafikmodus,Monitor aus*)
  51.       FOR i := 0 TO 11 DO BEGIN
  52.         Port[$03B4] := i;
  53.         Port[$03B5] := GTable[i];
  54.       END;
  55.       Port[$03B8] := $A;        (* Grafikmodus,Monitor ein*)
  56.     END ELSE BEGIN              (* Seite 0                *)
  57.       status := 0;
  58.       Port[$03B8] := $20;       (* Textmodus programmieren*)
  59.       FOR i := 0 TO 11 DO BEGIN (* Monitor bleibt aus     *)
  60.         Port[$03B4] := i;
  61.         Port[$03B5] := TTable[i];
  62.       END;
  63.       Port[$03B8] := $20;
  64.     END;
  65.   Exit;                 (* Ende des residenten Interrupts *)
  66. END;
  67.  
  68.  
  69. (* ------------------------------------------------------ *)
  70. (* Installieren der Interrupt-Routine beim ersten Aufruf, *)
  71. (* Bildschirm ist eingeschaltet und im Textmodus          *)
  72.  
  73. BEGIN
  74.   status := 1;
  75.   WriteLn('ToggleScr Vers. 1.0 ist installiert.');
  76.   WriteLn('Aktivieren mit <Shift>+<Print-Screen>');
  77.   GetIntVec(NewIntr, OldIntVec);
  78.   SetIntVec(NewIntr, Addr(ToggleScr));
  79.   Keep(0);                                         (* TSR *)
  80. END.
  81.  
  82. (* ------------------------------------------------------ *)
  83. (*                 Ende von SCRTOG.PAS                    *)