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

  1.  
  2. ; Listing7d.s    EIN SPRITE WIRD VERTIKALA BEWEGT, INDEM AUF EINE TABELLE
  3. ;        MIT VORDEFINIERTEN WERTEN ZUGEGRIFFEN WIRD.
  4.  
  5. ;        - Zu Bemerken, daß wir maximal bis Zeile $FF kommen, und nicht
  6. ;         weiter hinunter
  7.  
  8.     SECTION CipundCop,CODE
  9.  
  10. Anfang:
  11.     move.l    4.w,a6        ; Execbase
  12.     jsr    -$78(a6)    ; Disable
  13.     lea    GfxName(PC),a1    ; Libname
  14.     jsr    -$198(a6)    ; OpenLibrary
  15.     move.l    d0,GfxBase
  16.     move.l    d0,a6
  17.     move.l    $26(a6),OldCop    ; speichern die alte COP
  18.  
  19. ;    Pointen auf das "leere" PIC
  20.  
  21.     MOVE.L    #BITPLANE,d0    ; wohin pointen
  22.     LEA    BPLPOINTERS,A1    ; COP-Pointer
  23.     move.w    d0,6(a1)
  24.     swap    d0
  25.     move.w    d0,2(a1)
  26.  
  27. ;    Pointen auf den Sprite
  28.  
  29.     MOVE.L    #MEINSPRITE,d0        ; Adresse des Sprite in d0
  30.     LEA    SpritePointers,a1    ; Pointer in der Copperlist
  31.     move.w    d0,6(a1)
  32.     swap    d0
  33.     move.w    d0,2(a1)
  34.  
  35.     move.l    #COPPERLIST,$dff080    ; unsere COP
  36.     move.w    d0,$dff088        ; START COP
  37.     move.w    #0,$dff1fc        ; NO AGA!
  38.     move.w    #$c00,$dff106        ; NO AGA!
  39.  
  40. mouse:
  41.     cmpi.b    #$ff,$dff006    ; Zeile 255?
  42.     bne.s    mouse
  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 alte 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 Oben und nach Unten, indem sie auf
  75. ; die Bytes VSTART und VSTOP zugreift, also den Anfangs- und Endkoordinaten
  76. ; des Sprites. Es werden schon vordefinierte Koordinaten aus TABY eingesetzt.
  77.  
  78. BewegeSprite:
  79.     ADDQ.L    #1,TABYPOINT     ; Pointe auf das nächste Byte
  80.     MOVE.L    TABYPOINT(PC),A0 ; Adresse, die im Long TABXPOINT enthalten ist
  81.                  ; wird in a0 kopiert
  82.     CMP.L    #ENDETABY-1,A0     ; Sind wir beim letzten Long der TAB?
  83.     BNE.S    NOBSTART     ; noch nicht? dann mach´ weiter
  84.     MOVE.L    #TABY-1,TABYPOINT ; Starte wieder beim ersten Long
  85. NOBSTART:
  86.     moveq    #0,d0        ; Lösche d0
  87.     MOVE.b    (A0),d0        ; kopiere Byte aus der Tabelle in d0
  88.     MOVE.b    d0,VSTART    ; kopieren das Byte in VSTART
  89.     ADD.B    #13,D0        ; Addiere die Länge des Sprite, um die
  90.                 ; Endposition  (VSTOP) zu ermitteln
  91.     move.b    d0,VSTOP    ; Gib diesen Wert in VSTOP
  92.     rts
  93.  
  94. TABYPOINT:
  95.     dc.l    TABY-1    ; BEMERKUNG: Die Werte in der Tabelle sind Bytes,
  96.             ; deswegen arbeiten wir mit einem ADDQ.L #1,TABXPOINT
  97.             ; und nicht mit #2 wie es bei Word der Fall wäre oder
  98.             ; mit #4, Longword.
  99.  
  100.  
  101. ; Tabelle mit vordefinierten Y-Koordinaten.
  102. ; Zu Bemerken, daß die Y-Werte innerhalb der Grenzen $2c und $f2 sein müssen,
  103. ; in der Tabelle kommen deswegen keine Werte vor, die kleiner als $2c oder
  104. ; größer als $f2 sind.
  105.  
  106. TABY:
  107.     dc.b    $EE,$EB,$E8,$E5,$E2,$DF,$DC,$D9,$D6,$D3,$D0,$CD ; Rekord-
  108.     dc.b    $CA,$C7,$C4,$C1,$BE,$BB,$B8,$B5,$B2,$AF,$AC,$A9 ; hochsprung!
  109.     dc.b    $A6,$A4,$A1,$9E,$9B,$98,$96,$93,$90,$8E,$8B,$88 ;
  110.     dc.b    $86,$83,$81,$7E,$7C,$79,$77,$74,$72,$70,$6D,$6B ; 200 Werte
  111.     dc.b    $69,$66,$64,$62,$60,$5E,$5C,$5A,$58,$56,$54,$52
  112.     dc.b    $51,$4F,$4D,$4B,$4A,$48,$47,$45,$44,$42,$41,$3F
  113.     dc.b    $3E,$3D,$3C,$3A,$39,$38,$37,$36,$35,$34,$33,$33
  114.     dc.b    $32,$31,$30,$30,$2F,$2F,$2E,$2E,$2D,$2D,$2D,$2C
  115.     dc.b    $2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2D,$2D,$2D
  116.     dc.b    $2E,$2E,$2F,$2F,$30,$30,$31,$32,$33,$33,$34,$35
  117.     dc.b    $36,$37,$38,$39,$3A,$3C,$3D,$3E,$3F,$41,$42,$44
  118.     dc.b    $45,$47,$48,$4A,$4B,$4D,$4F,$51,$52,$54,$56,$58
  119.     dc.b    $5A,$5C,$5E,$60,$62,$64,$66,$69,$6B,$6D,$70,$72
  120.     dc.b    $74,$77,$79,$7C,$7E,$81,$83,$86,$88,$8B,$8E,$90
  121.     dc.b    $93,$96,$98,$9B,$9E,$A1,$A4,$A6,$A9,$AC,$AF,$B2
  122.     dc.b    $B5,$B8,$BB,$BE,$C1,$C4,$C7,$CA,$CD,$D0,$D3,$D6
  123.     dc.b    $D9,$DC,$DF,$E2,$E5,$E8,$EB,$EE
  124. ENDETABY:
  125.  
  126.  
  127.     SECTION GRAPHIC,DATA_C
  128.  
  129. COPPERLIST:
  130. SpritePointers:
  131.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  132.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  133.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  134.     dc.w    $13e,0
  135.  
  136.     dc.w    $8E,$2c81    ; DiwStrt
  137.     dc.w    $90,$2cc1    ; DiwStop
  138.     dc.w    $92,$38        ; DdfStart
  139.     dc.w    $94,$d0        ; DdfStop
  140.     dc.w    $102,0        ; BplCon1
  141.     dc.w    $104,0        ; BplCon2
  142.     dc.w    $108,0        ; Bpl1Mod
  143.     dc.w    $10a,0        ; Bpl2Mod
  144.             ; 5432109876543210
  145.     dc.w    $100,%0001001000000000  ; Bit 12 an!! 1 Bitplane Lowres
  146.  
  147. BPLPOINTERS:
  148.     dc.w $e0,0,$e2,0    ;erstes  Bitplane
  149.  
  150.     dc.w    $180,$000    ; Color0    ; Hintergrund Schwarz
  151.     dc.w    $182,$123    ; Color1    ; Farbe 1 des Bitplane, die
  152.                         ; in diesem Fall leer ist,
  153.                         ; und deswegen nicht erscheint
  154.  
  155.     dc.w    $1A2,$F00    ; Color17, oder COLOR1 des Sprite0 - ROT
  156.     dc.w    $1A4,$0F0    ; Color18, oder COLOR2 des Sprite0 - GRÜN
  157.     dc.w    $1A6,$FF0    ; Color19, oder COLOR3 des Sprite0 - GELB
  158.  
  159.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  160.  
  161.  
  162. ; ************ Hier ist der Sprite: NATÜRLICH muß er in CHIP RAM sein! ************
  163.  
  164. MEINSPRITE:        ; Länge 13 Zeilen
  165. VSTART:
  166.     dc.b $50   ; Vertikale Anfangsposition des Sprite (von $2c bis $f2)
  167. HSTART:
  168.     dc.b $90   ; Horizontale Anfangsposition des Sprite (von $40 bis $d8)
  169. VSTOP:
  170.     dc.b $5d   ; $50+13=$5d    - Vertikale Endposition des Sprite
  171.     dc.b $00
  172.  dc.w    %0000000000000000,%0000110000110000 ; Binäres Format für ev. Änderungen
  173.  dc.w    %0000000000000000,%0000011001100000
  174.  dc.w    %0000000000000000,%0000001001000000
  175.  dc.w    %0000000110000000,%0011000110001100 ;BINÄR 00=COLOR 0 (DURCHSICHTIG)
  176.  dc.w    %0000011111100000,%0110011111100110 ;BINÄR 10=COLOR 1 (ROT)
  177.  dc.w    %0000011111100000,%1100100110010011 ;BINÄR 01=COLOR 2 (GRÜN)
  178.  dc.w    %0000110110110000,%1111100110011111 ;BINÄR 11=COLOR 3 (GELB)
  179.  dc.w    %0000011111100000,%0000011111100000
  180.  dc.w    %0000011111100000,%0001111001111000
  181.  dc.w    %0000001111000000,%0011101111011100
  182.  dc.w    %0000000110000000,%0011000110001100
  183.  dc.w    %0000000000000000,%1111000000001111
  184.  dc.w    %0000000000000000,%1111000000001111
  185.  dc.w    0,0    ; 2 word auf NULL definieren das Ende des Sprite.
  186.  
  187.  
  188.     SECTION LEERESPLANE,BSS_C ; Ein auf 0 gesetztes Bitplane, wir
  189.                   ; müssen es verwenden, denn ohne Bitplane
  190.                   ; ist es nicht möglich, die Sprites
  191.                   ; zu aktivieren
  192. BITPLANE:
  193.     ds.b    40*256        ; Bitplane auf 0 Lowres
  194.  
  195.     end
  196.  
  197. Die komplexen und realistischen Bewegungen werden mit Tabellen gemacht!
  198. Versucht die Tabelle mit der folgenden zu ersetzen, und ihr werdet den Abprall
  199. des Sprite verändern(Amiga+b+c+i zum Kopieren),(Amiga+b+x um ein Stück zu
  200. Löschen)
  201.  
  202.  
  203. TABY:
  204.     dc.b    $8E,$91,$94,$97,$9A,$9D,$A0,$A3,$A6,$A9,$AC,$AF ; ondeggio
  205.     dc.b    $B2,$B4,$B7,$BA,$BD,$BF,$C2,$C5,$C7,$CA,$CC,$CE ; 200 valori
  206.     dc.b    $D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,$E0,$E2,$E3,$E5
  207.     dc.b    $E6,$E7,$E9,$EA,$EB,$EC,$EC,$ED,$EE,$EE,$EF,$EF
  208.     dc.b    $EF,$EF,$F0,$EF,$EF,$EF,$EF,$EE,$EE,$ED,$EC,$EC
  209.     dc.b    $EB,$EA,$E9,$E7,$E6,$E5,$E3,$E2,$E0,$DF,$DD,$DB
  210.     dc.b    $D9,$D7,$D5,$D3,$D1,$CE,$CC,$CA,$C7,$C5,$C2,$BF
  211.     dc.b    $BD,$BA,$B7,$B4,$B2,$AF,$AC,$A9,$A6,$A3,$A0,$9D
  212.     dc.b    $9A,$97,$94,$91,$8E,$8B,$88,$85,$82,$7F,$7C,$79
  213.     dc.b    $76,$73,$70,$6D,$6A,$68,$65,$62,$5F,$5D,$5A,$57
  214.     dc.b    $55,$52,$50,$4E,$4B,$49,$47,$45,$43,$41,$3F,$3D
  215.     dc.b    $3C,$3A,$39,$37,$36,$35,$33,$32,$31,$30,$30,$2F
  216.     dc.b    $2E,$2E,$2D,$2D,$2D,$2D,$2C,$2D,$2D,$2D,$2D,$2E
  217.     dc.b    $2E,$2F,$30,$30,$31,$32,$33,$35,$36,$37,$39,$3A
  218.     dc.b    $3C,$3D,$3F,$41,$43,$45,$47,$49,$4B,$4E,$50,$52
  219.     dc.b    $55,$57,$5A,$5D,$5F,$62,$65,$68,$6A,$6D,$70,$73
  220.     dc.b    $76,$79,$7C,$7F,$82,$85,$88,$8B
  221. ENDETABY:
  222.  
  223.