Cuprins:

6502 Minimal Computer (cu Arduino MEGA) Partea 1: 7 pași
6502 Minimal Computer (cu Arduino MEGA) Partea 1: 7 pași

Video: 6502 Minimal Computer (cu Arduino MEGA) Partea 1: 7 pași

Video: 6502 Minimal Computer (cu Arduino MEGA) Partea 1: 7 pași
Video: Invatam programare de la zero cu Arduino | LIVE#36 2024, Iulie
Anonim
6502 Minimal Computer (cu Arduino MEGA) Partea 1
6502 Minimal Computer (cu Arduino MEGA) Partea 1

Microprocesorul 6502 a apărut pentru prima dată în 1975 și a fost proiectat de o mică echipă condusă de Chuck Peddle pentru tehnologia MOS. Pe atunci era folosit în consolele video și computerele de acasă, inclusiv Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 și 64. În acel moment era unul dintre cele mai ieftine de pe piață. Nu a dispărut niciodată cu adevărat și acum este folosit de amatori și profesioniști pentru multe aplicații.

Versiunea pe care o folosesc este W65C02S6TPG-14, care este realizată de Western Design Center și folosește de zece ori mai puțină energie decât cea originală. Este special prin faptul că nu trebuie să ruleze la 1 MHz ca și cipul original. Poate rula mult mai încet sau poate fi folosit pentru a face un singur pas printr-un program și chiar a crescut până la 14 MHz. Fișa tehnică pentru cip explică capacitățile sale. Alte cipuri 6502 nu au această capacitate și nu vor rula așa. Cipurile sunt disponibile în prezent pe Ebay, precum și în alte surse.

Provizii

Toate piesele utilizate sunt disponibile în prezent pe Ebay, AliExpress și altele.

Pasul 1: Conceptul

M-am inspirat de la Ben Eater, care a produs o serie de videoclipuri pe YouTube despre 6502 și multe alte aspecte ale construirii computerelor și circuitelor. Programul a fost scris de el inițial și am modificat acest lucru și câteva dintre proiectele sale pentru a veni cu acest Instructable. O altă persoană care m-a inspirat a fost Andrew Jacobs, care are o secțiune pe GitHub unde folosește un micro PIC pentru a-și controla 6502.

La fel ca Ben, folosesc un Arduino MEGA pentru a monitoriza 6502. De asemenea, folosesc MEGA pentru a furniza semnalul de ceas spre deosebire de Ben. În prezent, nu folosesc nici EEPROM-uri, nici RAM.

Pasul 2: Cerințe

Cerințe
Cerințe

Pentru a construi acest „computer”, o listă de elemente este următoarea:

1 x Arduino MEGA

1 x Western Design Center W65C02S6TPG-14

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

1 x 74HC373N IC (zăvor transparent octal tip D) sau similar

2 plăci de pâine cu 830 găuri (1 la vârf)

Diverse cabluri Dupont masculin - masculin și fire de legătură

2 x LED-uri (am folosit albastru de 5 mm, deoarece puteți scăpa fără rezistențe)

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

1 x rezistor 1K

2 x condensatori ceramici 0,1 uF

1 x 8 Way Water Light Marquee 5mm LED roșu (ca mai sus) sau 8 LED-uri și rezistențe

NOTĂ: Dacă primiți kitul nevândut, puteți introduce LED-urile în sens greșit, astfel încât să fie catod comun. Atașez un cablu de zbor (în loc de știft), astfel încât să se poată conecta cu ușurință în altă parte. VCC devine acum Ground. Desigur, puteți întoarce LED-urile (pe un articol asamblat) și le puteți re-lipi, dar aceasta este o mulțime de faff! Kituri sunt disponibile în prezent pe AliExpress.

Pasul 3: Puneți-l împreună

Punând laolaltă
Punând laolaltă
Punând laolaltă
Punând laolaltă

Mi s-a părut mai ușor să folosesc fire DuPont noi care nu fuseseră separate de panglica lor pentru adresă și autobuze de date.

Conectați pinul 9 (A0) al 6502 la pinul 52 al MEGA, pinul 10 (A1) al 6502 la pinul 50 etc …

pana cand

Conectați pinul 25 (A15) al 6502 la pinul 22 al MEGA.

16 conexiuni până acum.

De asemenea

Conectați pinul 26 (D7) al 6502 la pinul 39 al MEGA, pinul 27 (D6) al modelului 6502 la pinul 41 etc …

pana cand

Conectați pinul 33 (D0) al 6502 la pinul 53 al MEGA.

Încă 8 conexiuni.

Conectați pinul 8 (VDD) la 5v pe MEGA.

Un condensator de 0.1uF conectat de la pinul 8 la Gnd al plăcii de pâine ar putea fi util aici, dar nu este necesar.

Conectați pinul 21 (VSS) la Gnd pe MEGA.

Pinii 2, 4, 6, 36 și 38 pot fi legați la 5v

Conectați pinul 37 (Ceas) la pinul 2 și pinul 7 al MEGA.

Conectați pinul 34 (RWB) la pinul 3 al MEGA.

Conectați pinul 40 (Resetare) ca în diagrama de mai sus.

Pasul 4: Testarea circuitului

Testarea circuitului
Testarea circuitului

În această etapă, 6502 va funcționa și programul 1 poate fi utilizat. Dacă utilizați butonul cu 8 căi (ca mai sus), acesta poate fi introdus direct în panoul de control și cablul de conectare conectat la masă sau puteți utiliza 8 LED-uri și rezistențe. LED-urile vor arăta ce se află pe magistrala de date.

În acest stadiu, ar fi la fel de bine să stabiliți întârzierile în Loop () la 500 sau mai mult, pentru a urmări ceea ce se întâmplă.

Ar trebui să obțineți o ieșire similară pe monitorul serial ca cea de mai sus. Când Reset este apăsat, procesorul parcurge 7 cicluri și apoi caută începutul programului în locațiile $ FFFC și $ FFFD. Întrucât nu există adrese fizice pentru citirea modelului 6502, trebuie să le furnizăm din MEGA.

În rezultatul de mai sus, 6502 citește $ FFFC și $ FFFD și primește 00 $ și 10 $ (octet redus, octet ridicat), care este începutul programului la 1000 USD. Procesorul începe apoi să execute programul la locația 1000 $ (ca mai sus). În acest caz, se citește $ A9 și $ 55, adică LDA # $ 55 (Încărcați 85 în acumulator). Din nou, deoarece nu există o locație de memorie fizică, MEGA simulează ceea ce este citit din magistrala de date.

$ 55 (85) dă modelul binar 01010101 și când este rotit cu 1 bit la stânga dă $ AA (170) 10101010.

Programul arată că procesorul funcționează corect, dar în curând devine puțin plictisitor, deci la următoarea parte.

Pasul 5: Pasul următor

Urmatorul pas
Urmatorul pas
Urmatorul pas
Urmatorul pas

„Mormanul de spaghete” de mai sus este probabil ceva de genul a ceea ce veți avea după această etapă.

Apoi, trebuie să adăugați IC-urile 74HC373N și 74HC00N la panoul de verificare.

Din păcate, pinii 373 nu se aliniază cu magistrala de date, așa că va trebui conectat cu fire.

Conectați 5v la pinul 20.

Conectați masa la pinul 10.

Conectați pinul 33 (D0) al 6502 la pinul 3 (D0) al 74HC373N

și la fel cu pinii D1 până la D7.

Q0 la Q7 sunt ieșirile și acestea vor trebui conectate la LED-ul de marcă sau la LED-uri și rezistențe individuale.

Cu 74HC00 sunt necesare doar 2 porți

Conectați 5v la pinul 14.

Conectați masa la pinul 7.

Conectați pinul 17 (A8) al 6502 la pinul 1 (1A) al 74HC00

Conectați pinul 25 (A15) al modelului 6502 la pinul 2 (1B) al modelului 74HC00

Conectați pinul 34 (R / W) al 6502 la pinul 5 (2B) al 74HC00

Conectați pinul 3 (1Y) al 74HC00 la pinul 4 (2A) al 74HC00

Conectați pinul 6 (2Y) al 74HC00 la pinul 11 (LE) al 74HC373N

Conectați pinul 11 (LE) al 74HC373N la pinul 1 (OE) al 74HC373N

Puteți conecta un LED albastru la 1Y și la masă, precum și 2Y la masă, acest lucru va indica când poarta este activă.

În cele din urmă, schimbați linia din procedura onClock din program1 în program2

setDataPins (program2 [offset]);

Pasul 6: Programul

Programul
Programul
Programul
Programul

Programul 6502-Monitor conține cele două rutine 6502 descrise mai sus.

Programul este încă în curs de dezvoltare și este puțin dezordonat.

Când rulați programul 2, întârzierile în buclă () pot fi de 50 sau mai puțin și chiar eliminate complet. Comentând liniile Serial.print (), de asemenea, 6502 rulează mai repede. Deconectarea pinului 1 (OE) a 373 de la pinul 11 (LE) produce rezultate diferite. Deconectarea pinului 1 și a pinului 11 din 373 de la porțile NAND vă permite să vedeți ce este pe magistrala de date la fiecare ciclu de ceas.

Este posibil să fie necesar să legați OE la sol, mai degrabă decât să îl lăsați plutitor, deoarece cele 8 linii de ieșire sunt dezactivate dacă acest pin crește. Când pinul LE este ridicat, pinii de ieșire sunt aceiași cu intrările. Luând pinul LE scăzut blochează ieșirile, adică dacă pinii de intrare se schimbă, ieșirile rămân aceleași.

Am încercat să mențin programul cât mai simplu posibil pentru a face mai ușor de înțeles.

Experimentarea cu întârzieri vă permite să urmăriți exact ceea ce face 6502.

Mai jos sunt cele două programe (ambele rulează la adresa 1000 $) în 6502 Assembler:

program1

LDA # 55 USD

NOP

ROL

STA 1010 USD

JMP 1000 USD

ROL rotește conținutul acumulatorului cu un stânga, ceea ce înseamnă că acum 55 USD devin AA $.

În codul mașinii (hex): A9 55 EA 2A 8D 10 10 4C 00 10

program2

LDA # $ 01

STA 8100 USD

ADC # 03 $

STA 8100 USD

JMP 1005 USD

În codul mașinii (hex): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

În program2 există acum o adresă fizică de 8100 USD, unde 74HC373 este amplasat pe magistrala de adrese.

adică A15 din 6502 este 32768 (8000 dolari) și A8 este 256 (0100 dolari) = 33024 (8100 dolari).

Deci, atunci când 6502 scrie la 8100 USD (STA 8100 USD), R / W al 6502 este scăzut și datele de pe magistrala de date 6502 sunt blocate atunci când 373 LE scade. Datorită porții NH 74HC00, semnalele sunt inversate.

În ecranul de mai sus, a doua scriere a crescut cu 3 (ADC # 03 $) - a trecut de la 7F la 82 $.

În realitate, mai mult de 2 linii ale magistralei de adrese ar fi utilizate pentru locația specifică a 373. Deoarece aceasta este singura adresă fizică din 65536 posibilă, aceasta demonstrează modul în care funcționează magistrala de adrese. Puteți experimenta cu pini de adresă diferiți și puneți-l într-o altă locație. Desigur, va trebui să schimbați operanzii STA în noua locație. de exemplu. Dacă ați utiliza liniile de adresă A15 și A9, adresa ar fi de 8200 USD (32768 + 512).

Pasul 7: Concluzie

Concluzie
Concluzie

Am încercat să demonstrez cât de ușor este să funcționezi un 6502.

Nu sunt un expert în acest domeniu, așa că aș saluta orice comentarii sau informații constructive.

Sunteți binevenit să dezvoltați acest lucru în continuare și aș fi interesat de ceea ce ați făcut.

Intenționez să adaug o EEPROM, SRAM și un 6522 la proiect, precum și să le pun pe bandă în viitor.

Recomandat: