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