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

  1.  
  2. ; Listing7c.s    EIN SPRITE WIRD HORIZONTAL BEWEGT, INDEM AUF EINE TABELLE
  3. ;        MIT VORDEFINIERTEN WERTEN ZUGEGRIFFEN WIRD.
  4.  
  5.  
  6.     SECTION CipundCop,CODE
  7.  
  8. Anfang:
  9.     move.l    4.w,a6        ; Execbase
  10.     jsr    -$78(a6)    ; Disable
  11.     lea    GfxName(PC),a1    ; Libname
  12.     jsr    -$198(a6)    ; OpenLibrary
  13.     move.l    d0,GfxBase
  14.     move.l    d0,a6
  15.     move.l    $26(a6),OldCop    ; speichern die alte COP
  16.  
  17. ;    Pointen auf das "leere" PIC
  18.  
  19.     MOVE.L    #BITPLANE,d0    ; wohin pointen
  20.     LEA    BPLPOINTERS,A1    ; COP-Pointer
  21.     move.w    d0,6(a1)
  22.     swap    d0
  23.     move.w    d0,2(a1)
  24.  
  25. ;    Pointen auf den Sprite
  26.  
  27.     MOVE.L    #MEINSPRITE,d0        ; Adresse des Sprite in d0
  28.     LEA    SpritePointers,a1    ; Pointer in der Copperlist
  29.     move.w    d0,6(a1)
  30.     swap    d0
  31.     move.w    d0,2(a1)
  32.  
  33.     move.l    #COPPERLIST,$dff080    ; unsere COP
  34.     move.w    d0,$dff088        ; START COP
  35.     move.w    #0,$dff1fc        ; NO AGA!
  36.     move.w    #$c00,$dff106        ; NO AGA!
  37.  
  38. mouse:
  39.     cmpi.b    #$ff,$dff006    ; Zeile 255?
  40.     bne.s    mouse
  41.  
  42.     bsr.s    BewegeSprite    ; Bewege Sprite 0 nach rechts
  43.  
  44. Warte:
  45.     cmpi.b    #$ff,$dff006    ; Zeile 255?
  46.     beq.s    Warte
  47.  
  48.     btst    #6,$bfe001    ; Mouse gedrückt?
  49.     bne.s    mouse
  50.  
  51.  
  52.     move.l    OldCop(PC),$dff080    ; Pointen auf die alte SystemCOP
  53.     move.w    d0,$dff088        ; Starten die alte SystemCOP
  54.  
  55.     move.l    4.w,a6
  56.     jsr    -$7e(a6)    ; Enable
  57.     move.l    gfxbase(PC),a1
  58.     jsr    -$19e(a6)    ; Closelibrary
  59.     rts
  60.  
  61. ;    Daten
  62.  
  63. GfxName:
  64.     dc.b    "graphics.library",0,0
  65.  
  66. GfxBase:
  67.     dc.l    0
  68.  
  69. OldCop:
  70.     dc.l    0
  71.  
  72. ; Diese Routine bewegt den Sprite indem die auf das Byte HSTART, also
  73. ; dem Byte seiner X-Position, zugreift. Es werden die Werte einer
  74. ; vorausberechneten Tabelle (TABX) eingesetzt.
  75. ; Wenn wir nur auf HSTART agieren, dann bewegen wir den Sprite um jeweils 2
  76. ; Pixel, und nicht nur einem, deswegen ist der Scroll etwas "ruckelig", vor
  77. ; allem wenn er langsamer wird. In den nächsten Listings werden wir dieses
  78. ; Manko beheben und mit einem Pixel scrollen.
  79.  
  80. BewegeSprite:
  81.     ADDQ.L    #1,TABXPOINT     ; Pointe auf das nächste Byte
  82.     MOVE.L    TABXPOINT(PC),A0 ; Adresse, die im Long TABXPOINT enthalten ist
  83.                  ; wird in a0 kopiert
  84.     CMP.L    #ENDETABX-1,A0     ; Sind wir beim letzten Long der TAB?
  85.     BNE.S    NOBSTART     ; noch nicht? dann mach´ weiter
  86.     MOVE.L    #TABX-1,TABXPOINT ; Starte wieder beim ersten Long
  87. NOBSTART:
  88.     MOVE.b    (A0),HSTART    ; Kopiert das Byte aus der Tabelle nach HSTART
  89.     rts
  90.  
  91. TABXPOINT:
  92.     dc.l    TABX-1    ; BEMERKUNG: Die Werte in der Tabelle sind Bytes,
  93.             ; deswegen arbeiten wir mit einem ADDQ.L #1,TABXPOINT
  94.             ; und nicht mit #2 wie es bei Word der Fall wäre oder
  95.             ; mit #4, Longword.
  96.  
  97. ; Tabelle mit vordefinierten X-Koordinaten.
  98. ; Zu Bemerken, daß die X-Werte innerhalb der Grenzen $40 und $d8 sein müssen,
  99. ; in der Tabelle kommen deswegen keine Werte vor, die kleiner als $40 oder
  100. ; größer als $d8 sind.
  101.  
  102. TABX:
  103.     dc.b    $41,$43,$46,$48,$4A,$4C,$4F,$51,$53,$55,$58,$5A ; 200 valori
  104.     dc.b    $5C,$5E,$61,$63,$65,$67,$69,$6B,$6E,$70,$72,$74
  105.     dc.b    $76,$78,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A,$8C
  106.     dc.b    $8E,$90,$92,$94,$96,$97,$99,$9B,$9D,$9E,$A0,$A2
  107.     dc.b    $A3,$A5,$A7,$A8,$AA,$AB,$AD,$AE,$B0,$B1,$B2,$B4
  108.     dc.b    $B5,$B6,$B8,$B9,$BA,$BB,$BD,$BE,$BF,$C0,$C1,$C2
  109.     dc.b    $C3,$C4,$C5,$C5,$C6,$C7,$C8,$C9,$C9,$CA,$CB,$CB
  110.     dc.b    $CC,$CC,$CD,$CD,$CE,$CE,$CE,$CF,$CF,$CF,$CF,$D0
  111.     dc.b    $D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0,$D0,$CF,$CF,$CF
  112.     dc.b    $CF,$CE,$CE,$CE,$CD,$CD,$CC,$CC,$CB,$CB,$CA,$C9
  113.     dc.b    $C9,$C8,$C7,$C6,$C5,$C5,$C4,$C3,$C2,$C1,$C0,$BF
  114.     dc.b    $BE,$BD,$BB,$BA,$B9,$B8,$B6,$B5,$B4,$B2,$B1,$B0
  115.     dc.b    $AE,$AD,$AB,$AA,$A8,$A7,$A5,$A3,$A2,$A0,$9E,$9D
  116.     dc.b    $9B,$99,$97,$96,$94,$92,$90,$8E,$8C,$8A,$88,$86
  117.     dc.b    $84,$82,$80,$7E,$7C,$7A,$78,$76,$74,$72,$70,$6E
  118.     dc.b    $6B,$69,$67,$65,$63,$61,$5E,$5C,$5A,$58,$55,$53
  119.     dc.b    $51,$4F,$4C,$4A,$48,$46,$43,$41
  120. ENDETABX:
  121.  
  122.  
  123.  
  124.     SECTION GRAPHIC,DATA_C
  125.  
  126. COPPERLIST:
  127. SpritePointers:
  128.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  129.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  130.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  131.     dc.w    $13e,0
  132.  
  133.     dc.w    $8E,$2c81    ; DiwStrt
  134.     dc.w    $90,$2cc1    ; DiwStop
  135.     dc.w    $92,$38        ; DdfStart
  136.     dc.w    $94,$d0        ; DdfStop
  137.     dc.w    $102,0        ; BplCon1
  138.     dc.w    $104,0        ; BplCon2
  139.     dc.w    $108,0        ; Bpl1Mod
  140.     dc.w    $10a,0        ; Bpl2Mod
  141.  
  142.             ; 5432109876543210
  143.     dc.w    $100,%0001001000000000  ; Bit 12 an!! 1 Bitplane Lowres
  144.  
  145. BPLPOINTERS:
  146.     dc.w $e0,0,$e2,0    ;erstes  Bitplane
  147.  
  148.     dc.w    $180,$000    ; color0    ; Hintergrund Schwarz
  149.     dc.w    $182,$123    ; color1    ; Farbe 1 des Bitplane, die
  150.                         ; in diesem Fall leer ist,
  151.                         ; und deswegen nicht erscheint
  152.  
  153.     dc.w    $1A2,$F00    ; Color17, oder COLOR1 des Sprite0 - ROSSO
  154.     dc.w    $1A4,$0F0    ; Color18, oder COLOR2 des Sprite0 - VERDE
  155.     dc.w    $1A6,$FF0    ; Color19, oder COLOR3 des Sprite0 - GIALLO
  156.  
  157.     dc.w    $FFFF,$FFFE    ; Ende der Copperlist
  158.  
  159.  
  160. ; ************ Hier ist der Sprite: NATÜRLICH muß er in CHIP RAM sein! *******
  161.  
  162. MEINSPRITE:      ; Länge 13 Zeilen
  163. VSTART:
  164.     dc.b $50  ; Vertikale Anfangsposition des Sprite (von $2c bis $f2)
  165. HSTART:
  166.     dc.b $90  ; Horizontale Anfangsposition des Sprite (von $40 bis $d8)
  167. VSTOP:
  168.     dc.b $5d  ; $50+13=$5d - Vertikale Endposition des Sprite
  169.     dc.b $00
  170.  dc.w    %0000000000000000,%0000110000110000 ; Binäres Format für ev. Änderungen
  171.  dc.w    %0000000000000000,%0000011001100000
  172.  dc.w    %0000000000000000,%0000001001000000
  173.  dc.w    %0000000110000000,%0011000110001100 ;BINÄR 00=COLOR 0 (DURCHSICHTIG)
  174.  dc.w    %0000011111100000,%0110011111100110 ;BINÄR 10=COLOR 1 (ROT)
  175.  dc.w    %0000011111100000,%1100100110010011 ;BINÄR 01=COLOR 2 (GRÜN)
  176.  dc.w    %0000110110110000,%1111100110011111 ;BINÄR 11=COLOR 3 (GELB)
  177.  dc.w    %0000011111100000,%0000011111100000
  178.  dc.w    %0000011111100000,%0001111001111000
  179.  dc.w    %0000001111000000,%0011101111011100
  180.  dc.w    %0000000110000000,%0011000110001100
  181.  dc.w    %0000000000000000,%1111000000001111
  182.  dc.w    %0000000000000000,%1111000000001111
  183.  dc.w    0,0    ; 2 word auf NULL definieren das Ende des Sprite.
  184.  
  185.  
  186.     SECTION LEERESPLANE,BSS_C ; Ein auf 0 gesetztes Bitplane, wir
  187.                   ; müssen es verwenden, denn ohne Bitplane
  188.                   ; ist es nicht möglich, die Sprites
  189.                   ; zu aktivieren
  190. BITPLANE:
  191.     ds.b    40*256        ; Bitplane auf 0 Lowres
  192.  
  193.     end
  194.  
  195. Die komplexen und realistischen Bewegungen werden mit Tabellen gemacht!
  196. Versucht die Tabelle mit der folgenden zu ersetzen, und ihr werdet den Abprall
  197. des Sprite verändern(Amiga+b+c+i zum Kopieren),(Amiga+b+x um ein Stück zu
  198. Löschen)
  199.  
  200. TABX:
  201.     dc.b    $CF,$CD,$CA,$C8,$C6,$C4,$C1,$BF,$BD,$BB,$B8,$B6 ; 200 Werte
  202.     dc.b    $B4,$B2,$AF,$AD,$AB,$A9,$A7,$A5,$A2,$A0,$9E,$9C
  203.     dc.b    $9A,$98,$96,$94,$92,$90,$8E,$8C,$8A,$88,$86,$84
  204.     dc.b    $82,$80,$7E,$7C,$7A,$79,$77,$75,$73,$72,$70,$6E
  205.     dc.b    $6D,$6B,$69,$68,$66,$65,$63,$62,$60,$5F,$5E,$5C
  206.     dc.b    $5B,$5A,$58,$57,$56,$55,$53,$52,$51,$50,$4F,$4E
  207.     dc.b    $4D,$4C,$4B,$4B,$4A,$49,$48,$47,$47,$46,$45,$45
  208.     dc.b    $44,$44,$43,$43,$42,$42,$42,$41,$41,$41,$41,$40
  209.     dc.b    $40,$40,$40,$40,$40,$40,$40,$40,$40,$41,$41,$41
  210.     dc.b    $41,$42,$42,$42,$43,$43,$44,$44,$45,$45,$46,$47
  211.     dc.b    $47,$48,$49,$4A,$4B,$4B,$4C,$4D,$4E,$4F,$50,$51
  212.     dc.b    $52,$53,$55,$56,$57,$58,$5A,$5B,$5C,$5E,$5F,$60
  213.     dc.b    $62,$63,$65,$66,$68,$69,$6B,$6D,$6E,$70,$72,$73
  214.     dc.b    $75,$77,$79,$7A,$7C,$7E,$80,$82,$84,$86,$88,$8A
  215.     dc.b    $8C,$8E,$90,$92,$94,$96,$98,$9A,$9C,$9E,$A0,$A2
  216.     dc.b    $A5,$A7,$A9,$AB,$AD,$AF,$B2,$B4,$B6,$B8,$BB,$BD
  217.     dc.b    $BF,$C1,$C4,$C6,$C8,$CA,$CD,$CF
  218. ENDETABX:
  219.  
  220.  
  221. Nun ersetzt sie mit dieser, sie läßt den Sprite in beide Richtungen schwingen.
  222.  
  223. TABX:
  224.     dc.b    $91,$93,$96,$98,$9A,$9C,$9F,$A1,$A3,$A5,$A7,$A9 ; 200 Werte
  225.     dc.b    $AC,$AE,$B0,$B2,$B4,$B6,$B8,$B9,$BB,$BD,$BF,$C0
  226.     dc.b    $C2,$C4,$C5,$C7,$C8,$CA,$CB,$CC,$CD,$CF,$D0,$D1
  227.     dc.b    $D2,$D3,$D3,$D4,$D5,$D5,$D6,$D7,$D7,$D7,$D8,$D8
  228.     dc.b    $D8,$D8,$D8,$D8,$D8,$D8,$D7,$D7,$D7,$D6,$D5,$D5
  229.     dc.b    $D4,$D3,$D3,$D2,$D1,$D0,$CF,$CD,$CC,$CB,$CA,$C8
  230.     dc.b    $C7,$C5,$C4,$C2,$C0,$BF,$BD,$BB,$B9,$B8,$B6,$B4
  231.     dc.b    $B2,$B0,$AE,$AC,$A9,$A7,$A5,$A3,$A1,$9F,$9C,$9A
  232.     dc.b    $98,$96,$93,$91,$8F,$8D,$8A,$88,$86,$84,$81,$7F
  233.     dc.b    $7D,$7B,$79,$77,$74,$72,$70,$6E,$6C,$6A,$68,$67
  234.     dc.b    $65,$63,$61,$60,$5E,$5C,$5B,$59,$58,$56,$55,$54
  235.     dc.b    $53,$51,$50,$4F,$4E,$4D,$4D,$4C,$4B,$4B,$4A,$49
  236.     dc.b    $49,$49,$48,$48,$48,$48,$48,$48,$48,$48,$49,$49
  237.     dc.b    $49,$4A,$4B,$4B,$4C,$4D,$4D,$4E,$4F,$50,$51,$53
  238.     dc.b    $54,$55,$56,$58,$59,$5B,$5C,$5E,$60,$61,$63,$65
  239.     dc.b    $67,$68,$6A,$6C,$6E,$70,$72,$74,$77,$79,$7B,$7D
  240.     dc.b    $7F,$81,$84,$86,$88,$8A,$8D,$8F
  241. ENDETABX:
  242.  
  243.