Innehållsförteckning:

6502 Minimal dator (med Arduino MEGA) Del 1: 7 steg
6502 Minimal dator (med Arduino MEGA) Del 1: 7 steg

Video: 6502 Minimal dator (med Arduino MEGA) Del 1: 7 steg

Video: 6502 Minimal dator (med Arduino MEGA) Del 1: 7 steg
Video: Day in My Life as a Quantum Computing Engineer! 2024, November
Anonim
6502 Minimal dator (med Arduino MEGA) Del 1
6502 Minimal dator (med Arduino MEGA) Del 1

6502 mikroprocessorn uppträdde först 1975 och designades av ett litet team som leddes av Chuck Peddle för MOS -teknik. Då användes den i videokonsoler och hemmadatorer inklusive Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 och 64. Då var den en av de billigaste på marknaden. Det har aldrig riktigt försvunnit och nu används det av amatörer och proffs för många applikationer.

Den version jag använder är W65C02S6TPG-14 som är gjord av Western Design Center och använder tio gånger mindre ström än originalet. Det är speciellt eftersom det inte behöver köra vid 1 MHz som det ursprungliga chipet. Det kan köra mycket långsammare eller användas för att enkelt gå igenom ett program och till och med rampa upp till 14 MHz. Databladet för chipet förklarar dess kapacitet. Andra 6502 chips har inte den här funktionen och kommer inte att köras på det här sättet. Chippen är för närvarande tillgängliga på Ebay och andra källor.

Tillbehör

Alla delar som används är för närvarande tillgängliga på Ebay, AliExpress och andra.

Steg 1: Konceptet

Jag fick min inspiration från Ben Eater som har producerat en serie videor på YouTube om 6502 och många andra aspekter av att bygga datorer och kretsar. Programmet skrevs av honom ursprungligen och jag har modifierat detta och några av hans mönster för att komma med denna instruerbara. En annan person som inspirerade mig var Andrew Jacobs som har ett avsnitt på GitHub där han använder en PIC -mikro för att styra sin 6502.

Precis som Ben använder jag en Arduino MEGA för att övervaka 6502. Jag använder också MEGA för att ge klocksignalen till skillnad från Ben. För närvarande använder jag inte heller några EEPROM eller RAM.

Steg 2: Krav

Krav
Krav

För att bygga denna "dator" är en lista med objekt följande:

1 x Arduino MEGA

1 x Western Design Center W65C02S6TPG-14

1 x 74HC00N IC (Quad 2-input NAND gate) eller liknande

1 x 74HC373N IC (Octal D-typ transparent spärr) eller liknande

2 x 830 håls brödbrädor (1 i nypa)

Olika Dupont han- och hanledningar och länkkablar

2 x lysdioder (jag använde 5 mm blått eftersom du kan komma undan utan motstånd)

1 x 12 mm momentan taktil tryckknappsbrytare PCB -monterad SPST eller liknande

1 x 1K motstånd

2 x 0,1 uF keramiska kondensatorer

1 x 8 Way Water Light Marquee 5 mm röd LED (enligt ovan) eller 8 lysdioder och motstånd

OBS! Om du får det olödda paketet kan du sätta in lysdioderna på fel sätt så att de är en vanlig katod. Jag fäster en flugkabel (istället för stiftet) så att den enkelt kan anslutas någon annanstans. VCC blir nu Ground. Du kan naturligtvis vända på lysdioderna (på ett monterat föremål) och löda om dem, men det här är mycket faff! Kits är för närvarande tillgängliga på AliExpress.

Steg 3: Sätta ihop det

Sätta ihop det
Sätta ihop det
Sätta ihop det
Sätta ihop det

Jag tyckte att det var lättare att använda nya DuPont -kablar som inte hade separerats från bandet för adress- och databussarna.

Anslut stift 9 (A0) på 6502 till stift 52 på MEGA, stift 10 (A1) på 6502 till stift 50 etc …

fram tills

Anslut stift 25 (A15) på 6502 till stift 22 på MEGA.

16 anslutningar hittills.

likaså

Anslut stift 26 (D7) på 6502 till stift 39 på MEGA, stift 27 (D6) på 6502 till stift 41 osv …

fram tills

Anslut stift 33 (D0) på 6502 till stift 53 på MEGA.

8 fler anslutningar.

Anslut stift 8 (VDD) till 5v på MEGA.

En 0.1uF kondensator ansluten från stift 8 till Gnd på brödskivan kan vara användbar här men inte nödvändigt.

Anslut stift 21 (VSS) till Gnd på MEGA.

Stift 2, 4, 6, 36 och 38 kan knytas till 5v

Anslut stift 37 (klocka) till stift 2 och stift 7 på MEGA.

Anslut stift 34 (RWB) till stift 3 på MEGA.

Anslut stift 40 (Återställ) enligt diagrammet ovan.

Steg 4: Testa kretsen

Testar kretsen
Testar kretsen

I detta skede kommer 6502 att fungera och program1 kan användas. Om du använder 8 -vägs -tältet (enligt ovan) kan det sättas in direkt i brödbrädan och flugledningen anslutas till marken, eller så kan du använda 8 lysdioder och motstånd. Lysdioderna visar vad som finns på databussen.

I detta skede skulle det vara lika bra att ställa in förseningarna i loop () till 500 eller mer, för att följa vad som händer.

Du bör få en liknande utmatning på seriemonitorn som den ovan. När Reset trycks in går processorn igenom sju cykler och sedan letar den efter starten av programmet på platser $ FFFC och $ FFFD. Eftersom det inte finns några fysiska adresser för 6502 att läsa, måste vi tillhandahålla dem från MEGA.

I ovanstående utdata läser 6502 $ FFFC och $ FFFD och får $ 00 och $ 10 (låg byte, hög byte) vilket är starten på programmet på $ 1000. Processorn börjar sedan köra programmet på plats $ 1000 (enligt ovan). I detta fall läser den $ A9 och $ 55, dvs LDA#$ 55 (Ladda 85 i ackumulatoren). Återigen, eftersom det inte finns någon fysisk minnesplats, simulerar MEGA det som läses från databussen.

$ 55 (85) ger det binära mönstret 01010101 och när det roteras ger 1 bit kvar $ AA (170) 10101010.

Programmet visar att processorn fungerar korrekt men snart blir lite tråkig, så fortsätt till nästa del.

Steg 5: Nästa steg

Nästa steg
Nästa steg
Nästa steg
Nästa steg

"Spagettihögen" ovan är förmodligen ungefär som vad du kommer att ha efter detta steg.

Därefter måste du lägga till 74HC373N och 74HC00N IC: er på panelen.

Tyvärr är 373: s stift inte i linje med databussen, så det måste kopplas med ledningar.

Anslut 5v till stift 20.

Anslut marken till stift 10.

Anslut stift 33 (D0) på 6502 till stift 3 (D0) på 74HC373N

och likaså med stiften D1 till D7.

Q0 till Q7 är utgångarna och dessa måste anslutas till LED -tältet eller enskilda lysdioder och motstånd.

Med 74HC00 behövs bara 2 av dess grindar

Anslut 5v till stift 14.

Anslut marken till stift 7.

Anslut stift 17 (A8) på 6502 till stift 1 (1A) på 74HC00

Anslut stift 25 (A15) på 6502 till stift 2 (1B) på 74HC00

Anslut stift 34 (R/W) på 6502 till stift 5 (2B) på 74HC00

Anslut stift 3 (1Y) på 74HC00 till stift 4 (2A) på 74HC00

Anslut stift 6 (2Y) på 74HC00 till stift 11 (LE) på 74HC373N

Anslut stift 11 (LE) på 74HC373N till stift 1 (OE) på 74HC373N

Du kan ansluta en blå lysdiod till 1Y och mark samt 2Y till jord, detta indikerar när grinden är aktiv.

Ändra slutligen raden i onClock -proceduren från program1 till program2

setDataPins (program2 [offset]);

Steg 6: Programmet

Programmet
Programmet
Programmet
Programmet

6502-Monitor-programmet innehåller de två 6502-rutinerna som beskrivs ovan.

Programmet är fortfarande under utveckling och är lite orent.

När program2 körs kan fördröjningarna i loop () vara 50 eller mindre och till och med tas bort helt. Genom att kommentera Serial.print () -linjerna gör 6502 också snabbare. Att koppla bort stift 1 (OE) på 373 från stift 11 (LE) ger olika resultat. Genom att koppla bort stift 1 och stift 11 på 373 från NAND -portarna kan du se vad som finns på databussen vid varje klockcykel.

Du kan behöva knyta OE till marken i stället för att låta den vara flytande eftersom de 8 utgångslinjerna är inaktiverade om denna stift går högt. När LE -stiftet är högt är utgångsstiften desamma som ingångarna. Att ta LE -stiftet låser utgångarna, dvs om ingångsstiften ändras förblir utgångarna desamma.

Jag har försökt att hålla programmet så enkelt som möjligt för att göra det lättare att förstå.

Att experimentera med tidsfördröjningar gör att du kan följa exakt vad 6502 gör.

Nedan visas de två programmen (båda körs på adressen $ 1000) i 6502 Assembler:

program 1

LDA#$ 55

NOP

ROL

STA $ 1010

JMP $ 1000

ROL roterar innehållet i ackumulatorn en bit kvar vilket betyder att $ 55 nu blir $ AA.

I maskinkod (hex): A9 55 EA 2A 8D 10 10 4C 00 10

program2

LDA#$ 01

STA $ 8100

ADC#$ 03

STA $ 8100

JMP $ 1005

I maskinkod (hex): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

I program2 finns det nu en fysisk adress $ 8100, där 74HC373 är placerad på adressbussen.

dvs A15 på 6502 är 32768 ($ 8000) och A8 är 256 ($ 0100) = 33024 ($ 8100).

Så när 6502 skriver till $ 8100 (STA $ 8100) är R/W på 6502 låg och data på 6502 -databussen låses när 373 LE går lågt. På grund av 74HC00 NAND -porten är signalerna omvända.

I ovanstående skärmtryck har den andra skrivningen ökat med 3 (ADC#$ 03) - gått från $ 7F till $ 82.

I verkligheten skulle mer än 2 rader i adressbussen användas för den specifika platsen för 373. Eftersom detta är den enda fysiska adressen av de möjliga 65536, visar det hur adressbussen fungerar. Du kan experimentera med olika adressnålar och placera den på en annan plats. Naturligtvis måste du ändra STA -operanderna till den nya platsen. t.ex. Om du använde adressrad A15 och A9 skulle adressen vara $ 8200 (32768 + 512).

Steg 7: Slutsats

Slutsats
Slutsats

Jag har försökt visa hur lätt det är att få igång en 6502.

Jag är ingen expert på detta område så jag tar gärna emot konstruktiva kommentarer eller information.

Du är välkommen att utveckla detta vidare och jag skulle vara intresserad av vad du har gjort.

Jag tänker lägga till en EEPROM, SRAM och en 6522 till projektet samt lägga den på bandbräda i framtiden.

Rekommenderad: