home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / dtx9302 / svga / testmode.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-02-18  |  5.6 KB  |  149 lines

  1. (*========================================================*)
  2. (*                TESTMODE.PAS Version 2.0                *)
  3. (*            (C) 1993 Jörg Braun & DMV-Verlag            *)
  4. (* ====================================================== *)
  5. (* Das Programm schaltet alle Bildschirmmodi durch und    *)
  6. (* schreibt die erfolgreich initialisierten Modi in eine  *)
  7. (* Datei. Hierbei wird noch getestet, ob es sich bei dem  *)
  8. (* erweiterten Modus um Text oder Grafik handelt. Die     *)     
  9. (* Grafikauflösung wird ebenfalls ermittelt.              *)
  10. (*             Compiler: Turbo Pascal ab V. 5.0           *)
  11. (*========================================================*)
  12. {$I xgraph.h} {$M 16384,0,0}
  13.  
  14. PROGRAM TestModesOfGrapicsCard;
  15.  
  16. USES Crt, DOS, Id;
  17.  
  18. TYPE
  19.   Str3      = STRING[3];
  20.  
  21. VAR
  22.   ModeID   : BYTE ABSOLUTE $0040:$0049; (* Mode-ID-Byte   *)
  23.   Columns  : BYTE ABSOLUTE $0040:$004A; (* BS-Spalten     *)
  24.   Lines    : BYTE ABSOLUTE $0040:$0084; (* BS-Zeilen >=EGA*)
  25.   TextHeight:BYTE ABSOLUTE $0040:$0085; (* Zeichenhöhe    *)
  26.   ColorAdr : CHAR ABSOLUTE $B800:$0000; (* 1. Zchn. Farbe *)
  27.   MonoAdr  : CHAR ABSOLUTE $B000:$0000; (* 1. Zchn. Mono  *)
  28.   InitMode,                             (* zurückschalten *)
  29.   i        : BYTE;                      (* Zählervariabl. *)
  30.   FName    : NameStr;                   (* Dateiname      *)
  31.   f        : Text;                      (* Dateivariable  *)
  32.   Regs     : Registers;                 
  33.   ch       : CHAR;                      (* Tastenabfrage  *)
  34.   PStr     : ComStr;                    (* Kommandozeile  *)
  35.   p        : WORD;                      (* Warteschleife  *)
  36.   test     : INTEGER;                   (* VAL-Testvar.   *)
  37.  
  38.  
  39. FUNCTION Hex(InByte: BYTE): Str3;
  40. CONST
  41.   HexCh : ARRAY[0..15] OF CHAR = '0123456789ABCDEF';
  42. BEGIN
  43.   Hex[0] := #3;                    (* brutal aber schnell *)
  44.   Hex[1] := '$';                   (* Hexadezimal-Kennung *)
  45.   Hex[2] := HexCh[InByte DIV $10]; (* Zehner-Stelle       *)
  46.   Hex[3] := HexCh[InByte MOD $10]; (* Einer-Stelle        *)
  47. END;
  48.  
  49. BEGIN
  50.   test := -1;
  51.   IF ParamCount > 0 THEN BEGIN
  52.     PStr := ParamStr(1);
  53.     Val(PStr, p, test);
  54.   END;
  55.   IF test < 1 THEN p := 100;
  56.   InitMode := ModeID;
  57.   Identify(FName);                 (* in der Datei ID.INC *)
  58.   WriteLn(#13#10'Es werden alle von der Karte erlaubten ',
  59.           'Bildschirmmodi ermittelt');
  60.   WriteLn('und anschließend in die Datei ',FName,
  61.           '.DAT geschrieben.');
  62.   Write('Weiter --> <Enter>, Abbruch: <ESC> ');
  63.   REPEAT
  64.     ch := ReadKey;
  65.   UNTIL ch IN [#13, #27];
  66.   IF ch = #27 THEN
  67.     WriteLn(^J^M'Programm wurde abgebrochen.')
  68.   ELSE BEGIN
  69.     Assign(f, FName + '.DAT');
  70.     Append(f);
  71.     IF IoResult <> 0 THEN Rewrite(f);
  72.     WriteLn(f, 'Grafikmodi der ', FName, '-Karte:');
  73.     FOR i := $0 TO $FF DO BEGIN
  74.       IF i IN [$08..$0C] THEN BEGIN
  75.          WriteLn(f, ^I, i, 'd,', ^I, Hex(i),
  76.                     ^I'-------- reserviert ----------');
  77.       END ELSE BEGIN
  78.         Regs.AX := i;
  79.         Intr($10, Regs);
  80.         IF ModeID = i THEN BEGIN
  81.           WriteLn(Hex(i), '      ', i);
  82.           Delay(p);
  83.           Write(f, ^I, ModeID, 'd,', ^I, Hex(ModeID));
  84.           IF i < $14 THEN BEGIN
  85.             Write(f, ^I);
  86.             CASE i OF
  87.               0: WriteLn(f,
  88.                         ' 40 x 25 CGA  Text    16 Graust.');
  89.               1: WriteLn(f,
  90.                         ' 40 x 25 CGA  Text    16 Farben');
  91.               2: WriteLn(f,
  92.                         ' 80 x 25 CGA  Text    16 Graust.');
  93.               3: WriteLn(f,
  94.                         ' 80 x 25 CGA  Text    16 Farben');
  95.               4: WriteLn(f,
  96.                         ' 320x200 CGA  Grafik   4 Graust.');
  97.               5: WriteLn(f,
  98.                         ' 320x200 CGA  Grafik   4 Farben');
  99.               6: WriteLn(f,
  100.                         ' 640x200 CGA  Grafik   2 Farben');
  101.               7: WriteLn(f,
  102.                         ' 720x348 MDA/Hercules Monochrom');
  103.              $D: WriteLn(f,
  104.                         ' 320x200 EGA  Grafik  16 Farben');
  105.              $E: WriteLn(f,
  106.                         ' 640x200 EGA  Grafik  16 Farben');
  107.              $F: WriteLn(f,
  108.                         ' 640x350 EGA  Grafik  Monochrom');
  109.             $10: WriteLn(f,
  110.                         ' 640x350 EGA  Grafik  16 Farben');
  111.             $11: WriteLn(f,
  112.                         ' 640x480 MCGA Grafik   2 Farben');
  113.             $12: WriteLn(f,
  114.                         ' 640x480 VGA  Grafik  16 Farben');
  115.             $13: WriteLn(f,
  116.                         ' 320x200 MCGA Grafik 256 Farben');
  117.             END;
  118.           END ELSE IF i = $6A THEN
  119.             WriteLn(f, ^I, 8 * Columns: 4,
  120.                       'x', 6 * Columns: 3,
  121.                        ' VESA-Grafik  16 Farben')
  122.           ELSE BEGIN
  123.             IF ColorAdr = '$' THEN
  124.               WriteLn(f, ^I, Columns: 4,
  125.                         'x', Succ(Lines): 3,
  126.                         ' SVGA Text    16 Farben')
  127.             ELSE IF MonoAdr = '$' THEN
  128.               WriteLn(f, Columns: 4,
  129.                          'x ?? SVGA Text    Monochrom')
  130.             ELSE (* Grafikmodus ! *) 
  131.               WriteLn(f, ^I, 8 * Columns: 4,
  132.                         'x??? SVGA Grafik',
  133.                          ' ??? Farben')
  134.             END;
  135.         END;
  136.         Regs.AL := InitMode;
  137.         Regs.AH := 0;
  138.         Intr($10, Regs);
  139.       END;
  140.     END;
  141.     Close(f);
  142.     WriteLn('GrafikModi als Datei ', FName, '.DAT',
  143.             ' gespeichert');
  144.   END;
  145. END.
  146.  
  147. (*========================================================*)
  148. (*                 Ende von TESTMODE.PAS                  *)
  149.