Przerwania Z80.

  Działanie CA80 oparte jest o przerwania Z80. NMI (przerwanie niemaskowalne) jest zgłaszane co 2 milisekundy i obsługuje klawiaturę, wyświetlacz i zegar systemowy. Bez niego komputer byłby nieużywalny.

          

CA80 interrupts.
Obsługa NMI sześć razy odwołuje się do portów.

        Przerwania maskowalne zwykle są wyłączone, ale nie zawsze. Praca krokowa wykorzystuje przerwania z układu CTC (w starej wersji możliwe było również korzystanie z tej przydatnej funkcji bez U22). Zasada działania jest prosta: przed wykonaniem kolejnego rozkazu z programu użytkownika ustawiamy licznik tak, aby zgłosił przerwanie w czasie tego rozkazu. Zanim monitor wykona rozkaz programu użytkownika, muszą zostać odtworzone wszystkie rejestry. Zajmuje to 160 taktów zegara.

NMI every 2 ms.
Pomiędzy NMI widać przerwania pozytywki.


Próbowałem zbudować namiastkę MIKSIDa, ale praca krokowa nie działała tak jak powinna. Odkładałem zbadanie tego problemu, ale wrócił on przy okazji pozytywki. W "normalnym" CA80 wszystko działa bez zarzutu, jednak wersje "bez ROM" się zawieszają w czasie włączania CA88. Wcześniej miałem problem z wersją CMOS Z80 CTC spowodowany wejściami CLK "wiszącymi" w powietrzu, ale teraz podciąganie wejść ani wymiana CTC na "stary" nie pomaga...

EME8 pops up from time to time.
EME8 pojawia się nieregularnie.

EME8 pops up from time to time.
Inne ustawienia potencjometrów pozytywki.


Wziąłem się wreszcie do pracy nad zbadaniem tego zjawiska. Okazało się, że system wchodzi w stan WAIT, bo generowany jest sygnał EME8. Nigdzie w CA88 nie jest używany ten adres... Skąd więc się on bierze? Odpowiedź jest, jak można było się domyślić, w diagramie przyjęcia przerwania maskowalnego, które jest używane do obsługi pozytywki. W trybie IM2 procesor wystawia sygnał M1 razem z IORQ, co powoduje wysłanie na szynę danych młodszego bajta wektora przerwań przez CTC (albo inny układ rodziny Z80). Na szynie adresowej jest wtedy zawartość PC, która zwykle jest nieistotna, bo ani WR, ani RD nie są aktywne. Jednak IORQ jest jedynym warunkiem uaktywnienia U16. Wystarczy żeby bity 7, 4, 3 i 2 miały odpowiednie wartości (PC = xxxxxxxx 1xx010xx), bo pozostałe bity nie są sprawdzane. Pozytywka zgłasza przerwania cyklicznie z częstotliwością zależną od ustawienia potencjometrów P1 i P2, więc odpowiednia kombinacja adresów na pewno kiedyś wystąpi...

Z80 IM2.
Przyjęcie przerwania w trybie IM2 generuje IORQ...

The address does not always match EME8.
Nie każde przerwanie generuje EME8.


But sometimes the address matches EME8.
Ale od czasu do czasu tak...


Rozwiązanie jest proste - zastosowałem je w sterowaniu LCD, jednak w CA80-mini oraz CA80-RC skopiowałem schemat z oryginału... Nie sprawia to problemu, dopóki używamy CA80 zgodnie z jego pierwotnym przeznaczeniem, ale dodanie dwóch bramek umożliwi pracę dodatkowych funkcji CA80 bez ROM. Na razie odciąłem sygnał EME8 i podciągnąłem wejście bramki (CMOS) do +5V. Pozytywka działa, ale MIKSID już nie.

Temporary "fix".
Tymczasowe ominięcie problemu.

 

Komentarze

Popularne posty z tego bloga

Uruchamiamy CA80 na RCbus.

Magnetofon CA80.