Przerwania w procesorach 65xx

Rodzina mikroprocesorów 65xx , składająca się z technologii MOS 6502 i jej pochodnych, WDC 65C02 , WDC 65C802 i WDC 65C816 oraz CSG 65CE02 , wszystkie obsługują przerwania w podobny sposób. Istnieją trzy przerwań sprzętowych wspólne dla wszystkich procesorów 65xx i jedno przerwanie programowe , instrukcja BRK . WDC 65C816 dodaje czwarte przerwanie sprzętowe — ABORT , przydatne przy wdrażaniu architektur pamięci wirtualnej — oraz COP (obecna również w 65C802), przeznaczona do użytku w systemie z koprocesorem pewnego typu (np. procesorem zmiennoprzecinkowym ).

Typy przerwań

Lokalizacje wektorów przerwań 65xx
Przerywać Wektor (szesnastkowy)
LSB MSB
IRQ / BRK FFFE FFFF
RESETOWANIE FFFC FFFD
NMI FFFA FFFB
ANULOWAĆ FF8 FFF9
POLICJANT FFF4 FF5

Wszystkie sygnały przerwań sprzętowych są aktywne w stanie niskim i są następujące:

RESET
sygnał resetowania IRQ wyzwalany poziomem
NMI
przerwanie niemaskowalne przerwanie poziomem zboczem
wyzwalane
przerwanie maskowalne wyzwalane poziomem
ABORT
przerwanie specjalnego przeznaczenia niemaskowalne (tylko 65C816, patrz niżej), wyzwalane

Wykrycie sygnału RESET powoduje, że procesor wchodzi w okres inicjalizacji systemu wynoszący sześć cykli zegara, po czym ustawia flagę wyłączenia żądania przerwania w rejestrze stanu i ładuje licznik programu wartościami przechowywanymi w wektorze inicjalizacji procesora ( $00FFFC $00FFFD ) przed rozpoczęciem wykonywania. Jeśli działają w trybie natywnym, 65C816/65C802 są przełączane z powrotem do trybu emulacji i pozostają w nim do czasu powrotu do trybu natywnego pod kontrolą oprogramowania.

Lokalizacje wektorów przerwań trybu natywnego 65C816/65C802
Przerywać Wektor (szesnastkowy)
LSB MSB
IRQ 00FFEE 00FFEF
RESETOWANIE Nic
NMI 00FFEA 00FLUB
ANULOWAĆ 00FFE8 00FFE9
BRK 00FFE6 00FFE7
POLICJANT 00FFE4 00FFE5

Wykrycie sygnału NMI lub IRQ , jak również wykonanie instrukcji BRK spowoduje taką samą ogólną sekwencję zdarzeń, które są w kolejności:

  1. Procesor kończy bieżącą instrukcję i aktualizuje rejestry lub pamięć zgodnie z wymaganiami przed odpowiedzią na przerwanie.
  2. 65C816/65C802 podczas pracy w trybie natywnym: Rejestr banku programu ( PB , część A16-A23 magistrali adresowej ) jest umieszczany na stosie sprzętowym .
  3. Najbardziej znaczący bajt (MSB) licznika programu ( PC ) jest umieszczany na stosie.
  4. Najmniej znaczący bajt (LSB) licznika programu jest umieszczany na stosie.
  5. Rejestr stanu ( SR ) jest umieszczany na stosie.
  6. Flaga wyłączenia przerwania jest ustawiona w rejestrze stanu.
  7. 65C816/65C802: PB jest załadowany $00 .
  8. PC jest ładowany z odpowiedniego wektora (patrz tabele).

Zachowanie 65C816, gdy potwierdzono ABORT , różni się pod pewnymi względami od powyższego opisu i jest osobno omówione poniżej.

Należy zauważyć, że procesor nie wypycha akumulatorów i rejestrów indeksowych na stos — kod w procedurze obsługi przerwań musi wykonać to zadanie, a także w razie potrzeby przywrócić rejestry po zakończeniu przetwarzania przerwania. Należy również zauważyć, że wektor IRQ jest taki sam jak wektor BRK we wszystkich ośmiobitowych procesorach 65xx, jak również w 65C802/65C816 podczas pracy w trybie emulacji. Podczas pracy w trybie natywnym, 65C802/65C816 zapewnia oddzielne wektory dla IRQ i BRK .

Po ustawieniu flaga wyłączenia żądania przerwania ( bit I w rejestrze stanu) wyłączy wykrywanie sygnału IRQ , ale nie będzie miała wpływu na żadne inne przerwania (jednak patrz poniżej sekcja dotycząca instrukcji WAI zaimplementowanych w procesorach WDC CMOS) . Dodatkowo, gdy układy 65(c)02 lub 65C816/65C802 działają w trybie emulacji, kopia rejestru stanu umieszczona na stosie będzie miała ustawioną flagę B, jeśli BRK ( programowe przerwanie ) było przyczyną przerwać lub skasować, jeśli Przyczyną było IRQ . Dlatego procedura obsługi przerwania musi pobrać kopię zapisanego rejestru stanu, z którego został on umieszczony na stosie i sprawdzić stan flagi B , aby odróżnić IRQ od BRK . To wymaganie jest wyeliminowane podczas pracy 65C802/65C816 w trybie natywnym, dzięki oddzielnym wektorom dla dwóch typów przerwań.

PRZERWIJ przerwanie

ABORTB układu 65C816 ma na celu zapewnienie środków do przekierowania wykonywania programu w przypadku wykrycia wyjątku sprzętowego, takiego jak błąd strony lub naruszenie dostępu do pamięci . Stąd odpowiedź procesora, gdy ABORTB jest potwierdzone (negowane), jest inne niż wtedy, gdy potwierdzone są IRQB i/lub NMIB . Również osiągnięcie poprawnej pracy w odpowiedzi na ABORTB wymaga, aby przerwanie wystąpiło we właściwym czasie podczas cyklu maszyny , podczas gdy nie ma takiego wymogu w przypadku IRQB lub NMIB .

Kiedy ABORTB zostanie potwierdzone podczas ważnego cyklu pamięci, to znaczy, gdy procesor potwierdził wyjścia stanu VDA i/lub VPA , nastąpi następująca sekwencja zdarzeń:

  1. Procesor kończy bieżącą instrukcję, ale w żaden sposób nie zmienia rejestrów ani pamięci — wyniki obliczeń zakończonej instrukcji są odrzucane. Przerwanie przerwania nie oznacza dosłownie przerwania instrukcji.
  2. Bank programu ( PB , patrz wyżej) jest umieszczany na stosie.
  3. Najbardziej znaczący bajt (MSB) adresu przerwanej instrukcji jest umieszczany na stosie.
  4. Najmniej znaczący bajt (LSB) adresu przerwanej instrukcji jest umieszczany na stosie.
  5. Rejestr stanu jest umieszczany na stosie.
  6. Flaga wyłączenia przerwania jest ustawiona w rejestrze stanu.
  7. PB jest załadowany $00 .
  8. Licznik programu jest ładowany z wektora ABORT (patrz tabele).

Ponieważ adres przekazywany na stos jest adresem przerwanej instrukcji, a nie zawartością licznika programu, wykonanie RTI ( R e Turn from I nterrupt ) po przerwaniu ABORT spowoduje, że procesor powróci do przerwanej instrukcji, a nie niż następna instrukcja, tak jak w przypadku innych przerwań.

Aby procesor prawidłowo reagował na przerwanie, logika systemu musi potwierdzić (zanegować) wejście ABORTB , gdy tylko prawidłowy adres zostanie umieszczony na magistrali i zostanie ustalone, że adres stanowi błąd strony, naruszenie dostępu do pamięci lub inna anomalia (np. próba wykonania uprzywilejowanej instrukcji). Dlatego logika nie może potwierdzić ABORTB , dopóki procesor nie potwierdzi sygnałów VDA lub VPA . Także ABORTB musi pozostać potwierdzony aż do upadku zegara fazy drugiej, a następnie zostać natychmiast zwolniony. Jeśli te ograniczenia czasowe nie są przestrzegane, sam program obsługi przerwania przerwania może zostać przerwany, powodując zmianę rejestrów i/lub pamięci w prawdopodobnie nieokreślony sposób.

Anomalie przerwań

W NMOS 6502 i pochodnych (np. 6510) jednoczesne zapewnienie sprzętowej linii przerwania i wykonanie BRK nie zostało uwzględnione w projekcie — instrukcja BRK zostanie w takim przypadku zignorowana. Również stan trybu dziesiętnego w rejestrze stanu procesora pozostaje niezmieniony po przerwaniu dowolnego rodzaju. Takie zachowanie może potencjalnie spowodować trudny do zlokalizowania błąd w programie obsługi przerwań , jeśli tryb dziesiętny jest włączony w momencie przerwania. Wszystkie te anomalie zostały poprawione CMOS procesora.

Uwagi dotyczące obsługi przerwań

Dobrze zaprojektowana i zwięzła procedura obsługi przerwań lub procedura obsługi przerwań (ISR) nie tylko szybko obsłuży każde zdarzenie, które powoduje przerwanie, ale zrobi to bez ingerencji w jakikolwiek sposób w przerwane zadanie pierwszoplanowe — ISR musi być „przezroczysty” dla przerwanego zadania (chociaż w szczególnych przypadkach mogą obowiązywać wyjątki). Oznacza to, że ISR musi zachowywać stan mikroprocesora (MPU) i nie zakłócać niczego w pamięci, czego nie powinien zakłócać. Dodatkowo, ISR powinien być w pełni reentrant , co oznacza, że ​​jeśli dwa przerwania nadejdą w krótkim odstępie czasu, ISR będzie w stanie wznowić przetwarzanie pierwszego przerwania po obsłużeniu drugiego. Ponowne wejście jest zwykle osiągane przy użyciu tylko Stos sprzętowy MPU do przechowywania (chociaż istnieją inne możliwe metody).

Zachowanie stanu MPU oznacza, że ​​ISR musi zapewnić, że jakiekolwiek wartości były w rejestrach MPU w czasie przerwania, będą tam również po zakończeniu ISR. Część procesu konserwacji jest automatycznie obsługiwana przez MPU, gdy potwierdzi przerwanie, ponieważ przed wykonaniem ISR wypchnie licznik programu (i bank programu w 65C816/65C802) oraz rejestr stanu na stos. Po zakończeniu ISR, gdy RTI , MPU odwróci proces. Żaden członek rodziny 65xx nie odkłada żadnych innych rejestrów na stos.

W większości ISR ​​rejestry akumulatorów i/lub indeksów muszą być zachowane, aby zapewnić przejrzystość, a następnie przywrócone jako ostatnie kroki przed wykonaniem RTI . W przypadku 65C816/65C802 należy wziąć pod uwagę, czy w momencie przerwania pracuje on w trybie emulacji, czy w trybie natywnym. Jeśli to drugie, może być również konieczne zachowanie banku danych ( DB ) i strony bezpośredniej (zerowej) ( DP ) rejestrów w celu zagwarantowania przejrzystości. Ponadto system operacyjny 65C816 w trybie natywnym może równie dobrze używać innej lokalizacji stosu niż oprogramowanie aplikacji, co oznacza, że ​​ISR musiałby zachować, a następnie przywrócić wskaźnik stosu ( SP ) . Dalszą komplikacją w przypadku 65C816/65C802 jest to, że rozmiary rejestrów akumulatora i indeksu mogą wynosić 8 lub 16 bitów podczas pracy w trybie natywnym, co wymaga zachowania ich rozmiarów do późniejszego przywrócenia.

Metody zachowywania i przywracania stanu MPU w ramach ISR będą się różnić w zależności od różnych wersji rodziny 65xx. W przypadku procesorów NMOS (np. 6502, 6510, 8502 itd.) może istnieć tylko jedna metoda zachowania rejestrów akumulatora i indeksu, ponieważ tylko akumulator można wsuwać i wyciągać ze stosu. Dlatego następujący kod wejścia ISR jest typowy:

                             
        
                             
        
                             
                              PHA  ; oszczędzaj akumulator   TXA  PHA  ; zapisz rejestr X   TYA  PHA  ; zapisz rejestr Y   CLD  ; zapewnić tryb binarny, usuwając flagę dziesiętną  

Instrukcja CLD jest konieczna, ponieważ, jak wcześniej zauważono, wersje NMOS 6502 nie kasują flagi D (tryb dziesiętny) w rejestrze stanu, gdy pojawia się przerwanie.

Gdy rejestry akumulatora i indeksu zostaną zachowane, ISR może z nich korzystać w razie potrzeby. Kiedy ISR zakończy swoją pracę, przywróci rejestry, a następnie wznowi przerwane zadanie pierwszoplanowe. Ponownie typowy jest następujący kod NMOS:

        
                             
        
                             
                             
                              ZAGRAJ W  TAJ  ; przywrócić rejestr Y   PLA  TAX  ; przywrócić rejestr X   PLA  ; przywrócić akumulator   RTI  ; wznowić przerwane zadanie  

Konsekwencją instrukcji RTI jest to, że MPU powróci do trybu dziesiętnego, jeśli taki był jego stan w momencie przerwania.

65C02 i 65C816/65C802 podczas pracy w trybie emulacji wymagają mniej kodu, ponieważ są w stanie przesuwać i ciągnąć rejestry indeksowe bez używania akumulatora jako pośrednika . Automatycznie usuwają również tryb dziesiętny przed wykonaniem ISR. Poniższe jest typowe:

                             
                             
                              PHA  ; oszczędzaj akumulator   PHX  ; zapisz X-register   PHY  ; zapisz rejestr Y  

Po zakończeniu ISR odwróciłby proces:

                             
                             
                             
                              WARSTWA  ; przywrócić rejestr Y   PLX  ; przywrócić rejestr X   PLA  ; przywrócić akumulator   RTI  ; wznowić przerwane zadanie  

Jak wspomniano wcześniej, 65C816/65C802 jest nieco bardziej złożony podczas pracy w trybie natywnym ze względu na zmienne rozmiary rejestrów i konieczność uwzględnienia rejestrów DB i DP . W przypadku rejestrów indeksowych można je wypchnąć bez względu na ich rozmiary, ponieważ zmiana rozmiaru automatycznie ustawia zerem najbardziej znaczący bajt (MSB) w tych rejestrach i żadne dane nie zostaną utracone po przywróceniu wypchniętej wartości, pod warunkiem, że rejestry indeksowe mają taki sam rozmiar, jak po naciśnięciu.

Akumulator to jednak tak naprawdę dwa rejestry: oznaczone .A i .B . Wciśnięcie akumulatora, gdy jest ustawiony na 8 bitów, nie zachowa .B , co może spowodować utratę przezroczystości, jeśli ISR ​​zmieni .B w jakikolwiek sposób. Dlatego akumulator musi być zawsze ustawiony na 16 bitów przed pchnięciem lub wyciągnięciem, jeśli ISR ​​będzie używał .B . Bardziej wydajne jest również ustawienie rejestrów indeksowych na 16 bitów przed ich wypchnięciem. W przeciwnym razie ISR musi następnie wypchnąć dodatkową kopię rejestru stanu, aby mógł przywrócić rozmiary rejestrów przed wyciągnięciem ich ze stosu.

W przypadku większości ISR ​​następujący kod wejściowy pozwoli osiągnąć cel przejrzystości:

                             
                             
         
                             
                             
                              BPH  ; zapisz aktualny bank danych   PHD  ; zapisz bezpośredni wskaźnik strony   REP  #%00110000 ; wybierz rejestry 16-bitowe   PHA  ; oszczędzaj akumulator   PHX  ; zapisz   PHY  w rejestrze X  ; zapisz rejestr Y  

W powyższym fragmencie kodu symbol % to składnia technologii MOS i standardowego języka asemblera WDC dla operandu bitowego .

Jeśli ISR ​​ma przypisaną własną lokalizację stosu, zachowanie wskaźnika stosu ( SP ) musi nastąpić w pamięci po wystąpieniu powyższych wypchnięć — powinno być jasne, dlaczego tak się dzieje. Poniższy kod, dodany do powyższej sekwencji, poradziłby sobie z tym wymaganiem:

                             
                       
                       
                              TSC  ; skopiuj wskaźnik stosu do akumulatora   STA  stkptr  ; zapisz gdzieś w bezpiecznej pamięci RAM   LDA  isrptr  ; pobierz wskaźnik stosu ISR &...   TCS  ; ustaw nową lokalizację stosu  

