CA80 z podmienionym procesorem będzie działał poprawnie, jednak czasem wystąpią małe kłopoty. Pierwszy polega na różnicy taktowania, ponieważ zastosowałem pewne uproszczenie schematu, w celu umożliwienia współpracy z generatorem podłączonym do złącza systemowego.
 |
CA180-mini. |
Pierwsze testy robiłem na "starym" oryginalnym CA80, do którego wpinałem różne wersje Z180 przez przewód emulacyjny. Potem zrobiłem wersję "hybryda", która była połączona z Z80-MBC2 poprzez złącze ZS. Wersja CA180-mini jest wypadkową wcześniejszych prób, więc stąd wynika problem. W "normalnych" komputerach CLK jest generowany przez procesor i następnie dzielony przez 2 w celu osiągnięcia wypełnienia 50%. Dopiero ten sygnał jest rozprowadzony do pozostałych podzespołów jako PHI. Konstruktorzy Z180 przewidzieli również zastosowanie innych generatorów o lepszych parametrach i umożliwili wyłączenie wstępnego dzielnika. Wtedy PHI = CLK i właśnie to musimy zrobić na początku. Potrzebna będzie dokumentacja Z180, w której znajdziemy rejestr odpowiedzialny za PHI.
 |
Wszystkie bity po RESET są wyzerowane. |
Drugi kłopot, to szybciej działający procesor. Czas wykonywania instrukcji znajdziemy w tej samej dokumentacji. Porównamy je z czasami dla Z80. W monitorze CA80 wiele procesów zależy od szybkości procesora, np. obsługa magnetofonu. Ale kilka procent niewiele tu zmienia i prawdopodobnie odczyt z taśm nagranych ze standardowym procesorem będzie bezbłędny ( system manchester jest odporny na zakłócenia - opis MIK05 str. 61.). Bardziej wrażliwa jest obsługa pracy krokowej, gdzie Z80CTC generuje przerwanie w trakcie wykonywania pierwszego rozkazu programu użytkownika. Przygotowanie procesora powinno trwać 158 taktów CLK, a Z180 wykona to zadanie w ciągu 139 taktów. Zanim CTC wygeneruje przerwanie wykona się jeszcze kilka rozkazów... Jak to zmienić nie ingerując w program monitora? Niestety jest to niemożliwe, ale spróbujmy zrobić to jak najbardziej elegancko.
 |
Czas wejścia do programu użytkownika |
 |
Czasy wykonywania instrukcji Z180. |
 |
NOP dla Z80 trwa 1 takt dłużej. |
Pierwsza nasuwa się modyfikacja stałej zliczania CTC. Możemy ją zmniejszyć o jeden, co skróci liczenie do 144 taktów ( preskaler 16 ). Jest to jeszcze zbyt dużo, bo najkrótsze rozkazy trwają zaledwie trzy takty zegara ( w Z80 cztery ), co spowoduje przeskakiwanie po dwa lub trzy rozkazy. Na szczęście Pan Gardynik również musiał dopasować liczbę taktów i użył dodatkowego rozkazu NOP, czyli dodał cztery takty. Niestety NOP w Z180 trwa tylko trzy, a nie ma miejsca na dodanie kolejnego. Potrzebujemy dodatkowych trzech lub czterech taktów... Pozostaje zamiana NOP na inny rozkaz, ale nie może on ingerować w program. Musimy wybrać rozkaz jednobajtowy, który nie zmienia stosu, nie wpisuje nic do pamięci i trwa 7 taktów CLK. Po zawężeniu zakresu poszukiwań znalazł się kandydat: ADD HL,BC. Rejestry HL i tak zaraz będą modyfikowane, więc w niczym to nie przeszkadza, a szczęśliwym zbiegiem okoliczności kod rozkazu jest równy TC0-1 czyli 9, więc możemy tę samą wartość wpisać w dwa miejsca. Teraz pozostaje sprawdzić, czy to rozwiązanie działa.
 |
Propozycja zmian programu pracy krokowej. |
 |
Drobne zmiany nie powodujące zwiększenia długości programu. |
 |
Zmiany są możliwe gdy monitor jest w RAM. |
Komentarze
Prześlij komentarz