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

  1.  
  2. ; Listing7u.s  - BEISPIEL EINES DOUBLE PLAYFILED
  3. ; Das ist ein einfaches Beispiel für das Dual-Playfield-mode.
  4. ; Es werden die zwei Playfield angezeigt. Durch druck auf den rechten
  5. ; Mausknopf wird die Priorität der Playfileds vertausche. Linke Taste
  6. ; zum Aussteigen.
  7. ; Achtet auf die Copperlist, die größten Unterschiede liegen beim
  8. ; Dual-Playfield-Mode bei den BPLPOINTERS und in den Farben.
  9.  
  10.  
  11.     SECTION CipundCop,CODE
  12.  
  13. Anfang:
  14.     move.l    4.w,a6        ; Execbase
  15.     jsr    -$78(a6)    ; Disable
  16.     lea    GfxName(PC),a1    ; Name lib
  17.     jsr    -$198(a6)    ; OpenLibrary
  18.     move.l    d0,GfxBase
  19.     move.l    d0,a6
  20.     move.l    $26(a6),OldCop    ; speichern die alte COP
  21.  
  22. ;    Pointen auf die PIC
  23.  
  24.     MOVE.L    #PIC1,d0    ; pointen das Playfield 1
  25.     LEA    BPLPOINTERS1,A1
  26.     MOVEQ    #3-1,D1
  27. POINTBP:
  28.     move.w    d0,6(a1)
  29.     swap    d0
  30.     move.w    d0,2(a1)
  31.     swap    d0
  32.     ADD.L    #40*256,d0
  33.     addq.w    #8,a1
  34.     dbra    d1,POINTBP
  35.  
  36.     MOVE.L    #PIC2,d0    ; Pointen das playfield 2
  37.     LEA    BPLPOINTERS2,A1
  38.     MOVEQ    #3-1,D1
  39. POINTBP2:
  40.     move.w    d0,6(a1)
  41.     swap    d0
  42.     move.w    d0,2(a1)
  43.     swap    d0
  44.     ADD.L    #40*256,d0
  45.     addq.w    #8,a1
  46.     dbra    d1,POINTBP2
  47.  
  48.  
  49.     move.l    #COPPERLIST,$dff080    ; unsere COP
  50.     move.w    d0,$dff088        ; START COP
  51.     move.w    #0,$dff1fc        ; NO AGA!
  52.     move.w    #$c00,$dff106        ; NO AGA!
  53.  
  54. mouse1:
  55.     btst    #2,$dff016    ; Mouse gedrückt?
  56.     bne.s    mouse2
  57.  
  58.     bchg.b    #6,BPLCON2    ; vertausche die Prioritäten durch Eingriff
  59.                 ; auf Bit 6 von $dff104
  60.  
  61. mouse2:
  62.     btst    #6,$bfe001    ; Mouse gedrückt?
  63.     bne.s    mouse1
  64.  
  65.     move.l    OldCop(PC),$dff080    ; Pointen auf die SystemCOP
  66.     move.w    d0,$dff088        ; starten die alte SystemCOP
  67.  
  68.     move.l    4.w,a6
  69.     jsr    -$7e(a6)    ; Enable
  70.     move.l    gfxbase(PC),a1
  71.     jsr    -$19e(a6)    ; Closelibrary
  72.     rts
  73.  
  74. ;    Daten
  75.  
  76. GfxName:
  77.     dc.b    "graphics.library",0,0
  78.  
  79. GfxBase:
  80.     dc.l    0
  81.  
  82. OldCop:
  83.     dc.l    0
  84.  
  85.  
  86.     SECTION GRAPHIC,DATA_C
  87.  
  88. COPPERLIST:
  89. SpritePointers:
  90.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  91.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  92.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  93.     dc.w    $13e,0
  94.  
  95.  
  96.     dc.w    $8E,$2c81    ; DiwStrt
  97.     dc.w    $90,$2cc1    ; DiwStop
  98.     dc.w    $92,$38        ; DdfStart
  99.     dc.w    $94,$d0        ; DdfStop
  100.     dc.w    $102,0        ; BplCon1
  101.  
  102.     dc.w    $104        ; BplCon2
  103.     dc.b    0
  104. BPLCON2:
  105.     dc.b    0        ; Priorität zwischen den Playfileds:
  106.                 ; Bit 6
  107.  
  108.     dc.w    $108,0        ; Bpl1Mod
  109.     dc.w    $10a,0        ; Bpl2Mod
  110.  
  111.             ; 5432109876543210
  112.     dc.w    $100,%0110011000000000    ; Bit 10 an = Dual Playfield
  113.                     ; verwende 6 Planes = 8 Farben
  114.                     ; pro Playfield
  115.  
  116. BPLPOINTERS1:
  117.     dc.w $e0,0,$e2,0    ;erstes Bitplane Playfield 1 (BPLPT1)
  118.     dc.w $e8,0,$ea,0    ;zweites Bitplane Playfield 1 (BPLPT3)
  119.     dc.w $f0,0,$f2,0    ;drittes Bitplane Playfield 1 (BPLPT5)
  120.  
  121.  
  122. BPLPOINTERS2:
  123.     dc.w $e4,0,$e6,0    ;erstes Bitplane Playfield 2 (BPLPT2)
  124.     dc.w $ec,0,$ee,0    ;zweites Bitplane Playfield 2 (BPLPT4)
  125.     dc.w $f4,0,$f6,0    ;drittes Bitplane Playfield 2 (BPLPT6)
  126.  
  127.     dc.w    $180,$0f0    ; Palette Playfield 1
  128.     dc.w    $182,$005    ; Farben von 0 bis 7
  129.     dc.w    $184,$a40 
  130.     dc.w    $186,$f80 
  131.     dc.w    $188,$f00 
  132.     dc.w    $18a,$0f0 
  133.     dc.w    $18c,$00f 
  134.     dc.w    $18e,$080 
  135.  
  136.               ; Palette Playfield 2
  137.     dc.w    $192,$367 ; Farben von 9 bis 15
  138.     dc.w    $194,$0cc ; COLOR8 ist durchsichtig, er wird nicht gesetzt
  139.     dc.w    $196,$a0a
  140.     dc.w    $198,$242
  141.     dc.w    $19a,$282 
  142.     dc.w    $19c,$861 
  143.     dc.w    $19e,$ff0 
  144.  
  145.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  146.  
  147. ;    Hier die zwei Bilder der beiden Playfields
  148.  
  149. PIC1:    incbin    "dual1.raw"
  150. PIC2:    incbin    "dual2.raw"
  151.  
  152.     end
  153.  
  154. Das  ist ein einfaches Beispiel der Verwendung des Dual-Playfield-Mode. Um
  155. etwas in diesem Modus anzuzeigen werden in etwa die  gleichen  Operationen
  156. durchgeführt  wie sonst üblich. Nur ist darauf zu achten, daß beim pointen
  157. der Bitplanes nicht vergessen wird, daß  die  geraden  Bitplanes  auf  ein
  158. Playfield zeigen und die ungeraden auf das andere. Normalerweise verwendet
  159. man hier zwei separate Routinen, und auch in  der  Copperlist  werden  die
  160. geraden  Bitplanes  von  den  ungeraden  unterschieden. Bei den Farben hat
  161. jedes Playfield seine Palette. Die Farben 0 und 8 sind die  Transparenten,
  162. sie  lassen  also  durchscheinen,  was  drunterliegt,  gleich  wie  das
  163. Transparente bei den Sprites. COLOR0 ist aber auch  der  Hintergrund,  das
  164. heißt,  daß  dort,  wo  beide  Playfields durchsichtig sind, COLOR0 IMMMER
  165. angezeigt wird, unabhängig von der Priorität der Playfields. Deswegen wird
  166. COLOR0  trotzdem  immer gesetzt, während es bei COLOR8 sinnlos ist, ihn zu
  167. setzen. Dir Priorität der  Playfileds  wird  durch  Bit  6  des  Registers
  168. BPLCON2  ($dff104)  bestimmt:  wenn  das  Bit  auf 0 steht, dann erscheint
  169. Playfield1 über dem Playfield 2, andersrum wenn Bit 6 auf eins steht.
  170.  
  171.