Assemblerkurs - Teil 3

(c) 1998 by Enrico Bauermeister

;Datei       : listing14.asm
;Beschreibung: Ein Sprite wird angezeigt und bewegt.
;Autor       : Enrico Bauermeister
;Datum       : 12.02.1998
;Assembler   : TFA AsmOne v1.30
;===================================================

;Interrupts sperren - Betriebssystem ausschalten
;-----------------------------------------------
 move.w   #$4000,$dff09a

;Bitplanepointer in Copperliste eintragen
;----------------------------------------
 move.l   #bitplane,d0
 lea      bitplanepointer,a1
 move.w   d0,6(a1)
 swap     d0
 move.w   d0,2(a1)

;Spritepointer in Copperliste eintragen
;--------------------------------------
 move.l   #sprite,d0
 lea      spritepointer,a1
 move.w   d0,6(a1)
 swap     d0
 move.w   d0,2(a1)

;Copperliste aktivieren
;----------------------
 move.l   #Copperliste,$dff084

;pruefen ob wir schon an Zeile 255 angekommen sind
;-------------------------------------------------
pruefe:   
 cmpi.b   #$ff,$dff006
 bne.s    pruefe

;Sprite bewegen
;--------------
 bsr.w    MoveSprite

;pruefen on wir noch auf Zeile 255 sind, und auf Zeile 0 warten
;--------------------------------------------------------------
warte:
 cmpi.b   #$ff,$dff006
 beq.s    warte

;Linke Maustaste gedrueckt ?
;---------------------------
 btst     #6,$bfe001
 bne.s    pruefe

;Interrupts wieder erlauben
;--------------------------
 move.w   #$c000,$dff09a

;Programmende
;------------
 moveq    #0,d0
 rts

;Routine um den Sprite zu bewegen
;--------------------------------
MoveSprite:
 tst.b    richtung
 beq.w    nach_rechts
 lea      hstart,a0
 cmpi.b   #$40,(a0)    ;Sprite schon ganz links?
 beq      rechts
 subq.b   #1,hstart    ;Sprite nach links bewegen.
 rts
rechts:
 clr.b    richtung
 rts
nach_rechts:
 lea      hstart,a0
 cmpi.b   #$d8,(a0)    ;Sprite schon ganz rechts?
 beq      links
 addq.b   #1,hstart    ;Sprite nach rechts bewegen.
 rts
links:
 move.b   #$ff,richtung
 rts

;Datenbereich
;------------
richtung:
 dc.b     0,0

;Copperliste definieren
;----------------------
 SECTION Cl,CODE_C
Copperliste:
 dc.w     $008e,$2c81  ;DIWSTRT
 dc.w     $0090,$2cc1  ;DIWSTOP
 dc.w     $0092,$0038  ;DDFSTRT
 dc.w     $0094,$00d0  ;DDFSTOP
 dc.w     $0100,$1200  ;BPLCON0
 dc.w     $0108,$0000  ;BPL1MOD
 dc.w     $010a,$0000  ;BPL2MOD
bitplanepointer:
 dc.w     $00e0,$0000  ;BPL1PTH
 dc.w     $00e2,$0000  ;BPL1PTL
spritepointer:
 dc.w     $0120,$0000  ;SPR0PTH
 dc.w     $0122,$0000  ;SPR0PTL
 dc.w     $0124,$0000  ;SPR1PTH
 dc.w     $0126,$0000  ;SPR1PTL
 dc.w     $0128,$0000  ;SPR2PTH
 dc.w     $012a,$0000  ;SPR2PTL
 dc.w     $012c,$0000  ;SPR3PTH
 dc.w     $012e,$0000  ;SPR3PTL
 dc.w     $0130,$0000  ;SPR4PTH
 dc.w     $0132,$0000  ;SPR4PTL
 dc.w     $0134,$0000  ;SPR5PTH
 dc.w     $0136,$0000  ;SPR5PTL
 dc.w     $0138,$0000  ;SPR6PTH
 dc.w     $013a,$0000  ;SPR6PTL
 dc.w     $013c,$0000  ;SPR7PTH
 dc.w     $013e,$0000  ;SPR7PTL
 dc.w     $0180,$0000  ;COLOR00
 dc.w     $0182,$0000  ;COLOR01
 dc.w     $0102,$0000  ;COLOR16
 dc.w     $01a2,$0fed  ;COLOR17
 dc.w     $01a4,$0fa0  ;COLOR18
 dc.w     $01a6,$0820  ;COLOR19
 dc.w     $ffff,$fffe  ;Ende der Copperliste

;Spritedefinition
;----------------
sprite:
;
;Sprite hat eine Höhe von 15 Punkten
;
 dc.b     $64  ;VSTART - von $2c bis $f2
hstart:
 dc.b     $87  ;HSTART - von $40 bis $d8
 dc.b     $73  ;VSTOP  - $64+15=$73
 dc.b     $00  ;control bits
;
;Spritedaten aus ArtPRO
;
 dc.w     $0820,$0FE0
 dc.w     $2FC8,$3038
 dc.w     $5304,$609C
 dc.w     $2C60,$410C
 dc.w     $E822,$810E
 dc.w     $6820,$810E
 dc.w     $6000,$939E
 dc.w     $6000,$9FFE
 dc.w     $4000,$AFEE
 dc.w     $4000,$B39E
 dc.w     $C002,$B83E
 dc.w     $0000,$7C7C
 dc.w     $4004,$7FFC
 dc.w     $2008,$3FF8
 dc.w     $0830,$0FF0
 dc.w     $0000,$0000  ;Ende des Sprites

;Bitplane definieren
;-------------------
 SECTION ZielBitplane,BSS_C
bitplane:
 ds.b     40*256

 END

In diesem Listing wird wieder Sprite "sprite.iff" benutzt.                        

-eb-

Zurück Weiter