Cuprins:

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

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

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

Trecând mai departe, am adăugat acum un Octal Latch, 8 LED-uri dreptunghiulare și o matrice de rezistențe de 220 Ohm pe placa principală. Există, de asemenea, un jumper între pinul comun al matricei și sol, astfel încât LED-urile să poată fi oprite. Poarta 74HC00 NAND a fost înlocuită cu o poartă 78LS08 AND, și cablarea la poartă a fost modificată. Poarta AND înseamnă că 6522 este acum situat la 6000 $ în loc de E000 $.

Există, de asemenea, un pin pentru conectarea unui ceas extern pentru a conduce 6502. Cu această conexiune, nu este nevoie ca MEGA să furnizeze un semnal de ceas. MEGA monitorizează în continuare ce se întâmplă cu procesorul ca înainte.

Am folosit un 20 pin 74HC373 pentru zăvor pentru că aveam ceva. Acest lucru a fost în regulă când era pe panou, dar un 74HC573 este compatibil cu magistrala și ar fi salvat o mulțime de cabluri. UCN5801A, care este un IC cu 22 de pini, ar putea fi, de asemenea, luat în considerare în circuit, dar cablajul va fi ușor diferit.

LED-ul superior, portocaliu unic, este un indicator de alimentare, iar cel roșu din stânga jos indică când are loc o scriere. Acesta din urmă va fi nesemnificativ dacă placa este rulată la viteze mai mari.

Circuitul modificat este deasupra (cu 74HC573).

Pasul 1: Programe demonstrative

Programe demonstrative
Programe demonstrative

Două programe de demonstrație simple sunt incluse în monitorul 6502, iar codul lor dezasamblat este aici.

Acest program încarcă 1 în registrul 6502 A și îl stochează în zăvor. Apoi adaugă 1 la registrul A și îl stochează în zăvor. Apoi revine la 1005 USD și procesul se repetă pentru totdeauna.

* = 1000

1000 A9 01 LDA # 01 $ 1002 8D 00 41 STA 4100 $ 1005 69 01 ADC # 01 $ 1007 8D 00 41 STA 4100 $ 100A 4C 05 10 JMP 1005 $ 100D. END

Acest program setează mai întâi DDR-ul portului B 6522 la ieșire. Apoi stochează 55 USD (B01010101) în port, precum și în zăvor. Registrul A se rotește apoi cu un pas la dreapta și deține acum $ AA (B10101010). Acesta este stocat din nou în portul B și în zăvor. Programul sare înapoi la 1005 USD și continuă pentru totdeauna.

* = 1000

1000 A9 FF LDA # $ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA # 55 $ 1007 38 SEC 1008 8D 00 60 STA $ 6000 100B 8D 00 41 STA $ 4100 100E 6A ROR A 100F 8D 00 60 STA $ 6000 1012 8D 00 41 STA $ 4100 1015 4C 05 10 JMP $ 1005 1018. END

Ochii ascuțiți dintre voi ar putea observa că LED-urile colorate prezintă un model diferit de cele verzi. Acest lucru se datorează faptului că cablul comun este conectat la 5v pe cele colorate, iar cel comun pe cele verzi este conectat la sol.

Schimbați această linie de cod în program2 sau program3.

setDataPins (program3 [offset]);

Un asamblator și un dezasamblator 6502 sunt instrumente utile pentru a vă codifica programele.

Pasul 2: Adăugarea unei EEPROM

Adăugarea unei EEPROM
Adăugarea unei EEPROM
Adăugarea unei EEPROM
Adăugarea unei EEPROM
Adăugarea unei EEPROM
Adăugarea unei EEPROM

Pentru placa EEPROM, am folosit o placă de benzi de 950 x 650 mm și știfturi masculine de 19 mm pentru a permite placa să o șteargă pe cea de dedesubt. Această placă se conectează la placa 6502 de mai jos. EEPROM este un ATMEL 28C256 care are 28 de pini și conține 32k x 8 biți de memorie. Acest lucru este mai mult decât adecvat pentru programele mici utilizate în prezent.

Nu am făcut o diagramă de circuit pentru această placă, dar este destul de direct modul în care se conectează la placa 6502 de mai jos. Aceste cipuri EEPROM nu sunt compatibile cu autobuzele, așa că trebuie conectate la pinii individuali, de aici toți „spaghetele verzi și albi”. Am rezolvat problema de legătură pe placa anterioară prin cablarea liniilor de date împreună pe partea inferioară a plăcii.

Cele 14 pini de adresă ale EEPROM se conectează la pinii corespunzători din partea stângă (fire verzi) și pinii I / O la pinii de date din dreapta (fire albe). Pinul 27 (WE) este conectat la pinul 28 (5v), pinul 22 (OE) este conectat la masă și pinul 20 (CE) este conectat la o poartă NAND. Cele 2 intrări ale porții NAND sunt conectate la A15 pe placa principală. Aceasta înseamnă că atunci când acest pin crește, poarta NAND dă un semnal scăzut pinului CE al EEPROM, ceea ce îl face activ. Cu această configurare înseamnă că EEPROM poate fi citită doar de 6502.

Deoarece EEPROM locuiește în top 32k pe harta de memorie, înseamnă că $ FFFC și $ FFFD pot păstra adresa de pornire pentru 6502 după ce a fost resetată. Cu 6522 având adresele sale între 6000 $ și 600F $ și zăvorul este de 4100 $, oprește orice conflict de memorie.

Vectorul NMI ($ FFFA și $ FFFB) și vectorul BRK / IRQ ($ FFFE și $ FFFF) ar putea fi, de asemenea, scrise în același mod.

Pasul 3: Programarea EEPROM

Programarea EEPROM
Programarea EEPROM
Programarea EEPROM
Programarea EEPROM

Pentru a stoca un program pe EEPROM, are nevoie de un programator. Am făcut una dintr-o placă de benzi, un Arduino Pro Mini, câteva 74HC595 și o priză ZIF. Inițial, programatorul a fost creat pentru un AT28C16 care are mai puține linii de adresă decât AT28C256, așa că a trebuit să fie modificat.

Diagrama circuitului arată cum să conectați ambele EEPROM-uri. Nu este clar din fotografie că cele două 595 de jetoane sunt cu capul în jos și nu așa cum se arată pe diagramă. Pinii 1 până la 7 din 595/1 se aliniază cu A1 până la A7 din EEPROM, indiferent de care este utilizat. Acest lucru salvează 7 fire de conectare. Acum placa arată puțin strânsă și asta pentru că inițial am folosit o priză DIL cu 24 de pini, care a fost înlocuită acum cu o priză ZIF cu 28 de pini mult mai mare.

Este inclus un program care funcționează cu tabloul meu. Programul va funcționa cu orice Arduino și 595 într-un circuit așa cum se arată. Am ales un 5v Pro Mini deoarece este compact și suficient de ieftin pentru a lăsa în set.

Pasul 4: Programele EEPROM

Programele EEPROM
Programele EEPROM

Există trei programe simple în programatorul EEPROM. Pentru a le utiliza, decomentați linia pe care doriți să o utilizați.

// Citiți din portul A din 6522

// const octet date = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Programul afișează o descărcare de memorie la finalizare. Partea din programul de mai jos vă oferă control deplin asupra a ceea ce doriți să scrieți sau să ștergeți, setează $ FFFC și $ FFFD și apoi afișează conținutul unui interval dat. Decomentați sau modificați parametrii după cum doriți. Adresele pot fi, de asemenea, introduse în format zecimal.

// ștergeEEPROM (422, 930, 0x41); // Folosiți pentru a șterge integral sau parțial EEPROM - start, end, byte

Serial.println („Programarea EEPROM”); sumă = program_numeric_data (0x1000); writeEEPROM (0x7ffc, 0x00); // Setați $ FFFC pentru 6502 writeEEPROM (0x7ffd, 0x90); // Setați $ FFFD pentru 6502 // writeEEPROM (0x1000, 0xA9); // Scrieți 1 octet de date Serial.println ("făcut"); String contur = "Scris" + suma (șir) + "octeți"; Serial.println (contur); Serial.println („Citirea EEPROM”); printContents (0x0000, 0x112f); // Setați intervalul pentru a afișa printContents (0x7ff0, 0x7fff); // Citește ultimii 16 octeți pe EEPROM

O ieșire prescurtată din program este deasupra.

Pasul 5: Rularea 6502 din EEPROM

Rularea 6502 Din EEPROM
Rularea 6502 Din EEPROM
Rularea 6502 Din EEPROM
Rularea 6502 Din EEPROM
Rularea 6502 Din EEPROM
Rularea 6502 Din EEPROM

EEPROM-ul programat poate fi acum introdus în placa sa, iar acest piggy se întoarce pe placa principală 6502, care se întoarce pe MEGA. Fotografiile cu vedere laterală și de sus de mai sus arată cum se potrivește totul.

6502 poate citi acum vectorul de pornire de la $ FFFC și $ FFFD (care este 9000 $) și apoi sări la programul care este stocat acolo. MEGA furnizează în continuare semnalul de ceas și programul său trebuie modificat pentru a furniza doar semnalul de ceas și pentru a monitoriza 6502. Un program modificat este furnizat pentru a face acest lucru.

Fotografia care rulează arată acest program care rulează.

9000 LDA # 00 $ A9 00

9002 STA $ 6003 8D 03 60 9005 LDA # $ FF A9 FF 9007 STA $ 6002 8D 02 60 900A LDA $ 6001 AD 01 60 900D STA $ 6000 8D 00 60 9010 EOR # $ FF 49 FF 9012 STA $ 4100 8D 00 41 9015 JMP $ 900A 4C 0A 90

Comutatoarele sunt conectate la portul A și programul afișează valoarea pe care o citește pe portul B și pe 74HC373 (care este ascuns în prezent). comutatoarele sunt conectate la masă, iar LED-urile sunt conectate la 5v. EOR # $ FF corectează problema zăvorului și a portului B care afișează diferite modele prin răsucirea biților înainte de a scrie în zăvor.

Pasul 6: Semnal de timp extern

Semnal de timp extern
Semnal de timp extern

Dacă se aplică un semnal de ceas pe pinul din partea de sus a plăcii, 6502 poate rula acum independent de MEGA. Desigur, are nevoie și de o sursă de alimentare. Am experimentat diferite ceasuri și chiar am rulat 6502 la 1 MHz cu un oscilator de cristal. MEGA nu poate ține pasul cu viteze mai mari, deci trebuie eliminat.

Am încercat și ieșirea dintr-un timer 555, dar asta nu funcționează. Cred că ar putea fi pentru că nu este un val pătrat? Când am fost conectat la una dintre ieșirile CD4017, acesta a condus 6502. Am aplicat în unul dintre kiturile de mai sus pentru a încerca să obțin un semnal de ceas.

Încă mă uit la diferite metode pentru a obține un semnal de ceas.

Pasul 7: Concluzie

Am arătat cum să construiesc niște circuite complexe și să obțin un „computer” foarte simplu pentru a lucra cu o cantitate minimă de piese. Desigur, computerul nu poate face multe în prezent sau este posibil să o facă în viitor.

La începutul anilor '80, cu VIC20-ul meu, mă obișnuiam să mă uit la mașina minunată și nu aveam prima idee despre cum să încep să pun una împreună. Vremurile au trecut și tehnologia la fel, dar este totuși plăcut să te întorci la elementele de bază și să fii mândru de ceva ce ai construit de la zero.

Pentru a dezvolta în continuare acest computer, intenționez să pun 2k de SRAM la 0000 $ la 2047 $ și să adaug un oscilator de 1 MHz. Va adăuga probabil ceva de genul unui CD4040 (contor / divizor binar de 12 etape), astfel încât să pot atinge viteze de ceas diferite.

S-ar putea chiar să adăugați un afișaj LCD pentru a oferi ieșiri de text, mai degrabă decât lumini intermitente. Programatorul EEPROM va trebui, de asemenea, să fie modificat pentru a face față programelor mai mari necesare pentru a rula un afișaj LCD.

Chiar dacă MEGA devine inutilă pentru funcționarea modelului 6502, este totuși util pentru depanarea codului mașinii. După cum știe oricine, codul mașinii conține întotdeauna erori!

Recomandat: