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

  1.  
  2. ; Listing7b.s    ANZEIGEN EINES SPRITES - RECHTE MAUSTASTE UM IHN ZU BEWEGEN
  3.  
  4.  
  5.     SECTION CiriCop,CODE
  6.  
  7. Anfang:
  8.     move.l    4.w,a6        ; Execbase
  9.     jsr    -$78(a6)    ; Disable
  10.     lea    GfxName(PC),a1    ; Libname
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; speichern die alte COP
  15.  
  16. ;    Pointen auf das "leere" PIC
  17.  
  18.     MOVE.L    #BITPLANE,d0    ; wohin pointen
  19.     LEA    BPLPOINTERS,A1    ; COP-Pointer
  20.     move.w    d0,6(a1)
  21.     swap    d0
  22.     move.w    d0,2(a1)
  23.  
  24. ;    Pointen auf den Sprite
  25.  
  26.     MOVE.L    #MEINSPRITE,d0        ; Adresse des Sprite in d0
  27.     LEA    SpritePointers,a1    ; Pointer in der Copperlist
  28.     move.w    d0,6(a1)
  29.     swap    d0
  30.     move.w    d0,2(a1)
  31.  
  32.     move.l    #COPPERLIST,$dff080    ; unsere COP
  33.     move.w    d0,$dff088        ; START COP
  34.     move.w    #0,$dff1fc        ; NO AGA!
  35.     move.w    #$c00,$dff106
  36.  
  37. mouse:
  38.     cmpi.b    #$ff,$dff006    ; Zeile 255?
  39.     bne.s    mouse
  40.  
  41.     btst    #2,$dff016    ; Mouse gedrückt?
  42.     bne.s    Warte
  43.  
  44.     bsr.s    BewegeSprite    ; Bewege Sprite 0 nach rechts
  45.  
  46. Warte:
  47.     cmpi.b    #$ff,$dff006    ; Zeile 255?
  48.     beq.s    Warte
  49.  
  50.     btst    #6,$bfe001    ; Mouse gedrückt?
  51.     bne.s    mouse
  52.  
  53.  
  54.     move.l    OldCop(PC),$dff080    ; Pointen auf die SystemCOP
  55.     move.w    d0,$dff088        ; Starten die alte SystemCOP
  56.  
  57.     move.l    4.w,a6
  58.     jsr    -$7e(a6)    ; Enable
  59.     move.l    gfxbase(PC),a1
  60.     jsr    -$19e(a6)    ; Closelibrary
  61.     rts
  62.  
  63. ;    Daten
  64.  
  65. GfxName:
  66.     dc.b    "graphics.library",0,0
  67.  
  68. GfxBase:
  69.     dc.l    0
  70.  
  71. OldCop:
  72.     dc.l    0
  73.  
  74. ; Diese Routine bewegt den Sprite nach rechts, indem es auf das Byte HSTART
  75. ; also seiner X-Position, zugreift. Zu Bemerken, daß es jeweils um 2 Pixel
  76. ; bewegt wird.
  77.  
  78. BewegeSprite:
  79.     addq.b    #1,HSTART    ; (wie addq.b #1,MEINSPRITE+1)
  80.     rts
  81.  
  82.  
  83.     SECTION GRAPHIC,DATA_C
  84.  
  85. COPPERLIST:
  86. SpritePointers:
  87.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  88.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  89.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  90.     dc.w    $13e,0
  91.  
  92.     dc.w    $8E,$2c81    ; DiwStrt
  93.     dc.w    $90,$2cc1    ; DiwStop
  94.     dc.w    $92,$38        ; DdfStart
  95.     dc.w    $94,$d0        ; DdfStop
  96.     dc.w    $102,0        ; BplCon1
  97.     dc.w    $104,0        ; BplCon2
  98.     dc.w    $108,0        ; Bpl1Mod
  99.     dc.w    $10a,0        ; Bpl2Mod
  100.  
  101.             ; 5432109876543210
  102.     dc.w    $100,%0001001000000000  ; Bit 12 an!! 1 Bitplane Lowres
  103.  
  104. BPLPOINTERS:
  105.     dc.w $e0,0,$e2,0    ; erstes  Bitplane
  106.  
  107.     dc.w    $180,$000    ; color0    ; Hintergrund Schwarz
  108.     dc.w    $182,$123    ; color1    ; Farbe 1 des Bitplane, die
  109.                         ; in diesem Fall leer ist,
  110.                         ; und deswegen nicht erscheint
  111.  
  112.     dc.w    $1A2,$F00    ; Color17, oder COLOR1 des Sprite0 - ROSSO
  113.     dc.w    $1A4,$0F0    ; Color18, oder COLOR2 des Sprite0 - VERDE
  114.     dc.w    $1A6,$FF0    ; Color19, oder COLOR3 des Sprite0 - GIALLO
  115.  
  116.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  117.  
  118.  
  119. ; ************ Hier ist der Sprite: NATÜRLICH muß er in CHIP RAM sein! ************
  120.  
  121. MEINSPRITE:        ; Länge 13 Zeilen
  122. VSTART:
  123.     dc.b $30  ; Vertikale Anfangsposition des Sprite (von $2c bis $f2)
  124. HSTART:
  125.     dc.b $90  ; Horizontale Anfangsposition des Sprite (von $40 bis $d8)
  126. VSTOP:
  127.     dc.b $3d  ; $30+13=$3d    - Vertikale Endposition des Sprite
  128.     dc.b $00
  129.  dc.w    %0000000000000000,%0000110000110000 ; Binäres Format für ev. Änderungen
  130.  dc.w    %0000000000000000,%0000011001100000
  131.  dc.w    %0000000000000000,%0000001001000000
  132.  dc.w    %0000000110000000,%0011000110001100 ;BINÄR 00=COLOR 0 (DURCHSICHTIG)
  133.  dc.w    %0000011111100000,%0110011111100110 ;BINÄR 10=COLOR 1 (ROT)
  134.  dc.w    %0000011111100000,%1100100110010011 ;BINÄR 01=COLOR 2 (GRÜN)
  135.  dc.w    %0000110110110000,%1111100110011111 ;BINÄR 11=COLOR 3 (GELB)
  136.  dc.w    %0000011111100000,%0000011111100000
  137.  dc.w    %0000011111100000,%0001111001111000
  138.  dc.w    %0000001111000000,%0011101111011100
  139.  dc.w    %0000000110000000,%0011000110001100
  140.  dc.w    %0000000000000000,%1111000000001111
  141.  dc.w    %0000000000000000,%1111000000001111
  142.  dc.w    0,0    ; 2 word auf NULL definieren das Ende des Sprite.
  143.  
  144.  
  145.     SECTION LEERESPLANE,BSS_C ; Ein auf 0 gesetztes Bitplane, wir
  146.                   ; müssen es verwenden, denn ohne Bitplane
  147.                   ; ist es nicht möglich, die Sprites
  148.                   ; zu aktivieren
  149. BITPLANE:
  150.     ds.b    40*256      ; Bitplane auf 0 Lowres
  151.  
  152.     end
  153.  
  154.  
  155. Es ist einfach, den Sprite zu bewegen, versucht es mal mit dieser Modifizierung
  156. der Routine BewegeSprite:
  157.  
  158.  
  159.     subq.b    #1,HSTART    ; Linksbewegung des Sprite
  160.  
  161. *
  162.  
  163.     ADDQ.B    #1,VSTART    ; \ Bewegt den Sprite nach unten
  164.     ADDQ.B    #1,VSTOP    ; / (sowohl auf VSTART wie auch auf VSTOP!)
  165.  
  166. *
  167.     SUBQ.B    #1,VSTART    ; \ Bewegt den Sprite nach oben
  168.     SUBQ.B    #1,VSTOP    ; / (sowohl auf VSTART wie auch auf VSTOP!)
  169.  
  170. *
  171.  
  172.     ADDQ.B    #1,HSTART    ;\
  173.     ADDQ.B    #1,VSTART    ; \ bewegt in Diagonale unten-rechts
  174.     ADDQ.B    #1,VSTOP    ; /
  175.  
  176. *
  177.  
  178.     SUBQ.B    #1,HSTART    ;\
  179.     ADDQ.B    #1,VSTART    ; \ bewegt    in Diagonale unten-links
  180.     ADDQ.B    #1,VSTOP    ; /
  181.  
  182. *
  183.  
  184.     ADDQ.B    #1,HSTART    ;\
  185.     SUBQ.B    #1,VSTART    ; \ bewegt in Diagonale oben-rechts
  186.     SUBQ.B    #1,VSTOP    ; /
  187.  
  188. *
  189.  
  190.     SUBQ.B    #1,HSTART    ;\
  191.     SUBQ.B    #1,VSTART    ; \ bewegt  in Diagonale oben-links
  192.     SUBQ.B  #1,VSTOP    ; /
  193.  
  194. *
  195.  
  196. Probiert dann, den Wert, der dazu/weggezählt wird, zu verändern, und schafft
  197. neue, interessante "Schußlinien":
  198.  
  199.     SUBQ.B    #3,HSTART    ;\
  200.     SUBQ.B    #1,VSTART    ; \ bewegt  in Diagonale oben-seht links
  201.     SUBQ.B    #1,VSTOP    ; /
  202.  
  203. Und so weiter, und so weiter....
  204.