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