Kazalo:

6502 Minimalni računalnik (z Arduino MEGA) 3. del: 7 korakov
6502 Minimalni računalnik (z Arduino MEGA) 3. del: 7 korakov

Video: 6502 Minimalni računalnik (z Arduino MEGA) 3. del: 7 korakov

Video: 6502 Minimalni računalnik (z Arduino MEGA) 3. del: 7 korakov
Video: Z80 Trainer board running 2024, Julij
Anonim
6502 Minimalni računalnik (z Arduino MEGA) 3. del
6502 Minimalni računalnik (z Arduino MEGA) 3. del

Če gremo še dlje, sem zdaj na osrednjo ploščo dodal oktalni zapah, 8 pravokotnih LED in 220 ohmski uporni niz. Med skupnim zatičem matrike in maso je tudi mostiček, tako da lahko LED izklopite. Vrata 74HC00 NAND so bila zamenjana z vrati 78LS08 IN, spremenjeno je tudi ožičenje do vrat. Vrata AND pomenijo, da se 6522 namesto E000 znaša 6000 USD.

Obstaja tudi pin za povezavo zunanje ure za pogon 6502. S to povezavo ni potrebno, da MEGA daje signal ure. MEGA še vedno spremlja dogajanje s procesorjem kot prej.

Za zapah sem uporabil 20 -pinski 74HC373, ker sem ga imel. To je bilo v redu, ko ste bili na plošči, vendar je 74HC573 združljiv z vodilom in bi prihranil veliko ožičenja. V tokokrogu bi lahko upoštevali tudi UCN5801A, ki je 22 -polni IC, vendar bo ožičenje nekoliko drugačno.

Zgornja, enojna oranžna LED je indikator napajanja, spodnja leva rdeča pa označuje, kdaj poteka pisanje. Slednje bo zanemarljivo, če ploščo poganjamo pri večjih hitrostih.

Spremenjeno vezje je zgoraj (s 74HC573).

1. korak: demonstracijski programi

Predstavitveni programi
Predstavitveni programi

Dva preprosta predstavitvena programa sta vključena v monitor 6502 in njihova razstavljena koda je tukaj.

Ta program naloži 1 v register 6502 A in ga shrani v zapah. Nato doda 1 v register A in ga shrani v zapah. Nato skoči nazaj na 1005 USD in postopek se ponovi za vedno.

* = 1000

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

Ta program najprej nastavi DDR na vratih 6522 B za izhod. Nato shrani 55 USD (B01010101) v vrata in zapah. Register A se nato vrti za 1 korak v desno in zdaj vsebuje $ AA (B10101010). To je spet shranjeno v vratih B in zapahu. Program se vrne na 1005 USD in se nadaljuje za vedno.

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

Ostrimi očmi med vami bodo morda opazili, da barvne LED diode kažejo drugačen vzorec kot zelene. To je zato, ker je skupni kabel priključen na 5v na barvnih, skupni na zelenih pa na ozemljitev.

To vrstico kode spremenite v program2 ali program3.

setDataPins (program3 [odmik]);

Sestavljalec in razstavljalec 6502 sta uporabni orodji za kodiranje vaših programov.

2. korak: Dodajte EEPROM

Dodajanje EEPROM -a
Dodajanje EEPROM -a
Dodajanje EEPROM -a
Dodajanje EEPROM -a
Dodajanje EEPROM -a
Dodajanje EEPROM -a

Za ploščo EEPROM sem uporabil tračno ploščo 950 x 650 mm in 19 mm moške zatiče glave, da sem lahko ploščo počistil spodnjo. Ta plošča se priključi na spodnjo ploščo 6502. EEPROM je ATMEL 28C256, ki ima 28 zatičev in vsebuje 32k x 8 bitov pomnilnika. To je več kot dovolj za majhne programe, ki se trenutno uporabljajo.

Nisem naredil vezja za to ploščo, vendar je precej preprosto, kako se poveže s spodnjo ploščo 6502. Ti čipi EEPROM niso prijazni do avtobusov, zato jih je treba priključiti na posamezne zatiče, torej vse "zelene in bele špagete". Vprašanje premostitve na prejšnji plošči sem rešil s povezovanjem podatkovnih linij na spodnji strani plošče.

14 naslovnih zatičev EEPROM -a se povežejo z ustreznimi zatiči na levi strani (zelene žice), V/I -zatiči pa na podatkovne zatiče na desni (bele žice). Pin 27 (WE) je priključen na pin 28 (5v), pin 22 (OE) je priključen na ozemljitev, pin 20 (CE) pa na vrata NAND. Dva vhoda vrat NAND sta priključena na A15 na glavna plošča. To pomeni, da ko se ta zatič dvigne visoko, vrata NAND oddajo nizek signal CE zatiču EEPROM, zaradi česar je aktiven. S to nastavitvijo pomeni, da lahko EEPROM prebere le 6502.

Ker EEPROM živi v prvih 32 k na pomnilniškem zemljevidu, to pomeni, da lahko $ FFFC in $ FFFD po ponastavitvi zadržita začetni naslov za 6502. Ker ima 6522 naslov med 6000 in 600 USD, zapah pa 4100 USD, ustavi vse spore v pomnilniku.

Na enak način bi lahko zapisali tudi vektor NMI ($ FFFA in $ FFFB) in vektor BRK / IRQ ($ FFFE anf $ FFFF).

3. korak: Programiranje EEPROM -a

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

Za shranjevanje programa v EEPROM potrebuje programerja. Naredil sem enega iz tračne plošče, Arduino Pro Mini, nekaj 74HC595 in in vtičnico ZIF. Prvotno je bil programer izdelan za AT28C16, ki ima manj naslovnih vrstic kot AT28C256, zato ga je bilo treba spremeniti.

Shema vezja prikazuje, kako priključiti oba EEPROM -a. Iz fotografije ni razvidno, da sta dva čipa 595 obrnjena na glavo in ne tako, kot je prikazano na diagramu. Zatiči 1 do 7 od 595/1 se ujemajo z A1 do A7 EEPROM -a, ne glede na to, kateri se uporablja. Tako prihranite 7 povezovalnih žic. Plošča je zdaj videti nekoliko tesna in to je zato, ker sem prvotno uporabil 24 -polno DIL vtičnico, ki jo je zdaj zamenjala veliko večja 28 -polna vtičnica ZIF.

Vključen je program, ki deluje z mojo ploščo. Program bo deloval s katerim koli Arduinom in 595 v vezju, kot je prikazano. Odločil sem se za 5v Pro Mini, ker je kompakten in dovolj poceni, da ga pustim v nastavitvi.

4. korak: programi EEPROM

Programi EEPROM
Programi EEPROM

V programerju EEPROM so trije preprosti programi. Če jih želite uporabiti, preprosto odkomentirajte vrstico, ki jo želite uporabiti.

// Branje iz vrat A 6522

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

Program prikaže izpis pomnilnika, ko je končan. Spodnji del programa vam daje popoln nadzor nad tem, kaj želite napisati ali izbrisati, nastavi $ FFFC & $ FFFD in nato prikaže vsebino določenega obsega. Samo komentirajte ali spremenite parametre, kot želite. Naslove lahko vnesete tudi v decimalni obliki.

// izbrisatiEEPROM (422, 930, 0x41); // Uporabite za brisanje celotnega ali dela EEPROM -a - začetek, konec, bajt

Serial.println ("Programiranje EEPROM -a"); znesek = številka_programa_podatkov (0x1000); writeEEPROM (0x7ffc, 0x00); // Nastavi $ FFFC za 6502 writeEEPROM (0x7ffd, 0x90); // Nastavi $ FFFD za 6502 // writeEEPROM (0x1000, 0xA9); // Zapišite 1 bajt podatkov Serial.println ("končano"); String outline = "Pisno" + (niz) znesek + "bajti"; Serial.println (oris); Serial.println ("Branje EEPROM -a"); printContents (0x0000, 0x112f); // Nastavi obseg za prikaz printContents (0x7ff0, 0x7fff); // bere zadnjih 16 bajtov na EEPROM -u

Skrajšani izhod iz programa je zgoraj.

5. korak: Zagon 6502 iz EEPROM -a

Izvajanje 6502 iz EEPROM -a
Izvajanje 6502 iz EEPROM -a
Izvajanje 6502 iz EEPROM -a
Izvajanje 6502 iz EEPROM -a
Izvajanje 6502 iz EEPROM -a
Izvajanje 6502 iz EEPROM -a

Programirani EEPROM lahko zdaj vstavite v svojo ploščo in ta prašiček se vrne na glavno ploščo 6502, ki je na hrbtni strani MEGA. Zgornje fotografije s stranskega in zgornjega pogleda prikazujejo, kako se vse skupaj ujema.

6502 lahko zdaj prebere začetni vektor iz $ FFFC in $ FFFD (kar je 9000 USD) in nato skoči na program, ki je tam shranjen. MEGA še vedno zagotavlja signal ure in program je treba spremeniti, da bo zagotovil samo signal ure in spremljal 6502. Za to je na voljo spremenjen program.

Na fotografiji je prikazan ta program.

9000 LDA #00 A9 00

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

Stikala so priključena na vrata A in program prikaže vrednost, ki jo bere na vratih B in 74HC373 (ki je trenutno prikrita). stikala so priključena na ozemljitev, LED pa na 5v. EOR #$ FF odpravi težavo, da zapah in vrata B prikazujejo različne vzorce tako, da obrnejo bite pred zapisom v zapah.

6. korak: Zunanji časovni signal

Zunanji časovni signal
Zunanji časovni signal

Če na nožico na vrhu plošče uporabimo signal ure, lahko 6502 zdaj deluje neodvisno od MEGA. Seveda potrebuje tudi napajanje. Poskusil sem z različnimi urami in celo deloval 6502 na 1 MHz s kristalnim oscilatorjem. MEGA ne more slediti višjim hitrostim, zato jo je treba odstraniti.

Poskusil sem tudi z izhodom časovnika 555, vendar to ne deluje. Mislim, da je to zato, ker ni kvadratni val? Ko je bil priključen na enega od izhodov CD4017, je vozil 6502. Sem zakrpal v enega od zgornjih kompletov, da bi poskušal dobiti signal ure.

Še vedno iščem različne načine pridobivanja signala ure.

7. korak: Zaključek

Pokazal sem, kako sestaviti nekaj zapletenih vezij in pridobiti zelo preprost "računalnik" za delo z minimalno količino delov. Res je, da računalnik trenutno ne zmore veliko ali pa bo to verjetno storil v prihodnosti.

V zgodnjih 80. letih sem se z mojim VIC20 spraševal nad super strojem in nisem imel prve ideje, kako ga začeti sestavljati. Časi so šli naprej in tudi tehnologija, vendar se je vseeno lepo vrniti k osnovam in biti ponosen na nekaj, kar ste zgradili iz nič.

Za nadaljnji razvoj tega računalnika nameravam 2k SRAM -a postaviti na 0000 do 2047 dolarjev in dodati oscilator 1 MHz. Verjetno bo dodal nekaj takega, kot je CD4040 (12-stopenjski binarni števec / razdelilnik binarnih valov), da bom lahko uporabljal različne takte.

Lahko bi celo dodali LCD zaslon, ki bi dajal besedilne izpise in ne samo utripajočih luči. Programer EEPROM bo treba spremeniti tudi za obravnavo večjih programov, potrebnih za zagon LCD zaslona.

Čeprav MEGA postaja nepotrebna za delovanje 6502, je še vedno uporabna za odpravljanje napak strojne kode. Kot kdo ve, strojna koda vedno vsebuje hrošče!

Priporočena: