Rozwiązanie TeBe ma kilka wad:
strata 78 cykli co 4 linie to gorszy wynik niż rozwiązanie oparte na DLI co 8 linii
użycie instrukcji 7-cyklowych w programie głównym w trakcie wyświetlania obrazu kaszani tryb
POKEY musi być skonfigurowany na 15kHz, co ogranicza autora ewentualnej muzyki, który i tak jest ograniczony przez liczbę dostępnych kanałów (może się przydać stereo)
resetowanie POKEYa w DLI kaszani ewentualną muzykę
Oto moje rozwiązanie:
procedura co 8 linii bez traconych cykli
z opcjonalną obsługą instrukcji 7-cyklowych
z konfigurowalnym wykorzystaniem POKEYa: wybór kanału dla przerwania, 15kHz lub para kanałów (wtedy pozostałe dwa kanały mogą grać dowolnie)
z jednorazowym resetowaniem POKEYa w przypadku 15kHz i tylko jednym zapisem STIMER w przypadku pary kanałów
Mam pod ręką tylko Altirrę, proszę o sprawdzenie na Atari.
O co chodzi z instrukcjami 7-cyklowymi:
Jak pisałem, mamy ograniczone okienko czasowe na zapisanie 13 do VSCROL. Przerwanie nie przerywa instrukcji, musi się ona wykonać w całości. Jeśli procesor wykonuje instrukcję 7-cyklową w momencie zgłoszenia przerwania, nie będzie ono w stanie wstrzelić się w okienko czasowe.
Możemy:
a. unikać tych instrukcji w programie głównym: są to BRK i INC/DEC/ASL/LSR/ROL/ROR abcd,X, plus wiele instrukcji nielegalnych i 65816
b. odpalać przerwanie wcześniej i synchronizować się z WSYNC (opcja irq9pp_LONGOP), oczywiście w ten sposób tracimy trochę cykli
Instrukcje nielegalne i 65816 mogą mieć nawet więcej, niż 7 cykli. Nie testowałem dla nich mojego rozwiązania z WSYNC.