Forum: Mikrocontroller und Digitale Elektronik VGA Grafikkarte an uC


von Benedikt (Gast)


Lesenswert?

Ich versuche gerade eine ISA VGA Grafikkarte an einem uC zu betreiben,
scheitere aber schon am allerersten Schritt:
Schreibe ich einen Wert in ein Register (Miscellaneous Output Register)
an Adresse 0x3C2, dann sollte ich den Wert an Adresse 0x3CC zurücklesen
können.
Aber leider reagiert keine einzige Grafikkarte darauf. Bei allen
bleiben die Ausgänge auf Tri-State und ich lese 0xFF.
In einem PC kann ich die Register (der initialisierten) Grafikkarte
jedoch umschreiben.
Wenn ich alle Adressen im IO Bereich auslese, und überprüfe ob ein Wert
gelesen wird, dann liefert etwa der Hälfte der Grafikkarten die ich da
habe an Adresse 0x3C3 einen Wert, der Rest nirgends.

Das Ansteuertiming und die Hardware ist OK (eine Soundkarte
funktioniert, ebenso eine Netzwerkkarte).

Hat jemand etwas ähnliches schonmal probiert und irgendwelche Erfolge
erziehlt ?

Kennt jemand ein x86 Simulator, der alle IO Transfers auflistet, die
ein Programm macht ?
Ich habe versucht die VGA BIOS zu analysieren, aber per Hand ist das
ziemlich schwierig.

von Rolf Magnus (Gast)


Lesenswert?

> Schreibe ich einen Wert in ein Register (Miscellaneous Output
> Register) an Adresse 0x3C2, dann sollte ich den Wert an Adresse
> 0x3CC zurücklesen können.

Laut meinem PC-Intern 3.0 (...daß ich das nochmal brauchen kann...),
ist 0x3C2 nur lesbar, heißt "Input Status 0" und meldet, ob ein
Strahlrücklauf-Interrupt ausgelöst wurde. 0x3CC ist "Miscellaneous
Output" und sollte auch beschreibbar sein.

> Kennt jemand ein x86 Simulator, der alle IO Transfers auflistet,
> die ein Programm macht ?

Möglicherweise kann Bochs sowas?

von Benedikt (Gast)


Lesenswert?

Es gibt noch ein paar weitere Register die lesbar sind (Color Palette
auf 0x3C8, Input Status #1 auf 0x3DA usw.)

Ich habs jetzt doch mal per Hand analysiert, Bochs lade ich gerade
runter...
Der Code einer OKI VGA BIOS war erstaunlich kurz (zumindest die
Initialisierung).
Durch einen Schreibzugriff auf Adresse 0x46E8 muss man die Grafikkarte
erst einschalten !!! Das ist ja echt absolut krank.

Eine universelle Lösung zum Ansteuern einer Grafikkarte ist somit nicht
machbar, da jede Grafikkarte eine andere Initialisierung verwendet
(zumindest auf keinem Controller der nicht x86er Code ausführen kann).

von Theo (Gast)


Lesenswert?

Sollte der Vesa-Standard da nicht Abhilfe schaffen, oder bringe ich da
was durcheinander?

von Rolf Magnus (Gast)


Lesenswert?

Das, was du meinst, ist eigentlich nur ein BIOS (manchmal auch ein TSR
unter DOS). Das hilft somit nicht.

von Benedikt (Gast)


Lesenswert?

Ich bin jetzt etwas weiter:
Auf dem Monitor sehe ich ein rotes Bild, das von einem blauen Rahmen
umgeben ist (Overscan Area, habe ich auf blau gesetzt).

Jetzt nur das Problem:
Wie bekomme ich Text/Grafik da rein ?
Ich habe schon so ziemlich alles durchprobiert, kam aber nicht wirklich
über dieses Bild hinaus.

Im Internet gibt es einiges dazu, das meiste ist aber leider nur auf
einem PC anwendbar, da ich solche netten Features wie die VGA BIOS
Routinen nicht verwenden kann.

von Joseph (Gast)


Lesenswert?

Hi Banedikt.
Hast du mal ein paar gute links für mich in sachen ISA und ISA
grafikkarte ? Bin auch an dem Thema interessiert und hab einiges an
zeit....kann dir evtl auch helfen, wenn ich weiter komm.

von Benedikt (Gast)


Lesenswert?

Zum ISA Bus gibts ne Menge, aber das ist auch kein Problem:
20 bit Adresse, 8bit Daten, 2 getrennte RD/WR Signale für IO unde
Speicher. Der Rest wird nicht gebraucht.
Das ganze irgendwie an einem uC verdrahten und die -5V/-12V/+12V am ISA
Stackplatz nicht vergessen (werden oft für den DAC benötigt).

Zum Thema VGA habe ich nur das hier:
Ist zwar alt, aber sehr gut.
http://www.osdever.net/FreeVGA/home.htm

von Thomas K. (thkais)


Lesenswert?

Nur so eine Idee: Könnte die Linux-Ecke da Licht hineinbringen?
Vielleicht hat ja einer von diesen Freaks einen Tipp, wie man an so
eine Grafikkarte rankommt - wenn die nicht auch ausgerechnet mit dem
Bios arbeiten...
Interessantes Thema...

von Hubert (Gast)


Lesenswert?

> diesen Freaks einen Tipp

Bestimmt, wenn se nicht grad den Kernel neu kompilieren.

von Rolf Magnus (Gast)


Lesenswert?

> Nur so eine Idee: Könnte die Linux-Ecke da Licht hineinbringen?

Kaum. Die wenigsten hier werden jemals einen Grafiktreiber programmiert
haben. Und wer das nicht tut, kommt direkt mit der Hardware eh nicht in
Kontakt.

> Vielleicht hat ja einer von diesen Freaks einen Tipp, wie man an
> so eine Grafikkarte rankommt - wenn die nicht auch ausgerechnet
> mit dem Bios arbeiten...

Mit dem Bios wäre viel zu langsam und umständlich. Man könnte sich
natürlich die Sourcen diverser X.org-Treiber ansehen, aber
Informationen über die normalen VGA-Register dürft's genug geben. Wer
noch ein altes PC-intern hat, kann sich freuen. Da steht sowas noch
drin. Über die Grund-Initialisierung steht natürlich nichts drin, da
das ja normalerweise eh im Bios vor dem Start des Betriebssystems
geschieht.

Die Idee, eine VGA-GraKa mit einem AVR anzusteuern, hatte ich auch
schon, aber wirklich interessant finde ich das nur, wenn ich damit das
Bild auf einen Fernseher bringen kann, und ich habe keine ISA-VGA mit
TV-Ausgang - wenn's das überhaupt jemals gab.

PS: Das durch Heise-Trolle verursachte Grundrauschen bitte ich zu
ignorieren.

von Benedikt (Gast)


Lesenswert?

@Rolf Magnus

Man kann jede ISA VGA Graka so umprogrammieren, dass diese ein
Interlaced 50Hz Signal ausgibt, das man in einen RGB Scart Eingang
einspeisen kann. Man muss lediglich die beiden Sync Signale noch XOR
Verknüpfen.


Die Idee mit Linux ist ganz gut, da habe ich u.a. das gefunden:

http://metacomp.stanford.edu/linux/oses/linux/2.1.40/arch/ppc/boot/vreset.c

Das ist im prinzip die komplette Initialisierung, nur leider geht es
nicht so ganz, da wirklich jeder Hersteller seinen eigenen Mist gebaut
hat, und wirklich nichts kompatibel ist...

Eine Grafikkarte an einen uC zu hängen, kann viele Probleme lösen:
Nie wieder Bedarf an großen, teuren LCDs usw.
Eventuell kann man eine Grafikkarte sogar so umprogrammieren, dass man
ein LCD anschließen kann. Parallele TFTs laufen ja bekanntlich
problemlos.

von Rolf Magnus (Gast)


Lesenswert?

> Man kann jede ISA VGA Graka so umprogrammieren, dass diese ein
> Interlaced 50Hz Signal ausgibt, das man in einen RGB Scart Eingang
> einspeisen kann.

Das wäre mir neu. Ich weiß, daß das bei manchen SVGA-Karten geht, aber
bist du sicher, daß das bei jeder ISA-VGA auch geht? Hast du da mehr
Infos drüber? Damit würde es für mich wirklich auch interessant werden.

von Benedikt (Gast)


Lesenswert?

@Rolf Magnus

Zumindest ging es bei mir bisher bei jeder Grafikkarte, und ich habe
Software für Trident VGA Karten, um diese in den PAL Modus zu
versetztn.
Ich werde es aber mal ausprobieren, ich habe gerade einen alten PC hier
liegen...

von A.K. (Gast)


Lesenswert?

Anno CGA/EGA war der zugrundeliegende Refresh-Controller (6845) durchaus
flexibel genug für interlaced mode, immerhin wurde er oft auch so
eingesetzt in einer Zeit als die Monitore dem TV-Standard folgten. Auch
die VGA und damit ihre im Kern weiterhin VGA-kompatiblen Nachfolger
folgen bis heute diesem ursprünglichen auf 6845 Registern basierenden
Hardware-Modell und sollte daher interlaced mode unterstützen.
Beispielsweise liess sich die Matrox Millenium Serie auch ganz
offiziell so einstellen.

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

@Rolf Magnus

Ich habs gerade ausprobiert:
Pentium 1 mit Trident TVGA8900 (ISA) Grafikkarte, TVout Treiber,
RGB->FBAS Wandler, Ergebnis über meine TV Karte, siehe Bild.
Auf einem TV über Scart ist das Bild sehr viel schärfer. Text mit
640x480 ist gut lesbar.
Laut Treiber werden mit OKI Karten alle Modi unterstützt, bei anderen
kann es kleine Einschränkungen geben.

von Thomas (Gast)


Lesenswert?

Hallo Benedikt,
könntest du hier mal den Schaltplan reinstellen, wie du ISA mit dem µC
verbindest.

Gruß Thomas

von Benedikt (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe mal das komplette Packet angehängt.
Über diese Software, kann ich so ziemlich jeden normalen ISA Bus
Transfer ausführen (8, 16bit IO/MEM Transfer). DMA, IRQ usw. werden für
die meisten Karten nicht unbedingt benötigt, und werden daher nicht
unterstützt.

Die 8bit Routinen habe ich getestet, die sollten funktionieren, die
16bit habe ich noch nicht benötigt (etwa 50% alles ISA Grafikkarten
funktionieren auch, wenn man den 16bit Teil abklebt und in ein
Mainboard steckt).
Die Schaltung habe ich vor vielen Jahren schon aufgebaut, eigentlich
als Interface zu dem 8bit Datenbus eines uC, aber das Timing war zu
schnell.

Um eine Grafikkarte anzusteuern, kan man den Quarz und die beiden
Latches und der HC00 für die 16bit Daten weglassen.

von Rolf Magnus (Gast)


Lesenswert?

Also, nach ausführlichem Gurgeln scheint es mir immer noch so, daß es
nicht grundsätzlich mit jeder VGA-Karte geht. Das sieht man auch schon
daran, daß diese DOS-TV-Treiber alle immer nur eine begrenzte Anzahl
von Chips unterstützen. Für die, die ich hier hab (Realtek RTG1305) hab
ich natürlich nichts gefunden.
Mit meiner alten ET-4000 hätte ich vielleicht mehr Glück gehabt, aber
die hat das auf
http://www.mikrocontroller.net/forum/read-1-224698.html#225014
angegebene Schicksal ereilt.

von Benedikt (Gast)


Lesenswert?

@Rolf Magnus

Es geht mit sagen wir mal >99% aller Grafikkarten. Die "Treiber" aber
unterstützen eben nur die meistverwendeten Grafikkarten, da es viel zu
aufwendig wäre alle einzubinden.

PS: Die Treiber unterstützen noch mehr als die aufgelisteten Karten.
Ich habs mal mit irgendner komischen nVidia AGP Grafikkarte
ausprobiert: Ging wunderbar (zumindest unter DOS).

von Marius S. (lupin) Benutzerseite


Lesenswert?

Ich wollte mal fragen ob es davon was neues gibt? ich finde das sehr
interessant..

von Marius S. (lupin) Benutzerseite


Lesenswert?

@Benedikt warum gehst du eigentlich nie direkt an die Karte? Gibt es da
irgendwelche gefahren? selbst für den Takt benutzt du ja einen
74HC4040N - ist das nicht ein wenig übertrieben?

Was für informationsquellen hast du benutzt?

Hast du es mitlerweile geschafft irgendwas an zu zeigen?

von Benedikt (Gast)


Lesenswert?

Was neues gibt es leider nicht.
Was anzeigen tut der Monitor, aber nicht unbedingt das was ich möchte.
Als Anzeige bekomme ich entweder ein buntes Muster (Grafikmodus) oder
eine farbige Fläche + Rahmen (Hintergrundfarbe und Overscanbereich
einstellbar).

@Lupin
Was meinst du damit, dass ich nicht direkt an die Karte gehe ?

von Marius S. (lupin) Benutzerseite


Lesenswert?

naja ich würde halt versuchen die logik ICs weg zu bekommen. Braucht man
den 74HC4040N zwischen oszilator und VGA karte wirklich? Wozu?

Den 16 bit datenbus würde ich direkt an den AVR hängen auch wenn dann
einiges an ports weg wäre.

Warum hast du bei den oberen Datenbits zwei 74HC574 genommen und bei
den unteren einen 74HC245 ?

von Benedikt (Gast)


Lesenswert?

Naja, ein AVR hat leider keine 16+20+4+2=42 IO Pins...
Das Interface hatte ich schon vor Jahren mal aufgebaut, um ISA Karten
an dem Datenbus eines 8051 zu betreiben.
Immerhin ist es schön flexibel und kann so ziemlich alle ISA Bus
Transfers machen.

Der HC245 dient zum direkten Übertragen der 8bit Daten. Um 16bit zu
übertragen, sind 2 8bit Transfers nötig.

von Marius S. (lupin) Benutzerseite


Lesenswert?

ohh... kay... naja ich glaube man kann auf die latches verzichten denn
die address bits sind ja zum teil sowieso von der ISA karte ge-latched
:)

Meine frage ging eher dahin weshalb du bei bits ST1_D8 bis ST1_D15
nicht auch EINEN HC245, wie bei bits ST1_D0 bis ST1_D7, anstatt ZWEI
HC574 genommen hast.

von Benedikt (Gast)


Lesenswert?

Wie zuvor schon geschrieben:
Zum uC gehen nur 8bit.
Dür einen 16bit Transfer läd man erst das High Byte in ein HC574 und
überträgt dieses im zweiten Schritt mit den 8bit Daten vom uC ->
16bit.
Umgekehrt geht es genauso, nur mit dem andern Latch.

Die ISA Karte latched nur wenige Adressen. Adressen 0-20 müssen während
des kompletten Transfers anliegen.

von Rolf Magnus (Gast)


Lesenswert?

> Naja, ein AVR hat leider keine 16+20+4+2=42 IO Pins...

Kann man die Grafikkarte nicht irgendwie in einem 8bt-Modus nutzen? Und
20 Adressleitungen - braucht man die wirklich alle?
Übrigens: Ein ATmega128 dürfte trotzdem genug Pins haben.

von Benedikt (Gast)


Lesenswert?

a) Ein Atmega128 lötet sich schlecht auf Lochraster
b) Ein Atmega128 ist nicht ganz billig

Die TVGA9000 Serie von Trident laufen alle mit abgeklebter 16bit
Erweiterung in einem Mainboard, TVGA8900 nicht.

Und wie schon tausendmal geschrieben: Ich hatte die Schaltung vor
Jahren aufgebaut, und damit ich nicht alles neu löten muss habe ich
diese nun zum Testen und Ausprobieren an den AVR angeschlossen.
Später wird 1 Adresslatch oder ein weiterer Port vermutlich
ausreichen.

Die Grafikkarte benötigt zumindest mal die untersten 16bit an Adressen.
Dazu kommen dann noch 1 oder 2 Adressen falls die Karte ein 128k Fenster
für den Speicherzugriff verwendet.

von Christian (Gast)


Lesenswert?

Hi leute,

hab mir grad mal diesen Thread durchgelesen, dieses Thema finde ich
auch ganz interessant. Ich hab da mal einen Link zur Seite
von Ulrich Radig, das ist zwar keine PC Graka, könnte aber eine
alternative zu den ganzen problemen mit PC Grafikkarten sein.


http://www.ulrichradig.de/site/xilinx/8bitgraka4uC/index.htm


mfg. Christian

von Benedikt (Gast)


Lesenswert?

Es gibt einige Entwürfe mit CPLD/FPGAs, aber da muss man Platine ätzen,
benötigt mehrere SRAMs, einen DAC, hat meistens eine feste Auflösung.
Eine PC Grafikkarte dagegen ist flexibel, da die Auflösung frei
einstellbar ist, außerdem ist ein Textgenerator eingebaut.

von Rolf Magnus (Gast)


Lesenswert?

Was ist eigentlich mit einem 6845 (klassischer CRT-Controller für
Homecomputer) oder was ähnlichem? Hat das schon mal jemand versucht?

von Christian Ege (Gast)


Lesenswert?

Meines Wissens wird die Grafikkarte über das Bios initialisiert. Das
PC-Bios führt den Code des Grafikkarten Bioses aus. Während meines
Praktikums Bei Kontron hatten wir ähnliche Probleme mit einer PCI Karte
und einem powerPC System.

Auch wenn Linux-Freaks gerne Kernel kompilieren so tun sie dies nicht
ausschließlich.

Interensannt für euch dürfte der Framebuffer-code des Linux Kernels
sein. Dort dürfte für Vesa das meiste drin stehen. Ob und wie die Karte
vorher initialisiert wird habe ich keine Ahnung ;-) Aber mit einem guten
 Logic Analyser ist das doch kein Problem ;-)

cu
chege

von Christian Ege (Gast)


Lesenswert?

Wer nicht gleich Kernel kompilieren will kann sich den Code auch so
ansehen:

http://lxr.linux.no/source/drivers/video/

Speziell der Vesa Code.
http://lxr.linux.no/source/drivers/video/vesafb.c

Wenn die Karte nur 16-Farben unterstützt/es reicht dann hilft
vielleicht dieser Code:
http://lxr.linux.no/source/drivers/video/vga16fb.c

hier wird übrigens auf eure Seite:
 http://www.goodnet.com/~tinara/FreeVGA/home.htm
verwiesen.


Allgemeine Infos zum Framebuffer unter Linux:
http://lxr.linux.no/source/Documentation/fb/internals.txt


Ein weiterer Ansatz dürften die diversen emulatoren (Open Source) sein,
wie Bochs oder Qemu  http://fabrice.bellard.free.fr/qemu/

much fun

von Benedikt (Gast)


Lesenswert?

@Rolf Magnus

Den 6845 habe ich hier liegen, aber der braucht eine Menge Hardware
ausenrum.
Und genau das wollte ich mit den Grafikkarten vermeiten: Außer ein paar
Kabeln keine Zusatzhardware die aufzubauen ist.

von Christian Ege (Gast)


Lesenswert?

Zu guter Letzt das hier:
http://wiki.linuxbios.org/data/vgabios/

cu
chege

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Im übrigen sei angemerkt, daß jede PC-Graphikkarte und sogar die
nur-Text-Karte namens MDA einen 6845 enthält.
Seit den EGA-Karten ist der in irgendeinem ASIC verschwunden, aber ein
6845 bleibts trotzdem.

Ich hab' im Büro einen Schaltplan der IBM CGA-Karte, und wer dieses
Gattergrab sieht, verliert ganz schnell die Lust, mit einem 6845 eine
"diskrete" Graphikkarte aufzubauen.
Die CGA-Karte war ebenso wie ihre nur-Text-Schwester MDA eine
8-Bit-ISA-Karte in voller Baulänge (30 cm oder so). Zwar recht luftig
bestückt, aber doch 'ne ganze Menge Käfer drauf.

Benedikts Herangehensweise erscheint mir da erfreulich pragmatisch.

von Siggi (Gast)


Lesenswert?

@Benedikt

Such mal unter h**p://www.datasheet4u.com nach ET4000 ( sogar mit
Referenz Schematic ) und TVGA9000 .
Damit müsste sich doch was anfangen lassen ?
Der TVGA9000 läuft auch im 8Bit-Mode wie ich gesehen habe , beim ET4000
geht wohl nur 16Bit .
Ich habe momentan recht wenig Zeit , aber das Tehma interessiert mich
auch brennend .

Grüsse

von Benedikt (Gast)


Lesenswert?

Danke, die Trident Datenblätter hatte ich schon (aber da steht
eigentlich rein garnichts zu den Registern drin).

Die von TsengLabs sind aber echt super !
Wenn ich das Datenblatt richtig verstanden habe, muss man diese nicht
im 16bit Modus ansteuern, kann aber.
Ich werde es einfach mal ausprobieren.

von Frankl (Gast)


Lesenswert?

Nur ein Vorschlag:
Ich hatte auch mal den Gedanken mit der Grafikkarte (jetzt sind sie
alle in der Tonne). Was will man meistens vom µC: das sind Daten einer
Applikation die man Sichtbar machen will, um irgends etwas zu
kontrollieren. Das heißt geordneter Text auf einem grßen Display
(Bildschirm).
Warum nimmt ihr nicht Hyperterm mit einer Terminalemulation. Jetzt mußt
der µC "nur" noch die Daten schnell 115 kB und formatiert an das
Terminal schicken und schon kommen die Daten auf den Bildschirm. Ist
zwar kein 8/16MHz Durchsatz, aber einfach. Bei einer Seite mit Layout
ist man ca. 1k Speicher los. Das Seitenlayout wird nur einmal (bei
einer Seite) zum Terminal geschickt die dynamischen Daten ständig mit 2
Hz oder so. Schneller sieht man eh nicht. Die 2 Hz macht man mit einem
Counter und Interrupt, so hat der µC noch Zeit für andere Aufgaben.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Äh, Du hast aber schon den Unterschied erkannt zwischen einer Lösung,
bei der der µC einen Monitor autark ansteuern kann, und einer, wofür
ein kompletter Windows-PC erforderlich ist?

von Frankl (Gast)


Lesenswert?

Äh na klar Rufus. Wer ein Monitor hat, der hat auch ein PC.

Denn mal ran, an die Entwicklung.
Schade das nur wenige hier im Forum eine ET4000 kennen (was nur 512K
oder 1MB Speicher das soll eine Grafikkarte sein ?), da war man König
mit einer Festplatte > 100MB und Speicher mit 4MB.

Es war doch nur ein Vorschlag mehr nicht, auch wenn nach Alternativen
nicht gefragt worden ist.
Ich habe hier vor Jahren auch mal die Grafikkarten-Frage gestellt aber
da wurde ich auf Ritzibitzi verwiesen (jahh wieder eine ganz andere
Sache, ich weiß). Da finde ich hier Deinen technischen Einsatz schon
ganz gut. Siehe auch SATA

von Rolf Magnus (Gast)


Lesenswert?

> Äh na klar Rufus. Wer ein Monitor hat, der hat auch ein PC.

Aber den möchte man vielleicht nicht unbedingt benötigen, um z.B. den
"Standalone"-MP3-Player steuern zu können. Oft würde die
Daseinsberechtigung für das ganze AVR-Projekt wegfallen, wenn man dafür
eh einen PC braucht, der es dann auch gleich ohne AVR erledigen könnte.

> Schade das nur wenige hier im Forum eine ET4000 kennen (was nur
> 512K oder 1MB Speicher das soll eine Grafikkarte sein ?), da war
> man König mit einer Festplatte > 100MB und Speicher mit 4MB.

Mein erster eigener PC hatte eine ET4000 mit 1MB, 170MB Platte und 4MB
RAM. Dazu nen 15"-Monitor, Soundblaster Pro und OS/2 (welches ich nach
einer Woche durch DOS/Windows ersetzte - OS/2 war zwar cool, aber mit
4MB nicht zu gebrauchen), und schon waren so an die 4000 Mark weg.
Und mein Mitsumi-Singlespeed-CDROM hatte dann ein Weilchen später knapp
500 Mark gekostet.

> Es war doch nur ein Vorschlag mehr nicht, auch wenn nach
> Alternativen nicht gefragt worden ist.

Naja, glaubst du, die Leute würden hier den erheblichen Aufwand
betreiben, eine Grafikkarte am AVR zu betreiben, wenn dein Vorschlag
eine echte Alternative wäre?

von H-A-L-9000 (Gast)


Lesenswert?

Bin auch am Experimentieren mit der ET4000 - kann immerhin schon die
Farbe einstellen, mit welcher der Monitor flackert :-)
Sind halt 1000 verschiedene Register die richtig befüllt werden wollen,
und für den Textmodus muss man die Glyphen in den Videospeicher laden
(vermute ich). Werde mir wohl ein DOS-Programm machen, dass sämtliche
Register rausliest.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Rolf hat -im Gegensatz zu Frankl- die Problemstellung erkannt.

Meine erste für richtig viel Geld gekaufte PC-Graphikkarte war eine
ET3000 mit 512 kByte RAM. Die hat damals etwa 500 DEM gekostet und
wurde von mit mit einem NEC Multisync 3D betrieben, der -mit
gnadenlosen 60 Hz- immerhin 800x600 Punkte darstellen konnte, dank der
512 kByte Bildschirmspeicher in sagenhaften 256 Farben.

Übrigens braucht bei den derzeit üblichen* Monitorauflösungen keine
Graphikkarte mehr als 8 MByte Bildschirmspeicher; alles, was darüber
hinausgeht, wird ausschließlich von 3D-Anwendungen genutzt und liegt
sonst ungenutzt brach.



*) bis einschließlich WUXGA (1920x1200) mit 32 Bit pro Pixel. Erst das
30"-Apple-Display braucht mehr, mit über 3000x2000 Pixeln ...

von Marius S. (lupin) Benutzerseite


Lesenswert?

was macht eine durschnittliche ISA grafikkarte eigentlich ausser das
bild aus den speicher ausgeben? Was für zeichenbefehle (im grafik
modus) hat die denn?

Das wäre bestimmt recht nützlich wenn man per hardware auch was
zeichnen könnte denn ansonsten ist der grafikmodus ja sinnlos (der AVR
schaufelt die daten ja niemals schnell genug in den speicher)

von Bob (Gast)


Lesenswert?

Ihr macht echt voll die interessante sache hier. wenn ich die zeit
hätte, würde ich gern mit "probieren".... übrigens mein erster PC war
ein KC87, grins.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Sehr viel mehr als ein einfacher Framebuffer war in ISA-VGA-Karten nicht
drin. Erweiterte Karten (wie die erwähnten Trident- oder Tseng
ET3000/4000) mit "Beschleunigungsfunktionen" hatten Funktionen zum
Kopieren/Verschieben von Bildschirminhalten, aber AFAIK keinerlei
Zeichenfunktionen.

von Benedikt (Gast)


Lesenswert?

@H-A-L-9000
Soweit bin ich in etwa auch mit OKI Karten.
Kannst du mal dein Programm zur ET4000 posten, bei der kann ich noch
nichtmal die BIOS auslesen...
Ein Programm das alle Register ausliest bringt nicht wirklich viel.
Zumindest bei mir: Ich habe ein kleines QBasic Prog geschrieben, das
mit die Register der Karte ausliest, und habe diese genauso auch
eingestellt. Aber wirklich viel konnte ich nicht erkennen.

@Lupin
Die Grafikkarte kann Text oder Grafik darstellen.
Dazu hat man einfach jede Menge Speicher wie bei einem normalen LCD:
Man kann den Speicher lesen und schreiben und so einzelne Pixel
setzen.
Wie schnell man die Daten in den Speicher bekommt ist egal. Für ein
Fullscreen Video wird es sicher nicht reichen, aber z.B. für ein Oszi
schon.

von Bob (Gast)


Lesenswert?

@marius, ist das nicht egal wenn du das bild dann ganz kurz dunkel
machst, wärend du daten reinpumpst (aus nem flash oder so)?

von H-A-L-9000 (Gast)


Lesenswert?

@Benedikt:
Eprom lesen ging eigentlich problemlos - ich habe vorher nur einen
Reset-Impuls gegeben. Muss eigentlich auch so funktionieren.

Karte einschalten:
iow(0x3c3,0x1);

Ansonsten kann man laut vgadoc mit 3c4 index 7 bits 3 und 5 das Eprom
einstellen, wobei 11 c000-c7ff bewirkt.

von Benedikt (Gast)


Lesenswert?

Ich habs Problem gefunden:
Die Karte besitzt keine SMEMR\ und SMEMW\ Pins (B11&B12) sondern nur
die MEMR\ und MEMW\ Pins auf der 16Bit Erweiterung...
Damit läuft es.

von Rolf Magnus (Gast)


Lesenswert?

> Übrigens braucht bei den derzeit üblichen* Monitorauflösungen
> keine Graphikkarte mehr als 8 MByte Bildschirmspeicher; alles, was
> darüber hinausgeht, wird ausschließlich von 3D-Anwendungen genutzt
> und liegt sonst ungenutzt brach.

Brauchen tut sie nicht mehr, aber sinnvoll ist es trotzdem, da dann
Pixmaps für Icons und die ganzen gerenderten TrueType-Fonts und solche
Sachen im Grafikspeicher abgelegt und dadurch um ein Vielfaches
schneller ins Bild geblittet werden können, als wenn sie im
Hauptspeicher lägen. Außerdem werden heute gerne noch Double-Buffering
auch bei einfachen 2D-Fenstern und Backing Store verwendet, welche auch
zusätzlichen Grafikspeicher brauchen. Bei animierten GIFs die einzelnen
Frames alle.
Beim Abspielen von Videos kommt noch das Overlay in der Auflösung des
Videos dazu.
Mehr Speicher kann also durchaus sinnvoll sein, auch ohne 3D, auch
wenn's nicht gleich 256MB sein müßten.

von Hagen (Gast)


Lesenswert?

Ich habe im keller noch einen echt fetten Wälzer stehen "VGA/EGA
Grafikkarten Programmierung". Wird so um die 500 Seiten haben und
befasst sich mit der Hardwareansteuerung der Karten.
Damals brauchte ich es um meine Arkanoid Variante unter DOS zu coden.

Eventuell findet sich ja ein Abnehmer dafür, oder ich könnte mal
schauen und par Tabellen rauskopieren.

Gruß Hagen

von Benedikt (Gast)


Lesenswert?

Die ET4000 Karten die ich habe, verwenden alle die Adressen auf der
16bit Erweiterung. Sie werden zwar nicht unbedingt benötigt, aber
dekodiert, müssen also zumindest auf Masse gelegt werden.

Die ganze Karten die ich habe, haben einen ET4000 W32 Chip, und dazu
habe ich eine gute Dokumentation. Mal schauen wie weit ich diesmal
komme...

von Rolf Magnus (Gast)


Lesenswert?

> Die ganze Karten die ich habe, haben einen ET4000 W32 Chip,

Über die stand anno dazumal auch was in der c't, aber die hab ich
letztens erst weggeschmissen.

von H-A-L-9000 (Gast)


Lesenswert?


von H-A-L-9000 (Gast)


Lesenswert?

Ich kann jetzt malen... 320*480*256 - die Pixel sind irgendwie doppelt
so breit wie sie sein sollten. Allerdings habe ich die ET4000AX ohne
W32 und betreibe sie ausschließlich mit 8 Bit.

von Marius S. (lupin) Benutzerseite


Lesenswert?

Cool! Kannst du mal ein bild machen vom laufenden monitor/aufbau? :D

Hast du es so aufgebaut wie Benedikt?

von H-A-L-9000 (Gast)


Lesenswert?

Ich besitze leider nichts was ein gutes Foto machen könnte.
Zu sehen gäbe es einen blauen Rahmen, eine rote senkrechte Linie und
ein paar grüne Punkte. Oder wahlweise einen S/W-Gradienten.
Mein Aufbau unterscheidet sich doch einigermaßen, aber man kann ja
unabhängig davon auf die I/O oder Speicherzugriffe abstrahieren.

Java->Parallelport->48Port-Erweiterung->ISAslot

von Rolf Magnus (Gast)


Lesenswert?

> 320*480*256 - die Pixel sind irgendwie doppelt so breit wie sie
> sein sollten.

Naja, bei der Auflösungsstufe sind die Pixel nunmal doppelt so breit
wie hoch. 640x480 geht meines Wissens bei Standard-VGA nicht mit 256
Farben. Man bräuchte also einen grafikkartenabhängigen SVGA-Modus.

von Benedikt (Gast)


Lesenswert?

@H-A-L-9000
Könntest du mal deinen Code posten ?

Hast zu dieses Clock Divider Bit gesetzt ?

640x480 bei 256 sollte eigentlich schon Funktionieren, die meisten
Karten konnten (mit ausreichend Speicher) sogar 1280x1024 bei 256
Farben.

von H-A-L-9000 (Gast)


Angehängte Dateien:

Lesenswert?

Das war ja erst nur ein Anfang - vorher hatte ich immer nur gelbe Grütze
auf dem Schirm. Mehr als 640*480*16 kann die Karte freilich, das ist
dann aber nicht mehr Teil des VGA-Standards. An den Clockbits habe ich
auch manipuliert, mit dem Erfolg, dass der Monitor nicht mehr
synchronisiert hat. Ich mach mir jetzt erst mal den Registerscanner,
habe keine Lust die 80-90 Register durch Knobeln herauszufinden. Code
im Anhang.

von Benedikt (Gast)


Lesenswert?

Die Registerwerte kann ich dir liefern (ET4000AX):
640x480, 16 Farben, Grafikmodus:
Nur beim ATC bin ich mir nicht ganz sicher, wegen dem dummen Toogle
Flipflop

Misc Output (0x3C2/C):  227
GDC (0x3CE):
 0             0
 1             0
 2             0
 3             0
 4             0
 5             0
 6             5
 7             15
 8             255
TS (0x3C4):
 0             3
 1             1
 2             15
 3             0
 4             6
 5             0
 6             0
 7             252
CRTC (0x3D4):
 0             95
 1             79
 2             80
 3             130
 4             84
 5             128
 6             11
 7             62
 8             0
 9             64
 10            0
 11            0
 12            0
 13            0
 14            0
 15            0
 16            234
 17            140
 18            223
 19            40
 20            0
 21            231
 22            4
 23            227
 24            255
 25            0
 26            0
 27            0
 28            0
 29            0
 30            0
 31            0
 32            0
 33            0
 34            0
 35            0
 36            0
 37            0
 38            0
 39            0
 40            0
 41            0
 42            0
 43            0
 44            0
 45            0
 46            0
 47            0
 48            0
 49            0
 50            8
 51            0
 52            8
 53            0
 54            67
 55            15
 56            0
 57            0
 58            0
 59            0
 60            0
 61            0
 62            0
 63            0
ATC (0x3C0):
 0             0
 1             1
 2             2
 3             3
 4             4
 5             5
 6             6
 7             7
 8             8
 9             9
 10            10
 11            11
 12            12
 13            13
 14            14
 15            15
 16            1
 17            16
 18            15
 19            0
 20            0

von H-A-L-9000 (Gast)


Lesenswert?

Deine ATC sind korrekt. Wenn du sicher gehen willst lese vor dem
eigentlichen Zugriff das Datenregister, das soll das Flipflop
zurücksetzen. Den 640*480*16-Modus habe ich mit einem Tool aus svgalib
ausgelesen (eine .exe-Datei ist das allerletze, was ich in einem
Linux-Source-Archiv erwartet hätte). Die Speicherkonfiguration unserer
Karten ist offensichtlich unterschiedlich (CRTC Index 32h).
In dem svgalib-Archiv sind auch .regs-Dateien, mit deren Inhalt
640*480*256 und 800*600*256 problemlos zu realisieren waren. Die
kleineren Modi müssen wir wohl selbst rauslesen. Ein Textmodus würde
mich mal interessieren.

von Benedikt (Gast)


Lesenswert?

Kannst du mal den Link zu dem Tool posten ?

Bei den ATC Werten war ich mir nicht so sicher, da die Werte auf den
ersten Blick komisch aussehen (so als würde ich die Register mit den
Indexwerten bschreiben) und danach der Monitor meistens nur noch Müll
anzeigte...

von H-A-L-9000 (Gast)


Lesenswert?

http://www.svgalib.org/
Im source code befindet sich eine "tseng3.exe" (DOS-Programm).
tseng3.c ist der Quellcode dazu.
Die 1-F an Index 1-F ATC sind Absicht.

von Andreas E. (andrease112)


Lesenswert?

Hallo Benedikt & Co

ich wollte mal fragen ob jemand dieses Projekt zu ende geführt hat ?

Ausserdem würde ich gern mehr über das Projekt erfahren.

meldet euch mal ;)

von Benedikt K. (benedikt)


Lesenswert?

Ich habe es irgendwann aufgegeben, da jede Grafikkarte die ich hatte 
anderst angesteuert werden muss und ich leider die Karten von denen ich 
mehrere vom gleichen Typ habe, nicht zum Laufen bekommen habe.

von Andreas E. (andrease112)


Lesenswert?

ich habe mir so ein Buh gekauft "Die Programmierung der EGA/VGA 
Grafikkarte"
Daraus habe ich gelesen, das es ein Standart VGA Bios gibt.

Das soll heissen, dass alle Grafikkarten einen bestimmten Befehlssatz 
unterstüzen.

von Andreas E. (andrease112)


Lesenswert?

ICh glaub dass Buch ist ganz gut wenn man zumindest die Basics von ISA 
und PC Kram hat ...so wie ihr aber ich versteh nicht ganz so viel.
Der Kerl hat sogar Programmbeispiele drin aber leider in Turbo 
Pascal...mhh nicht so ganz meine Sache ... Registerbeschreibungen gibts 
auch

von Andreas E. (andrease112)


Lesenswert?

Naja iss schon ne weile her mit dem Buch.. habs gerade wieder 
herrausgekramt.
also das Programmieren bezieht sich auf einen PC BIOS mit seinen 
Funktionen.

Wenn man also einen Emulator für ein Solches Bios hätte wäre es glaub 
ich nicht so schwer.

Im Beitrag weiter oben war doch glaub ich so ein link für so eine Linux 
geschichte für Bios emulator ?!

von nemon (Gast)


Lesenswert?

was war eigentlich das ziel dieses experiments? ich meine, mit 
eineruc-ansteuerung lässt sich ja einiges machen, nicht nur ein oben 
erwähnter stand-alone-mp3-spieler, sondern auch z.b. ein DSO und 
sonstige geräte zum anzeigen von werten....

von Benedikt K. (benedikt)


Lesenswert?

nemon wrote:
> was war eigentlich das ziel dieses experiments? ich meine, mit
> eineruc-ansteuerung lässt sich ja einiges machen, nicht nur ein oben
> erwähnter stand-alone-mp3-spieler, sondern auch z.b. ein DSO und
> sonstige geräte zum anzeigen von werten....

Genau das war die Idee. ISA Grafikkarten sind leicht erhältlich, nahezu 
kostenlos. Damit hätte man dann ohne viel Aufwand ein Farbdisplay mit 
bis zu 1024x768Pixel und 256 Farben.

Andreas Engler wrote:
> ich habe mir so ein Buh gekauft "Die Programmierung der EGA/VGA
> Grafikkarte"
> Daraus habe ich gelesen, das es ein Standart VGA Bios gibt.
>
> Das soll heissen, dass alle Grafikkarten einen bestimmten Befehlssatz
> unterstüzen.

Ja, aber nur eben wenn die VGA BIOS (was nicht anderes als eine Art Low 
Level Treiber ist) auch genutzt wird. Diese Software in der VGA BIOS 
enthält unter anderem eine Init Routine, und Routinen um Texte oder 
Pixel anzuzeigen. Allerdings ist der Code nur auf einem x86er lauffähig. 
Die VGA BIOS ist also nicht nutzbar, und die meisten Anleitungen (wie 
z.B. dieses Buch) leider nutzlos. Zur wirklichen Low Level 
Programmierung findet man nur äußerst wenig.
Es gibt zwar einen Standard (wie fast bei allem auf einem PC), der aus 
kompatibilitätsgründen auch mehr oder weniger bei jeder Karte vorhanden 
ist, allerdings baut jeder Hersteller noch Zusatzfeatures ein, die jede 
Karte doch irgendwie einzigartig machen, und keine Universalroutinen 
erlauben die wirklich auf jeder Grafikkarte laufen. Auf einem PC stört 
das ja auch nicht, denn die VGA BIOS und der entsprechende Treiber 
stellen wieder eine standardisierte Schnittstelle her.

von V24VGA (Gast)


Lesenswert?


von Andreas E. (andrease112)


Lesenswert?

sieht ganz gut aus das Ding... nur die Serielle Schnittstelle stört mich 
ein bisschen könnte etwas langsam sein oder ?
z.B
640bits  480bits   256FARBEN (= 8 Bits )  / 115000 bit/s d.h. etwa 21 
s Pro Bild ???? oder rechne ich falsch ?

von Kai S. (Firma: ZeuSWarE GmbH) (zeusosc)


Lesenswert?

Warum mit nen µC ne graka ansteuern die VGA signale raushaut wenn man 
mit nen µC diese Selber machen kann:
http://www.serasidis.gr/circuits/AVR_VGA/avr_vga.htm

grüüüße

von Benedikt K. (benedikt)


Lesenswert?

Kai Scheddin wrote:
> Warum mit nen µC ne graka ansteuern die VGA signale raushaut wenn man
> mit nen µC diese Selber machen kann:

- Ein AVR kann keine 256 Farben
- Ein AVR kann keine 640x480 oder gar 800x600 oder 1024x768
- Ein AVR kann keine Grafik

Aber leider ist das ganze nichts geworden, da es keine einheitlichen 
Hardwarestandards gibt. Mittlerweile bin ich zu LCD Controllern mit VGA 
Ausgang (S1D3504/5/6) übergewechselt. Diese lassen sich leicht der µC 
ansteuern und sind relativ günstig.

von Gammla N. (gammla)


Lesenswert?

Servus alle zusammen!
Das Thema interessiert mich auch...

Benedikt K. wrote:

> Aber leider ist das ganze nichts geworden, da es keine einheitlichen
> Hardwarestandards gibt. Mittlerweile bin ich zu LCD Controllern mit VGA
> Ausgang (S1D3504/5/6) übergewechselt. Diese lassen sich leicht der µC
> ansteuern und sind relativ günstig.

Habe jetzt mal nach den "LCD Controllern mit VGA Ausgang" gegoogelt!
Kann aber nicht wirklich was zu denen finden.
Die müssen wohl irgendwie von Epson sein.

Wie kann ich mir die Funktion eines solchen Controllers vorstellen.
So wie die der Grafik LCD Displays, nur dass ich da meinen VGA Monitor 
anschließen kann?!

Wo kann man einen solchen Controller erwerben?

Könnt ihr mir ein paar links geben?

mfg,

Stephan

von Benedikt K. (benedikt)


Lesenswert?

> Habe jetzt mal nach den "LCD Controllern mit VGA Ausgang" gegoogelt!
> Kann aber nicht wirklich was zu denen finden.
> Die müssen wohl irgendwie von Epson sein.

Unter S1D13506 sollte man die Datenblätter von Epson finden.

> Wie kann ich mir die Funktion eines solchen Controllers vorstellen.
> So wie die der Grafik LCD Displays, nur dass ich da meinen VGA Monitor
> anschließen kann?!

Genau. Hauptsächlich sind das eigentlich LCD Controller, die nahezu 
jedes LCD/TFT ansteuern können. Zusätzlich besitzen einige aber auch 
einen VGA und TV Ausgang. Gedacht sind solche ICs für Grafikkarten von 
Embedded PCs oder ähnliches.

> Wo kann man einen solchen Controller erwerben?

Bei Digikey gibt es den S1D13506 und S1D13513, bei CSD den S1D13504. 
Eine passende Platine für den 13506 eventuell noch hier:
Beitrag "VGA  FTF  PAL - Platine für  µController"

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.