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_Adapterhttp://www.computerlexikon.com/was-ist-ega?highlight=Grafik-Standardshttp://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
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.
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.
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
> 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.
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.