REP MOVSW und VGA...

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
Brueggi

REP MOVSW und VGA...

Beitrag von Brueggi »

Da ich endlich mal meine Adventure-Engine vom Amiga zum PC portieren möchte und was Grafik angeht noch sehr vom Amiga verwöhnt bin, habe ich eine Frage:
Das Spiel soll auf allen PCs ab 80286 (daher REP MOVSW zum Kopieren) und VGA (320*200) laufen. Ich will unabhängige Bildschirme im Arbeitsspeicher verwalten (64K pro Bild) und dann nach $A000:$0000 kopieren. Wenn ich den Sync berücksichtige - ist REP MOVSW dann so schnell, das es selbst auf einem (sagen wir 10 oder 12 MHz 80286) kein flackern gibt?
Benutzeravatar
Nilquader
CONFIG.SYS-Autor
Beiträge: 269
Registriert: Mo 26. Jan 2009, 23:00
Kontaktdaten:

Re: REP MOVSW und VGA...

Beitrag von Nilquader »

Hat eine VGA denn nicht in der Regel (Solange es nicht die Ur-VGA ist) mal mindestens 256K RAM, in der du 3-4 Screens unterbringen kannst? Schnell genug die Bank umzuschalten dürfte doch kein Problem sein.
Pentium II, 266MHz, 64 MB RAM, 3.2 GB HDD, Voodoo 3 2000, SB AWE64 Gold, 1GB SD mit NC100SDv2-Adapter
Brueggi

Re: REP MOVSW und VGA...

Beitrag von Brueggi »

Klar geht das, aber mich würde auch die oben beschriebene Methode interessieren ;-)
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: REP MOVSW und VGA...

Beitrag von freecrac »

Brueggi hat geschrieben:Klar geht das, aber mich würde auch die oben beschriebene Methode interessieren ;-)
Mein 80286 hatte bereits 20mhz und lagsamere PCs hatte ich noch nie. Falls es mit 10mhz bereits flimmert, dann kann wohl nur noch ModeX helfen.
Wenn ich das noch richtig in Errinerung habe, dann braucht man mit ModeX nur noch eine viertel der Daten zu schreiben um den gesamten Bildschirm zu füllen.
Falls ich mich täusche, dann bitte richtig stellen.

Dirk
Brueggi

Re: REP MOVSW und VGA...

Beitrag von Brueggi »

War ModeX nicht eine andere Anordnung der Pixel, so das die 320*200 Punkte nicht "quer" durch den ganzen VRAM laufen, sondern Blockweise? Ansonsten wird sich sicher nichts an den knapp 64K pro Bild ändern?
wobo
DOS-Guru
Beiträge: 614
Registriert: So 17. Okt 2010, 14:40

Re: REP MOVSW und VGA...

Beitrag von wobo »

ModeX ist quasi der native 256-Farben-Mode der ursprünglichen VGA von ibm. Diese war eigentlich lediglich eine verbesserte, d.h. mit statischen Bitplanes arbeitende und für 16 Farben designte EGA-Karte.

Bei ModeX befinden sich 4 Pixel an der selben Adresse, weil eben die 4 Pixel über die 4 Bitplanes quasi 3-dimensional verteilt werden.

Unter bestimmten Umständen benötigt man dann tatsächlich nur ein Viertel der Rechenzeit. Z.B. dann, wenn man Flächen einfarbig füllen will, oder wenn man innerhalb des Videorams BitMaps kopieren will. Beim Flächenfüllen sagt man dann halt der VGA, dass alle 4 Bitplanes freigeschaltet werden und schreibt dann den gewünschten Farbwert an die jeweilige Speicherstelle. Dann werden alle 4 von der Speicherstelle / Adresse erfassten Pixel auf einen Schlag gezeichnet.

Will man aber die Daten aus dem Ram in die VGA bringen, hilft ModeX nichts. 64k Daten bleiben 64k Daten, die in je 16k -Happen (für jede bitplane) kopiert werden müssen.


Brueggi will aber wohl den Standard Mode $13 mit linearem Adressraum benutzen. Grundsätzlich denke ich nicht, dass ein 12Mhz-286er ein 64k-Bild innerhalb des vertical Reraces kopieren kann. Ich kann das aber gerne Mal auf meinem 386sx16 ausprobieren, der in etwa ein 286-16 sein müßte.

Das bedeutet aber nicht, dass es deswegen unerträglich Flimmern muss. Das Flimmern entsteht meines Wissens immer nur dann, wenn der Hintergrund restauriert und deswegen ein Vordergrund - BitMap kurzzeitig verschwindet, weil man es erst nach dem Hintergrund-Restaurieren wieder drauf kopiert.

Wenn man aber die Animation im Arbeitsspeicher in das Hintergrundbild einfügt, und dann das fertige komplette 64k-Bild in die VGA kopiert fällt dieser Effekt weg.

Auf langsamen PCs müsste man dann nur einen störenden Effekt haben, nämlich den, wenn der Kathodenstrahl die VGA-Kopierroutine überholt. Dann sollte oberhalb des Kathodenstrahls das neue Bild und unterhalb noch das alte Bild angezeigt werden. Auf Höhe des Kathodenstrahls selbst ist eine Zeile verschmiert (sieht man z.B. bei tyrian auf langsamen PCs). Wenn das Hintergrundbild statisch ist, reduziert sich der Effekt auf die eine Zeile, was meistens erträglich ist.
freecrac
DOS-Guru
Beiträge: 861
Registriert: Mi 21. Apr 2010, 11:44
Wohnort: Hamburg Horn

Re: REP MOVSW und VGA...

Beitrag von freecrac »

wobo hat geschrieben:ModeX ist ...
Danke für die Infos.

Dirk
Brueggi

Re: REP MOVSW und VGA...

Beitrag von Brueggi »

Hallo Wobo :-)

Ja, so in etwa hab ich mir das auch vorgestellt - alle notwendigen Berechnungen werden im Arbeitsspeicher durchgeführt, und das fertige Bild dann in den VRAM kopiert, wobei es eigentlich auch keine vollen 64K sind, da die Spielszene ja schmaler ist. Wenn die letzten 286 auf Ebay nicht so verdammt teuer gewesen wären... :-(
Antworten