home *** CD-ROM | disk | FTP | other *** search
/ ftp.uni-stuttgart.de/pub/systems/acorn/ / Acorn.tar / Acorn / acornet / fun / mags / hl-04-93.arc / !HL-04_93_Text_Tips < prev    next >
Text File  |  1993-10-06  |  8KB  |  145 lines

  1.  
  2.  
  3.  
  4. ÿÿÿÿÿÿÿÿÿÿ Assemblertips ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  5.  
  6.  
  7. Durch den Amiga wurde er berⁿhmt. Spiele wie Turrican 1/2, Lionheart oder auch
  8. der Bitmap-Brothers-Hit Fire & Ice sind nur wenige Beispiele seiner nach wie
  9. vor ungebremsten Beliebheit. Die Rede ist vom Coppereffekt, dem wohl
  10. bekanntesten Demo- und Gameeffekt der vergangenen Jahre.
  11.  
  12. Eigentlich handelt es sich beim Copper ja um eine uralte Technik, um bei einer
  13. begrenzten Farbanzahl trotzdem viele Schattierungen zu erreichen. Auf dem
  14. C64 nannte man diese Technik Raster-IRQs, auf dem CPC und dem Atari ST waren
  15. es die Rastersplits, und auf dem Archimedes spricht man heutzutage von
  16. Rasterinterrupts. Im Grund ist jedoch immer dasselbe gemeint, nΣmlich das
  17. Umschalten der Grafikpalette zu einem bestimmten Zeitpunkt. Am zweckmΣ▀igsten
  18. ist es, wenn dieses Umschalten nach dem sogenannten HSync geschieht.
  19.  
  20. Rufen wir uns zum besseren VerstΣndnis einmal die Funktionsweise des Video-/
  21. Monitorsystems ins GedΣchtnis: Der Elektronenstrahl fΣngt mit der Grafik-
  22. darstellung immer links an. Er stellt zunΣchst den linken Rand dar, zeichnet
  23. dann den Inhalt des Bildschirmspeichers und gelangt schlie▀lich zum rechten
  24. Border. Nachdem auch dieser Teil des Bildschirms dargestellt ist, wird der
  25. Elektronenstrahl ausgeschaltet, um auf einer Diagonale zum Beginn der
  26. nΣchsten Rasterzeile zu wandern. Diese Phase wird retrace-time genannt.
  27.  
  28. Beim Darstellen eines jeden Pixels "schaut" der VIDC in der Videopalette
  29. nach, um die dem Pixel zugeh÷rige Farbe herauszufinden. Wenn wir nun am Ende
  30. einer Rasterzeile (nach dem HSync eben) eine neue Videopalette wΣhlen, k÷nnen
  31. wir in Mode 12 theoretisch 256 Zeilen * 16 PaletteneintrΣge=4096 Farben
  32. gleichzeitig auf dem Screen darstellen. Pro Rasterzeile kann man aber nach wie
  33. vor nur 16 verschiedene Farben einsetzen.
  34.  
  35. Wie wird's programmiert ?
  36.  
  37. Auf den 8-Bittern mu▀te man frⁿher enorm geschickt beim Timing sein, um
  38. brauchbare Rastersplits zu programmieren. Diese Zeiten sind vorbei, denn der
  39. Archimedes bietet mit den Gespann IOC/VIDC ein fast unschlagbares Gespann,
  40. um relativ komfortabel die Hardware - und damit den VIDC - rasterorientiert
  41. zu programmieren. Den IOC (Input/Output Controller) mu▀ dabei nur zu einem
  42. Bruchteil direkt programmieren, denn das RISC OS greift dem Coder auch hier
  43. mit seiner Device-Vector-Organisation unter die Arme...
  44.  
  45. Der IOC bietet mit dem Timer 1 eine frei programmierbare Quelle fⁿr
  46. Interrupts. Wichtig fⁿr uns sind eigentlich nur die Register T1 Latch Low
  47. (low byte, IOC-Adresse = &50), T1 Latch High (high byte, &54) und T1 Go
  48. Command (&58). In T1 Latch Low/High kann man nun einen Wert schreiben (aufge-
  49. teilt in high- und low-byte), der 2 Mio. mal pro Sekunde um eins verringert
  50. wird. Erreicht der Wert des Registers nun den Wert 0, wird ein Interrupt
  51. ausgel÷st. M÷chte man also einen Interrupt mit einer Frequenz von 500kHz
  52. erstellen, mu▀ man in die Latch-Register den Wert 2 Mio./500000=4 schreiben.
  53. Sobald man T1 Go Command mit einem beliebigen Wert beschreibt, wird der Timer
  54. gestartet.
  55.  
  56. Mode 12 (den wir verwenden werden) hat eine Zeilenfrequenz von ca. 15.625kHz,
  57. d.h. pro Sekunde werden 15625 Zeilen dargestellt. Pro VSync sind das also
  58. 15625/50=313 Zeilen. Davon sind 256 Zeilen fⁿr die eigentliche Bilddarstellung
  59. vorgesehen, der Rest teilt sich auf den unteren und den oberen Rand auf.
  60. Wenn wir nun fⁿr jede Zeile einen Interrupt generieren wollen, mⁿssen wir
  61. T1 Latch mit einem theoretischen Wert von 2 Mio./15625=128 beschreiben. Da
  62. der Wert 0 mitgezΣhlt wird, erhΣlt T1 Latch aber nur den Wert 127.
  63.  
  64. RISC OS bietet mit seinen device vectors eine sehr angenehme M÷glichkeit des
  65. Interrupthandlings. Beim Aufruf des SWIs OS_ClaimDeviceVector gibt man in R0
  66. einfach die Interruptnummer (3=Vsync, 6=Timer 1) und in R1 die Adresse an,
  67. die beim IRQ aufgerufen werden soll. ZusΣtzlich kann man in R2 eine Konstante
  68. angeben, die der Interruptroutine dann spΣter in R12 ⁿbergeben wird. Zu Beginn
  69. der Interruptroutine mu▀ dann die IRQ-Quelle ⁿber ein bestimmtes Bit im IOC
  70. "gecleart" werden.
  71. Soweit die Theorie zur IOC-Programmierung. H÷rt sich alles ein wenig abstrakt
  72. an, aber nach einem kurzen Blick ins Listing (wie immer im Examples-Directory)
  73. sollte alles klar sein. Dort ist auch eine genauere Dokumentation zu finden.
  74.  
  75.  
  76. Wir kommen nun zum zweiten wichtigen Baustein der Raster-IRQs, nΣmlich dem
  77. Videocontroller VIDC. Dieser bietet zur Videodarstellung eine gro▀e Menge
  78. an Registern; wichtig fⁿr unsere Zwecke sind jedoch nur die Register &00
  79. (video palette logical colour 0), &04 (video palette logical color 1), &40
  80. (border color register), &8C (horizontal display start register) und &90
  81. (horizontal display end register).
  82.  
  83. Die Farbregister sind 32 Bit gro▀ und haben im allgemeinen folgenden Aufbau:
  84.  
  85. %00 xxxx 00000000000000 bbbb gggg rrrr
  86.  
  87. xxxx steht hier fⁿr die Farbnummer (0-15), und bbbb, gggg und rrrr geben die
  88. allseits bekannte RGB-IntensitΣt (jeweils 0-15) an. Der Border wird ⁿbrigens
  89. vom VIDC als logische Farbe 16 interpretiert.
  90.  
  91. Die beiden HDRs (horizontal display registers) dienen uns zur Realisierung
  92. eines Hardware-TechTechs und sind so strukturiert:
  93.  
  94. HDSR:   %10001100 xxxxxxxxxx 00000000000000
  95. HDER:   %10010000 xxxxxxxxxx 00000000000000
  96.  
  97. xx... gibt hier den Abstand in Einheiten von zwei Pixeln zum linken Rand an.
  98. In Mode 12 gilt: xxxxxxxxxx=(M-7)/2. In das HDSR k÷nnten wir also beispiels-
  99. weise (100-7)/2=46 und in das HDER (100-7+640)/2=366 schreiben, um eine
  100. sinnvolle Bildschirmdarstellung zu erreichen.
  101.  
  102. Vor dem eigentlichen Demo generieren wir nun ein Tabelle namens "Copperliste",
  103. in die wir pro Rasterzeile jeweils vier VIDC-Werte schreiben (in der Reihen-
  104. folge color 0, color 1, HDSR, HDER). Wird nun der Interrupt zu Timer 1
  105. ausgel÷st, erh÷ht unsere device-handler-Routine einen Rasterzeilen-Counter
  106. um eins, liest aus der Copperliste die entsprechenden Werte aus und gibt diese
  107. an den VIDC weiter.
  108.  
  109. Unser zweiter device handler wird immer dann aufgerufen, wenn der VIDC ein
  110. Bild gerade aufgebaut hat (VSync). Er initialisiert Timer 1 und setzt den
  111. Wert des Rasterzeilen-Counters auf -54 (bzw. NOT 53). Warum ? Nun, vom Beginn
  112. des VSync bis zum Beginn der Darstellung des Grafikbildschirmes "vergehen"
  113. genau 54 Rasterzeilen. In der allerersten Grafikzeile hat der Rastercounter
  114. also den Wert 0. Dies ist einfach ⁿbersichtlicher, als wenn der Rastercounter
  115. in der ersten Grafikzeile den Wert 54 hΣtte...
  116.  
  117.  
  118. So, das wΣre die Theorie zum Copper-Emulator. Ich bin mir sicher, da▀ diese
  119. trockene Materie nicht besonders leicht zu verstehen ist. Kein Wunder, da man
  120. ja zum Programmieren von Rasterinterrupts zwei Hardwarebausteine direkt
  121. ansprechen mu▀. Ich kann allerdings jedem ernsthaften Programmierer versichern,
  122. da▀, wenn man das Grundprinzip erst einmal verstanden hat, ein Copper zu den
  123. kinderleichten Effekten geh÷rt. Ihr solltet das beigelegte Listing wirklich
  124. GR▄NDLICH durcharbeiten (am besten ausdrucken lassen !) und vielleicht sogar
  125. mal eine eigene Copperliste erstellen.
  126.  
  127. Zum umfassenden VerstΣndnis kann ich ⁿbrigens nur das "ARM Family Data Manual"
  128. von VLSI Technology empfehlen. Dieses wird (oder wurde ?) in Deutschland
  129. herausgegeben von:
  130.  
  131.     DATA MODUL Aktiengesellschaft
  132.     Landsberger Stra▀e 320
  133.     8000 Mⁿnchen
  134.     (naja, ich hatte keine Lust, die neue PLZ herauszusuchen...)
  135.  
  136.     Tel. (089) 56 01 70
  137.  
  138. Dieses dicke Buch ist eigentlich fⁿr alle ARM-Freax unabdinglich. Es behandelt
  139. ARM, IOC, MEMC und VIDC sehr ausfⁿhrlich und verleiht einem wirklich tiefere
  140. Einblicke in den Archimedes. Ein Mu▀ !
  141.  
  142.  
  143.                                                                - Tim Juretzky -
  144.  
  145.