Përmbajtje:

6502 Kompjuter minimal (me Arduino MEGA) Pjesa 1: 7 Hapa
6502 Kompjuter minimal (me Arduino MEGA) Pjesa 1: 7 Hapa

Video: 6502 Kompjuter minimal (me Arduino MEGA) Pjesa 1: 7 Hapa

Video: 6502 Kompjuter minimal (me Arduino MEGA) Pjesa 1: 7 Hapa
Video: Пару слов о Arduino. Сравнение Arduino Uno R3 и его китайского клона DCCduino 2024, Nëntor
Anonim
6502 Kompjuter minimal (me Arduino MEGA) Pjesa 1
6502 Kompjuter minimal (me Arduino MEGA) Pjesa 1

Mikroprocesori 6502 u shfaq për herë të parë në 1975 dhe u projektua nga një ekip i vogël i udhëhequr nga Chuck Peddle për MOS Technology. Atëherë ai përdorej në konzollat video dhe kompjuterët shtëpiak duke përfshirë Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 dhe 64. Në atë kohë ishte një nga më të lirëit në treg. Nuk është zhdukur kurrë dhe tani përdoret nga hobistët dhe profesionistët për shumë aplikime.

Versioni që po përdor është W65C02S6TPG-14 i cili është bërë nga Western Design Center dhe përdor dhjetë herë më pak energji se origjinali. Specialshtë e veçantë në atë që nuk ka pse të punojë në 1 MHz si çipi origjinal. Mund të funksionojë shumë më ngadalë ose të përdoret për një hap të vetëm përmes një programi dhe madje të rritet deri në 14 MHz. Fleta e të dhënave për çipin shpjegon aftësitë e tij. Çipat e tjerë 6502 nuk e kanë këtë aftësi dhe nuk do të funksionojnë në këtë mënyrë. Patate të skuqura janë aktualisht të disponueshme në Ebay, si dhe burime të tjera.

Furnizimet

Të gjitha pjesët e përdorura janë aktualisht të disponueshme në Ebay, AliExpress dhe të tjerët.

Hapi 1: Koncepti

Frymëzimin e kam nga Ben Eater i cili ka prodhuar një seri videosh në YouTube për 6502 dhe shumë aspekte të tjera të ndërtimit të kompjuterëve dhe qarqeve. Programi u shkrua nga ai fillimisht dhe unë e kam modifikuar këtë dhe disa nga modelet e tij për të dalë me këtë Udhëzues. Një person tjetër që më frymëzoi ishte Andrew Jacobs i cili ka një seksion në GitHub ku ai përdor një mikro PIC për të kontrolluar 6502 -in e tij.

Ashtu si Ben, unë jam duke përdorur një Arduino MEGA për të monitoruar 6502. Unë jam gjithashtu duke përdorur MEGA për të siguruar sinjalin e orës ndryshe nga Ben. Për momentin unë nuk jam duke përdorur asnjë EEPROM ose RAM.

Hapi 2: Kërkesat

Kërkesat
Kërkesat

Për të ndërtuar këtë "kompjuter" një listë artikujsh janë si më poshtë:

1 x Arduino MEGA

1 x Qendra e Dizajnit Perëndimor W65C02S6TPG-14

1 x 74HC00N IC (Porta NAND me katër hyrje) ose e ngjashme

1 x 74HC373N IC (shul transparent oktal i tipit D) ose të ngjashme

2 dërrasa buke me xham 830 (1 në majë)

Meshkuj të ndryshëm Dupont - meshkuj dhe tela lidhës

2 x LED (kam përdorur blu 5 mm pasi mund të largoheni pa rezistencë)

Çelës 1 x 12mm Tastile Tactile Push Button PCB i montuar SPST ose i ngjashëm

1 x 1K rezistencë

2 x 0.1 uF kondensatorë qeramikë

1 x 8 Way Light Water Marquee 5mm LED e kuqe (si më sipër) ose 8 LED dhe rezistorë

SHENIM: Nëse merrni kompletin e pashitur, mund t'i futni LED -të në mënyrë të gabuar në mënyrë që ato të jenë katodë e zakonshme. Unë bashkoj një plumb mizash (në vend të kunjit) në mënyrë që të lidhet lehtësisht diku tjetër. KQV tani bëhet Ground. Sigurisht që mund t'i ktheni LED-të përreth (në një artikull të montuar) dhe t'i lidhni përsëri, por kjo është shumë e gabuar! Komplete janë aktualisht në dispozicion në AliExpress.

Hapi 3: Vendosja së bashku

Duke e vënë atë së bashku
Duke e vënë atë së bashku
Duke e vënë atë së bashku
Duke e vënë atë së bashku

E kisha më të lehtë të përdorja telat e rinj DuPont që nuk ishin ndarë nga shiriti i tyre për autobusët e adresave dhe të dhënave.

Lidhni pinin 9 (A0) të 6502 me kunjin 52 të MEGA, pin 10 (A1) nga 6502 në pin 50 etj…

derisa

Lidhni pinin 25 (A15) të 6502 me kunjin 22 të MEGA.

16 lidhje deri më tani.

Po kështu

Lidhni kunjin 26 (D7) të 6502 me kunjin 39 të MEGA, pin 27 (D6) nga 6502 në pin 41 etj…

derisa

Lidhni kunjin 33 (D0) të 6502 me kunjin 53 të MEGA.

8 lidhje të tjera.

Lidhni pinin 8 (VDD) me 5v në MEGA.

Një kondensator 0.1uF i lidhur nga kunja 8 në Gnd të tabelës së bukës mund të jetë i dobishëm këtu, por jo i nevojshëm.

Lidhni pinin 21 (VSS) me Gnd në MEGA.

Kunjat 2, 4, 6, 36 dhe 38 mund të lidhen me 5v

Lidhni pinin 37 (Ora) me kunjin 2 dhe kunjin 7 të MEGA.

Lidhni kunjin 34 (RWB) me kunjin 3 të MEGA.

Lidhni pin 40 (Rivendos) si diagramin e mësipërm.

Hapi 4: Testimi i qarkut

Testimi i qarkut
Testimi i qarkut

Në këtë fazë 6502 do të funksionojë dhe programi 1 mund të përdoret. Nëse jeni duke përdorur raketë me 8 drejtime (si më sipër), ajo mund të futet drejt në tabelën e bukës dhe plumbi i mizës të lidhet me tokën, ose mund të përdorni 8 LED dhe rezistorë. LEDS do të tregojë atë që është në autobusin e të dhënave.

Në këtë fazë do të ishte gjithashtu të vendosnim vonesat në Loop () në 500 ose më shumë, për të ndjekur atë që po ndodh.

Ju duhet të merrni një dalje të ngjashme në Monitor Serial si ajo e mësipërme. Kur shtypet Reset, procesori kalon 7 cikle dhe pastaj kërkon fillimin e programit në vendet $ FFFC dhe $ FFFD. Meqenëse nuk ka adresa fizike për leximin e 6502, ne duhet t'i furnizojmë ato nga MEGA.

Në daljen e mësipërme, 6502 lexon $ FFFC dhe $ FFFD dhe merr $ 00 dhe $ 10 (Bajt i ulët, Bajt i lartë) që është fillimi i programit në $ 1000. Procesori pastaj fillon të ekzekutojë programin në vendndodhjen $ 1000 (si më sipër). Në këtë rast lexon $ A9 dhe $ 55, dmth LDA#$ 55 (Ngarkoni 85 në akumulator). Përsëri pasi nuk ka vendndodhje të kujtesës fizike, MEGA simulon atë që lexohet nga autobusi i të dhënave.

$ 55 (85) jep modelin binar 01010101 dhe kur rrotullohet 1 bit majtas jep $ AA (170) 10101010.

Programi tregon se procesori po punon si duhet, por së shpejti bëhet pak i mërzitshëm, kështu që në pjesën tjetër.

Hapi 5: Hapi tjetër

Hapi tjeter
Hapi tjeter
Hapi tjeter
Hapi tjeter

"Grumbulli i spagetit" më sipër është ndoshta diçka si ajo që do të keni pas kësaj faze.

Tjetra ju duhet të shtoni IC -të 74HC373N dhe 74HC00N në tabelën e bukës.

Fatkeqësisht kunjat e 373 nuk përputhen me autobusin e të dhënave, kështu që do të duhet të lidhen me tela.

Lidhni 5v me pin 20.

Lidhni Ground me pin 10.

Lidhni kunjin 33 (D0) të 6502 me kunjin 3 (D0) të 74HC373N

dhe gjithashtu me kunjat D1 deri D7.

Q0 në Q7 janë daljet dhe këto do të kenë nevojë të lidhen me raketë LED ose LED dhe rezistorë individualë.

Me 74HC00 nevojiten vetëm 2 porta të tij

Lidhni 5v me kunjin 14.

Lidhni Ground me pin 7.

Lidhni kunjin 17 (A8) të 6502 me kunjin 1 (1A) të 74HC00

Lidhni pinin 25 (A15) të 6502 me kunjin 2 (1B) të 74HC00

Lidhni kunjin 34 (R/W) të 6502 me pin 5 (2B) të 74HC00

Lidhni kunjin 3 (1Y) të 74HC00 me kunjin 4 (2A) të 74HC00

Lidhni kunjin 6 (2Y) të 74HC00 me kunjin 11 (LE) të 74HC373N

Lidhni pinin 11 (LE) të 74HC373N me pin 1 (OE) të 74HC373N

Ju mund të lidhni një LED blu në 1Y dhe tokë, si dhe 2Y në tokë, kjo do të tregojë kur porta është aktive.

Së fundi ndryshoni vijën në procedurën onClock nga program1 në program2

setDataPins (program2 [offset]);

Hapi 6: Programi

Programi
Programi
Programi
Programi

Programi 6502-Monitor përmban dy rutinat 6502 të përshkruara më sipër.

Programi është ende në zhvillim dhe është pak i çrregullt.

Kur ekzekutoni programin2, vonesat në lakin () mund të jenë 50 ose më pak dhe madje të hiqen krejt. Komentimi i linjave Serial.print () gjithashtu e bën 6502 të funksionojë më shpejt. Shkëputja e kunjit 1 (OE) të 373 nga kunja 11 (LE) prodhon rezultate të ndryshme. Shkëputja e kunjave 1 dhe pinit 11 të 373 nga portat NAND ju mundëson të shihni se çfarë ka në autobusin e të dhënave në çdo cikël të orës.

Ju mund të keni nevojë të lidhni OE me tokën në vend që ta lini atë të lundrojë pasi 8 linjat e daljes janë të çaktivizuara nëse kjo kunj shkon lart. Kur kunja LE është e lartë, kunjat e daljes janë të njëjta me hyrjet. Marrja e kapëses së ulët të LE çelësat e daljeve, domethënë nëse kunjat e hyrjes ndryshojnë, daljet qëndrojnë të njëjta.

Unë jam përpjekur ta mbaj programin sa më të thjeshtë për ta bërë më të lehtë për t’u kuptuar.

Eksperimentimi me vonesat në kohë ju mundëson të ndiqni saktësisht atë që po bën 6502.

Më poshtë janë dy programet (të dy drejtohen në adresën $ 1000) në 6502 Assembler:

programi 1

LDA#55 dollarë

JO

ROL

STA 1010 dollarë

JMP 1000 dollarë

ROL rrotullon përmbajtjen e akumulatorit një bit të mbetur, që do të thotë se 55 $ tani bëhen $ AA.

Në kodin e makinës (gjashtëkëndësh): A9 55 EA 2A 8D 10 10 4C 00 10

programi2

LDA#$ 01

STA 8100 dollarë

ADC#$ 03

STA 8100 dollarë

JMP 1005 dollarë

Në kodin e makinës (gjashtëkëndësh): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

Në programin2 tani ekziston një adresë fizike 8100 $ e cila është vendi ku 74HC373 ndodhet në autobusin e adresave.

dmth A15 e 6502 është 32768 (8000 dollarë) dhe A8 është 256 (0100 dollarë) = 33024 (8100 dollarë).

Pra, kur 6502 shkruan në 8100 dollarë (STA 8100 dollarë) R/W e 6502 është e ulët dhe të dhënat në autobusin e të dhënave 6502 mbyllen kur 373 LE zbret. Për shkak të Portës 74HC00 NAND, sinjalet përmbysen.

Në shtypjen e ekranit të mësipërm shkrimi i dytë është shtuar me 3 (ADC#$ 03) - shkoi nga $ 7F në 82 $.

Në realitet, më shumë se 2 linja të autobusit të adresave do të përdoren për vendndodhjen specifike të 373. Meqenëse kjo është adresa e vetme fizike nga 65536 e mundshme, ajo demonstron se si funksionon autobusi i adresës. Ju mund të eksperimentoni me kunja të ndryshme adresash dhe t'i vendosni në një vend tjetër. Sigurisht, do t'ju duhet të ndryshoni operandët STA në vendndodhjen e re. p.sh. Nëse përdorni linjat e adresave A15 dhe A9 adresa do të ishte 8200 dollarë (32768 + 512).

Hapi 7: Përfundimi

Përfundim
Përfundim

Unë jam përpjekur të demonstroj se sa e lehtë është të fillosh një 6502.

Unë nuk jam ekspert në këtë fushë, kështu që do të mirëprisja çdo koment apo informacion konstruktiv.

Jeni të mirëpritur ta zhvilloni këtë më tej dhe do të isha i interesuar për atë që keni bërë.

Kam ndërmend të shtoj një EEPROM, SRAM dhe një 6522 në projekt, si dhe ta vendos atë në tabelë në të ardhmen.

Recommended: