VGA-Karte und Interrupt?

Auswahl, Einrichtung und Betrieb von Rechnern und Komponenten
Brueggi

VGA-Karte und Interrupt?

Beitrag von Brueggi »

Hi Ho! Im PC Intern hab ich gelesen, das der INT 2 auch von einer VGA-Karte genutzt werden kann. Jedoch auch, das nicht alle Karten einen Interrupt erzeugen können. Nichtmal die original IBM-Karten. Frage: Was ist dran an der Interrupt-Geschichte? Gibt es Software die sowas ausnutzt und: Welche Karten können eigentlich dann einen Interrupt auslösen?
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: VGA-Karte und Interrupt?

Beitrag von freecrac »

Brueggi hat geschrieben:Hi Ho! Im PC Intern hab ich gelesen, das der INT 2 auch von einer VGA-Karte genutzt werden kann. Jedoch auch, das nicht alle Karten einen Interrupt erzeugen können. Nichtmal die original IBM-Karten. Frage: Was ist dran an der Interrupt-Geschichte? Gibt es Software die sowas ausnutzt und: Welche Karten können eigentlich dann einen Interrupt auslösen?
Es gibt verschiedene Interrupts, solche die von einem Gerät ausgelöst werden können und Software-Interrupts die über einen int-Befehl aufgerufen werden. Ich weiss nicht ob Grakas selber einen Interrupt auslösen können.
Diverse Bios-Funtionen der Grakas werden gewöhnlich über int 10h aufgerufen.

Dirk
Brueggi

Re: VGA-Karte und Interrupt?

Beitrag von Brueggi »

Also in der Registerbeschreibung sind diverse Bits vermerkt, mit denen man der GraKa erlauben kann, bei einem Vertikalen Sync einen Int 2 auszulösen - habs auch gleich mal mit meiner Mach64 und der Cirrus Logic probiert - die können es beide nicht :-(
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: VGA-Karte und Interrupt?

Beitrag von freecrac »

Brueggi hat geschrieben:Also in der Registerbeschreibung sind diverse Bits vermerkt, mit denen man der GraKa erlauben kann, bei einem Vertikalen Sync einen Int 2 auszulösen - habs auch gleich mal mit meiner Mach64 und der Cirrus Logic probiert - die können es beide nicht :-(
Mhm, dann können so etwas vermutlich nur wenige GraKas.

Dirk
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: VGA-Karte und Interrupt?

Beitrag von DOSferatu »

Ein Kumpel hat daaamals[tm] auch damit rumprobiert - Scrolling mit Graka-INT für Vertical Retrace. (Daher weiß ich darüber so genau Bescheid.) Fand er gut - bis er herausfand, daß nur so ca. 30-40% der (damals) gängigen Grafikkarten diesen IRQ auslösten. Und von den heutigen wahrscheinlich noch weniger. D.h. in den meisten Grafikkarten war das nicht eingebaut.
D.h. WENN man eine Grafikkarte findet, die diesen INT auslöst, hat man schon Riesenglück. Man sollte sich bei der Programmierung aber nicht darauf verlassen - es sei denn, mal will nur einen sehr kleinen Kundenkreis bedienen.
Und ja - ich weiß, wie Mist das ist - denn ein Hardware IRQ der Grafikkarte bei Vertical Retrace wäre ein Traum für jeden Grafikprogrammierer. Aber man muß eben damit leben, daß VGA-Karten sowas in den meisten Fällen nicht anbieten.
Übrigens:
Der C64 (bzw der eingebaute Grafikchip) hat sogar einen Interrupt, für den man sogar die Rasterzeile angeben kann, wann er auslösen soll (und sogar mehrmals pro Bildaufbau möglich, wenn man ihn immer wieder rücksetzt. (Damit werden sehr viele tolle Effekte erzeugt, z.B. das beliebte Sprite-Vervielfältigen (Sprite-Multiplexing), Rasterbars, ruckelfreies Scrollen, usw). Und für 'n PC und die Grafikkarten darin wäre das eine wirklich tolle Erfindung gewesen - hat nur leider keiner (bzw kaum einer) dran gedacht. Schade.
Brueggi

Re: VGA-Karte und Interrupt?

Beitrag von Brueggi »

Ich persönlich fand die Copperliste am Amiga wesentlich bequemer, immerhin braucht man dann die CPU garnicht mehr, eigentlich war das ja meine Absicht, mit Rastereffekten am PC zu experimentieren. Ich hatte zwar schon wunderschöne Balken (ohne INT2), aber damit verbunden das schöne "Schneegestöber" am linken Bildrand. Find ich schon seltsam - es ist in der Doku vorgesehen, das INT2 von der GraKa benutzt werden kann, aber dann machts keiner... :-(

Wie programmiert man dann eigentlich "Copper-Effekte" am PC? Gesehen hab ich sowas mal - aber nur ansatzweise, und nicht im Textmode (meine Rasterbalken liefen ja im Textmode)?
Benutzeravatar
Nilquader
LAN Manager
Beiträge: 211
Registriert: Mo 26. Jan 2009, 23:00
Kontaktdaten:

Re: VGA-Karte und Interrupt?

Beitrag von Nilquader »

Brueggi hat geschrieben: Wie programmiert man dann eigentlich "Copper-Effekte" am PC? Gesehen hab ich sowas mal - aber nur ansatzweise, und nicht im Textmode (meine Rasterbalken liefen ja im Textmode)?
Wenn ich mich jetzt nicht täusche, steht dazu was in "PC Underground" von Boris Bertelsong und Matthias Rasch. Aber wie die das jetzt machen, hab ich mir noch nicht angesehen... Wenn du das Buch nicht hast, schaue ich gerne mal rein und kopiere dir ggf. die relevanten Seiten.
Pentium II, 266MHz, 64 MB RAM, 3.2 GB HDD, Voodoo 3 2000, SB AWE64 Gold, 1GB SD mit NC100SDv2-Adapter
drzeissler
DOS-Gott
Beiträge: 2347
Registriert: Mo 8. Feb 2010, 16:59

Re: VGA-Karte und Interrupt?

Beitrag von drzeissler »

ich habe von dem was ihr schreibt zwar keine ahnung, was mir aber aufgefallen ist, ist dass es verschiedne dos-demos gab die WIRKLICH ruckelfrei scrollten und manche die vor sich hinzuckten. am c64 und am amiga war das fast immer so. ein ruckelfreies scrollen war damals (1990) für mich das non plus ultra.

ich hab am 286er ein intro/demo das sieht toll aus, läuft supergeschmeidig mit sound und die bars scrollen absolut ruckelfrei.

ich such es mal raus...http://www.pouet.net/prod.php?which=4209


das geht leider nicht am 286er, vielleicht mit meinem 486er
http://www.pouet.net/prod.php?which=1444
CPU: 486 DX2/66 MOBO: SNI-D882 RAM: 3x16MB - FDD: 3,5" 1,44MB HDD: 6,4GB Seagate ISA(1): Audican32Plus PCI(1): 3com TX 905 OS: MsDos622 - Win95a - WinNT 3.51
DOSferatu
DOS-Übermensch
Beiträge: 1145
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: VGA-Karte und Interrupt?

Beitrag von DOSferatu »

Man scrollt weich, indem man das Bit testet, das die VGA-Karte setzt/löscht, wenn ein Vertical Retrace auftritt. Und das bedeutet: WARTEN, bis einer kommt. Und ja, ich weiß wie besch...eiden das klingt. Es funktioniert natürlich nur, wenn man den Bildaufbau schneller hinkriegt als die Monitor-Bildwiederholfrequenz, also wenn der Monitor mit 60 Hz arbeitet, darf es nur 1/60 Sekunde dauern.
Desweiteren arbeitet man bei solchen Dingen natürlich mit mindestens Double Buffering.
Brueggi

Re: VGA-Karte und Interrupt?

Beitrag von Brueggi »

@Nilquader: Hi! Danke für das Angebot! Ich habe das Buch leider nicht. Diese Infos würde mich aber brennend interessieren :-)
wobo
DOS-Guru
Beiträge: 609
Registriert: So 17. Okt 2010, 14:40

Re: VGA-Karte und Interrupt?

Beitrag von wobo »

Brueggi hat geschrieben:Ich persönlich fand die Copperliste am Amiga wesentlich bequemer, immerhin braucht man dann die CPU garnicht mehr, eigentlich war das ja meine Absicht, mit Rastereffekten am PC zu experimentieren. Ich hatte zwar schon wunderschöne Balken (ohne INT2), aber damit verbunden das schöne "Schneegestöber" am linken Bildrand. Find ich schon seltsam - es ist in der Doku vorgesehen, das INT2 von der GraKa benutzt werden kann, aber dann machts keiner... :-(

Wie programmiert man dann eigentlich "Copper-Effekte" am PC? Gesehen hab ich sowas mal - aber nur ansatzweise, und nicht im Textmode (meine Rasterbalken liefen ja im Textmode)?
1.
Was die genaue Ursache des Schneegestöbers ist, habe ich noch nicht herausgebracht. Schneegestöber tritt bei VGAs eigentlich immer nur im Zusammenhang mit dem Setzen der Palettenregister auf. Damit ergeben sich meines Erachtens zwei mögliche Ursachen für das Schneegestöber: Einmal, wenn entweder die VGA oder die CPU zu langsam ist, um die angeforderten Palettenregister-Operationen durchzuführen. Alternativ, weil es eine VGA einfach nicht mag, wenn während des Bildaufbaus das Palettenregister geändert wird. Was die Ursache ist, wie gesagt, habe ich bisher nicht ermitteln können.

Ohne Schneegestöber zu verursachen, kann das Palettenregister wohl nur dann verändert werden, wenn man es während eines Retraces setzt. Dabei scheint es jedenfalls so zu sein, dass es bei vielen 8-bit - VGA-Karten, aber auch einigen 16-bit-Karten (zumindest bei meinem eigentlich recht schnellen WD90c11-Chip (Paradise) auf 386sx16) einfach nicht möglich ist, alle 256 Farben innerhalb eines Retraces zu setzen. Da bleibt nur, wenn man 256 Farben setzen will, dies in zwei 128-Farben-Happen verteilt über zwei Retraces zu machen.

Diese VGA - Karten mögen im Übrigen auch das Lesen der Palettenregister während des Bildaufbaus nicht. Wenn ich jedenfalls auf meiner Paradise (wd90c11) die Palettenregister ohne Abgleich mit dem Retrace (und aufgeteilt in zwei 128-Farben-Happen) auslese, erhalte ich vereinzelt falsche Farben.

Das Problem mit dem Schneegestöber oder Fehler beim Aulesen der Palettenregister habe ich übrigens überhaupt nicht mehr bei AGP, PCI und VL-Karten feststellen können. Ich denke daher, dass das SChneegestöber vorrangig ein Problem älterer ISA-VGA-Karten ist.


2.
Hinsichtlich der Copper-Effekte (= ein horizontaler CopperBar im Textmodus) hatte ich Anfangs auch das Schneegestöber. Ich habe dann, das Setzen der Palettenregister auf die Anzahl beschränkt, die zur Anzeige des aktuellen Copperbars (ich hatte nur einen) benötigt werden. Bei einem Copperbar über 31 Zeilen setze ich also maximal 32 Palettenregister (a 3 Byte natürlich). Dann habe ich bei einem Copperbar wenigstens keinen Schnee.


Da Du einen CopperBar im Textmode ja schon hast, meinst Du wohl diese irren Copper-Effekte, die man auch bei Dr.Zeissler´s zweiten Link auf das DEMO von TFL sehen kann. Keine Ahnung, wie das geht. Einen horizontalen CopperBar (Anfänger-Copper) habe ich mit viel Anlauf ja noch verstanden, mehr aber auch nicht. Meine alleresten CopperBars waren sogar reines ColorCycling: ich war danach noch jahrelang überzeugt, ich hätte das Prinzip verstanden...

Diese Irren Copper-Effekte sind ja vertikal und z.B. bei Act1 von Psychic Link für 386er (http://www.pouet.net/prod.php?which=2498) sogar diagonal. Es kann also nicht damit getan sein, ständig den horizontalen Rectrace zu überwachen. Denn anscheinend wird das Palettenregister innerhalb des Aufbaus einer Zeile geändert. Die Position des Kathodenstrahls kann man meines Wissens aber nicht abfragen. Man müßte die Position vielleicht berechnen bzw. mittels Timer mitverfolgen. Schließlich weiss man, wieviele Zeichen die VGA pro Zeile ausgibt (Register 00, Port $3d4,$3d5) und, dass die Zeilenfrequenz bei VGA immer 31.5 kHz beträgt. Hieraus könnte man also die Position des Kathodenstrahls während des Zeilenaufbaus ermitteln, weil man den Start des Zeilenaufbaus ja durch das Bit für den (horizontalen) Retrace abschätzen kann.

Aber wie gesagt: keine Ahnung und zuuu schwer für einen alten Mann.





PS: @Dr.Zeissler: Danke für den Link auf die Demos. Das erste (Joop) kannte ich noch nicht. Das rennt auf meinem 386sx16 echt wie sau. Und dazu noch Adlib-Sound. Hat Spaß gemacht!
drzeissler
DOS-Gott
Beiträge: 2347
Registriert: Mo 8. Feb 2010, 16:59

Re: VGA-Karte und Interrupt?

Beitrag von drzeissler »

wobo hat geschrieben:
Brueggi hat geschrieben:PS: @Dr.Zeissler: Danke für den Link auf die Demos. Das erste (Joop) kannte ich noch nicht. Das rennt auf meinem 386sx16 echt wie sau. Und dazu noch Adlib-Sound. Hat Spaß gemacht!
das sieht echt supi aus gell und die musik dürfte vom ultima6 intro sein.
die farbauswahl, die scroller und die musik sind für die paar kb echt toll
und das sogar ruckelfrei am 286er mit 10 Mhz!
CPU: 486 DX2/66 MOBO: SNI-D882 RAM: 3x16MB - FDD: 3,5" 1,44MB HDD: 6,4GB Seagate ISA(1): Audican32Plus PCI(1): 3com TX 905 OS: MsDos622 - Win95a - WinNT 3.51
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: VGA-Karte und Interrupt?

Beitrag von freecrac »

Brueggi hat geschrieben:Wie programmiert man dann eigentlich "Copper-Effekte" am PC? Gesehen hab ich sowas mal - aber nur ansatzweise, und nicht im Textmode (meine Rasterbalken liefen ja im Textmode)?
Für Copper-Balken im Textmode(3) werden die Farbanteile(Port: 3C8h/3C9h) verändert: http://www.dosforum.de/viewtopic.php?f= ... per#p16435

Dirk
Brueggi

Re: VGA-Karte und Interrupt?

Beitrag von Brueggi »

@Wobo: Gabs dieses "Schneegestöber" nicht auch schon bei CGA? Amüsant - meine ersten "Copperbars" waren auch nichts anderes als Colorcycling :-)

@freecrac: Danke für den Link - gleich mal deine Sources durchschauen :-)
freecrac
DOS-Guru
Beiträge: 836
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: VGA-Karte und Interrupt?

Beitrag von freecrac »

DOSferatu hat geschrieben:Man scrollt weich, indem man das Bit testet, das die VGA-Karte setzt/löscht, wenn ein Vertical Retrace auftritt. Und das bedeutet: WARTEN, bis einer kommt. Und ja, ich weiß wie besch...eiden das klingt. Es funktioniert natürlich nur, wenn man den Bildaufbau schneller hinkriegt als die Monitor-Bildwiederholfrequenz, also wenn der Monitor mit 60 Hz arbeitet, darf es nur 1/60 Sekunde dauern.
Desweiteren arbeitet man bei solchen Dingen natürlich mit mindestens Double Buffering.
Es gibt wohl auch die Möglichkeit den Zeitpunkt genau zu berechnen, so dass für solche Copper-Effekte nur zum Anfang auf den Vertical Retrace gewartet wird, um die Berechnung damit zu synchronisieren.
Während des Ablaufes werden dann Befehle ausgeführt deren Verarbeitungsgeschwindikeit in den zeitlichen Ablauf genau hinein passen.
Diese Befehle können dann auch während des Bildaufbaus die CRTC-Parameter zur Erzeugung des Bildes manipulieren.

Dirk
Antworten