Autore Topic: Effetto "persiana"  (Letto 1704 volte)

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Effetto "persiana"
« il: 16 Ottobre 2010, 19:08:38 »
 Continuo la serie... grazie mille dei feedback degli altri thread!

Codice: [Seleziona]
; 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