Problem z DYCPem
: 16 mar 2022, 16:41
Witajcie,
testuję prostego DYCPa.
Nie jest oparty na matrixie znakowym o stałej wysokości bloku, ale "pełnowysokościowy".
Kiedy ustalę częstotliwość pobierania wartości z sinusa co 1 (u mnie stała nazywa się freq), to wszystko gra.
Jeśli zmienię freq na 2, 3, 4, itd., to litery zaczynają skakać (tym mocniej im większa częstotliwość).
Pseudokod:
init:
lda #0
sta scrollx
sta text_offset
sta sinus_offset
irq:
lda scrollx
and #7
tay
eor #7
sta $d016
tya
bne +
inc text_offset (tu daję znać, że muszę przesunąć pobieranie tekstu o jedną literkę)
+
lda sinus_offset
sta sinus_offset_temp
lda text_offset
sta text_offset_temp
pętla dycpa:
for i=0 to 39
lda sinus_offset_temp
clc
adc #freq
sta sinus_offset_temp
pobieram wartość z tabelki sinus na podstawie sinus_offset_temp
rysowanie literki na podstawie sinusa oraz text_offset_temp
text_offset_temp++
endfor
lda sinus_offset
clc
adc #step ;niezależnie od freq, po wyrysowaniu dycpa przesuwam się o 1 po sinusie (czyli mam powolny sinus, ale "gęsty" jeśli freq>1)
sta sinus_offset
inc scrollx
endirq
Jeśli ustawię step=freq, to dycp działa poprawnie, ale zależy mi na tym, aby móc zmieniać częstotliwość, a szybkość pobierania z tabelki pozostawić 1 (step=1).
freq=1 (jest ok, choć jakość gifa słaba, trzeba kilkać aby zobaczyć pełną animację)
freq=2 (tu widać, że litery zaczynają skakać)
Czy ktoś wie gdzie popełniam błąd lub zna remedium na problem?
testuję prostego DYCPa.
Nie jest oparty na matrixie znakowym o stałej wysokości bloku, ale "pełnowysokościowy".
Kiedy ustalę częstotliwość pobierania wartości z sinusa co 1 (u mnie stała nazywa się freq), to wszystko gra.
Jeśli zmienię freq na 2, 3, 4, itd., to litery zaczynają skakać (tym mocniej im większa częstotliwość).
Pseudokod:
init:
lda #0
sta scrollx
sta text_offset
sta sinus_offset
irq:
lda scrollx
and #7
tay
eor #7
sta $d016
tya
bne +
inc text_offset (tu daję znać, że muszę przesunąć pobieranie tekstu o jedną literkę)
+
lda sinus_offset
sta sinus_offset_temp
lda text_offset
sta text_offset_temp
pętla dycpa:
for i=0 to 39
lda sinus_offset_temp
clc
adc #freq
sta sinus_offset_temp
pobieram wartość z tabelki sinus na podstawie sinus_offset_temp
rysowanie literki na podstawie sinusa oraz text_offset_temp
text_offset_temp++
endfor
lda sinus_offset
clc
adc #step ;niezależnie od freq, po wyrysowaniu dycpa przesuwam się o 1 po sinusie (czyli mam powolny sinus, ale "gęsty" jeśli freq>1)
sta sinus_offset
inc scrollx
endirq
Jeśli ustawię step=freq, to dycp działa poprawnie, ale zależy mi na tym, aby móc zmieniać częstotliwość, a szybkość pobierania z tabelki pozostawić 1 (step=1).
freq=1 (jest ok, choć jakość gifa słaba, trzeba kilkać aby zobaczyć pełną animację)
freq=2 (tu widać, że litery zaczynają skakać)
Czy ktoś wie gdzie popełniam błąd lub zna remedium na problem?