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

  1.  
  2. ; Listing7f.s    ANZEIGEN ALLER 8 SPRITE DES AMIGA
  3.  
  4. ;    In diesem Listing wird gezeigt, daß alle 8 Sprites ihre Palette
  5. ;    in Paaren gemeinsam haben, also Sprite 0 die gleiche wie Sprite1
  6. ;    hat, Sprite 2 die gleichen Farben wie Sprite 3 und so weiter.
  7. ;    Es wird auch gezeigt, wie die Prioritäten bei Überlagerungen
  8. ;    verteilt sind, also daß der mit der kleineren Nummer über dem
  9. ;    mit einer größeren Vorrang hat, also über diesem angezeigt wird.
  10. ;    Sprite 0 wird also über allen anderen angezeigt, Sprite 7 hingegen
  11. ;    kann von allen anderen überdeckt werden. Sprite 3 z.B. überdeckt
  12. ;    die Sprites 4,5,6,7, wird aber selbst von 0,1 und 2 überdeckt.
  13. ;    Durch Drücken der linken Maustaste Überlappen sich die Sprites
  14. ;    und die Prioritäten sind gut erkennbar. Rechts Maustaste zum
  15. ;    Aussteigen.
  16.  
  17.     SECTION CipundCop,CODE
  18.  
  19.  
  20. Anfang:
  21.     move.l    4.w,a6        ; Execbase
  22.     jsr    -$78(a6)    ; Disable
  23.     lea    GfxName(PC),a1    ; Libname
  24.     jsr    -$198(a6)    ; OpenLibrary
  25.     move.l    d0,GfxBase
  26.     move.l    d0,a6
  27.     move.l    $26(a6),OldCop    ; speichern die alte COP
  28.  
  29. ;    Pointen auf das "leere" PIC
  30.  
  31.     MOVE.L    #BITPLANE,d0    ; wohin pointen
  32.     LEA    BPLPOINTERS,A1    ; COP-Pointer
  33.     move.w    d0,6(a1)
  34.     swap    d0
  35.     move.w    d0,2(a1)
  36.  
  37. ;    Pointen auf die Sprite
  38.  
  39.     MOVE.L    #MEINSPRITE0,d0        ; Adresse des Sprite in d0
  40.     LEA    SpritePointers,a1    ; Pointer in der Copperlist
  41.     move.w    d0,6(a1)
  42.     swap    d0
  43.     move.w    d0,2(a1)
  44.     MOVE.L    #MEINSPRITE1,d0        ; Adresse des Sprite in d0
  45.     addq.w    #8,a1            ; nächsten SPRITEPOINTERS
  46.     move.w    d0,6(a1)
  47.     swap    d0
  48.     move.w    d0,2(a1)
  49.     MOVE.L    #MEINSPRITE2,d0        ; Adresse des Sprite in d0
  50.     addq.w    #8,a1            ; nächsten SPRITEPOINTERS
  51.     move.w    d0,6(a1)
  52.     swap    d0
  53.     move.w    d0,2(a1)
  54.     MOVE.L    #MEINSPRITE3,d0        ; Adresse des Sprite in d0
  55.     addq.w    #8,a1            ; nächsten SPRITEPOINTERS
  56.     move.w    d0,6(a1)
  57.     swap    d0
  58.     move.w    d0,2(a1)
  59.     MOVE.L    #MEINSPRITE4,d0        ; Adresse des Sprite in d0
  60.     addq.w    #8,a1            ; nächsten SPRITEPOINTERS
  61.     move.w    d0,6(a1)
  62.     swap    d0
  63.     move.w    d0,2(a1)
  64.     MOVE.L    #MEINSPRITE5,d0        ; Adresse des Sprite in d0
  65.     addq.w    #8,a1            ; nächsten SPRITEPOINTERS
  66.     move.w    d0,6(a1)
  67.     swap    d0
  68.     move.w    d0,2(a1)
  69.     MOVE.L    #MEINSPRITE6,d0        ; Adresse des Sprite in d0
  70.     addq.w    #8,a1            ; nächsten SPRITEPOINTERS
  71.     move.w    d0,6(a1)
  72.     swap    d0
  73.     move.w    d0,2(a1)
  74.     MOVE.L    #MEINSPRITE7,d0        ; Adresse des Sprite in d0
  75.     addq.w    #8,a1            ; nächsten SPRITEPOINTERS
  76.     move.w    d0,6(a1)
  77.     swap    d0
  78.     move.w    d0,2(a1)
  79.  
  80.     move.l    #COPPERLIST,$dff080    ; unsere COP
  81.     move.w    d0,$dff088        ; START COP
  82.     move.w    #0,$dff1fc        ; NO AGA!
  83.     move.w    #$c00,$dff106        ; NO AGA!
  84.  
  85. mouse:
  86.     btst    #6,$bfe001    ; Mouse gedrückt?
  87.     bne.s    mouse
  88.  
  89.     MOVEQ    #$60,d0       ; Anfangskoordinate HSTART
  90.     ADDQ.B    #(10/2),d0 ; Abstand zum nächsten Sprite
  91.                ; (zu Bemerken, daß das Byte HSTART immer 2 Pixel
  92.                ; nimmt, wenn wir uns also um 10 Pixel verstellen
  93.                ; wollen müssen wir nur 5 zu HSTART dazuzählen!)
  94.     MOVE.B    d0,HSTART1
  95.     ADDQ.B    #(10/2),d0    ; Abstand zum nächsten Sprite
  96.     MOVE.B    d0,HSTART2
  97.     ADDQ.B    #(10/2),d0    ; Abstand zum nächsten Sprite
  98.     MOVE.B    d0,HSTART3
  99.     ADDQ.B    #(10/2),d0    ; Abstand zum nächsten Sprite
  100.     MOVE.B    d0,HSTART4
  101.     ADDQ.B    #(10/2),d0    ; Abstand zum nächsten Sprite
  102.     MOVE.B    d0,HSTART5
  103.     ADDQ.B    #(10/2),d0    ; Abstand zum nächsten Sprite
  104.     MOVE.B    d0,HSTART6
  105.     ADDQ.B    #(10/2),d0    ; Abstand zum nächsten Sprite
  106.     MOVE.B    d0,HSTART7
  107.  
  108. MouseRechts:
  109.     btst    #2,$dff016
  110.     bne.s    MouseRechts
  111.  
  112.     move.l    OldCop(PC),$dff080    ; Pointen auf die SystemCOP
  113.     move.w    d0,$dff088        ; Starten die alte Cop
  114.  
  115.     move.l    4.w,a6
  116.     jsr    -$7e(a6)    ; Enable
  117.     move.l    gfxbase(PC),a1
  118.     jsr    -$19e(a6)    ; Closelibrary
  119.     rts
  120.  
  121. ;    Daten
  122.  
  123. GfxName:
  124.     dc.b    "graphics.library",0,0
  125.  
  126. GfxBase:
  127.     dc.l    0
  128.  
  129. OldCop:
  130.     dc.l    0
  131.  
  132.  
  133.     SECTION GRAPHIC,DATA_C
  134.  
  135. COPPERLIST:
  136. SpritePointers:
  137.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  138.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  139.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  140.     dc.w    $13e,0
  141.  
  142.     dc.w    $8E,$2c81    ; DiwStrt
  143.     dc.w    $90,$2cc1    ; DiwStop
  144.     dc.w    $92,$38        ; DdfStart
  145.     dc.w    $94,$d0        ; DdfStop
  146.     dc.w    $102,0        ; BplCon1
  147.     dc.w    $104,0        ; BplCon2
  148.     dc.w    $108,0        ; Bpl1Mod
  149.     dc.w    $10a,0        ; Bpl2Mod
  150.  
  151.             ; 5432109876543210
  152.     dc.w    $100,%0001001000000000  ; bit 12 acceso!! 1 bitplane lowres
  153.  
  154. BPLPOINTERS:
  155.     dc.w $e0,0,$e2,0    ;primo    bitplane
  156.  
  157.     dc.w    $180,$000    ; Color0    ; schwarzer Hintergrund
  158.     dc.w    $182,$123    ; Color1    ; Color1 des Bitplane, das
  159.                         ; hier leer ist, es erscheint
  160.                         ; also nicht.
  161.  
  162.     dc.w    $1A2,$F00    ; Color17, - Color1 der Sprite0/1 -ROT
  163.     dc.w    $1A4,$0F0    ; Color18, - Color2 der Sprite0/1 -GRÜN
  164.     dc.w    $1A6,$FF0    ; Color19, - Color3 der Sprite0/1 -GELB
  165.  
  166.     dc.w    $1AA,$FFF    ; Color21, - Color1 der Sprite2/3 -WEIß
  167.     dc.w    $1AC,$0BD    ; Color22, - Color2 der Sprite2/3 -WASSER
  168.     dc.w    $1AE,$D50    ; Color23, - Color3 der Sprite2/3 -ORANGE
  169.  
  170.     dc.w    $1B2,$00F    ; Color25, - Color1 der Sprite4/5 -BLAU
  171.     dc.w    $1B4,$F0F    ; Color26, - Color2 der Sprite4/5 -VIOLETT
  172.     dc.w    $1B6,$BBB    ; Color27, - Color3 der Sprite4/5 -GRAU
  173.  
  174.     dc.w    $1BA,$8E0    ; Color29, - Color1 der Sprite6/7 -HELLGRÜN
  175.     dc.w    $1BC,$a70    ; Color30, - Color2 der Sprite6/7 -BRAUN
  176.     dc.w    $1BE,$d00    ; Color31, - Color3 der Sprite6/7 -DUNKELROT
  177.  
  178.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  179.  
  180.  
  181. ; ************ Hier die Sprite: KLARERWEISE in CHIP RAM! ************
  182.  
  183. ; Referenztabelle zur Definition der Farben:
  184.  
  185.  
  186. ; für die Sprite 0 und 1
  187. ; BINÄR 00=COLOR 0 (TRANSPARENT)
  188. ; BINÄR 10=COLOR 1 (ROT)
  189. ; BINÄR 01=COLOR 2 (GRÜN)
  190. ; BINÄR 11=COLOR 3 (GELB)
  191.  
  192. MEINSPRITE0:        ; Länge: 13 Zeilen
  193. VSTART0:
  194.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  195. HSTART0:
  196.     dc.b $60    ; Horizontale Pos. (von $40 bis $d8)
  197. VSTOP0:
  198.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  199.     dc.b $00
  200.  dc.w    %0000001111000000,%0111110000111110
  201.  dc.w    %0000111111110000,%1111001110001111
  202.  dc.w    %0011111111111100,%1100010001000011
  203.  dc.w    %0111111111111110,%1000010001000001
  204.  dc.w    %0111111111111110,%1000010001000001
  205.  dc.w    %0011111111111100,%1100010001000011
  206.  dc.w    %0000111111110000,%1111001110001111
  207.  dc.w    %0000001111000000,%0111110000111110
  208.  dc.w    0,0    ; Ende des Sprite
  209.  
  210.  
  211. MEINSPRITE1:        ; Länge: 13 Zeilen
  212. VSTART1:
  213.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  214. HSTART1:
  215.     dc.b $60+14    ; Horizontale Pos. (von $40 bis $d8)
  216. VSTOP1:
  217.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  218.     dc.b $00
  219.  dc.w    %0000001111000000,%0111110000111110
  220.  dc.w    %0000111111110000,%1111000010001111
  221.  dc.w    %0011111111111100,%1100000110000011
  222.  dc.w    %0111111111111110,%1000000010000001
  223.  dc.w    %0111111111111110,%1000000010000001
  224.  dc.w    %0011111111111100,%1100000010000011
  225.  dc.w    %0000111111110000,%1111000111001111
  226.  dc.w    %0000001111000000,%0111110000111110
  227.  dc.w    0,0    ; Ende des Sprite
  228.  
  229.  ; für die Sprite 2 und 3
  230.  ;BINÄR 00=COLOR 0 (TRANSPARENT)
  231.  ;BINÄR 10=COLOR 1 (WEIß)
  232.  ;BINÄR 01=COLOR 2 (WASSER)
  233.  ;BINÄR 11=COLOR 3 (ORANGE)
  234.  
  235. MEINSPRITE2:        ; Länge: 13 Zeilen
  236. VSTART2:
  237.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  238. HSTART2:
  239.     dc.b $60+(14*2) ; Horizontale Pos. (von $40 bis $d8)
  240. VSTOP2:
  241.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  242.     dc.b $00
  243.  dc.w    %0000001111000000,%0111110000111110
  244.  dc.w    %0000111111110000,%1111000111001111
  245.  dc.w    %0011111111111100,%1100001000100011
  246.  dc.w    %0111111111111110,%1000000000100001
  247.  dc.w    %0111111111111110,%1000000111000001
  248.  dc.w    %0011111111111100,%1100001000000011
  249.  dc.w    %0000111111110000,%1111001111101111
  250.  dc.w    %0000001111000000,%0111110000111110
  251.  dc.w    0,0    ; Ende des Sprite
  252.  
  253. MEINSPRITE3:        ; Länge: 13 Zeilen
  254. VSTART3:
  255.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  256. HSTART3:
  257.     dc.b $60+(14*3) ; Horizontale Pos. (von $40 bis $d8)
  258. VSTOP3:
  259.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  260.     dc.b $00
  261.  dc.w    %0000001111000000,%0111110000111110
  262.  dc.w    %0000111111110000,%1111001111101111
  263.  dc.w    %0011111111111100,%1100000000100011
  264.  dc.w    %0111111111111110,%1000000111100001
  265.  dc.w    %0111111111111110,%1000000000100001
  266.  dc.w    %0011111111111100,%1100000000100011
  267.  dc.w    %0000111111110000,%1111001111101111
  268.  dc.w    %0000001111000000,%0111110000111110
  269.  dc.w    0,0    ; Ende des Sprite
  270.  
  271.  ; für die Sprite 4 und 5
  272.  ;BINÄR 00=COLOR 0 (TRANSPARENT)
  273.  ;BINÄR 10=COLOR 1 (BLAU)
  274.  ;BINÄR 01=COLOR 2 (VIOLETT)
  275.  ;BINÄR 11=COLOR 3 (GRAU)
  276.  
  277. MEINSPRITE4:        ; Länge: 13 Zeilen
  278. VSTART4:
  279.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  280. HSTART4:
  281.     dc.b $60+(14*4) ; Horizontale Pos. (von $40 bis $d8)
  282. VSTOP4:
  283.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  284.     dc.b $00
  285.  dc.w    %0000001111000000,%0111110000111110
  286.  dc.w    %0000111111110000,%1111001001001111
  287.  dc.w    %0011111111111100,%1100001001000011
  288.  dc.w    %0111111111111110,%1000001111000001
  289.  dc.w    %0111111111111110,%1000000001000001
  290.  dc.w    %0011111111111100,%1100000001000011
  291.  dc.w    %0000111111110000,%1111000001001111
  292.  dc.w    %0000001111000000,%0111110000111110
  293.  dc.w    0,0    ; Ende des Sprite
  294.  
  295. MEINSPRITE5:        ; Länge: 13 Zeilen
  296. VSTART5:
  297.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  298. HSTART5:
  299.     dc.b $60+(14*5) ; Horizontale Pos. (von $40 bis $d8)
  300. VSTOP5:
  301.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  302.     dc.b $00
  303.  dc.w    %0000001111000000,%0111110000111110
  304.  dc.w    %0000111111110000,%1111001111001111
  305.  dc.w    %0011111111111100,%1100001000000011
  306.  dc.w    %0111111111111110,%1000001111000001
  307.  dc.w    %0111111111111110,%1000000001000001
  308.  dc.w    %0011111111111100,%1100000001000011
  309.  dc.w    %0000111111110000,%1111001111001111
  310.  dc.w    %0000001111000000,%0111110000111110
  311.  dc.w    0,0    ; Ende des Sprite
  312.  
  313.  ; für die Sprite 6 und 7
  314.  ;BINÄR 00=COLOR 0 (TRANSPARENT)
  315.  ;BINÄR 10=COLOR 1 (HELLGRÜN)
  316.  ;BINÄR 01=COLOR 2 (BRAUN)
  317.  ;BINÄR 11=COLOR 3 (DUNKELROT)
  318.  
  319. MEINSPRITE6:        ; Länge: 13 Zeilen
  320. VSTART6:
  321.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  322. HSTART6:
  323.     dc.b $60+(14*6) ; Horizontale Pos. (von $40 bis $d8)
  324. VSTOP6:
  325.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  326.     dc.b $00
  327.  dc.w    %0000001111000000,%0111110000111110
  328.  dc.w    %0000111111110000,%1111001111001111
  329.  dc.w    %0011111111111100,%1100001000000011
  330.  dc.w    %0111111111111110,%1000001111000001
  331.  dc.w    %0111111111111110,%1000001001000001
  332.  dc.w    %0011111111111100,%1100001001000011
  333.  dc.w    %0000111111110000,%1111001111001111
  334.  dc.w    %0000001111000000,%0111110000111110
  335.  dc.w    0,0    ; Ende des Sprite
  336.  
  337. MEINSPRITE7:        ; Länge: 13 Zeilen
  338. VSTART7:
  339.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  340. HSTART7:
  341.     dc.b $60+(14*7) ; Horizontale Pos. (von $40 bis $d8)
  342. VSTOP7:
  343.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  344.     dc.b $00
  345.  dc.w    %0000001111000000,%0111110000111110
  346.  dc.w    %0000111111110000,%1111001111001111
  347.  dc.w    %0011111111111100,%1100000001000011
  348.  dc.w    %0111111111111110,%1000000001000001
  349.  dc.w    %0111111111111110,%1000000001000001
  350.  dc.w    %0011111111111100,%1100000001000011
  351.  dc.w    %0000111111110000,%1111000001001111
  352.  dc.w    %0000001111000000,%0111110000111110
  353.  dc.w    0,0    ; Ende des Sprite
  354.  
  355.         SECTION LEERESPLANE,BSS_C
  356.                 ; Ein auf 0 gesetztes Bitplane, wir
  357.                 ; müssen es verwenden, denn ohne Bitplane
  358.                 ; ist es nicht möglich, die Sprites
  359.                 ; zu aktivieren
  360. BITPLANE:
  361.     ds.b    40*256        ; Bitplane auf 0 Lowres
  362.  
  363.     end
  364.  
  365.  
  366. In  diesem  Listing werden alle 8 Sprites "gepointet", jeder von ihnen hat
  367. die Nummer gezeichnet. Wie schon  in  der  Theorie  erklärt  haben  die  8
  368. Sprites 4 separate Paletten, deswegen teilen sich immer zwei nebenstehende
  369. Sprites eine Palette:
  370.  
  371.     dc.w    $1A2,$F00    ; Color17, - Color1 der Sprite0/1 -ROT
  372.     dc.w    $1A4,$0F0    ; Color18, - Color2 der Sprite0/1 -GRÜN
  373.     dc.w    $1A6,$FF0    ; Color19, - Color3 der Sprite0/1 -GELB
  374.  
  375.     dc.w    $1AA,$FFF    ; Color21, - Color1 der Sprite2/3 -WEIß
  376.     dc.w    $1AC,$0BD    ; Color22, - Color2 der Sprite2/3 -WASSER
  377.     dc.w    $1AE,$D50    ; Color23, - Color3 der Sprite2/3 -ORANGE
  378.  
  379.     dc.w    $1B2,$00F    ; Color25, - Color1 der Sprite4/5 -BLAU
  380.     dc.w    $1B4,$F0F    ; Color26, - Color2 der Sprite4/5 -VIOLETT
  381.     dc.w    $1B6,$BBB    ; Color27, - Color3 der Sprite4/5 -GRAU
  382.  
  383.     dc.w    $1BA,$8E0    ; Color29, - Color1 der Sprite6/7 -HELLGRÜN
  384.     dc.w    $1BC,$a70    ; Color30, - Color2 der Sprite6/7 -BRAUN
  385.     dc.w    $1BE,$d00    ; Color31, - Color3 der Sprite6/7 -DUNKELROT
  386.  
  387.  
  388. Zu Bemerken ist, daß die Farben 16, 20, 24 und 28 nicht  von  den  Sprites
  389. verwendet  werden,  sie  werden übersprungen, da sie dem Color0 des Sprite
  390. entsprechen würden, also  dem  TRANSPARENT,  das  eben  keine  Farbe  ist,
  391. sondern  eher  als  "LOCH"  aufgefasst werden kann. Er nimmt die Farbe des
  392. darunterliegenden Bitplane (oder Sprite) an. Jeder Sprite hat sein VSTART,
  393. VSTOP und HSTART, sehen wir z.B. Sprite2:
  394.  
  395.  
  396. MEINSPRITE2:        ; Länge: 13 Zeilen
  397. VSTART2:
  398.     dc.b $60    ; Vertikale Pos. (von $2c bis $f2)
  399. HSTART2:
  400.     dc.b $60+(14*2) ; Horizontale Pos. (von $40 bis $d8)
  401. VSTOP2:
  402.     dc.b $68    ; $60+13=$6d    ; Ende Vertikal
  403.     dc.b $00
  404.  
  405.  
  406. Jeder  Sprite  ist  von  den  anderen distanziert, indem wir zu HSTART ein
  407. (14*x) dazugezählt haben. Nach dem linken  Mausdruck  werden  alle  HSTART
  408. außer  dem ersten geändert, um sie alle zu überlagern. Das Veranschaulicht
  409. dann die Priotitäten.
  410.  
  411.