INHOUDSOPGAWE:

6502 minimale rekenaar (met Arduino MEGA) Deel 1: 7 stappe
6502 minimale rekenaar (met Arduino MEGA) Deel 1: 7 stappe

Video: 6502 minimale rekenaar (met Arduino MEGA) Deel 1: 7 stappe

Video: 6502 minimale rekenaar (met Arduino MEGA) Deel 1: 7 stappe
Video: Crab Apple BIOS; minimal Apple I replica (6502 homebrew) 2024, Julie
Anonim
6502 Minimale rekenaar (met Arduino MEGA) Deel 1
6502 Minimale rekenaar (met Arduino MEGA) Deel 1

Die 6502 mikroverwerker verskyn die eerste keer in 1975 en is ontwerp deur 'n klein span onder leiding van Chuck Peddle vir MOS Technology. Destyds is dit gebruik in videokonsoles en tuisrekenaars, waaronder die Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 en 64. Destyds was dit een van die goedkoopste op die mark. Dit het nog nooit regtig verdwyn nie en word nou deur stokperdjies en professionele persone vir baie toepassings gebruik.

Die weergawe wat ek gebruik, is die W65C02S6TPG-14 wat deur Western Design Center gemaak is en tien keer minder krag gebruik as die oorspronklike. Dit is spesiaal omdat dit nie op 1 MHz hoef te werk soos die oorspronklike chip nie. Dit kan baie stadiger loop of gebruik word om deur 'n program te stap en selfs tot 14 MHz verhoog. Die datablad vir die chip verduidelik die vermoëns daarvan. Ander 6502 skyfies het nie hierdie vermoë nie en sal nie so werk nie. Die skyfies is tans beskikbaar op Ebay sowel as ander bronne.

Voorrade

Alle gebruikte onderdele is tans beskikbaar op eBay, AliExpress en ander.

Stap 1: Die konsep

Ek het my inspirasie gekry van Ben Eater, wat 'n reeks video's op YouTube gemaak het oor die 6502 en vele ander aspekte van die bou van rekenaars en stroombane. Die program is oorspronklik deur hom geskryf en ek het hierdie en 'n paar van sy ontwerpe aangepas om met hierdie instruksies vorendag te kom. 'N Ander persoon wat my geïnspireer het, was Andrew Jacobs, 'n afdeling op GitHub waar hy 'n PIC -mikro gebruik om sy 6502 te beheer.

Net soos Ben, gebruik ek 'n Arduino MEGA om die 6502 te monitor. Ek gebruik ook die MEGA om die kloksein te verskaf, anders as Ben. Tans gebruik ek ook geen EEPROM's of RAM nie.

Stap 2: Vereistes

Vereistes
Vereistes

'N Lys van items is soos volg om hierdie' rekenaar 'te bou:

1 x Arduino MEGA

1 x Western Design Center W65C02S6TPG-14

1 x 74HC00N IC (Quad 2-input NAND-hek) of soortgelyk

1 x 74HC373N IC (Octal D-tipe deursigtige grendel) of soortgelyk

2 x 830 gat broodborde (1 met 'n knippie)

Verskeie Dupont manlike - manlike drade en skakeldrade

2 x LED's (ek het 5 mm blou gebruik, want u kan wegkom sonder weerstande)

1 x 12 mm kortstondige tasbare drukknopskakelaar PCB -gemonteerde SPST of soortgelyk

1 x 1K weerstand

2 x 0,1 uF keramiek kapasitors

1 x 8 Way Water Light Marquee 5mm rooi LED (soos hierbo) of 8 LED's en weerstande

OPMERKING: As u die kit wat nie gesoldeer is nie, kan u die LED's verkeerd inbring sodat dit 'n gewone katode is. Ek maak 'n vliegleiding vas (in plaas van die pen) sodat dit maklik elders kan aansluit. VCC word nou Ground. U kan die LED's natuurlik omdraai (op 'n saamgestelde item) en dit weer soldeer, maar dit is baie faff! Kits is tans beskikbaar op AliExpress.

Stap 3: Saamvoeg

Saamvoeg
Saamvoeg
Saamvoeg
Saamvoeg

Ek het dit makliker gevind om nuwe DuPont -drade te gebruik wat nie van hul lint geskei was vir die adres- en databusse nie.

Koppel pen 9 (A0) van die 6502 aan pen 52 van die MEGA, pen 10 (A1) van die 6502 tot pen 50 ens …

tot

Koppel pen 25 (A15) van die 6502 aan pen 22 van die MEGA.

Tot dusver 16 verbindings.

Net so

Koppel pen 26 (D7) van die 6502 aan pen 39 van die MEGA, pen 27 (D6) van die 6502 tot pen 41 ens …

tot

Koppel pen 33 (D0) van die 6502 aan pen 53 van die MEGA.

Nog 8 verbindings.

Koppel pen 8 (VDD) aan op 5v op die MEGA.

'N 0.1uF kondensator wat van pen 8 tot Gnd van die broodbord gekoppel is, kan hier nuttig wees, maar nie nodig nie.

Koppel pen 21 (VSS) aan Gnd op die MEGA.

Spelde 2, 4, 6, 36 en 38 kan aan 5v vasgemaak word

Koppel pen 37 (klok) aan pen 2 en pen 7 van die MEGA.

Koppel pen 34 (RWB) aan pen 3 van die MEGA.

Verbind pen 40 (Reset) soos hierbo aangedui.

Stap 4: Toets die stroombaan

Toets die stroombaan
Toets die stroombaan

Op hierdie stadium werk die 6502 en kan program1 gebruik word. As u die 8 -rigting markiestent (soos hierbo) gebruik, kan dit reguit in die broodbord geplaas word en die vliegleiding aan die grond gekoppel word, of u kan 8 LED's en weerstande gebruik. Die LED's sal wys wat op die databus is.

Op hierdie stadium sou dit ook goed wees om die vertragings in die Loop () op 500 of meer te stel, om te volg wat gebeur.

U moet 'n soortgelyke uitset op die seriële monitor kry soos hierbo. As op Reset gedruk word, gaan die verwerker deur 7 siklusse en dan kyk hy na die begin van die program op plekke $ FFFC en $ FFFD. Aangesien daar geen fisiese adresse is vir die 6502 om te lees nie, moet ons dit van die MEGA verskaf.

In die bogenoemde uitset lees die 6502 $ FFFC en $ FFFD en kry $ 00 en $ 10 (lae byte, hoë byte), wat die begin van die program met $ 1000 is. Die verwerker begin dan die program op die plek $ 1000 (soos hierbo) uitvoer. In hierdie geval lees dit $ A9 en $ 55, dit wil sê LDA#$ 55 (laai 85 in die akkumulator). Aangesien daar geen fisiese geheue -ligging is nie, simuleer die MEGA wat uit die databus gelees word.

$ 55 (85) gee die binêre patroon 01010101 en as dit 'n bietjie links draai, gee dit $ AA (170) 10101010.

Die program toon dat die verwerker korrek werk, maar gou 'n bietjie vervelig word, so gaan na die volgende deel.

Stap 5: Volgende stap

Volgende stap
Volgende stap
Volgende stap
Volgende stap

Die "stapel spaghetti" hierbo is waarskynlik iets soos wat u na hierdie stadium sal hê.

Vervolgens moet u die 74HC373N en 74HC00N IC's by die broodbord voeg.

Ongelukkig pas die 373 se penne nie by die databus nie, en moet dus met drade vasgemaak word.

Koppel 5v aan pen 20.

Koppel Grond aan pen 10.

Koppel pen 33 (D0) van die 6502 aan pen 3 (D0) van die 74HC373N

en ook met penne D1 tot D7.

Q0 tot Q7 is die uitsette, en dit moet gekoppel word aan die LED -tent of individuele LED's en weerstande.

Met die 74HC00 is slegs 2 van sy hekke nodig

Koppel 5v aan pen 14.

Koppel die grond aan pen 7.

Koppel pen 17 (A8) van die 6502 aan pen 1 (1A) van die 74HC00

Koppel pen 25 (A15) van die 6502 aan pen 2 (1B) van die 74HC00

Koppel pen 34 (R/W) van die 6502 aan pen 5 (2B) van die 74HC00

Koppel pen 3 (1Y) van die 74HC00 aan pen 4 (2A) van die 74HC00

Koppel pen 6 (2Y) van die 74HC00 aan pen 11 (LE) van die 74HC373N

Koppel pen 11 (LE) van die 74HC373N aan pen 1 (OE) van die 74HC373N

U kan 'n blou LED aan 1Y en grond sowel as 2Y aan die grond koppel, dit sal aandui wanneer die hek aktief is.

Laastens, verander die reël in die onClock -prosedure van program1 na program2

setDataPins (program2 [offset]);

Stap 6: Die program

Die program
Die program
Die program
Die program

Die 6502-Monitor-program bevat die twee 6502 roetines wat hierbo beskryf is.

Die program is nog onder ontwikkeling en is 'n bietjie onnet.

As u program2 uitvoer, kan die vertragings in die lus () 50 of minder wees en selfs heeltemal verwyder word. Die kommentaar op die reëls Serial.print () laat die 6502 ook vinniger loop. Ontkoppel pen 1 (OE) van die 373 van pen 11 (LE) lewer verskillende resultate. Deur pen 1 en pen 11 van die 373 van die NAND -hekke los te maak, kan u by elke kloksiklus sien wat op die databus is.

Miskien moet u OE aan die grond vasmaak eerder as om dit te laat dryf, aangesien die 8 uitsetlyne uitgeskakel is as hierdie pen hoog word. As die LE -pen hoog is, is die uitsetpenne dieselfde as die insette. As u die LE -pen laag neem, hou die uitsette vas, dws as die invoerpenne verander, bly die uitsette dieselfde.

Ek het probeer om die program so eenvoudig as moontlik te hou om dit makliker te verstaan.

As u met tydvertragings eksperimenteer, kan u presies volg wat die 6502 doen.

Hieronder is die twee programme (beide op adres $ 1000) in 6502 Assembler:

program 1

LDA#$ 55

GEEN P

ROL

STA $ 1010

JMP $ 1000

Die ROL draai die inhoud van die akkumulator 'n bietjie oor, wat beteken dat die $ 55 nou $ AA word.

In masjienkode (heks): A9 55 EA 2A 8D 10 10 4C 00 10

program 2

LDA#$ 01

STA $ 8100

ADC#$ 03

STA $ 8100

JMP $ 1005

In masjienkode (heks): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

In program2 is daar nou 'n fisiese adres $ 8100, waar die 74HC373 op die adresbus geleë is.

dws A15 van die 6502 is 32768 ($ 8000) en A8 is 256 ($ 0100) = 33024 ($ 8100).

As die 6502 dus skryf na $ 8100 (STA $ 8100), is die R/W van die 6502 laag en die data op die 6502 -databus word geblokkeer wanneer die 373 LE laag word. As gevolg van die 74HC00 NAND -hek, word die seine omgekeer.

In die skermafdruk hierbo het die tweede skryf met 3 toegeneem (ADC#$ 03) - van $ 7F na $ 82.

In werklikheid sou meer as 2 reëls van die adresbus gebruik word vir die spesifieke ligging van die 373. Aangesien dit die enigste fisiese adres uit die moontlike 65536 is, demonstreer dit hoe die adresbus werk. U kan met verskillende adrespenne eksperimenteer en dit op 'n ander plek plaas. Uiteraard moet u die STA -operande na die nuwe plek verander. bv. As u adresreëls A15 en A9 gebruik het, sou die adres $ 8200 (32768 + 512) wees.

Stap 7: Gevolgtrekking

Afsluiting
Afsluiting

Ek het probeer demonstreer hoe maklik dit is om 'n 6502 aan die gang te kry.

Ek is nie 'n kenner op hierdie gebied nie, en ek sal konstruktiewe kommentaar of inligting verwelkom.

U is welkom om dit verder te ontwikkel en ek sal belangstel in wat u gedoen het.

Ek is van plan om 'n EEPROM, SRAM en 'n 6522 by die projek te voeg, asook om dit in die toekoms op strook te plaas.

Aanbeveel: