Sadržaj:

6502 Minimalno računalo (s Arduino MEGA -om) 3. dio: 7 koraka
6502 Minimalno računalo (s Arduino MEGA -om) 3. dio: 7 koraka

Video: 6502 Minimalno računalo (s Arduino MEGA -om) 3. dio: 7 koraka

Video: 6502 Minimalno računalo (s Arduino MEGA -om) 3. dio: 7 koraka
Video: Home made 6502 breadboard computer playing chess 2024, Srpanj
Anonim
6502 Minimalno računalo (s Arduino MEGA -om) 3. dio
6502 Minimalno računalo (s 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 zamijenjena su vratima 78LS08 AND, ožičenje do vrata je također promijenjeno. Vrata AND znače da se 6522 sada nalazi na 6000 USD umjesto E000 USD.

Također postoji pin za povezivanje vanjskog sata za pogon 6502. S ovom vezom nema potrebe da MEGA daje signal sata. MEGA i dalje prati što se događa s procesorom kao i prije.

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 naranč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 pokreće većim brzinama.

Izmijenjeni krug je gore (sa 74HC573).

Korak 1: Demonstracijski programi

Demonstracijski programi
Demonstracijski programi

Dva jednostavna demonstracijska programa uključena su 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 registar A i sprema ga u zasun. Zatim skoči na 1005 USD i proces se zauvijek ponavlja.

* = 1000

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

Ovaj program prvo postavlja DDR izlaz 6522 priključka B na izlaz. Zatim pohranjuje 55 USD (B01010101) u otvor, kao i zasun. A registar se tada 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 USD. 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 zaglavlje 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 prilično je jednostavno kako se povezuje s pločom 6502 ispod. Ovi EEPROM čipovi nisu prikladni za autobus pa se moraju spojiti na pojedinačne igle, dakle svi "zeleni i bijeli špageti". Riješio sam problem premošćivanja na prethodnoj ploči spajanjem podatkovnih vodova 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 podatkovne pinove 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) na NAND vrata. Dva ulaza NAND vrata spojena su na A15 na matična ploča. To znači da kada ovaj pin ide 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.

Budući da 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 zasun je 4100 USD, zaustavlja sve sukobe u memoriji.

NMI vektor ($ FFFA i $ FFFB) i vektor BRK / IRQ ($ FFFE anf $ FFFF) također se mogu zapisati 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. U početku je programer bio napravljen za AT28C16 koji ima manje adresnih linija od AT28C256 pa se morao promijeniti.

Dijagram kruga pokazuje kako spojiti oba ova EEPROM -a. Iz fotografije nije jasno da su dva čipa 595 naopačke, a ne kako je prikazano na dijagramu. Pinovi 1 do 7 od 595/1 poravnavaju 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 -polnu 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 u krugu kao što je prikazano. Odabrao sam 5v Pro Mini jer je kompaktan i dovoljno jeftin da ga ostavite u postavu.

Korak 4: Programi EEPROM -a

Programi EEPROM -a
Programi EEPROM -a

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

// Očitano 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. Dio programa u nastavku 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 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); // Zapišite 1 bajt podataka Serial.println ("učinjeno"); Struktura niza = "Pisano" + (Niz) iznos + "bajti"; Serial.println (obris); 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 osigurao samo signal sata i nadzirao 6502. Za to je predviđen izmijenjeni program.

Fotografija koja prikazuje prikazuje ovaj program u radu.

9000 LDA #00 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

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

Korak 6: Vanjski vremenski signal

Vanjski vremenski signal
Vanjski vremenski signal

Ako se signal sata primijeni na pin na vrhu ploče, 6502 sada može raditi neovisno o MEGA -i. Naravno da mu je potrebno 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 s 555 timera, ali to ne radi. Mislim da je to možda zato što nije kvadratni val? Kad je spojen na jedan od izlaza CD4017, vozio je 6502. Zakrpao sam jedan od gore navedenih kompleta kako bih pokušao dobiti signal sata.

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

Korak 7: Zaključak

Pokazao sam kako izgraditi neke složene sklopove i navesti vrlo jednostavno "računalo" za rad s minimalnom količinom dijelova. Doduše, računalo trenutno ne može učiniti mnogo ili će to vjerojatno učiniti u budućnosti.

Početkom 80 -ih, sa svojim VIC20 -om, znao sam se zapitati o izvrsnom stroju i nisam imao prvu ideju kako to početi sastavljati. 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čunala namjeravam staviti 2k SRAM -a na 0000 USD do 2047 USD i dodati oscilator od 1 MHz. Vjerojatno će dodati nešto poput CD4040 (12-stupanjski binarni brojač / razdjelnik binarnih valova) tako da mogu koristiti različite brzine takta.

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

Iako MEGA postaje nepotrebna za rad 6502, ipak je korisna za ispravljanje pogrešaka u strojnom kodu. Kao što itko zna, strojni kod uvijek sadrži greške!

Preporučeni: