177 lines
2.9 KiB
NASM
177 lines
2.9 KiB
NASM
!cpu 6510
|
|
|
|
; Self-starting BASIC line: 10 SYS2061
|
|
* = $0801
|
|
!word basic_end
|
|
!word 10
|
|
!byte $9e
|
|
!text "2061"
|
|
!byte 0
|
|
basic_end:
|
|
!word 0
|
|
|
|
* = $080d
|
|
start:
|
|
lda $d020
|
|
sta old_border
|
|
lda $d021
|
|
sta old_background
|
|
lda $d015
|
|
sta old_sprite_enable
|
|
lda $d000
|
|
sta old_sprite_x
|
|
lda $d001
|
|
sta old_sprite_y
|
|
lda $d010
|
|
sta old_sprite_x_msb
|
|
lda $d027
|
|
sta old_sprite_color
|
|
lda $07f8
|
|
sta old_sprite_pointer
|
|
lda #147
|
|
jsr $ffd2
|
|
ldx #0
|
|
print_title:
|
|
lda title,x
|
|
beq setup_sprite
|
|
jsr $ffd2
|
|
inx
|
|
bne print_title
|
|
setup_sprite:
|
|
lda #$30
|
|
sta $07f8
|
|
lda #120
|
|
sta sprite_x
|
|
sta $d000
|
|
sta sprite_y
|
|
sta $d001
|
|
lda #0
|
|
sta $d010
|
|
lda #1
|
|
sta sprite_color
|
|
sta $d027
|
|
lda $d015
|
|
ora #1
|
|
sta $d015
|
|
main_loop:
|
|
jsr wait_frame
|
|
jsr $ffe4
|
|
beq main_loop
|
|
cmp #'Q'
|
|
bne not_quit
|
|
jmp exit
|
|
not_quit:
|
|
cmp #'C'
|
|
beq change_color
|
|
cmp #'W'
|
|
beq move_up
|
|
cmp #'S'
|
|
beq move_down
|
|
cmp #'A'
|
|
beq move_left
|
|
cmp #'D'
|
|
beq move_right
|
|
jmp main_loop
|
|
move_up:
|
|
lda sprite_y
|
|
cmp #58
|
|
bcc main_loop
|
|
sec
|
|
sbc #2
|
|
sta sprite_y
|
|
sta $d001
|
|
jmp main_loop
|
|
move_down:
|
|
lda sprite_y
|
|
cmp #228
|
|
bcs main_loop
|
|
clc
|
|
adc #2
|
|
sta sprite_y
|
|
sta $d001
|
|
jmp main_loop
|
|
move_left:
|
|
lda sprite_x
|
|
cmp #26
|
|
bcc main_loop
|
|
sec
|
|
sbc #2
|
|
sta sprite_x
|
|
sta $d000
|
|
jmp main_loop
|
|
move_right:
|
|
lda sprite_x
|
|
cmp #238
|
|
bcs main_loop
|
|
clc
|
|
adc #2
|
|
sta sprite_x
|
|
sta $d000
|
|
jmp main_loop
|
|
change_color:
|
|
inc sprite_color
|
|
lda sprite_color
|
|
and #15
|
|
bne set_color
|
|
lda #1
|
|
sta sprite_color
|
|
set_color:
|
|
sta $d027
|
|
jmp main_loop
|
|
wait_frame:
|
|
wait_bottom:
|
|
lda $d012
|
|
cmp #250
|
|
bne wait_bottom
|
|
wait_top:
|
|
lda $d012
|
|
cmp #10
|
|
bne wait_top
|
|
rts
|
|
exit:
|
|
lda old_sprite_enable
|
|
sta $d015
|
|
lda old_sprite_x
|
|
sta $d000
|
|
lda old_sprite_y
|
|
sta $d001
|
|
lda old_sprite_x_msb
|
|
sta $d010
|
|
lda old_sprite_color
|
|
sta $d027
|
|
lda old_sprite_pointer
|
|
sta $07f8
|
|
lda old_border
|
|
sta $d020
|
|
lda old_background
|
|
sta $d021
|
|
lda #147
|
|
jsr $ffd2
|
|
rts
|
|
title:
|
|
!text " SPRITE PLAYGROUND",13,13
|
|
!text "W A S D MOVE THE HARDWARE SPRITE",13
|
|
!text "C CHANGE COLOR",13
|
|
!text "Q RETURN TO BASIC",13,0
|
|
sprite_x: !byte 120
|
|
sprite_y: !byte 120
|
|
sprite_color: !byte 1
|
|
old_border: !byte 0
|
|
old_background: !byte 0
|
|
old_sprite_enable: !byte 0
|
|
old_sprite_x: !byte 0
|
|
old_sprite_y: !byte 0
|
|
old_sprite_x_msb: !byte 0
|
|
old_sprite_color: !byte 0
|
|
old_sprite_pointer: !byte 0
|
|
|
|
* = $0c00
|
|
sprite_data:
|
|
!byte $00,$18,$00, $00,$3c,$00, $00,$7e,$00
|
|
!byte $00,$ff,$00, $01,$ff,$80, $03,$ff,$c0
|
|
!byte $07,$ff,$e0, $0f,$ff,$f0, $1f,$ff,$f8
|
|
!byte $3f,$ff,$fc, $7f,$ff,$fe, $ff,$ff,$ff
|
|
!byte $7f,$ff,$fe, $3f,$ff,$fc, $1f,$ff,$f8
|
|
!byte $0f,$ff,$f0, $07,$ff,$e0, $03,$ff,$c0
|
|
!byte $01,$ff,$80, $00,$ff,$00, $00,$7e,$00
|
|
!byte 0
|