Probuję zrobic rzecz banalną: zmienic kolory na DLI. I mam problemy.
Pytanie:
kiedy DOKLADNIE zaczyna sie przerwanie DLI w trybie znakowym Antic 4 i ile taktow trwa od zakonczenia rysowania linii (sta WSYNC) do momentu powrotu plamki elektronowej (rozpoczęcia rysowania kolejnej).
Otóż zaprojektowalem sobie wszystko w G2F i potem chcialem recznie przeniesc zmiany kolorow do mojego programu.
Mam 24 linie tekstowe Antic 4. W kazdej zezwolone przerwanie.
Spodziewalem sie ze przerwanie wywolywane jest w czasie rysowania ostatniej linii pixelowej w danej linii tekstowej.
Czyli (jesli linie pixelowe numerujemy od 0), przerwanie bedzie wywolane przed zakonczeniem rysowania linii: 7, 15, 23, 31...
Ale z eksperymetow wychodzi mi ze kolory zmieniają sie dopiero w czasie rysowania kolejnej linii (8, 16, 24...) a czasami nie zdążą sie zmienic nawet do rozpoczecia rysowania jeszcze kolejnej!
Podejrzalem w pliku ASM generowanym przez G2F jak on to robi. Bardzo oszczednie.
Ale ja bede zmienial kolory bardziej dynamicznie, zaleznie od rozwoju akcji w grze, wiec potrzebuje bardziej uniwersalną metode zmiany kolorow.
Zbudowalem sobie tabele 24x8 bajtow. Z kazdych 8 bajtow pierwszych 5 wykorzystuje na wpisanie jakie kolory mają byc ustawione w przerwaniu danej linii znakowej. 3 kolejne bajty są niewykorzystane.
kolory_dli
dta $98,$FE,$FC,$0E,$0C,$0,$0,$0 ;kolory ktore maja byc ustawione po 0 linii znakowej (od 8 pixelowej)
dta $98,$22,$26,$1C,$00,$0,$0,$0 ;po 1
dta $98,$22,$26,$1C,$00,$0,$0,$0 ;po 2
...
W zmiennej linia_dli przechowuję aktualny nr linii znakowej od 0 do 23 (zeby wiedziec w przerwaniu ktorej linii jestem). Zeruje ją w VBLI.
Przerwanie DLI ma u mnie taką postać, wydawalo mi sie, ze schludną i optymalną ;) Czy to mozliwe ze sie nie wyrabia?
Jesli tak, to zalamka :/ To tylko zmiana kolorow, a chcialem jeszcze zmieniac pozycje X duszkow...
;przerwanie DLI
set_col
pha
tya
pha
;wait__line
sta WSYNC ;zapis czegokolwiek
lda linia_dli
asl @
asl @
asl @ ;teraz mamy w A numer linii pomnozony x8
tay
lda kolory_dli,y
sta COLBAK
iny
lda kolory_dli,y
sta COLPF0
iny
lda kolory_dli,y
sta COLPF1
iny
lda kolory_dli,y
sta COLPF2
iny
lda kolory_dli,y
sta COLPF3
inc linia_dli
pla
tay
pla
rti