|
Source Codes Hier findest Du ein kleines Beispiel zur (Hires-) Spritedarstellung in Assembler. Der Source sollte eigentlich verständlich dokumentiert sein. Er sollte auf dem Bildschirm von rechts nach links als zoomender und anders herum als normaler Sprite seine Bahn fliegen. Viel Spaß damit. |
|
;--------------------------------------------------------------------------
;
; 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
;-
|
Letzte Änderung: 2019-01-03 11:41:45