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_-Coding < prev    next >
Text File  |  1993-10-04  |  25KB  |  471 lines

  1.  
  2.  
  3.  
  4. ÿÿÿÿÿÿÿÿÿÿ Programmierung ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  5. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  6.  
  7.  
  8. An alle Assembler-Programmierer!
  9. Wer kann mir helfen, den Vector &1D (UpcallV) zu CLAIMen? Im Grunde ist dies
  10. doch ein ganz normaler Vektor, den man mit
  11.  
  12.   MOV    r0,#&1D
  13.   ADR    r1,upcall_routine%
  14.   MOV    r2,#0
  15.   SWI    "OS_Claim"
  16.  
  17. claimt, oder? Ich habe das gemacht, meine upcall_routine% sah dann schlie▀lich
  18. so aus:
  19.  
  20. .upcall_routine%
  21.   MOVS   PC,r14
  22.  
  23. was (nach den PRMs) die Kontrolle immer an den nΣchsten CLAIMant weitergibt.
  24. Alles ist auch Word-Aligned etc., sprich richtig, und doch kommt bei jedem
  25. Upcall ein Fehler: entweder ┤Undefined Instruction┤ genau beim MOVS PC,r14,
  26. oder ┤Address Exception┤ (irgendwo im Kernel). Verzweifelt wie ich war, habe
  27. ich auch schon MOV PC,r14 und LDMFD r13!,{PC} benutzt, natⁿrlich ohne Erfolg.
  28. Da mit dieser upcall_routine% eigentlich GAR nichts passieren dⁿrfte, hat mich
  29. dieses seltsame Verhalten doch sehr betrⁿbt.
  30. Wer wei▀ darⁿber Bescheid?
  31.                                                                        Sorcerer
  32.  
  33.  (Ich jedenfalls nicht.)
  34.  
  35. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  36. Wei▀ jemand, wie ich von einem Assemblerprogramm aus eine bestimme BASIC-
  37. Zeile anspringen kann ? Es wird da doch bestimmt irgendeine ROM-Routine
  38. geben...
  39. Acero
  40. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  41. Hat jemand eine schnelle Routine, um die Bytes innerhalb eines Wortes zu
  42. vertauschen ? Aus dem Wort B1 B2 B3 B4 soll also das Wort B4 B3 B2 B1
  43. werden. Irgendwo habe ich schon mal eine geeignete Routine von Roger Wilson
  44. gesehen, aber leider wei▀ ich nicht mehr, wo. Seine L÷sung verbraucht nur
  45. drei oder vier Taktzyklen, glaube ich.
  46. Acero
  47. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  48. Also ich schnall da irgendwas micht.
  49. Ich hab versucht eine Sprite-Routine zu schreiben, die gleichzeitig noch
  50. testet, ob eine Kollision mit irgend einem Farbcode au▀er Null passiert.
  51. Ich denk mir doch mal das ich da den ganzen Mist byteweise hin und her-
  52. schieben mu▀.
  53. Aber irgenwie steht dann meine Karre und kommt nicht mehr aus dem Knie.
  54.  
  55.  
  56.  
  57.                                                 ASPHYX
  58.  
  59.  (Sprites sollte man nicht byte-, sondern wordweise plotten. Dazu kann man
  60.   die Sprites entweder im Preprocessing vorshiften oder aber wΣhrend der
  61.   Laufzeit ⁿber die LSx,ASx und ROR-Anweisungen an die Wort-Positionen
  62.   "anpassen".
  63.   Zur Kollisionsabfrage: Meistens reicht es vollkommen aus, lediglich am
  64.   Rand der Sprites ein paar Punkte abzufragen. Bestimme einfach zw÷lf Punkte
  65.   in Kreisform um das Sprite und lese diese aus ! Das kostet kaum Rechenzeit
  66.   und ist ausreichend genau.)
  67.  
  68. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  69. Wei▀ eigentlich irgend jemand, wo ich einen Oberon oder Modula2 Compiler her-
  70. bekomme, der halbwegs stabil lΣuft.
  71.  
  72. Hey Mathematiker, wenn du zugang zum Internet hast schau doch mal dort nach,
  73. ich hab geh÷rt, da▀ es bei der Uni in Stuttgart geile Sachen gibt.
  74.  
  75.                                                   ASPHYX 
  76. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  77. Hi ACE!!!!
  78.  
  79. Schreib weiter Tips fⁿr die 500.
  80. WΣre echt nett, wenn du jedesmal ca. 10KB an Text ver÷ffentlichen wⁿrdest.
  81. O.k. war etwas ⁿbertrieben.
  82. Dann werden mehr Leute besser programmieren k÷nnen und Demos, wo mann nur
  83. Scrolltext und Logo sieht werden aussterben, meine [unver÷ffentlichten] Demos
  84. sehen nemlich alle irgendwie so aus, na ja fast jedenfalls.
  85.  
  86.  
  87.                                                 ASPHYX
  88. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  89. Da hab' ich doch letztlich M.S.'s !ArcInfo geplⁿndert und seh' da 'nen Kom-
  90. mentar, da▀ eine Routine unbedingt auf 'ner 256er Adresse anfangen mⁿsse. Na
  91. ganz so extrem ist die Sache nicht aber trotzdem existiert das Problem.
  92.  
  93. Bei eingeschaltetem Cache braucht ein Branch genau 3 Takte (2S+1N)(F cycles).
  94. Schaltet man ihn (den Cache natⁿrlich) aus, (Drek!) dann ist nichts mehr ir-
  95. gendwie festgelegt. Wegen den Umschaltung auf MCLK (A5000 i.A. 12MHz, A3000
  96. 8MHz) ist dann 1N=2S also 4 Takte. Pustekuchen! Ich hab' mir mal 'nen Tag
  97. genommen und diesen dummen Befehl analysiert. Verge▀t es!
  98.  
  99. Effektiv kam heraus, da▀ ein Branch auf einer &xxxxxxx4 Adresse irgendwie
  100. am schnellsten ist. Fⁿr &xxxxxxx8 und ~C braucht er definitiv einen Takt
  101. mehr. Bei ~0 bin ich mir nicht ganz so sicher! Ich habe einfach eine NOP
  102. Schleife 'zigmal durchlaufen lassen und ⁿber den Timer die Zeit gemessen.
  103. Sinnigerweise erh÷hte sich die Anzahl der theoretischen Takte bei jedem
  104. Sprung ⁿber eine WordBoundary hinaus um einen Takt... Ich hab's dann aber
  105. aufgegeben, da eine Schleife mit 2 Sprⁿngen (vor und zurⁿck) alles andere
  106. als definiertes Verhalten zeigte. ▄brigens sind die folgenden Sequenzen
  107. mal vom logischen abgesehen nicht gleich schnell (Cache Off!):
  108.  
  109.               MOV R0,R1,LSL R2         MOV R4,R5
  110.               MOV R4,R5                MOV R0,R1,LSL R2
  111.  
  112. Sie unterscheiden sich um genau einen Takt. (Fragt mich nicht ob links oder
  113. rechts schneller ist!) Entweder ist das wieder adressabhΣngig oder die Pre-
  114. fetchqueue hat ihre Finger im Spiel. Im Data Manual zum ChipSet ist irgendwo
  115. ein worst case Rechenbeispiel. Da braucht die Routine fast das Doppelte an 
  116. Zeit. Ich versteh' die Welt nicht mehr! Aber programmieren tu' ich trotzdem
  117. noch.
  118.  
  119. greetings blackICe
  120. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  121. Gute Frage Acero!                              
  122.  
  123. Wo ist denn die deutsche Programmiererszene ??? Das Problem liegt vielleicht
  124. darin, da▀ die meisten recht 'harmlos' programmieren und dieses Wissen als 
  125. nicht erwΣhnenswert einstufen. Die anderen haben dann wohl eher Angst, jemand
  126. k÷nnte ihre Idee stehlen ... totaler Bl÷dsinn. Irgendwann kriegt derjenige
  127. es doch 'raus. Au▀erdem hat es doch was wenn man sagen kann 'das stammt von
  128. mir'. Bestimmte Sachen werden irgendwann sowieso von irgendjemand zuerst ent-
  129. deckt/-wickelt. Ich wⁿrde das Rad auch nicht nochmal erfinden wollen. Man mu▀
  130. sich wohl damit abfinden, da▀ heutzutage nicht mehr soviel und sooft 'ne 
  131. geniale Idee geboren wird. (Ist alles schon vergeben. Hi Hi Hi!) 
  132. Dann bemⁿht man sich halt um Verbesserungen von Vorhandenem. Wie hei▀t es so
  133. sch÷n: Widersprⁿche treiben die Entwicklung voran ... Nicht da▀ ich hier zum
  134. "Wettstreit um die schnellste Additionsroutine" o.Σ. aufrufen will, aber Er-
  135. fahrungsaustausch ist doch gerade fⁿr die Einsteiger eine wertvolle Hilfe.
  136. Auch wenn bestimmte Sachen mit dem eigentlichen Problem nichts tu tun haben,
  137. so k÷nnen sie doch Anregungen usw. geben. Aber wenn wir das Potential nicht
  138. nutzen ... Das kann doch der Verbreitung des Archimedes nur nⁿtzlich sein.
  139. Denkt mal d'rⁿber nach. Ich dachte z.B. Rasterprogrammierung wΣre 'n Tabu fⁿr
  140. mich, und jetzt ist das fⁿr mich fast alltΣglich. Man mu▀ mit dem vorhandenem
  141. Wissen nur umgehen k÷nnen. So schnell geht Hardware nicht kaputt. (Ich kenn'
  142. da 'nen Kumpel aus meiner Schulzeit, der programmiert bestimmte Sachen aus
  143. Angst nicht, bis ihm ein in seinen Augen "Kompetenter" das "Verfahren" abseg-
  144. net. Zum totlachen ...
  145.  
  146. Hab' ich jetzt den roten Faden verloren ? (Ich schreib' nΣmlich grⁿn auf
  147. schwarz ........................................... Okay, war'n Scherz!)  
  148.  
  149. also ciao,
  150.  
  151. greetings blackICe
  152. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  153. Asphyx: Die neueste Version des Coconizerplayermodules kannst Du direkt von
  154. Armaxess kriegen, dazu solltest Du ein Demo von Ihnen haben und dort Ihre
  155. Adresse suchen, oder natⁿrlich im Coconizer nachschauen! Aber ich glaub nicht,
  156. da▀ es eine neuere Version als die vom Coconizer 1.37 gibt!
  157.                                                                            QArc
  158. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  159. Ich kenne bisher nur 4 Assemblerkurse, dies wΣren: Archimedessonderheft 2
  160. (deutsch, aber recht kurz), Assemblerkurs (mehrere Textfiles, deutsch),
  161. Archimedes Assembly Language von Dabs Press (englisch, aber sehr gut) und den
  162. aus der ArcStudy (deutsch und einfach genial). Gibt es noch welche?
  163.                                                                            QArc
  164.  
  165.  (Seltsam. Da besteht der relevante Befehlssatz des ARMs aus vielleicht 15
  166.   Mnemonics, und trotzdem versuchen eine Menge Leute, diese fⁿnfzehn Befehle
  167.   in immer umfangreicheren Kursen zu beschreiben. Why ? Der "Kurzkurs" im
  168.   zweiten Archimedes-Magazin sollte vollkommen ausreichen ! Puristen werden
  169.   eventuell sogar mit der Beschreibung in den PRMs auskommen.)
  170.  
  171. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  172. Ace hat recht, schneller kann man keine 2 Register miteinander tauschen, als
  173. mit der EOR-Methode, selbst mit MOV geht es nicht schneller, sondern nur
  174. gleichschnell. Alles in allem spart die EOR-Methode noch 1 Register, nicht
  175. schlecht...
  176.                                                                            QArc
  177. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  178. Ace und Eduard Pfarr: Im letzten Hardliner war ja unter Tips'n'Trix der
  179. Scrollkurs, unteranderem war auch das Programm VIDC1 dabei, als
  180. Beispielprogramm. Dort verwendet Ace ein 'teqp  pc,#0: movnv r0,r0'. Mir ist
  181. klar, da▀ dieses movnv (also ein Move Never) zum synchronisieren der
  182. Registerbanks dient (liegt am teqp davor), aber Acorn rΣt dem User ja davon ab,
  183. mit dem Condition Code Never zu arbeiten, weil er wahrscheinlich anders belegt
  184. wird, wenn die neuen Prozessoren kommen (Quelle: PRM's 3 und Risc User, sowie
  185. ArcStudy). Das bedeutet doch, da▀ viele Demos (und andere Programme!) nicht
  186. mehr laufen! Was sagst Du (Ace und Eduard) dazu?
  187.                                                                           QArc
  188.  
  189.  (Interessiert Dich auch, was ich dazu sage ? Ja ? Also: Schmarrn ! Hauptsache,
  190.   auf dem ARM2 und dem ARM3 laufen jene Demos. Auf gr÷▀eren Prozessoren werden
  191.   die heutigen Demos sowieso nur noch belΣchelt werden. Au▀erdem wΣre es
  192.   vermutlich sinnbringender, mal Demos herauszubringen, die auf eine bestimmte
  193.   Konfiguration zugeschnitten sind. Dann k÷nnte man wirklich das Optimum
  194.   herausholen.
  195.   Allerdings gebe ich zu, da▀ auch ich nur noch MOV R0,R0 benutze.)
  196.  
  197. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  198. Wenn eine Applikation mehrere Spritefiles fⁿr verschiedene Modis (also !Sprites
  199. fⁿr Mode 12, !Sprites22 fⁿr Mode 20 und !Sprites23 fⁿr monochrom Modes) bietet,
  200. so werden die nicht bei einem Moduswechsel aktiviert, erst wenn die Applikation
  201. nochmals gebooted wird! Anders verhΣlt es sich mit Toolicons, diese haben ja an
  202. ihrem Namen die Endung fⁿr den Mode, die werden auch bei einem Modewechsel neu
  203. dargestellt!!
  204.                                                                            QArc
  205. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  206. Warum braucht das IconSpriten eigentlich soviel Zeit? Beim BootUp verbringt
  207. mein 3000er etwa 30 Sekunden mit IconSpriten (ich habe 2 Dateien mit etwa 300
  208. Sprites!), wenn ich sie nachtrΣglich nochmal iconsprite dauert das ganze mehr
  209. als 1 Minute!!! Warum?
  210.                                                                            QArc
  211. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  212. Die Spriteroutinen aus Hardliner 2 sind ja nicht schlecht, aber die Maske habe
  213. ich bisher noch nicht gebraucht! Meine Scrollroutine (fⁿr die Grⁿ▀e, usw) wird
  214. ohne Maske auskommen, und die anderen wahrscheinlich auch. Liegt aber auch
  215. daran, da▀ jedesmal der komplette Screen neu aufgebaut wird, also jedesmal die
  216. Stars, das Logo und der Scroller neugezeichnet werden. Und damit die Sterne
  217. durch den Hintergrund durchgehen (in einer Schrift zum Beispiel) werden sie als
  218. letztes geplottet! Mal schaun, ob ich mit meinen ineffizienten Routinen auch
  219. noch Musik im Hintergrund spielen kann, und das ohne Screenflipping!!!
  220.                                                                            QArc
  221. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  222. Hier mal ne Routine mit der man ein Starfield erzeugen kann:
  223.  
  224. DIM colour%(3)
  225.   colour%(0) = 45
  226.   colour%(1) = 47
  227.   colour%(2) = 210
  228.   colour%(3) = 252 : REM Farbdefinitionen fⁿr die 4 verschiedenen Speeds
  229. Stars% = 255       : REM Anzahl der Sterne
  230.  
  231. DIM StarRout &1000,L%-1 : REM Platz fⁿr die Routine schaffen
  232.  
  233. FOR pass% = 12 TO 14 STEP %10
  234.   P% = &8000
  235.   O% = StarRout
  236. [OPT pass%        ; Hier geht's jetzt los
  237.   SWI &100+22
  238.   SWI &100+13     ; in Mode 13 schalten
  239.   SWI "OS_ReadDynamicArea" ; Screengr÷▀e von Mode 13 in R1 laden
  240.   RSB R10,R1,#&02000000    ; Screenstart steht jetzt in R10
  241.   MOV R11,#0               ; Hintergrundfarbe in R11 (schwarz)
  242.   
  243. .screenloop
  244.   MOV R0,#19
  245.   SWI "OS_Byte"            ; Warte auf den Rasterzeilenruecklauf = Wait
  246.   ADR R12,StarTab          ; Startabelle nach R12
  247.   MOV R0,#Stars%+1         ; Sternenzahl nach R0
  248. .lineloop
  249.   LDMIA R12,{R1-R3}        ;R1 = xposition
  250.                            ;R2 = speed
  251.                            ;R3 = colour
  252.   ADD   R6,R10,R1          ;R6 = Videostart+Spalte
  253.   ADD   R6,R6,R0,LSL#8     ;R6 = Videostart+Spalte+256*Zeile
  254.   STRB  R11,[R6,R0,LSL#6]  ;alten Stern l÷schen!
  255.  
  256.   ADD   R1,R1,R2           ;R1 = Spalte + Speed
  257.   CMP   R1,#320
  258.   SUBGE R1,R1,#320         ; Spalte > 319 -> R1-=320
  259.   ADD   R6,R10,R1
  260.   ADD   R6,R6,R0,LSL#8
  261.   STRB  R3,[R6,R0,LSL#6]   ; Stern setzen
  262.   
  263.   STMIA R12!,{R1-R3}       ; Neue Werte speichern und erhoehen
  264.   SUBS  R0,R0,#1
  265.   BNE   lineloop           ; nΣchste Zeile
  266.  
  267.   SWI   "OS_ReadEscapeState"
  268.   BCC   screenloop         ; ESC? nein? dann nochmal
  269.   MOV   PC,R14
  270.  
  271. .StarTab
  272. ]
  273.   FOR x%= 0 TO Stars%:speed%=RND(4)
  274. [OPT pass%
  275.   EQUD RND(320)-1
  276.   EQUD speed%
  277.   EQUD colour%(speed%-1)
  278. ]
  279.   NEXT
  280. [OPT pass%
  281. ]
  282. NEXT pass%
  283.  
  284. CALL StarRout
  285. END
  286.  
  287. So das war's auch schon, recht kurz? OK, diese Routine erzeugt ein von rechts
  288. nach links scrollendes Sternenfeld in 4 verschiedenen Geschwindigkeiten. Die
  289. Sterne werden mit jedem VSync gel÷scht und neu gezeichnet. Wenn Ihr auf dem
  290. Bildschirm zusΣtzlich ein Sprite habt, fliegen die Sterne 'hinter' dem Sprite
  291. vorbei, sie zerst÷ren es nicht! Wer wei▀, wie man's schneller macht soll hier
  292. seine Routine reinsetzen! Nochwas, diese Routine habe ich am 4.1.1993 ge-
  293. schrieben, ich hatte damals keinen Bock nochmehr aufs Abi zu lernen und da hab
  294. ich mich halt mal hingesetzt, nach 30 Minuten (ist das lang?) war sie fertig.
  295. Zudem war das die erste Routine in Assembler die auch funktioniert hat, ich
  296. hab noch nie vorher irgendwas in ArcAssembler programmiert, aber dank der AAL
  297. hat's ja geklappt!
  298.  
  299.                                                                            QArc
  300. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  301. In manchen Demos sieht man ja, da▀ ⁿber einem Text ein Schatten ist. Zum Teil
  302. bewegt sich dieser Schatten dann auch noch (so wie der Plasmaeffekt in
  303. Nirvana). So einen Schatten kann man sehr einfach erzeugen, wenn man einen
  304. 16 Farbmodus verwendet und auch nur 8 Farben braucht. Zu erst erzeugt man
  305. eine Palette, in der die unteren 8 Farben normale Farben sind, und die oberen
  306. 8 Farben, die Schatten dazu darstellen. Das sieht dann wie folgt aus:
  307. Normale  Farben: %0000 - %0111
  308. Schatten Farben: %1000 - %1111
  309. seht Ihr den Trick? Wenn Ihr also einen Schatten ⁿber eine Farbe legen wollt,
  310. so mⁿ▀t Ihr seinen Wert nur mit ORR %1000 verknⁿpfen, wegkriegen tut Ihr den
  311. Schatten mit AND %0111, wollt Ihr den Schatten 'invertieren' so benutzt Ihr
  312. ein EOR %1000.
  313. Leider hat der 16 Farbmodus auch noch 2 Nachteile:
  314. 1.) In einem Byte sind immer 2 Pixel, deshalb kann man fⁿr 2 Pixel den
  315.     Schatten folgenderma▀en an und aus machen:
  316.     an:  ORR %10001000
  317.     aus: AND %01110111
  318. Das geht ja eigentlich noch, da man hΣufig nicht den Unterschied zischen
  319. 2 Pixel und 1 Pixel sieht, will man aber viel Zeit sparen, benutzt man ja
  320. Words und nicht Bytes, somit hat man aber immer gleich 8 Pixel aufeinmal, was
  321. nun wirklich nicht geht!
  322. In einem 256 Farbmodus wⁿ▀te ich keine Alternative, als da▀ man die Pixel aus-
  323. liest und in einer Tabelle nach dem Schatten schaut (=512 Byte), allerdings
  324. k÷nnte man (wie in Basic) mit der TINT-Option einen Schatten erzeugen, dazu
  325. mⁿ▀te man aber wissen, wie sich die TINT-Option auf die Farbnummer auswirkt,
  326. dies ginge dann aber nur Pixelweise, Wordweise nicht! Also, wer wei▀ wie man's
  327. effektiver macht, soll sich hier melden!
  328.                                                                            QArc
  329. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  330. BytePool Produxion: Euer Nirvana lΣuft ja nun endlich in seiner 2.en Version,
  331. aber mit einer SCSI-Platte zusammen gibt's ein Problem: Der letzte Part, also
  332. dieser Up-Scroller wird nicht eingeladen, das Programm hΣngt sich mit der
  333. rotierenden Amigahand auf. Da Acero ja eine AT-Bus-Platte hat, nehme ich an,
  334. da▀ es dort lΣuft, warum lΣuft es aber nicht mit einer SCSI-Platte? Vorallem,
  335. warum laufen die anderen Parts?
  336.                                                                            QArc
  337.  
  338.  (Ich habe nicht die geringste Ahnung und - ehrlich gesagt - auch keine Lust,
  339.   da mal nachzuforschen. Tritt dieses Problem denn bei anderen SCSIlern auch
  340.   auf ?)
  341.  
  342. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  343. Tim, Dein ZISS ist wirklich genial (hab Ihn mir gestern mal nΣher angeschaut)!
  344. Nachdem ich den Text 5mal durchgelesen hatte, war mein Knoten im Hirn endlich
  345. offen, Du hΣttest das aber auch besser klar machen k÷nnen, ich hab die ganze
  346. Zeit gedacht, Du wⁿrdest den Buffer alle 32 Zeilen um einen Block nach oben
  347. kopieren, aber woher kommt dann das ZI, naja, nachdem ich dann den SourceCode
  348. noch einbi▀chen durchackert hab bin ich dann dahinter gekommen! ▄brigens: Wie
  349. macht Ihr das RⁿckwΣrtsscrollen? Habt Ihr da einen Pointer zum Anfang-32 des
  350. Puffers? Ach halt, da braucht man ja gar keinen zweiten Puffer, der ist ja
  351. zirkular, Ihr schreibt also einfach in den hinteren Buffer die Zeile die oben
  352. erscheinen soll und fangt eine Zeile weiter oben mit darstellen an! Echt
  353. genial, mal schaun, ob ich diese Routine verwenden kann!
  354.                                                                            QArc
  355.  
  356.  (Hm, "genial" ist der ZISS nun wirklich nicht. Genial sind eher andere
  357.   Effekte bzw. Code-Techniken: Linecompiler, Gourauds, Texturen, Farbmorphs,
  358.   Kreistunnel, usw...)
  359.  
  360. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  361. 5 Tage nachdem ich den ersten Text ⁿber die Schattenroutine geschrieben habe,
  362. hab ich sie mal auf dem Archie ausprobiert, das Ergebnis war ernⁿchternd!!!
  363. Da ich nur alle 2 Pixel aufeinmal mit einem Schattenversehe (also Byteweise),
  364. geht meine Routine bei breiten Schatten in stark in die Knie, sie braucht dann
  365. mehr als 1 VSync an Rechenzeit (inklusive Schattenl÷schen), dadurch kommt ein
  366. Ruckeln ins Scrolling (ja, der Schatten scrollt! ─hnlich wie der Ziss).
  367. Jetzt habe ich meinen Schatten schmaler gemacht, seine h÷chste Breite betrΣgt
  368. jetzt 16 Pixel, damit kriegt man ein flottes, ruckfreies Scrolling hin, auch
  369. bei 32 Pixel funktionierts noch einwandfrei, allerdings kann das nicht der
  370. Weisheit letzter Schlu▀ sein, ich bin mir sicher, da▀ sich meine Routine noch
  371. soweit optimieren lΣ▀t, da▀ auch 64 Pixel m÷glich sind, aber mit 64 Pixel
  372. kriegt man auch nichts hin. Und wenn ich zum PC rⁿberschiele, sehe ich grad
  373. einen Schatten der mindestens 128 Pixel breit ist und besser scrollt als
  374. meiner, rein SpeedmΣ▀ig ist der PC etwa 1.5mal schneller als mein 3000er,
  375. aber dafⁿr haben die ja auch noch einen Textfader eingebaut!
  376. Mal schaun, ob man meine Routine noch schneller hinkriegt! ▄brigens arbeite
  377. ich grade an einem M-ZISS, wenn der fertig ist, wird er garantiert die volle
  378. Rechenleistung eines Arm 2 brauchen, wahrscheinlich (99%) sogar nochmehr,
  379. hoffentlich hab ich den am 17. September fertig (noch 5 Tage).             QArc
  380. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  381. Ich hab nochmal ⁿber meinen Gedankengang der Schattenroutine nachgedacht, und
  382. bin zu einer anderen Methode gekommen, diese hat allerdings einen Nachteil, man
  383. kann den Schatten nicht so ohne weiteres wieder l÷schen. Vorher ging das ja
  384. mit AND, jetzt nicht mehr. Der Hauptvorteil der neuen Routine liegt darin, da▀
  385. sie mit weniger Farben auskommt (nur 1 Farbe mehr als die normalen Farben!).
  386. Um das zu erreichen erzeugt man eine Palette mit den Grundfarben (16 Colour
  387. Mode), diese Grundfarben werden so angeordnet, da▀ auf die erste Farbe eine
  388. Farbe folgt, die der Schatten der ersten Farbe ist, diese Farbe ist gleich-
  389. zeitig wieder Grundfarbe und hat als Schatten die 3. Farbe, usw... Hier eine
  390. Tabelle:
  391.          Farbnummer    Schattenfarbnummer
  392.                00           01
  393.                01           02
  394.                02           03
  395.                03           04
  396.                04           05
  397.                ...          ...
  398. Am besten lΣ▀t sich sowas mit der Standardpalette machen, man mu▀ dann
  399. allerdings darauf achten, da▀ man in dem Feld, das schattiert werden soll,
  400. keine Farbe 07 (also Schwarz) vorkommt, sonst wird der Schatten tief blau.
  401. Die Schattenroutine erzeugt ihren Schatten dann mit folgendem Befehl:
  402.   R1 = Punktfarbe (eigentlich: Punktefarbe)
  403.   
  404.   1 Byte (2 Pixel) : R2 = &1010
  405.                      ADD R1,R1,R2
  406.   4 Byte (8 Pixel) : R2 = &1010101010101010
  407.                      ADD R1,R1,R2            (hoppsala, genau, gleich!)
  408.  
  409. So, wenn man also x zu schattierende Farben hat, hat man noch 15-x Farben
  410. frei. GeschwindigkeitsmΣ▀ig ist diese Routine exakt gleichschnell wie die
  411. alte!!!                                                                    QArc
  412. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  413. So, der MCiSS ist fertig, nun, was tut er? Ganz einfach, er scrollt ein Riesen-
  414. Sprite (896 Pixel hoch, 480 Pixel breit) von unten nach oben, allerdings hat
  415. dieses Riesensprite eine Maske, soda▀ beim plotten der Hintergrund nicht zer-
  416. st÷rt wird, wenn die Maske gesetzt ist. Der MCiSS arbeitet in Mode 12 und ver-
  417. schiebt pro VSync (0.02 Sekunden) 84480 Byte oder 21120 Words. Obwohl dies doch
  418. recht wenige Daten sind, braucht er gut 80% Rechenzeit, was daran liegt, da▀
  419. das Maskieren ⁿber BIC und ORR geht. Den Rest der Rechenzeit habe ich mit einer
  420. Schattenroutine aufgefⁿllt, die mindestens 15% Rechenzeit braucht!
  421. Fⁿr Demos eignet sich der MCiSS also nicht, da man gerade noch eine Musik und
  422. ein paar Stars machen k÷nnte, aber als kleines Demo schon eher! ▄brigens habe
  423. ich um den MCiSS herum ein Demo geschrieben, welches Ihr eigentlich ⁿberall
  424. bekommen solltet. Ein Problem gibts dabei noch: Dieses Demo ist ⁿber 1MB gro▀,
  425. Diskuser k÷nnen es also nur mittels ArcFS o.Σ. ansehen! Dieses Demo, sein Name
  426. ist ⁿbrigens !ArcInvite, ist deshalb so lang, weil ich 2 Versionen, jeweils fⁿr
  427. den Arm2 und den Arm3 geschrieben habe (hΣtte ich eigentlich auch kⁿrzer machen
  428. k÷nnen!!!), jede Version ist 500K lang! Gepackt ist das Programm etwa 230K
  429. lang.                                                                      QArc
  430. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  431. Leute, ich such die Farbcodes fⁿr einen Farbverlauf, und zwar brauche ich
  432. die, welche den Regenbogen machen, also wer mir die Werte sagen kann, soll
  433. dies auch tun! QArc
  434. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  435. Nochwas, kann mir einer eine Formel geben, wie ich:
  436. a) WellenlΣnge des Lichtes in Farbcodes fⁿr den Archie umrechnen kann
  437. b) RGB-Werte in Archie-Farbcodes umrechnen kann
  438. c) Farbwert + Tint in Archie-Farbcodes umrechnen kann
  439. wΣre Euch sehr dankbar! QArc
  440.  
  441.  (Zu a): Geht wohl am besten ⁿber eine vorberechnete Tabelle.
  442.   Zu b): Hier kannst Du das ColourTrans-Modul benutzen. Es stellt eine gro▀e
  443.          Anzahl an SWIs zur Verfⁿgung und wird in den neuen PRMs ab Seite
  444.          3-335 erklΣrt.
  445.          Ein Beispiel: SWI "ColourTrans_ReturnColourNumber"
  446.          on entry: R0=&BBGGRR00 (RGB-Werte)
  447.          on exit:  R0=colour number.
  448.   Zu c): SWI "ColourTrans_GCOLToColourNumber"
  449.          on entry: R0=GCOL
  450.          on exit: R0=colour number.
  451.   Fⁿr Demos ist ColourTrans allerdings viel zu langsam. Da mu▀ man sich schon
  452.   eigene Routinen zusammenbasteln.)
  453.  
  454. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  455. ▄brigens suche ich alle m÷glichen FarbverlΣufe, also grⁿn-blau, rot_blau und
  456. was es da noch gibt, immer her damit! QArc
  457. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  458. Ich m÷chte mit meinem BasicInlineAssembler die FPA programmieren!!!!!!!!
  459. irgendwie mu▀ man das Basic doch erweitern k÷nnen, so wie es auch bei den
  460. 8-Bittern m÷glich war.
  461. Ich m÷chte auch nicht eingeben mⁿssen: EQUD FN_FP("LDFE F0,[R1,#44]!") oder
  462. Σhnliche Scherze. Ich will ihn genauso programmieren, wie den ARM!
  463. Wer weis Rat?
  464.  
  465. Ikarus
  466.  
  467.  (Hat sich schon jemand den Spa▀ gemacht und eine FPA-Erweiterung des Basic-
  468.   Assemblers erstellt ?)
  469.  
  470. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  471.