Ready64 Forum
Commodore 64 => Programmazione, Grafica e Musica => Topic aperto da: Tremal-Naik - 18 Agosto 2004, 14:33:46
-
E' da stamattina che mi sto leggendo l'articolo di Pasi Ojala sulla sincronizzazione dei raster usando gli sprite... I concetti che ci stanno dietro li sto capendo abbastanza ma e' il perche' questa tecnica funziona che non mi vuole entrare in testa.
Come esperimento ho anche fatto un programma sulla falsa riga del tutorial ma non mi ha aiutato molto...
Qualcuno di voi riesce a chiarirmi le idee?
processor 6502
org $0900
RASTER = $fa
sei
lda #$7f
sta $dc0d ; Disabilito interrupt del CIA
lda #$01
sta $d01a ; Abilito raster IRQ
lda #%0000001
sta $d015 ; Abilito lo sprite 0
lda #<irq_routine
sta $0314
lda #>irq_routine
sta $0315
lda #$1b
sta $d011
lda #RASTER
sta $d012 ; Interrupt a $0fb
lda #RASTER-20
sta $d001 ; L'ultima riga dello sprite coincide con
; il raster su cui voglio l'interrupt
lda #$00
sta $d017 ; Gli sprite non sono espansi
cli
rts
irq_routine
nop
nop
nop
nop
nop
nop
nop
nop
nop
ldy #0
draw_bar
lda color,y
ldx color2,y
sta $d020
stx $d020
sta $d020
stx $d020
sta $d020
stx $d020
sta $d020
stx $d020
sta $d020
stx $d020
sta $d020
stx $d020
iny
cpy #color_end-color
bne draw_bar
lda #$00
sta $d020
;jsr rotate_color
lda #$01
sta $d019
jmp $ea31
color
dc.b 0,1,2,3,4,5,6,7
dc.b 7,0,1,2,3,4,5,6
dc.b 6,7,0,1,2,3,4,5
color_end
color2
dc.b 8,9,10,11,12,13,14,15
dc.b 15,8,9,10,11,12,13,14
dc.b 14,15,8,9,10,11,12,13
color2_end
rotate_color
lda color2_end-2
sta $fe
ldx #(color2_end-color-2)
rotr
lda color-1,x
sta color ,x
dex
bne rotr
lda $fe
sta color
rts
-
Ciao
Stavo leggendo anch'io quegli articoli :)
In pratica,da quel che ho capito io per ottenere certi effetti grafici devi sincronizzare la cpu e il chip video; per farlo metti uno sprite nel punto dello schermo in cui vuoi la sincronizzazione,e crei un ritardo (per esempio attraverso delle istruzioni NOP) che termina nel momento in cui il VIC ha finito (o ha iniziato) a decodificare lo sprite:in entrambi i casi,la cpu deve aspettare che il chip video liberi il bus,prima di poter tornare ad eseguire istruzioni (perchè,come detto nell'articolo,cpu e VIC non possono usare il bus contemporaneamente).
Non appena il VIC libera il bus parte il rasterbeam,che può così operare in sincronia con la cpu (in parole povere,il rasterbeam ridisegna lo schermo man mano che la cpu riempie i registri del chip video).
Mi rendo conto che la mia spiegazione è sommaria e imprecisa,ma questo non è concetto che si spiega in due parole,e meriterebbe una trattazione a parte.
P.S.:per chi fosse interessato,questo articolo si trova sul numero 3 di C= Hacking.