Përmbajtje:

6502 Kompjuter minimal (me Arduino MEGA) Pjesa 3: 7 Hapa
6502 Kompjuter minimal (me Arduino MEGA) Pjesa 3: 7 Hapa

Video: 6502 Kompjuter minimal (me Arduino MEGA) Pjesa 3: 7 Hapa

Video: 6502 Kompjuter minimal (me Arduino MEGA) Pjesa 3: 7 Hapa
Video: Пару слов о Arduino. Сравнение Arduino Uno R3 и его китайского клона DCCduino 2024, Korrik
Anonim
6502 Kompjuter minimal (me Arduino MEGA) Pjesa 3
6502 Kompjuter minimal (me Arduino MEGA) Pjesa 3

Duke vazhduar akoma më tej, tani kam shtuar një shtrirje Octal, 8 LED drejtkëndëshe dhe një grup rezistence 220 Ohm në tabelën kryesore. Ekziston gjithashtu një kërcyes midis kunjit dhe tokëzimit të zakonshëm të grupit, në mënyrë që LED -të të fiken. Porta 74HC00 NAND është zëvendësuar me një portë 78LS08 AND, telat në portë gjithashtu janë ndryshuar. Porta AND do të thotë që 6522 tani gjendet në 6000 dollarë në vend të E000 dollarëve.

Ekziston edhe një kunj për lidhjen e një ore të jashtme për të drejtuar 6502. Me këtë lidhje, nuk ka nevojë që MEGA të sigurojë një sinjal të orës. MEGA ende monitoron atë që po ndodh me procesorin si më parë.

Kam përdorur një kunj 74HC373 me 20 kunja për shulin sepse kisha disa. Kjo ishte në rregull kur ishte në bordin e bukës, por një 74HC573 është i pajtueshëm me autobus dhe do të kishte kursyer ngarkesa me tela. UCN5801A i cili është një IC 22 pin mund të konsiderohet gjithashtu në qark, por instalimet elektrike do të jenë paksa të ndryshme.

LED i lartë, i vetëm portokalli është një tregues i fuqisë dhe ai i poshtëm i majtë i kuq tregon kur po shkruhet. Kjo e fundit do të jetë e parëndësishme nëse bordi drejtohet me shpejtësi më të madhe.

Qarku i modifikuar është më lart (me 74HC573).

Hapi 1: Programet demonstruese

Programet demonstruese
Programet demonstruese

Dy programe të thjeshta demonstrimi përfshihen në monitorin 6502 dhe kodi i tyre i çmontuar është këtu.

Ky program ngarkon 1 në regjistrin 6502 A dhe e ruan atë në shul. Pastaj shton 1 në regjistrin A dhe e ruan atë në shul. Pastaj kthehet në 1005 dollarë dhe procesi përsëritet përgjithmonë.

* = 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 $ 100DEND.

Ky program së pari vendos daljen DDR të portit B 6522. Pastaj ruan 55 dollarë (B01010101) në port, si dhe shulën. Regjistri A pastaj rrotullohet 1 hap djathtas dhe tani mban $ AA (B10101010). Kjo përsëri ruhet në portën B dhe shulën. Programi kthehet në 1005 dollarë dhe vazhdon përgjithmonë.

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

Sytë e mprehtë mes jush mund të vëreni se LED -të me ngjyra po tregojnë një model të ndryshëm nga ato të gjelbërta. Kjo ndodh sepse plumbi i zakonshëm është i lidhur me 5v në ato me ngjyrë dhe i zakonshëm në ato jeshile është i lidhur me tokën.

Ndryshoni këtë linjë të kodit në program2 ose program3.

setDataPins (programi 3 [i kompensuar]);

Një 6502 Assembler dhe Disassembler janë mjete të dobishme për të ndihmuar në kodimin e programeve tuaja.

Hapi 2: Shtimi i një EEPROM

Shtimi i një EEPROM
Shtimi i një EEPROM
Shtimi i një EEPROM
Shtimi i një EEPROM
Shtimi i një EEPROM
Shtimi i një EEPROM

Për tabelën EEPROM, kam përdorur një dërrasë shiriti 950 x 650 mm dhe kunjat e kokës mashkullore 19 mm për të mundësuar që bordi të pastrojë atë poshtë. Ky bord lidhet me tabelën 6502 më poshtë. EEPROM është një ATMEL 28C256 i cili ka 28 kunja dhe përmban 32k x 8 bit memorie. Kjo është më se e përshtatshme për programet e vogla që përdoren aktualisht.

Unë nuk kam bërë një diagram qark për këtë tabelë, por është mjaft e drejtpërdrejtë se si lidhet me tabelën 6502 më poshtë. Këto patate të skuqura EEPROM nuk janë miqësore me autobusët, kështu që duhet të lidhen me kunjat individuale, prandaj të gjitha "spageti jeshil dhe i bardhë". Unë e kam zgjidhur çështjen e tejkalimit në tabelën e mëparshme duke lidhur linjat e të dhënave së bashku në pjesën e poshtme të tabelës.

14 kunjat e adresës së EEPROM lidhen me kunjat e duhur në anën e majtë (telat e gjelbër) dhe kunjat I/O me kunjat e të dhënave në të djathtë (tela të bardhë). Pin 27 (WE) është i lidhur me pin 28 (5v), pin 22 (OE) është i lidhur me tokën dhe pin 20 (CE) është i lidhur me një portë NAND. 2 hyrjet e portës NAND janë të lidhura me A15 në bordi kryesor. Kjo do të thotë se kur kjo kunj shkon lart, porta NAND i jep një sinjal të ulët pinit CE të EEPROM i cili e bën atë aktiv. Me këtë rregullim do të thotë që EEPROM mund të lexohet vetëm nga 6502.

Meqenëse EEPROM jeton në 32k -in më të lartë në hartën e kujtesës, do të thotë që $ FFFC dhe $ FFFD mund të mbajnë adresën fillestare për 6502 pasi të jetë rivendosur. Me 6522 që ka adresat e tij midis $ 6000 dhe $ 600F dhe shulja është në $ 4100, ai ndalon çdo konflikt të kujtesës.

Vektori NMI ($ FFFA dhe $ FFFB) dhe vektori BRK / IRQ ($ FFFE dhe $ FFFF) gjithashtu mund të shkruhen në të njëjtën mënyrë.

Hapi 3: Programimi i EEPROM

Programimi i EEPROM
Programimi i EEPROM
Programimi i EEPROM
Programimi i EEPROM

Për të ruajtur një program në EEPROM, ka nevojë për një programues. Bëra një nga një tabelë shiritash, një Arduino Pro Mini, një çift prej 74HC595 dhe një prizë ZIF. Fillimisht, programuesi ishte krijuar për një AT28C16 i cili ka më pak linja adresash sesa AT28C256 kështu që duhej modifikuar.

Diagrami i qarkut tregon se si të lidhni të dyja këto EEPROM. Nuk është e qartë nga fotografia se dy çipat 595 janë me kokë poshtë dhe jo siç tregohet në diagram. Kunjat 1 deri 7 të 595/1 përputhen me A1 deri A7 të EEPROM pavarësisht se cila përdoret. Kjo kursen 7 tela lidhës. Tabela tani duket pak e ngushtë dhe kjo ndodh sepse fillimisht kam përdorur një prizë DIL 24 pin e cila tani është zëvendësuar nga priza shumë më e madhe 28 pin ZIF.

Përfshihet një program që punon me bordin tim. Programi do të punojë me çdo Arduino dhe 595 në një qark siç tregohet. Zgjodha një 5v Pro Mini sepse është kompakt dhe mjaft i lirë për tu lënë në konfigurim.

Hapi 4: Programet EEPROM

Programet EEPROM
Programet EEPROM

Ekzistojnë tre programe të thjeshta në programuesin EEPROM. Për t'i përdorur ato, thjesht mos komentoni linjën që dëshironi të përdorni.

// Lexuar nga porti A i 6522

// të dhëna const byte = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Programi tregon një deponim të kujtesës kur të ketë përfunduar. Pjesa e programit më poshtë ju jep kontroll të plotë të asaj që dëshironi të shkruani ose fshini, vendos $ FFFC & $ FFFD dhe më pas shfaq përmbajtjen e një diapazoni të caktuar. Thjesht mos komentoni ose ndryshoni parametrat ashtu siç dëshironi. Adresat gjithashtu mund të futen në format dhjetor.

// fshi EEPROM (422, 930, 0x41); // Përdorni për të fshirë të gjithë ose një pjesë të EEPROM - fillimi, përfundimi, bajti

Serial.println ("Programimi EEPROM"); shuma = të dhënat_numerike_program (0x1000); shkruajEEPROM (0x7ffc, 0x00); // Vendosni $ FFFC për 6502 writeEEPROM (0x7ffd, 0x90); // Vendosni $ FFFD për 6502 // shkruaniEEPROM (0x1000, 0xA9); // Shkruani 1 bajt të të dhënave Serial.println ("bërë"); String outline = "Shkruar" + (String) sasi + "bytes"; Serial.println (skicë); Serial.println ("Leximi EEPROM"); printPërmbajtja (0x0000, 0x112f); // Vendosni diapazonin për të shfaqur printContents (0x7ff0, 0x7fff); // Lexon 16 bajtët e fundit në EEPROM

Një dalje e shkurtuar nga programi është më lart.

Hapi 5: Drejtimi i 6502 Nga EEPROM

Drejtimi i 6502 Nga EEPROM
Drejtimi i 6502 Nga EEPROM
Drejtimi i 6502 Nga EEPROM
Drejtimi i 6502 Nga EEPROM
Drejtimi i 6502 Nga EEPROM
Drejtimi i 6502 Nga EEPROM

EEPROM i programuar tani mund të futet në tabelën e tij dhe ky derrkuc mbështetet në tabelën kryesore 6502 të cilën derrkuci e mbështet në MEGA. Fotografitë anësore dhe të sipërme tregojnë se si të gjitha përshtaten së bashku.

6502 tani mund të lexojë vektorin fillestar nga $ FFFC dhe $ FFFD (që është $ 9000) dhe pastaj të kalojë në programin që është ruajtur atje. MEGA është ende duke siguruar sinjalin e orës dhe programi i tij duhet të ndryshohet për të siguruar vetëm sinjalin e orës dhe për të monitoruar 6502. Një program i modifikuar ofrohet për ta bërë këtë.

Fotografia që shfaqet tregon se ky program po funksionon.

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

Çelsat janë të kyçur në portën A dhe programi shfaq vlerën që po lexon në portën B dhe 74HC373 (e cila është e errësuar aktualisht). çelsat janë të lidhur me tokën dhe LED janë të lidhur me 5v. EOR #$ FF korrigjon problemin e shulit dhe portës B që shfaq modele të ndryshme duke i rrotulluar copat para se të shkruani në shul.

Hapi 6: Sinjali i jashtëm i kohës

Sinjali i jashtëm i kohës
Sinjali i jashtëm i kohës

Nëse një sinjal i orës aplikohet në kunjin në krye të tabelës, 6502 tani mund të funksionojë në mënyrë të pavarur nga MEGA. Sigurisht që ka nevojë edhe për një furnizim me energji elektrike. Unë kam eksperimentuar me orë të ndryshme dhe madje kam drejtuar 6502 në 1MHz me një oshilator kristal. MEGA nuk mund të vazhdojë me shpejtësi më të mëdha, kështu që duhet të hiqet.

Unë gjithashtu provova daljen nga një kohëmatës 555, por kjo nuk funksionon. Mendoj se mund të jetë sepse nuk është një valë katrore? Kur u lidh me një nga daljet e CD4017, ai e drejtoi 6502. Unë u arnova në njërën nga kompletet e mësipërme për të provuar të merrja një sinjal të orës.

Unë jam ende duke kërkuar metoda të ndryshme për të marrë një sinjal të orës.

Hapi 7: Përfundimi

Unë kam treguar se si të ndërtoj disa qarqe komplekse dhe të marr një "kompjuter" shumë të thjeshtë për të punuar me një sasi minimale të pjesëve. Sigurisht, kompjuteri nuk mund të bëjë shumë për momentin ose ka të ngjarë ta bëjë këtë në të ardhmen.

Në fillim të viteve '80, me VIC20 tim, unë pyesja veten për makinën e mrekullueshme dhe nuk kisha idenë e parë se si të filloja të bashkoja një të tillë. Kohët kanë ecur përpara dhe kështu ka vazhduar edhe teknologjia, por është akoma mirë të kthehesh në bazat dhe të jesh krenar për diçka që ke ndërtuar nga e para.

Për të zhvilluar më tej këtë kompjuter, kam ndërmend të vendos 2k SRAM në $ 0000 në $ 2047 dhe të shtoj një oshilator 1 MHz. Me siguri do të shtoj diçka si një CD4040 (12-Faza Binary Ripple Counter / Divider) në mënyrë që të mund të prek shpejtësi të ndryshme të orës.

Mund të shtojë edhe një ekran LCD për të dhënë dalje teksti dhe jo vetëm drita ndezëse. Programuesi EEPROM gjithashtu do të duhet të modifikohet për t'u marrë me programet më të mëdha të nevojshme për të drejtuar një ekran LCD.

Edhe pse MEGA po bëhet e panevojshme për funksionimin e 6502, ai prapë është i dobishëm për korrigjimin e kodit të makinës. Siç e di dikush, kodi i makinës gjithmonë përmban defekte!

Recommended: