Przerwania: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
początek artykułu o przerwaniach
 
Nie podano opisu zmian
 
(Nie pokazano 29 wersji utworzonych przez 5 użytkowników)
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'''
 
'''3. IRQ'''
 
'''4. BRK'''
 
{{stub}}

Aktualna wersja z 24 mar 2016, 02:58

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ż