Hola Rulas, en cuanto a la tercera de las dudas, la de las colisiones sprite-sprite por hardware, he añadido al listado anterior una rutina col que verifica la colisión sprite0 con sprite1, incrementando el color del borde pantalla cuando esta se produce.
*=$C000
v=53248
lda #$03
sta v+21 ;sprite 0 y 1 on
lda #192
sta 2040 ;puntero a sprite 0
lda #193
sta 2041 ;puntero a sprite 1
lda #$01
sta v+39 ;color spr 0
lda #$03
sta v+40 ;color spr 1
lda #100
sta v ;posicion x spr 0
sta v+1 ;posicion y spr 0
lda #200
sta v+2 ;posicion x spr 1
lda #150
sta v+3 ;posicion y spr 1
loop LDA $DC01 ;leemos joy1
AND #$0F
CMP #$0E ;la cuatro direcciones arriba abajo izq der
BEQ arr
CMP #$0D
BEQ abj
CMP #$0B
BEQ izq
CMP #$07
BEQ der
JMP loop
arr DEC $D001
jsr col
RTS
abj INC $D001
jsr col
RTS
izq DEC $D000
jsr testx
jsr col
RTS
der INC $D000
jsr testx
jsr col
RTS
testx lda $d000 ;testeamos la posicion X 255=derecha 0=izquierda
cmp #$ff
beq x1
cmp #$00
beq x2
rts
x2 lda #$01 ;msb on
sta v+16
rts
x1 lda #$0 ;msb off
sta v+16
rts
col lda v+30 ;testeamos si ha habido colisión entre spr0 y spr1 en v+30 ($d01e)
and #3
cmp #3
beq borde
rts
borde inc $d020 ;cambia color borde pantalla
rts
*=12288
; forma de sprite 1
BYTE 255,127,0,193,97,0
BYTE 193,97,0,255,127,0
BYTE 192,97,0,192,97,0
BYTE 192,97,0,192,97,0
BYTE 0,0,0,0,255,127
BYTE 0,192,97,0,192,97
BYTE 0,199,127,0,193,97
BYTE 0,255,97,0,0,0
BYTE 225,0,0,241,0,0
BYTE 217,0,0,205,0,0
BYTE 199,0,0
*=12352
; sprite 2
BYTE 0,0,0,0,0,0
BYTE 0,0,0,0,0,0
BYTE 0,0,0,3,0,192
BYTE 6,255,96,4,0,32
BYTE 2,255,64,2,129,64
BYTE 2,189,64,2,165,64
BYTE 2,165,64,2,189,64
BYTE 2,129,64,2,255,64
BYTE 4,0,32,6,255,96
BYTE 3,0,192,0,0,0
BYTE 0,0,0
Funciona como en el ejemplo anterior, cambiando el segundo sys
SYS49152
Mover joystick
NEW
1SYS49195:GOTO1
RUN
Aprovecho para agradecer tu petición, ya que gracias a ella estoy haciendo cosas con el C64 que nunca llegue a hacer, ni me imaginaba que las haría ahora.