home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / assembler-kurs / listings / listing3e.s < prev    next >
Text File  |  1977-12-31  |  7KB  |  213 lines

  1.  
  2. ; Listing3e.s    Scrolleffekt eines farbververlaufenen Hintergrundes
  3.     
  4. ;    Routine wird einmal alle drei Frames ausgeführt
  5.  
  6.  
  7.     SECTION CIPundCOP,CODE    ; auch Fast ist    OK
  8.  
  9. Anfang:
  10.     move.l    4.w,a6        ; Execbase in a6
  11.     jsr    -$78(a6)    ; Disable - stoppt das Multitasking
  12.     lea    GfxName,a1  ; Adresse des Namen der zu öffnenden Library in a1
  13.     jsr    -$198(a6)   ; OpenLibrary, Routine der EXEC, die Libraris
  14.                 ; öffnet, und als Resultat in d0 die Basisadresse
  15.                 ; derselben Bibliothek liefert, ab welcher
  16.                 ; die Offsets (Distanzen) zu machen sind
  17.     move.l    d0,GfxBase    ; speichere diese Adresse in GfxBase
  18.     move.l    d0,a6
  19.     move.l    $26(a6),OldCop    ; hier speichern wir die Adresse der Copperlist
  20.                    ; des Betriebssystemes (immer auf $26 nach
  21.                     ; GfxBase)
  22.     move.l    #MeinCopper,$dff080  ; COP1LC - "Zeiger" auf unsere COP
  23.                      ; (deren Adresse)
  24.     move.w    d0,$dff088         ; COPJMP1 - Starten unsere COP
  25. mouse:
  26.     cmpi.b    #$ff,$dff006    ; VHPOSR - sind wir bei Zeile 255 angekommen?
  27.     bne.s    mouse        ; Wenn nicht, geh nicht weiter
  28.  
  29. frame:
  30.     cmpi.b    #$fe,$dff006 ; Sind wir auf Zeile 254? (muß die Runde nochmal
  31.     bne.s    frame         ; drehen!) Wenn nicht, geh nicht weiter
  32.  
  33.  
  34. frame2:
  35.     cmpi.b    #$fd,$dff006 ; Sind wir auf Zeile 253? (muß die Runde nochmal
  36.     bne.s    frame2         ; drehen!) Wenn nicht, geh nicht weiter
  37.  
  38.  
  39.     bsr.s    ScrollColors    ; Eine sogenannte RASTERBAR!
  40.  
  41.  
  42.     btst    #6,$bfe001    ; linke Maustaste gedrückt?
  43.     bne.s    mouse        ; wenn nicht, zurück zu mouse:
  44.  
  45.     move.l    OldCop(PC),$dff080    ; COP1LC - "Zeiger" auf die Orginal-COP
  46.     move.w    d0,$dff088        ; COPJMP1 - und starten sie
  47.  
  48.     move.l    4.w,a6
  49.     jsr    -$7e(a6)    ; Enable - stellt Multitasking wieder her
  50.     move.l    GfxBase(PC),a1    ; Basis der Library, die es zu schließen gilt
  51.                 ; (Libraries werden geöffnet UND geschlossen!)
  52.     jsr    -$19e(a6)    ; Closelibrary - schließt die Graphics lib
  53.     rts
  54.  
  55. ;    Diese Routine läßt die 14 Farben unserer grünen Copperlist "fließen",
  56. ;    das einem dauernden nach-oben-Fließen gleicht, so, als ob wir aus
  57. ;    einem Fenster schauen würden und dauernd farbverschwommene Balken
  58. ;    rauffliegen sehen würden. Praktisch gesehen tue ich nichts anderes
  59. ;    als die Farben zu verschieben, indem ich die zweite in die erste
  60. ;    kopiere, die dritte in die zweite etc, so als hätte ich eine Reihe
  61. ;    von farbigen Murmeln: stellt euch vor, ihr nehmt die erste und steckt
  62. ;    sie in einen Sack, dann gebt ihr die zweite in das "Loch", das durch
  63. ;    das Verschwinden der ersten entstanden ist. Ihr fahrt fort, bis ihr
  64. ;    bei der letzten angekommen seid, und die vierzehnte Kugel in das
  65. ;    "Loch" der dreizehnten gebt. Nun hängt ihr hinten wieder die erste
  66. ;    Kugel an, die ihr ja in den Sack gesteckt hattet. Zu Bemerken ist
  67. ;    die letzte Anweisung, die ein "move.w col1,col14 ist", also das
  68. ;    Loch stopft, nachdem es von der ersten Position in die letzte geschoben
  69. ;    worden ist. Es bildet sich ein Endlos-zyklus, ähnelich einer
  70. ;    Fahrradkette:
  71. ;
  72. ;    >>>>>>>>>>>>>>>>>>>>>
  73. ;    ^            v
  74. ;    <<<<<<<<<<<<<<<<<<<<
  75. ;
  76. ;    aber ohne dem unteren Teil der Kette: einfach dann, wenn ein Glied
  77. ;    der Kette am Ende (v)angekommen ist, wird es in die erste Position
  78. ;    kopiert (^), und ermöglicht somit die Endlosschleife:
  79. ;
  80. ;    >>>>>>>>>>>>>>>>>>>>>  
  81. ;    ^            v
  82. ;
  83. ;    Um die Routine zu unterbrechen, reicht es, einen x-bliebigen Befehl
  84. ;    zu streichen, der mit dem Kopieren zu tun hat, indem ihr z.B. einen
  85. ;    Strichpunkt vorne hingebt, in etwa vor dem (move.w col2,col1), und
  86. ;    ihr werdet bemerken, daß nur ein Durchgang gemacht wird, und dann
  87. ;    alles stehen bleibt, danach enden die Farben, da die "Kette
  88. ;    unterbrochen" wurde, und sie keine Vorgängerfarbe mehr liefert.
  89.  
  90.  
  91. Scrollcolors:
  92.     move.w    col2,col1    ; col2 kommt in col1
  93.     move.w    col3,col2    ; col3 kommt in col2
  94.     move.w    col4,col3    ; col4 kommt in col3
  95.     move.w    col5,col4    ; col5 kommt in col4
  96.     move.w    col6,col5    ; col6 kommt in col5
  97.     move.w    col7,col6    ; col7 kommt in col6
  98.     move.w    col8,col7    ; col8 kommt in col7
  99.     move.w    col9,col8    ; col9 kommt in col8
  100.     move.w    col10,col9    ; col10 kommt in col9
  101.     move.w    col11,col10    ; col11 kommt in col10
  102.     move.w    col12,col11    ; col12 kommt in col11
  103.     move.w    col13,col12    ; col13 kommt in col12
  104.     move.w    col14,col13    ; col14 kommt in col13
  105.     move.w    col1,col14    ; col1 kommt in col14
  106.     rts
  107.  
  108. GfxName:
  109.     dc.b    "graphics.library",0,0    ; Bemerkung: um Charakter in den
  110.                     ; Speicher zu geben, verwenden wir
  111.                     ; immer das dc.b und setzen sie
  112.                     ; unter "" oder ´´, Abschluß mit ,0
  113.  
  114. GfxBase:       ; Hier hinein kommt die Basisadresse der graphics.library,
  115.     dc.l    0  ; ab hier werden die Offsets gemacht
  116.  
  117.  
  118.  
  119. OldCop:         ; Hier hinein kommt die Adresse der Orginal-Copperlist des
  120.     dc.l    0    ; Betriebssystemes
  121.  
  122.  
  123.  
  124. ;=========== Copperlist ==========================
  125.  
  126.  
  127.     section cop,data_C
  128.  
  129. MEINCOPPER:
  130.     dc.w    $100,$200    ; BPLCON0 - Screen ohne Bitplanes, nur die
  131.                 ; Hintergrundfarbe $180 ist sichtbar
  132.  
  133.     DC.W    $180,$000    ; COLOR0 - wir beginnen mit SCHWARZ
  134.  
  135.     dc.w    $9a07,$fffe    ; warten auf Zeile 154 ($9a in Hexadezimal)
  136.     dc.w    $180        ; REGISTER COLOR0
  137. col1:
  138.     dc.w    $0f0        ; Wert von COLOR 0 (das verändert wird)
  139.     dc.w    $9b07,$fffe    ; warten auf Zeile 155 (wird nicht verändert)
  140.     dc.w    $180        ; REGISTER COLOR0 (wird nicht verändert)
  141. col2:
  142.     dc.w    $0d0        ; Wert von COLOR 0 (wird verändert)
  143.     dc.w    $9c07,$fffe    ; warten auf Zeile 156 (wird nicht verändert.)
  144.     dc.w    $180        ; REGISTER COLOR0
  145. col3:
  146.     dc.w    $0b0        ; Wert von COLOR 0
  147.     dc.w    $9d07,$fffe    ; warten auf Zeile 157
  148.     dc.w    $180        ; REGISTER COLOR0
  149. col4:
  150.     dc.w    $090        ; Wert von COLOR 0
  151.     dc.w    $9e07,$fffe    ; warten auf Zeile 158
  152.     dc.w    $180        ; REGISTER COLOR0
  153. col5:
  154.     dc.w    $070        ; Wert von COLOR 0
  155.     dc.w    $9f07,$fffe    ; warten auf Zeile 159
  156.     dc.w    $180        ; REGISTER COLOR0
  157. col6:
  158.     dc.w    $050        ; Wert von COLOR 0
  159.     dc.w    $a007,$fffe    ; warten auf Zeile 160
  160.     dc.w    $180        ; REGISTER COLOR0
  161. col7:
  162.     dc.w    $030        ; Wert von COLOR 0
  163.     dc.w    $a107,$fffe    ; warten auf Zeile 161
  164.     dc.w    $180        ; color0... (nun habt ihr schon verstanden,
  165. col8:                ; ab hier gebe ich keinen Kommentar mehr!)
  166.     dc.w    $030
  167.     dc.w    $a207,$fffe    ; Zeile 162
  168.     dc.w    $180
  169. col9:
  170.     dc.w    $050
  171.     dc.w    $a307,$fffe    ; Zeile 163
  172.     dc.w    $180
  173. col10:
  174.     dc.w    $070
  175.     dc.w    $a407,$fffe    ; Zeile 164
  176.     dc.w    $180
  177. col11:
  178.     dc.w    $090
  179.     dc.w    $a507,$fffe    ; Zeile 165
  180.     dc.w    $180
  181. col12:
  182.     dc.w    $0b0
  183.     dc.w    $a607,$fffe    ; Zeile 166
  184.     dc.w    $180
  185. col13:
  186.     dc.w    $0d0
  187.     dc.w    $a707,$fffe    ; Zeile 167
  188.     dc.w    $180
  189. col14:
  190.     dc.w    $0f0
  191.     dc.w    $a807,$fffe    ; Zeile 168
  192.  
  193.     dc.w    $180,$0000    ; Wählen Schwarz für den letzten Teil
  194.                 ; des Bildschirms unter dem Effekt
  195.  
  196.     DC.W    $FFFF,$FFFE    ; Ende der Copperlist
  197.  
  198.     END
  199.  
  200.  
  201.  
  202. Änderungen: Probiert folgende Anweisung am Ende der Routine "Scrollcolors"
  203. anzuhängen,  und ihr werdet eine Farbveränderung feststellen ( indem ihr 1
  204. zur RED-Komponente dazuaddiert, also zum Rot).
  205.  
  206.     add.w    #$100,col13
  207.  
  208. Probiert,  den  Wert  zu  variiern,   um   andere   Farbkombinationen   zu
  209. produzieren.  Klar, es ist eine recht wage Art, Farbverläufe herzustellen,
  210. aber es ist recht gut, um zu sehen, ob man die Routinen verstanden hat.
  211.  
  212.  
  213.