Intel 8080 kit
: poniedziałek 16 lut 2026, 01:31
Intel 8080 kit
Ostatnio naszła mnie ochota na konstrukcję bazująca na pierwszym mikroprocesorze, który zrobił sporą rewolucję w elektronice, mianowicie Intel 8080. Nie cieszył się on u mnie dużą popularnością z racji dosyć istotnych przywar: zasilanie trzema napięciami. Z drugiej strony w szufladzie walają mi się dwa zestawy tego cuda (sam procek 8080, generator sygnału zegarowego 8224 oraz kontroler systemu 8228). Zamiast zasilić stertę śmieci to może coś z niego zrobić.
I tak się zaczęło. Moja koncepcja jest taka, żeby dać możliwość eksperymentowania w oparciu o ten zestaw. Dosyć istotnym założeniem jest by konstrukcja w miarę możliwości była na poziomie jego czasów świetności. Oczywiście nie może to dotyczyć pamięci, bo jakoś nie mam ochoty poświęcić hektara laminatu na zbudowanie pamięci bazując na 2114 czy choćby na 6116 oraz EPROM 2716, poza tym aż takiego worka układów nie mam, więc stanęło na wykorzystaniu bardziej współczesnych układów. Niezbędnym wyposażeniem jest UART. Jakoś za 8251 nie przepadałem, więc alternatywą stał się układ 8250. Finalnie zdecydowałem się 16C450, bo z 8250 to zostało mi 3 układy z odzysku (więc nie ma gwarancji, że są sprawne). W dodatku owych 16C450 w szufladzie wala się ponad 50 sztuk, więc na początek idzie trochę ulepszona wersja 8250. Ponieważ oba układy (8250 oraz 16C450) są wystarczająco kompatybilne, później będzie można sprawdzić jakość owych 8250. W skład zestawu wchodzi jeszcze moduł LCD (zastosuję 4-wierszowy) i jakaś klawiaturka. By mieć poczucie upływu czasu w kicie jest 8253, jest potrzebny, to w planie jest poganianie klawiatury w przerwaniach od czasu. Do obsługi przerwań zastosowałem wręcz starożytne rozwiązania oparte na 8214. Dla użytkownika dodałem port 8255, dla którego nie przewiduję wykorzystania w sensie systemowym.
Oprócz założeń sprzętowych chodzi mi po głowie by w EPROM zawrzeć jakieś proste API dla programów użytkownika. Bazowałoby to przykładowo na instrukcji RST 7, gdzie w rejestrach procka podane byłyby odpowiednie parametry a RTS 7 byłoby takim ekstrakodem do systemu. Kwestia zestawu funkcji nie jest jeszcze zamknięte, ale w pewnością będzie tam odczyt klawiatury oraz pisanie po LCD-ku.
Wymyśliłem jeszcze mechanizm, by istniała możliwość puszczać program użytkownika krokowo. W kwestii softu jest sporo do zrobienia.
Schemat
Schemat blokowy to:
W obrębie jednostki centralnej jest podstawowy standardowy wariant (3 układy: 8080, 8224 i 8228). Tu nie za bardzo jest pole manewru, bo te układy muszą być połączone jak Intel sobie zażyczył. Co prawda kilka szczegółów można sobie zignorować. I tak całość nie ma możliwości dodawania waitstatów (pamięci są dosyć współczesne i się wyrobią), porty też. Drugie to nie przewiduję wykorzystania DMA, więc logika HOLD jest banalnie prosta (uziemiona).
Do obsługi przerwań jest zalecana przez Intel konstrukcja z użyciem 8214 jako kontrolera przerwań oraz 8212 jako „składacz” rozkazu do obsługi przerwania. W tej konstrukcji wykorzystywane są warianty instrukcji RST n. Część numerków jest wyjęta, bo przykładowo RST 7 jest przeznaczone na ekstrakody, więc nie da się takiego wygenerować sprzętowo. Inne „zaślepione” są przewidywane do „niecnych” celów, ale to później. Udostępnione są dwa przerwania użytkownikowi (INT 1 oraz INT 2 → aktywne zgłoszenie zerem). Również jest przyblokowane RST 0, bo ono jest tożsame z resetem. Dodatkowo jest przerywadło od czasu (8253) i generator chip selectów do portów. Część jest produkowana klasycznie (ze stanem aktywnym zerem) ale niektóre wymagają jedynki: taki jest LCD i rejestry 47HCT574, które mają wpis zboczem narastającym, więc niektóre przechodzą przez negator.
Kolejna część to pamięci. Wykorzystana jest cała przestrzeń adresowa procka. Sam EPROM jest lokowany w pierwszych 16 kilo pamięci. Dalej jest RAM (dwa układy po 32 kB), z czego jeden jest wykorzystany w połowie. Koncepcyjnie to będzie, że system (EPROM) będzie korzystał z RAM z przedziału 16k .. 32k. Zaczynając od 32 k do końca będzie przestrzeń dla użytkownika (to oznacza, że użytkowy program musi mieć ORG 32k, bo zakładam, że programy będą pisane w ASM (kompilera C na tego procka to chyba nie ma).
Dalej są peryferale „optyczne”: moduł LCD wpięty jako port o dwóch komórkach (dane/sterowanie). Możliwy jest zapis jak i odczyt, więc nie powinno być większych problemów z jego obsługą (nie trzeba będzie odmierzać dziwnych interwałów czasu by LCD-ek nadążał się z robotą). Jest również rejestr 8-bitowy do sterowania LED-ami.
Kolejne elementy to port 8255 (dla użytkownika) oraz szeregowy 16C450 do ładowania kodu. Ten ma w sobie generator prędkości transmisji, więc parametry transmisji szeregowej do komputera (z kompilatorem asm) jest kwestią otwartą.
Kolejnym niezbędnym elementem jest obsługa klawiatury w układzie matrycowym. Jest tu rejestr do zapisu numeru rzędu i łącznik 3-stanowy do odczytu kolumn. Całość pogina w obsłudze przerwań.
Zasilanie systemu to zasilacz dający +12V wpinany do powerjack’a. Jest tu popularny stabilizator impulsowy, który z czegokolwiek robi +5V. Z tych +5V kolejny stabilizator impulsowy robi +12V (nie musi być przesadnie mocny). Jak wiadomo, procek wymaga jeszcze -5V. To napięcie uzyskane jest z układu ICL660. Wydajność prądowa nie musi być jakaś kosmiczna, zasila jedynie samego procka, który nie bierze dużo prądu (więc jest anemik ICL660).
W czasie montażu mogą się zdarzyć jakieś errory z lutami, więc wyjście każdego stabilizatora ma odcięcie jumperkiem (lub inną zworką) od całej reszty. Ponoć brak -5V procek bardzo źle znosi. Można co prawda nie włożyć układów w podstawki by uruchomić wszystkie stabilizatory napięcia, ale jak będą wlutowane to może stworzyć się problem. Tak, więc robimy zworki jak wszystkie napiątka są dobre.
No i została matryca klawiaturowa. Uznałem, że 24 klawiszy powinno wystarczyć (są zorganizowane jako 4 x 6). Określiłem sobie również wstępne określenie funkcji tych klawiszy: 16 do cyfr szesnastkowych oraz 8 do poleceń (wydaje mi się, że da się z kontekstu wywnioskować czy to jest przycisk funkcyjny czy przykładowo Enter, gdyż kilka ma podwójne znaczenie).
PCB
Takiej konstrukcji raczej nie da się zrobić na pająka lub zdrutować uniwersałkę, więc zaprojektowałem PCB. Wszystkie elementy są na stronie TOP
z wyjątkiem jednego złącza do klawiatury (od spodu płytki matrycy klawiatury).
Przyszła płytka PCB no i poszła w ruch lutownica.
Nawet nie zrobiłem wielu błędów, miałem tylko trochę problemów z -5V (robiło mi się -2,2 V), ale po wymianie kondów jest wszystko OK. Sam procek jest nawet dosyć piecykowaty, no ale nie ma się czemu dziwić.