Spisu treści:

6502 Minimalny komputer (z Arduino MEGA) Część 1: 7 kroków
6502 Minimalny komputer (z Arduino MEGA) Część 1: 7 kroków

Wideo: 6502 Minimalny komputer (z Arduino MEGA) Część 1: 7 kroków

Wideo: 6502 Minimalny komputer (z Arduino MEGA) Część 1: 7 kroków
Wideo: ILU POLICJANTÓW POTRZEBA ABY OBEZWŁADNIĆ OJCA BEZ SPRZĘTU 2024, Listopad
Anonim
6502 Minimalny komputer (z Arduino MEGA) część 1
6502 Minimalny komputer (z Arduino MEGA) część 1

Mikroprocesor 6502 pojawił się po raz pierwszy w 1975 roku i został zaprojektowany przez mały zespół kierowany przez Chucka Peddle'a dla technologii MOS. W tamtych czasach był używany w konsolach wideo i komputerach domowych, m.in. Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 i 64. W tamtym czasie był jednym z najtańszych na rynku. Tak naprawdę nigdy nie odszedł, a teraz jest używany przez hobbystów i profesjonalistów do wielu zastosowań.

Wersja, której używam, to W65C02S6TPG-14, która jest produkowana przez Western Design Center i zużywa dziesięć razy mniej energii niż oryginał. Jest wyjątkowy, ponieważ nie musi działać z częstotliwością 1 MHz, jak oryginalny układ. Może działać znacznie wolniej lub być używany do pojedynczego kroku przez program, a nawet zwiększać do 14 MHz. Karta katalogowa chipa wyjaśnia jego możliwości. Inne chipy 6502 nie mają tej możliwości i nie będą działać w ten sposób. Chipy są obecnie dostępne w serwisie eBay, a także w innych źródłach.

Kieszonkowe dzieci

Wszystkie używane części są obecnie dostępne w serwisach eBay, AliExpress i innych.

Krok 1: Koncepcja

Inspirację czerpałem od Bena Eatera, który wyprodukował serię filmów na YouTube o 6502 i wielu innych aspektach budowy komputerów i obwodów. Program został napisany przez niego pierwotnie i zmodyfikowałem to i niektóre z jego projektów, aby stworzyć ten Instruktaż. Inną osobą, która mnie zainspirowała, był Andrew Jacobs, który ma sekcję na GitHubie, w której używa mikro PIC do sterowania swoim 6502.

Podobnie jak Ben, używam Arduino MEGA do monitorowania 6502. Używam również MEGA do dostarczania sygnału zegara w przeciwieństwie do Bena. Obecnie nie używam też żadnych EEPROMów ani RAM.

Krok 2: Wymagania

Wymagania
Wymagania

Aby zbudować ten "komputer" lista elementów jest następująca:

1 x Arduino MEGA

1 x Western Design Center W65C02S6TPG-14

1 x 74HC00N IC (czterowejściowa bramka NAND) lub podobny

1 x 74HC373N IC (przezroczysty zatrzask typu ósemkowego D) lub podobny

2 x 830-otworowe deski do chleba (1 na szczyptę)

Różne męskie-męskie przewody Dupont i przewody łączące

2 x diody LED (użyłem 5mm niebieski, ponieważ można uciec bez rezystorów)

1x12mm chwilowy dotykowy przełącznik wciskany PCB montowany SPST lub podobny;

1 x rezystor 1K

Kondensatory ceramiczne 2 x 0,1 uF

1x8 Way Water Light Marquee 5mm czerwona dioda LED (jak powyżej) lub 8 diod LED i rezystory

UWAGA: Jeśli otrzymasz nieslutowany zestaw, możesz włożyć diody LED na odwrót, aby były wspólną katodą. Dołączam linkę muchową (zamiast szpilki), aby można ją było łatwo podłączyć w innym miejscu. VCC staje się teraz ziemią. Możesz oczywiście odwrócić diody LED (na złożonym przedmiocie) i ponownie je przylutować, ale to dużo bzdur! Zestawy są obecnie dostępne na AliExpress.

Krok 3: Łączenie w całość

Łączenie w całość
Łączenie w całość
Łączenie w całość
Łączenie w całość

