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.
> 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?
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).
Sollte der Vesa-Standard da nicht Abhilfe schaffen, oder bringe ich da was durcheinander?
Das, was du meinst, ist eigentlich nur ein BIOS (manchmal auch ein TSR unter DOS). Das hilft somit nicht.
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.
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.
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
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...
> diesen Freaks einen Tipp
Bestimmt, wenn se nicht grad den Kernel neu kompilieren.
> 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.
@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.
> 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.
@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...
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.
@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.
Hallo Benedikt, könntest du hier mal den Schaltplan reinstellen, wie du ISA mit dem µC verbindest. Gruß Thomas
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.
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.
@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).
Ich wollte mal fragen ob es davon was neues gibt? ich finde das sehr interessant..
@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?
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 ?
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 ?
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.
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.
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.
> 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.
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.
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
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.
Was ist eigentlich mit einem 6845 (klassischer CRT-Controller für Homecomputer) oder was ähnlichem? Hat das schon mal jemand versucht?
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
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
@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.
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.
@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
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.
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.
Ä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?
Ä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
> Ä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?
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.
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 ...
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)
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.
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.
@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.
@marius, ist das nicht egal wenn du das bild dann ganz kurz dunkel machst, wärend du daten reinpumpst (aus nem flash oder so)?
@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.
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.
> Ü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.
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
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...
> 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.
Sieht ziemlich ausführlich aus: http://www.jalix.org/ressources/miscellaneous/~vrac/faqsys/docs/vga.doc
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.
Cool! Kannst du mal ein bild machen vom laufenden monitor/aufbau? :D Hast du es so aufgebaut wie Benedikt?
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
> 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.
@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.
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.
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
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.
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...
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.
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 ;)
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.
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.
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
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 ?!
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....
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.
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 ?
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
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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.