mikrocontroller.net

Forum: PC-Programmierung auf standard vga karte pruefen ohne bios?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich wuerde gerne unter DOS pruefen ob eine VGA graphikkarte vorhanden 
ist

Da ich den code spaeter im Protected Mode laufen lassen will geht es 
leider nicht ueber die VGA BIOS interrupts

Modus zwischen Text und Grafik klappt per IO Ports ohne Int 10h 
problemlos

Jemand eine Idee?

von Gerd E. (robberknight)


Bewertung
-2 lesenswert
nicht lesenswert
Du bist Dir sicher daß Du Dich nicht um ~25 Jahre in der Zeit vertan 
hast?

Wenn ja, dann könntest Du evtl. probieren ob die Kombination Daten und 
Adressregister wie erwartet funktioniert, Du also die Daten aus den 
verschiedenen indizierten Registern auslesen kannst. Wenn keine 
VGA-Grafikkarte vorhanden ist, bekommst Du da keine passenden Daten 
zurück weil niemand auf die Ports reagiert.

von michael_ (Gast)


Bewertung
-2 lesenswert
nicht lesenswert
Ohne angeschlossenem Monitor sieht man sowieso nichts.

von oszi40 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
cppbert schrieb:
> eine Idee?

Buch über VGA-Programmierung suchen? ISBN-13: 978-3893197255

von oszi40 (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
michael_ schrieb:
> Ohne angeschlossenem Monitor sieht man sowieso nichts.

Speicherbereich prüfen?

von c-hater (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
cppbert schrieb:

> Ich wuerde gerne unter DOS pruefen ob eine VGA graphikkarte vorhanden
> ist
>
> Da ich den code spaeter im Protected Mode laufen lassen will geht es
> leider nicht ueber die VGA BIOS interrupts

ACPI benutzen->DSDT.

von cppbert (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Gerd E. schrieb:
> Du bist Dir sicher daß Du Dich nicht um ~25 Jahre in der Zeit
> vertan
> hast?
>
> Wenn ja, dann könntest Du evtl. probieren ob die Kombination Daten und
> Adressregister wie erwartet funktioniert, Du also die Daten aus den
> verschiedenen indizierten Registern auslesen kannst. Wenn keine
> VGA-Grafikkarte vorhanden ist, bekommst Du da keine passenden Daten
> zurück weil niemand auf die Ports reagiert.

Programmiere gerade ein ganz ganz ganz kleines Betriebssystem und da 
sind wohl die standard vga sachen das einzige auf das ich wirklich bauen 
kann

Eine Idee welche Register ich abfragen soll, welche werte ich erwarten 
muss?
Bin echt erstaunt das ich trotz intensiverer Suche gar keine beispiele 
finde

von Rolf M. (rmagnus)


Bewertung
-1 lesenswert
nicht lesenswert
cppbert schrieb:
> Bin echt erstaunt das ich trotz intensiverer Suche gar keine beispiele
> finde

Wie hast du denn das geschafft? Wenn ich "vga programming" in Google 
eingebe, bekomme ich auf Anhieb Massen von Beispielen, Anleitungen, 
Registerbeschreibungen und Tutorials.

von Thomas S. (thschl)


Bewertung
0 lesenswert
nicht lesenswert
du musst nur die VESA Modies benutzen, machen wir auch

https://de.wikipedia.org/wiki/VESA_BIOS_Extension

läuft auch im PM

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Wie hast du denn das geschafft? Wenn ich "vga programming" in Google
> eingebe, bekomme ich auf Anhieb Massen von Beispielen, Anleitungen,
> Registerbeschreibungen und Tutorials.

Wie schon geschrieben habe ich kein Problem damit den Grafikmodus per 
Register zu setzen Text und Pixel zu malen - nur zur "Erkennnung" habe 
ich nichts gefunden, da alle meine System den VGA-Standard on Board 
supporten hab ich nicht mal einen Ahnung was passiert wenn ich keine 
habe und den Code laufen lasse - ich hatte gehofft ein etwas 
ausgetesteteres Beispiel zu finden damit das auch ordentlich läuft

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Thomas S. schrieb:
> https://de.wikipedia.org/wiki/VESA_BIOS_Extension
>
> läuft auch im PM

Ich wollte mich auf den VGA-Standard beschränken und dort erkennen ob es 
auch der auch verfügbar ist

von S. R. (svenska)


Bewertung
0 lesenswert
nicht lesenswert
Thomas S. schrieb:
> du musst nur die VESA Modies benutzen, machen wir auch
> https://de.wikipedia.org/wiki/VESA_BIOS_Extension
> läuft auch im PM

Naja. Das Protected Mode-Interface ist erstmal nur 16-bittig (das 
32-bittige kam viel später) und ist auf zeitgenössischen Grafikkarten 
eher nicht vorhanden.

cppbert schrieb:
> Programmiere gerade ein ganz ganz ganz kleines Betriebssystem
> und da sind wohl die standard vga sachen das einzige auf das
> ich wirklich bauen kann

Setze doch einfach den Modus im Bootloader und nutze den (vgl. vesafb, 
ufifb in modernen Systemen). Oder musst du unbedingt im Betrieb 
verschiedene Modi haben?

cppbert schrieb:
> Ich wuerde gerne unter DOS pruefen ob
> eine VGA graphikkarte vorhanden ist

Du kannst in den ACPI-Tabellen oder der PCI-Geräteliste nachschauen, ob 
ein VGA-Gerät vorhanden ist. Wenn du ACPI-Tabellen oder PCI hast, ist 
das allerdings ziemlich garantiert.

Wenn es dir um Textmodi geht, dann kannst du in der BIOS Data Area 
nachschauen, ob eine CGA-kompatible Grafikkarte vorhanden ist (dann 
funktionieren die Textmodi schonmal, mit VRAM @ 0xB8000).

Wenn du im Protected Mode arbeitest, dann hast du per Definition 
mindestens einen 80386. In solchen Systemen steckt eigentlich immer 
eine VGA-kompatible Grafikkarte. Du darfst also davon ausgehen, dass 
eine solche vorhanden ist, wenn das BIOS "CGA" meldet.

Ansonsten brauchst du für EGA/VGA-Karten immer ein zusätzliches 
Video-BIOS. Du kannst also schauen, ob der "int 10h" in der IVT in einen 
passenden ROM-Bereich zeigt, also unterhalb von 0xF0000. Zusätzlich 
kannst du die Signatur (d.h. den Herstellernamen) prüfen, wenn du 
willst, aber das artet aus, weil du dann Tabellen brauchst. Zu guter 
Letzt kannst du schlicht die Register testen, ob sie tun, was du willst. 
Auf wirklich antiken Rechnern kannst du damit aber auch Dinge (z.B. den 
Bildschirm) kaputtmachen.

cppbert schrieb:
> Programmiere gerade ein ganz ganz ganz kleines Betriebssystem

(a) Du arbeitest mit BIOS und Legacy-Zeugs (kein UEFI). Also wirst du 
Multiboot nutzen. Lass dir da den VESA-Modus geben und fertig.

(b) Wenn du mit UEFI arbeitest, ist dein ganzes Zeugs eh hinfällig, weil 
du dort den Treiber der Firmware nehmen kannst.

(c) Besitzt du eine Nicht-VGA-Grafikkarte zum Testen? Nein? Dann 
ignorier' den Scheiß und tue so, als ob die Grafikkarte jünger als 30 
ist. :-)

(d) Frag mal bei VOGONS oder OSDev.org nach. Die kennen sich besser aus 
als wir hier, denn die machen das aktiv.

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
S. R. schrieb:

Danke für die Tips - ich schaue mal weiter

> Zu guter
> Letzt kannst du schlicht die Register testen, ob sie tun, was du willst.
> Auf wirklich antiken Rechnern kannst du damit aber auch Dinge (z.B. den
> Bildschirm) kaputtmachen.

das hatte ich auch gelesen und wollte deshalb testen - und wegen dem 
kleinen Defensiv-Programmierer in mir :)

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
cppbert schrieb:
> Wie schon geschrieben habe ich kein Problem damit den Grafikmodus per
> Register zu setzen Text und Pixel zu malen - nur zur "Erkennnung" habe
> ich nichts gefunden,

Ach so. Da müsst ich mal mein altes PC-Intern entstauben und schauen, ob 
da was drin steht. Die anderen Bücher aus der Zeit, als das für mich 
relevant war, hab ich irgendwann mal weggeworfen. Es gab da mal für 
alles mögliche mehr oder weniger ausgefeilte Erkennungsroutinen.

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
> cppbert schrieb:
>> Wie schon geschrieben habe ich kein Problem damit den Grafikmodus per
>> Register zu setzen Text und Pixel zu malen - nur zur "Erkennnung" habe
>> ich nichts gefunden,
>
> Ach so. Da müsst ich mal mein altes PC-Intern entstauben und schauen, ob
> da was drin steht. Die anderen Bücher aus der Zeit, als das für mich
> relevant war, hab ich irgendwann mal weggeworfen. Es gab da mal für
> alles mögliche mehr oder weniger ausgefeilte Erkennungsroutinen.

Wäre super wenn du was findest - das nicht auf BIOS Funktionen basiert

von guest (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du könntest den selben Mechanismus nutzen wie das BIOS: Die 
Startaddressen für BIOS-Erweiterungen abklappern und nachschauen ob a) 
an der Stelle überhaupt eine Erweiterung liegt und b) es sich dabei um 
das VGA-BIOS handelt. Das BIOS selber würde beim Finden einer 
Erweiterung noch dessen Initialisierungsroutine anspringen. Im Falle des 
VGA-BIOS würde diese dann u.a. den Int 10h Handler verbiegen, daher auch 
der Tip von S. R. (svenska) in die IVT zu schauen 
(Beitrag "Re: auf standard vga karte pruefen ohne bios?").
Wie die Header der BIOS-erweiterungen genau aussehen müßte Rolf M. 
(rmagnus) mal in seinem alten PC-Intern nachschlagen :)