Po zakończeniu ISR powyższe procesy zostaną odwrócone w następujący sposób:

         
                             
                       
                     
                             
                             
                             
                             
                             
                             
                              REP  #%00110000 ; wybierz rejestry 16 bitowe   TSC  ; zapisz SP ISR...   STA  isrptr  ; do późniejszego wykorzystania   LDA  isstkptr  ; pobierz SP &...   TCS  zadania pierwszoplanowego  ; ustaw to   PLY  ; przywrócić rejestr Y   PLX  ; przywrócić rejestr X   PLA  ; przywrócić akumulator   PLD  ; przywróć bezpośredni wskaźnik strony   PLB  ; przywrócić bieżący bank danych   RTI  ; wznowić przerwane zadanie  

Zauważ, że po wykonaniu RTI , 65C816/65C802 automatycznie przywróci rozmiary rejestrów do tego, co było w momencie wystąpienia przerwania, ponieważ pobranie wcześniej zapisanego rejestru stanu ustawia lub czyści oba bity rozmiaru rejestru do tego, co było w czasie przerwania .

Chociaż możliwe jest przełączenie 65C816/65C802 z trybu natywnego do trybu emulacji w ramach ISR, jest to obarczone niebezpieczeństwem. Oprócz wymuszenia rozmiaru rejestrów akumulatora i indeksu na 8 bitów (powodując utratę najbardziej znaczącego bajtu w rejestrach indeksów), wejście w tryb emulacji spowoduje obcięcie wskaźnika stosu do 8 bitów i przeniesienie samego stosu do pamięci RAM strony 1 . W rezultacie stos, który istniał w momencie przerwania, będzie niedostępny, chyba że znajdował się również w pamięci RAM strony 1 i nie był większy niż 256 bajtów. Ogólnie rzecz biorąc, przełączanie trybu podczas obsługi przerwania nie jest zalecaną procedurą, ale może być konieczne w określonych środowiskach operacyjnych.

Korzystanie z BRK i COP

Jak wcześniej zauważono, BRK i COP są przerwaniami programowymi i jako takie mogą być wykorzystywane na różne sposoby do implementacji funkcji systemowych.

Historyczne użycie BRK polegało na pomocy w łataniu PROMów , gdy wykryto błędy w oprogramowaniu układowym systemu . Typową techniką często stosowaną podczas opracowywania oprogramowania układowego było ustawienie BRK tak, aby wskazywał na niezaprogramowany „obszar poprawki” w PROM. W przypadku wykrycia błędu łatanie byłoby realizowane przez „przepalenie” wszystkich bezpieczników pod adresem, w którym znajdowała się wadliwa instrukcja, zmieniając w ten sposób kod operacji instrukcji na $ 00 . Po wykonaniu wynikowego BRK , MPU zostanie przekierowany do obszaru patch, w którym zostanie wpisany odpowiedni kod patch. Często kod obszaru poprawki zaczynał się od „wąchania stosu” w celu określenia adresu, pod którym napotkano błąd, co potencjalnie pozwala na obecność więcej niż jednej poprawki w PROM. Użycie BRK do łatania PROM zmniejszyło się, gdy EPROM i EEPROM stały się powszechnie dostępne.

Innym zastosowaniem BRK w tworzeniu oprogramowania jest pomoc w debugowaniu w połączeniu z monitorem języka maszynowego . Nadpisując kod operacji BRK ( $00 ) i kierując wektor sprzętowy BRK do punktu wejścia monitora, można spowodować zatrzymanie programu w dowolnym punkcie, umożliwiając monitorowi przejęcie kontroli. W tym czasie można sprawdzić pamięć, przejrzeć wartości rejestrów procesora, kod poprawki itp. Debugowanie, zgodnie z zaleceniami Kuckesa i Thompsona, można ułatwić, hojnie posypując swój kod NOP (opcode $EA ), które można zastąpić instrukcjami BRK bez zmiany rzeczywistego zachowania debugowanego programu.

Cechą charakterystyczną instrukcji BRK i COP jest to, że procesor traktuje każdą z nich jako instrukcję dwubajtową: sam kod operacji i następujący po nim bajt, który jest określany jako „sygnatura”. Po wykonaniu BRK lub COP procesor doda dwa do licznika programu przed umieszczeniem go na stosie. Stąd, gdy RTI ( R e Turn from I nterrupt), przerwany program będzie kontynuowany pod adresem następującym bezpośrednio po podpisie. Jeśli BRK jest używany jako urządzenie do debugowania, może zajść konieczność dostosowania licznika programu tak, aby wskazywał na sygnaturę, aby wznowić wykonywanie tam, gdzie jest to oczekiwane. Alternatywnie, NOP może być wstawiony jako „symbol zastępczy” podpisu, w którym to przypadku nie będzie wymagana żadna regulacja licznika programu.

Fakt, że BRK i COP podwajają licznik programu przed odłożeniem go na stos, ułatwia technikę traktowania ich jako instrukcji wezwania przełożonego , co można znaleźć na niektórych komputerach typu mainframe . Zwykłą procedurą jest traktowanie podpisu jako indeksu usługi systemu operacyjnego. System operacyjny BRK lub COP program obsługi pobrałby wartość licznika programu odłożonego na stos, zmniejszył ją i odczytał z wynikowej lokalizacji pamięci, aby uzyskać podpis. Po przekonwertowaniu sygnatury na indeks liczony od zera, można skorzystać z prostej tabeli przeglądowej , aby załadować licznik programu adresem właściwej procedury serwisowej. Po zakończeniu procedury serwisowej RTI zostanie użyta do przywrócenia kontroli do programu, który wykonał wywołanie systemu operacyjnego. Należy zauważyć, że sygnatura dla BRK może być dowolną wartością, natomiast sygnatura dla COP powinna być ograniczona do zakresu $00 - $7F .

Użycie BRK i/lub COP do zażądania usługi systemu operacyjnego oznacza, że ​​aplikacje użytkownika nie muszą znać adresu wejściowego każdej funkcji systemu operacyjnego, a jedynie prawidłowy bajt podpisu, aby wywołać żądaną operację. Stąd relokacja systemu operacyjnego w pamięci nie zerwie kompatybilności z istniejącymi aplikacjami użytkownika. Ponadto, ponieważ wykonanie BRK lub COP zawsze przenosi procesor na ten sam adres, prosty kod może być użyty do zachowania rejestrów na stosie przed przekazaniem kontroli żądanej usłudze. Jednak ten model programowania spowoduje nieco wolniejsze wykonanie w porównaniu z wywołaniem usługi jako a subroutine , głównie w wyniku działania stosu, które występuje z dowolnym przerwaniem. Ponadto żądania przerwań zostaną wyłączone przez wykonanie BRK lub COP , co wymaga ponownego włączenia ich przez system operacyjny.

Instrukcje WAI i STP

WAI ( WA it for I nterrupt, opcode $CB ) to instrukcja dostępna w wersji WDC mikroprocesorów (MPU) 65C02 i 65C816/65C802, która zatrzymuje MPU i wprowadza go w stan pół-katatoniczny, aż do przerwania sprzętowego występuje jakikolwiek rodzaj. Podstawowym zastosowaniem WAI są systemy wbudowane o niskim poborze mocy, w których MPU nie ma nic do roboty, dopóki nie nastąpi oczekiwane zdarzenie i pożądane jest minimalne zużycie energii, gdy system czeka i / lub wymagana jest szybka reakcja. Typowy przykład kodu wykorzystującego WAI następująco:

                             
                             
         SEI  ; wyłącz IRQ   WAI  ; czekać na przerwanie sprzętowe   ; ... egzekucja zostaje wznowiona tutaj  

