Hallo, Ich möchte mit meinem uC Schriften und Formen an einen Monitor mit EGA ausgang ausgeben. Warum ich einen EGA Monitor verwende ist der Grund das ich einen habe der in einem 19" Einschubgehäuse ist und ich sowas für meine Anwendung brauche. Ich will einen ATmega16 uC verwenden. WEiß jemand wie der Datenstrom für ein EGA Digitalsignal aussieht. Ich hab leider nichts im net gefunden. Falls der uC zu langsam ist, nehme ich gerne Ratschläge netgegen. Mfg Daniel
Hallo, Datenstrom klingt gut.;-) Die EGA-Parameter sollten doch zu finden sein, irgendwas zwischen 15 und 21kHz horizontalfrequenz und 60Hz vertikal. Ansteuerung mit 2 Bit pro Farbe TTL-Pegel (64 Farben). Wenn 8 Farben reichen geht auch CGA-Ansteuerung mit 1 Bit pro Farbe oder 16 Farben, die niederwertigen Bits der Farben verbunden als Intensity-Signal. Sollte kein unlösbares Problem sein, eins der diversein Projekte PAL oder BGA mit AVR zu modifizieren. Wie es mit der möglichen Farbanzahl aussieht, muß man wohl mal nachrechnen (Speicher, Geschwindigkeit). Ansonsten Internet... http://de.wikipedia.org/wiki/Enhanced_Graphics_Adapter http://www.computerlexikon.com/was-ist-ega?highlight=Grafik-Standards http://www.elektroniklager.de/pc-sup/d_dta-pc-tech-graph.htm Gruß aus Berlin Michael
Ein steinalter* Standard zur Ansteuerung von PC-Farbmonitoren. Unterstützt wurde eine Graphikauflösung von gnadenlosen 640x350 Bildpunkten, die 16 Farben aus 64 möglichen Farbwerten darstellen konnten. Die Farbwerte wurden mit je zwei Bit je Grundfarbe codiert, die Ansteuerung des Monitors erfolgte digital mit je zwei Pixeldatenleitungen je Grundfarbe. EGA-Monitore verwendeten 60 Hz Bildwechselfrequenz und eine Zeilenfrequenz von etwa 18 kHz.
Vielen dank für diese Informationen. Nur bin ich jetzt draufgekommen, ob das überhaupt EGA oder CGA oder der Monochromanschluss sind. Ich melde mich wieder wenn ich das hrausgefunden haben, weil gewisse Sachen sind mir noch nicht klar. Mfg. Daniel
Wie schwierig ist es eigentlich, eine alte ISA-Bus Grafikkarte zu initialisieren?
Sehr schwer, da nicht viel standardisiert ist. Es ist zwar möglich (man findet ein paar wenige, an einer Hand abzählbare Projekte im Internet), aber die sind alle auf eine bestimmte Grafikkarte zugeschnitten, denn die Kompatibilität erreichen die Hersteller durch die VGA BIOS und die ist außerhalb eines x86er Systems nicht nutzbar.
> Wie schwierig ist es eigentlich, eine alte ISA-Bus Grafikkarte zu > initialisieren? Naja, bei den wirklich richtig uralten Graphikkarten CGA, MDA* und Hercules, die ohne eigenes BIOS kommen, ist's nicht so schwer, da deren Initialisierung im Rechner-BIOS selbst enthalten bzw. im Falle der Hercules-Karte der den Graphikmodus aktivierenden Software bekannt ist. Und das BIOS des IBM PC/XT ist im Sourcecode verfügbar, auch ist die Hardware der Karten dokumentiert. Zentraler Baustein bei allen dreien ist der 6845 von Motorola, der natürlich auch bestens dokumentiert ist. Bei EGA wirds problematisch, weil bereits die mit 'ner BIOS-Erweiterung daherkommt, und spätestens ab da treffen Benedikts Aussagen wieder zu. *) Ja, Pedanten mögen jetzt darauf hinweisen, daß das gar keine Graphikkarte ist. Stimmt.
Ein Bios kamm meines wissens erst mit S-VGA auf die karten bzw. erst um eingiges später, vorher wurde das noch mit zusätzlichen treibern versucht hinzubiegen, die erst explizit laden musste. Meines wissens ist die VGA Hardware so zimmlich standard, da diese von IBM quasie standardisiert wurde. Die register definitionen sind erhältich. Gibt sogar ganze bücher darüber. Ob das bei CGA und EGA auch so war. kann ich nicht sagen.
Eine andere Frage ist, ob man noch leicht an solche Karten rankommt ;-) Auf dem Ebay-Schrottplatz findet man vielleicht was, oder beim Elektromüll... Eine Graka ansteuern hätte den Vorteil, das diese auch gleich ne schriftart mitbringt dh man sofort loslegen kann, Texte auszugeben... Stimmt, ich erinnere mich dunkel an das VGA-Bios... Soweit ich weiß, haben wir im Studium in Rechnerarchitektur über Assembler direkt in den Grakaspeicher geschrieben (gut, war ein 386 mit VGA)... Das müsste also schon irgendwie standardisiert sein, oder?
Weiß nicht obs hilft mir ist da noch ne Ergänzung eingefallen: Es gab mal ein dos tool namens svm89.exe, damit konnte man mit einer VGA karte zb EGA, CGA und Hercules emulieren... Ein weiterer Hinweis auf nen Standard?
> Ein Bios kamm meines wissens erst mit S-VGA auf die karten > bzw. erst um eingiges später, vorher wurde das noch mit > zusätzlichen treibern versucht hinzubiegen, die erst > explizit laden musste. Nein, bereits EGA-Karten hatten ein BIOS-Erweiterungs-ROM 'drauf. Das enthielt Code, der den im Rechner-BIOS enthaltenen Code für CGA/MDA ersetzte. Bei VGA-Karten wurde das genauso gelöst, wobei die erste "echte" VGA-"Karte" keine Steckkarte war, sondern onboard auf einem PS/2-System implementiert war - dort enthielt dann das Haupt-BIOS auch gleich entsprechenden Code. VGA-Karten für ISA-Steckplätze aber enthielten auch allesamt ein BIOS-EPROM. Hier ein Bild einer recht alten EGA-Karte http://cervete.files.wordpress.com/2008/06/027-videocard-wang-m-ega.jpg ... auf der man das BIOS-ROM deutlich erkennen kann. Auf CGA-, MDA- und Hercules-Karten war auch ein EPROM drauf, das aber diente als fester Zeichengenerator für den Textmodus. Die EGA-Karte arbeitete aber mit einem programmierbaren Zeichengenerator, der beim Systemstart aus dem BIOS-Erweiterungs-ROM initialisiert wurde.
Sumynona wrote: > Soweit ich weiß, haben wir im Studium in Rechnerarchitektur über > Assembler direkt in den Grakaspeicher geschrieben (gut, war ein 386 mit > VGA)... > Das müsste also schon irgendwie standardisiert sein, oder? Wie Rufus und Termite schrieben: Vor VGA waren die Karten meist standardisiert. Ab VGA aufwärts baut jeder Hersteller seine eigenen Sachen, die im Kern mehr oder weniger standardisiert sind, die vollständige Kompatibilität aber eben nur durch das VGA BIOS erreichen. Mangels Datenblättern mit den genauen Registerbeschreibungen ist daher die Ansteuerung eher schwer. Afaik gibt es nur zum ET4000 wirklich ausführliche und vollständige Datenblätter im Internet.
Ah, ok, das passt. Ich wollt ja mal nen virus schreiben der Zeichen im Zeichengenerator auf den Kopf stellt^^ bin aber nicht dazu gekommen
Ihr habt mich auf eine Idee gebracht. Ich habe noch eine echte einer der ersten ATI Grafikkarten mit EGA Anschluss. Die ist aus dem 87 Jahr. Die hat ein EGAWONDER 800 Bios. Die Gaka. heißt EGA WONDER 800. Währe es möglich die mit dem MCU anzusteuern? Weil die würde mir eine gewisse Arbeit nehmen. http://stason.org/TULARC/pc/graphics-cards/A-B/ATI-TECHNOLOGIES-INC-EGA-EGA-WONDER-VER-2-3.html http://www.ccs-a.com/th99/v/txt/52215.txt http://support.microsoft.com/kb/65442 Die ist 80x86 kompatibel. Nur weiß ich nicht wie der Datenstrom auszusehen hat und wie die Pinbelegung ist. Im Bild ist das die Untere. Mfg. daniel
Nein, diese Graphikkarte kannst Du nicht mit einem µC ansteuern. Warum, haben wir hier gerade in diesem Thread erläutert. Diese Karte enthält ein EPROM, das Code enthält, der zur Ansteuerung der Karte erforderlich ist. Da dein µC keinen x86-Code versteht, kannst Du diesen Code nicht nutzen, und weißt also nicht, wie die Karte zu initialisieren ist, damit sie überhaupt ein Bild ausgibt. Wobei die Karte selbst 'ne schicke Nummer war - die war so ziemlich die beste aller denkbaren EGA-Karten, weil sie EGA-Graphik auch auf andere Monitore ausgeben konnte. Ich habe so ein Ding an einem monochromen Monitor mit Fernseh-Timing genutzt - dank des lang nachleuchtenden Phosphors störte auch das Interlace-Verfahren nicht, das nötig war, um die 640x350-Auflösung auszugeben. Und die Graustufendarstellung auf diesem Monitor war auch klasse. Die funktionierte sogar auf MDA/Herculesmonitoren, und zwar wurde dazu die Pixelbreite moduliert. Mein Gott, ist das lange her ...
Hat diese Grafikkarte den 82C435-Chip? Zu dem gibts ein Datenblatt. Das Initialisieren besteht aus dem Schreiben von bestimmten Werten in die Register, da kann man die Karte in einen alten PC stecken, das BIOS machen lassen und die Werte auslesen (ein bestimmtes Register muss beim 82C435 geändert werden damit man zurücklesen kann). Es gibt auch ein paar Lockbits, aber das kann man aus dem Datenblatt herauslesen. Man könnte das BIOS sogar in einem Emulator laufen lassen und so den gesamten Ablauf untersuchen. Ich habe so schon ein Programm gemacht das eine ET4000-Grafikkarte ohne BIOS in den Textmodus initialisiert.
Nein, den hat sie nicht. Das ist keine Standard-EGA-Karte, sondern eine mit speziellen "Multinorm"-Fähigkeiten, weil sie --wie ich bereits beschrieben habe-- alle Graphikmodi auf Monitoren ausgeben kann, die diese eigentlich nicht darstellen können.
Das bedeutet, dass die EPROM zuerst gelesen werden muss, damit man weiß wie die Karte anzusteuern ist? Verstehe ich das richitg?
Und durch das herauslesen erfährt dann der Rechner wie die Karte nazusteuern ist?
Genau. Ein 8086 Disassembler und ein wenig Erfahrung mit dem x86 Assemblercode sind also nötig um das ganze auf µC zu portieren. Dennoch kann es sein, dass das ganze so komplex wird dass du daran scheiterst.
Ok ich muss mich daheim noch mal schlau machen. VGA hat aber zumindest einen genormten registersatz, den sost währen so hässliche sachen wie "mode x" nicht möglich gewesen. VGA HW in einen speziellen mode bringen in dem man sachen machen konnte, der normaler weise nicht möglich war. Auflösung 320 x 200 bei 256 Farben ( out of 65536 ) Virtuell konnten bis zu 4 Monitore verwaltet werden ( 256KB Speicher war bei VGA glaubich standard und wieso nur 64KB davon nutzen) auf diesem hin und herscrollen ohne das der VRam neu aufgebaut werden musste (ging durch manipulationen von Registerwerten), oder im VMem 4 mal schneller hin und herkopieren z.B. Hintergrundbilder . extern waren 640000 Speicherzugriffe notwendig. Intern nur 16000, da der Speicher auf der karte schon 32Bitig war. ( die Addressen wurde zwar von extern angelegt, die karte hat aber intern durch die gegend kopiert) hört sich alles Böse an, und war über BIOS rotinen nicht erreichbar. oder die ersten 3D flug simulatioren (wingcommander) oder die ersten ego-shootter von id soft. die haben definitif nicht auf bios rotinen zurück gegriffen, da viel zu langsam. damals war ASM und direkter HW zugriff das mass der dinge. in verbindung mit jeder menge hässlicher s...ereien die man mit der VGA HW so machen konnte. gruss
Es könnte möglich sein, die in der Codesammlung anzutreffenden LCD-Ansteuerungen auf EGA umzubiegen.
> VGA hat aber zumindest einen genormten registersatz, > den sost währen so hässliche sachen wie "mode x" > nicht möglich gewesen. Naja, das mag zwar sein, aber die Initialisierungsroutine, die den Rest der Graphikkarte in einen definierten Ausgangszustand versetzt, die ist halt nur in diesem BIOS-ROM, und die kann sich von VGA-Chipsatz zu VGA-Chipsatz sehr deutlich unterscheiden. Nach erfolgter Initialisierung gab es einen gewissen gemeinsamen Nenner, d'accord.
Rufus t. Firefly wrote: > Naja, das mag zwar sein, aber die Initialisierungsroutine, die den > Rest der Graphikkarte in einen definierten Ausgangszustand versetzt, die > ist halt nur in diesem BIOS-ROM, und die kann sich von VGA-Chipsatz zu > VGA-Chipsatz sehr deutlich unterscheiden. Genau das ist das Problem: Wenn die Karte erstmal läuft, kann man die bekannten Register beschreiben und anpassen. Es gibt aber weitaus mehr Register, u.a. um die DRAM Konfiguration (wieviel, welcher Typ, wie angeschlossen usw.) einzustellen, und die findet man ohne Datenblatt nicht. Das ganze fängt schon beim Zugriff auf die Karte an: Nach dem Reset versteckt sich die VGA Karte erstmal, man muss diese quasi erstmal freischalten, ehe die Register und der Speicher sichtbar werden. Und das Register das man dazu beschreiben muss, da gibt es etliche Varianten, je nach Hersteller, Version usw.
Wenn man das aber erst mal geschafft hat, ist der Weg frei zu einer 1a VGA Spielekonsole ;-) Ich bin der Meinung, der Thread-Eröffner sollte sich mal die CGA-Kompatibilität der Karte angucken, und diese auch erst mal auf Low-Level (Bus) und später CGA-Modus (wenn möglich) ansteuern... Wenn das klappt kann man ja über das Auslesen des graka-bios und portierung auf µC reden... Sonst bliebe eben nur noch die Wahl, alles selbst zu tun und die Graka ganz wegzulassen
> Ich bin der Meinung, der Thread-Eröffner sollte sich mal die > CGA-Kompatibilität der Karte angucken, Warum auch das bei einer VGA-Karte nicht geht, haben wir hier doch gerade diskutiert - ohne grundlegende Initialisierung der Kartenhardware wird auch kein CGA-Modus funktionieren.
@ Benedikt K. (benedikt) Eine VGA Karte mit DRAM Zeigst du mir mal. das war meines wissens SRAM. umd am ausgabe kanal hat man auch drehen können. Quadratische ausgaben mit 256 * 266 Pixel hat man auch hinbekommen, damit ein kreis auch wirklich ein kreis ist und nicht irgend ein verbogenes ding.
Termite wrote: > @ Benedikt K. (benedikt) > Eine VGA Karte mit DRAM Zeigst du mir mal. das war meines wissens SRAM. Dein Wissen ist falsch, siehe hier: http://de.wikipedia.org/wiki/Grafikkarte Ich habe noch nie eine Grafikkarte mit SRAM gesehen, selbst die Uraltteile mit 6845 hatten meist DRAM + ein ASIC als DRAM Controller.
Grafikkarten haben stets DRAM verwendet. Die 256KB einer VGA waren damals recht viel.
Danke für euere Bemühungen. Ich habe dadurch neues Wissen gewonnen und werde über den Februar darüber nachdenken. Meine anfägliche Idee war den EGA Monitor direkt anzusteuern mit einem uC. Vielleicht kennt jemand ein buch, pdf oder eine Seite wo man nachlesen kann wie der Daten/Steuerstrom für einen EGA Manitor auszusehen hat. Wenn nicht, werde ich einfach den 80286 Gesamtrechner nehem (wird halt alles groß) und den dann verwenden. Mfg. Daniel
Also, wenn es nur darum geht, irgendeinen Monitor anzusteuern mit dem Mikrokontroller, duerften die Picaso Mini-VGA-Kaertchen am praktischsten sein: http://www.4dsystems.com.au/prod.php?id=15 Wenn ihr nur basteln wollt, lasst euch nicht stoeren und macht weiter ;-)
Der "Datenstrom" für einen EGA-Monitor sieht ziemlich genauso aus wie der für andere Monitore auch. Nacheinander wird jeder Bildpunkt einer Bildschirmzeile ausgegeben, für jede Bildschirmzeile gibt es einen HSYNC-Impuls und nach allen Bildschirmzeilen gibt es einen VSYNC-Impuls. Die Frequenz, mit der HSYNC-Impulse erzeugt werden, steht fest (das ist die Zeilen- oder auch Horizontalfrequenz), sie liegt bei EGA-Monitoren bei etwa 18 kHz. Aus der Zeilenfrequenz und der gewünschten Pixelanzahl pro Zeile lässt sich der sogenannte Pixeltakt berechnen, die Geschwindigkeit, mit der die Bilddaten an den Monitor übertragen werden. Dabei steht nicht die gesamte Dauer einer Zeile für Ausgaben zur Verfügung, es gibt eine sogenannte "horizontale Austastlücke", in der der Röhrenmonitor den Bildstrahl zum Anfang der nächsten Zeile bewegt. Auch werden einige Bildzeilen ohne Inhalt ausgegeben, das ist die "vertikale Austastlücke". Projekte, mit denen Fernseher mit Bild versehen werden, gibt es in der Code-Sammlung, für EGA ist nur das Zeitverhalten auf die höhere Zeilenfrequenz anzupassen. Hier ein sehr einfaches Beispiel für monochrome Textausgabe: Beitrag "AVR ASCII Video Terminal - 40 x 25 - BAS Signal" Die nutzbare Zeichenanzahl pro Zeile sinkt bei der Anpassung auf EGA durch die höhere Zeilenfrequenz. Das erzeugte 1-Bit-pro-Pixel-Videosignal ist gleichzeitig an alle sechs Monitoreingangssignale (2xR, 2xG und 2xB) des EGA-Monitor anzuschließen, dann gibts weiße Zeichen. Durch Variieren lassen sich auch andere Farben wählen. -- Übrigens habe ich eine Beschreibung* der VGA-Programmierung gefunden. Ob diese aber ohne vorherige Initialisierung durch das VGA-Karten-BIOS nutzbar ist, bedarf der Klärung. Je aufwendiger die Graphikkarte (ET4000 etc.), desto unwahrscheinlicher ist das. *) http://www.stanford.edu/class/cs140/projects/pintos/specs/freevga/home.htm
Rufus t. Firefly wrote: > Übrigens habe ich eine Beschreibung* der VGA-Programmierung gefunden. Ob > diese aber ohne vorherige Initialisierung durch das VGA-Karten-BIOS > nutzbar ist, bedarf der Klärung. Meiner Meinung nach nein. Ich hatte diese Beschreibung schonmal versucht anzuwenden: Auf einem PC ging das, aber ohne Init bringen einem diese Beschreibungen nicht viel, da man gar nicht soweit kommt.
Eine ganz einfach Option einen Monitor an einen µC zu kriegen ist es einen Videotextcontroller zu nehmen, die Dinger lassen sich typischerweise per IIC ansteuern und haben heute auch den Videospeicher intern. Ansonsten würde ich mal bei den "üblichen Verdächtigen" wie TI, ST, Micronas, Infineon, Freescale nachschauen, es gibt auch Videocontroller speziell zur Verwendung mit µC.
So ein Videotextcontroller erzeugt aber kein Videosignal mit EGA-Timing. Hier will ja jemand alten Computerschrott in Form eines EGA-Monitors weiterverwenden. Wäre das PAL-Timing akzeptabel, wäre Beitrag "High-Quality PAL-Grafikkarte für µCs" eine sicherlich sehr elegante Lösung.
Zusammengetragene (Register-) Informationen über alte VGA-Chipsätze gibt's hier: http://www.programmersheaven.com/download/15177/download.aspx Eine Erklärung zu den Standardregistern (der SVGA-Link auf der Seite funktioniert nicht mehr): http://www.osdever.net/FreeVGA/home.htm Ist alles kein Hexenwerk.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.