Użytkownik:Mono
From Atariki
Spis treści |
Mój brudnopis
Z systemem QMEG instalowana jest nieco zmodyfikowana czcionka standardowa (międzynarodowa została usunięta):
Pożyteczna strona: http://raster.infos.cz/atari/chars.htm
http://members.chello.nl/taf.offenga/ATP16.htm
Przerwania POKEY-a
Układ POKEY obsługuje kilka rodzajów przerwań IRQ:
- przerwania komunikacji poprzez szynę szeregową,
- przerwanie naciśnięcia dowolnego klawisza,
- przerwanie naciśnięcia klawisza Break,
- przerwania liczników 1, 2 i 4.
Każde z wymienionych przerwań jest maskowalne, co oznacza że istnieje możliwość zablokowania jego obsługi. Do obsługi przerwań przeznaczone są dwa rejestry:
- IRQEN - rejestr zezwolenia na obsługę przerwania,
- IRQST - rejestr znaczników wystąpienia przerwania.
Bity tych rejestrów przyporządkowane są odpowiednim przerwaniom:
- 7 - BREAK - przerwanie naciśnięcia klawisza Break,
- 6 - KEY - przerwanie naciśnięcia dowolnego klawisza prócz SHIFT, CONTROL, START, SELECT, OPTION, RESET,
- 5 - SERIN - przerwanie odebrania bajtu z szyny szeregowej,
- 4 - SEROUT - przerwanie opróżnienia bufora nadawczego szyny szeregowej,
- 3 - XMTDONE - przerwanie zakończenia transmisji przez szynę szeregową,
- 2 - TIMER4 - przerwanie licznika 4,
- 1 - TIMER2 - przerwanie licznika 2,
- 0 - TIMER1 - przerwanie licznika 1.
Zasada działania
Zapalenie odpowiedniego bitu w rejestrze IRQEN powoduje zezwolenie na obsługę danego przerwania. Jeśli zaistnieją warunki konieczne do wygenerowania przerwania (np. wciśnięty zostanie klawisz), to układ POKEY zasygnalizuje jego wystąpienie skasowaniem odpowiedniego bitu rejestru IRQST. Stan ten będzie się utrzymywał aż do momentu 'potwierdzenia obsługi przerwania' przez program użytkownika.
Skasowanie bitu w rejestrze IRQEN oznacza, że obsługa danego przerwania jest zabroniona i w rejestrze IRQST nie pojawi się żadna informacja o jego wystąpieniu, nawet jeśli zaistnieją ku temu niezbędne warunki.
Przerwania PIA
- PACTL.7 - linia PROCEED SIO
- PBCTL.7 - linia INTERRUPT SIO
Przerwanie wystąpiło gdy bity zapalone.
Inne przerwania
- PDVREG - nowe urządzenie
- Bit B rejestru stanu CPU - rozkaz BRK
Przerwanie wystąpiło gdy bity zapalone.
Priorytety
Wymienione przerwania są obsługiwane przez system operacyjny, który dla każdego z nich oferuje użytkownikowi osobny wektor.
Każde przerwanie ma przyporządkowany priorytet w związku z czym zawsze są one obsługiwane przez OS w następującej kolejności:
- VSERIN ($20A) - odczyt bajtu z szyny szeregowej,
- VPIRQ ($238) - komunikacja z nowym urządzeniem,
- VSEROR ($20C) - opróżnienie bufora nadawczego szyny szeregowej,
- VSEROC ($20E) - koniec transmisji szeregowej,
- VTIMR1 ($210) - wyzerowanie licznika 1,
- VTIMR2 ($212) - wyzerowanie licznika 2,
- VTIMR4 ($214) - wyzerowanie licznika 4,
- VKEY ($208) - wciśnięcie klawisza,
- VBRKKEY ($236) - wciśnięcie klawisza Break.
- VPRCED ($202) - stan niski linii PROCEED w złączu SIO,
- VINTER ($204) - stan niski linii INTERRUPT w złączu SIO,
- VBREAK ($206) - przerwanie rozkazu BRK procesora.
Obsługa przerwań POKEY-a
OS po wykryciu źródła przerwania potwierdza jego przyjęcie. Odbywa się to poprzez skasowanie oraz ponowne zapalenie bitu zezwolenia na obsługę przerwania w rejestrze IRQEN. Powoduje to ustawienie flagi zgłoszenia przerwania w rejestrze IRQST w stan nieaktywny (bit zapalony). Ponieważ rejestr IRQEN jest rejestrem tylko do zapisu, OS posiłkuje się rejestrem-cieniem IRQENS ($10) aby zapamiętać które przerwania mają być odblokowane. I tak sekwencja potwierdzenia obsługi przerwania wygląda następująco:
lda #%00000100 ;przykładowe przerwanie od TIMERa 4 bit IRQST bne _nie_wystapilo_ eor #$ff sta IRQEN ;zgaszenie flagi wystąpienia przerwania lda IRQENS sta IRQEN ;przywrócenie obsługi przerwań
Polling
Musi się odbywać przy zapalonym I, bo wykrywanie źródła przerwania nie jest maskowane z IRQENS (prócz XMTDONE).
lda #%100 bit IRQST bne *-3 eor #$ff sta IRQEN eor #$ff ora IRQENS sta IRQEN
Wektoryzowanie
sei ldx #5 sta WSYNC dex bne *-1 ldx vec ldy vec+1 stx _store_ sty _store_+1 ldx #<_procedura_ ldy #>_procedura_ stx vec sty vec+1 lda #%100 ora IRQENS sta IRQENS sta IRQEN cli
sei lda #%11111011 and IRQENS sta IRQENS sta IRQEN ldx #5 sta WSYNC dex bne *-1 ldx _store_ ldy _store_+1 stx vec sty vec+1 cli
Liczniki
STIMER do startowania odliczania
Przy łączeniu dzielników w 16-bit przerwanie ustawia się w starszym liczniku (2 lub 4)
Ilość cykli zgodna z opisem generatorów dźwięku.
IRQ rozszerzeń
Nie można dołączyć obsługi przerwań od rozszerzeń (np. SoundBoard) o priorytetach niższych, bo nie ma odpowiedniego wektora. Priorytety wyższe mozna obsługiwać przez VIMIRQ.