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

  1.  
  2. ; Listing5l.s    "VERLÄNGERUNGSEFFEKT", HERGESTELLT DURCH ALTERNIEREN DER
  3. ;        NORMALEN MODULO UND MODULO -40
  4.  
  5.     SECTION    CIPundCOP,CODE
  6.  
  7. Anfang:
  8.     move.l    4.w,a6        ; Execbase in a6
  9.     jsr    -$78(a6)    ; Disable - stoppt das Multitasking
  10.     lea    GfxName(PC),a1    ; Adresse des Namen der zu öffnenden Lib in a1
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase    ; speichere diese Adresse in GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; hier speichern wir die Adresse der Copperlist
  15.                 ; des Betriebssystemes
  16.  
  17. ;    POINTEN AUF UNSERE BITPLANES
  18.  
  19.     MOVE.L    #PIC,d0        ; in d0 kommt die Adresse unserer PIC
  20.     LEA    BPLPOINTERS,A1    ; in a1 kommt die Adresse der Bitplane-
  21.                 ; Pointer der Copperlist
  22.     MOVEQ    #2,D1        ; Anzahl der Bitplanes -1 (hier sind es 3)
  23.                 ; für den DBRA - Zyklus
  24. POINTBP:
  25.     move.w    d0,6(a1)    ; kopiert das niederwertige Word der Plane-
  26.                 ; Adresse ins richtige Word der Copperlist
  27.     swap    d0        ; vertauscht die 2 Word in d0 (1234 > 3412)
  28.  
  29.     move.w    d0,2(a1)    ; kopiert das hochwertige Word der Adresse des 
  30.                 ; Plane in das richtige Word in der Copperlist
  31.     swap    d0        ; vertauscht erneut die 2 Word von d0
  32.     ADD.L    #40*256,d0    ; Zählen 10240 zu D0 dazu, -> nächstes Plane
  33.  
  34.     addq.w    #8,a1        ; zu den nächsten Bplpointers in der Cop
  35.     dbra    d1,POINTBP    ; Wiederhole D1 mal POINTBP (D1=n. bitplanes)
  36.  
  37.     move.l    #COPPERLIST,$dff080    ; COP1LC - "Zeiger" auf unsere COP
  38.     move.w    d0,$dff088        ; COPJMP1 - Starten unsere COP
  39.     move.w    #0,$dff1fc        ; FMODE - Deaktiviert das AGA
  40.     move.w    #$c00,$dff106        ; BPLCON3 - Deaktiviert das AGA
  41.  
  42. mouse:
  43.     btst    #6,$bfe001    ; linke Taste gedrückt?
  44.     bne.s    mouse        ; wenn nicht, geh nicht weiter
  45.     
  46.     move.l    OldCop(PC),$dff080    ; COP1LC - "Zeiger" auf die Orginal-COP
  47.     move.w    d0,$dff088        ; COPJMP1 - und starten sie
  48.  
  49.     move.l    4.w,a6
  50.     jsr    -$7e(a6)    ; Enable - stellt Multitasking wieder her
  51.     move.l    GfxBase(PC),a1    ; Basis der Library, die es zu schließen gilt
  52.                 ; (Libraries werden geöffnet UND geschlossen!)
  53.     jsr    -$19e(a6)    ; Closelibrary - schließt die Graphics lib
  54.     rts
  55.  
  56. ; DATEN
  57.  
  58. GfxName:
  59.     dc.b    "graphics.library",0,0
  60.  
  61. GfxBase:        ; Hier hinein kommt die Basisadresse der graphics.lib,
  62.     dc.l    0    ; ab hier werden die Offsets gemacht
  63.  
  64. OldCop:         ; Hier hinein kommt die Adresse der Orginal-Copperlist des
  65.     dc.l    0    ; Betriebssystemes
  66.  
  67.  
  68.     SECTION GRAPHIC,DATA_C
  69.  
  70. COPPERLIST:
  71.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  72.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  73.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  74.     dc.w    $13e,$0000
  75.  
  76.     dc.w    $8e,$2c81    ; DiwStrt    (Register mit Standartwerten)
  77.     dc.w    $90,$2cc1    ; DiwStop
  78.     dc.w    $92,$0038    ; DdfStart
  79.     dc.w    $94,$00d0    ; DdfStop
  80.     dc.w    $102,0        ; BplCon1
  81.     dc.w    $104,0        ; BplCon2
  82.     dc.w    $108,0        ; Bpl1Mod
  83.     dc.w    $10a,0        ; Bpl2Mod
  84.  
  85.             ; 5432109876543210  ; BPLCON0:
  86.     dc.w    $100,%0011001000000000  ; Bits 13 und 12 an!! (3 = %011)
  87.  
  88. BPLPOINTERS:
  89.     dc.w $e0,$0000,$e2,$0000    ;erstes  Bitplane - BPL0PT
  90.     dc.w $e4,$0000,$e6,$0000    ;zweites Bitplane - BPL1PT
  91.     dc.w $e8,$0000,$ea,$0000    ;drittes Bitplane - BPL2PT
  92.  
  93.     dc.w    $0180,$000    ; Color0
  94.     dc.w    $0182,$475    ; Color1
  95.     dc.w    $0184,$fff    ; Color2
  96.     dc.w    $0186,$ccc    ; Color3
  97.     dc.w    $0188,$999    ; Color4
  98.     dc.w    $018a,$232    ; Color5
  99.     dc.w    $018c,$777    ; Color6
  100.     dc.w    $018e,$444    ; Color7
  101.  
  102.  
  103. ; COPPERLIST, DIE "VERLÄNGERT"
  104.  
  105.     dc.l    $8907fffe      ; Wait Zeile $89
  106.     dc.w    $108,-40,$10a,-40 ; Modulo -40, Wiederholung der letzten Zeile
  107.     dc.l    $9007fffe      ; Warte 7 Zeilen - werden alle gleich sein
  108.     dc.w    $108,0,$10a,0      ; dann lasse ich alles eine Zeile weitergehen
  109.     dc.l    $9107fffe      ; und auf der nächsten Zeile...
  110.     dc.w    $108,-40,$10a,-40 ; setze ich das Modulo auf FLOOD
  111.     dc.l    $9807fffe      ; Warte 7 Zeilen - werden alle gleich sein
  112.     dc.w    $108,0,$10a,0      ; gehe auf die nächste Zeile
  113.     dc.l    $9907fffe      ; dann...
  114.     dc.w    $108,-40,$10a,-40 ; ich wiederhole diese Zeile 7 mal mit
  115.     dc.l    $a007fffe      ; Modulo auf -40
  116.     dc.w    $108,0,$10a,0      ; nächste Zeile... ECZETERA.
  117.     dc.l    $a107fffe
  118.     dc.w    $108,-40,$10a,-40
  119.     dc.l    $a807fffe
  120.     dc.w    $108,0,$10a,0
  121.     dc.l    $a907fffe
  122.     dc.w    $108,-40,$10a,-40
  123.     dc.l    $b007fffe
  124.     dc.w    $108,0,$10a,0
  125.     dc.l    $b107fffe
  126.     dc.w    $108,-40,$10a,-40
  127.     dc.l    $b807fffe
  128.     dc.w    $108,0,$10a,0
  129.     dc.l    $b907fffe
  130.     dc.w    $108,-40,$10a,-40
  131.     dc.l    $c007fffe
  132.     dc.w    $108,0,$10a,0
  133.     dc.l    $c107fffe
  134.     dc.w    $108,-40,$10a,-40
  135.     dc.l    $c807fffe
  136.     dc.w    $108,0,$10a,0
  137.     dc.l    $c907fffe
  138.     dc.w    $108,-40,$10a,-40
  139.     dc.l    $d007fffe
  140.     dc.w    $108,0,$10a,0
  141.     dc.l    $d107fffe
  142.     dc.w    $108,-40,$10a,-40
  143.     dc.l    $d807fffe
  144.     dc.w    $108,0,$10a,0
  145.     dc.l    $d907fffe
  146.     dc.w    $108,-40,$10a,-40
  147.     dc.l    $e007fffe
  148.     dc.w    $108,0,$10a,0
  149.     dc.l    $e107fffe
  150.     dc.w    $108,-40,$10a,-40
  151.     dc.l    $e807fffe
  152.     dc.w    $108,0,$10a,0
  153.     dc.l    $e907fffe
  154.     dc.w    $108,-40,$10a,-40
  155.     dc.l    $f007fffe
  156.     dc.w    $108,0,$10a,0    ; zurück zum Normalzustand
  157.  
  158.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  159.  
  160. ;    BILD
  161.  
  162.  
  163. PIC:
  164.     incbin    "amiga.320*256*3"    ; hier laden wir das Bild im RAW-
  165.  
  166.     end
  167.  
  168. Dies  ist  eine  weitere Anwendung des FLOOD-Effektes, hergestellt mid den
  169. Modulo. Es ist relativ einfach, ein Bild zu "ziehen" oder Pixel größer  zu
  170. simulieren,  als sie in Wirklichkeit sind. Einfach die Modulo alternieren,
  171. einmal -40, die verlängern (Flood), dann auf 0 setzen, die das Bild normal
  172. weiterzeichnen  lassen. Hat man eine Zeile gezeichnet, kommt sofort wieder
  173. der Flood zum Einsatz: weitere 7 Zeilen  werden  gleich  wie  diese  sein.
  174. Dieses  Spiel  wiederholt  sich, solange man will. In diesem Beispiel wird
  175. eine Zeile zu  8,  denn  einmal  wird  sie  gezeichnet,  dann  sieben  mal
  176. "kopiert". Wenn man diese "Distanzen" vergrößert und verkleinert, also mal
  177. 3 Zeilen, mal 6,..., kann man interessante "ZOOM"-Effekte erzeugen!
  178.  
  179.