home *** CD-ROM | disk | FTP | other *** search
/ ftp.uni-stuttgart.de/pub/systems/acorn/ / Acorn.tar / Acorn / acornet / fun / mags / hl-03-93.arc / !HL-03_93_Text_Tips < prev    next >
Text File  |  1993-07-30  |  9KB  |  171 lines

  1.  
  2.  
  3.  
  4. ÿÿÿÿÿÿÿÿÿÿ Horizontales Scrolling ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  5.  
  6.  
  7. Und nun ein Artikel ⁿber das horizontale Scrolling per VIDC, also echtes
  8. Hardware-Scrolling. Und wer kennt sich damit schon besser aus, als der
  9. berⁿhmte ACE (alias Michel Fasen), welcher grandiose Meisterwerke wie das
  10. PowerDemo, Agony-Demo, Beast-Demos, ArkanoidII, etc. geschrieben hat und seit
  11. kurzem begeisterter Hardliner-Leser ist. Mit den Beispielprogrammen zusammen
  12. lΣ▀t sich nun Hardwarescrolling in allen Richtungen relativ leicht
  13. nachvollziehen.
  14.  
  15. Ich ▄bersetzte Michels Originalartikel und formulierte ihn z.T. noch leicht
  16. aus. Aber ⁿberlassen wir nun dem "Ass" die Arena:
  17.  
  18.  
  19. " In der der ersten Ausgabe des Hardliners wurde der wundersch÷ne Begriff
  20. Scrolling nΣher erforscht. Vertiakles Scrolling, um genau zu sein. Aber
  21. natⁿrlich gibt es auch horizontales Scrolling.
  22. Horizontales Softscrolling ist etwas problematisch, da es meistens viel
  23. CPU-Zeit ben÷tigt, um das ganze Bild horizontal zu verschieben. Es gibt
  24. mehrere Arten, horizontalen Softscroll zu machen, wie folgende Beispiele
  25. zeigen. Alle Zeitangaben gelten fⁿr einen 20 MHz ARM3, und in Mode 13.  {Wieso
  26. eigentlich 20 MHz? Das sind rund 5 MHz weniger als ⁿblich.. Ed}
  27.  
  28. - Lade Byte X und schreibe es nach X-1; wiederhole das 320*256 mal und Du hast
  29. eine Routine, die dann insgesamt 0.065 Sekunden ben÷tigt. Ein VSync dauert
  30. 0.02 Sekunden (mit 50 Hz). Diese Methode ist also nicht gerade eindrucksvoll.
  31.  
  32. - Lade das Langwort X und schreibe es nach X-4; wiederhole das (320*256)/4 mal
  33. und Du hast eine Routine, die 4 mal so schnell wie die obere ist: sie ben÷tigt
  34. jetzt 'nur' noch 0.16 Sekunden, ist aber wiederum nicht immer anwendbar, da
  35. sie gleich um 4 Pixel auf einmal scrollt.
  36.  
  37. - Lade multiple Langworte (LDM) ab Adresse X und schreibe sie nach X-48 (z.B.
  38. mit R1-R12); wiederhole das ganze (320*256)/48 mal, und nun ben÷tigt die Sache
  39. nur noch 0.0054 Sekunden. Es sind aber wiederum 4 Pixels auf einmal bewegt
  40. worden. Alles in allem ist diese Methode die einfachste zum Programmieren, die
  41. schnellste in der Ausfⁿhrung, und das Scrolling ist auch noch gut zu
  42. gebrauchen.
  43.  
  44. - Lade multiple Langworte, verschiebe sie intern nach rechts und schreibe die
  45. ganze 'Wurst' zurⁿck. Diese Methode ist dann nicht so schnell wie die vorige
  46. (sie ben÷tigt nun 0.012 Sekunden = 60% CPU-Zeit innerhalb eines 50 Hz VSyncs),
  47. aber sie sehr leicht so zu verΣndern, da▀ sie 1, 2 oder auch 3 Pixel auf
  48. einmal scrollt. Dieses Verfahren arbeitet aber nur aktzeptabel, wenn es gilt,
  49. einen Teilbereich des Bildes zu scrollen, da der ARM2 nicht so schnell wie der
  50. ARM3 ist. Das Beispielprogramm "SoftScroll" zeigt, was mit solchem
  51. Pixel-Softscroll gemeint ist.
  52.  
  53. Zusammenfassend lΣ▀t sich sagen, da▀ Softscrolling mit weniger als 4 Pixel auf
  54. einmal zu langsam ist, wenn es auf das ganze Bild angewandt wird. Wenn wir
  55. eine wirklich extrem schnelle Methode fⁿr Scrolls wollen, mⁿssen wir wohl den
  56. VIDC und MEMC etwas nΣher untersuchen. Um den folgenden Text voll zu
  57. verstehen, bietet es sich an, den Artikel ⁿber vertikales Scrolling im ersten
  58. Hardliner nachzulesen.
  59. {Ich m÷chte noch anmerken, da▀ viele pixel-scrollende Spiele gar kein
  60. Scrolling anwenden, sondern ihr Bild jedesmal komplett aufbauen, mit rotierten
  61. Hintergrⁿndbl÷cken, etc etc, was natⁿrlich schneller als jeder Softscroll ist,
  62. aber auch wesentlich mehr Speicherplatz ben÷tigt. Aber eigentlich ist das
  63. wieder ein ganz anderes Kapitel (vielleicht ein zukⁿnftiger Artikel im HL?)
  64. und deshalb - Silentium. Ed} [Hey Ed, war das eben ein indirektes Angebot,
  65. mal einen solchen Kurs zu erstellen ? Tim]
  66.  
  67.  
  68. Der VIDC benutzt zwei Anzeige-Tabellen, oder auch Einheiten genannt, eine
  69. physikalische, und eine logische.
  70.  
  71. Die vier physikalischen Register sind:
  72.  - Horizontal Display Start Register  (&8C)
  73.  - Horizontal Display  End  Register  (&90)
  74.  - Vertical   Display Start Register  (&AC)
  75.  - Vertical   Display  End  Register  (&B0)
  76.  
  77. Die vier logischen Register sind:
  78.  - Horizontal Border Start Register   (&88)
  79.  - Horizontal Border  End  Register   (&94)
  80.  - Vertical   Border Start Register   (&A8)
  81.  - Vertical   Border  End  Register   (&B4)
  82.  
  83. Die physikalische Einheit legt die physikalische Bildschirmgr÷▀e fest (also
  84. auch, wieviel RAM-Speicher das Bild ben÷tigt). Zu diesem Zweck haben wir einen
  85. Mode 127 erstellt (siehe Diskette), welcher prinzipiell dem Mode 13
  86. entspricht, aber 44x36 Zeichen gro▀ ist, anstatt 40x32. Warum? Nun, an jeder
  87. Seite des Randes wurden 16 Pixel hinzugefⁿgt, was zwei Zeilen bzw. zwei
  88. Spalten extra an den vier RΣndern entspricht. Warum wir das brauchen, wird
  89. nachher erklΣrt.
  90. Wo genau das Bild auf dem Monitor erscheint, wird durch die physikalischen
  91. Register bestimmt. Wenn wir nun beide horizontalen Register "Display Start"
  92. und "Display End" jeweils um 1 erniedrigen, so wird das gesamte sichtbare Bild
  93. um 2 Pixel nach links geschoben (um 2 Pixel deshalb, da der VIDC nur in
  94. Einheiten von geraden Pixel-Zahlen programmiert werden kann).
  95.  
  96. Die logische (sichtbare) Bildschirmgr÷▀e ist durch die logischen Register
  97. festgelegt. Wenn der "Border" (Border-Register) vor dem "Display"
  98. (Display-Register) beginnt, so stellt der VIDC einen Border dar  {den jeder
  99. sicherlich noch vom CPC her kennt. Ed} . Wenn der Border nach dem Display
  100. beginnt, wird der "Fehlbereich" einfach schwarz dargestellt. Das gilt fⁿr
  101. oben, unten, links und rechts, also alle vier RΣnder.
  102.  
  103. Wir wollen diese Theorie an einem kleinen Beispiel aus der "realen Welt"
  104. nachvollziehen: Nehmen wir ein grⁿnes Papier der Gr÷▀e 12x12 cm (ein blaues
  105. funktioniert theoretisch auch ;-). Dann ben÷tigen wir noch ein Bild der Gr÷▀e
  106. 10x10 cm, und ein schwarzes Papier der Gr÷▀e 14x14 cm. Aus dem schwarzen
  107. Papier schneiden wir ein Rechteck der Gr÷▀e 7x7 cm aus. Nun legen wir das
  108. grⁿne Papier auf den Tisch, dann das Bild darauf. Und zuletzt legen wir das
  109. schwarze Papier (mit dem Loch) ganz oben drauf, und zwar so, da▀ wir den Tisch
  110. nicht im Loch sehen k÷nnen.
  111. Was bedeuten diese drei BlΣtter? Das grⁿne Blatt soll dem Monitor entsprechen.
  112. Das Bild stellt die physikalische Einheit dar (das "Display"), und das Loch im
  113. schwarzen Papier soll der logischen Einheit, dem "Border", entsprechen. Auf
  114. dieses Beispiel werden wir gleich nachher noch einmal zurⁿckgreifen.
  115.  
  116. In unserem Mode 127 haben wir Folgendes gemacht: Die physikalische Gr÷▀e ist
  117. 44x36 Zeichen, wΣhrend die logische Gr÷▀e nur 40x32 Zeichen ist (wie im Mode
  118. 13). D.h. da▀ 16 Pixel jeweils oben, links, rechts und unten nicht angezeigt
  119. werden, obwohl sie vom Bildschirmspeicher her gesehen dennoch da sind.
  120. Warum um alles in der Welt sollten wir solch einen Modus ben÷tigen? Nun, diese
  121. Technik alleine gesehen kann schon in Spielen eingesetzt werden, und zwar beim
  122. Clipping: Weil es 32 Bytes (=Pixels) extra Speicher pro Rasterlinie gibt (16
  123. links + 16 rechts), die NICHT angezeigt werden, aber physikalisch vorhanden
  124. sind, brauchen wir alle kleineren Sprites ( <=32 Pixels) horizontal nicht mehr
  125. zu clippen. Der Verlust an Speicher (19 K) ist nichts im Vergleich zur
  126. Geschwindigkeit, die wir beim Malen von Sprites gewinnen (mit optimierten
  127. Algorithmen, die nicht zu clippen brauchen).
  128.  
  129.  
  130. Wie aber k÷nnen wir diese Technik anwenden, um an unser horizontales
  131. Hardware-Scrolling zu kommen? Wie wir am Beispiel mit dem Papier sehen k÷nnen,
  132. wird durch das Verschieben des Bildes (ohne allerdings das Loch im schwarzen
  133. Papier zu verschieben) der Eindruck erweckt, da▀ das Bild scrollen wⁿrde.
  134. Genau das machen wir auch mit dem VIDC: Wir verschieben die physikalische
  135. Einheit nach links oder rechts (um zwei Pixels auf einmal), um horizontales
  136. Hardware-Scrolling zu erreichen (bzw. zu simulieren).
  137.  
  138. Allerdings taucht dann nach ganz kurzer Zeit ein Problem auf: Wir k÷nnen das
  139. Bild nicht weiter nach links als zur linken Monitorseite (Horizontal Back
  140. Porch genannt) verschieben, and genauso wenig geht das mit der rechten
  141. Monitorseite (Horiztonal Front Porch). Die L÷sung ist dennoch nicht schwer:
  142. Das VInit Register im MEMC. Dieses Register sagt uns (vor allem aber dem VIDC
  143. :-), ab welcher Adresse der VIDC mit dem Auslesen der Bildschirmdaten beginnen
  144. soll, und zwar immer in Sprⁿngen von Quadwords, also 16 Bytes auf einmal.
  145. Wenn wir das Bild 7 mal gescrollt haben (also die Display-Register verschoben
  146. haben), hat sich die Position des Bildes um 7*2 = 14 Pixels verschoben. Wenn
  147. wir nun das nΣchste mal wieder um die 2 Pixel scrollen wollen, um also quasi
  148. 16 Pixel insgesamt verschoben zu bekommen, so wenden wir einfach folgenden
  149. Trick an: Wir setzen die beiden Display-Register wieder auf ihren
  150. Ursprungswert und sagen dem MEMC, er soll um 16 Bytes verschoben auslesen, was
  151. ja dann den gewⁿnschten 16 Pixeln (also 8*2 Schritten) entsprΣche. Nun, das
  152. mag vielleicht kompliziert aussehen, aber es ist gar nicht so schwierig. Wenn
  153. wir das ProgrΣmmchen "VIDC1" anschauen, wird uns einiges klarer.
  154.  
  155. Ach ja, bitte nicht vergessen, da▀ die Beispiel-Programme "nur" zeigen, wie
  156. Hardware-Scrolling funktioniert, aber nicht, wie man Spiele programmiert! Viel
  157. Spa▀ beim Testen!
  158.  
  159. - Michel Fasen - "
  160.  
  161.  
  162. Wow - das war ja wohl HighTech vom Feinsten, auch noch anschaulich erklΣrt!
  163. Obwohl sogar ich zugeben mu▀, da▀ ich einige Abschnitte mehrmals durchlesen
  164. mu▀te, um meinen Knoten im Hirn wieder l÷sen zu k÷nnen... Spa▀ beseite, es mag
  165. anfangs kompliziert klingen, aber in Wirklichkeit ist es doch gut
  166. nachvollziehbar, und logisch. Vor allem mit solch einem Lehrer!
  167.  
  168.  
  169.                                                                - Eduard Pfarr -
  170.  
  171.