EGA - Kommunikation

Gast #1124865
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
#1124944
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
Persönliche Seite #1124988
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.
Gast #1125452
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
#1125838
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.
Persönliche Seite #1125859
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.
Gast #1125862
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.
Gast #1125870
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?
Gast #1125876
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?
Persönliche Seite #1125877
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.
#1125882
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.
Gast #1126251
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
Angehängte Dateien:
Persönliche Seite #1126369
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 ...
Gast #1126401
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.
Gast #1126609
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.
Gast #1126787
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
Persönliche Seite #1126817
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.
#1126843
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.
Gast #1126850
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
Gast #1126896
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.
Gast #1126943
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
Persönliche Seite #1127008
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
#1127018
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.
Gast #1127038
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren