Sadržaj:

6502 Minimalni računar (sa Arduino MEGA) Dio 3: 7 koraka
6502 Minimalni računar (sa Arduino MEGA) Dio 3: 7 koraka

Video: 6502 Minimalni računar (sa Arduino MEGA) Dio 3: 7 koraka

Video: 6502 Minimalni računar (sa Arduino MEGA) Dio 3: 7 koraka
Video: Макетный компьютер с минималистичным дизайном №6. Начало работы с микрокодом 2024, Decembar
Anonim
6502 Minimalni računar (sa Arduino MEGA -om) 3. dio
6502 Minimalni računar (sa Arduino MEGA -om) 3. dio

Idući dalje, sada sam na glavnu ploču dodao oktalno zasun, 8 pravokutnih LED dioda i otpornički niz od 220 ohma. Postoji i kratkospojnik između zajedničkog pina niza i mase, tako da se LED diode mogu isključiti. 74HC00 NAND vrata su zamijenjena vratima 78LS08 AND, ožičenje do kapije je također promijenjeno. AND gate znači da se 6522 sada nalazi na 6000 USD umjesto E000 USD.

Postoji i pin za povezivanje vanjskog sata za pogon 6502. Sa ovom vezom, nema potrebe da MEGA daje signal sata. MEGA i dalje prati što se događa s procesorom kao i do sada.

Koristio sam 20 -pinski 74HC373 za zasun jer sam ga imao. To je bilo u redu kada ste bili na matičnoj ploči, ali 74HC573 je kompatibilan sa sabirnicom i uštedio bi mnogo ožičenja. UCN5801A koji je 22 -polni IC također se može uzeti u obzir u krugu, ali ožičenje će biti malo drugačije.

Gornja, pojedinačna narandžasta LED dioda je indikator napajanja, a donja lijeva crvena označava kada se vrši pisanje. Ovo posljednje bit će beznačajno ako se ploča koristi većim brzinama.

Izmijenjeni krug je gore (sa 74HC573).

Korak 1: Demonstracijski programi

Demonstracijski programi
Demonstracijski programi

Dva jednostavna programa za demonstraciju su uključena u monitor 6502 i njihov rastavljeni kod je ovdje.

Ovaj program učitava 1 u registar 6502 A i pohranjuje ga u zasun. Zatim dodaje 1 u A registar i sprema ga u zasun. Zatim se vraća na 1005 USD i proces se ponavlja zauvijek.

* = 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

Ovaj program prvo postavlja DDR izlaz 6522 porta B na izlaz. Zatim čuva 55 USD (B01010101) u portu, kao i zasun. Registar A tada se okreće za 1 korak udesno i sada sadrži $ AA (B10101010). Ovo se ponovno sprema u priključak B i zasun. Program se vraća na 1005 USD i nastavlja se zauvijek.

* = 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 USD 100E 6A ROR A 100F 8D 00 60 STA 6000 1012 8D 00 41 STA 4100 USD 1015 4C 05 10 JMP $ 1005 1018. END

Oštre oči među vama mogu primijetiti da LED u boji pokazuju drugačiji uzorak od zelenih. To je zato što je zajednički kabel spojen na 5v na obojenim, a zajednički na zelenim spojen je na masu.

Promijenite ovu liniju koda u program2 ili program3.

setDataPins (program3 [pomak]);

Asembler i rastavljač 6502 korisni su alati za kodiranje vaših programa.

Korak 2: Dodavanje EEPROM -a

Dodavanje EEPROM -a
Dodavanje EEPROM -a
Dodavanje EEPROM -a
Dodavanje EEPROM -a
Dodavanje EEPROM -a
Dodavanje EEPROM -a

Za EEPROM ploču koristio sam 950 x 650 mm trakastu ploču i 19 mm muške igle zaglavlja kako bih omogućio da ploča očisti onu ispod. Ova ploča se priključuje na ploču 6502 ispod. EEPROM je ATMEL 28C256 koji ima 28 pinova i sadrži 32k x 8 bita memorije. To je više nego primjereno za male programe koji se trenutno koriste.

Nisam napravio dijagram kola za ovu ploču, ali je prilično jednostavno kako se povezuje sa pločom 6502 ispod. Ovi EEPROM čipovi nisu prikladni za korištenje u autobusu pa ih je potrebno priključiti na pojedinačne pinove, dakle svi "zeleni i bijeli špageti". Riješio sam problem premošćivanja na prethodnoj ploči spajanjem linija podataka na donjoj strani ploče.

14 adresnih pinova EEPROM -a spajaju se na odgovarajuće pinove na lijevoj strani (zelene žice), a I/O pinovi na pinove za podatke s desne strane (bijele žice). Pin 27 (WE) je spojen na pin 28 (5v), pin 22 (OE) je spojen na masu, a pin 20 (CE) je spojen na NAND vrata. Dva ulaza NAND kapije su spojena na A15 na glavna ploča. To znači da kada ovaj pin pređe visoko, NAND vrata daju nizak signal CE pinu EEPROM -a što ga čini aktivnim. S ovim postavljanjem znači da EEPROM može čitati samo 6502.

Kako EEPROM živi u prvih 32k na memorijskoj karti, to znači da $ FFFC i $ FFFD mogu držati početnu adresu za 6502 nakon što je resetirana. S obzirom da 6522 ima adrese između 6000 i 600 USD, a reza je 4100 USD, zaustavlja sve memorijske sukobe.

NMI vektor ($ FFFA i $ FFFB) i BRK / IRQ vektor ($ FFFE anf $ FFFF) takođe se mogu napisati na isti način.

Korak 3: Programiranje EEPROM -a

Programiranje EEPROM -a
Programiranje EEPROM -a
Programiranje EEPROM -a
Programiranje EEPROM -a

Za pohranu programa na EEPROM -u potreban mu je programer. Napravio sam jedan od strip ploče, Arduino Pro Mini, nekoliko 74HC595 i i ZIF utičnicu. Prvobitno je programer bio napravljen za AT28C16 koji ima manje adresnih linija od AT28C256 pa se morao promijeniti.

Dijagram kola prikazuje kako spojiti oba ova EEPROM -a. Na fotografiji nije jasno da su dva 595 čipa okrenuta naopačke, a ne kako je prikazano na dijagramu. Igle 1 do 7 od 595/1 podudaraju se s A1 do A7 EEPROM -a, bez obzira na to koji se koristi. Time se štedi 7 spojnih žica. Ploča sada izgleda malo tijesno, a to je zato što sam prvotno koristio 24 -pinski DIL utičnicu koja je sada zamijenjena mnogo većom 28 -polnom ZIF utičnicom.

Uključen je program koji radi s mojom pločom. Program će raditi sa bilo kojim Arduinom i 595 -ima u krugu kao što je prikazano. Odabrao sam 5v Pro Mini jer je kompaktan i dovoljno jeftin da ga ostavite u kompletu.

Korak 4: EEPROM programi

EEPROM programi
EEPROM programi

U EEPROM programeru postoje tri jednostavna programa. Da biste ih koristili, samo uklonite komentar s linije koju želite koristiti.

// Čitanje s priključka A od 6522

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

Program prikazuje ispis memorije kada završi. Donji dio programa daje vam potpunu kontrolu nad onim što želite napisati ili izbrisati, postavlja $ FFFC & $ FFFD, a zatim prikazuje sadržaj zadanog raspona. Samo komentirajte ili promijenite parametre kako vam je potrebno. Adrese se također mogu unijeti u decimalnom obliku.

// brisanjeEEPROM -a (422, 930, 0x41); // Koristi se za brisanje cijelog ili dijela EEPROM -a - početak, kraj, bajt

Serial.println ("Programiranje EEPROM -a"); iznos = broj_programa_podataka (0x1000); writeEEPROM (0x7ffc, 0x00); // Postavi $ FFFC za 6502 writeEEPROM (0x7ffd, 0x90); // Postavi $ FFFD za 6502 // writeEEPROM (0x1000, 0xA9); // Upišite 1 bajt podataka Serial.println ("učinjeno"); String outline = "Pisano" + (String) iznos + "bajti"; Serial.println (outline); Serial.println ("Čitanje EEPROM -a"); printContents (0x0000, 0x112f); // Postavljanje raspona za prikaz printContents (0x7ff0, 0x7fff); // Čita posljednjih 16 bajtova na EEPROM -u

Skraćeni izlaz iz programa je gore.

Korak 5: Pokretanje 6502 s EEPROM -a

Pokretanje 6502 s EEPROM -a
Pokretanje 6502 s EEPROM -a
Pokretanje 6502 s EEPROM -a
Pokretanje 6502 s EEPROM -a
Pokretanje 6502 s EEPROM -a
Pokretanje 6502 s EEPROM -a

Programirani EEPROM sada se može umetnuti u njegovu ploču, a ovaj se svinjčić vraća na glavnu ploču 6502, koja se svinja vraća na MEGA -u. Gore prikazane bočne i gornje fotografije prikazuju kako se sve to slaže.

6502 sada može pročitati početni vektor iz $ FFFC i $ FFFD (što je 9000 USD), a zatim skočiti na program koji je tamo pohranjen. MEGA još uvijek daje signal sata, a njegov program treba promijeniti kako bi pružio samo signal sata i nadzirao 6502. Za to je predviđen izmijenjeni program.

Pokrenuta fotografija prikazuje da je ovaj program pokrenut.

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

Prekidači su priključeni na port A i program prikazuje vrijednost koju čita na portu B i 74HC373 (koji je trenutno zatamnjen). prekidači su spojeni na masu, a LED diode su spojene na 5v. EOR #$ FF ispravlja problem zasuna i porta B koji prikazuju različite obrasce preklapanjem bitova prije upisivanja u zasun.

Korak 6: Spoljašnji vremenski signal

Spoljašnji vremenski signal
Spoljašnji vremenski signal

Ako se signal sata primijeni na pin na vrhu ploče, 6502 sada može raditi neovisno o MEGA -i. Naravno, potrebno mu je i napajanje. Eksperimentirao sam s različitim taktovima, pa čak i pokrenuo 6502 na 1MHz s kristalnim oscilatorom. MEGA ne može pratiti veće brzine, pa se mora ukloniti.

Pokušao sam i izlaz sa 555 tajmera, ali to ne uspijeva. Mislim da je to možda zato što nije kvadratni val? Kad je spojen na jedan od izlaza CD4017, ipak je pokretao 6502. Zakrpao sam jedan od gore navedenih kompleta kako bih pokušao dobiti signal sata.

Još uvijek tražim različite metode za dobivanje takta.

Korak 7: Zaključak

Pokazao sam kako izgraditi složena kola i navesti vrlo jednostavan "računar" za rad s minimalnom količinom dijelova. Doduše, računar trenutno ne može učiniti mnogo ili će vjerovatno to učiniti u budućnosti.

Ranih 80 -ih, sa svojim VIC20, znao sam se zapitati o sjajnoj mašini i nisam imao prvu ideju kako da počnem da sastavljam jednu. Vremena su odmicala, pa tako i tehnologija, ali ipak je lijepo vratiti se osnovama i ponositi se nečim što ste izgradili od nule.

Za daljnji razvoj ovog računara namjeravam staviti 2k SRAM -a na 0000 USD do 2047 USD i dodati oscilator od 1 MHz. Vjerovatno će dodati nešto poput CD4040 (12-fazni binarni brojač / razdjelnik binarnih talasa) tako da mogu koristiti različite brzine takta.

Možda bi se čak mogao dodati LCD ekran koji daje tekstualne izlaze, a ne samo trepćuća svjetla. Programer EEPROM -a će također biti potrebno izmijeniti kako bi se bavio većim programima potrebnim za pokretanje LCD zaslona.

Iako MEGA postaje nepotrebna za rad 6502, ipak je korisna za otklanjanje grešaka u strojnom kodu. Kao što svi znaju, mašinski kod uvijek sadrži greške!

Preporučuje se: