Indholdsfortegnelse:

6502 Minimal computer (med Arduino MEGA) Del 1: 7 trin
6502 Minimal computer (med Arduino MEGA) Del 1: 7 trin

Video: 6502 Minimal computer (med Arduino MEGA) Del 1: 7 trin

Video: 6502 Minimal computer (med Arduino MEGA) Del 1: 7 trin
Video: № 111 Еженедельный обзор № 26 – Новые продукты для производителей 2024, November
Anonim
6502 Minimal computer (med Arduino MEGA) Del 1
6502 Minimal computer (med Arduino MEGA) Del 1

6502 mikroprocessoren optrådte første gang i 1975 og blev designet af et lille team ledet af Chuck Peddle for MOS Technology. Dengang blev det brugt i videokonsoller og hjemmecomputere, herunder Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 og 64. På det tidspunkt var det en af de billigste på markedet. Det er aldrig rigtig forsvundet, og nu bruges det af hobbyfolk og professionelle til mange applikationer.

Den version, jeg bruger, er W65C02S6TPG-14, som er lavet af Western Design Center og bruger ti gange mindre strøm end originalen. Det er specielt ved, at det ikke behøver at køre ved 1 MHz som den originale chip. Det kan køre meget langsommere eller bruges til et enkelt trin gennem et program og endda rampe op til 14 MHz. Databladet for chippen forklarer dens muligheder. Andre 6502 chips har ikke denne kapacitet og vil ikke køre på denne måde. Chipperne er i øjeblikket tilgængelige på Ebay såvel som andre kilder.

Forbrugsvarer

Alle brugte dele er i øjeblikket tilgængelige på Ebay, AliExpress og andre.

Trin 1: Konceptet

Jeg fik min inspiration fra Ben Eater, der har produceret en række videoer på YouTube om 6502 og mange andre aspekter ved opbygning af computere og kredsløb. Programmet blev oprindeligt skrevet af ham, og jeg har ændret dette og nogle af hans designs for at komme med denne Instructable. En anden person, der inspirerede mig, var Andrew Jacobs, der har et afsnit på GitHub, hvor han bruger en PIC -mikro til at styre sin 6502.

Ligesom Ben bruger jeg en Arduino MEGA til at overvåge 6502. Jeg bruger også MEGA til at levere urets signal i modsætning til Ben. I øjeblikket bruger jeg heller ikke nogen EEPROM'er eller RAM.

Trin 2: Krav

Krav
Krav

For at bygge denne "computer" er en liste over emner som følger:

1 x Arduino MEGA

1 x Western Design Center W65C02S6TPG-14

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

1 x 74HC373N IC (Octal D-type transparent lås) eller lignende

2 x 830 hullers brødbrætter (1 i klemme)

Forskellige Dupont han- og hanledninger og forbindelsestråde

2 x lysdioder (jeg brugte 5 mm blå, da du kan slippe afsted uden modstande)

1 x 12 mm Momentary Tactile Push Button Switch PCB -monteret SPST eller lignende

1 x 1K modstand

2 x 0,1 uF keramiske kondensatorer

1 x 8 Way Water Light Marquee 5mm rød LED (som ovenfor) eller 8 LED'er og modstande

BEMÆRK: Hvis du får det usolderede kit, kan du indsætte lysdioderne forkert, så de er almindelige katoder. Jeg fastgør en flueledning (i stedet for stiften), så den let kan forbindes andre steder. VCC bliver nu Ground. Du kan selvfølgelig dreje LED'erne rundt (på en samlet genstand) og lodde dem igen, men det er meget faff! Kits er i øjeblikket tilgængelige på AliExpress.

Trin 3: Sæt det sammen

At sætte det sammen
At sætte det sammen
At sætte det sammen
At sætte det sammen

Jeg fandt det lettere at bruge nye DuPont -ledninger, der ikke var adskilt fra deres bånd til adresse- og databusserne.

Tilslut pin 9 (A0) på 6502 til pin 52 på MEGA, pin 10 (A1) af 6502 til pin 50 osv …

så længe

Tilslut pin 25 (A15) på 6502 til pin 22 på MEGA.

16 forbindelser indtil videre.

Ligeledes

Tilslut pin 26 (D7) på 6502 til pin 39 på MEGA, pin 27 (D6) på 6502 til pin 41 osv …

så længe

Tilslut pin 33 (D0) på 6502 til pin 53 på MEGA.

8 flere forbindelser.

Tilslut pin 8 (VDD) til 5v på MEGA.

En 0.1uF kondensator forbundet fra pin 8 til Gnd på brødbrættet kan være nyttig her, men ikke nødvendig.

Tilslut pin 21 (VSS) til Gnd på MEGA.

Stifter 2, 4, 6, 36 og 38 kan bindes til 5v

Tilslut pin 37 (ur) til pin 2 og pin 7 på MEGA.

Tilslut pin 34 (RWB) til pin 3 på MEGA.

Tilslut pin 40 (Reset) som diagrammet ovenfor.

Trin 4: Test af kredsløbet

Test af kredsløbet
Test af kredsløbet

På dette stadium fungerer 6502, og program1 kan bruges. Hvis du bruger 8 -vejs teltet (som ovenfor), kan det indsættes direkte i brødbrættet og flueledningen tilsluttes jorden, eller du kan bruge 8 lysdioder og modstande. LED'erne viser, hvad der er på databussen.

På dette tidspunkt ville det være lige så godt at indstille forsinkelserne i Loop () til 500 eller mere for at følge, hvad der sker.

Du bør få et lignende output på den serielle skærm som den ovenfor. Når der trykkes på Reset, går processoren igennem syv cyklusser, og derefter ser den efter starten af programmet på steder $ FFFC og $ FFFD. Da der ikke er nogen fysiske adresser til 6502 at læse, er vi nødt til at levere dem fra MEGA.

I ovenstående output læser 6502 $ FFFC og $ FFFD og får $ 00 og $ 10 (lav byte, høj byte), som er starten på programmet med $ 1000. Processoren begynder derefter at udføre programmet på stedet $ 1000 (som ovenfor). I dette tilfælde læser den $ A9 og $ 55, dvs. LDA#$ 55 (Indlæs 85 i akkumulatoren). Igen, da der ikke er nogen fysisk hukommelsesplacering, simulerer MEGA, hvad der læses fra databussen.

$ 55 (85) giver det binære mønster 01010101, og når det roteres, giver 1 bit til venstre $ AA (170) 10101010.

Programmet viser, at processoren fungerer korrekt, men snart bliver lidt kedelig, så videre til næste del.

Trin 5: Næste trin

Næste skridt
Næste skridt
Næste skridt
Næste skridt

"Bunken spaghetti" ovenfor er sandsynligvis noget i stil med, hvad du vil have efter denne fase.

Dernæst skal du tilføje 74HC373N og 74HC00N IC'erne til brødbrættet.

Desværre stemmer 373's pins ikke op med databussen, så det skal være tilsluttet ledninger.

Tilslut 5v til pin 20.

Tilslut jorden til pin 10.

Tilslut pin 33 (D0) på 6502 til pin 3 (D0) på 74HC373N

og ligeledes med stifterne D1 til D7.

Q0 til Q7 er output, og disse skal tilsluttes LED -partiet eller individuelle LED'er og modstande.

Med 74HC00 er der kun brug for 2 af dens porte

Tilslut 5v til pin 14.

Tilslut jord til stift 7.

Tilslut pin 17 (A8) på 6502 til pin 1 (1A) på 74HC00

Tilslut pin 25 (A15) på 6502 til pin 2 (1B) på 74HC00

Tilslut pin 34 (R/W) på 6502 til pin 5 (2B) på 74HC00

Tilslut pin 3 (1Y) på 74HC00 til pin 4 (2A) på 74HC00

Tilslut pin 6 (2Y) på 74HC00 til pin 11 (LE) på 74HC373N

Tilslut pin 11 (LE) på 74HC373N til pin 1 (OE) på 74HC373N

Du kan tilslutte en blå LED til 1Y og jord samt 2Y til jord, dette vil indikere, når porten er aktiv.

Endelig ændres linjen i onClock -proceduren fra program1 til program2

setDataPins (program2 [offset]);

Trin 6: Programmet

Programmet
Programmet
Programmet
Programmet

6502-Monitor-programmet indeholder de to 6502-rutiner beskrevet ovenfor.

Programmet er stadig under udvikling og er lidt rodet.

Når du kører program2, kan forsinkelserne i loop () være 50 eller mindre og endda fjernet helt. Kommentering af Serial.print () -linjerne får også 6502 til at køre hurtigere. Afbrydelse af pin 1 (OE) på 373 fra pin 11 (LE) giver forskellige resultater. Ved at afbryde pin 1 og pin 11 på 373 fra NAND -portene kan du se, hvad der er på databussen ved hver urcyklus.

Du skal muligvis binde OE til jorden i stedet for at lade den flyde, da de 8 outputlinjer er deaktiveret, hvis denne pin går højt. Når LE -stiften er høj, er udgangsstifterne de samme som indgangene. Hvis LE -stiften tages lavt, låses udgangene, dvs. hvis input -benene ændres, forbliver udgangene de samme.

Jeg har forsøgt at holde programmet så enkelt som muligt for at gøre det lettere at forstå.

Eksperimenter med tidsforsinkelser giver dig mulighed for at følge præcis, hvad 6502 laver.

Nedenfor er de to programmer (begge kører på adressen $ 1000) i 6502 Assembler:

program 1

LDA#$ 55

INTET P

ROL

STA $ 1010

JMP $ 1000

ROL roterer indholdet i akkumulatoren en bit tilbage, hvilket betyder, at $ 55 nu bliver $ AA.

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

program 2

LDA#$ 01

STA $ 8100

ADC#$ 03

STA $ 8100

JMP $ 1005

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

I program2 er der nu en fysisk adresse $ 8100, hvor 74HC373 er placeret på adressebussen.

dvs. A15 på 6502 er 32768 ($ 8000) og A8 er 256 ($ 0100) = 33024 ($ 8100).

Så når 6502 skriver til $ 8100 (STA $ 8100), er R/W på 6502 lav, og dataene på 6502 -databussen låses, når 373 LE går lavt. På grund af 74HC00 NAND Gate vendes signalerne.

I ovenstående skærmprint er den anden skrivning steget med 3 (ADC#$ 03) - gået fra $ 7F til $ 82.

I virkeligheden ville mere end 2 linjer i adressebussen blive brugt til den specifikke placering af 373. Da dette er den eneste fysiske adresse ud af den mulige 65536, viser det, hvordan adressebussen fungerer. Du kan eksperimentere med forskellige adressestifter og placere det et andet sted. Selvfølgelig skal du ændre STA -operanderne til den nye placering. f.eks. Hvis du brugte adresselinjer A15 og A9, ville adressen være $ 8200 (32768 + 512).

Trin 7: Konklusion

Konklusion
Konklusion

Jeg har forsøgt at demonstrere, hvor let det er at få en 6502 i gang.

Jeg er ikke ekspert på dette område, så jeg modtager gerne konstruktive kommentarer eller oplysninger.

Du er velkommen til at udvikle dette yderligere, og jeg vil være interesseret i, hvad du har gjort.

Jeg agter at tilføje et EEPROM, SRAM og en 6522 til projektet samt lægge det på stripboard i fremtiden.

Anbefalede: