home *** CD-ROM | disk | FTP | other *** search
- '* ------------------------------------------------------- *
- '* ADAPTER.INC *
- '* Include für Turbo Basic V.1.1 zur Feststellung des *
- '* vorhandenen Grafikadapters. Die Routinen unterscheiden *
- '* auch zwischen CGA, EGA, MCGA und VGA, selbst wenn sie *
- '* im TEXTMODUS aufgerufen wird. *
- '* Aufruf: CALL ADAPTER(KARTE$) *
- '* IF FN GraphDriver ... *
- '* (c) 1989 Jörg Braun & TOOLBOX *
- '* ------------------------------------------------------- *
- SUB Bildschirm (monitor$)
- DEF SEG = 64
- ' Wichtig, falls EGA mit Monochrommonitor vorhanden
- ' (FN Graphdriver 3 (= SCREEN 9) oder 5 (= SCREEN 10) ?)
- IF (PEEK(16) AND 48) = 48 THEN
- monitor$ = "B&W"
- ELSE
- monitor$ = "Color"
- END IF
- DEF SEG
- END SUB
- '* ------------------------------------------------------- *
- '* Kann zur Ermittlung noch nicht
- '* bekannter Grafikkarten eingesetzt werden:
-
- DEF FN Regwert
- DEF SEG = 0
- FN RegWert = PEEK(&H449)
- DEF SEG
- END DEF
- '* ------------------------------------------------------ *
- SUB Adapter(karte$, textspeicheradresse, graphikspeicheradresse, xmax, ymax)
- LOCAL biosadr
- DEF SEG = 0
- biosadr = PEEK(&H449) ' BIOS-Adresse auslesen
- DEF SEG = 0
- ON ERROR GOTO detect ' Für Illegal Function Calls
- SELECT CASE biosadr
- CASE 1 TO 6
- karte$ = "CGA"
- textspeicheradresse = &HB800
- graphikspeicheradresse = &HB800
- xmax = 639 : ymax = 199 ' Speichergröße: 16 kByte
- ' Weitere Auflösung: 320x200 Punkte
- ON ERROR GOTO Olivetti
- SCREEN 3 ' Olivetti 640x400-Pixel
- karte$ = "OLI"
- textspeicheradresse = &HB800
- graphikspeicheradresse = &HB800
- xmax = 639 : ymax = 399 ' Speichergröße: 16 kByte
- ' Weitere Auflösungen wie CGA
- EXIT SUB
-
- Egadriver:
- '* ON ERROR GOTO 0 ' Wenn nicht zurückgeschaltet
- ' wird, gibt es nur Unsinn.
- ON ERROR GOTO Detect
-
- ' Es muß wegen der CGA-Emulation von EGA-Karten
- ' weiter getestet werden:
- SCREEN 9
- ' Eine CGA-Karte kann keinen SCREEN 9 darstellen.
- ' dieser "Fehler" wird abgefangen und eine CGA-Karte
- ' somit von einer EGA im Textmodus unterschieden.
- karte$ = "EGA"
- textspeicheradresse = &HB800
- graphikspeicheradresse = &HA000
- xmax = 639 : ymax = 349 ' Speichergröße: 256 kByte
- ' Weitere Auflösungen: wie CGA, CGA mit 16 Farben
- ' Kein Fehler erkannt also EGA-Karte!
- ' Test auf MCGA-Adapter des IBM PS/2 Modell 30
- SCREEN 11
- ymax = 639 : ymax = 479 ' Hochauflösender Modus
- karte$ = "MCG" ' MCGA vorhanden !
- SCREEN 12 ' Nur mit VGA
- karte$= "VGA" ' VGA-Karte vorhanden !
- EXIT SUB ' Maximalauflösung identisch MCGA
-
- CASE 7
- karte$ = "MDA"
- textspeicheradresse = &HB000
- graphikspeicheradresse = 0
- xmax = 80 : ymax = 25 ' Speichergröße: 4 Kbyte
- ' Unterscheidung Hercules MDA-Adapter
- ' Achtung: SCREEN 2 unter Turbo Basic mit
- ' Hercules-Karte erst ab Turbo Basic V 1.1
- ' Die folgende Abfrage muß bei Turbo Basic
- ' Version 1.0 also unbedingt entfallen.
- SCREEN 2 ' Keine Grafik möglich, also Textadapter
- karte$ = "HGA" ' Es geht, also Hercules
- textspeicheradresse = &HB000
- graphikspeicheradresse = &HB000
- xmax = 719 : ymax = 347 ' Speichergröße: 64 Kbyte
- EXIT SUB
- CASE 8 TO 10
- karte$ = "JNR" ' IBM-PC-jr
- textspeicheradresse = &HB800
- graphikspeicheradresse = &HB800
- xmax = 639 : ymax = 199 ' Speichergröße: 16 kByte
- ' Spezialauflösungen:
- ' Mid-Res (320x200), Low-Res (160x200)
- EXIT SUB
-
- CASE 11,12, >15
- karte$ = "N/A" ' unbekannter Grafikadapter
- textspeicheradresse = 0
- graphikspeicheradresse = 0
- xmax = 0 : ymax = 0
- EXIT SUB
-
- CASE 13 TO 15
- karte$ = "EGA" ' EGA-Karte erkannt
- textspeicheradresse = &HB800
- graphikspeicheradresse = &HA000
- xmax = 639 : ymax = 349
- SCREEN 11 ' Überprüfung ob MCGA
- xmax = 639 : ymax = 479
- karte$ = "MCG" ' MCGA erkannt
- SCREEN 12 ' VGA-Karte ?
- karte$ = "VGA" ' VGA-Karte erkannt
- EXIT SUB
- END SELECT
-
- Olivetti:
- RESUME EgaDriver
-
- Detect:
- RESUME Erkannt
- ' Fehlerhandling korrekt beenden!
- ' Nicht schön, aber notwendig.
-
- Erkannt: ' Scheinlabel für RESUME und Ende Unterprogramm
- ' damit ein ordentlicher Ausstieg gewährleistet
- ' ist und kein offenes RESUME bleibt.
- END SUB
- '* ------------------------------------------------------- *
- DEF FN GraphDriver ' Darf nur einmal in einem Programm
- ' aufgerufen werden (Betrifft auch
- ' Unterprogramme !!!)
- CALL Adapter(karte$, a, b, c, d)
- SCREEN 0
- SELECT CASE karte$
- CASE "CGA" : FN Graphdriver = 1
- CASE "MCG" : FN Graphdriver = 2
- CASE "EGA" : IF FN Monitor THEN
- FN GraphDriver = 3
- ELSE
- FN GraphDriver = 5
- END IF
- CASE "OLI" : FN Graphdriver = 8
- CASE "VGA" : FN Graphdriver = 9
- CASE "JNR" : FN Graphdriver = 11
- CASE "MDA" : FN Graphdriver = 6
- CASE "HGA" : FN Graphdriver = 7
- CASE "N/A" : FN Graphdriver = 0
- END SELECT
- END DEF
- '* ------------------------------------------------------ *
- DEF FN Monitor
- CALL Bildschirm(m$)
- IF m$ = "Color" THEN
- FN Monitor = -1
- ELSE
- FN Monitor = 0
- END IF
- END DEF
- '* ------------------------------------------------------ *
- '* Ende von ADAPTER.INC *