Przerwania: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
Nie podano opisu zmian
 
(Nie pokazano 22 wersji utworzonych przez 5 użytkowników)
Linia 1: Linia 1:
Procesor 6502 obsługuje 3 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)
* [[NMI]] (żądanie przerwania - niemaskowalne)
* [[BRK]] (przerwanie programowe, wektorowane jako IRQ)


====CHIP RESET====
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.
 
Przerwanie CHIP RESET jest wywoływane przez podanie procesorowi sygnału RST. Logika na płycie Atari robi to automatycznie po włączeniu zasilania 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 procedury zimnego startu.Procedura zimnego startu wygląda tak:
 
1. Flaga ciepłego startu (WARMST $0008) ustawiana jest na wartość 0 (fałsz - wykonujemy wszak zimny start)
 
2. Sprawdzany jest stan kartridża. Jeśli włożono kart diagnostyczny - kontrola przekazywana jest do niego)
 
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 bajtu 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. MEMTOP ($02E5) zostaje ustawiony na pierwszy bajt po końcu pamięci RAM. Następuje otwarcie ekranu (po tej operacji MEMTOP wskazuje ostatni wolny bajt przed pamięcią 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, a potem z [[nowe urządzenia|nowych urządzeń]] (to tylko w XL/XE).
 
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.
 
Po pierwszym zimnym starcie każde następne naciśnięcie klawisza RESET powoduje tzw. ciepły start.


1.Flaga ciepłego startu ustawiana jest na $FF (prawda)
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.


2.Wykonywane są kroki 2-4 procedury zimnego startu.
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].


3.Zerowany jest RAM w obszarach $0010-007F i $0200-$03FF
==65C816==


4.Wykonywane są kroki 7-14 procedury zimnego startu.
Procesor [[65C816]] obsługuje sześć typów przerwań:


5.Jeśli nastąpił boot z kasety system skacze pod adres zapisany w wektorze CASINI $0002
* IRQ (żądanie przerwania - maskowalne)
* RESET
* NMI (żądanie przerwania - niemaskowalne)
* [[ABORT]]
* [[BRK]] (przerwanie programowe)
* [[COP]] (przerwanie programowe)


6.Jeśli nastąpił boot z dysku system skacze pod adres zapisany w wektorze DOSINI $000C
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.


W pamięci komputera znajdują się znaczniki (np. CDST $0244), których zmiana powoduje przejście procedury ciepłego startu w zimny start.
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.


[[Kategoria:Atari 8-bit]]
==Zobacz też==
* [http://pl.wikipedia.org/wiki/Przerwanie Przerwanie] (pl.wiki)


{{stub}}
[[Kategoria:Menu Główne]]
[[Kategoria:Programowanie Atari 8-bit]]

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ż