home *** CD-ROM | disk | FTP | other *** search
- (*========================================================*)
- (* TESTMODE.PAS Version 2.0 *)
- (* (C) 1993 Jörg Braun & DMV-Verlag *)
- (* ====================================================== *)
- (* Das Programm schaltet alle Bildschirmmodi durch und *)
- (* schreibt die erfolgreich initialisierten Modi in eine *)
- (* Datei. Hierbei wird noch getestet, ob es sich bei dem *)
- (* erweiterten Modus um Text oder Grafik handelt. Die *)
- (* Grafikauflösung wird ebenfalls ermittelt. *)
- (* Compiler: Turbo Pascal ab V. 5.0 *)
- (*========================================================*)
- {$I xgraph.h} {$M 16384,0,0}
-
- PROGRAM TestModesOfGrapicsCard;
-
- USES Crt, DOS, Id;
-
- TYPE
- Str3 = STRING[3];
-
- VAR
- ModeID : BYTE ABSOLUTE $0040:$0049; (* Mode-ID-Byte *)
- Columns : BYTE ABSOLUTE $0040:$004A; (* BS-Spalten *)
- Lines : BYTE ABSOLUTE $0040:$0084; (* BS-Zeilen >=EGA*)
- TextHeight:BYTE ABSOLUTE $0040:$0085; (* Zeichenhöhe *)
- ColorAdr : CHAR ABSOLUTE $B800:$0000; (* 1. Zchn. Farbe *)
- MonoAdr : CHAR ABSOLUTE $B000:$0000; (* 1. Zchn. Mono *)
- InitMode, (* zurückschalten *)
- i : BYTE; (* Zählervariabl. *)
- FName : NameStr; (* Dateiname *)
- f : Text; (* Dateivariable *)
- Regs : Registers;
- ch : CHAR; (* Tastenabfrage *)
- PStr : ComStr; (* Kommandozeile *)
- p : WORD; (* Warteschleife *)
- test : INTEGER; (* VAL-Testvar. *)
-
-
- FUNCTION Hex(InByte: BYTE): Str3;
- CONST
- HexCh : ARRAY[0..15] OF CHAR = '0123456789ABCDEF';
- BEGIN
- Hex[0] := #3; (* brutal aber schnell *)
- Hex[1] := '$'; (* Hexadezimal-Kennung *)
- Hex[2] := HexCh[InByte DIV $10]; (* Zehner-Stelle *)
- Hex[3] := HexCh[InByte MOD $10]; (* Einer-Stelle *)
- END;
-
- BEGIN
- test := -1;
- IF ParamCount > 0 THEN BEGIN
- PStr := ParamStr(1);
- Val(PStr, p, test);
- END;
- IF test < 1 THEN p := 100;
- InitMode := ModeID;
- Identify(FName); (* in der Datei ID.INC *)
- WriteLn(#13#10'Es werden alle von der Karte erlaubten ',
- 'Bildschirmmodi ermittelt');
- WriteLn('und anschließend in die Datei ',FName,
- '.DAT geschrieben.');
- Write('Weiter --> <Enter>, Abbruch: <ESC> ');
- REPEAT
- ch := ReadKey;
- UNTIL ch IN [#13, #27];
- IF ch = #27 THEN
- WriteLn(^J^M'Programm wurde abgebrochen.')
- ELSE BEGIN
- Assign(f, FName + '.DAT');
- Append(f);
- IF IoResult <> 0 THEN Rewrite(f);
- WriteLn(f, 'Grafikmodi der ', FName, '-Karte:');
- FOR i := $0 TO $FF DO BEGIN
- IF i IN [$08..$0C] THEN BEGIN
- WriteLn(f, ^I, i, 'd,', ^I, Hex(i),
- ^I'-------- reserviert ----------');
- END ELSE BEGIN
- Regs.AX := i;
- Intr($10, Regs);
- IF ModeID = i THEN BEGIN
- WriteLn(Hex(i), ' ', i);
- Delay(p);
- Write(f, ^I, ModeID, 'd,', ^I, Hex(ModeID));
- IF i < $14 THEN BEGIN
- Write(f, ^I);
- CASE i OF
- 0: WriteLn(f,
- ' 40 x 25 CGA Text 16 Graust.');
- 1: WriteLn(f,
- ' 40 x 25 CGA Text 16 Farben');
- 2: WriteLn(f,
- ' 80 x 25 CGA Text 16 Graust.');
- 3: WriteLn(f,
- ' 80 x 25 CGA Text 16 Farben');
- 4: WriteLn(f,
- ' 320x200 CGA Grafik 4 Graust.');
- 5: WriteLn(f,
- ' 320x200 CGA Grafik 4 Farben');
- 6: WriteLn(f,
- ' 640x200 CGA Grafik 2 Farben');
- 7: WriteLn(f,
- ' 720x348 MDA/Hercules Monochrom');
- $D: WriteLn(f,
- ' 320x200 EGA Grafik 16 Farben');
- $E: WriteLn(f,
- ' 640x200 EGA Grafik 16 Farben');
- $F: WriteLn(f,
- ' 640x350 EGA Grafik Monochrom');
- $10: WriteLn(f,
- ' 640x350 EGA Grafik 16 Farben');
- $11: WriteLn(f,
- ' 640x480 MCGA Grafik 2 Farben');
- $12: WriteLn(f,
- ' 640x480 VGA Grafik 16 Farben');
- $13: WriteLn(f,
- ' 320x200 MCGA Grafik 256 Farben');
- END;
- END ELSE IF i = $6A THEN
- WriteLn(f, ^I, 8 * Columns: 4,
- 'x', 6 * Columns: 3,
- ' VESA-Grafik 16 Farben')
- ELSE BEGIN
- IF ColorAdr = '$' THEN
- WriteLn(f, ^I, Columns: 4,
- 'x', Succ(Lines): 3,
- ' SVGA Text 16 Farben')
- ELSE IF MonoAdr = '$' THEN
- WriteLn(f, Columns: 4,
- 'x ?? SVGA Text Monochrom')
- ELSE (* Grafikmodus ! *)
- WriteLn(f, ^I, 8 * Columns: 4,
- 'x??? SVGA Grafik',
- ' ??? Farben')
- END;
- END;
- Regs.AL := InitMode;
- Regs.AH := 0;
- Intr($10, Regs);
- END;
- END;
- Close(f);
- WriteLn('GrafikModi als Datei ', FName, '.DAT',
- ' gespeichert');
- END;
- END.
-
- (*========================================================*)
- (* Ende von TESTMODE.PAS *)
-