;--------------------------------------------------------------------------
;
; Sprite - wir lassen einen fliegen ....
;
;
; Quelle : http://www.minet.uni-jena.de/~andreasg/c64/c64_vic_html.htm
; Sehr empfehlenswerte Seite zum Thema VIC 6569
;
; Erweitert : 03/2004 M. Sachse http://www.cbmhardware.de
;
;--------------------------------------------------------------------------
!to "sprite.prg"
;--------------------------------------------------------------------------
; sys-Zeile fuer den Basicstart
;--------------------------------------------------------------------------
*= $0800
!byte $00,$0c,$08,$0a,$00,$9e,$32,$30,$36,$34,$00,$00,$00,$00
;--------------------------------------------------------------------------
* =$0810 ;Startadresse
;--------------------------------------------------------------------------
start sei
jsr $e544 ; clrscr
lda #$00 ; Bildschirm in schwarz
sta $d020
sta $d021
ldx #$3f ; Spritedaten ....
sprin lda sprdat,x
sta $3000,x ; ... einlesen
dex
bpl sprin
lda sprdat+63 ; Spritefarbe holen
sta $d027 ; und setzen
lda #$80 ; X-Position #128
sta $d001
lda #$c0 ; Spritepointer Sprite 1 setzen
sta $07f8 ; $3000 = $c0*$40
lda #$01 ;
sta $d017 ; X-Zoom
sta $d01d ; Y-Zoom
sta $d015 ; Sprite 1 an
ldx #$00 ;
loop: txa ; X-Reg. in Akku
sta$d000 ; Psition setzen
dir: inx ; Main Loop : Richtung
jsr space ; Space Taste abfragen
jsr Delay ; etwas Zeit verschwenden (Delay)
loc: cpx #$e9 ; Position abfragen
bne loop ; loop bei nicht erreicht
jsr finit ; ansonsten Daten fuer Move nach links und Zoom (X/Y)
cpx #$30 ; Position abfragen
bne loop ; loop bei nicht erreicht
jsr binit ; ansonsten Daten fuer Move nach rechts und kein Zoom (X/Y)
jmp loop ; und weiter im Loop
space lda $dc01 ; Space ?
and #$10
beq end
rts
end : lda #$00
sta $d015 ; Sprite 1 aus
jmp $ea81 ; wieder ins Basic
rts
finit lda #$ca ; $ca = dex
sta dir ; schreiben
lda #$30 ; neue Koordinate
sta loc+1 ; schreiben
lda #$01 ; X/Y Zoom an
sta $d017
sta $d01d
rts
binit lda #$e8 ; $e8 = inx
sta dir ; schreiben
lda #$e9 ; neue Koordinate
sta loc+1 ; schreiben
lda #$00 ; X/Y Zoom aus
sta $d017
sta $d01d
rts
;---------------------------------------------------------------------------
; Ein bischen Delay durch Warten auf den Rasterstrahl
;---------------------------------------------------------------------------
Delay:
ldy #$00
lda $d012
cmp #$00
bne Delay
iny
cpy #$03
bne Delay+2
rts
;---------------------------------------------------------------------------
; Ein sehr ideenreicher Sprite ;)
;---------------------------------------------------------------------------
sprdat !byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $ff, $ff, $ff
!byte $ff, $ff, $ff, $0e ;-Sprite Daten
;-
|