Komputer 8-bitowy
Moderatorzy: gsmok, tszczesn, Romekd, Einherjer, OTLamp
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Komputer 8-bitowy
Cześć,
postanowiłem zbudować komputer bazujący na prozesorze Z80. Po skonstruowaniu naprędce działającego prototypu składającego się z procesora, EPROMu 27c256 i kilku diod świecących przystąpiłem do budowy bardziej perspektywicznej i modułowej konstrukcji, która pozwoliłaby łatwo testować rozmaite urządzenia peryferyjne. Idea była prosta: płyta główna na której jest sam procesor, szyna składająca się z wszystkich czterdziestu pinów procesora i wtykane karty z ROMem, RAMem, zegarem, urządzeniami wejścia-wyjścia. W rzeczywistości, płytki mają 10cm szerokości, a że cal ma nieco więcej niż 2.5cm, magistrala mieści jedynie 39 linii, zamist planowanych 40stu. Pominąłem linię REFRESH, jako że nie mam zamiaru stosować pamięci dynamicznej Mapa pamięci niesłychanie prosta: dolne 32KB to ROM na układzie 27c256, górne 32KB to RAM na 62256. Stąd dekodowanie adresów można zrealizować obserwując tylko stan A15 na procesorze.
Płytka ROMu: i RAMu: Zegar, póki co, do celów rozwojowych jest realizowany jako oscylator relaksacyjny na 74hct14, jest też opcja ręcznego sterowania zegarem za pomocą przycisku (jedno wciśnięcie - jeden takt zegara). Docelowo będzie oscylator kwarcowy na kilka MHz. Na płytce jest też przycisk resetu procesora: Ostatnim, póki co elementem komputera jest płytka diagnostyczna pokazująca stan magistrali danych D0-D7 w momencie ostatniej operacji zapisu, a także linii MRQ, IORQ, RD i WR, oraz czterech najmłodszych linii adresowych, które pozwalają stwierdzić czy procesor pobiera rozkazy z coraz wyższych komórek pamięci oraz wykonuje skoki. Wartość z magistrali danych jest zatrzaskiwana w rejestrze 74hct573, a stan pozostałych linii jest wizualizowany w vzasie rzeczywistym za pośrednictwem bufora 74hct541. Kartę tę można wykorzystać jako prymitywne urządzenie wejścia-wyjścia, brak w niej jednak jakiegokolwiek dekodowania adresu, pokazuje więc ona wszystkie operacje zapisu, włącznie z odkładaniem na stos adresów powrotnych przy wywoływaniu funkcji, jak i rozkazów OUT i LD: Obecnie, działanie komputera polega na tym, że "wypisuje" on na diody świecące tekst "Hello world" w binarnym kodzie ASCII. "Hello" i "world" są wypisywane osobnymi wywołaniami funkcji, a to w celu zweryfikowania, że stos, a tym samym RAM, działają poprawnie.
W następnej kolejności planuję wyświetlacz LCD na układzie HD77840, klawiaturę alfanumeryczną zbudowaną od zera na układach serii 74hctXXX (mam ją już zasymulowaną w Logisim Evolution) oraz zegar na oscylatorze kwarcowym. W dalszej perspektywie będzie zrobiony interfejs RS232 na układzie DART, interfejs równoległy na układzie PIO, pamięć masowa (być może na jakimś NVRAM lub pamięci flash) i karta dźwiękowa na YM2413.
Nie mam póki co żadnych schematów, byłbym wdzięczny za zasugerowanie jakiegoś darmowego programu, którym można tworzyć schematy układów cyfrowych.
postanowiłem zbudować komputer bazujący na prozesorze Z80. Po skonstruowaniu naprędce działającego prototypu składającego się z procesora, EPROMu 27c256 i kilku diod świecących przystąpiłem do budowy bardziej perspektywicznej i modułowej konstrukcji, która pozwoliłaby łatwo testować rozmaite urządzenia peryferyjne. Idea była prosta: płyta główna na której jest sam procesor, szyna składająca się z wszystkich czterdziestu pinów procesora i wtykane karty z ROMem, RAMem, zegarem, urządzeniami wejścia-wyjścia. W rzeczywistości, płytki mają 10cm szerokości, a że cal ma nieco więcej niż 2.5cm, magistrala mieści jedynie 39 linii, zamist planowanych 40stu. Pominąłem linię REFRESH, jako że nie mam zamiaru stosować pamięci dynamicznej Mapa pamięci niesłychanie prosta: dolne 32KB to ROM na układzie 27c256, górne 32KB to RAM na 62256. Stąd dekodowanie adresów można zrealizować obserwując tylko stan A15 na procesorze.
Płytka ROMu: i RAMu: Zegar, póki co, do celów rozwojowych jest realizowany jako oscylator relaksacyjny na 74hct14, jest też opcja ręcznego sterowania zegarem za pomocą przycisku (jedno wciśnięcie - jeden takt zegara). Docelowo będzie oscylator kwarcowy na kilka MHz. Na płytce jest też przycisk resetu procesora: Ostatnim, póki co elementem komputera jest płytka diagnostyczna pokazująca stan magistrali danych D0-D7 w momencie ostatniej operacji zapisu, a także linii MRQ, IORQ, RD i WR, oraz czterech najmłodszych linii adresowych, które pozwalają stwierdzić czy procesor pobiera rozkazy z coraz wyższych komórek pamięci oraz wykonuje skoki. Wartość z magistrali danych jest zatrzaskiwana w rejestrze 74hct573, a stan pozostałych linii jest wizualizowany w vzasie rzeczywistym za pośrednictwem bufora 74hct541. Kartę tę można wykorzystać jako prymitywne urządzenie wejścia-wyjścia, brak w niej jednak jakiegokolwiek dekodowania adresu, pokazuje więc ona wszystkie operacje zapisu, włącznie z odkładaniem na stos adresów powrotnych przy wywoływaniu funkcji, jak i rozkazów OUT i LD: Obecnie, działanie komputera polega na tym, że "wypisuje" on na diody świecące tekst "Hello world" w binarnym kodzie ASCII. "Hello" i "world" są wypisywane osobnymi wywołaniami funkcji, a to w celu zweryfikowania, że stos, a tym samym RAM, działają poprawnie.
W następnej kolejności planuję wyświetlacz LCD na układzie HD77840, klawiaturę alfanumeryczną zbudowaną od zera na układach serii 74hctXXX (mam ją już zasymulowaną w Logisim Evolution) oraz zegar na oscylatorze kwarcowym. W dalszej perspektywie będzie zrobiony interfejs RS232 na układzie DART, interfejs równoległy na układzie PIO, pamięć masowa (być może na jakimś NVRAM lub pamięci flash) i karta dźwiękowa na YM2413.
Nie mam póki co żadnych schematów, byłbym wdzięczny za zasugerowanie jakiegoś darmowego programu, którym można tworzyć schematy układów cyfrowych.
-
- 1875...2499 postów
- Posty: 2072
- Rejestracja: pn, 10 sierpnia 2009, 17:47
- Lokalizacja: Gdańsk
Re: Komputer 8-bitowy
Kartę dźwiękową zrobiłbym na YM3812 ( da lepszy efekt niż YM2413 gdyż 2413 jest oszczędnościową wersją 3812 pozbawioną części rejestórw) , a skoro 3812 działał z C64 to zadziała i z procesorem Z80. Schemat wrzucę po aktualizacji forum bo nie wiadomo czy forum nie będzie przeniesione tymczasowo gdzie indziej .
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Brałem pod uwagę YM3812, ale drugim imieniem tego projektu jest "prostota".
- Jado
- 1250...1874 posty
- Posty: 1867
- Rejestracja: pn, 15 maja 2006, 11:06
- Lokalizacja: Warszawa
- Kontakt:
Re: Komputer 8-bitowy
Witam,jethrotull pisze: ↑pt, 17 września 2021, 19:48 Nie mam póki co żadnych schematów, byłbym wdzięczny za zasugerowanie jakiegoś darmowego programu, którym można tworzyć schematy układów cyfrowych.
Proponuję użycie KiCad'a jako programu do rysowania schematów i projektowania płytek PCB.
Na co dzień doskonale się sprawdza w firmie.
https://www.kicad.org/
Ps. Twoje układy przypominają mi moją starą konstrukcję na Z80, którą kiedyś tu prezentowałem jako ciekawostkę

Pozdrawiam
Jado.
"Kto chce szuka sposobu, kto nie chce - szuka powodu"
Jado.
"Kto chce szuka sposobu, kto nie chce - szuka powodu"
- Tomasz Gumny
- 1875...2499 postów
- Posty: 2288
- Rejestracja: pn, 1 stycznia 2007, 23:18
- Lokalizacja: Trzcianka/Poznań
- Kontakt:
Re: Komputer 8-bitowy
Głowy nie dam, ale coś mi chodzi po głowie, że Z80 wykonane w technologii NMOS miały podawaną minimalną częstotliwość taktowania, bo wewnętrzne rejestry nie były statyczne -sprawdzę. Natomiast na pewno warto mieć przycisk do NMI, bo to pozwala zrobić prace krokową.jethrotull pisze: ↑pt, 17 września 2021, 19:48[...] jest też opcja ręcznego sterowania zegarem za pomocą przycisku (jedno wciśnięcie - jeden takt zegara).
Tomek
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Tomasz, mój obecny zegar ma częstotliwość ok 1Hz i procesor działa bez problemu, co wskazywałoby że jest w pełni statyczny.
Re: Komputer 8-bitowy
Dzień dobry.
Nie wdając się tutaj w szczegóły budowy na poziomie krzemu - chociaż cała struktura procesora w wersji NMOS jest też "statyczna", w dokumentacji faktycznie jest ograniczenie na maksymalny okres sygnału taktującego (np. czas trwania stanu wysokiego maks. 200 μs).
Oczywiście we wszystkich przypadkach możliwe jest zatrzymywanie procesora, jak i jego praca krokowa - jak się to poprawnie zrobi. Nie trzeba do tego przerwania NMI.
A.
Bardzo dobrze Pan pamięta. Natomiast:Tomasz Gumny pisze: ↑sob, 18 września 2021, 17:00 Głowy nie dam, ale coś mi chodzi po głowie, że Z80 wykonane w technologii NMOS miały podawaną minimalną częstotliwość taktowania,
Generalnie bank rejestrów jest w obu wersjach (CMOS/NMOS) "statyczny" (z dokładnością/możliwością do wykonania inwertera w danej technologii...).Tomasz Gumny pisze: ↑sob, 18 września 2021, 17:00 bo wewnętrzne rejestry nie były statyczne -sprawdzę. Natomiast na pewno warto mieć przycisk do NMI, bo to pozwala zrobić prace krokową.
Nie wdając się tutaj w szczegóły budowy na poziomie krzemu - chociaż cała struktura procesora w wersji NMOS jest też "statyczna", w dokumentacji faktycznie jest ograniczenie na maksymalny okres sygnału taktującego (np. czas trwania stanu wysokiego maks. 200 μs).
Oczywiście we wszystkich przypadkach możliwe jest zatrzymywanie procesora, jak i jego praca krokowa - jak się to poprawnie zrobi. Nie trzeba do tego przerwania NMI.
A.
- tszczesn
- moderator
- Posty: 11124
- Rejestracja: wt, 12 sierpnia 2003, 09:14
- Lokalizacja: Otwock
- Kontakt:
Re: Komputer 8-bitowy
To skąd to wymaganie na maksymalny czas trwania?anodeon pisze: ↑ndz, 19 września 2021, 10:25 Generalnie bank rejestrów jest w obu wersjach (CMOS/NMOS) "statyczny" (z dokładnością/możliwością do wykonania inwertera w danej technologii...).
Nie wdając się tutaj w szczegóły budowy na poziomie krzemu - chociaż cała struktura procesora w wersji NMOS jest też "statyczna", w dokumentacji faktycznie jest ograniczenie na maksymalny okres sygnału taktującego (np. czas trwania stanu wysokiego maks. 200 μs).
Re: Komputer 8-bitowy
Brak możliwości edycji robi swoje.
Uściślę: informacja o statycznej konstrukcji pochodzi z dokumentacji procesora µPD780C firmy NEC. To jest NMOSowy klon Z80 i ma pewne różnice w stosunku do oryginału - można go nawet "wykryć" programowo (swoją drogą: można również wykryć wersje CMOS/NMOS).
Natomiast moja wiedza co do "statyczności" dotyczy tylko banku rejestrów ogólnego przeznaczenia.
Możliwe, że we wczesnych wersjach NMOS nie wszystko jednak było statyczne oraz stosowano obciążenia z bootstrapem (więc i pojemnością) aby zapewnić sensowne parametry przełączania linii sygnałowych? Przecież struktury tych układów ewoluowały na przestrzeni lat, rozwoju technologii (różnych producentów...).
Uściślę: informacja o statycznej konstrukcji pochodzi z dokumentacji procesora µPD780C firmy NEC. To jest NMOSowy klon Z80 i ma pewne różnice w stosunku do oryginału - można go nawet "wykryć" programowo (swoją drogą: można również wykryć wersje CMOS/NMOS).
Natomiast moja wiedza co do "statyczności" dotyczy tylko banku rejestrów ogólnego przeznaczenia.
Możliwe, że we wczesnych wersjach NMOS nie wszystko jednak było statyczne oraz stosowano obciążenia z bootstrapem (więc i pojemnością) aby zapewnić sensowne parametry przełączania linii sygnałowych? Przecież struktury tych układów ewoluowały na przestrzeni lat, rozwoju technologii (różnych producentów...).
- Michal_Pol
- 250...374 postów
- Posty: 330
- Rejestracja: pn, 4 kwietnia 2011, 10:38
Re: Komputer 8-bitowy
Czym programujesz Eprom?
W sieci widziałem proste bootloadery, piszesz wsad(hex) w kompie i wrzucasz do pamięci via UART i Z80 a następnie uruchamiasz z konkretnego adresu.
W sieci widziałem proste bootloadery, piszesz wsad(hex) w kompie i wrzucasz do pamięci via UART i Z80 a następnie uruchamiasz z konkretnego adresu.
- Tomasz Gumny
- 1875...2499 postów
- Posty: 2288
- Rejestracja: pn, 1 stycznia 2007, 23:18
- Lokalizacja: Trzcianka/Poznań
- Kontakt:
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Mam programator TL866
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Tomek, oczywiście masz rację. Ciekawy jest jednak przypis, który mówi że procesor jest statyczny. Producent nie gwarantuje, że okresy zegara niż wyspecyfikowane będą działać (ściślej mówiąc, przypis dotyczy szerokości pulsu zegara). Ale działają, przynajmniej na moich procesorach.Tomasz Gumny pisze: ↑pn, 20 września 2021, 11:48 Zerknąłem do kilku kart katalogowych i oto wynik [...]
Nota bene, typowy pierwszy projekt na Z80 to prosty tester - D0-D7 podłączony do masy, A0-AN do diód świecących a CLK do prostego zegara o częstotliwości rzędu pojedynczych herców. Procesor wykonuje NOPy (bo $00 to opcode NOP), a na diodach można obserwować inkrementację adresów. To bardzo popularny w Internecie projekt.
Tak czy owak, jest to dla mnie problem akademicki, w praktyce mój procesor niedługo otrzyma prawdziwy zegar kwarcowy.
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
No, ten twój to jednak znacznie bardziej zaawansowany i ambitny.
Czy w tym KiCadzie jest jakaś opcja żeby przy przesuwaniu układów przesuwał też połączenia zamiast rozłączać je?Proponuję użycie KiCad'a jako programu do rysowania schematów i projektowania płytek PCB.
- Jado
- 1250...1874 posty
- Posty: 1867
- Rejestracja: pn, 15 maja 2006, 11:06
- Lokalizacja: Warszawa
- Kontakt:
Re: Komputer 8-bitowy
Witam,
W Kicadzie (póki co, bo projekt stale się rozwija) nie ma opcji trzymania linii połączeń podczas przesuwania elementów - jak się domyślam chodzi o moduł rysowania schematów. Można zaznaczać całe bloki i je przesuwać czy kopiować - wówczas połączenia wewnątrz takiego bloku nie ulegają rozłączeniu. Zamiast długich linii wygodniej jest stosować etykiety przypisane do konkretnych pinów - wtedy przesuwanie bloków staje się jeszcze łatwiejsze. Oczywiście to najlepiej zdaje egzamin przy cyfrówce, przy analogówce standardowo łączy się najbliższe elementy liniami.
W Kicadzie (póki co, bo projekt stale się rozwija) nie ma opcji trzymania linii połączeń podczas przesuwania elementów - jak się domyślam chodzi o moduł rysowania schematów. Można zaznaczać całe bloki i je przesuwać czy kopiować - wówczas połączenia wewnątrz takiego bloku nie ulegają rozłączeniu. Zamiast długich linii wygodniej jest stosować etykiety przypisane do konkretnych pinów - wtedy przesuwanie bloków staje się jeszcze łatwiejsze. Oczywiście to najlepiej zdaje egzamin przy cyfrówce, przy analogówce standardowo łączy się najbliższe elementy liniami.
Pozdrawiam
Jado.
"Kto chce szuka sposobu, kto nie chce - szuka powodu"
Jado.
"Kto chce szuka sposobu, kto nie chce - szuka powodu"