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?
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.
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.
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
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.
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
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.
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 :)
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.
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
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.
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.
hercules schrieb:> Du brauchst das Buch "PC Intern 2.0". Da ist die Kartenerkennung> umfangreich beschrieben und mit Assembler hinterlegt.
Auch ohne bios Zugriffen?
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.
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?
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
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...
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.
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.
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.