„Starożytne” procesory

Kącik dla elektroniki retro - układy, urządzenia, podzespoły, literatura itp.
Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

„Starożytne” procesory

Postautor: gaweł » czwartek 23 cze 2022, 22:53

Jakoś ostatnio zapanowała moda
na klasyczne już mikroprocesory. Niejako wracamy
do lat 70-tych XX wieku. To były szalone czasy
(dla procesorów), czasy radosnej twórczości
i walki konkurencyjnej. W szranki stanęło kilka
firm, niektóre na tym wypłynęły na szerokie wody
inne miały mniej szczęścia a o niektórych
wynalazkach słuch zaginął.


Tak całkiem niedawno obchodziliśmy 50 rocznicę narodzin pierwszego procesora i4004 (od Intel). Z perspektywy dzisiejszych czasów, to była cienizna, nie miał nawet przerwań i dosyć pokrętnie się go używało. No cóż... było jak było i nie nam to oceniać. Jak mówi porzekadło „pierwsze śliwki robaczywki”, i4004 dał szansę na doświadczenia, przemyślenia i korekty. To było kilkuletnia droga prowadząca do i8008. Co prawda nie miałem okazji go użyć, ale udało mi się go potrzymać w rękach. Może to nie jest jakiś wielki wyczyn, ale...
Otóż ten dał swoje geny dla praktycznie wszystkim znanego procka i8080. Ten był jaki był... miał również swoje wady i jedną dosyć istotną zaletę: był i można było go w miarę prosto użyć. W sumie dał duży impuls do działania, powstało wiele aplikacji i zostało napisane sporo kodu na ten procek. Jak to często bywa, prawdziwi twórcy i zarządy firm mają rozbieżne cele biznesowe, toteż prawdziwi twórcy odeszli z Intel i utworzyli nową firmę Zilog dając światu najbardziej kultowy procek Z-80. Intencją twórców było stworzenie procka, którego lista instrukcji byłaby nadzbiorem dla i8080, co pozwoliłoby na użycie istniejącego już oprogramowania. To był chyba dobry marketing, bo świat w to uwierzył a nie jest to prawdą do końca. Jak to często bywa, problem tkwi w szczegółach. I8080 i Z-80 odmiennie wykonują pewne specyficzne operacje. Przykładowo wskaźnik P/V (dla Z-80) i P (dla i8080) mają odmienne znaczenie. Dla i8080 jest to wskaźnik parzystości wyniku operacji arytmetycznej i logicznej. Dla Z-80 jest to wskaźnik parzystości dla operacji logicznych oraz wskaźnik nadmiaru dla operacji arytmetycznych. Przykładowo kod:

Kod: Zaznacz cały

LD    A,33
ADD   A,15
JP    PE,INTEL
JP    PO,ZILOG

jest w stanie rozróżnić procki, ponieważ 33+15=48 zawiera parzystą liczbę jedynek, więc i8080 ustawi flagę, natomiast Z-80 zauważy, że wynik operacji w kodzie U2 mieści się w dopuszczalnym zakresie [-128..+127], więc nie ustawi flagi P/V. Nie ma to jak dobry marketing...
Intel przemyślał swoje postępowanie i wkrótce wyszedł procek 8085. Ten już nie był tak uciążliwy w stosowaniu, jednak już Z-80 nie udało się pokonać.
Niewiele później w stosunku do i8080 światło dzienne ujrzał inny procek MC6800 (Motorola). Ten już jest dużo mniej znany w naszym kraju. Nawet w rodzimych stronach miał kłopoty z przebiciem się. Powód tego jest dosyć prozaiczny, gdyż historia lubi się powtarzać. Cele biznesowe twórców i zarządu stały się rozbieżne i... powstała firma MOS Technology oferująca procek 6502 (dziwnie podobny architektonicznie do 6800). Ten zrobił furorę. Wszyscy ujeżdżacze Atari lub Commodore powinni go znać.
To są procki najbardziej znane w świecie 8 bitów. Jednak są i takie, które stoją w cieniu nie walcząc o popularność i robią swoje. Takim jest właśnie 1802. Nie pamiętam kto jest jego pierwszym producentem, gdyż interesowałem się nim pod koniec lat 80-tych a dzisiaj jest praktycznie nie do zdobycia. Ten procek miał fajne cechy: był bardzo oszczędny w poborze energii oraz charakteryzował się odpornością na promieniowanie kosmiczne. To spowodowało, że „wziął udział” w eskapadach kosmicznych. Sondy kosmiczne z nim na pokładzie mkną w przestrzeni kosmicznej. Może kiedyś jacyś kosmici go odkryją.
Potem nadeszły czasy procków 16-bitowych, więc wszystkie siły twórcze zostały skierowany do innych zadań. I tak iteracyjnie poprzez i8086, i80286, i80386 itd. mamy dzisiaj różne odmiany procków Pentium. Nie jest to jedyny procek 16-bitowy, 32-bitowy i później 64-bitowy. Istnieją procki z rodziny 68K od Motoroli, która po raz kolejny przegrała wyścig o hegemonię. No jakoś chłopaki nie mają farta, ale to nie znaczy, że te procki nie są warte zainteresowania.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » piątek 24 cze 2022, 00:54

Świadomość upływu czasu

vinproc_f000.jpg


Każdy system musi mieć świadomość upływu czasu. W sumie jest to prosta realizacja. Konieczny jest układ, który w stałym rytmie będzie generował przerwania dla procka. Ten przetwarzając te sygnały jest w stanie uzyskać to „poczucie”. W rodzinie i8080 został opracowany specjalizowany układ 8253 i jego ulepszona wersja 8254 (głównie do wykorzystania w środowisku 8088/8086). To ulepszenie to przede wszystkim możliwość pracy z większą częstotliwością. W środowisku 8080 lub 8085 wystarczy 8253.
Przygoda z układem 8253 nie jest pierwszą. Każdy posiada pamięć, ale jak to bywa, wymaga ona odświeżenia. Tak jak z pamięciami dynamicznymi – nieużywane ulegają zanikowi i później trzeba się trochę natrudzić by dojść do tego samego, co było kiedyś. Tu troszkę mi uleciało, ale prosty eksperyment ją przywrócił. Jak podczepić ten układ do przerywadła, by procek miał świadomość upływu czasu. Zbudowałem wręcz prymitywne środowisko do eksperymentów.
vinproc_f001.jpg
Do schematu:
vinproc_f002.png
W roli szyny danych wystąpił podpolaryzowany do +5V DIP-SW. Drugi DIP-SW udawał szynę adresową. Sygnał żądania odczytu (/RD – pin 22) jest na stałe do +5V (nie zamierzałem czytać z układu), sygnał zapisu (/WR – pin 23) jest na stałe do zera (każdy dostęp do układu jest operacją zapisu). Do obsługi sygnału wyboru (/CS – pin 21) zastosowałem przerzutnik RS zbudowany na bramkach, tu jest istotna absolutna czystość sygnału (bez dzwonienia). Układ jest napędzany z generatora zbudowanego na bazie popularnego układu 555.
Obsługa 8253 wymaga wpisania do rejestru sterującego (kombinacja adresowa A1,A0=11) słowa sterującego i w zależności od jego „treści” ewentualnie dalszych zapisów do odpowiednich liczników (inna kombinacja A1, A0). Wpisywałem jako słowo sterujące: 00110110 (co oznacza: tryb pracy licznika 0 to tryb 3 – generator fali prostokątnej o wypełnieniu 50%: częstotliwość wejściowa podzielona przez zaprogramowaną stałą 16-bitową oraz następne zapisy będą dotyczyć zapisu podzielnika: w pierwszej kolejności LSB w drugiej kolejności MSB). „Wyświetlacz” LED-owy szyn ma tą własność, że świeci dla jedynki. Poniżej wspomniany zapis słowa kontrolnego.
vinproc_f003.jpg
Kolejny zapis to 00010000 (część młodsza podzielnika) pod adres A1,A0=00.
vinproc_f004.jpg
I ostatecznie część starsza podzielnika jako: 00000000 (pod ten sam adres).
vinproc_f005.jpg
Oscylek pokazał sygnał zegarowy z generatora na 555 (około 293Hz).
vinproc_f006.png
I na wyjściu OUT0 (pin 10):
vinproc_f007.png
Oscylek mówi, że to 18,38Hz. Z grubsza się zgadza: wejściowe 393,3Hz podzielone przez 16 daje 18,33Hz.
Jeżeli zaprogramować tryb pracy 2 (podobny generator fali prostokątnej tylko z krótkimi impulsami gdy dekrementowany licznik osiągnie zero), to oscylek pokazuje:
vinproc_f008.png
Częstotliwość wyjściowa to ta sama. Nie pamiętam, czy intelowe przerywadło (8214) reaguje na zbocze czy na poziom sygnału. Konieczne będą dalsze badania i eksperymenty, o czym będę pisał.
Przy okazji wyszło, że nie jest konieczne kaskadowe połączenie dwóch liczników by uzyskać sensowną częstotliwość przerwań. Jakoś uleciało z głowy to co robiłem kilkadziesiąt lat temu, ale proste doświadczenie przywraca pamięć. Dla 8080 typowo stosuje się kwarc 18MHz do układu 8224, który dzieli to przez 9 i daje jako FI2TTL do napędzania układu 8253. Maksymalny podział to 2MHz / 65535 daje ok 30Hz (co około 32ms). To wystarczy, a właściwie to bardziej przydatne jest „szybciej” (a to oznacza mniejszy podzielnik). Dla procka 8085 można go taktować szybciej, więc tam ewentualnie może zajść potrzeba połączenia kaskadowego.
Tak w ogólności, to 8253 można zastosować w innych systemach. W sumie to 8253 nie jest jakoś „przywiązanie” tylko do procków Intela choć z drugiej strony, to każdy producent procków oferował swoje układy (nie ma jak to „swojak”). Wyjątkiem mogą być układy Ziloga, bo te już są przywiązane do „swoich”.
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

tapy
Newb
Newb
Posty: 51
Rejestracja: niedziela 14 kwie 2019, 17:09
Kontaktowanie:

Re: „Starożytne” procesory

Postautor: tapy » piątek 24 cze 2022, 08:38

gaweł pisze:Każdy system musi mieć świadomość upływu czasu.

Drobne sprostowanie, są też takie systemy które żyją w błogiej nieświadomości o fakcie upływającego czasu i kompletnie się z nim nie liczą. Najbardziej znanym przykładem są systemy operacyjne z rodziny CP/M wraz z jego ostatnią wersją 3, która posiadała funkcje czasu ograniczające się tylko do odpowiedzi na pytanie natrętów "Która jest godzina?".
Zapowiada się ciekawy cykl.

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » piątek 24 cze 2022, 09:15

Masz rację, są "leniwe" warianty pozostające w swojej nieświadomości. Ja miałem na myśli coś innego. W nawet drobnym systemiku taka funkcjonalność jest niezbędna, bez tego trudno jest przykładowo obsłużyć klawiaturę. Jak tego nie ma, to pozostaje sprzętowa realizacja klawiatury i przerwanie w sytuacji stabilnego naciśnięcia klawisza.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
piotrek
User
User
Posty: 149
Rejestracja: niedziela 05 lis 2017, 02:46

Re: „Starożytne” procesory

Postautor: piotrek » czwartek 30 cze 2022, 21:42

Niby starożytne układy ale konfigurowalne w taki sam sposób jak współczesne procki :) To tylko pokazuje że w zasadzie zero-jedynkowy świat niewiele się zmienił na tym poziomie.
Ciekawi jakiego oscyloskopu używasz, wygląda na podręczne urządzenie.

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » sobota 02 lip 2022, 22:06

piotrek pisze:Niby starożytne układy ale konfigurowalne w taki sam sposób jak współczesne procki :) To tylko pokazuje że w zasadzie zero-jedynkowy świat niewiele się zmienił na tym poziomie.

Masz rację, wszystko to już było i ponownie wracamy do starej wiedzy, która tak trochę umyka.

piotrek pisze:Ciekawi jakiego oscyloskopu używasz, wygląda na podręczne urządzenie.

No nie jest to Tektronix ani Rohde Schwarz ani nawet Rigol. W miarę prosty ale wystarczający UTD2052. Ma przydatną funkcję PrtScr na pendriva.
UTD2052.png
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

tapy
Newb
Newb
Posty: 51
Rejestracja: niedziela 14 kwie 2019, 17:09
Kontaktowanie:

Re: „Starożytne” procesory

Postautor: tapy » piątek 08 lip 2022, 23:54

Do systemów dla których upływający czas ma znaczenie zaprojektowałem moduł (tradycyjnie) w standardzie RC2014, gdyż od jakiegoś czasu chodzi mi po głowie implementacja MP/M dla procesorów Z80. Od pierwszego spotkania się z tym systemem operacyjnym i pozytywnym wrażeniu jaki na mnie wywarł będę się starać przenieść go na jak największą gamę kart tego modularnego standardu retro komputerów. Co prawda wiąże się to z tym, że powinienem zaprojektować też moduł MMU, który będzie bardziej elastyczny od typowych tam układów z podziałem na obszary 16kB, jednak spróbuję jednak użyć dostępnych modułów, bo nowa karta to nowe ograniczenia dostępności. Z80 CTC daje jeszcze jedną możliwość, poza pomiarem czasu, może zostać też użyty jako kontroler przerwań wektorowych dla urządzeń które nie wspierają tego rozwiązania firmy Zilog. W przedstawionym przykładzie, do tego celu można użyć kanałów 0 i 3, pozostałe dwa typowo liczą czas, zaś jeden z nich może być generatorem ustalającym prędkość transmisji szeregowej.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » sobota 09 lip 2022, 02:20

tapy pisze:...może zostać też użyty jako kontroler przerwań wektorowych dla urządzeń które nie wspierają tego rozwiązania firmy Zilog.

A rozważałeś rozwiązanie z użyciem PIO w trybie bitowym?

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

tapy
Newb
Newb
Posty: 51
Rejestracja: niedziela 14 kwie 2019, 17:09
Kontaktowanie:

Re: „Starożytne” procesory

Postautor: tapy » sobota 09 lip 2022, 11:49

Z tego co mi wiadomo, jest to możliwe, ale nigdy tego nie sprawdziłem. Kiedyś w celach poznawczych dokonam takiego doświadczenia, skoro jestem posiadaniu moduł PIO, którego jednak używam tylko okazjonalnie. Zabawa z systemami rodziny CP/M trochę mnie oddaliła od tak bliskiego obcowania z portami, pinami do czego nas zmuszał CA80. Zaznaczam że jest to moje lenistwo i winę zwalam na CP/M, a on przecież daje taką możliwość zabawy ze sprzętem wspierając to różnorodnymi językami programowania. Jakoś się muszę usprawiedliwić. ;) Wracając do doświadczeń, modułowy system radykalnie zmienia (pod warunkiem posiadania potrzebnych modułów) możliwości ich przeprowadzania, bo skupiamy się tylko na meritum mając świadomość, że użyta karta jest technicznie sprawna i sprawdzona przez jej twórcę.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » wtorek 12 lip 2022, 02:44

Signetics 2650

S2650AI.jpg


Czasami historia toczy się przedziwnymi torami. Jedni mają więcej farta inni mniej. W latach 70-tych XX wieku, właściwie każda z firm biorących udział w opracowaniu mikroprocesora miała wyrównane szanse. Dzisiaj, to procki robią wszyscy. Nawet możliwe jest wyprodukowanie procka w warunkach domowych. Domyślam się, że to stwierdzenie może wywołać zdziwienie, ale jak zastanowić się nad tym głębiej, to nawet jest w tym sens. Dostęp do układów FPGA jest bezproblemowy. Teraz pozostaje jedynie własna kreatywność i … mamy okazję zmierzyć się z problemami jakie istniały w wymienionej dekadzie ubiegłego wieku. Wszystko da się zrobić, tylko trzeba to jakoś wymyślić. Wtedy różne firmy miały własną wizję na architekturę procków.
Zawsze zastanawiała mnie jedna kwestia: co decyduje o powodzeniu określonych przedsięwzięć? Wiedza inżynierska? Wtedy to wszyscy byli na podobnym poziomie: wszyscy zaczynali. Dostęp do kasy (ta jak wiadomo jest niezbędna przy prowadzeniu tego typu działań): większość obecnych firm będących literami w temacie procków (z pominięciem tych, które historia zmiotła z horyzontu) była raczkująca. Musi istnieć coś, że jedni mają farta i wprowadzają na rynek produkt, który jak się przyjrzeć, to wcale nie musi być taki „super”.
Weźmy przykładowo taki procek 8080. Jest rok 1974, gdy ten produkt wchodzi na rynek. Był... jaki był. Wymagał trzech napięć zasilających, miał dwufazowy sygnał zegarowy i jednostka centralna składała się z trzech układów. Jego „geny” są obecne we współczesnych prockach używanych do budowy kompów (choć właściwie należy zauważyć, że architektura 8080 wywodzi się jeszcze z 8008). W 1975 roku wchodzi na rynek nowa firma: Motorola wprowadza MC6800. To całkowicie odmienna filozofia w architekturze procka. Układ już jest jednonapięciowy choć sygnał zegarowy nadal jest dwufazowy.
Również w 1975 pojawia się procek Signetics 2650. Jest to również 8-bitowy procesor. Jest pojedynczym jednonapięciowym układem z jednofazowym sygnałem zegarowym. Model 2650 ma 15-bitową szynę adresową (najstarszy bit jest zarezerwowany do określania adresowania pośredniego), umożliwiając adresowanie do 32K pamięci. Jest to jakaś tam dziwność, ale przy odrobinie kreatywności można na jego bazie budować komputery.
s2650.png

Posiada 7 rejestrów, R0, który jest używany jako akumulator, oraz 2 banki z trzema 8-bitowymi rejestrami, które można przełączać. Pozwala to na szybką wymianę zestawów rejestrów w procedurach obsługi przerwań (Z80 ze swoimi instrukcjami wymiany zestawów rejestrów wcale nie był pierwszym z tym pomysłem).
Signetic 2650 (jako 8-bitowy) mógł pojawić się na rynku w 1972 roku na długo przed pierwszym Intel 4004, który był 4 bitowy. Co spowodowało, że prace nad jego opracowaniem zostały trochę spowolnione i jego powstanie przesunęło się o kilka lat? Nawet w 1975 roku procek 2650 miał wiele cech nowatorskich. Miał prawdziwie wektorowy system przerwań. W przypadku 8080 to nie można mówić o podejściu wektorowym do obsługi przerwań (są instrukcje RST 1 do RST 7 [RST 0 jest tożsame z resetem, więc nie obsługuje przerwań], ale nie jest to podejście wektorowe). Procek MC6800 już miał całkowicie odmienną filozofię obsługi: CPU miało wektor do obsługi przerwań, ale przerwania od wszystkich urządzeń były skomasowane do jednego wektora i ich obsługa wymagała odpytania każdego, czy przypadkiem to nie on sobie czegoś życzy. W procku 2650 przerwanie precyzyjnie bezpośrednio trafiało do właściwej obsługi. Podobną funkcjonalność daje Z80, ale on pojawia się na rynku dopiero w 1976. Może projektanci Z80 zapatrzyli się na innych. Dodatkowym ogromnym jego atutem jest mnogość trybów adresowania: obsługuje 8 różnych trybów adresowania, w tym bezpośredni i pośredni z autoinkrementacją/dekrementacją (w innych prockach tego nie było). Ciekawostką było to, że procek miał 2 bity, jeden wejściowy i jeden wyjściowy, w rejestrze statusów (odpowiednik rejestru flag w Z80, czy 8080), które wychodziły bezpośrednio na piny procka (sygnał SENSE i FLAG). Można było nimi wachlować z programu.
Do dziwności jednak należy zaliczyć sprzętowy stos o pojemności 8 elementów zlokalizowany w CPU. Lokacja stosu w pamięci RAM zaistniała później. Biorąc pod uwagę, że jego proces projektowy był w tym samym czasie co procka 4004, to staje się to zrozumiałe. I4004 miał stos zorganizowany identycznie (a przy okazji: 4004 nie miał przerwań).
Patrząc na całość z historycznego punktu widzenia można powiedzieć, że 2650 stał się inspiracją dla innych konstrukcji. Pewne pomysły, koncepcje i rozwiązania pojawiły się później w innych modelach procków. Natomiast o oryginale słuch zaginął.
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

tapy
Newb
Newb
Posty: 51
Rejestracja: niedziela 14 kwie 2019, 17:09
Kontaktowanie:

Re: „Starożytne” procesory

Postautor: tapy » czwartek 14 lip 2022, 09:54

Jakaś pozostałość po CPU 2650 pozostała z nami na dłuższy czas, a konkretnie układy transmisji szeregowej które powstały dla tego procesora. Były one dość długo rozwijane i przyćmiewały swoimi możliwościami Intela 8251 lub Motorolę 6850. Konkurował z nimi tylko Z80 SIO, ale i on został pokonany rozwinięciem firmy Exar w modelu XR88C681 w kwestii transmisji asynchronicznej.

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » piątek 15 lip 2022, 21:56

Motorola MC6840

vinproc_f100.jpg


Odpowiednikiem funkcjonalnym układu 8253 w systemie MC6800 (Motorola) jest układ MC6840 określany jako PTM (Programmable Timer Module). Podobnie jak układ intelowy ma 3 niezależne 16-bitowe kanały do zliczania impulsów. Generalnie funkcjonalność jest podobna, w końcu liczba różnych mutacji tego typu układów jest skończona. Zilogowe układy również są podobne (w sensie działania, bo w sensie aplikacji sprzętowej to są odmienne). Od intelowego 8253 różni się przede wszystkim liczbą widzianych komórek. Tu dochodzi 3 linie adresowe, co pozwala na rozróżnienie 8 komórek. Oddzielnie widziana jest część młodsza oraz starsza liczników, jak i nastaw do liczników. Pozostałe dwie komórki to rejestry programujące. Znacząco inaczej działa szyna sterowania. Jak ktoś jest przyzwyczajony do filozofii Intel/Zilog, to tu napotka całkowicie odmienne rozwiązanie. Generalnie, szyna sterowań w stosunku do szyny Intel/Zilog to zupełnie inny świat. Przede wszystkim, to 6800 nie ma przestrzeni adresowej dla portów, wszystko jest widziane jako komórki pamięci, takie podejście nazywa się Memory Mapped. No trochę trzeba się natrudzić, by przyzwyczaić się do innego spojrzenia.
vinproc_f101.png

Realizując badania układu 8253, to można go wysterować nawet z układu DIPSWITCH. Tutaj jest to trochę bardziej złożone, toteż postanowiłem użyć procka, który będzie emulował sterowania motorolowego procka. Zastosowałem moduł z układem MEGA32.
vinproc_f102.jpg

