Përmbajtje:
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Duke ndjekur udhëzimet e mia të mëparshme, tani e kam vendosur 6502 në një dërrasë dhe shtova një përshtatës ndërfaqe të gjithanshëm 6522 (VIA). Përsëri, unë jam duke përdorur një version WDC të 6522, pasi është një ndeshje e përkryer për 6502. Jo vetëm që këto patate të skuqura të reja përdorin shumë më pak energji sesa versionet origjinale MOS, por ato mund të funksionojnë me shpejtësi më të ngadaltë ose edhe të tejkalohen program pa asnjë problem.
Programi Arduino u shkrua fillimisht nga Ben Eater (i cili ka shumë video në YouTube) dhe është modifikuar nga unë për të arritur këtë rezultat.
Furnizimet
1 x Përpunues WDC W65C02
1 x Përshtatës i gjithanshëm i ndërfaqes WDC W65C22
1 x 74HC00N IC (Porta NAND me katër hyrje) ose e ngjashme
1 x 10cm e gjerë (35 rreshta) Pllakë rrip
2 priza DIL 40 pin
Fole 1 x 14 pin DIL
Kunjat e kokës së PCB 2.54mm
Fole për kokën e PCB 2.54mm
Çelës 1 x 12mm Tastile Tactile Push Button PCB i montuar SPST ose i ngjashëm
1 x 1K rezistencë
1 x 3K3 rezistencë
2 x 0.1 uF kondensatorë qeramikë
1 x 8 Way Light Water Marquee 5mm LED e kuqe
Tela me ngjyra të ndryshme për lidhje
8 tela lidhës meshkuj - meshkuj
Hapi 1: Bordi i Qarkut
Pllaka e qarkut është mjaft kompakte dhe pjesa e poshtme lidhet drejtpërdrejt me Arduino MEGA. Për të arritur këtë, kunjat shtyhen sa më shumë që të jetë e mundur në mbajtëset plastike para se të ngjiten në pjesën e poshtme të tabelës. Kunjat më të gjata mund të ishin përdorur për këtë, por kunjat standarde do të thotë që bordi qëndron fort mbi MEGA.
Unë kam rreshtuar IC 6502 dhe 6522 në mënyrë që ata të përdorin gjurmët e bordit të shiritit për t'u lidhur me MEGA. Ekzistojnë gjithashtu disa lidhje për 6502 të fshehura nën IC. Kur bëni tabelën, gjëja e parë që duhet bërë ishte prerja e 16 shiritave që do të lidhen me rreshtin e dyfishtë të prizave të Arduino. 2 e jashtme nuk kanë nevojë të priten pasi 5v dhe Gnd janë në të dy anët. Ngjitësja e radhës në 2 rreshtat me 18 kunja në pjesën e poshtme, dhe 2 rreshtat me 18 baza në anën e sipërme.
Pas kësaj, bazat DIL u lidhën në vend dhe gjurmët u prenë midis tyre. Mund të kisha ruajtur një lidhje duke vendosur pinin 14 të 74HC00 në të njëjtën linjë me 5v. Unë i preva gjurmët vetëm kur isha i sigurt se ato duhej të ishin ndërsa unë po bashkoja telat lidhës. Sidoqoftë, gjërat nuk shkojnë gjithmonë sipas planit, fillimisht kam projektuar tabelën e shiritit nga pllaka e mëparshme e bukës duke përdorur kunjat 2, 3 dhe 7 të Arduino, por këto nuk përputhen me vrimat në tabelën e shiritit, kështu që duhej përdorur kunjat 18, 31 dhe 37. Prandaj lidhjet në tabelën time në 31 dhe 37. Ju mund të pyesni veten pse nuk kam përdorur një nga kunjat e papërdorura (23, 24 etj) për orën, kjo ndodh sepse ato nuk mbështesin ndërpret, kështu që duhej të përdornin kunjat 18, 19, 20 ose 21 që bëjnë. Për fat të mirë këto 4 kunja rreshtohen me vrimat në tabelën e shiritit dhe mbajnë gjithçka kompakte. Pin 18 është gjithashtu më i largëti nga të gjithë telat e tjerë.
Ju gjithashtu mund të vini re se tabela ime e kompletuar nuk është saktësisht e njëjtë me diagramin tim. Kjo ndodh sepse po ndiqja diagramin e dikujt tjetër. Prandaj lidhjet me 74HC00. Kam shtuar gjithashtu një LED të energjisë dhe 2 rreshta shtesë të prizave për Gnd dhe 5v, si dhe disa kondensatorë të tjerë.
Mund të kisha lidhur 2 bazat e të dhënave, por kjo do të thoshte shumë më tepër tela që kalonin bordin. Zgjodha 8 tela lidhës për ta bërë këtë si një masë të përkohshme.
Porti 6522 A dhe B kanë pasur priza të lidhura në gjurmët e tyre në mënyrë që shenjat LED të mund të futen lehtësisht.
Tani ka shumë më pak tela sesa në versionin e bordit të bukës.
Hapi 2: Teoria e Programimit
6522 ka dy porta I/O si dhe shumë karakteristika të tjera, por porti A dhe B janë lehtësisht të arritshëm. Për të nxjerrë të dhëna në port, Regjistri i Drejtimit të të Dhënave (DDR) duhet të vendoset në përputhje me rrethanat dhe të dhënat të dërgohen në vetë portin.
Me ngritjen e mësipërme, 6522 gjendet në E000 $.
Për të nxjerrë të dhëna në portën B, DDR me $ E002 është vendosur në $ FF (255 - të gjitha daljet) dhe të dhënat dërgohen në $ E000.
Për të nxjerrë të dhëna në portën A, DDR në $ E003 është vendosur në $ FF (255 - të gjitha daljet) dhe të dhënat dërgohen në $ E001.
Kodi më poshtë ngarkon $ FF në regjistrin 6502 A dhe e shkruan atë në DDR B me $ E002. Pastaj ngarkon 55 dollarë dhe e shkruan atë në ORB. Kodi rrotullohet (jep AA $) dhe i shkruhet ORB. Programi kthehet 1005 dollarë dhe përsëritet pafund. SH NOTNIM: DDR duhet të inicializohet vetëm një herë.
Adresa Hexdump Dissassembly
$ 1000 a9 ff LDA #$ ff $ 1002 8d 02 e0 STA $ e002 $ 1005 a9 55 LDA #$ 55 $ 1007 8d 00 e0 STA $ e000 $ 100a 6a ROR A $ 100b 8d 00 e0 STA $ e000 $ 100e 4c 05 10 JMP $ 1005
$ 55 në binar është 010101010 dhe $ AA është 10101010 gjë që bën që LED të alternojnë 4 të ndezur, 4 të fikur.
Rregullim i shpejtë dhe i ndotur:
Zëvendësoni 74HC00 (Quad 2 input NAND Gate) me një 74HC08 (Quad 2 input AND Gate) dhe 6522 tani gjendet në 6000 $ në vend të E000 $. Kjo e zhvendos atë nga 32K e sipërme në 32K më të ulët të kujtesës së adresueshme të 6502.
Hapi 3: Programi dhe produkti Arduino
Meqenëse 6502 nuk ka RAM për të lexuar, Arduino po e siguron programin për ta lexuar. Kur pulsi i orës zbulohet në pin 18, Arduino i vendos të dhënat e programit në autobusin e të dhënave (kunjat Arduino 39, 41, 43, 45, 47, 49, 51 dhe 53). 6502 gjeneron adresat e veta të cilat monitorohen vetëm nga Arduino në kunjat me numër çift 22 deri në 52. Arduino po furnizon gjithashtu pulsin e orës në kunjin 37. Linja R/W e 6502 monitorohet në pin 31.
Ndërsa Arduino po siguron të dhënat, deri më tani nuk ka qenë e mundur të merret 6502 për të futur të dhëna nga VIA (nëse nuk e dini më mirë).
Programi Arduino është më poshtë dhe një mostër e daljes nga Monitor Serial është më lart.
Hapi 4: Përfundimi
Përsëri jam përpjekur të tregoj se si të krijoj një "Kompjuter 6502" minimal.
Në këtë fazë, 6502 është ende duke u mbështetur në Arduino për ta furnizuar atë me një program dhe një puls të orës në mënyrë që të funksionojë.
Shtë një hap më tej sesa kur e vendosa në tabelën e bukës.
Unë nuk e kam përdorur 74HC373 këtë herë, por 6522 më komplekse për të fiksuar daljet e të dhënave. Gjithashtu 6522 ka dy porta I/O.
Kam ndërmend ta çoj më tej këtë projekt duke instaluar ndonjë SRAM ose një EEPROM.