Uznałem, że łatwiej jest użyć nowych przewodów DuPont, które nie zostały oddzielone od ich wstążki, do magistrali adresowej i danych.

Połącz pin 9 (A0) 6502 z pinem 52 MEGA, pin 10 (A1) 6502 do pinu 50 itd…

dopóki

Połącz pin 25 (A15) 6502 z pinem 22 MEGA.

Do tej pory 16 połączeń.

podobnie

Połącz pin 26 (D7) 6502 z pinem 39 MEGA, pin 27 (D6) 6502 do pinu 41 itd…

dopóki

Połącz pin 33 (D0) 6502 z pinem 53 MEGA.

8 więcej połączeń.

Podłącz pin 8 (VDD) do 5V na MEGA.

Kondensator 0,1uF podłączony od pinu 8 do Gnd płytki chleba może być tutaj przydatny, ale nie jest konieczny.

Podłącz pin 21 (VSS) do Gnd na MEGA.

Piny 2, 4, 6, 36 i 38 można związać z 5v

Podłącz pin 37 (zegar) do pinu 2 i pinu 7 MEGA.

Podłącz pin 34 (RWB) do pinu 3 MEGA.

Podłącz pin 40 (Reset) jak na powyższym schemacie.

Krok 4: Testowanie obwodu

Testowanie obwodu
Testowanie obwodu

Na tym etapie 6502 będzie działać i można użyć programu 1. Jeśli używasz markizy 8-drożnej (jak wyżej), można ją włożyć bezpośrednio do płytki stykowej i podłączyć przewód do masy lub użyć 8 diod LED i rezystorów. Diody LED pokażą, co jest na magistrali danych.

Na tym etapie dobrze byłoby ustawić opóźnienia w Loop() na 500 lub więcej, aby śledzić to, co się dzieje.

Powinieneś uzyskać podobny wynik na monitorze szeregowym, jak ten powyżej. Po naciśnięciu Reset procesor przechodzi przez 7 cykli, a następnie szuka startu programu w lokalizacjach $FFFC i $FFFD. Ponieważ nie ma fizycznych adresów do odczytania przez 6502, musimy dostarczyć je z MEGA.

W powyższym wyniku 6502 odczytuje $FFFC i $FFFD i otrzymuje $00 i $10 (młodszy bajt, starszy bajt), co jest początkiem programu od 1000 $. Procesor następnie rozpoczyna wykonywanie programu w lokalizacji $1000 (jak wyżej). W tym przypadku jest to $A9 i $55, czyli LDA#55$ (Załaduj 85 do akumulatora). Ponownie, ponieważ nie ma fizycznej lokalizacji pamięci, MEGA symuluje to, co jest odczytywane z magistrali danych.

55 $ (85) daje binarny wzór 01010101, a po obróceniu o 1 bit w lewo daje $AA (170) 10101010.

Program pokazuje, że procesor działa poprawnie, ale wkrótce robi się trochę nudny, więc przejdź do następnej części.

Krok 5: Następny krok

Następny krok
Następny krok
Następny krok
Następny krok

„Stos spaghetti” powyżej jest prawdopodobnie czymś w rodzaju tego, co będziesz miał po tym etapie.

Następnie musisz dodać do płytki prototypowej układy scalone 74HC373N i 74HC00N.

Niestety piny 373 nie pasują do szyny danych, więc będą musiały być podpięte przewodami.

Podłącz 5V do pinu 20.

Podłącz uziemienie do styku 10.

Połącz pin 33 (D0) 6502 z pinem 3 (D0) 74HC373N

i podobnie z pinami D1 do D7.

Q0 do Q7 to wyjścia, które będą wymagały podłączenia do markizy LED lub poszczególnych diod LED i rezystorów.

W modelu 74HC00 potrzebne są tylko 2 bramki

Podłącz 5V do pinu 14.

Podłącz uziemienie do styku 7.

Połącz pin 17 (A8) 6502 z pinem 1 (1A) 74HC00

Połącz pin 25 (A15) 6502 z pinem 2 (1B) 74HC00

Połącz pin 34 (R/W) 6502 z pinem 5 (2B) 74HC00

Połącz pin 3 (1Y) 74HC00 z pinem 4 (2A) 74HC00

Połącz pin 6 (2Y) 74HC00 z pinem 11 (LE) 74HC373N

Połącz pin 11 (LE) 74HC373N z pinem 1 (OE) 74HC373N

Możesz podłączyć niebieską diodę LED do 1Y i masy oraz 2Y do masy, co wskaże, kiedy brama jest aktywna.

Na koniec zmień linię w procedurze onClock z programu1 na program2

setDataPins(program2[przesunięcie]);

Krok 6: Program

Program
Program
Program
Program

Program 6502-Monitor zawiera dwie procedury 6502 opisane powyżej.

Program jest wciąż w fazie rozwoju i jest trochę nieporządny.

Podczas uruchamiania programu 2 opóźnienia w loop() mogą wynosić 50 lub mniej, a nawet zostać całkowicie usunięte. Komentowanie wierszy Serial.print() sprawia, że 6502 działa szybciej. Odłączenie pinu 1 (OE) 373 od pinu 11 (LE) daje różne wyniki. Odłączenie pinu 1 i pinu 11 373 od bramek NAND pozwala zobaczyć, co jest na szynie danych w każdym cyklu zegara.

Może być konieczne związanie OE z masą, zamiast pozostawiania go pływającego, ponieważ 8 linii wyjściowych jest wyłączonych, jeśli ten pin przejdzie w stan wysoki. Gdy pin LE jest wysoki, piny wyjściowe są takie same jak wejścia. Przyjęcie niskiego pinu LE blokuje wyjścia, tj. Jeśli zmienią się piny wejściowe, wyjścia pozostają takie same.

Starałem się, aby program był jak najprostszy, aby był łatwiejszy do zrozumienia.

Eksperymentowanie z opóźnieniami czasowymi pozwala dokładnie śledzić to, co robi 6502.

Poniżej znajdują się dwa programy (oba uruchamiane pod adresem $1000) w asemblerze 6502:

program1

LDA # $55

NOP

ROL

STA$1010

JMP$1000

ROL obraca zawartość akumulatora o jeden bit w lewo, co oznacza, że 55 $ staje się teraz $ AA.

W kodzie maszynowym (hex): A9 55 EA 2A 8D 10 10 4C 00 10

program2

LDA#$01

STA$8100

ADC # $03

STA$8100

JMP$1005

W kodzie maszynowym (szesnastkowym): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

W programie 2 jest teraz fizyczny adres 8100 $, w którym znajduje się 74HC373 na szynie adresowej.

tj. A15 z 6502 to 32768 (8000 USD), a A8 to 256 (0100 USD) = 33024 (8100 USD).

Więc kiedy 6502 zapisuje do 8100 $ (STA 8100 $), R/W 6502 jest niski, a dane na szynie danych 6502 są blokowane, gdy 373 LE staje się niski. Dzięki bramce 74HC00 NAND sygnały są odwrócone.

Na powyższym zrzucie ekranu drugi zapis zwiększył się o 3 (ADC#$03) - spadł z 7F do 82$.

W rzeczywistości więcej niż 2 linie szyny adresowej byłyby używane dla określonej lokalizacji 373. Ponieważ jest to jedyny fizyczny adres z możliwych 65536, pokazuje to, jak działa szyna adresowa. Możesz poeksperymentować z różnymi pinami adresowymi i umieścić go w innym miejscu. Oczywiście będziesz musiał zmienić operandy STA na nową lokalizację. np. Jeśli użyjesz linii adresowych A15 i A9, adres będzie wynosił 8200 USD (32768 + 512).

Krok 7: Wniosek

Wniosek
Wniosek

Próbowałem zademonstrować, jak łatwo jest uruchomić i uruchomić 6502.

Nie jestem ekspertem w tej dziedzinie, więc chętnie przyjmę wszelkie konstruktywne uwagi lub informacje.

Zapraszamy do dalszego rozwijania tego i byłbym zainteresowany tym, co zrobiłeś.

Zamierzam dodać do projektu EEPROM, SRAM i 6522, jak również w przyszłości umieścić go na stripboardzie.

Zalecana: