Innholdsfortegnelse:

6502 Minimal datamaskin (med Arduino MEGA) Del 1: 7 trinn
6502 Minimal datamaskin (med Arduino MEGA) Del 1: 7 trinn

Video: 6502 Minimal datamaskin (med Arduino MEGA) Del 1: 7 trinn

Video: 6502 Minimal datamaskin (med Arduino MEGA) Del 1: 7 trinn
Video: Lesson 06: Arduino Variables Data Types | Robojax Arduino Step By Step Course 2024, November
Anonim
6502 Minimal datamaskin (med Arduino MEGA) Del 1
6502 Minimal datamaskin (med Arduino MEGA) Del 1

6502 mikroprosessoren dukket først opp i 1975 og ble designet av et lite team ledet av Chuck Peddle for MOS Technology. Den gang ble den brukt i videokonsoller og hjemmemaskiner, inkludert Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 og 64. På den tiden var den en av de billigste på markedet. Det har egentlig aldri forsvunnet, og nå brukes det av hobbyfolk og profesjonelle til mange bruksområder.

Versjonen jeg bruker er W65C02S6TPG-14 som er laget av Western Design Center og bruker ti ganger mindre strøm enn originalen. Det er spesielt ved at det ikke trenger å kjøre på 1 MHz som den originale brikken. Den kan kjøre mye saktere eller brukes til å gå gjennom et program og til og med rampe opp til 14 MHz. Dataarket for brikken forklarer dens evner. Andre 6502 sjetonger har ikke denne funksjonen og vil ikke kjøre på denne måten. Brikkene er for tiden tilgjengelige på Ebay så vel som andre kilder.

Rekvisita

Alle brukte deler er for tiden tilgjengelige på Ebay, AliExpress og andre.

Trinn 1: Konseptet

Jeg hentet inspirasjonen min fra Ben Eater som har produsert en serie videoer på YouTube om 6502 og mange andre aspekter ved bygging av datamaskiner og kretser. Programmet ble skrevet av ham opprinnelig, og jeg har modifisert dette og noen av designene hans for å komme med denne Instructable. En annen person som inspirerte meg var Andrew Jacobs som har en seksjon på GitHub hvor han bruker en PIC -mikro for å kontrollere 6502.

Som Ben, bruker jeg en Arduino MEGA for å overvåke 6502. Jeg bruker også MEGA for å gi klokkesignalet i motsetning til Ben. For tiden bruker jeg ikke noen EEPROM eller RAM.

Trinn 2: Krav

Krav
Krav

For å bygge denne "datamaskinen" er en liste over elementer 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 hulls brødbrett (1 i klem)

Ulike Dupont mannlige - mannlige ledninger og ledninger

2 x lysdioder (jeg brukte 5 mm blått, da du kan slippe unna uten motstander)

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

1 x 1K motstand

2 x 0,1 uF keramiske kondensatorer

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

MERK: Hvis du får det usolgte settet, kan du sette inn lysdiodene feil vei, slik at de er en vanlig katode. Jeg fester en flueledning (i stedet for pinnen) slik at den enkelt kan koble til andre steder. VCC blir nå Ground. Du kan selvsagt snu lysdiodene rundt (på en samlet gjenstand) og lodde dem på nytt, men dette er mye faff! Kits er for øyeblikket tilgjengelig på AliExpress.

Trinn 3: Sette det sammen

Sette det sammen
Sette det sammen
Sette det sammen
Sette det sammen

Jeg fant det lettere å bruke nye DuPont -ledninger som ikke hadde blitt skilt fra båndet for adresse- og databussene.

Koble pin 9 (A0) på 6502 til pin 52 på MEGA, pin 10 (A1) av 6502 til pin 50 etc …

før

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

16 forbindelser så langt.

like måte

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

før

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

8 tilkoblinger til.

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

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

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

Pins 2, 4, 6, 36 og 38 kan knyttes til 5v

Koble pin 37 (Clock) til pin 2 og pin 7 på MEGA.

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

Koble pin 40 (Reset) som diagrammet ovenfor.

Trinn 4: Test kretsen

Test kretsen
Test kretsen

På dette stadiet vil 6502 fungere og program1 kan brukes. Hvis du bruker 8 -veis teltet (som ovenfor), kan det settes rett inn i brødbrettet og flueledningen kobles til bakken, eller du kan bruke 8 lysdioder og motstander. Lysdiodene viser hva som er på databussen.

På dette stadiet ville det være greit å sette forsinkelsene i løkken () til 500 eller mer, for å følge med på hva som skjer.

Du bør få en lignende utgang på Serial Monitor som den ovenfor. Når Reset trykkes, går prosessoren gjennom 7 sykluser, og deretter ser den etter starten av programmet på steder $ FFFC og $ FFFD. Siden det ikke er noen fysiske adresser for 6502 å lese, må vi levere dem fra MEGA.

I utgangen ovenfor leser 6502 $ FFFC og $ FFFD og får $ 00 og $ 10 (lav byte, høy byte) som er starten på programmet på $ 1000. Prosessoren begynner deretter å utføre programmet på stedet $ 1000 (som ovenfor). I dette tilfellet leser den $ A9 og $ 55, dvs. LDA#$ 55 (Last 85 inn i akkumulatoren). Igjen ettersom det ikke er noe fysisk minne, simulerer MEGA det som leses fra databussen.

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

Programmet viser at prosessoren fungerer som den skal, men snart blir litt kjedelig, så fortsett til neste del.

Trinn 5: Neste trinn

Neste steg
Neste steg
Neste steg
Neste steg

"Haugen med spaghetti" ovenfor er sannsynligvis noe som det du vil ha etter dette stadiet.

Deretter må du legge 74HC373N og 74HC00N IC til brødbrettet.

Dessverre er ikke 373 -pinnene i tråd med databussen, så må koble til ledninger.

Koble 5v til pin 20.

Koble bakken til pinne 10.

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

og på samme måte med pinnene D1 til D7.

Q0 til Q7 er utgangene, og disse må koble til LED -teltet eller individuelle lysdioder og motstander.

Med 74HC00 er det bare to av portene som trengs

Koble 5v til pin 14.

Koble bakken til pinne 7.

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

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

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

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

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

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

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

Endelig endre linjen i onClock -prosedyren fra program1 til program2

setDataPins (program2 [offset]);

Trinn 6: Programmet

Programmet
Programmet
Programmet
Programmet

6502-Monitor-programmet inneholder de to 6502-rutinene beskrevet ovenfor.

Programmet er fortsatt under utvikling og er litt uryddig.

Når du kjører program2, kan forsinkelsene i sløyfen () være 50 eller mindre og til og med fjernet helt. Å kommentere Serial.print () -linjene får også 6502 til å kjøre raskere. Å koble pin 1 (OE) på 373 fra pin 11 (LE) gir forskjellige resultater. Ved å koble pin 1 og pin 11 på 373 fra NAND -portene kan du se hva som er på databussen ved hver klokkesyklus.

Du må kanskje knytte OE til bakken i stedet for å la den flyte ettersom de 8 utgangslinjene er deaktivert hvis denne pinnen går høyt. Når LE -pinnen er høy, er utgangspinnene de samme som inngangene. Hvis du tar LE -pinnen lavt, låses utgangene, dvs. hvis inngangspinnene endres, forblir utgangene de samme.

Jeg har prøvd å holde programmet så enkelt som mulig for å gjøre det lettere å forstå.

Å eksperimentere med tidsforsinkelser lar deg følge nøyaktig hva 6502 gjør.

Nedenfor er de to programmene (begge kjørt på adresse $ 1000) i 6502 Assembler:

program 1

LDA#$ 55

NOP

ROL

STA $ 1010

JMP $ 1000

ROL roterer innholdet i akkumulatoren en bit igjen, noe som betyr at $ 55 nå blir $ 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 det nå en fysisk adresse $ 8100, som er der 74HC373 er plassert 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å grunn av 74HC00 NAND -porten er signalene reversert.

I skjermbildet ovenfor har den andre skrivingen økt med 3 (ADC#$ 03) - gått fra $ 7F til $ 82.

I virkeligheten vil mer enn 2 linjer i adressebussen bli brukt for den spesifikke plasseringen av 373. Siden dette er den eneste fysiske adressen ut av den mulige 65536, demonstrerer den hvordan adressebussen fungerer. Du kan eksperimentere med forskjellige adressepinner og sette den på et annet sted. Selvfølgelig må du endre STA -operandene til det nye stedet. f.eks. Hvis du brukte adresselinjene A15 og A9, ville adressen være $ 8200 (32768 + 512).

Trinn 7: Konklusjon

Konklusjon
Konklusjon

Jeg har prøvd å demonstrere hvor enkelt det er å få en 6502 i gang.

Jeg er ikke ekspert på dette feltet, så jeg tar gjerne imot konstruktive kommentarer eller informasjon.

Du er velkommen til å utvikle dette videre, og jeg vil være interessert i hva du har gjort.

Jeg har tenkt å legge til en EEPROM, SRAM og en 6522 i prosjektet, i tillegg til å legge den på stripebrett i fremtiden.

Anbefalt: