Innholdsfortegnelse:

6502 og 6522 Minimal datamaskin (med Arduino MEGA) Del 2: 4 trinn
6502 og 6522 Minimal datamaskin (med Arduino MEGA) Del 2: 4 trinn

Video: 6502 og 6522 Minimal datamaskin (med Arduino MEGA) Del 2: 4 trinn

Video: 6502 og 6522 Minimal datamaskin (med Arduino MEGA) Del 2: 4 trinn
Video: Minimum 6502 computer start ⚡️#homebrew #diyelectronics #8bit #breadboards #computerscience 2024, November
Anonim
6502 og 6522 Minimal datamaskin (med Arduino MEGA) Del 2
6502 og 6522 Minimal datamaskin (med Arduino MEGA) Del 2

I forlengelse av min forrige Instructable, har jeg nå satt 6502 på et stripebrett og lagt til en 6522 Versatile Interface Adapter (VIA). Igjen bruker jeg en WDC -versjon av 6522, ettersom den er en perfekt match for deres 6502. Ikke bare bruker disse nye brikkene mye mindre strøm enn de originale MOS -versjonene, men de kan kjøres med lavere hastigheter eller til og med trå gjennom et program uten problemer.

Arduino -programmet ble opprinnelig skrevet av Ben Eater (som har mange videoer på YouTube) og har blitt endret av meg for å oppnå dette resultatet.

Rekvisita

1 x WDC W65C02 -prosessor

1 x WDC W65C22 allsidig grensesnittadapter

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

1 x 10 cm bredt (35 linje) stripebrett

2 x 40 -pins DIL -kontakter

1 x 14 -pins DIL -kontakt

PCB Header Pins 2.54mm

PCB Header Sockets 2.54mm

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

1 x 1K motstand

1 x 3K3 motstand

2 x 0,1 uF keramiske kondensatorer

1 x 8 Way Water Light Marquee 5mm rød LED

Ulike fargede ledninger for tilkoblinger

8 mannlige - mannlige ledninger

Trinn 1: Kretskortet

Kretsstyret
Kretsstyret
Kretsstyret
Kretsstyret

Kretskortet er ganske kompakt og undersiden plugges direkte inn i Arduino MEGA. For å oppnå dette skyves pinnene så langt som mulig inn i plastholderne før de loddes til undersiden av brettet. Lengre pinner kunne ha blitt brukt til dette, men standardpinnene betyr at brettet hviler godt på toppen av MEGA.

Jeg har stilt opp 6502 og 6522 IC -ene slik at de bruker stripebrettsporene for å koble til MEGA. Det er også noen tilkoblinger for 6502 gjemt under IC. Når du lager brettet, var det første du skulle gjøre å kutte de 16 strimlene som skal kobles til Arduino sin doble rekke stikkontakter. Den ytre 2 trenger ikke å kuttes da 5v og Gnd er på begge sider. Neste loddetinn i de 2 radene med 18 pinner på undersiden, og de 2 radene med 18 stikkontakter på oversiden.

Etter det ble DIL -kontaktene loddet på plass og sporene kuttet mellom dem. Jeg kunne ha lagret en tilkobling ved å plassere pin 14 på 74HC00 på samme spor som 5v. Jeg klippet bare sporene da jeg var sikker på at de måtte være det mens jeg loddet tilkoblingstrådene. Ting går imidlertid ikke alltid som planlagt, jeg designet opprinnelig stripebrettet fra det forrige brødbrettet ved hjelp av pinne 2, 3 og 7 på Arduino, men disse stemmer ikke overens med hullene i stripebrettet, så måtte bruke pinne 18, 31 og 37. Derav koblingene på brettet mitt på 31 og 37. Du lurer kanskje på hvorfor jeg ikke brukte en av de ubrukte pinnene (23, 24 osv.) til klokken, dette er fordi de ikke støtter avbryter, så måtte bruke pin 18, 19, 20 eller 21 som gjør. Heldigvis er disse 4 pinnene på linje med hullene i stripebrettet og holder alt kompakt. Pin 18 er også lengst unna alle andre ledninger.

Du kan også legge merke til at det ferdige brettet mitt ikke er akkurat det samme som diagrammet mitt. Dette er fordi jeg fulgte andres diagram. Derfor forbindelsene til 74HC00. Jeg har også lagt til en strøm -LED og 2 ekstra rader med kontakter for Gnd og 5v, samt et par kondensatorer til.

Jeg kunne ha koblet de to datakontaktene, men dette ville bety at mange flere ledninger krysset brettet. Jeg valgte åtte ledninger for å gjøre dette som et midlertidig tiltak.

6522 -porten A og B har fått stikkontakter loddet til sporene slik at LED -markeringer enkelt kan settes inn.

Det er langt færre ledninger nå enn det var på brødbrettversjonen.

Trinn 2: Programmeringsteori

Programmeringsteori
Programmeringsteori

6522 har to I/O -porter i tillegg til mange andre funksjoner, men port A og B er lett tilgjengelige. For å sende ut data på porten, må Data Direction Register (DDR) settes deretter og dataene sendes til selve porten.

Med ovennevnte oppsett ligger 6522 på $ E000.

For å sende ut data på port B, er DDR på $ E002 satt til $ FF (255 - alle utganger) og data blir sendt til $ E000.

For å sende data på port A, er DDR på $ E003 satt til $ FF (255 - alle utganger) og data blir sendt til $ E001.

Koden nedenfor laster $ FF inn i 6502 A -registeret og skriver det til DDR B på $ E002. Den laster deretter $ 55 og skriver den til ORB. Koden roteres (gir $ AA) og skrives til ORB. Programmet hopper tilbake $ 1005 og gjentas uendelig. MERK: DDR trenger bare å initialiseres en gang.

Adresse Hexdump demontering

$ 1000 a9 ff LDA #$ ff $ 1002 8d 02 e0 STA $ e002 $ 1005 a9 55 LDA #$ 55 $ 1007 8d 00 e0 STA $ e000 $ 100a 6a ROR A $ 100b 8d 00 e0 STA $ e000 $ 100e 4c 05 10 JMP $ 1005

$ 55 i binær er 010101010 og $ AA er 10101010 som får lysdiodene til å veksle 4 på, 4 av.

Rask og skitten løsning:

Erstatt 74HC00 (Quad 2 input NAND Gate) med en 74HC08 (Quad 2 input AND Gate) og 6522 er nå plassert til $ 6000 i stedet for $ E000. Dette flytter den fra den øvre 32K til den nedre 32K av 6502s adresserbare minne.

Trinn 3: Arduino -programmet og -output

Arduino -programmet og -output
Arduino -programmet og -output

Siden 6502 ikke har noe RAM å lese fra, leverer Arduino programmet for å lese den. Når en klokkepuls oppdages på pinne 18, legger Arduino programdataene til databussen (Arduino -pinner 39, 41, 43, 45, 47, 49, 51 og 53). 6502 genererer sine egne adresser som bare overvåkes av Arduino på de partall 22 til 52. Arduino leverer også klokkeimpulsen på pinne 37. R/W -linjen til 6502 overvåkes på pinne 31.

Siden Arduino leverer dataene, har det så langt ikke vært mulig å få 6502 til å legge inn data fra VIA (med mindre du vet bedre).

Arduino -programmet er nedenfor, og en prøveutgang fra Serial Monitor er over.

Trinn 4: Konklusjon

Igjen har jeg prøvd å vise hvordan jeg konfigurerer en minimal "6502 datamaskin".

På dette stadiet er 6502 fortsatt avhengig av Arduino for å forsyne den med et program og en klokkepuls for at den skal kjøre.

Det er et skritt lenger enn da jeg satte det opp på brødbrett.

Jeg har ikke brukt 74HC373 denne gangen, men den mer komplekse 6522 for å låse datautgangene. 6522 har også to I/O -porter.

Jeg har tenkt å ta dette prosjektet videre ved å installere noe SRAM eller en EEPROM.

Anbefalt: