
Obecnie mikrokontrolery posiadają wbudowane pamięci FLASH, które można programować za pomocą interfejsu ISP. Jest to zarówno szybkie, jak i wygodne rozwiązanie. Programowanie okładu odbywa się bowiem bez jego wyciągania z podstawki. Zresztą w tej chwili układów DIP jest coraz mniej, więc interfejs ten jest tym bardziej przydatny. Ponadto współczesny mikrokontroler zawiera oprócz znacznej ilości pamięci programu i RAM również masę interfejsów komunikacyjnych, timerów, przerwań zewnętrznych i innych konfigurowalnych peryferiów.
Dawniej jednak system mikroprocesorowy był znacznie bardziej złożony. Procesor sam w sobie nie wiele potrafił, konieczne było dołączenie pamięci programu i danych, układów I/O, timerów, kontrolera przerwań itd. Intel 8080 potrzebował jeszcze do pracy kontrolera systemu 8228 i układu zegara 8224. Jednak mimo to potrzebne były jeszcze dekodery adresów.
Jako pamięć programu stosowano wówczas powszechnie pamięci EPROM. Jednak praca z takimi pamięciami nie należała do zbyt przyjemnych. Każda zmiana zawartości wiązała się z wyjęciem pamięci z podstawki i kasowaniem za pomocą kasownika UV. Potem następował ponowny zapis za pomocą programatora. Kasowanie trwało zwykle ok. 15 min. Zapis dla dużych pamięci nawet kilka minut. Wyobraźmy sobie jak utrudniało to rozwój oprogramowania a w szczególności znalezienie błędów w danym kodzie. Właśnie z tego powodu powstały symulatory EPROM. Urządzenie takie dołącza się do systemu mikroprocesorowego zamiast pamięci EPROM. Kwestia symulacji związana jest z dołączeniem do danego systemu przez symulator zapisanej pamięci RAM. Jednak wymagany jest tu odpowiedni układ sterujący, który odłącza pamięć RAM od danego systemu na czas jej zapisu. Typowo realizowało się to za pomocą buforów trójstanowych i garści elementów TTL. Całość sterowana byłą poprzez port LPT. W sieci znaleźć można masę opisów układów tego rodzaju.
Ponieważ zacząłem obecnie wykonywać komputer oparty o Intel 8080 symulator taki stał się niezbędny. Postanowiłem jednak iść nieco z duchem czasu i zrealizować symulator w oparciu o jakiś mikrokontroler. Komunikację pomiędzy PC a symulatorem postanowiłem zrealizować już za pomocą RS232C. Samym mikrokontrolerem został w tym przypadku dosyć stary AT89C51 rodziny 8051. Nie posiada on interfejsu ISP, więc program rozwijałem wyciągając mikrokontroler z podstawki. Oprogramowanie dla AT89C51 powstało w asemblerze. Program wyszedł niestety trochę zbyt rozbudowany.
Poniżej znajduje się schemat symulatora.

Nie ma tu żadnych kosmicznych rozwiązań. Mikrokontroler taktowany jest nietypowym, jak na 8051 kwarcem o częstotliwości 14,31818 MHz. Pozwala to uzyskać przepływność bitową 230400 b/s w trybie 2. Prosty konwerter poziomów napięć wykonany został w oparciu o tranzystory Q1 i Q2. Port P0 został podciągnięty drabinką RN1, ponieważ port ten nie posiada wewnętrznych rezystorów podciągających. Zdecydowałem się tu zastosować bufory 74LS245 mimo, że nie wykonywałem szyn dwukierunkowych. Zwyczajnie rozkład wyprowadzeń 74LS245 bardzo ułatwił wykonanie połączeń na płytce uniwersalnej. W przypadku 74LS244 nie byłoby już tak prosto. U3 stanowi bufor szyny danych, zaś U4 i U5 bufory szyny adresowej. Ponieważ od strony mikrokontrolera U3 to wejście nie ma konieczności sterowania tego układu przez 8051. Ponieważ układ musi udawać pamięć EPROM, to konieczna jest dodatkowa logika na bramkach. Pozwala to odczytywać dane tylko wtedy, gdy sygnały OE_EPROM i CE_EPROM będą miały poziomy niskie. W innych przypadkach wyjścia U3 przejdą w stan wysokiej impedancji. W chwili odebrania stosownego polecenia przez USART mikrokontroler wystawia poziom wysoki na linii EN. Dzięki temu możliwe jest zapisywanie do pamięci 62256, lub z niej odczytywanie. Linie CE, WE i OE 62256 nie są buforowane. W chwili, gdy operacje związane z 62256 zostaną zakończone linie CE i OE mają na stałe stan niski, WE wysoki. Zatem układ pozostaje cały czas wybrany. Upraszcza to układ, ale zwiększa pobór prądu. Stan pracy układu sygnalizuje dioda LED D1. Pewną ciekawostką jest obecność pamięci EEPROM z interfejsem I2C typu 24C256. Jest to dodatkowym, nieulotny bufor danych. Z poziomu PC można zapisywać również do tej pamięci. Natomiast, po załączeniu zasilania dane z 24C256 kopiowane są do 62256. Można też wywołać taki stan również zdalnie. Interfejs I2C jest oczywiście całkowicie programowy. Sondę EPROM stanowi złącze goldpin od strony PCB, zaś z drugiej mamy dedykowane złącze pasujące w podstawkę DIP. Jak widać coś takiego było też produkowane. Zasilanie symulatora pobierane jest z podstawki EPROM. Pobór prądu wynosi ok. 220 mA. Symulator wykonałem na płytce uniwersalnej, realizując wszystkie połączenia kynarem. Oprogramowanie od strony PC zrobiłem w bardzo przyjaznym graficznym języku programowania, jakim jest LabVIEW. Wykonałem też plik EXE, więc można to uruchomić bez instalacji LabVIEW. Wystarczy zatem sam Runtime dla wersji 2015.
Napiszę też jeszcze kilka słów o komputerze, jaki aktualnie wykonuję. Jak dotąd na wielkiej płytce uniwersalnej mam:
-8080 (CPU),
-8224 (zegar),
-8228 (sterownik systemu i bufor szyny danych)
-dwie sztuki 8212 jako bufory trójstanowe dla szyny adresowej - buduję rozbudowany system w dodatku z układami TTL dołączonymi do szyny adresowej, zatem potrzebne jest dodatkowe buforowanie, celem zwiększenia obciążalności,
-kolejny 8212 jako wyjście w przestrzeni adresowej I/O - aktualnie steruje on migającą diodą i daje sygnał sterujący "przełączaniem" linii adresowych A15 i A14 - chodzi o start systemu od konkretnego adresu, docelowo będę nim przełączał też banki pamięci,
-pamięć EPROM 27C256, jednak są tylko dwa banki po 16 kB - przełączane zworką,
-dekodery adresów dla przestrzeni I/O i RAM są zrobione typowo na TTL.
Docelowo dodam:
-8255 (programowalne I/O)
-8275 (CRT)
-8257 (DMA - potrzebne też do 8275)
-8253 (Timer)
-8251 (USART)
-8279 (klawiatura)
-8259 (sterownik przerwań)
-8271 (sterownik dysku miękkiego - zamierzam podjąć próbę uruchomienia stacji dyskietek 5,25" / 3,5")
-jakieś 512 kB pamięci RAM - układy współczesne.
Aktualnie mam uruchomioną migającą diodę. Jednak im więcej układów CEMI się stosuje, tym więcej kłopotu w uruchomieniu. Nowe MCY7880, jakie mam nie chciały działać. Podobnie było z rodzimym 8228. Na 10 nowych układów 1 nie działał. W końcu na jakiejś płycie znalazłem MCY7880, który chciał działać w moim układzie. Nadmienię, że z oryginałem Intela, odpowiednikiem radzieckim, czy AMD nie było problemów. Pobór prądu jest ogromny. Tak prosty system pobiera jakieś 0,6 A ze źródła +5 V.
Odnośnie oprogramowania, to najpierw napiszę pewnie własny system typu MONITOR. Chcę się też pobawić z odczytem i zapisem na taśmę magnetofonową. Później jednak poczynię prace nad napisaniem BIOS'u dla CPM w wersji 2.2 i jego uruchomieniem. Jednak CPM będzie na stałe w EPROM, bez bootowania z dyskietki. Potem będę próbował uruchomić CPM 3.0, ponieważ obsługuje on banki pamięci.
Na koniec mojego zbyt długiego wywodu pozostaje wstawić kilka zdjęć.
Płyta z modułem CPU dla 8080, jaki opisałem wyżej:

Zbliżenie na zmontowaną część:

Zbliżenie na MCY7880, polski klon Intel 8080. Układ ten teoretycznie był produkowany w Polsce.

Moduł CPU wraz z dołączonym symulatorem pamięci EPROM:

W załączniku znajduje się archiwum z schematem w programie Kicad, kod źródłowy programu dla AT89C51 i program w LabVIEW. Ponadto znaleźć można opis protokołu komunikacyjnego, jaki wymyśliłem. Może ktoś będzie miał ochotę napisać własne oprogramowanie.
Cool? Ranking DIY