SYSVBL
From Atariki
Wersja z dnia 03:46, 6 mar 2010 Tdc (Dyskusja | wkład) (int.) ← Previous diff |
Wersja z dnia 11:29, 2 mar 2016 KMK (Dyskusja | wkład) (red.) Next diff → |
||
Linia 1: | Linia 1: | ||
- | '''SYSVBL''' | + | == SYSVBL == |
- | SYSVBL jest to systemowa procedura obsługi przerwania synchronizacji pionowej ([[VBL]]). Znajduje się w pamięci ROM, punkt wejścia 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 znajdujący się pod adresem $0222. | + | 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-$0223). |
- | 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]]) oraz podczas obsługi [[IRQ]] (co sygnalizowane jest ustawioną flagą I zapisanego na stosie rejestru znaczników). | + | 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. | + | === Faza I === |
# Wartość liczników czasu rzeczywistego [$0012-$0014] jest zwiększana o jeden. | # Wartość liczników czasu rzeczywistego [$0012-$0014] jest zwiększana o jeden. | ||
Linia 11: | Linia 11: | ||
# Timer 1 jest zmniejszany o jeden, a po dojściu do zera wywoływana jest procedura jego obsługi. | # Timer 1 jest zmniejszany o jeden, a po dojściu do zera wywoływana jest procedura jego obsługi. | ||
- | Faza II. | + | === Faza II === |
# Rejestry sprzętowe zapisywane są wartościami ze swoich cieni. | # Rejestry sprzętowe zapisywane są wartościami ze swoich cieni. | ||
Linia 18: | Linia 18: | ||
# Licznik autorepetycji klawiszy zostaje zmodyfikowany. | # Licznik autorepetycji klawiszy zostaje zmodyfikowany. | ||
# Licznik czasu następnego odczytu z klawiatury jest zmniejszany o jeden. | # Licznik czasu następnego odczytu z klawiatury jest zmniejszany o jeden. | ||
- | # Następuje odczyt stanu dżojstików i umieszczenie odczytanych wartości w odpowiednich komórkach pamięci RAM. | + | # 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''' | + | == EXITVBL == |
- | Systemowa procedura powrotu z przerwania synchronizacji pionowej ([[VBL]]). Znajduje się w pamięci ROM, punkt wejścia 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. | + | 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:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] |
Wersja z dnia 11:29, 2 mar 2016
Spis treści |
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-$0223).
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ść liczników czasu rzeczywistego [$0012-$0014] jest zwiększana o jeden.
- Sprawdzany jest stan zmiennych obsługujących tzw. tryb przyciągania uwagi (attract mode).
- Timer 1 jest zmniejszany o jeden, a po dojściu do zera wywoływana jest procedura jego obsługi.
Faza II
- Rejestry sprzętowe zapisywane są wartościami ze swoich cieni.
- Timer 2 jest zmniejszany o jeden.
- Timery 3, 4 i 5 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.