Intel 8080 kit
Intel 8080 kit
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ć.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Re: Intel 8080 kit
"Fajna zabawka", ja nigdy nie miałem dość odwagi by cofać się dalej niż do 8085, więc szacunek za to 8080.
Rzeczywiście, o programowaniu w C dla tego procesora można zapomnieć, ale jest sporo dobrego software obsługującego 8080 (np. PL/M, PL1,...). Co prawda pewną przeszkodą może być przyjęte mapowanie pamięci, ale dla chcącego...
. W sumie, mając te 64kB RAM można by pomyśleć o przełączniku wyłączającym ROM i instalacji CP/M 2.2 lub bliższym z tej epoki ISIS.
Rzeczywiście, o programowaniu w C dla tego procesora można zapomnieć, ale jest sporo dobrego software obsługującego 8080 (np. PL/M, PL1,...). Co prawda pewną przeszkodą może być przyjęte mapowanie pamięci, ale dla chcącego...
Re: Intel 8080 kit
tapy pisze:Co prawda pewną przeszkodą może być przyjęte mapowanie pamięci, ale dla chcącego....
Długo myślałem nad tym. Kiedyś robiłem podobne rzeczy na Z80, gdzie EPROM przepisywał się do ostatnich 16k pamięci i później był odłączany pozostawiając już jedynie RAM w obrębie całej przestrzeni adresowej. W tym przypadku obsługa przerwań trafiłaby nawet tych systemowych w obszar programu użytkowego i to byłaby kicha. Więc jest jak jest...
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Re: Intel 8080 kit
Nadeszła ta chwila, włączam prąd
Każda wiedza teoretyczna jest mało warta, więc czas włączyć prąd. Napięcia zasilając są wporzo, więc pełna obsada układów i POWER ON.
W pierwszej kolejności sprawdziłem działanie generatora taktującego. Jak procek nie jest właściwie napędzany, to sam z siebie nic nie zrobi, nie to jest leniwy. Przy braku inspiracji do działania buja sobie w obłokach.
W pierwszej kolejności to FI2TTL i tu się okazuje, że jest git.
W układzie jest wlutowany kwarc 20 MHz (choć na schemacie przewidywałem 18 MHz). Wiadomo, że 8224 dzieli częstotliwość przez 9, więc z owych 20 MHz wg kalkulatora powinno wyjść 2.22 MHZ i tyle zaraportował oscylek. I amplituda jest dobra: dwie kratki, czyli coś koło 4 V. Następny pomiar to samo FI2.
Kształt jest taki sam, co nie powinno dziwić, tylko amplituda jest znacząco inna. Ponad 2 działki przy 5 V na działkę daje 12 V, co jest właściwe. Kolejny sygnał zegarowy, to FI1.
Znacząco inne wypełnienie z amplitudą 12 V. Jest dobrze.
Włożyłem w podstawkę czysty EPROM (czysty zawiera same FF hex), co oznacza, że procek wykonuje instrukcję RST 7. Powinny wystąpić odczyty pamięci (bo pobranie rozkazu) i zapisy do pamięci (bo RST odkłada na stos adres powrotu) oraz nie powinno być żadnych akcji z portami. No i wyszła dziwność. Kontroler 8228 pokazuje cuda: oscylek pokazuje na wszystkich pinach żądania dostępu do pamięci i portów zero. No to prawie geniusz: pisze i czyta jednocześnie po wszystkich możliwych zasobach. Z drugiej strony sam procek rzetelnie wystawia różne adresy i na szynie danych też są jakieś przebiegi. I tak głowiąc się nad zjawiskiem... może on jest w stanie HOLD, ale wtedy nie powinien generować adresów na szynie adresowej. I tak przyszła mi do głowy niespodziewana myśl: a może on nie jest w stanie dogadać się z kontrolerem 8228.
Wertowanie literatury i wyszło szydło z worka. Własne wizje nie koniecznie pokrywają się z wizją twórców. Ustalić na sztywno żądanie HOLD na zero, oznacza, że procek nie wejdzie w trzeci stan, co przy okazji poprzez HLDA sam 8228 będzie wiedział, że nie ma trzeciego stanu.
Jest jeszcze jeden pin w 8228: BUSEN. W pierwszej wersji (powyżej: pin był w powietrzu, bo w bibliotece kicadowej był wpisany jako wyjście) nie potrzebowałem wykorzystywać tego sygnału. Rzeczywistość szybko prostuje ścieżki. Ten pin jest wejściem i oznacza, że układ 8228 aktywnie będzie sterował szynami. Prosta poprawka: podać GND na ten pin znacząco rozwiązała problem. No i wyjaśniło się dlaczego wszędzie było zero: jak wyjścia do sterowania pamięcią i portami są z trzecim stanie, przyłączone układy i bramki są typu HC i HCT, to nie ma komu wnieść „swoich 3 groszy” na te linie. Gdyby były zastosowane układy typu LS, to byłaby zagwozdkna na dłużej. Właściwe rozwiązanie to (wszystkie wcześniejsze schematy i PCB są już po korekcie):
Poprawka:
i jest dobrze: sygnał MEMR (8228, pin 24)
oraz sygnał MEMW (8228, pin 26).
Na pozostałych: IOR oraz IOW jest spokój (stały wysoki poziom). Teraz jest jak być powinno.
Obejrzałem sobie jeszcze sygnały zegarowe w 16C450. Częstotliwość 1.84 MHz jest zgodna z oczekiwaniem.
Teraz można poczynić jakieś postępy softowe.
Każda wiedza teoretyczna jest mało warta, więc czas włączyć prąd. Napięcia zasilając są wporzo, więc pełna obsada układów i POWER ON.
W pierwszej kolejności sprawdziłem działanie generatora taktującego. Jak procek nie jest właściwie napędzany, to sam z siebie nic nie zrobi, nie to jest leniwy. Przy braku inspiracji do działania buja sobie w obłokach.
W pierwszej kolejności to FI2TTL i tu się okazuje, że jest git.
W układzie jest wlutowany kwarc 20 MHz (choć na schemacie przewidywałem 18 MHz). Wiadomo, że 8224 dzieli częstotliwość przez 9, więc z owych 20 MHz wg kalkulatora powinno wyjść 2.22 MHZ i tyle zaraportował oscylek. I amplituda jest dobra: dwie kratki, czyli coś koło 4 V. Następny pomiar to samo FI2.
Kształt jest taki sam, co nie powinno dziwić, tylko amplituda jest znacząco inna. Ponad 2 działki przy 5 V na działkę daje 12 V, co jest właściwe. Kolejny sygnał zegarowy, to FI1.
Znacząco inne wypełnienie z amplitudą 12 V. Jest dobrze.
Włożyłem w podstawkę czysty EPROM (czysty zawiera same FF hex), co oznacza, że procek wykonuje instrukcję RST 7. Powinny wystąpić odczyty pamięci (bo pobranie rozkazu) i zapisy do pamięci (bo RST odkłada na stos adres powrotu) oraz nie powinno być żadnych akcji z portami. No i wyszła dziwność. Kontroler 8228 pokazuje cuda: oscylek pokazuje na wszystkich pinach żądania dostępu do pamięci i portów zero. No to prawie geniusz: pisze i czyta jednocześnie po wszystkich możliwych zasobach. Z drugiej strony sam procek rzetelnie wystawia różne adresy i na szynie danych też są jakieś przebiegi. I tak głowiąc się nad zjawiskiem... może on jest w stanie HOLD, ale wtedy nie powinien generować adresów na szynie adresowej. I tak przyszła mi do głowy niespodziewana myśl: a może on nie jest w stanie dogadać się z kontrolerem 8228.
Wertowanie literatury i wyszło szydło z worka. Własne wizje nie koniecznie pokrywają się z wizją twórców. Ustalić na sztywno żądanie HOLD na zero, oznacza, że procek nie wejdzie w trzeci stan, co przy okazji poprzez HLDA sam 8228 będzie wiedział, że nie ma trzeciego stanu.
Jest jeszcze jeden pin w 8228: BUSEN. W pierwszej wersji (powyżej: pin był w powietrzu, bo w bibliotece kicadowej był wpisany jako wyjście) nie potrzebowałem wykorzystywać tego sygnału. Rzeczywistość szybko prostuje ścieżki. Ten pin jest wejściem i oznacza, że układ 8228 aktywnie będzie sterował szynami. Prosta poprawka: podać GND na ten pin znacząco rozwiązała problem. No i wyjaśniło się dlaczego wszędzie było zero: jak wyjścia do sterowania pamięcią i portami są z trzecim stanie, przyłączone układy i bramki są typu HC i HCT, to nie ma komu wnieść „swoich 3 groszy” na te linie. Gdyby były zastosowane układy typu LS, to byłaby zagwozdkna na dłużej. Właściwe rozwiązanie to (wszystkie wcześniejsze schematy i PCB są już po korekcie):
Poprawka:
i jest dobrze: sygnał MEMR (8228, pin 24)
oraz sygnał MEMW (8228, pin 26).
Na pozostałych: IOR oraz IOW jest spokój (stały wysoki poziom). Teraz jest jak być powinno.
Obejrzałem sobie jeszcze sygnały zegarowe w 16C450. Częstotliwość 1.84 MHz jest zgodna z oczekiwaniem.
Teraz można poczynić jakieś postępy softowe.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Re: Intel 8080 kit
Jak zawsze super inżynierska robota, gratulacje.
PCB zlecasz w Chinach, czy w kraju, niebawem będę zlecał wykonanie płytki, ale jako prototyp potrzebuję tylko jednej sztuki do testów, a nie min. 5 i szukam jakiejś "płytkarni" która za rozsądne pieniądze mi to wykona.
PCB zlecasz w Chinach, czy w kraju, niebawem będę zlecał wykonanie płytki, ale jako prototyp potrzebuję tylko jednej sztuki do testów, a nie min. 5 i szukam jakiejś "płytkarni" która za rozsądne pieniądze mi to wykona.
Re: Intel 8080 kit
Mnie najbardziej urzekła ta dokładność zaprojektowania PCB. Teraz widzę jak np. ładnie i dobrze zaprojektować matrycę. Niby gdzieś tam człowiek o tym czytał, uczył się, ale nie ma to jak zobaczyć dobry przykład na własne oczy (tzn. w/w zdjęcia).
Serio, respekt za podjęcie się tak karkołomnego zadania i pomyślne uruchomienie!
Pozdrawiam! J23
Serio, respekt za podjęcie się tak karkołomnego zadania i pomyślne uruchomienie!
Pozdrawiam! J23
Internet łączy ludzi, którzy dzielą się swoimi zainteresowaniami, pomysłami i potrzebami, bez względu na geograficzne (przeciwności).
BOB TAYLOR, PARC
BOB TAYLOR, PARC
Re: Intel 8080 kit
phill2k pisze:PCB zlecasz w Chinach, czy w kraju,
W pewnym sensie jest to kwestia potrzeb. Potrzebowałem jednej sztuki, więc ten jest krajowy. W chinach minimalne zamówienie wynosi 5 szt. W szufladzie mam jeszcze jeden zestaw prockowy 8080+8224+8228, więc sam rozumiesz. Co miałbym zrobić z pozostałych PCB.
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Re: Intel 8080 kit
j23 pisze:Mnie najbardziej urzekła ta dokładność zaprojektowania PCB. Teraz widzę jak np. ładnie i dobrze zaprojektować matrycę. Niby gdzieś tam człowiek o tym czytał, uczył się, ale nie ma to jak zobaczyć dobry przykład na własne oczy (tzn. w/w zdjęcia).
Serio, respekt za podjęcie się tak karkołomnego zadania i pomyślne uruchomienie!
Pozdrawiam! J23
To przychodzi z wiekiem i liczbą popełnionych konstrukcji
Nie ma tak, że wszystko wychodzi bez błędów, ale każdy popełniony jest jakąś lekcją na przyszłość.
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Re: Intel 8080 kit
Problemy dają się naprawić
Jeden z elementów systemu zabłądził i trafił nie tam gdzie jego miejsce. Było:
W tych uwarunkowaniach żadną miarą nie można się porozumieć. Po wykryciu zjawiska wrócił tam, gdzie jego miejsce.
Niestety to wygenerowało trochę problemów, jednak skalpel i kynar są skutecznym środkiem naprawczym.
Jeden z elementów systemu zabłądził i trafił nie tam gdzie jego miejsce. Było:
W tych uwarunkowaniach żadną miarą nie można się porozumieć. Po wykryciu zjawiska wrócił tam, gdzie jego miejsce.
Niestety to wygenerowało trochę problemów, jednak skalpel i kynar są skutecznym środkiem naprawczym.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Re: Intel 8080 kit
Najpierw powoli jak żółw ociężale,
Ruszyła maszyna po szynach ospale,
Nie bez kłopotów, ale ruszyła maszyna. Zasilanie włączone na dłużej potrafiło całkiem mocno nagrzać mi cewkę indukcyjną w stabilizatorze +5V. Okazało się, że całość bierze troszkę ponad pół ampera prądu. Bidulka ceweczka jest na jakieś 250 .. 300 mA. Nie pomyślałem, że procek może być aż tak piecykowaty, własne wyobrażenia mogą okazać się nietrafione. W dotyku układ 8080 jest ciepły, ale nie gorący, podobnie z kontrolerem systemu. 3/4 prądu to bierze sam 8080 + 8224 + 8228 (około 480 mA), reszta to już niewiele: porty 8255 to CMOS, 16450 to CMOS i TTL z rodziny HCT. Kontroler przerwań z pewnością jest bipolarny. Na razie rozłączyłem zworkę od zasilania na +5V i podałem za zworkę właściwe napiątko z mocnego zasilacza. Reszta napięć jest produkowana z tych +5V. Coś później trzeba będzie wymyślić na tą okoliczność.
Napisałem prosty program:
Im prostszy tym lepiej, by niepotrzebnie nie walczyć z wiatrakami. Program nawet zadziałał. Ponieważ operował pamięcią oraz portami, można uznać, że jest OK.
Działa tak:
Ruszyła maszyna po szynach ospale,
Nie bez kłopotów, ale ruszyła maszyna. Zasilanie włączone na dłużej potrafiło całkiem mocno nagrzać mi cewkę indukcyjną w stabilizatorze +5V. Okazało się, że całość bierze troszkę ponad pół ampera prądu. Bidulka ceweczka jest na jakieś 250 .. 300 mA. Nie pomyślałem, że procek może być aż tak piecykowaty, własne wyobrażenia mogą okazać się nietrafione. W dotyku układ 8080 jest ciepły, ale nie gorący, podobnie z kontrolerem systemu. 3/4 prądu to bierze sam 8080 + 8224 + 8228 (około 480 mA), reszta to już niewiele: porty 8255 to CMOS, 16450 to CMOS i TTL z rodziny HCT. Kontroler przerwań z pewnością jest bipolarny. Na razie rozłączyłem zworkę od zasilania na +5V i podałem za zworkę właściwe napiątko z mocnego zasilacza. Reszta napięć jest produkowana z tych +5V. Coś później trzeba będzie wymyślić na tą okoliczność.
Napisałem prosty program:
Kod: Zaznacz cały
KBDRowOutput .equ 080h
KBDColumnInput .equ 088h
SerialPort8250 .equ 090h
ParallelPort8255 .equ 098h
Timer8253 .equ 0A0h
LEDRegister .equ 0A8h
LCDDisplay .equ 0B0h
Controller8214 .equ 0B8h
mvi a , 0
main_1
push psw
out LEDRegister
lxi b , 01000h
main_2
dcx b
mov a , b
ora c
jnz main_2
pop psw
inr a
jmp main_1Im prostszy tym lepiej, by niepotrzebnie nie walczyć z wiatrakami. Program nawet zadziałał. Ponieważ operował pamięcią oraz portami, można uznać, że jest OK.
Działa tak:
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Re: Intel 8080 kit
Test szarych komórek
Napisałem program testu pamięci RAM, całych 48k z przestrzeni od 16k do 64k (tam gdzie jest RAM). Oczywistym jest w tej sytuacji występuje brak zapisów do RAM danych istotnych z punktu widzenia algorytmu. Wejście do funkcji testowania jest poprzez skok jak również wyjście jest przez skok. Przy wykryciu problemu z RAM program w pętli robi demko na LED’ach. By było to widoczne, to konieczne jest odpowiednie opóźnienie. Ze względu, że występuje w dwóch miejscach, to ma symulowane call jako instrukcja jmp z symulowanym ret jako instrukcja pchl. Sam test to w pierwszej fazie zapis do każdej komórki RAM odpowiednio wygenerowanej liczby i następnie w drugiej fazie sprawdzenie, czy w komórce jest to co tam powinno być.
Procek stanął na wysokości zadania i przeszedł test pamięci. Sztucznie wygenerowany błąd pamięci jako wpisanie gdziekolwiek w RAM liczby, która nie trafi się z algorytmu generowania danych do RAM wykonana pomiędzy końcem pierwszej fazy i początkiem drugiej fazy został rozpoznany i LED’owe demko zadziałało.
Kit I8080 jest sprzętowo zweryfikowany i można teraz zająć się stworzeniem całej reszty.
Napisałem program testu pamięci RAM, całych 48k z przestrzeni od 16k do 64k (tam gdzie jest RAM). Oczywistym jest w tej sytuacji występuje brak zapisów do RAM danych istotnych z punktu widzenia algorytmu. Wejście do funkcji testowania jest poprzez skok jak również wyjście jest przez skok. Przy wykryciu problemu z RAM program w pętli robi demko na LED’ach. By było to widoczne, to konieczne jest odpowiednie opóźnienie. Ze względu, że występuje w dwóch miejscach, to ma symulowane call jako instrukcja jmp z symulowanym ret jako instrukcja pchl. Sam test to w pierwszej fazie zapis do każdej komórki RAM odpowiednio wygenerowanej liczby i następnie w drugiej fazie sprawdzenie, czy w komórce jest to co tam powinno być.
Kod: Zaznacz cały
DelayNoReturn ;procedure DelayNoReturn ( Interwal[BC] : word ;
; Return[HL] : word ) ;
;begin (* DelayNoReturn *)
DelNoR_0 ;
dcx b ;
mov a , b ;
ora c ;
jnz DelNoR_0 ;
pchl ;end (* DelayNoReturn *) ;
;*******************************************
RAMTestStartValue .equ 1 ;
RAMTestStopValue .equ 14 ;
RAMTestPhase .equ 0DBh ;
RamTest ;procedure RamTest ;
;begin (* RamTest *)
lxi sp , Stack_top ;
mvi a , RAMTestPhase ; LEDRegister := RAMTestPhase ;
out LEDRegister ;
lxi h , 8000h ;
mvi c , RAMTestStartValue ;
RamTst_2 ;
mov b , c ;
mov a , b ;
rlc ;
rlc ;
rlc ;
rlc ;
ani 0F0h ;
ora b ;
mov m , a ;
inr c ;
mov a , c ;
cpi RAMTestStopValue ;
jnz RamTst_1 ;
mvi c , RAMTestStartValue ;
RamTst_1 ;
inx h ;
mov a , h ;
ora l ;
jnz RamTst_2 ;
mvi a , RAMTestPhase ^ 0FFh ; LEDRegister := RAMTestPhase ^ 0FFh ;
out LEDRegister ;
lxi h , 8000h ;
mvi c , RAMTestStartValue ;
RamTst_5 ;
mov b , c ;
mov a , b ;
rlc ;
rlc ;
rlc ;
rlc ;
ani 0F0h ;
ora b ;
cmp m ;
jnz RamTst_3 ;
inr c ;
mov a , c ;
cpi RAMTestStopValue ;
jnz RamTst_4 ;
mvi c , RAMTestStartValue ;
RamTst_4 ;
inx h ;
mov a , h ;
ora l ;
jnz RamTst_5 ;
mvi a , 0 ; LEDRegister := 0 ;
out LEDRegister ;
jmp Main ; Main ;
RamTst_3 ;
mvi a , 0AAh ; LEDRegister := 0AAh ;
out LEDRegister ;
lxi b , 2000h ;
lxi h , RamTst_6 ;
jmp DelayNoReturn ; DelayNoReturn ( 2000h , RamTst_6 ) ;
RamTst_6 ;
mvi a , 055h ; LEDRegister := 55h ;
out LEDRegister ;
lxi b , 2000h ;
lxi h , RamTst_7 ;
jmp DelayNoReturn ; DelayNoReturn ( 2000h , RamTst_7 ) ;
RamTst_7 ;
jmp RamTst_3 ;end (* RamTest *) ;Procek stanął na wysokości zadania i przeszedł test pamięci. Sztucznie wygenerowany błąd pamięci jako wpisanie gdziekolwiek w RAM liczby, która nie trafi się z algorytmu generowania danych do RAM wykonana pomiędzy końcem pierwszej fazy i początkiem drugiej fazy został rozpoznany i LED’owe demko zadziałało.
Kit I8080 jest sprzętowo zweryfikowany i można teraz zająć się stworzeniem całej reszty.
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Re: Intel 8080 kit
Bardzo fajnie się to prezentuje. Osobiście czekam na jakiś program wykorzystujący jakiś kontroler zewnętrznego wyświetlacza (czyli taki kontroler / karta graficzna), bo tu może być ciekawie, tylko nie jestem aż tak w temacie czy to da się. 
Programy w asemblerze to miód dla mojego oka.
Trzymam kciuki i kibicuję dalszych postępów!
Pozdrawiam! J23
Programy w asemblerze to miód dla mojego oka.
Trzymam kciuki i kibicuję dalszych postępów!
Pozdrawiam! J23
Internet łączy ludzi, którzy dzielą się swoimi zainteresowaniami, pomysłami i potrzebami, bez względu na geograficzne (przeciwności).
BOB TAYLOR, PARC
BOB TAYLOR, PARC
Re: Intel 8080 kit
No to wymaga jeszcze trochę pracy i czasu.
Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość


