SYSVBL: Różnice pomiędzy wersjami
Nie podano opisu zmian |
m →EXITVBL |
||
| (Nie pokazano 11 wersji utworzonych przez 4 użytkowników) | |||
| Linia 1: | Linia 1: | ||
== SYSVBL == | |||
Systemowa procedura obsługi przerwania synchronizacji pionowej ([[VBL]]). Znajduje się w pamięci ROM, punkt wejścia w [[Tablica skoków|tablicy skoków]] jest pod $E45F. Normalnie uruchamiana jest przez procedurę wstępną obsługi [[NMI]], która w tym celu wykonuje skok pośredni przez wektor VVBLKI ($0222). | |||
SYSVBL dzieli się na dwie fazy, pierwszą, krótką, wykonywaną zawsze (gdy przerwania | SYSVBL dzieli się na dwie fazy, pierwszą, krótką, wykonywaną zawsze (gdy przerwania NMI w ogóle są włączone, a wektor VVBLKI nie zmieniony), oraz drugą, dłuższą, wyłączaną automatycznie przez OS - flagą CRITIC - przy operacjach "krytycznych czasowo" (czyli podczas komunikacji przez port szeregowy albo równoległy, patrz [[SIO]]) i podczas obsługi [[IRQ]] (co sygnalizowane jest ustawioną flagą I zapisanego na stosie rejestru znaczników). | ||
=== Faza I === | |||
# Wartość licznika czasu rzeczywistego RTCLOK ($0012-$0014) jest zwiększana o jeden. | |||
# Sprawdzany jest stan zmiennych obsługujących tzw. tryb przyciągania uwagi (attract mode). | |||
# Licznik TIMCNT1 ($0218) jest zmniejszany o jeden, a po dojściu do zera wywoływana jest procedura jego obsługi TIMVEC1 ($0226). | |||
=== Faza II === | |||
# Rejestry sprzętowe zapisywane są wartościami ze swoich cieni. | |||
# Licznik TIMCNT2 ($021A) jest zmniejszany o jeden, a po dojściu do zera wywoływana jest procedura jego obsługi TIMVEC2 ($0228). | |||
# Liczniki TIMCNT3 ($021C), TIMCNT4 ($021E) i TIMCNT5 ($0220) są zmniejszane o jeden. | |||
# Licznik autorepetycji klawiszy zostaje zmodyfikowany. | |||
# Licznik czasu następnego odczytu z klawiatury jest zmniejszany o jeden. | |||
# Następuje odczyt stanu dżojstików oraz [[Atari Paddles|wiosełek]] i umieszczenie odczytanych wartości w odpowiednich komórkach pamięci RAM. | |||
Zakończenie procedury SYSVBL następuje przez skok do EXITVBL. | Zakończenie procedury SYSVBL następuje przez skok do EXITVBL. | ||
== EXITVBL == | |||
Systemowa procedura powrotu z przerwania synchronizacji pionowej ( | Systemowa procedura powrotu z przerwania synchronizacji pionowej (VBL). Znajduje się w pamięci ROM, punkt wejścia w tablicy skoków jest pod $E462, wskazuje ją też wektor VVBLKD ($0224). Skok przez ten wektor następuje tylko wtedy, kiedy włączona jest druga faza SYSVBL (czyli przeważnie). Kiedy jest wyłączona, EXITVBL jest wywoływana bezpośrednio, z pominięciem wektorów. | ||
[[Kategoria:Atari 8-bit | [[Kategoria:Programowanie Atari 8-bit]] | ||
Aktualna wersja z 26 lip 2022, 10:16
SYSVBL
Systemowa procedura obsługi przerwania synchronizacji pionowej (VBL). Znajduje się w pamięci ROM, punkt wejścia w tablicy skoków jest pod $E45F. Normalnie uruchamiana jest przez procedurę wstępną obsługi NMI, która w tym celu wykonuje skok pośredni przez wektor VVBLKI ($0222).
SYSVBL dzieli się na dwie fazy, pierwszą, krótką, wykonywaną zawsze (gdy przerwania NMI w ogóle są włączone, a wektor VVBLKI nie zmieniony), oraz drugą, dłuższą, wyłączaną automatycznie przez OS - flagą CRITIC - przy operacjach "krytycznych czasowo" (czyli podczas komunikacji przez port szeregowy albo równoległy, patrz SIO) i podczas obsługi IRQ (co sygnalizowane jest ustawioną flagą I zapisanego na stosie rejestru znaczników).
Faza I
- Wartość licznika czasu rzeczywistego RTCLOK ($0012-$0014) jest zwiększana o jeden.
- Sprawdzany jest stan zmiennych obsługujących tzw. tryb przyciągania uwagi (attract mode).
- Licznik TIMCNT1 ($0218) jest zmniejszany o jeden, a po dojściu do zera wywoływana jest procedura jego obsługi TIMVEC1 ($0226).
Faza II
- Rejestry sprzętowe zapisywane są wartościami ze swoich cieni.
- Licznik TIMCNT2 ($021A) jest zmniejszany o jeden, a po dojściu do zera wywoływana jest procedura jego obsługi TIMVEC2 ($0228).
- Liczniki TIMCNT3 ($021C), TIMCNT4 ($021E) i TIMCNT5 ($0220) są zmniejszane o jeden.
- Licznik autorepetycji klawiszy zostaje zmodyfikowany.
- Licznik czasu następnego odczytu z klawiatury jest zmniejszany o jeden.
- Następuje odczyt stanu dżojstików oraz wiosełek i umieszczenie odczytanych wartości w odpowiednich komórkach pamięci RAM.
Zakończenie procedury SYSVBL następuje przez skok do EXITVBL.
EXITVBL
Systemowa procedura powrotu z przerwania synchronizacji pionowej (VBL). Znajduje się w pamięci ROM, punkt wejścia w tablicy skoków jest pod $E462, wskazuje ją też wektor VVBLKD ($0224). Skok przez ten wektor następuje tylko wtedy, kiedy włączona jest druga faza SYSVBL (czyli przeważnie). Kiedy jest wyłączona, EXITVBL jest wywoływana bezpośrednio, z pominięciem wektorów.