vinproc_f103.jpg

No i, jakby tu powiedzieć … skucha. Układ nie dał się przekonać do współpracy. No cóż, negatywny wynik eksperymentu również jest ważny, gdyż daje do myślenia i skłania do refleksji, że coś idzie nie tak jak powinno. Nie wiem, czy są niewłaściwe zaklęcia do układu, czy emulacja odbiega od prawdy. Może trzeba będzie sprawę przemyśleć i stworzyć właściwe docelowe środowisko do pracy dla PTM. Temat będę jeszcze drążyć, bo choć rodzinka MC6800 była moją pierwszą, z którą działałem (drugim był 8080 a Z80 załapał się na 3 miejsce), to jednak potyczki z MC6840 są wręcz dziewicze.
Układ nie jest „rasistą” i powinien współpracować z innymi prockami. Sam producent daje przykład takiego postępowania, gdzie w środowisku I8085 daje się poganiać motorolowy PTM.
vinproc_f104.png
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

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » niedziela 17 lip 2022, 23:18

NSC800

vinproc_f200.jpg


Wpadł mi w ręce taki oto właśnie procesor. Kiedyś obiło mi się o uszy, że taki właśnie istnieje, i tyle. Były to dawne czasy, gdzie interesowałem się różnymi prockami. Jako student miałem dostęp do uczelnianej biblioteki (a właściwie czytelni), bo pracowała tam moja kuzynka, więc roczniki „Electronic design” (i podobnych) zawsze były dostępne (mogłem sobie wypożyczyć na weekend wszystko, choć to czytelnia i nie wypożycza). Jak widać, dostęp do porządnej biblioteki jest cenną cechą. Szczegółów to tam nie było, ale było wiadomo, co jest na topie. Dzisiaj jest takie mnóstwo procków, że nie starczy czasu by wymienić ich nazwy. Era internetu jeszcze wtedy nie nastała, więc dostęp do szczegółów nie istniał.
Dzisiaj, jak pojawił się u mnie, to z naturalnej ciekawości zagooglałem za owym cósiem. Więc jest to procek 8-bitowy produkowany przez National Semiconductor. Jego pinologię pokazuje następujący rysunek.
vinproc_f201.png

Z ciekawszych detali, to ma multipleksowaną szynę danych (dane/adresy: AD0..AD7), więc jest ALE (Adres latch enable) – w sumie dosyć typowe rozwiązanie. Wymaga podłączenia jedynie rezonatora kwarcowego by uzyskać sygnał zegarowy (XOUT, XIN). Powstały zegar jest dostępny na CLK. Ma statusy (S0 i S1), z których można wykumać, że przykładowo jest cykl M1 (dosyć powszechnie stosowana notacja na określenie pobrania kodu rozkazu). Obok typowego sygnału przerwania INTR występują dodatkowe: RSTA, RSTB i RSTC.
Ciekawym elementem jest to, co ma w środku. Architekturę pokazuje następujący rysunek.
vinproc_f202.png

Wygląda wszystko jakoś dziwnie znajomo. Nie da się ukryć zbieżności z budową procka Z80. W rzeczy samej jest to mikroprocesor kompatybilny w sensie kodu programu z najbardziej znanym 8-bitowym prockiem: Z80. Dokumentacja twierdzi to samo (biją się w pierś i piszą, że jest kompatybilny w sensie kodu z Z80). No znając podejście marketingowe, to może warto sprawdzić (ja wszystko sam sprawdzam). Przejrzałem listę instrukcji wraz z ich kodami. Wszystko się zgadza (co prawda sprawdziłem kilka wybranych).
Mamy rzadki przypadek naśladownictwa (nie kopiowania). National wzorował się na Zilogu tworząc własne rozwiązanie. Jakoś nie bardzo zatrybiłem obsługi dodatkowych przerwań (RSTA .. RSTC). Trzeba będzie to sprawdzić w boju.
Oddzielną kwestią jest zestaw peryferali do tego procka. Oferta nie jest jakoś przesadnie bogata. W dodatku układy te są chyba nie do zdobycia. Interesujące jest to, czy klasyczne peryferale ziloga będą współdziałać z owym prockiem. Jakoś nie jest to wyraźnie napisane, natomiast piszą, że procek obsługuje tryb IM 2. Skoro obsługuje ten tryb, to musi również również współdziałać przykładowo z układem PIO, CTC i SIO (klasykami w zestawie ziloga). Właściwie to wszystko mam by wykonać te badania. Już wiem co będę robił w najbliższym czasie.
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

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » wtorek 26 lip 2022, 15:21

RABBIT 3000

vinproc_f300.jpg


Tak w kontekście procka NSC 800 jako układu, który został zainspirowany prockiem Z80, przypomniałem sobie jeszcze o jednym podobnym przypadku. Jest to układ RABBIT 3000, będący realizacją własnej koncepcji docelowego rozwiązania inspirowanego kultowym prockiem Z80. Firma Rabbit Semiconductor nie zrobiła wiernej kopii zilogowego proca, gdyż jak sądzę, takie przedsięwzięcie nie miałoby sensu (wg datasheet od króliczego procka, jest to wytwór już XXI wieku). I jak przystało na nowoczesne rozwiązanie, procek RABBIT 3000 ma zasilanie ze źródła napięcie o wartości 3,3V (a nawet więcej, jak podaje datasheet, procek pojedzie już od 1,8V). Również imponująca jest jego szybkość pracy, może on być taktowany sygnałem zegarowym o częstotliwości 55MHz.
Miałem okazję poużywać tego proca programując go w jakiejś mutacji języka C, o czym pisałem <tutaj>.
Patrząc na jego pinologię, można dostrzec, że szyna adresowa jest 20-bitowa. To sugeruje, że może jego źródeł należy poszukać w Z80180 lub nowszych (bo do Z8000 to już nie pasuje).
vinproc_f301.png

Obecnie zainteresowało mnie, w jaki sposób rejestry 16-bitowe obsługują 20-bitową szynę danych. Jego architektura to:
vinproc_f302.png

czyli istnieje rejestr rozszerzenia rejestru PC (XPC). Filozoficznie coś podobnego wystąpiło w intelowych prockach 8088 (8086) jak i we wszystkich nowszych. Normalnie program poruszał się w obrębie 64-kilowej przestrzeni, która była gdzieś umieszczona w całej możliwej przestrzeni adresowej (jest rejestr CS – code segment i rejestr IP – instruction pointer, które w złożeniu dawały 20-bitowy adres; te złożenie jest nawet takie trochę dziwne, bo realny adres wystawiony na szynę adresową to suma CS przesunięta o 4 bity w lewo plus IP). W PC-towych prockach są dwa warianty instrukcji skoku (i instrukcji wywołania): z adresem krótkim – wtedy jest skok (zmiana IP) w obrębie bieżącego segmentu oraz długim – z podaniem nowej zawartości rejestru CS i IP. Przejrzałem listę instrukcji RABBIT 3000 i wszystko stało się jasne:
  • jest normalna instrukcja: CALL nn, gdzie PC przyjmie nową wartość nn
  • jest „długa” instrukcja: LCALL xpc,nn, gdzie wystąpi wymiana wszystkich rejestrów [PC i XPC] oraz aktualne trafią na stos [PC i XPC]
  • jest normalna instrukcja skoku: JP nn
  • jest „długa” instrukcja skoku: LJP xpc,mn
  • jest normalna instrukcja: RET
  • jest „długa” instrukcja: LRET
  • instrukcja RETI jest z definicji długa, co raczej nie powinno dziwić.
Znaczy, procek RABBIT może skoczyć dowolnie daleko i wrócić (z dowolnie dalekiej lokacji).
W przypadku przesyłania danych, to obok instrukcji LD występuje instrukcja LDP, gdzie brakująca część adresu zawarta jest w akumulatorze.
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

Awatar użytkownika
piotrek
User
User
Posty: 149
Rejestracja: niedziela 05 lis 2017, 02:46

Re: „Starożytne” procesory

Postautor: piotrek » środa 27 lip 2022, 23:53

A może trochę o kompilatorach albo nawet IDE do omawianych procków?
Przykładowo w czym pisać dla 8080/8035 albo chociażby dla 8051? Sam składam powoli system na starożytnych układach, i póki co nie mam pojęcia od czego zacząć. To by były cenne informacje :)

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » czwartek 28 lip 2022, 08:17

piotrek pisze:Przykładowo w czym pisać dla 8080/8035 albo chociażby dla 8051?

Mówisz, masz.
O tworzeniu softu w C dla C51 pisałem <tutaj>, do symulacji można wygooglać AVSIM51. W tym samym sofcie (SDCC) można tworzyć dla kilku innych procków jak przykładowo kultowy Z80. O tworzeniu softu na 8080, to będę musiał odszukać takowy na swoich płytach, o czym dam znać.

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » sobota 30 lip 2022, 23:38

Temat dotyczący narzędzi na procki I8080 został wydzielony jako niezależny <kompiler I8080>, gdyż stanowi zagadnienie zamknięte (i dosyć rozbudowane).

Prawdziwe słowa nie są przyjemne. Przyjemne słowa nie są prawdziwe.
Lao Tse

Awatar użytkownika
gaweł
Geek
Geek
Posty: 1163
Rejestracja: wtorek 24 sty 2017, 22:05
Lokalizacja: Białystok

Re: „Starożytne” procesory

Postautor: gaweł » niedziela 07 sie 2022, 23:50

ZILOG Z800

Jednym z najbardziej dziwnych i tajemniczych jest historia całej grupy układów należących do rodziny określanej jako Z800. Jest to grupa dosyć mocno zaawansowanych rozwiązań mikroprocesorów 16-bitowych. Ich premiera była (a może miała być, kto to wie?) w roku 1985. Architektonicznie Z800 jest kompatybilny z powszechnie znanym osobnikiem Z80. Różnił się od swego słynnego przodka tym, że miał dwa rodzaje rejestrów wskaźnika stosu: wskaźnik stosu użytkownika oraz wskaźnik stosu systemowy. To już sugeruje, że w jego konstrukcji przewidywano tryb pracy użytkownika oraz tryb pracy systemu nadzorującego, coś co obecnie jest już standardem
Jak podają różne źródła, procesory z rodziny Z800 nigdy nie weszły do produkcji masowej, niemniej wykonane prace nie poszły na marne. Ulepszona wersja Z800 pojawiła się później jako Z280. Jednak większego zainteresowania już nie uzyskała.
W układach Z800 rozszerzono szynę adresową do 24 bitów (jak również szynę danych – w końcu to procek 16-bitowy). Procek został zaprojektowany w czterech wariantach (w wersji bardzo ekonomicznej – szyna danych 8-bitowa i zredukowana szyna adresowa do 19 bitów, ekonomicznej i „na bogato” – szyna danych 16-bitowa oraz szyna adresowa 24-bitowa plus kilka peryferali jak UART czy licznik/timer):
  • Z8108 – 8-bitów szyny danych i 19-bitów szyny adresowej; można zaadresować do 512kB pamięci; układ w obudowie DIP40,
  • Z8116 – 16-bitów szyny danych i 19-bitów szyny adresowej; można zaadresować do 512kB pamięci; układ w obudowie DIP40,
  • Z8208 – 8-bitów szyny danych i 24 bity szyny adresowej; można zaadresować do 16MB pamięci; układ w obudowie DIP64,
  • Z8216 – 16-bitów szyny danych i 24 bity szyny adresowej; można zaadresować do 16MB pamięci; układ w obudowie DIP64 [wariant na bogato].
Sprzętowo warianty z 8-bitową szyną danych są bardzo podobne do Z80. Sądzę, że każdy mający praktykę z Z80 bez problemów pokonałby Z8108 i Z8116.
vinproc_f401.png

W bardziej „bogatych” wersjach, to już tak nie jest, dochodzi kilka elementów całkowicie nowych.
vinproc_f402.png

Do istniejących instrukcji z Z80 dodano trochę nowych. Rzeczywiście, przeglądając listę instrukcji Z800 dostrzega się dużą zbieżność z Z80. Można dostrzec wiele nowych. Z bardziej istotnych są instrukcje mnożenia i dzielenia (fascynaci i zainteresowani mogą samodzielnie zagłębić się w „nowe” i przestudiować załączone materiały: oryginalne materiały z Zilog załączone na końcu).
Podobnie jak wcześniej Z80, Z800 zachował wewnętrzny kontroler DRAM i zegar, ale dodał 256 bajtów pamięci RAM, które mogły być używane jako RAM typu „scratchpad” lub jako pamięć podręczna. Gdy jest używany w trybie pamięci podręcznej, programista może skonfigurować go jako pamięć podręczną danych lub instrukcji, lub jedno i drugie, a wewnętrzny kontroler pamięci używa go następnie do zmniejszenia dostępu do (wolniejszej) pamięci zewnętrznej.
vinproc_f403.png

Były też ambitne postanowienia dotyczące wieloprocesorowości i luźno lub ściśle sprzężonych procesorów podrzędnych ze współdzieloną pamięcią globalną lub bez niej. Było to znane jako rozszerzona architektura przetwarzania i rozszerzone jednostki przetwarzania (EPU).
vinproc_f404.png


Oryginalne zilogowe materiały (według których, to Zilog oferował na tego proca nawet kompilator PASCAL'a):
Zilog z800.pdf
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

tapy
Newb
Newb
Posty: 51
Rejestracja: niedziela 14 kwie 2019, 17:09
Kontaktowanie:

Re: „Starożytne” procesory

Postautor: tapy » poniedziałek 08 sie 2022, 00:55

Jako uzupełnienie tematu warto zapoznać się z tym materiałem filmowym.


Wróć do „Retro”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości