home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
assembler-kurs
/
listings3
/
listing7d.s
< prev
next >
Wrap
Text File
|
1977-12-31
|
7KB
|
223 lines
; Listing7d.s EIN SPRITE WIRD VERTIKALA BEWEGT, INDEM AUF EINE TABELLE
; MIT VORDEFINIERTEN WERTEN ZUGEGRIFFEN WIRD.
; - Zu Bemerken, daß wir maximal bis Zeile $FF kommen, und nicht
; weiter hinunter
SECTION CipundCop,CODE
Anfang:
move.l 4.w,a6 ; Execbase
jsr -$78(a6) ; Disable
lea GfxName(PC),a1 ; Libname
jsr -$198(a6) ; OpenLibrary
move.l d0,GfxBase
move.l d0,a6
move.l $26(a6),OldCop ; speichern die alte COP
; Pointen auf das "leere" PIC
MOVE.L #BITPLANE,d0 ; wohin pointen
LEA BPLPOINTERS,A1 ; COP-Pointer
move.w d0,6(a1)
swap d0
move.w d0,2(a1)
; Pointen auf den Sprite
MOVE.L #MEINSPRITE,d0 ; Adresse des Sprite in d0
LEA SpritePointers,a1 ; Pointer in der Copperlist
move.w d0,6(a1)
swap d0
move.w d0,2(a1)
move.l #COPPERLIST,$dff080 ; unsere COP
move.w d0,$dff088 ; START COP
move.w #0,$dff1fc ; NO AGA!
move.w #$c00,$dff106 ; NO AGA!
mouse:
cmpi.b #$ff,$dff006 ; Zeile 255?
bne.s mouse
bsr.s BewegeSprite ; Bewege Sprite 0 nach rechts
Warte:
cmpi.b #$ff,$dff006 ; Zeile 255?
beq.s Warte
btst #6,$bfe001 ; Mouse gedrückt?
bne.s mouse
move.l OldCop(PC),$dff080 ; Pointen auf die alte SystemCOP
move.w d0,$dff088 ; Starten die alte SystemCOP
move.l 4.w,a6
jsr -$7e(a6) ; Enable
move.l gfxbase(PC),a1
jsr -$19e(a6) ; Closelibrary
rts
; Daten
GfxName:
dc.b "graphics.library",0,0
GfxBase:
dc.l 0
OldCop:
dc.l 0
; Diese Routine bewegt den Sprite nach Oben und nach Unten, indem sie auf
; die Bytes VSTART und VSTOP zugreift, also den Anfangs- und Endkoordinaten
; des Sprites. Es werden schon vordefinierte Koordinaten aus TABY eingesetzt.
BewegeSprite:
ADDQ.L #1,TABYPOINT ; Pointe auf das nächste Byte
MOVE.L TABYPOINT(PC),A0 ; Adresse, die im Long TABXPOINT enthalten ist
; wird in a0 kopiert
CMP.L #ENDETABY-1,A0 ; Sind wir beim letzten Long der TAB?
BNE.S NOBSTART ; noch nicht? dann mach´ weiter
MOVE.L #TABY-1,TABYPOINT ; Starte wieder beim ersten Long
NOBSTART:
moveq #0,d0 ; Lösche d0
MOVE.b (A0),d0 ; kopiere Byte aus der Tabelle in d0
MOVE.b d0,VSTART ; kopieren das Byte in VSTART
ADD.B #13,D0 ; Addiere die Länge des Sprite, um die
; Endposition (VSTOP) zu ermitteln
move.b d0,VSTOP ; Gib diesen Wert in VSTOP
rts
TABYPOINT:
dc.l TABY-1 ; BEMERKUNG: Die Werte in der Tabelle sind Bytes,
; deswegen arbeiten wir mit einem ADDQ.L #1,TABXPOINT
; und nicht mit #2 wie es bei Word der Fall wäre oder
; mit #4, Longword.
; Tabelle mit vordefinierten Y-Koordinaten.
; Zu Bemerken, daß die Y-Werte innerhalb der Grenzen $2c und $f2 sein müssen,
; in der Tabelle kommen deswegen keine Werte vor, die kleiner als $2c oder
; größer als $f2 sind.
TABY:
dc.b $EE,$EB,$E8,$E5,$E2,$DF,$DC,$D9,$D6,$D3,$D0,$CD ; Rekord-
dc.b $CA,$C7,$C4,$C1,$BE,$BB,$B8,$B5,$B2,$AF,$AC,$A9 ; hochsprung!
dc.b $A6,$A4,$A1,$9E,$9B,$98,$96,$93,$90,$8E,$8B,$88 ;
dc.b $86,$83,$81,$7E,$7C,$79,$77,$74,$72,$70,$6D,$6B ; 200 Werte
dc.b $69,$66,$64,$62,$60,$5E,$5C,$5A,$58,$56,$54,$52
dc.b $51,$4F,$4D,$4B,$4A,$48,$47,$45,$44,$42,$41,$3F
dc.b $3E,$3D,$3C,$3A,$39,$38,$37,$36,$35,$34,$33,$33
dc.b $32,$31,$30,$30,$2F,$2F,$2E,$2E,$2D,$2D,$2D,$2C
dc.b $2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2C,$2D,$2D,$2D
dc.b $2E,$2E,$2F,$2F,$30,$30,$31,$32,$33,$33,$34,$35
dc.b $36,$37,$38,$39,$3A,$3C,$3D,$3E,$3F,$41,$42,$44
dc.b $45,$47,$48,$4A,$4B,$4D,$4F,$51,$52,$54,$56,$58
dc.b $5A,$5C,$5E,$60,$62,$64,$66,$69,$6B,$6D,$70,$72
dc.b $74,$77,$79,$7C,$7E,$81,$83,$86,$88,$8B,$8E,$90
dc.b $93,$96,$98,$9B,$9E,$A1,$A4,$A6,$A9,$AC,$AF,$B2
dc.b $B5,$B8,$BB,$BE,$C1,$C4,$C7,$CA,$CD,$D0,$D3,$D6
dc.b $D9,$DC,$DF,$E2,$E5,$E8,$EB,$EE
ENDETABY:
SECTION GRAPHIC,DATA_C
COPPERLIST:
SpritePointers:
dc.w $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
dc.w $12a,0,$12c,0,$12e,0,$130,0,$132,0
dc.w $134,0,$136,0,$138,0,$13a,0,$13c,0
dc.w $13e,0
dc.w $8E,$2c81 ; DiwStrt
dc.w $90,$2cc1 ; DiwStop
dc.w $92,$38 ; DdfStart
dc.w $94,$d0 ; DdfStop
dc.w $102,0 ; BplCon1
dc.w $104,0 ; BplCon2
dc.w $108,0 ; Bpl1Mod
dc.w $10a,0 ; Bpl2Mod
; 5432109876543210
dc.w $100,%0001001000000000 ; Bit 12 an!! 1 Bitplane Lowres
BPLPOINTERS:
dc.w $e0,0,$e2,0 ;erstes Bitplane
dc.w $180,$000 ; Color0 ; Hintergrund Schwarz
dc.w $182,$123 ; Color1 ; Farbe 1 des Bitplane, die
; in diesem Fall leer ist,
; und deswegen nicht erscheint
dc.w $1A2,$F00 ; Color17, oder COLOR1 des Sprite0 - ROT
dc.w $1A4,$0F0 ; Color18, oder COLOR2 des Sprite0 - GRÜN
dc.w $1A6,$FF0 ; Color19, oder COLOR3 des Sprite0 - GELB
dc.w $FFFF,$FFFE ; Ende der Copperlist
; ************ Hier ist der Sprite: NATÜRLICH muß er in CHIP RAM sein! ************
MEINSPRITE: ; Länge 13 Zeilen
VSTART:
dc.b $50 ; Vertikale Anfangsposition des Sprite (von $2c bis $f2)
HSTART:
dc.b $90 ; Horizontale Anfangsposition des Sprite (von $40 bis $d8)
VSTOP:
dc.b $5d ; $50+13=$5d - Vertikale Endposition des Sprite
dc.b $00
dc.w %0000000000000000,%0000110000110000 ; Binäres Format für ev. Änderungen
dc.w %0000000000000000,%0000011001100000
dc.w %0000000000000000,%0000001001000000
dc.w %0000000110000000,%0011000110001100 ;BINÄR 00=COLOR 0 (DURCHSICHTIG)
dc.w %0000011111100000,%0110011111100110 ;BINÄR 10=COLOR 1 (ROT)
dc.w %0000011111100000,%1100100110010011 ;BINÄR 01=COLOR 2 (GRÜN)
dc.w %0000110110110000,%1111100110011111 ;BINÄR 11=COLOR 3 (GELB)
dc.w %0000011111100000,%0000011111100000
dc.w %0000011111100000,%0001111001111000
dc.w %0000001111000000,%0011101111011100
dc.w %0000000110000000,%0011000110001100
dc.w %0000000000000000,%1111000000001111
dc.w %0000000000000000,%1111000000001111
dc.w 0,0 ; 2 word auf NULL definieren das Ende des Sprite.
SECTION LEERESPLANE,BSS_C ; Ein auf 0 gesetztes Bitplane, wir
; müssen es verwenden, denn ohne Bitplane
; ist es nicht möglich, die Sprites
; zu aktivieren
BITPLANE:
ds.b 40*256 ; Bitplane auf 0 Lowres
end
Die komplexen und realistischen Bewegungen werden mit Tabellen gemacht!
Versucht die Tabelle mit der folgenden zu ersetzen, und ihr werdet den Abprall
des Sprite verändern(Amiga+b+c+i zum Kopieren),(Amiga+b+x um ein Stück zu
Löschen)
TABY:
dc.b $8E,$91,$94,$97,$9A,$9D,$A0,$A3,$A6,$A9,$AC,$AF ; ondeggio
dc.b $B2,$B4,$B7,$BA,$BD,$BF,$C2,$C5,$C7,$CA,$CC,$CE ; 200 valori
dc.b $D1,$D3,$D5,$D7,$D9,$DB,$DD,$DF,$E0,$E2,$E3,$E5
dc.b $E6,$E7,$E9,$EA,$EB,$EC,$EC,$ED,$EE,$EE,$EF,$EF
dc.b $EF,$EF,$F0,$EF,$EF,$EF,$EF,$EE,$EE,$ED,$EC,$EC
dc.b $EB,$EA,$E9,$E7,$E6,$E5,$E3,$E2,$E0,$DF,$DD,$DB
dc.b $D9,$D7,$D5,$D3,$D1,$CE,$CC,$CA,$C7,$C5,$C2,$BF
dc.b $BD,$BA,$B7,$B4,$B2,$AF,$AC,$A9,$A6,$A3,$A0,$9D
dc.b $9A,$97,$94,$91,$8E,$8B,$88,$85,$82,$7F,$7C,$79
dc.b $76,$73,$70,$6D,$6A,$68,$65,$62,$5F,$5D,$5A,$57
dc.b $55,$52,$50,$4E,$4B,$49,$47,$45,$43,$41,$3F,$3D
dc.b $3C,$3A,$39,$37,$36,$35,$33,$32,$31,$30,$30,$2F
dc.b $2E,$2E,$2D,$2D,$2D,$2D,$2C,$2D,$2D,$2D,$2D,$2E
dc.b $2E,$2F,$30,$30,$31,$32,$33,$35,$36,$37,$39,$3A
dc.b $3C,$3D,$3F,$41,$43,$45,$47,$49,$4B,$4E,$50,$52
dc.b $55,$57,$5A,$5D,$5F,$62,$65,$68,$6A,$6D,$70,$73
dc.b $76,$79,$7C,$7F,$82,$85,$88,$8B
ENDETABY: