IRQ
From Atariki
Wersja z dnia 17:29, 8 wrz 2005 Krótki (Dyskusja | wkład) (:Kategoria:Programowanie Atari 8-bit to podkategoria Atari 8-bit, tę drugą wywaliłem) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→Atari XL/XE - styl.) |
||
Linia 1: | Linia 1: | ||
- | '''IRQ''' - ang. Interrupt ReQuest - przerwanie maskowalne (a właściwie ''prośba o przerwanie'') | + | Interrupt ReQuest - przerwanie maskowalne (a właściwie ''prośba o przerwanie'') |
- | Rodzaj [[przerwania]], które procesor może zignorować, jeśli programista sobie tego zażyczy; a to w odróżnieniu od [[NMI]], które zignorowane być nie może. | + | Rodzaj [[przerwania]], które [[procesor]] może zignorować, jeśli programista sobie tego zażyczy; a to w odróżnieniu od [[NMI]], które zignorowane być nie może. |
- | ====Atari XL/XE==== | + | ==Atari XL/XE== |
- | W procesorze [[6502]] i [[65c02]] główny [[wektor]] przerwania IRQ znajduje się pod adresem $FFFE. | + | W procesorze [[6502]] i [[65C02]] główny [[wektor]] przerwania IRQ znajduje się pod adresem $FFFE. |
- | W procesorze [[65c816]] wektor ten jest pod $00FFFE, kiedy procesor jest w trybie emulacji [[6502]]. W trybie natywnym [[65c816]] adres procedury obsługi IRQ pobierany jest spod $00FFEE. | + | W procesorze [[65C816]] wektor ten jest pod $00FFFE, kiedy procesor jest w trybie emulacji 6502. W trybie natywnym 65C816 adres procedury obsługi IRQ pobierany jest spod $00FFEE. |
- | Źrodłem przerwań IRQ jest: | + | Źródłem przerwań IRQ jest: |
* układ [[POKEY]] (przerwania związane z transmisją [[SIO]], przerwania klawiatury, liczników) | * układ [[POKEY]] (przerwania związane z transmisją [[SIO]], przerwania klawiatury, liczników) | ||
* układ [[PIA]] (sygnały przerwań wyprowadzone na [[gniazdo SIO]]) | * układ [[PIA]] (sygnały przerwań wyprowadzone na [[gniazdo SIO]]) | ||
- | * sam mikroprocesor (rozkaz BRK) | ||
* szyna równoległa (przerwania [[nowe urządzenia|nowych urządzeń]]) | * szyna równoległa (przerwania [[nowe urządzenia|nowych urządzeń]]) | ||
- | IRQ może zostać zablokowane przez ustawienie znacznika I w rejestrze znaczników procesora. | + | Po ustawieniu znacznika I w rejestrze stanu procesora obsługa IRQ jest odroczona do chwili gdy I z powrotem będzie skasowany. Od blokady przerwań różni się to tym, że wszystkie flagi wystąpienia przerwania w rejestrach sprzętowych ciągle odzwierciedlają swój prawidłowy stan, dzięki czemu możliwy jest polling. Prawdziwa blokada przerwania odbywa się tylko w rejestrze sprzętowym. |
- | W procesorach [[6502]], [[65c02]] i [[65c816]] nie ma żadnej koncepcji priorytetów przerwań, ustala je OS na drodze programowej kontrolując po kolei wszystkie możliwe źródła wystąpienia IRQ. W Atari priorytet obsługi jest następujący (w kolejności od najwyższego do najniższego): | + | === Priorytety IRQ === |
- | * SERIN - Serial Input - przerwanie odczytu danych z szyny szeregowej | + | W procesorach 6502, 65C02 i 65C816 nie ma żadnej koncepcji priorytetów przerwań, ustala je OS na drodze programowej kontrolując po kolei wszystkie możliwe źródła wystąpienia IRQ. W Atari priorytet obsługi jest następujący (w kolejności od najwyższego do najniższego): |
- | * PIRQ - Parallel IRQ - przerwanie wywołane przez urządzenie podłączone do [[PBI|szyny równoległej]] | + | |
- | * SEROUT - Serial Output - przerwanie zapisu na szynę szeregową | + | * SERIN - Serial Input - przerwanie odczytu danych z szyny szeregowej - wektor VSERIN ($20A) |
- | * XMTDONE - Transmit Done - przerwanie końca transmisji szeregowej | + | * PIRQ - Parallel IRQ - przerwanie wywołane przez nowe urządzenia (tylko XL/XE) - wektor VPIRQ ($238) |
- | * TIMER1 - przerwanie zegara nr 1 układu [[POKEY]] | + | * SEROUT - Serial Output - przerwanie zapisu na szynę szeregową - wektor VSEROR ($20C) |
- | * TIMER2 - przerwanie zegara nr 2 układu [[POKEY]] | + | * XMTDONE - Transmit Done - przerwanie końca transmisji szeregowej - wektor VSEROC ($20E) |
- | * TIMER4 - przerwanie zegara nr 4 układu [[POKEY]] | + | * TIMER1 - przerwanie zegara nr 1 układu POKEY - wektor VTIMR1 ($210) |
- | * KBDIRQ - Keyboard IRQ - przerwanie klawiatury | + | * TIMER2 - przerwanie zegara nr 2 układu POKEY - wektor VTIMR2 ($212) |
- | * BREAKIRQ - Break key IRQ - przerwanie klawisza Break | + | * TIMER4 - przerwanie zegara nr 4 układu POKEY - wektor VTIMR4 ($214) |
- | * PROCEED - przerwanie wywołane przez PORT A układu [[PIA]]; sygnał ten wyprowadzony jest na [[gniazdo SIO]] jako pin ''PROCEED''; | + | * KBDIRQ - Keyboard IRQ - przerwanie klawiatury - wektor VKEYBD ($208) |
- | * INTER - przerwanie wywołane przez PORT B układu [[PIA]]; sygnał ten wyprowadzony jest na [[gniazdo SIO]] jako pin ''INTERRUPT''; | + | * BREAKIRQ - Break key IRQ - przerwanie klawisza Break - wektor VBRKKY ($236) |
- | * BRKIRQ - Break IRQ - przerwanie programowe wywołane rozkazem BRK; | + | * PROCEED - przerwanie wywołane przez PORT A układu PIA - sygnał ten wyprowadzony jest na gniazdo SIO jako pin ''PROCEED'' - wektor VPRCED ($202) |
+ | * INTER - przerwanie wywołane przez PORT B układu PIA - sygnał ten wyprowadzony jest na gniazdo SIO jako pin ''INTERRUPT'' - wektor VINTER ($204) | ||
+ | * BRKIRQ - Break IRQ - przerwanie programowe wywołane rozkazem BRK - wektor VBREAK ($206) | ||
+ | |||
+ | Wektor głównej procedury obsługi IRQ znajduje się w VIMIRQ ($216). | ||
+ | |||
+ | ===BRK w trybie natywnym 65C816=== | ||
+ | W 65C816 rozkaz BRK powoduje wystąpienie przerwania IRQ tylko wtedy, kiedy procesor jest w trybie emulacji 6502. W trybie natywnym przerwanie BRK ma osobny wektor (pod adresem $00FFE6). | ||
+ | |||
+ | == Rozszerzenia == | ||
+ | Dodatkowe przerwania IRQ mogą być generowane przez: | ||
+ | |||
+ | * [[VBXE]] | ||
+ | * [[PokeyMAX]] | ||
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] |
Aktualna wersja
Interrupt ReQuest - przerwanie maskowalne (a właściwie prośba o przerwanie)
Rodzaj przerwania, które procesor może zignorować, jeśli programista sobie tego zażyczy; a to w odróżnieniu od NMI, które zignorowane być nie może.
Spis treści |
Atari XL/XE
W procesorze 6502 i 65C02 główny wektor przerwania IRQ znajduje się pod adresem $FFFE.
W procesorze 65C816 wektor ten jest pod $00FFFE, kiedy procesor jest w trybie emulacji 6502. W trybie natywnym 65C816 adres procedury obsługi IRQ pobierany jest spod $00FFEE.
Źródłem przerwań IRQ jest:
- układ POKEY (przerwania związane z transmisją SIO, przerwania klawiatury, liczników)
- układ PIA (sygnały przerwań wyprowadzone na gniazdo SIO)
- szyna równoległa (przerwania nowych urządzeń)
Po ustawieniu znacznika I w rejestrze stanu procesora obsługa IRQ jest odroczona do chwili gdy I z powrotem będzie skasowany. Od blokady przerwań różni się to tym, że wszystkie flagi wystąpienia przerwania w rejestrach sprzętowych ciągle odzwierciedlają swój prawidłowy stan, dzięki czemu możliwy jest polling. Prawdziwa blokada przerwania odbywa się tylko w rejestrze sprzętowym.
Priorytety IRQ
W procesorach 6502, 65C02 i 65C816 nie ma żadnej koncepcji priorytetów przerwań, ustala je OS na drodze programowej kontrolując po kolei wszystkie możliwe źródła wystąpienia IRQ. W Atari priorytet obsługi jest następujący (w kolejności od najwyższego do najniższego):
- SERIN - Serial Input - przerwanie odczytu danych z szyny szeregowej - wektor VSERIN ($20A)
- PIRQ - Parallel IRQ - przerwanie wywołane przez nowe urządzenia (tylko XL/XE) - wektor VPIRQ ($238)
- SEROUT - Serial Output - przerwanie zapisu na szynę szeregową - wektor VSEROR ($20C)
- XMTDONE - Transmit Done - przerwanie końca transmisji szeregowej - wektor VSEROC ($20E)
- TIMER1 - przerwanie zegara nr 1 układu POKEY - wektor VTIMR1 ($210)
- TIMER2 - przerwanie zegara nr 2 układu POKEY - wektor VTIMR2 ($212)
- TIMER4 - przerwanie zegara nr 4 układu POKEY - wektor VTIMR4 ($214)
- KBDIRQ - Keyboard IRQ - przerwanie klawiatury - wektor VKEYBD ($208)
- BREAKIRQ - Break key IRQ - przerwanie klawisza Break - wektor VBRKKY ($236)
- PROCEED - przerwanie wywołane przez PORT A układu PIA - sygnał ten wyprowadzony jest na gniazdo SIO jako pin PROCEED - wektor VPRCED ($202)
- INTER - przerwanie wywołane przez PORT B układu PIA - sygnał ten wyprowadzony jest na gniazdo SIO jako pin INTERRUPT - wektor VINTER ($204)
- BRKIRQ - Break IRQ - przerwanie programowe wywołane rozkazem BRK - wektor VBREAK ($206)
Wektor głównej procedury obsługi IRQ znajduje się w VIMIRQ ($216).
BRK w trybie natywnym 65C816
W 65C816 rozkaz BRK powoduje wystąpienie przerwania IRQ tylko wtedy, kiedy procesor jest w trybie emulacji 6502. W trybie natywnym przerwanie BRK ma osobny wektor (pod adresem $00FFE6).
Rozszerzenia
Dodatkowe przerwania IRQ mogą być generowane przez: