Programowanie: Czekanie na vblank przy wyłączonym systemie
From Atariki
(Różnice między wersjami)
Wersja z dnia 22:40, 24 sie 2023 KMK (Dyskusja | wkład) ← Previous diff |
Wersja z dnia 17:00, 30 sie 2023 Mikey (Dyskusja | wkład) Next diff → |
||
Linia 1: | Linia 1: | ||
- | {{SDU}} | + | 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. |
- | 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. | + | 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 (modulo 2). |
- | Zaradzić może poniższe rozwiązanie składającie się z dwóch pętli i używa licznika linii obrazu VCOUNT ($D40B). | + | Kiedy linia ta wynosi 0, oznacza to że jesteśmy zaraz po 'powrocie plamki' |
+ | |||
+ | Przykład: | ||
<pre> | <pre> | ||
Linia 10: | 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: |
- | + | ||
- | Można użyć wersji bez użycia akumulatora: | + | |
<pre> | <pre> | ||
Linia 20: | Linia 20: | ||
bpl *-3 | bpl *-3 | ||
</pre> | </pre> | ||
+ | |||
+ | [[Kategoria: Niezbędnik kodera]] |
Wersja z dnia 17:00, 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 (modulo 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