6502 & 6522 Minimal Computer (cu Arduino MEGA) Partea 2: 4 pași
6502 & 6522 Minimal Computer (cu Arduino MEGA) Partea 2: 4 pași
Anonim
6502 & 6522 Minimal Computer (cu Arduino MEGA) Partea 2
6502 & 6522 Minimal Computer (cu Arduino MEGA) Partea 2

În urma celor de la Instructable-ul meu anterior, am pus 6502 pe o placă de benzi și am adăugat un adaptor de interfață versatil 6522 (VIA). Din nou, folosesc o versiune WDC a modelului 6522, deoarece este o potrivire perfectă pentru 6502. Nu numai că aceste noi cipuri utilizează mult mai puțină putere decât versiunile originale MOS, dar pot fi rulate la viteze mai mici sau chiar trecute prin un program fără probleme.

Programul Arduino a fost scris inițial de Ben Eater (care are multe videoclipuri pe YouTube) și a fost modificat de mine pentru a obține acest rezultat.

Provizii

1 x procesor WDC W65C02

1 x adaptor de interfață WDC W65C22

1 x 74HC00N IC (poartă NAND cu 2 intrări Quad) sau similar

1 x 10cm lățime (35 linii) Placă pentru benzi

2 prize DIL de 40 pini

1 x soclu DIL cu 14 pini

Pinii antet PCB 2.54mm

Mufe antet PCB 2.54mm

1 x Comutator cu buton tactil momentan tactil de 12 mm SPST montat pe PCB sau similar

1 x rezistor 1K

1 x rezistor 3K3

2 x condensatori ceramici 0,1 uF

1 x 8 Way Water Light Carpeta LED roșu de 5 mm

Diverse fire colorate pentru conexiuni

8 fire de legătură tată - tată

Pasul 1: placa de circuit

Circuitul
Circuitul
Circuitul
Circuitul

Placa de circuit este destul de compactă, iar partea inferioară se conectează direct la Arduino MEGA. Pentru a realiza acest lucru, știfturile sunt împinse cât mai mult posibil în suporturile de plastic înainte de a fi lipite pe partea inferioară a plăcii. Pinii mai lungi ar fi putut fi folosiți pentru acest lucru, dar pinii standard înseamnă că placa se sprijină ferm deasupra MEGA.

Am aliniat IC-urile 6502 și 6522, astfel încât să folosească pistele de bandă pentru a se conecta la MEGA. Există, de asemenea, câteva conexiuni pentru 6502 ascunse sub IC. La realizarea plăcii, primul lucru de făcut era să tăiați cele 16 benzi care se vor conecta la rândul dublu de prize Arduino. 2 exterioare nu trebuie să fie tăiate, deoarece 5v și Gnd sunt pe ambele părți. Următorul lipit în cele 2 rânduri de 18 pini de pe partea inferioară și cele 2 rânduri de 18 prize pe partea superioară.

După aceea, prizele DIL au fost lipite în loc și șinele tăiate între ele. Aș fi putut salva o conexiune plasând pinul 14 al 74HC00 pe aceeași pistă ca 5v. Am tăiat șinele doar când am fost sigură că trebuie să fie în timp ce lipesc firele de conectare. Cu toate acestea, lucrurile nu merg întotdeauna la plan, inițial am proiectat placa de bandă de pe placa de pâine anterioară folosind pinii 2, 3 și 7 din Arduino, dar acestea nu se aliniază cu găurile din placa de benzi, așa că a trebuit să folosesc pinii 18, 31 și 37. Prin urmare, linkurile de pe placa mea de pe 31 și 37. S-ar putea să vă întrebați de ce nu am folosit unul dintre pinii neutilizați (23, 24 etc.) pentru ceas, asta pentru că nu acceptă întrerupe, așa că a trebuit să folosească pinul 18, 19, 20 sau 21 care o fac. Din fericire, acești 4 pini se aliniază cu găurile din placa de benzi și păstrează totul compact. Pinul 18 este, de asemenea, cel mai departe de toate celelalte fire.

Puteți observa, de asemenea, că tabloul meu completat nu este exact același cu diagrama mea. Acest lucru se datorează faptului că urmăream diagrama altcuiva. De aici conexiunile la 74HC00. Am adăugat, de asemenea, un LED de alimentare și încă 2 rânduri de prize pentru Gnd și 5v, precum și încă câteva condensatoare.

Aș fi putut conecta cele 2 prize de date, dar acest lucru ar însemna mult mai multe fire care traversează placa. Am optat pentru 8 fire de legătură pentru a face acest lucru ca măsură temporară.

Porturile 6522 A și B au avut prize lipite pe șenile lor, astfel încât mărcile LED să poată fi inserate cu ușurință.

Acum sunt mult mai puține fire decât erau pe versiunea de panou de pâine.

Pasul 2: Teoria programării

Teoria programării
Teoria programării

6522 are două porturi I / O, precum și multe alte caracteristici, dar porturile A și B sunt ușor accesibile. Pentru a transmite date pe port, Registrul de direcție a datelor (DDR) trebuie setat în consecință și datele trimise către portul însuși.

Odată cu configurarea de mai sus, modelul 6522 este situat la $ E000.

Pentru a transmite date pe portul B, DDR la $ E002 este setat la $ FF (255 - toate ieșirile) și datele sunt trimise la $ E000.

Pentru a transmite date pe portul A, DDR la $ E003 este setat la $ FF (255 - toate ieșirile) și datele sunt trimise la $ E001.

Codul de mai jos încarcă $ FF în registrul 6502 A și îl scrie pe DDR B la $ E002. Apoi încarcă 55 USD și îl scrie pe ORB. Codul este rotit (dând AA $) și scris către ORB. Programul sare înapoi până la 1005 USD și se repetă la nesfârșit. NOTĂ: DDR-ul trebuie inițializat o singură dată.

Adresa Dezasamblare Hexdump

$ 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 în binar este 010101010 și $ AA este 10101010 ceea ce face ca LED-urile să alterneze 4 pornite, 4 oprite.

Remediere rapidă și murdară:

Înlocuiți 74HC00 (intrare Quad 2 NAND Gate) cu un 74HC08 (intrare quad 2 ȘI poartă), iar 6522 este acum situat la 6000 $ în loc de E000 $. Aceasta îl mută de la 32K superioare la 32K inferioare ale memoriei adresabile a lui 6502.

Pasul 3: Programul și ieșirea Arduino

Programul și ieșirea Arduino
Programul și ieșirea Arduino

Deoarece 6502 nu are memorie RAM de la care să citească, Arduino furnizează programul pentru citire. Când se detectează un impuls de ceas pe pinul 18, Arduino introduce datele programului pe magistrala de date (pinii Arduino 39, 41, 43, 45, 47, 49, 51 și 53). 6502 generează propriile adrese care sunt monitorizate numai de Arduino pe pinii cu număr par 22 la 52. Arduino furnizează, de asemenea, impulsul de ceas pe pinul 37. Linia R / W a modelului 6502 este monitorizată pe pinul 31.

Deoarece Arduino furnizează date, până acum nu a fost posibil să obțineți 6502 pentru a introduce date de la VIA (dacă nu știți mai bine).

Programul Arduino este mai jos și o mostră de ieșire din Serial Monitor este mai sus.

Pasul 4: Concluzie

Din nou, am încercat să arăt cum să configurez un „6502 Computer” minim.

În această etapă, 6502 se bazează încă pe Arduino pentru a-l furniza cu un program și un impuls de ceas pentru ca acesta să ruleze.

Este un pas mai departe decât atunci când l-am pus pe panou.

De data aceasta nu am folosit 74HC373, ci 6522 mai complex pentru a bloca ieșirile de date. De asemenea, modelul 6522 are două porturi I / O.

Intenționez să duc acest proiect mai departe prin instalarea unor SRAM sau EEPROM.