Continuo la serie... grazie mille dei feedback degli altri thread!
; Effetto persiana - Freshness79
*=$1000
sei ; Via le interruzioni
dex ; x=FF (-1)
stx $ff ; Salvo in $ff
ldx #$0e ; colore del bordo
ldy #$1b ; modalità schermo normale
start
lda $d012 ; carico $d012
bne start
waithi
bit $d011
bmi waithi
sta $d020 ; nell'accumulatore ho 0, lo salvo nel bordo per farlo nero
lda #$7b ; imposto modalità invalida EBCM+BMM (sfondo nero)
sta $d011
wait
lda $d011 ; carico $d011
asl ; metto nel carry il bit più alto
lda $d012 ; carico $d012
ror ; perdo il bit meno significativo ma prendo quello più significativo
cmp $fe ; confronto con la posizione variabile
bne wait ; se non ci sono ancora arrivato ciclo
stx $d020 ; ripristino il colore del bordo
sty $d011 ; ripristino la modalità carattere
sbc $ff ; sottraggo l'incremento dal valore attuale
sta $fe ; lo salvo
beq swap ; é uguale a 0? Se si salta alla routine di inversione incremento
cmp #$9b ; é maggiore di $9a?
bcc start ; se é compreso tra 0 e 9a torna alla routine principale
swap
lda $ff ; inversione dell'incremento
eor #$ff
adc #$00
sta $ff
bne start ; $ff sarà sempre diverso da 0