home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 08 / heimwerk / adapter.inc < prev   
Encoding:
Text File  |  1989-05-31  |  6.0 KB  |  169 lines

  1. '* ------------------------------------------------------- *
  2. '*                     ADAPTER.INC                         *
  3. '*   Include für Turbo Basic V.1.1 zur Feststellung des    *
  4. '*  vorhandenen Grafikadapters. Die Routinen unterscheiden *
  5. '*  auch zwischen CGA, EGA, MCGA und VGA, selbst wenn sie  *
  6. '*  im TEXTMODUS aufgerufen wird.                          *
  7. '*       Aufruf: CALL ADAPTER(KARTE$)                      *
  8. '*               IF FN GraphDriver ...                     *
  9. '*           (c) 1989 Jörg Braun  &  TOOLBOX               *
  10. '* ------------------------------------------------------- *
  11. SUB Bildschirm (monitor$)
  12.   DEF SEG = 64
  13.     ' Wichtig, falls EGA mit Monochrommonitor vorhanden
  14.     ' (FN Graphdriver 3 (= SCREEN 9) oder 5 (= SCREEN 10) ?)
  15.   IF (PEEK(16) AND 48) = 48 THEN
  16.     monitor$ = "B&W"
  17.   ELSE
  18.     monitor$ = "Color"
  19.   END IF
  20.   DEF SEG
  21. END SUB
  22. '* ------------------------------------------------------- *
  23. '* Kann zur Ermittlung noch nicht
  24. '* bekannter Grafikkarten eingesetzt werden:
  25.  
  26. DEF FN Regwert
  27.   DEF SEG = 0
  28.   FN RegWert = PEEK(&H449)
  29.   DEF SEG
  30. END DEF
  31. '* ------------------------------------------------------ *
  32. SUB Adapter(karte$, textspeicheradresse, graphikspeicheradresse, xmax, ymax)
  33.   LOCAL biosadr
  34.   DEF SEG = 0
  35.   biosadr = PEEK(&H449)         ' BIOS-Adresse auslesen
  36.   DEF SEG = 0
  37.   ON ERROR GOTO detect          ' Für Illegal Function Calls
  38.   SELECT CASE biosadr
  39.   CASE 1 TO 6
  40.     karte$ = "CGA"
  41.     textspeicheradresse = &HB800
  42.     graphikspeicheradresse = &HB800
  43.     xmax = 639  :  ymax = 199      ' Speichergröße: 16 kByte
  44.                          ' Weitere Auflösung: 320x200 Punkte
  45.     ON ERROR GOTO Olivetti
  46.     SCREEN 3             ' Olivetti 640x400-Pixel
  47.     karte$ = "OLI"
  48.     textspeicheradresse = &HB800
  49.     graphikspeicheradresse = &HB800
  50.     xmax = 639  :  ymax = 399      ' Speichergröße: 16 kByte
  51.                                ' Weitere Auflösungen wie CGA
  52.     EXIT SUB
  53.  
  54. Egadriver:
  55. '*  ON ERROR GOTO 0       ' Wenn nicht zurückgeschaltet
  56.                           ' wird, gibt es nur Unsinn.
  57.     ON ERROR GOTO Detect
  58.  
  59.        ' Es muß wegen der CGA-Emulation von EGA-Karten
  60.        ' weiter getestet werden:
  61.     SCREEN 9
  62.        ' Eine CGA-Karte kann keinen SCREEN 9 darstellen.
  63.        ' dieser "Fehler" wird abgefangen und eine CGA-Karte
  64.        ' somit von einer EGA im Textmodus unterschieden.
  65.     karte$ = "EGA"
  66.     textspeicheradresse = &HB800
  67.     graphikspeicheradresse = &HA000
  68.     xmax = 639  :  ymax = 349     ' Speichergröße: 256 kByte
  69.        ' Weitere Auflösungen: wie CGA, CGA mit 16 Farben
  70.        ' Kein Fehler erkannt also EGA-Karte!
  71.        ' Test auf MCGA-Adapter des IBM PS/2 Modell 30
  72.     SCREEN 11
  73.     ymax = 639  :  ymax = 479        ' Hochauflösender Modus
  74.     karte$ = "MCG"         ' MCGA vorhanden !
  75.     SCREEN 12              ' Nur mit VGA
  76.     karte$= "VGA"          ' VGA-Karte vorhanden !
  77.     EXIT SUB               ' Maximalauflösung identisch MCGA
  78.  
  79.   CASE 7
  80.     karte$ = "MDA"
  81.     textspeicheradresse = &HB000
  82.     graphikspeicheradresse = 0
  83.     xmax = 80  :  ymax = 25         ' Speichergröße: 4 Kbyte
  84.                   ' Unterscheidung Hercules MDA-Adapter
  85.                   ' Achtung: SCREEN 2 unter Turbo Basic mit
  86.                   ' Hercules-Karte erst ab Turbo Basic V 1.1
  87.                   ' Die folgende Abfrage muß bei Turbo Basic
  88.                   ' Version 1.0 also unbedingt entfallen.
  89.     SCREEN 2      ' Keine Grafik möglich, also Textadapter
  90.     karte$ = "HGA"                 ' Es geht, also Hercules
  91.     textspeicheradresse = &HB000
  92.     graphikspeicheradresse = &HB000
  93.     xmax = 719  :  ymax = 347      ' Speichergröße: 64 Kbyte
  94.     EXIT SUB
  95.   CASE 8 TO 10
  96.     karte$ = "JNR"                 ' IBM-PC-jr
  97.     textspeicheradresse = &HB800
  98.     graphikspeicheradresse = &HB800
  99.     xmax = 639  :  ymax = 199      ' Speichergröße: 16 kByte
  100.                       ' Spezialauflösungen:
  101.                       ' Mid-Res (320x200), Low-Res (160x200)
  102.       EXIT SUB
  103.  
  104.     CASE 11,12, >15
  105.       karte$ = "N/A"             ' unbekannter Grafikadapter
  106.       textspeicheradresse = 0
  107.       graphikspeicheradresse = 0
  108.       xmax = 0  :  ymax = 0
  109.       EXIT SUB
  110.  
  111.     CASE 13 TO 15
  112.       karte$ = "EGA"                     ' EGA-Karte erkannt
  113.       textspeicheradresse = &HB800
  114.       graphikspeicheradresse = &HA000
  115.       xmax = 639  :  ymax = 349
  116.       SCREEN 11                        ' Überprüfung ob MCGA
  117.       xmax = 639  :  ymax = 479
  118.       karte$ = "MCG"                   ' MCGA erkannt
  119.       SCREEN 12                        ' VGA-Karte ?
  120.       karte$ = "VGA"                   ' VGA-Karte erkannt
  121.       EXIT SUB
  122.   END SELECT
  123.  
  124. Olivetti:
  125.   RESUME EgaDriver
  126.  
  127. Detect:
  128.   RESUME Erkannt
  129.              ' Fehlerhandling korrekt beenden!
  130.              ' Nicht schön, aber notwendig.
  131.  
  132. Erkannt:     ' Scheinlabel für RESUME und Ende Unterprogramm
  133.              ' damit ein ordentlicher Ausstieg gewährleistet
  134.              ' ist und kein offenes RESUME bleibt.
  135. END SUB
  136. '* ------------------------------------------------------- *
  137. DEF FN GraphDriver ' Darf nur einmal in einem Programm
  138.                     ' aufgerufen werden  (Betrifft auch
  139.                     ' Unterprogramme !!!)
  140.   CALL Adapter(karte$, a, b, c, d)
  141.   SCREEN 0
  142.   SELECT CASE karte$
  143.     CASE "CGA" : FN Graphdriver = 1
  144.     CASE "MCG" : FN Graphdriver = 2
  145.     CASE "EGA" : IF FN Monitor THEN
  146.                    FN GraphDriver = 3
  147.                  ELSE
  148.                    FN GraphDriver = 5
  149.                  END IF
  150.     CASE "OLI" : FN Graphdriver =  8
  151.     CASE "VGA" : FN Graphdriver =  9
  152.     CASE "JNR" : FN Graphdriver = 11
  153.     CASE "MDA" : FN Graphdriver =  6
  154.     CASE "HGA" : FN Graphdriver =  7
  155.     CASE "N/A" : FN Graphdriver =  0
  156.   END SELECT
  157. END DEF
  158. '* ------------------------------------------------------ *
  159. DEF FN Monitor
  160.   CALL Bildschirm(m$)
  161.   IF m$ = "Color" THEN
  162.     FN Monitor = -1
  163.   ELSE
  164.     FN Monitor = 0
  165.   END IF
  166. END DEF
  167. '* ------------------------------------------------------ *
  168. '*                Ende von ADAPTER.INC                    *
  169.