Programowanie: Czekanie na vblank przy wyłączonym systemie

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 21:44, 30 sie 2023
Mono (Dyskusja | wkład)
(dzielenie zamiast modulo)
← Previous diff
Aktualna wersja
Mono (Dyskusja | wkład)
(poprawki i nmist)
Linia 1: Linia 1:
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. 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). 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'+Kiedy linia ta wynosi 0, oznacza to że jesteśmy na górze ekranu, zaraz po 'powrocie plamki', ale jeszcze przed wykonaniem przez ANTIC pierwszego rozkazu [[Display List]].
Przykład: Przykład:
Linia 7: Linia 8:
<pre> <pre>
lda VCOUNT lda VCOUNT
- bmi *-3+ beq *-3
lda VCOUNT lda VCOUNT
- bpl *-3+ bne *-3
 +</pre>
 + 
 +Jeśli nie zależy nam na precyzji i nie musi to być początek pierwszej linii skanningowej, wtedy można zastosować uproszczoną wersję:
 + 
 +<pre>
 + lda VCOUNT
 + bne *-3
</pre> </pre>
Linia 15: Linia 23:
<pre> <pre>
- bit VCOUNT 
- bmi *-3 
bit VCOUNT bit VCOUNT
bpl *-3 bpl *-3
 + bit VCOUNT
 + bmi *-3
 +</pre>
 +
 +Początek VBLANK w ośmiobitowym Atari zachodzi zawsze w 248 linii skanningowj ekranu niezależnie od systemu TV, więc można poczekać na właściwą linię:
 +
 +<pre>
 + lda #[248/2]
 + cmp VCOUNT
 + bcc *-3
 + cmp VCOUNT
 + bcs *-3
 +</pre>
 +
 +albo skorzystać z flagi wystąpienia przerwania VBLK:
 +
 +<pre>
 + sta NMIRES
 + bit NMIST
 + bvc *-3
</pre> </pre>
 +Ta metoda zadziała tylko kiedy obsługa przerwania VBLK jest zablokowana w rejestrze NMIEN.
 +
[[Kategoria: Niezbędnik kodera]] [[Kategoria: Niezbędnik kodera]]

Aktualna wersja

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 na górze ekranu, zaraz po 'powrocie plamki', ale jeszcze przed wykonaniem przez ANTIC pierwszego rozkazu Display List.

Przykład:

 lda VCOUNT
 beq *-3
 lda VCOUNT
 bne *-3

Jeśli nie zależy nam na precyzji i nie musi to być początek pierwszej linii skanningowej, wtedy można zastosować uproszczoną wersję:

 lda VCOUNT
 bne *-3

Przykład bez użycia akumulatora:

 bit VCOUNT
 bpl *-3
 bit VCOUNT
 bmi *-3

Początek VBLANK w ośmiobitowym Atari zachodzi zawsze w 248 linii skanningowj ekranu niezależnie od systemu TV, więc można poczekać na właściwą linię:

 lda #[248/2]
 cmp VCOUNT
 bcc *-3
 cmp VCOUNT
 bcs *-3

albo skorzystać z flagi wystąpienia przerwania VBLK:

 sta NMIRES
 bit NMIST
 bvc *-3

Ta metoda zadziała tylko kiedy obsługa przerwania VBLK jest zablokowana w rejestrze NMIEN.

Personal tools