User Tools

Site Tools


base:ballon_demo_from_manual

Balloon demo from the C64 manual

By abujok

This is the BASIC sprite example from the C64 Manual moved to machine code.

This was my first step into the world of sprites :-)

Have fun

;  DASM Syntax

	processor 6502

CLRSCN = $E544	; Clear Screen

VIC = $D000		; VIC Basis 53248
MIB_X2 = VIC+4		;
MIB_Y2 = VIC+5		;
MIB_Y_MSB = VIC+16

MIB_ENABLE = VIC+21 	; register Sprite Enable 53269
MIB_POINTER = $07F8	; Memory pointer Basis 2040

MIB_MEM_SP2 = $0340	; begin memory area sprite2


	org  $0800
	
; encode SYS 2064 ($0810) line
; in BASIC program space

	dc $00 ,$0c, $08, $0a, $00, $9e, $20, $32 
	dc $30, $36, $34, $00, $00, $00, $00, $00


init	lda #$04	; Sprite 2
	sta MIB_ENABLE	; Sprite enable register
	
	lda #MIB_MEM_SP2/64	; Store startaddress of Pointer 2
	sta MIB_POINTER+2	; to Sprite pointer register
	
	ldx #$3e	; max of sprite value => 63
x0	lda spr0,x	; load sprite byte
	sta MIB_MEM_SP2,x; store to spritememory
	dex		; x--
	bne x0		; last byte?
	dex		; x--
	stx MIB_X2	; set Sprite position x to zero minus one
	stx MIB_Y2	; set Sprite position y to zero minus one
	
	jsr CLRSCN	; C64 ROM Clear Screen
	
y0	inc MIB_X2	; Sprite position x++
	inc MIB_Y2	; Sprite position y++
	
	
	; delay for sprite move
	ldx #$05	; set prescaler outer loop
y11	ldy #$ff	; set prescaler inner loop
y1	dey		; y--
	bne y1		; no reached of zero
	dex		; x--
	bne y11		;
	
	lda MIB_X2	; Sprite position x
	cmp #$c8	; Sprite position x are 200?
	bne y0		; no, next position
	
	rts
	
	
spr0	byte 0,127,0,1,255,192,3,255,224,3,231,224
	byte 7,217,240,7,223,240,2,217,240,3,231,224
	byte 3,255,224,3,255,224,2,255,160,1,127,64
	byte 1,62,64,0,156,128,0,156,128,0,73,0,0,73,0,0
	byte 62,0,0,62,0,0,62,0,0,28,0	
base/ballon_demo_from_manual.txt · Last modified: 2020-07-01 01:15 by ftc