Davvero un buon inizio, come gia' ti ho anticipato in chat, devo farti sia i complimenti ma anche farti notare un errore grossolano.
La tua routine di fill, nell'intento di azzerare da $2000 a $3f3f, e' completamente sballata, e a lungo andare finirai per sovrascrivere anche il tuo stesso programma a $c000.
fills lda #$20
sta $03
lda #$00
sta $02
tay
fills1 sta ($02),y
iny
bne fills1
ldx $03; questo modo di incrementare e' un po'
inx ; arzigogolato :)
stx $03
cpx #$3f
bne fills1; l'errore e' sicuramente qua
fills2 sta ($02),y
iny
cpy #$40
bne fills2
rts
sostituiscilo con un piu' semplice
fills ldx #$20; sia hi byte di $2000 che contatore di pagine da azzerare.
stx $03 ; $2000-3fff, non importa se azzeri anche dopo $3f3f
ldy #$00
sty $02
tya
fills1 sta ($02),y
iny
bne fills1
inc $03
dex
bne fills1
rts
Stessa cosa dicasi per la fillc, basta una semplice scrittura diretta senza nemmeno disturbare la zp
fillc
ldy #$00
lda colors
fillc1
sta $0400,y
sta $0500,y
sta $0600,y
sta $0700,y; se non hai sprites non importa se sovrascrivi $07f8-07ff
iny
bne fillc1
rts