Forum: Mikrocontroller und Digitale Elektronik EGA - Kommunikation


von Daniel (Gast)


Lesenswert?

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

von Michael U. (amiga)


Lesenswert?

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

von fhgfg (Gast)


Lesenswert?

was ist ega

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Daniel (Gast)


Lesenswert?

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

von Sumynona (Gast)


Lesenswert?

Wie schwierig ist es eigentlich, eine alte ISA-Bus Grafikkarte zu 
initialisieren?

von Benedikt K. (benedikt)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Termite (Gast)


Lesenswert?

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.

von Sumynona (Gast)


Lesenswert?

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?

von Sumynona (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Sumynona (Gast)


Lesenswert?

Ah, ok, das passt. Ich wollt ja mal nen virus schreiben der Zeichen im 
Zeichengenerator auf den Kopf stellt^^ bin aber nicht dazu gekommen

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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 ...

von *.* (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von *.* (Gast)


Lesenswert?

Der 82C435 hat zumindest CGA- und Hercules-Rückwärtskompatibilitäten.

von Daniel (Gast)


Lesenswert?

Das bedeutet, dass die EPROM zuerst gelesen werden muss, damit man weiß 
wie die Karte anzusteuern ist? Verstehe ich das richitg?

von Daniel (Gast)


Lesenswert?

Und durch das herauslesen erfährt dann der Rechner wie die Karte 
nazusteuern ist?

von Sumynona (Gast)


Lesenswert?

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.

von Termite (Gast)


Lesenswert?

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

von (prx) A. K. (prx)


Lesenswert?

Es könnte möglich sein, die in der Codesammlung anzutreffenden 
LCD-Ansteuerungen auf EGA umzubiegen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von Sumynona (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 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.

von Termite (Gast)


Lesenswert?

@ 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.

von Benedikt K. (benedikt)


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

Grafikkarten haben stets DRAM verwendet. Die 256KB einer VGA waren 
damals recht viel.

von Daniel (Gast)


Lesenswert?

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

von P. S. (Gast)


Lesenswert?

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 
;-)

von (prx) A. K. (prx)


Lesenswert?

Ob das Teil wohl EGA-Interface und -Timing beherrscht?

von P. S. (Gast)


Lesenswert?

Das wuerde ich mal gepflegt bezweifeln wollen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Benedikt K. (benedikt)


Lesenswert?

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.

von Guido Körber (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von *.* (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.