zatzen hat geschrieben:
Kannst Du das mit dem Flipping noch ein wenig erklären?
Es wäre für mich sehr interessant weil ich gerne noch kreativ im Bereich Spiele sein würde und noch eine Lösung für möglichst schnelle Grafik suche, d.h. eine Alternative dazu, pro Frame den ganzen Hintergrund zu restaurieren und dann alle Sprites neu zu zeichnen, d.h. in einen Grafikpuffer, und diesen dann erst in den Grafikspeicher zu kopieren.
Hallo zatzen!
Wie die es damals gemacht haben, daß das trotz langsamer Rechner so performt hat: Da waren spezielle Magic-Chips in alle PCs eingebaut, deren Leiterbahnen mit Elfenstaub behandelt waren. Leider werden die seit ca. 1992 nicht mehr hergestellt und nun muß man auf konventionelle Möglichkeiten zurückgreifen, die vor allem viel Nachdenken und Arbeiten beinhalten...
[scnr]
Nö... also, ich erkläre es mal:
(Und, entschuldige, daß ich schon wieder in dieses Horn blase)
Der Grund, wieso die Leute damals auf langsamen Maschinen diese Dinge trotzdem "in Echtzeit" hinbekommen haben, ist, weil sie kreative Alternativen zum MCGA gefunden haben - also Mode-Y, Mode-X, Softscrollregister und allgemein an Grafikkartenregister- /Modes herumzu-tweaken - also all die Dinge, die Du nicht machen willst, weil "will nur meinen MCGA und sonst nichts und trotzdem soll alles so performen wie bei den Tweakern".
Dieses Gemurks an den CGA/EGA/VGA-Registern hätten die nicht gemacht, wenn es auch ohne schnell genug gewesen wäre...
Schade, daß ich nicht die Zeit habe, sonst würde ich Dir mal ein kleines Demo machen:
Wenn man weiß, wie es geht, kann man z.B. (mit Mode-Y) einen 4-Bildschirme-Screen haben (z.B. alle 2x2 Quadrat angeordnet, oder alle 4 nebeneinander oder übereinander) und mit Hilfe von Softscrollregistern und Positionsverschiebungen kann man das Ding in quasi Nullzeit in alle Richtungen scrollen, ohne etwas umkopieren zu müssen. (Thema: Scanline).
Oder eben NOCH größere "Bilder"/Levels, und dabei nur alles was da ist, scrollen und nur der "Streifen", der neu reingescrollt wird, zusätzlich dran-berechnen...
Wenn man's noch schneller haben will, kann man sogar Textmode nehmen - modifizierter Zeichensatz, auch Softscroll... usw...
Das Schreiben in den Grafikkartenspeicher ist nunmal das Nadelöhr an der ganzen Geschichte und wenn man einerseits scrollen will, andererseits aber vom MCGA nicht wegkommt, bleibt einem nur entweder das ganze Bild immer wieder neu generieren UND dann von einem Puffer in den MCGA kopieren -ODER- alle Levelelemente, die "nicht Leerraum" sind, einzeln bewegen (und den Zwischenraum (den "Himmel") quasi freilassen... Aber mit all den komplizierten "Umwegen", die man dann macht, um das Level komplizierter anzuordnen und zu verwalten, nur um beim 1-Screen-MCGA bleiben zu können, frißt man die gesparte "Rasterzeit", die durch weniger VGA-Zugriffe entstehen wieder mit komplexeren CPU-Berechnungen auf.
Typen wie id-Software (vor allem natürlich John Carmack!) haben selbst diesen hundsmiserabel anzusteuernden EGA-Grafikmode dazu gekriegt, softscrollende Spiele darzustellen, mit Sprites und so (Commander Keen). Und Carmack ist ja nicht deswegen der totale Held, weil er immer die simpelste Methode genommen hat und es dann irgendwelche ruckeligen krummen Sachen geworden sind, sondern weil er das Gegenteil gemacht hat: Die Grenzen des Systems bis zum Anschlag ausgelotet.
Und - um damit die eingehende Frage dieses Thread zu beantworten: DAS ist es, wie die damals die Spiele gemacht haben! Wenn man sieht, was Leute irgendwann aus dieser Kiste C64 herausgeholt haben, ein Rechner von 1982 mit Technik vom Ende der 70er... dann kann man sich vorstellen, was eigentlich alles geht und was NOCH VIEL MEHR gehen müßte mit 'ner Maschine mit der 50-fachen CPU-Geschwindigkeit und einer Grafikhardware mit viel mehr Einstellmöglichkeiten... -
Und da muß man auch nicht immer mit der dem C64-gegenüber-PC einzigen Rechtfertigung kommen: "Der C64 hatte ja Hardware-Sprites." - Ja, stimmt! Hatte er. ACHT Stück. 24x21 Pixel (mono) oder 12x21 Pixel (3farbig). Wer sich damit vergleichen will - will sagen: auf einem 286er oder 386er nichtmal acht ca. 20x20-Pixel Sprites in Software hinzukriegen - auf ner 10x bis 50x so schnellen Maschine (mit CPUs, die viel mehr Befehle haben, inkl. Hardware-Multiplikation/Division - auch wenn man die für Sprites nicht braucht...) - naja. Was soll man da sagen? Wenn der C64 mal mehr als 8 Sprites oder größere "Sprites" dargestellt hat, war das übrigens NICHT "Hardware"... Genauso wie z.B. ruckelfreies 8-Wege-Scrollen von VOLLGRAFIK auf dieser 8-Bit-Maschine NICHT "Hardware" war.
Also, ja: Man kann auch auf einem PC mit seiner komischen VGA ziemlich coole Dinge tun. Man muß es aber wollen.
Ich könnte Dir z.B. einen 160x200 Mode hinbauen, der dafür aber 2 Bildschirmseiten hat und trotzdem "plain" (also alle Pixel direkt neben/-übereinander), sozusagen ein "halber MCGA" mit 2 Seiten (für Double-Buffering). Mit einem weiteren Trick kann man auch daraus wieder einen 320x200 Mode mit 2 Seiten machen, allerdings dann mit nur 16 (statt 256) Farben: Jedes Byte enthält dann 2 Pixel (im High- und Low-Nybble).
Aber alles was in VGA "plain" ist, greift nunmal max. auf 65536 Bytes zu, weil dazu die 4x65536 "zusammengeschaltet" werden, weil der MCGA ja so ein weiterentwickelter CGA ist. Um die vollen 4x65536 Bytes (also 262144 Bytes, bzw. 256kByte), die eine VGA EIGENTLICH hat, zugreifen zu können, muß dieses "chaining" aufgelöst werden. Allerdings hat man dann eben die komische Mode-Y Anordnung, auf die man sich eben einlassen muß, wenn man das haben will, dafür aber 262144 Pixel, die man (fast) so anordnen kann wie man will - alles eine Frage von Scanlines und VGA-Registern. Da geht auch sowas wie 400x300 oder 256x256 oder 512x512... Solange das Produkt <=262144 ist, reicht es für ein Bild. Und wenn das Produkt <=131072 (128kByte) ist, reicht es für ZWEI Bilder.
Ich hatte ehrlich schonmal überlegt, so ein Textmode-Spiel zu machen, wo ich die Figuren ("Sprites") dann aus Zeichen zusammensetze, die aber innerhalb "rotiert" werden, um quasi alle "weichen" Positionen zu erreichen. Und die Hintergründe dann "hard-scrollen" will sagen: bei jedem 8. Schritt wird "umkopiert" (oder Bildanfang-Pointer verschoben!) und die restlichen 7 Schritte machen die Softscroll-Register. Das gleiche geht auch in MCGA/Mode-Y usw. Nur weil die Pixel da doppelt-breit sind (gegenüber der Pixelclock) hat das Register da nur 4 Einstellungen (0,2,4,6), weil die "ungeraden" komische Effekte erzeugen. Eigentlich ist dem VGA-Softscroll-Register nicht nur 8, sondern sogar 9 Schritte (0-8) möglich, weil es ja auch 9 Pixel breite Zeichen im Textmode haben kann. Allerdings kann man den Textmode auch auf 8er forcieren - wäre für so ein Textmode-Spiel wahrscheinlich auch schicker.
Naja, langer Text schon wieder - ich weiß. Wollte damit nur sagen: Das - und vieles andere - sind die Sachen, die damals gemacht wurden, um "Rasterzeit" zu sparen, um also z.B. ruckelfreies Scrolling selbst mit den damaligen Maschinen hinzukriegen. Schonmal Turrican 2 für PC gesehen? Der tweakt da übrigens die VGA wie total böse - aber das Ergebnis rechtfertigt es ja auch.
So, das soll's von mir dazu erstmal gewesen sein.
P.S.: Ach ja, das "Flipping": - Ich glaube, funkheld meinte damit (u.a.) eben das Double-Buffering - also Zeichnen auf einem "Bild", während das andere angezeigt wird und dann umschalten. Bei zusätzlicher Beachtung des Vertical Retrace konnte das eben gehen - zusammen mit einigen anderen der obengenannten Dinge.