NMI
From Atariki
Wersja z dnia 19:41, 13 sie 2005 KMK (Dyskusja | wkład) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→Priorytety NMI - linki do dli i vbl) |
||
Linia 1: | Linia 1: | ||
- | '''NMI''' - ang. Non-Maskable Interrupt - przerwanie niemaskowalne. | + | Non-Maskable Interrupt - przerwanie niemaskowalne. |
- | Rodzaj [[przerwanie|przerwania]], które w momencie wystąpienia (najpóźniej po zakończeniu wykonywania bieżącego rozkazu) <b>musi</b> być przyjęte i obsłużone przez procesor. A to w odróżnieniu od [[IRQ]], które przyjęte i obsłużone być tylko <b>może</b>. | + | Rodzaj [[przerwania]], które w momencie wystąpienia (najpóźniej po zakończeniu wykonywania bieżącego rozkazu) '''musi''' być przyjęte i obsłużone przez [[procesor]]. A to w odróżnieniu od [[IRQ]], które przyjęte i obsłużone być tylko '''może'''. |
- | ====Atari XL/XE==== | + | == Atari 8-bit== |
- | W procesorze [[6502]] i [[65c02]] główny wektor przerwania NMI znajduje się pod adresem $FFFA. | + | W procesorze [[6502]] i [[65C02]] główny wektor przerwania NMI znajduje się pod adresem $FFFA. |
- | W procesorze [[65c816]] pod adresem $00FFFA znajduje się wektor przerwania NMI dla trybu emulacji 6502. Gdy procesor jest przełączony w tryb natywny 65c816, adres procedury obsługi NMI jest pobierany spod $00FFEA. | + | W procesorze [[65C816]] pod adresem $00FFFA znajduje się wektor przerwania NMI dla trybu emulacji 6502. Gdy procesor jest przełączony w tryb natywny 65c816, adres procedury obsługi NMI jest pobierany spod $00FFEA. |
- | W ośmiobitowym Atari mamy dwa przerwania niemaskowalne: [[VBL]] oraz [[DLI]]. Źródłem obydwu jest układ [[Antic]]. | + | W ośmiobitowym Atari mamy trzy przerwania niemaskowalne: [[DLI]], [[VBL]] oraz [[NMI RESET]]. Źródłem wszystkich jest układ [[ANTIC (układ)|ANTIC]]. |
- | ====Atari ST i pochodne==== | + | === Priorytety NMI === |
- | W procesorach Motoroli serii 68k przerwanie niemaskowalne jest to przerwanie o najwyższym priorytecie. Autowektor NMI jest to wektor numer 31 o adresie $007C (plus zawartość rejestru [[VBR]]). W Atari serii ST to przerwanie normalnie nie ma żadnego zastosowania. | + | 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 NMI. W Atari priorytet obsługi jest następujący (w kolejności od najwyższego do najniższego): |
- | [[Kategoria:Atari 8-bit]] | + | 1) Seria 400/800 |
- | [[Kategoria:Atari ST]] | + | |
+ | * [[DLI]] - wektor VDSLST ($200) | ||
+ | * NMI RESET | ||
+ | * [[VBL]] - wektor VBLKI ($222) | ||
+ | |||
+ | 2) Seria XL/XE | ||
+ | |||
+ | * [[DLI]] - wektor VDSLST ($200) | ||
+ | * [[VBL]] - wektor VBLKI ($222) | ||
+ | |||
+ | W komputerach XL/XE przerwanie NMI RESET jest niewykorzystane (i tym samym nieobsługiwane przez [[XL OS]]), zamiast niego używa się głównego przerwania [[RESET]] (CPU RESET). | ||
+ | |||
+ | === Blokowanie NMI === | ||
+ | Pomimo tego, że procesor musi przyjąć i obsłużyć przerwanie NMI, to w Atari 8-bit jest możliwość ich wyłączenia przez zablokowanie ich u źródła. Osiąga się to przez ingerencję w [[Rejestry ANTIC-a#NMIEN|rejestr NMIEN]] układu [[ANTIC (układ)|ANTIC]]. | ||
+ | |||
+ | == Atari ST i pochodne == | ||
+ | |||
+ | W procesorach Motoroli serii 68k przerwanie niemaskowalne jest to przerwanie o najwyższym priorytecie, którego nie da się zablokować maską przerwań CPU. Autowektor NMI jest to wektor numer 31 o adresie $007C (plus zawartość rejestru [[VBR]]). W Atari serii ST to przerwanie normalnie nie ma żadnego zastosowania. | ||
+ | |||
+ | [[Kategoria:Programowanie]] | ||
+ | [[Kategoria:Programowanie Atari 8-bit]] |
Aktualna wersja
Non-Maskable Interrupt - przerwanie niemaskowalne.
Rodzaj przerwania, które w momencie wystąpienia (najpóźniej po zakończeniu wykonywania bieżącego rozkazu) musi być przyjęte i obsłużone przez procesor. A to w odróżnieniu od IRQ, które przyjęte i obsłużone być tylko może.
Spis treści |
Atari 8-bit
W procesorze 6502 i 65C02 główny wektor przerwania NMI znajduje się pod adresem $FFFA.
W procesorze 65C816 pod adresem $00FFFA znajduje się wektor przerwania NMI dla trybu emulacji 6502. Gdy procesor jest przełączony w tryb natywny 65c816, adres procedury obsługi NMI jest pobierany spod $00FFEA.
W ośmiobitowym Atari mamy trzy przerwania niemaskowalne: DLI, VBL oraz NMI RESET. Źródłem wszystkich jest układ ANTIC.
Priorytety NMI
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 NMI. W Atari priorytet obsługi jest następujący (w kolejności od najwyższego do najniższego):
1) Seria 400/800
2) Seria XL/XE
W komputerach XL/XE przerwanie NMI RESET jest niewykorzystane (i tym samym nieobsługiwane przez XL OS), zamiast niego używa się głównego przerwania RESET (CPU RESET).
Blokowanie NMI
Pomimo tego, że procesor musi przyjąć i obsłużyć przerwanie NMI, to w Atari 8-bit jest możliwość ich wyłączenia przez zablokowanie ich u źródła. Osiąga się to przez ingerencję w rejestr NMIEN układu ANTIC.
Atari ST i pochodne
W procesorach Motoroli serii 68k przerwanie niemaskowalne jest to przerwanie o najwyższym priorytecie, którego nie da się zablokować maską przerwań CPU. Autowektor NMI jest to wektor numer 31 o adresie $007C (plus zawartość rejestru VBR). W Atari serii ST to przerwanie normalnie nie ma żadnego zastosowania.