Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Järgides oma eelmist juhendit, panin 6502 ribalauale ja lisasin 6522 mitmekülgse liideseadapteri (VIA). Jällegi kasutan 6522 WDC versiooni, kuna see sobib ideaalselt nende 6502 -ga. Need uued kiibid mitte ainult ei kasuta palju vähem energiat kui originaalsed MOS -versioonid, vaid neid saab kasutada ka aeglasemal kiirusel või isegi läbi astuda programm ilma probleemideta.
Arduino programmi kirjutas algselt Ben Eater (kellel on YouTube'is palju videoid) ja olen selle tulemuse saavutamiseks seda muutnud.
Tarvikud
1 x WDC W65C02 protsessor
1 x WDC W65C22 mitmekülgne liideseadapter
1 x 74HC00N IC (neljas 2-sisendiga NAND-värav) või sarnane
1 x 10 cm laiune (35 rida) ribaplaat
2 x 40 -kontaktilist DIL -pistikut
1 x 14 kontaktiga DIL pesa
PCB päise tihvtid 2,54 mm
PCB päise pistikupesad 2,54 mm
1 x 12 mm hetkeline puutetundlik nupplüliti trükkplaadile paigaldatud SPST või sarnane
1 x 1K takisti
1 x 3K3 takisti
2 x 0,1 uF keraamilised kondensaatorid
1 x 8 -suunaline veetuli 5 mm punane LED
Ühenduste jaoks erinevat värvi traat
8 isast - isast lülitit
Samm: trükkplaat
Trükkplaat on üsna kompaktne ja alumine külg ühendatakse otse Arduino MEGA -ga. Selle saavutamiseks surutakse tihvtid nii kaugele kui võimalik plastikust hoidikutesse, enne kui need plaadi alumisele küljele joodetakse. Selleks oleks võinud kasutada pikemaid tihvte, kuid tavalised tihvtid tähendavad, et plaat toetub kindlalt MEGA peale.
Olen rivistanud 6502 ja 6522 IC -d nii, et nad kasutaksid MEGA -ga ühenduse loomiseks ribalaua radu. IC -i all on ka mõned ühendused 6502 jaoks. Tahvlit tehes tuli esimese asjana lõigata ära 16 riba, mis ühendatakse Arduino topeltpistikuridaga. Välist 2 pole vaja lõigata, kuna 5v ja Gnd asuvad mõlemal küljel. Järgmine jootmine kahes reas 18 tihvtiga alumisel küljel ja 2 rida 18 pistikupesaga ülemisel küljel.
Pärast seda joodeti DIL -pistikupesad oma kohale ja rajad lõigati nende vahele. Oleksin võinud ühenduse salvestada, asetades 74HC00 tihvti 14 samale rajale kui 5v. Lõikasin rajad alles siis, kui olin ühendustraatide jootmise ajal kindel, et need peavad olema. Kuid asjad ei lähe alati plaanipäraselt, algselt kujundasin ribalaua eelmisest leivalauast, kasutades Arduino tihvte 2, 3 ja 7, kuid need ei ühti ribalaua aukudega, seega tuli kasutada nööpnõelad 18, 31 ja 37. Siit ka minu tabelil olevad lingid 31. ja 37. Võite küsida, miks ma ei kasutanud kella jaoks üht kasutamata tihvti (23, 24 jne), sest need ei toeta katkestab, seega tuli kasutada tihvte 18, 19, 20 või 21, mis seda teevad. Õnneks on need 4 tihvti joondatud ribalaua aukudega ja hoiavad kõik kompaktsena. Tihvt 18 on ka kõigist teistest juhtmetest kõige kaugemal.
Samuti võite märgata, et minu valminud tahvel ei ole täpselt sama, mis minu skeemil. Seda seetõttu, et järgisin kellegi teise skeemi. Sellest ka ühendused 74HC00 -ga. Olen lisanud ka toite LED -i ja täiendavad 2 rida pistikupesasid Gnd ja 5v jaoks ning paar kondensaatorit.
Ma oleks võinud ühendada 2 andmesidepesa, kuid see tähendaks palju rohkem juhtmeid, mis ristavad plaati. Valisin selleks ajutise meetmena 8 linkjuhtme.
6522 portidel A ja B on pistikupesad joodetud nende radadele, nii et LED -märke saab hõlpsasti sisestada.
Juhtmeid on praegu palju vähem kui leivaplaadi versioonil.
2. samm: programmeerimisteooria
6522 -l on kaks I/O -porti ja palju muid funktsioone, kuid pordid A ja B on hõlpsasti juurdepääsetavad. Andmete väljastamiseks sadamasse tuleb vastavalt seadistada andmesuunaregister (DDR) ja saata andmed sadamasse ise.
Ülaltoodud seadistuste korral asub 6522 hinnaga E000 dollarit.
Andmete väljastamiseks pordis B on DDR -i väärtuseks $ E002 seatud $ FF (255 - kõik väljundid) ja andmed saadetakse $ E000 -le.
Andmete väljastamiseks pordis A on DDR väärtuseks $ E003 seatud $ FF (255 - kõik väljundid) ja andmed saadetakse $ E001.
Allolev kood laadib $ FF registrisse 6502 A ja kirjutab selle DDR B -le hinnaga $ E002. Seejärel laadib see 55 dollarit ja kirjutab selle ORB -le. Kood pööratakse (andes $ AA) ja kirjutatakse ORB -le. Programm hüppab tagasi 1005 dollarit ja kordub lõputult. MÄRKUS. DDR -i tuleb lähtestada ainult üks kord.
Aadress Hexdump Dassassemble
$ 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 dollarit binaarides on 010101010 ja AA on 10101010, mis põhjustab LED -ide vaheldumisi 4 sisselülitamist ja 4 väljalülitamist.
Kiire ja määrdunud parandus:
Asendage 74HC00 (neljasisendiline NAND -värav) 74HC08 -ga (neljakordne sisend JA värav) ja 6522 asub nüüd E000 dollari asemel 6000 dollari juures. See teisaldab selle 6502 adresseeritava mälu ülemiselt 32K -lt alumisele 32K -le.
Samm: Arduino programm ja väljund
Kuna 6502 -l pole RAM -i, millest lugeda, pakub Arduino selle lugemiseks programmi. Kui tihvtil 18 tuvastatakse kellaimpulss, paneb Arduino programmi andmed andmesiini (Arduino tihvtid 39, 41, 43, 45, 47, 49, 51 ja 53). 6502 genereerib oma aadressid, mida Arduino jälgib ainult paarisarvulistel tihvtidel 22 kuni 52. Arduino edastab ka kellaimpulssi tihvti 37 peal. 6502 R/W rida jälgitakse tihvti 31 abil.
Kuna Arduino edastab andmeid, pole seni olnud võimalik saada 6502 VIA -lt andmeid sisestama (kui te paremini ei tea).
Arduino programm on allpool ja seeriamonitori näidisväljund on ülal.
4. samm: järeldus
Olen jällegi proovinud näidata, kuidas seadistada minimaalne "6502 arvuti".
Selles etapis loodab 6502 endiselt Arduinole, et see käivitaks programmi ja kellaimpulsi.
See on samm edasi kui siis, kui selle leivalauale seadistasin.
Ma pole seekord kasutanud 74HC373, vaid keerukamat 6522 -d andmete väljundite lukustamiseks. Samuti on 6522 -l kaks I/O -porti.
Kavatsen seda projekti edasi viia, installides mõne SRAM -i või EEPROM -i.