Btw. Wenn Du Dich intensiver mit so alter PC-Technik befassen willst 
solltest Du Dir diesen Buch selbst zulegen. Es ist von Michael Tischer 
und bei Data Becker erschienen. In Deinem Fall wohl an besten PC-Intern 
2.0, die letzten Versionen waren schon sehr Windows lastig.

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
cppbert schrieb:
> Wäre super wenn du was findest - das nicht auf BIOS Funktionen basiert

Leider nicht. Im Buch ist eine Routine beschrieben, die ermittelt, ob 
VGA, EGA, CGA, HGC oder MDA verbaut ist. Der VGA-Teil nutzt aber das 
VGA-BIOS.
Die Frage wäre noch, ob du den Test nicht machen kannst, bevor du in den 
Protected Mode schaltest. Oder alternativ im virtuellen 8086-Modus.

von hercules (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Du brauchst das Buch "PC Intern 2.0". Da ist die Kartenerkennung 
umfangreich beschrieben und mit Assembler hinterlegt.

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
hercules schrieb:
> Du brauchst das Buch "PC Intern 2.0". Da ist die Kartenerkennung
> umfangreich beschrieben und mit Assembler hinterlegt.

Auch ohne bios Zugriffen?

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
Meins ist Version 3.0, da steht es wie gesagt nur über das BIOS drin. 
Ich gehe mal nicht davon aus, dass das in 2.0 so viel anders sein wird.

von *.* (Gast)


Bewertung
0 lesenswert
nicht lesenswert
http://www.ctyme.com/intr/rb-0575.htm

5-4    initial video mode.
00 EGA, VGA, or PGA.

Ansonsten die Info halt holen bevor man in den Protected Mode 
umschaltet? Diverse Extender haben genau dafür Funktionen, die temporär 
in den Real Mode zurückschalten, dann gibt es auch noch den v86-Modus.

Unsicherer wird es dann, z.B. das Option-ROM nach dem String "VGA" zu 
durchsuchen.

Man müsste wohl auch PCI enumerieren können und nach VGA-Unterstützung 
filtern.

von S. R. (svenska)


Bewertung
0 lesenswert
nicht lesenswert
Ich möchte dich nochmals darauf aufmerksam machen, dass du auf einem 
wunderschönen Holzweg bist. Deine Frage führt nicht zu Lösungen, sondern 
nur zu Problemen.

Was ist dein Zielsystem für dein Betriebssystem?

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
S. R. schrieb:
> Ich möchte dich nochmals darauf aufmerksam machen, dass du auf
> einem
> wunderschönen Holzweg bist. Deine Frage führt nicht zu Lösungen, sondern
> nur zu Problemen.
>
> Was ist dein Zielsystem für dein Betriebssystem?

Erst mal nur mein System, hatte die Hoffnung das es ganz einfach geht 
aber es ist wohl relativ sicher davon aus zu gehen das jedes System 
worauf mein Prototyp läuft wohl Standard VGA supported

von c-hater (Gast)


Bewertung
0 lesenswert
nicht lesenswert
cppbert schrieb:

> Erst mal nur mein System, hatte die Hoffnung das es ganz einfach geht
> aber es ist wohl relativ sicher davon aus zu gehen das jedes System
> worauf mein Prototyp läuft wohl Standard VGA supported

Darauf würde ich mich nicht unbedingt verlassen. Die Unterstützung für 
VGA (bzw. eigentlich schon ewig: dessen Emulation) schwindet seit 
nunmehr Jahrzehnten immer weiter. Viele Modi werden von den 
Graphik-Herstellern überhaupt nicht mehr getestet. Sind oft formal noch 
vorhanden, funktionieren aber nicht mehr wirklich.

Es ist absolut absehbar, dass die VGA-Kompatibilität am Ende der 
Entwicklung komplett verschütt geht, das wird mit dem Aussterben der 
Legacy-BIOS-Unterstützung zusammenfallen, die ebenfalls absehbar ist.

Dann gibt es nur noch einen Weg: UEFI und sein Graphikadapter.

Wenn ich heute ein neues "Betriebssystem" (vermutlich handelt es sich 
eher nur um eine Art Bootloader) entwickeln wollen würde, dann nur noch 
auf UEFI-Basis. Alles andere ist sinnlos zum Fenster rausgeworfene 
Lebenszeit...

von S. R. (svenska)


Bewertung
0 lesenswert
nicht lesenswert
c-hater schrieb:
> Darauf würde ich mich nicht unbedingt verlassen.
> Die Unterstützung für VGA (bzw. eigentlich schon
> ewig: dessen Emulation) schwindet seit nunmehr
> Jahrzehnten immer weiter.

Jein.

Ja, echter VGA-Support ist nahezu irrelevant geworden und man kann 
zunehmend davon ausgehen, dass eher seltsame Registerprogrammierung 
nicht mehr ordentlich funktioniert.

Nein, grundlegender VGA-Support (inklusive VESA) ist vorhanden und es 
ist nicht absehbar, dass das verschwindet. Das Risiko, dass irgendwo 
ein Windows-Setup nichts anzeigt, bindet sich kein Hersteller aufs Bein.

Sowohl virtuelle Maschinen als auch große Netzwerke fahren oft 
großflächig BIOS oder UEFI im Kompatiblitätslayer, weil Infrastruktur 
lange lebt. Solltest du eigentlich wissen.

Und ob der VGA-Support nun ein reales VBIOS ist oder eine Emulation im 
UEFI-CSM, spielt für das Betriebssystem keine Rolle.

c-hater schrieb:
> Viele Modi werden von den Graphik-Herstellern überhaupt
> nicht mehr getestet. Sind oft formal noch vorhanden,
> funktionieren aber nicht mehr wirklich.

Hast du das jemals getestet oder erzählst du nur gefährliches 
Halbwissen?
Kannst du konkrete Beispiele nennen?

c-hater schrieb:
> Dann gibt es nur noch einen Weg: UEFI und sein Graphikadapter.

Das ist vor allem dann eine ganz besonders schlaue Idee, wenn man sein 
Betriebssystem mal auf älterer Hardware testen möchte, die kein UEFI 
hat...

cppbert schrieb:
> Erst mal nur mein System, hatte die Hoffnung das es ganz einfach geht
> aber es ist wohl relativ sicher davon aus zu gehen das jedes System
> worauf mein Prototyp läuft wohl Standard VGA supported

Davon ist auszugehen. Bedenke, dass alle Grafikstandards, die keine 
VGA-Kompatiblität haben, bereits vor 30 Jahren antik waren.

von X2 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Für neuere Intel SoCs gibt es offiziell von Intel kein Legacy VBIOS mehr 
welches supported wird. Es gibt ein Legacy VBIOS, es wird aber explizit 
darauf hingewiesen, dass es nur experimentell ist und maximal für 
manufacturing benutzt werden soll.

Spätestens bei WhiskeyLake U ist dass so, Lenovo zum Beispiel hat aber 
trotzdem ein CSM mit Legacy VBIOS in mein T490 eingebaut.

von cppbert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
mir bleiben ja immer noch die Dosbox und Qemu etc. :)

von Arne S. (arnes)


Bewertung
0 lesenswert
nicht lesenswert
oszi40 schrieb:
> Buch über VGA-Programmierung suchen? ISBN-13: 978-3893197255

Ich habe das Buch zur Hand. Wird ihm wenig bringen, da es
- alle Beispiele in TurboPascal abbildet
- vollständig auf das BIOS aufbaut

Auch bei dem hier (ISBN 13 978-0201570250) ist nichts zu holen, wenn es 
um DPMI geht.

In den 90ern - als es noch viele Mailboxen gab - lagen da haufenweise 
code-snippets, libs, how-tos von Democrews etc. Wenn der TO sich 
anmelden würde, könnte ich evtl. damit weiterhelfen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.