Mikroprocesor Z80
wyprowadzenia:
- GND - Masa. Wszystkie napięcia na wyprowadzeniach definiuje się
względem tego poziomu.
- Ucc - Napięcie zasilania +5V
- CLK - Wejście zegarowe.
- A0-A15 - Jednokierunkowa trójstanowa 16-bitowa szyna adresowa
służąca do adresowania zarówno pamięci, jak i portów wejścia/wyjścia.
- D0 - D7 - Dwukierunkowa, trójstanowa 8-bitowa szyna danych służąca
do przesyłania danych z i do procesora.
- /M1 - Wyjście sygnalizujące wykonywanie pierwszego cyklu maszynowego
(M1), w którym procesor pobiera rozkaz z pamięci, dekoduje go i
inicjuje jego wykonanie.
- /MREQ (ang. memory request) - Trójstanowe wyjście procesora. Niski
poziom oznacza, że procesor żąda kontaktu z pamięcią i że szyna
adresowa zawiera już stabilny adres.
- /IORQ (ang. input-output request) - Trójstanowe wyjście procesora.
Niski poziom oznacza, że procesor wykonuje rozkaz wejścia/wyjścia
i żąda kontaktu z odpowiednim rejestrem portu wejścia/wyjścia. Szyna
adresowa zawiera odpowiedni adres. Sygnał /IORQ jest generowany również
jako potwierdzenie przyjęcia przerwania.
- /RD (ang. read) - Trójstanowe wyjście procesora. Niski poziom oznacza,
że procesor będzie czytał dane z pamięci lub portu wejściowego.
- /WR (ang. write) - Trójstanowe wyjście procesora. Niski poziom oznacza,
że procesor będzie zapisywał dane do pamięci lub portu wyjściowego. /WR
informuje, że szyna danych zawiera stabilne dane.
- /RFSH (ang. refresh) - Wyjście. Sygnał /RFSH oznacza, że dolna połowa
szyny adresowej zawiera adres odświeżania i aktualny sygnał /MREQ może
zostać wykorzystany przez pamięć dynamiczną do odświeżania.
- /HALT - Wyjście. Niski poziom oznacza, że procesor wykonał rozkaz stopu
HALT i przeszedł do stanu martwej pętli. W tym stanie procesor wykonuje
cyklicznie rozkazy puste (nie pobierając ich kodu z pamięci) i czeka
na przerwanie lub sygnał zerowania.
- /WAIT - Wejście. Niski poziom informuje procesor, że pamięć bądź inny
układ zewnętrzny nie nadąża za procesorem i żąda wstrzymania pracy
procesora na okres jednego lub więcej cykli zegarowych.
- /INT (ang. interrupt request) - Wejście. Sygnał /INT - jeśli nie
zostanie zignorowany - spowoduje przerwanie pracy procesora (po
zakończeniu wykonywania podprogramu obsługi przerwania. Jest to
przerwanie maskowalne.
- /NMI (ang. non-maskable interrupt) - Wejście. Sygnał /NMI ma
pierwszeństwo przed /INT i przerywa bezwarunkowo pracę procesora po
zakończeniu wykonywania aktualnego rozkazu. Reakcja procesora jest
wyzwalana opadającym zboczem napięcia na tym wyprowadzeniu. Jest to
przerwanie niemaskowalne.
- /RESET - Wejście. Sygnał /RESET zeruje procesor. Dopóki ten sygnał jest
aktywny, procesor zawiesza wszystkie wyprowadzenia trójstanowe. Następnie
praca Z80 jest wznawiana od początku, tj. procesor zeruje licznik
rozkazów oraz niektóre rejestry wewnętrzne zanim zacznie wykonywać
kolejne cykle pracy.
- /BUSRQ (ang. bus request) - Wejście procesora. Sygnał /BUSRQ ma wyższy
priorytet niż /NMI i jest zawsze przyjmowany po zakończeniu aktualnego
cyklu maszynowego. Powoduje przejście szyny adresowej, danych
i innych wyprowadzeń trójstanowych w stan wysokiej impedancji i
wstrzymanie pracy procesora.
- /BUSAK (ang. bus acknowledge) - Wyjście procesora. Sygnał /BUSAK
potwierdza przyjęcie sygnału /BUSRQ. Informuje urządzenia zewnętrzne, że
magistrale danych i adresów są do dyspozycji, a praca procesora
zawieszona.
opis
Obsługa przerwań w procesorze Z80
Procesor Z80 rozpoznaje dwa rodzaje przerwań: maskowalne wyzwalane
sygnałem /INT poziomem niskim i niemaskowalne wyzwalane sygnałem
/NMI zboczem opadającym. Taki sposób wyzwalania przerwania
niemaskowalnego powoduje, że jeśli podczas wykonywania podprogramu obsługi
przerwania niemaskowalnego sygnał /NMI nie ulegnie zmianie (będzie nadal
równy 0), nie spowoduje to następnego przerwania. Fakt uaktywnienia
sygnałów /INT oraz /NMI jest testowany podczas narastającego zbocza
ostatniego taktu ostatniego cyklu maszynowego rozkazu. Przyjęcie przerwania powoduje
automatyczne zapamiętanie na stosie zawartości licznika rozkazów. Nie jest
zapamiętywana zawartość żadnych innych rejestrów.
Jeśli przerwanie zostało przyjęte, procesor generuje specjalny cykl M1,
w którym zamiast /MREQ uaktywnia się /IORQ. Sygnał /RFSH jest generowany
normalnie, a do szyny adresowej procesor wysyła zawartość licznika
rozkazów. Jednoczesne wystąpienie /M1 i /IORQ może być interpretowane
przez urządzenia zewnętrzne jako potwierdzenie przyjęcia przerwania.
Po przyjęciu przerwania niemaskowalnego (NMI) następuje skok do
procedury obsługi przerwania pod adresem 66h.
W przypadku przerwania niemaskowalnego (INT) procesor dysponuje trzema
trybami jego obsługi, przełączanymi programowo.
W trybie 0 procesor traktuje specjalny specjalny cykl M1 jako normalny
cykl pobrania rozkazu, tj. traktuje zawartość szyny danych jako kod
rozkazu do wykonania. Tę daną powinno dostarczyć urządzenie zewnętrzne.
Najczęściej stosuje się przesłanie kodu rozkazu restartu RST, który jest
jednobajtowym rozkazem wywołania podprogramu mieszczącego się pod jednym
z adresów: 00h, 08h, 10h, 18h, 20h, 28h, 30h, 38h.
W trybie 1 zostaje wywołany podprogram mieszczący się pod adresem 38h.
W trybie 2 procesor oczekuje od urządzenia zewnętrznego wystawienia na
magistralę danych bajtu traktowanego jako mniej znacząca połowa adresu.
Jako bardziej znaczący bajt adresu procesor pobiera ustawioną programowo
zawartość rejestru I, a następnie dokonuje odczytu słowa pamięci
mieszczącego się pod wskazanym adresem. Te dwa odczytane bajty traktuje
jako adres podprogramu obsługi przerwania. Najmniej znaczący bit bajtu
przekazywanego przez urządzenie zewnętrzne jest ignorowany i zawsze
traktowany jako 0.
Organizacja wewnętrzna procesora:
Na rysunku przedstawiono logiczny schemat architektury Z80. Podobnie jak i inne mikroprocesory Z80 można podzielić ogólnie na trzy części:
- część sterującą, której zadaniem jest kontrola i zarządzanie wewnętrznym przepływem informacji w procesorze, w szczególności dekodowanie rozkazu i inicjowanie jego wykonania
- zespół rejestrów stanowiący wewnętrzną pamięć operacyjną procesora
- główny układ wykonawczy noszący nazwę arytmometru lub jednostki arytmetyczno-logicznej
Jednostka arytmetyczno-logiczna zajmuje się właściwym wykonaniem takich rozkazów jak 8-bitowe dodawanie, odejmowanie, logiczne mnożenie itp. Niektóre rozkazy jak np. skoku, nie przechodzą przez ALU, gdyż zmieniają wyłącznie stan części sterującej procesora. ALU zazwyczaj bywa rysowana w kształcie litery V. Na rysunku widać drugi mniejszy obiekt o podobnym kształcie. Jest to specjalny sumator, który pozwala na szybkie wykonywanie operacji dodawania 8-bitowej liczby do zawartości rejestru indeksowego, umożliwiając łatwą organizacje względnego adresowania pamięci.
Cześć sterująca procesora również dysponuje małym sumatorem, którego zadaniem jest automatyczne zwiększanie o 1 zawartości licznika rozkazów oraz licznika odświeżania.
Całość jest spięta zespołami połączeń, które noszą nazwę szyn. Termin szyna bywa w literaturze używany zamiennie z terminem magistrala. Tutaj dla jednoznaczności pozostawimy termin szyna dla określenia wewnętrznego kanału informacji w procesorze, natomiast przez magstrale będziemy rozumieć kanał zewnętrzny - element systemu mikroprocesorowego, do którego podłączone są szyny procesora. Mamy wiec wewnętrzną 8-bitową szynę danych i szynę adresów, a także zespól wielu połączeń którymi przebiegają sygnały sterujące i kontrolne procesora, umownie zwany szyna sterowania.
Przedstawienie opisu wszystkich elementów procesora nie jest tutaj możliwe. Na rysunku elementy nie dostępne dla programu zaznaczone są linią przerywana.
Rejestrami programowo dostępnymi są:
- akumulator
- rejestr wskaźników stanu F
- rejestry ogólnego przeznaczenia A, C, D, E, H i L
- rejestr wskaźnika stosu
- rejestry indeksowe IX i IY
- rejestr wektora przerwań I
- licznik odświeżania pamięci R
- licznik rozkazów PC
Ponadto procesor dysponuje dwoma jednobitowymi rejestrami IFF1 i IFF2 informującymi czy procesor jest w stanie przyjąć maskowalne przerwanie. Dwa przerzutniki są potrzebne gdyż przerwanie niemaskowalne automatycznie blokuje możliwość przyjmowania przerwań maskowalnych przez procesor, lecz może odtworzyć stan poprzedni po powrocie z podprogramu obsługi przerwania.
Rejestr F jest 8 bitowy. Jeżeli odpowiedni warunek jest spełniony, bit odpowiadający temu warunkowi jest ustawiony. Bity te nie są bezpośrednio odczytywane przez program ( aczkolwiek można to uczynić, choć niezbyt wygodnie ), lecz automatycznie sprawdzane przez procesor podczas wykonywania rozkazów warunkowych oraz rozkazów dotyczących arytmetyki BCD. Strukturę rejestru F można opisać:
- F0 - wskaźnik przeniesienia. Jest ustawiany jeśli podczas operacji arytmetycznej lub przesunięcia bit równy 1 "wyszedł poza rejestr"
- F1 - wskaźnik odejmowania. Jest ustawiony jeśli ostatnio wykonywana operacja a zerowany - jeśli dodawanie. Jest potrzebny w arytmetyce BCD do prawidłowego wykonywania operacji korekcji dziesiętnej
- F2 - wskaźnik nadmiaru / parzystości. Ponieważ nadmiar może być sygnalizowany w operacjach arytmetycznych, dla których liczba jedynek w bajcie jest informacja bez znaczenia, projektanci Z80 oszczędzili jeden bit. I tak bit F2 służy do wskazywania nadmiaru operacji arytmetycznych i parzystości operacji logicznych. Jeśli ustawiony to znaczy ze pojawił się nadmiar lub jeśli liczba ustawionych bitów jest parzysta.
- F3 - bit nie używany. Nie jest sprawdzany ani przez rozkazy skoków warunkowych ani przez rozkazy korekcji dziesiętnej. U umieszcza w nim jednak jakąś informacje, na ogol jest to kopia bitu 3 jednego z argumentów lub wyniku operacji
- F4 - wskaźnik przeniesienia z bitu 3 do bitu 4, wymagany przy arytmetyce BCD
- F5 - bit nie używany, jak F3
- F6 - wskaźnik zera. Bit jest ustawiony jeśli wynikiem operacji arytmetycznej lub logicznej jest zero
- F7 - wskaźnik znaku. Jest to kopia najbardziej znaczącego bitu wyniku operacji i wynosi 1, jeśli wynikiem jest liczba ujemna w dwójkowym kodzie uzupełnieniowym
Przygotowali: Przemysław Bożek i Rafał Kubina
główna |
technologie |
indeks tematyczny |
indeks alfabetyczny