Sprites - wir lassen einen fliegen ...
Suche
Index
FAQ
Kontakt
Zurück
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.
logo

;--------------------------------------------------------------------------			
;
; 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
  Rubrik:  C64
Rubriken-Übersicht
 6 Besucher online 

Valid XHTML 1.0 Transitional Valid CSS!