Programowanie: Czekanie na vblank przy wyłączonym systemie

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 11:28, 26 lis 2021
Jhusak (Dyskusja | wkład)
(Dodano nowy artykuł)
← Previous diff
Wersja z dnia 21:44, 30 sie 2023
Mono (Dyskusja | wkład)
(dzielenie zamiast modulo)
Next diff →
Linia 1: Linia 1:
-Oczekiwanie na vblank przy wyłączonym systemie nie jest takie trywialne. Systemowe przerwania są wyłączane, aby np. nie przeszkadzały np. w odgrywaniu sampli, lub innych zadań o nadzwyczajnym rygorze czasowym.+Gdy przerwania systemowe lub system wyłączone, oczekiwanie na VBLANK nie może polegać na odczytywaniu najmłodszego bajtu RTCLOK ($14), gdyż ten nie jest wtedy aktualizowany.
-Zaradzić może poniższe rozwiązanie składającie się z dwóch pętli i używa licznika linii obrazu VCOUNT ($D40B).+W takim przypadku można użyć rejestru VCOUNT który bez względu na obecność systemu zawiera wartość wskazującą na aktualnie kreśloną linię ekranu (podzieloną przez 2).
 +Kiedy linia ta wynosi 0, oznacza to że jesteśmy zaraz po 'powrocie plamki'
 + 
 +Przykład:
<pre> <pre>
Linia 9: Linia 12:
</pre> </pre>
-Ma ono tę zaletę, że można je wpleść w główną pętlę kodu tak, aby wyeliminować aktywne czekanie.+Przykład bez użycia akumulatora:
 + 
 +<pre>
 + bit VCOUNT
 + bmi *-3
 + bit VCOUNT
 + bpl *-3
 +</pre>
 + 
 +[[Kategoria: Niezbędnik kodera]]

Wersja z dnia 21:44, 30 sie 2023

Gdy przerwania systemowe lub system są wyłączone, oczekiwanie na VBLANK nie może polegać na odczytywaniu najmłodszego bajtu RTCLOK ($14), gdyż ten nie jest wtedy aktualizowany. W takim przypadku można użyć rejestru VCOUNT który bez względu na obecność systemu zawiera wartość wskazującą na aktualnie kreśloną linię ekranu (podzieloną przez 2). Kiedy linia ta wynosi 0, oznacza to że jesteśmy zaraz po 'powrocie plamki'

Przykład:

 lda VCOUNT
 bmi *-3
 lda VCOUNT
 bpl *-3

Przykład bez użycia akumulatora:

 bit VCOUNT
 bmi *-3
 bit VCOUNT
 bpl *-3
Personal tools