Eksperymenty ze starymi procesorami - MOS6502

May 29, 2018 121 Replies

U¿ytkownik "HF5BS" snipped-for-privacy@t.pl napisa³ w wiadomo¶ci news:pep3gi$hma$ snipped-for-privacy@node2.news.atman.pl... (...)

Errata... mia³o byæ "nie dziaba³em", bo dzia³a³em jak najbardziej. Krêci³em w wolnych chwilach, w dzieñ niekiedy te¿, jak by³a chwila przerwy. Dziaba³em, gorza³ê, zawsze grupowo, sk³adka, jeden leci po gorza³ê (zwykle ja), najczê¶ciej spiryt, rozrobienie na miejscu i dziabiem, zwykle pod co¶. Ale, na liniach radiowych, to tam ¿e¶my niekiedy zdrowo walili :) Ale, na mikrofali z grillem robi³em tak± pieczon± kie³baskê, ¿e wychodzi³a jak z ogniska, niektórzy nie wytrzymywali i musia³em czê¶æ udostêpniaæ w po³owie cyklu, no, pó³ godziny trwa³, taki zapaszek siê aromatyczny rozchodzi³ :)

U¿ytkownik "kasik" snipped-for-privacy@spoko.pl napisa³ w wiadomo¶ci news:pepic4$tbd$ snipped-for-privacy@dont-email.me...

Akurat nasza by³a sk³adkowa, choæ czê¶ciej ze spirytu, bo taniej, to, co nam akurat dawali, to by³o ska¿one, czym, to nie wiem, zapaszek dziwny mia³o, choæ odcieñ raczej neutralny, mo¿e ciut za¿ó³cony. Ale o innych centralach s³ysza³em to, co mówisz, jak najbardziej. Ekipa, oczywi¶cie, bardzo pilnie te styki czy¶ci³a :)

I chyba właśnie w tym tkwiła przyczyna. Po ustawieniu za pomocą rezystorów wartości 0xEA (instrukcja NOP) na magistrali adresowej pojawiły się prawidłowe przebiegi (regularne, coraz dłuższe impulsy). Podejrzewam, że pływające piny D0..D7 powodowały wystąpienie jednej z nieudokumentowanych instrukcji wieszających procesor, jeszcze zanim zdążyłem dotknąć pinu sondą oscyloskopową.

Wygląda na to, że procesor kupiony na Aliexpress jest faktycznie prawdziwym, działającym 6502. Teraz tylko pozostało mi zaprojektowanie dekodera adresów i dodanie jakiegoś podstawowego zestawu peryferiów.

Ktoś się orientuje w układach (UART, port równoległy, jakiś kontroler obrazu) dla tej rodziny procesorów? Czego powinienem poszukać?

Jezeli chcesz zostac przy MOS technology to praktycznie najlepiej wziac schemat VIC 20 lub C64

c.

Nie planuję budować repliki konkretnego urządzenia z epoki. To ma być projekt o walorach edukacyjnych, budowany dla frajdy. Chciałbym więc samodzielnie zaprojektować dekoder adresów i peryferia, a potem przystosować jakiegoś BASIC-a do pracy z tym sprzętem. Tak samo, jak zrobiłem w przypadku mojego projektu z wykorzystaniem MCY7880.

Tak BTW czy w przypadku systemu 6502 istnieje jakiś argument za umieszczaniem EPROM-u w górnej części przestrzeni adresowej? W przypadku komputerów opartych na 8080/8085/Z80 ma to sens o tyle, że CP/M wymaga RAM-u zaczynającego się od adresu 0x0000. Wiąże się to jednak z pewna komplikacją - dodatkowa logika musi zapewnić start procesora od właściwego adresu.

Dla 6502 nie było CP/M, jednak czy istnieje jeszcze jakiś inny argument za takim rozwiązaniem? Nie zamknę sobie jakiejś drogi umieszczając EPROM na początku przestrzeni adresowej?

Wektory resetu i przerwań są u góry.

Na dole jest stos i strona zerowa.

jp

A faktycznie. Zapomniałem, że kiedyś czytałem o tym w opisie tego tranzystora... Czyli rozumiem, że w grę wchodzi tylko takie rozwiązanie, jak w przypadku mojego projektu na MCY7880, gdzie na EPROM przeznaczona została ostatnia ćwiartka przestrzeni adresowej? Rozumiem, że wektory resetu i przerwań to tylko instrukcje wywołujące właściwe i mogę je spokojnie umieścić w EPROM-ie?

Tak swoją drogą, jaką wartość przyjmuje PC po restarcie, skoro pierwszych 512 bajtów to strona zerowa i stos? Zaczyna tak czy inaczej liczyć od zera i trzeba we własnej logice zaimplementować tymczasowe przestawienie górnych linii adresowych (aby kod zaczął się wykonywać od EPROM-u) czy jest to zrealizowane w jakiś inny sposób?

Możesz zrobić tak jak w Commodore; RAM 64k przykryte częściowo przez ROM. I ten ROM można programowo wyłączyć/włączyć; wtedy masz prawie 64K RAM, i oczywiście możliwość wywoływania funkcji kernela jeśli sobie przełączysz na chwilę na ROM. Pod adresem, bodaj 0x0000, jest rejestr I/O do przełączania i m.in magnetofonu. Ponadto gdzieś wysoko są rejestry I/O ale nie pamiętam dokładnie jaka była polityka dostępu do nich; czy leżały pod ROM czy RAM czy też osobno.

Tak, to są chyba tylko wektory, bez instrukcji

Zaczytuje z wektora, króry jest na końcu, w ROM.

Mam nadzieję, że nie pochrzaniłem; tyle lat minęło.

jp

w 8080 jest maly problem - procesor startuje spod adresu 0000, wiec tam powinien byc ROM, ale jak chcesz CP/M, to tam powinien byc RAM. Trzeba przelaczac.

Nie, wlasnie wektor ma. Czyli 6502 po resecie odczytuje bajty $FFFC/D, i ich wartosc wpisuje do PC. I pod tym odczytanym adresem ma sie zaczynac program inicjujacy.

Podobnie z przerwaniem ... i tu jest maly problem, bo obsluga przerwan w komputerach "ogolnego przeznaczenia" to moze byc zmienna, i np system operacyjny sobie z dysku zaladuje. Wiec albo wektor bedzie wskazywal na ROM, a tam program skoczy sobie gdzies do RAM, albo przelaczymy gorna pamiec na RAM, i wpiszemy w nia potrzebny wektor. Bo pierwsze rozwiazanie to troche kosztowne czasowo jest ... no wlasnie - jaka dasz pamiec ? DRAM wymaga odswiezania, Z80 odswieza sam, w C64 czy Atari odswiezal uklad wyswietlania obrazu, a z innych pomyslow ... to np bylo 128 rozkazow NOP w przerwaniu - ich wykonanie to odczyt pamieci, wystarczy je tylko czesto wywolywac. I juz nam dluga obsluga przerwania nie przeszkadza :-)

J.

Teraz obowiązkowa lektura:

formatting link
A konkretnie ten fragment:

formatting link
Polecam całość tej prezentacji, jest naprawdę znakomita.

Daj namiar. Widze na ali 6502 ale w tak róznych cenach że nie wiem ktore sa te Twoje.

Nie chodzi o replikowanie, chodzi o to ze i c64 i amiga mialy bardzo podobne uklady io i mozna je zastosowac tak, zeby bylo elegancko :)

obadaj schemat c64 i amigi, zobaczysz tam uklady cia:

formatting link
One sa tym o co pytasz.

No chyba ze chcesz inne, to juz kto inny musi zasugerowac co tam ci trzeba :)

Eeee chyba nie tak. dla x86 w dolnej czesci pamieci programy korzystaly z krotszego adresowania przez co byly krotsze oidp.

dla 6502 tego nie ma, chyba zrobili tak zeby bylo wygodnie i tyle.

Chyba nie, Ale zerknij czy to nie bylo zwiazane z obsluga przerwan. Cos mi sie kojarzy ze gdzies tam byl rejestr ktory wskazywal na procedure obslugi przerwania i moze on byl jakos skoligacony z gorna adresacja.

W dniu 2018-05-30 o 21:03, J.F. pisze:

Nic już nie pamiętam. A przecież nawet kiedyś napisałem disasembler na

6502 w Basicu. Ciekawe, czy jeszcze u kogoś się poniewiera.

formatting link
Zaryzykowałem i postanowiłem kupić na jednej z tańszych (jeśli nie najtańszej) aukcji. Nie był to kompletny strzał w ciemno, bo jeden człowiek z pewnej grupy na FB już je wcześniej zamówił i otrzymał przesyłkę (ale na tamtą chwilę jeszcze nie miał okazji przetestować).

Procesory wyglądają na pochodzące z demontażu, na szczęście wyjęte z podstawek, a nie wylut. Wygląda na to, że każdy z innej serii. Niektóre sztuki mają już nieco słabo widoczne oznaczenia, jedna dodatkowo ma trochę rys na górnej stronie obudowy.

Co ciekawe na Ali nie widzę 6502 w wersji CMOS. Są na Ebay'u, także z wysyłką z Chin. Może też na próbę kupię kilka sztuk. ;)

Dnia Fri, 1 Jun 2018 23:10:55 +0200, Andrzej napisał(a):

Tego nie mozesz pamietac, bo to nieoficjalne bylo. Mnemonik tez nieoficjalny.

J.

Dnia Fri, 1 Jun 2018 13:48:04 -0700 (PDT), snipped-for-privacy@gmail.com

Tylko czy da sie kupic ?

Oprocz 65xx powinny tez pasowac peryferia od 6800.

Na kompatybilne z magistrala wygladaja tez znakowe LCD - te 2x16, czy wieksze. No i np 6845 - tylko on musi miec czesty dostep do pamieci.

IMO - rozwijanie tego nie ma sensu. Czas sie zajac czyms wspolczesnym.

J.

W dniu piątek, 1 czerwca 2018 17:54:28 UTC-5 użytkownik J.F. napisał:

Da sie wylutowac :)

No to sie tyczy tez samego 6502. Bo po co robic cos na nim jak mamy atmegi?

No chyba ze ma byc odporne na promieniowanie. Ale czy ten wspolczesny 6502 jest na duzym krzemie czy na malym? Bo jak na malym to chyba bedzie rownie nieodporny na promieniowanie jak taka atmega? No, moze nieco mniej ale jednak nadal felernie nieodporny...

W dniu 2018-06-02 o 00:48, J.F. pisze:

Czy był oficjalny, czy nie tego nie pamiętam. Pamiętam , że coś takiego napisałem. Gdzieś nawet w śmieciach plącze się wydruk.Rozgryzaliśmy z kolegami różne wersje Basic'a, w tym BASIC C64. A pamięta ktoś "Smutny Basic", tzn. Basic z Amaterskiego Radia napisany przez inż. Smutnego?

Nie tyle argument co konieczność. Na adresach 0000-00FF jest tzw. strona zerowa pełniąca rolę czegoś w rodzaju 256 rejestrów. Czyli w tym obszarze musi być RAM. Rozkazy operujące na tej stronie mają krótsze mnemoniki i działają szybciej. Teoretycznie można by z nich zrezygnować w programie, ale "utrata" adresowania indirect (adres bazowy w dwóch sąsiednich komórkach na stronie zerowej) może być bolesna. Następny obszar bez którego raczej się nie obejdziesz to stos pod adresami

0100-01FF. Następny problem, to wektory na końcu przestrzeni adresowej: NMI $FFFA/$FFFB RESET $FFFC/$FFFD IRQ/BRK $FFFE/$FFFF Jeśli w tym obszarze umieścisz RAM, to na jaki adres będą wskazywać wektory po włączeniu zasilania?

Najprostsze systemy z 6502 budowałem z kostką EPROM 2716 i statycznym RAM-em 6116. Dekoder adresu, to jeden inwerter. Sygnał /CS pamięci RAM był podłączony bezpośrednio do A15, a /CS EPROMu przez inwerter do A15 Dawało to efekt wielokrotnego powtarzania tego samego 2 kilobajtowego obszaru w przestrzeni adresowej procesora, ale to w niczym nie przeszkadza.

Oczywiście z takim systemem bez układów I/O ciężko będzie pogadać ;-) Więc trzeba będzie jakiś dekoder chociaż dwóch najstarszych linii adresowych (np połówka 74LS155) aby stworzyć cztery obszary adresowe. CS0 0000-3FFF dla pamięci RAM CS1 4000-7FFF dla układu I/O CS2 8000-BFFF dla układu I/O CS3 C000-FFFF dla pamięci EPROM

Z powodu kiepskiej dostępności układów peryferyjnych 65xx w tamtym czasie, pożeniłem z 6502 dość popularne układy ze stajni Intela. port równoległy i8255 i timer i8253. Trzeba sztucznie wytworzyć sygnały IOW oraz IOR przez bramkowanie sygnału R/W z wyjściem zegarowym FI2. Tą samą metodą możesz dołączać proste peryferia w postaci przerzutników D (lub latch) oraz buforów trójstanowych.

Współczesne są nudne :)

I w zasadzie niczym się nie różną od tych historyczych, tyle tylko, że ich stosowanie jest bardziej opłacalne; jeśli robisz to dla pieniędzy. No ale Atlantis robi to dla hobby. Trochę mu zazdroszczę, że ma czas.

jp

Nie wiem czy o tym mowa ale pamiętam jakiś Basic, drukowany w Amaterske Radio (niebieskie), na kilku stronach, w hex, na 8080 był, coś koło 4 kilobajty.

Z kolegą zdisassemblowaliśmy go, ręcznie, długopisem w zeszycie.

Bardzo pouczające doświadczenie, odkrywanie jak działa interpreter. Potem przenieśliśmy go do pamięci EEPROM, nieco modyfikując; dodaliśmy proste funkcje do rysowania grafiki i obsługe magnetofonu.

jp

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required