Przerwania

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 19:39, 12 sie 2005
Mikey (Dyskusja | wkład)

← Previous diff
Aktualna wersja
KMK (Dyskusja | wkład)

Linia 1: Linia 1:
-Procesor 6502 obsługuje 4 typy przerwań:+==6502==
-- sprzętowe przerwanie CHIP RESET +[[Procesor]]y [[6502]] i [[65C02]] obsługują 4 typy przerwań:
-- IRQ (żądanie przerwania - maskowalne)+* [[IRQ]] (żądanie przerwania - maskowalne)
 +* [[RESET]]
 +* [[NMI]] (żądanie przerwania - niemaskowalne)
 +* [[BRK]] (przerwanie programowe, wektorowane jako IRQ)
-- NMI (żądanie przerwania - niemaskowalne)+W procesorze 6502 jest błąd polegający na tym, że jeśli przerwanie NMI i IRQ wystąpią jednocześnie, to pierwsze nie zostanie obsłużone.
-- programowy rozkaz/żądanie przerwania (rozkaz BRK)+Jest to w zasadzie błąd w oryginalnej dokumentacji 6502, który spowodował, że sygnał NMI podawany przez układy specjalizowane zbudowane na jej podstawie - np. przez ANTIC - jest za krótki w stosunku do rzeczywistych wymagań procesora.
 +Zostało to poprawione w 65C02 (i jego następcy, 65C816). W przypadku 6502 poprawka może polegać na sztucznym [http://atariage.com/forums/topic/148595-how-can-pokey-irq-timers-mess-up-nmi-timing/page-8#entry1822388 wydłużeniu sygnału NMI].
-'''1.CHIP RESET'''+==65C816==
 +Procesor [[65C816]] obsługuje sześć typów przerwań:
-Przerwanie CHIP RESET jest wywoływane przez podanie procesorowi sygnału RST. Logika na płycie Atari robi to automatycznie po włączeniu zasilania+* IRQ (żądanie przerwania - maskowalne)
 +* RESET
 +* NMI (żądanie przerwania - niemaskowalne)
 +* [[ABORT]]
 +* [[BRK]] (przerwanie programowe)
 +* [[COP]] (przerwanie programowe)
-a użytkownik może wywołać to przerwanie naciskając przycisk RESET. Domyślnym zachowaniem systemu po wywołaniu takiego przerwania jest skok do +W odpowiedzi na przerwanie procesor automatycznie kasuje znacznik D rejestru znaczników (przełącza ALU z trybu dziesiętnego w binarny), czego 6502 nie robi. Przerwanie RESET powoduje dodatkowo ustawienie znacznika E, czyli przełączenie procesora w tryb emulacji 6502.
-procedury zimnego startu.Procedura zimnego startu wygląda tak:+Różnica między obydwoma przerwaniami programowymi polega na tym, że BRK jest wektorowane oddzielnie w trybie natywnym, a w trybie emulacji jako IRQ, natomiast COP używa własnego wektora w obydwu trybach.
-1. Flaga ciepłego startu (WARMST $0008) ustawiana jest na wartość 0 (fałsz - wykonujemy wszak zimny start)+==Zobacz też==
 +* [http://pl.wikipedia.org/wiki/Przerwanie Przerwanie] (pl.wiki)
-2. Sprawdzany jest stan kartridża. Jeśli włożono kart diagnostyczny - kontrola przekazywana jest do niego)+[[Kategoria:Menu Główne]]
- +[[Kategoria:Programowanie Atari 8-bit]]
-3. Określany jest adres konca pamięci RAM+
- +
-4. Zerowane są rejestry sprzętowe od $D000 do $D4FF (z wyjątkiem obszaru $D100 - $D1FF)+
- +
-5. Zerowana jest pamięć RAM od adresu $0008 do uprzednio obliczonego adresu końca RAM.+
- +
-6. Wektor skoku do programu użytkownika (DOSVEC $000A) ustawiany jest na adres procedury MEMO PAD (400/800) albo procedury SELF-TEST (XL/XE)+
- +
-7. Marginesy ekranu znakowego ustawiane są na wartości 2 i 39+
- +
-8. Inicjalizowane są wektory przerwań.+
- +
-9. Adres najniższego wolnego bajta pamięci (MEMLO $2E7) ustawiany jest na $0700+
- +
-10. Inicjalizowane są wszystkie rezydentne handlery CIO.+
- +
-11. Jeśli naciśnięto START, ustawiana jest flaga żądania startu z kasety (CKEY $004A) +
- +
-12. Tablica urządzeń CIO (HATABS) zostaje zainicjalizowana.+
- +
-13. Jeśli włożony jest kartridż (inny niz diagnostyczny) - zostaje on zainicjalizowany.+
- +
-14. Kanał we/wy #0 zostaje otworzony dla edytora ekranowego. Adres najwyższego wolnego bajta pamięci (MEMTOP $2E5) zostaje ustawiony na ostatni +
-bajt przed pamięcią ekranu. Następuje zainicjowanie ekranu.+
- +
-15. Jeśli została ustawiona flaga żądania startu z kasety, następuje procedura startu z kasety.+
- +
-16. Jeśli nie ma kartridża albo nie zabrania on tego, następuje procedura startu z dysku.+
- +
-17. Flaga zimnego startu zostaje skasowana.+
- +
-18. Jeśli włożono kartridż, system uruchamia go. +
- +
-19. Jeśli nie ma kartridża system uruchamia program pod adresem wskazywanym przez DOSVEC.+
- +
- +
-W przypadku kiedy flaga zimnego startu zostala zmodyfikowana przez załadowany program, przerwanie CHIP RESET może wywołać tzw. ciepły start.+
- +
- +
-1.Flaga ciepłego startu ustawiana jest na $7F (prawda)+
- +
-2.Wykonywane są kroki 2-4 procedury zimnego startu.+
- +
-3.Zerowany jest RAM w obszarach $0010-007F i $0200-$03FF+
- +
-4.Wykonywane są kroki 7-14 procedury zimnego startu.+
- +
-5.Jeśli nastąpił boot z kasety system skacze pod adres zapisany w wektorze $CASINI $0002+
- +
-6.Jeśli nastąpił boot z dysku system skacze pod adres zapisany w wektorze $DOSINI $000C+
- +
- +
- +
-'''2. NMI'''+
- +
-Przerwania niemaskowalne są to zgłoszenia przerwań których, w przeciwieństwie do przerwań IRQ procesor nie może zignorować (zamaskować)+
-Innymi słowy, procesor zawsze musi zareagować na zgłoszenie takiego przerwania. +
- +
- +
-W komputerze Atari jedynym źródłem przerwań NMI jest układ ANTIC. W serii 400/800 również naciśnięcie SYSTEM RESET.+
- +
-Antic zgłasza 2 przerwania NMI - przerwanie DLI oraz przerwanie VBLANK.+
- +
- +
-'''3. IRQ'''+
- +
-'''4. BRK'''+
- +
-{{stub}}+

Aktualna wersja

6502

Procesory 6502 i 65C02 obsługują 4 typy przerwań:

  • IRQ (żądanie przerwania - maskowalne)
  • RESET
  • NMI (żądanie przerwania - niemaskowalne)
  • BRK (przerwanie programowe, wektorowane jako IRQ)

W procesorze 6502 jest błąd polegający na tym, że jeśli przerwanie NMI i IRQ wystąpią jednocześnie, to pierwsze nie zostanie obsłużone.

Jest to w zasadzie błąd w oryginalnej dokumentacji 6502, który spowodował, że sygnał NMI podawany przez układy specjalizowane zbudowane na jej podstawie - np. przez ANTIC - jest za krótki w stosunku do rzeczywistych wymagań procesora.

Zostało to poprawione w 65C02 (i jego następcy, 65C816). W przypadku 6502 poprawka może polegać na sztucznym wydłużeniu sygnału NMI.

65C816

Procesor 65C816 obsługuje sześć typów przerwań:

  • IRQ (żądanie przerwania - maskowalne)
  • RESET
  • NMI (żądanie przerwania - niemaskowalne)
  • ABORT
  • BRK (przerwanie programowe)
  • COP (przerwanie programowe)

W odpowiedzi na przerwanie procesor automatycznie kasuje znacznik D rejestru znaczników (przełącza ALU z trybu dziesiętnego w binarny), czego 6502 nie robi. Przerwanie RESET powoduje dodatkowo ustawienie znacznika E, czyli przełączenie procesora w tryb emulacji 6502.

Różnica między obydwoma przerwaniami programowymi polega na tym, że BRK jest wektorowane oddzielnie w trybie natywnym, a w trybie emulacji jako IRQ, natomiast COP używa własnego wektora w obydwu trybach.

Zobacz też

Personal tools