W powyższym fragmencie kodu MPU zatrzyma się po wykonaniu WAI i przejdzie w stan bardzo niskiego zużycia energii. Pomimo wyłączenia żądań przerwań (IRQ) przed WAI , MPU odpowie na każde przerwanie sprzętowe podczas oczekiwania. Po odebraniu przerwania MPU „obudzi się” w jednym cyklu zegara i wznowi wykonywanie instrukcji bezpośrednio po WAI . W związku z tym opóźnienie przerwania będzie bardzo krótkie (70 nanosekund przy 14 MHz), co skutkuje najszybszą możliwą reakcją na zdarzenie zewnętrzne.

Pod pewnymi względami podobna do WAI jest instrukcja STP ( ST o P , opcode $DB ), która całkowicie wyłącza MPU podczas oczekiwania na pojedyncze wejście przerwania. Gdy STP , MPU zatrzymuje swój wewnętrzny zegar (ale zachowuje wszystkie dane w swoich rejestrach) i przechodzi w stan niskiego poboru mocy. MPU jest wyprowadzany z tego stanu poprzez wyciągnięcie pinu wejściowego resetowania ( RESB , który jest klasyfikowany jako wejście przerwania) do stanu niskiego. Wykonanie zostanie wznowione pod adresem zapisanym w lokalizacjach $00FFFC-$00FFFD , wektor resetowania sprzętu. Podobnie jak w przypadku WAI , STP jest przeznaczony do stosowania w aplikacjach wbudowanych o niskim poborze mocy, w których mogą upłynąć długie okresy czasu między zdarzeniami wymagającymi uwagi MPU i żadne inne przetwarzanie nie jest wymagane. STP nie byłby używany w normalnym programowaniu, ponieważ skutkowałoby to całkowitym zaprzestaniem przetwarzania.

przypisy

  1. ^ a b Wejście ABORT jest dostępne tylko w modelu W65C816S .
  2. ^ a b Instrukcja COP jest dostępna w obu trybach pracy.
  3. ^ 65C816/65C802 nie ma wektora przerwań trybu natywnego dla sygnału RESET , ponieważ reset zawsze przywraca procesor do trybu emulacji.
  4. ^ Wartość flagi B w samym rejestrze stanu wynosi zawsze 1 , niezależnie od typu przerwania. B ma znaczenie tylko w kopii rejestru stanu, która jest umieszczana na stosie w odpowiedzi na przerwanie i faktycznie nie istnieje w rejestrze flag.
  1. ^ a b c d e   Anderson, JS (1994). Technologia mikroprocesorowa . Butterworth-Heinemann. s. 143–144. ISBN 9780750618397 .
  2. ^ a b c d e f g h i j k l m n o p q r s t u v w x y z aa David Eyes i Ron Lichty (1992-04-28). „Programowanie 65816” (PDF) . The Western Design Center, Inc. Zarchiwizowane od oryginału (PDF) w dniu 2012-07-23 . Źródło 2012-11-29 .
  3. ^ a b „Podstawowa architektura” . 6502 . 2002-01-02.
  4. ^ a b   Leo J. Scanlon (1980). 6502 Projektowanie oprogramowania . HW Sams. s. 172–173 . ISBN 9780672216565 .
  5. ^ a b c   Lance A. Leventhal (1986). 6502 Programowanie w asemblerze . Osborne/McGraw-Hill. ISBN 9780078812163 .
  6. ^   Ronald J. Tocci i Lester P. Laskowski (1979). Mikroprocesory i mikrokomputery: sprzęt i oprogramowanie . Prentice Hall. P. 379 . ISBN 9780135813225 .
  7. ^    Kucks Arthur F.; Thompson, BG (1987). Apple II w laboratorium . Archiwum UP. P. 93 . ISBN 9780521321983 . LCCN 86-21531 .
  8. ^ Harrod, Dennette A. (październik 1980). „6502 pobiera instrukcje mikroprogramowalne” . BAJT . Tom. 5, nie. 10. Wzgórze McGraw . s. 282–285. Zarchiwizowane od oryginału w dniu 2006-05-25 . Źródło 2009-05-31 .
  9. ^   Ryszard R. Smardzewski (1984). Programowanie i zastosowania mikroprocesorów dla naukowców i inżynierów . Elsevier. P. 125 . ISBN 9780444424075 .

Dalsza lektura