Sisukord:

6502 minimaalne arvuti (koos Arduino MEGA -ga) 3. osa: 7 sammu
6502 minimaalne arvuti (koos Arduino MEGA -ga) 3. osa: 7 sammu

Video: 6502 minimaalne arvuti (koos Arduino MEGA -ga) 3. osa: 7 sammu

Video: 6502 minimaalne arvuti (koos Arduino MEGA -ga) 3. osa: 7 sammu
Video: Let's Play PC Building Simulator (Session 4) 2024, November
Anonim
6502 Minimaalne arvuti (koos Arduino MEGA -ga) 3. osa
6502 Minimaalne arvuti (koos Arduino MEGA -ga) 3. osa

Edasi liikudes olen nüüd lisanud emaplaadile kaheksaklambri, 8 ristkülikukujulist LED -i ja 220 oomi takistiivi. Massiivi ühise tihvti ja maanduse vahel on ka hüppaja, nii et LED -id saab välja lülitada. 74HC00 NAND värav on asendatud 78LS08 AND väravaga, samuti on muudetud värava juhtmestikku. JA värav tähendab, et 6522 asub nüüd E000 dollari asemel 6000 dollari juures.

6502. juhtimiseks on olemas ka tihvt välise kella ühendamiseks. Selle ühendusega ei ole MEGA -l vaja anda kellasignaali. MEGA jälgib endiselt protsessoriga toimuvat nagu varem.

Ma kasutasin riivi jaoks 20 tihvtiga 74HC373, kuna mul oli neid. See oli leivalaual korras, kuid 74HC573 ühildub bussiga ja oleks säästnud palju juhtmeid. Ahelas võib kaaluda ka UCN5801A, mis on 22 -kontaktiline IC, kuid juhtmestik on veidi erinev.

Ülemine, üks oranž LED on toiteindikaator ja alumine vasakpoolne punane näitab kirjutamise toimumist. Viimane on ebaoluline, kui plaati sõidetakse suuremal kiirusel.

Muudetud vooluahel on ülal (74HC573 -ga).

1. samm: näidisprogrammid

Näidisprogrammid
Näidisprogrammid

6502 monitoris on kaks lihtsat näidisprogrammi ja nende lahtivõetud kood on siin.

See programm laadib 1 6502 A registrisse ja salvestab selle riivis. Seejärel lisab see A -registrile 1 ja salvestab selle riivis. Siis hüppab see tagasi 1005 dollarile ja protsess kordub igavesti.

* = 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 100D. END

See programm seab esmalt 6522 pordi B DDR väljundi. Seejärel salvestab see sadamasse 55 dollarit (B01010101) ja riivi. A -register pöörleb seejärel 1 sammu paremale ja mahutab nüüd $ AA (B10101010). See salvestatakse uuesti porti B ja riivi. Programm hüppab tagasi 1005 dollarile ja jätkub igavesti.

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA #$ 55 1007 38 SEK 1008 8D 00 60 STA $ 6000 100B 8D 00 41 STA $ 4100 100E 6A ROR A 100F 8D 00 60 STA $ 6000 1012 8D 00 41 STA $ 4100 1015 4C 05 10 JMP 1005 1018. END

Teravate silmadega inimesed võivad märgata, et värvilised LED -id näitavad erinevat mustrit kui rohelised. Selle põhjuseks on asjaolu, et ühine juhe on värvilistel 5V ja rohelistel tavaline maandusega.

Muutke see koodirida programm2 või programm3.

setDataPins (programm3 [nihe]);

6502 Assembler ja Disassembler on kasulikud tööriistad teie programmide kodeerimiseks.

Samm: lisage EEPROM

EEPROM -i lisamine
EEPROM -i lisamine
EEPROM -i lisamine
EEPROM -i lisamine
EEPROM -i lisamine
EEPROM -i lisamine

EEPROM -plaadi jaoks kasutasin 950 x 650 mm ribaplaati ja 19 mm isast päise tihvti, et plaat saaks selle alt puhastada. See plaat ühendatakse allpool oleva 6502 plaadiga. EEPROM on ATMEL 28C256, millel on 28 kontakti ja mis sisaldab 32 x 8 bitti mälu. See on praegu kasutatavate väikeste programmide jaoks enam kui piisav.

Ma pole selle plaadi jaoks skeemi teinud, kuid see on üsna sirgjooneline, kuidas see ühendub allpool oleva 6502 plaadiga. Need EEPROM -kiibid ei ole bussisõbralikud, nii et need tuleb ühendada üksikute tihvtidega, seega kõik "rohelised ja valged spagetid". Olen lahendanud sildamise probleemi varasemal tahvlil, ühendades andmeliinid plaadi alumisel küljel kokku.

EEPROMi 14 aadressinööpi ühendatakse vasakul pool asuvate vastavate tihvtidega (rohelised juhtmed) ja I/O kontaktid paremal asuvate andmekontaktidega (valged juhtmed). Tihvt 27 (WE) on ühendatud tihvtiga 28 (5v), tihvt 22 (OE) on ühendatud maandusega ja tihvt 20 (CE) on ühendatud NAND -väravaga. NAND -värava 2 sisendit on ühendatud A15 -ga põhiplaat. See tähendab, et kui see tihvt läheb kõrgele, annab NAND -värav EEPROM -i CE -tihvtile madala signaali, mis muudab selle aktiivseks. Selle seadistusega tähendab see, et EEPROM -i saab lugeda ainult 6502.

Kuna EEPROM asub mälukaardi 32 000 parema hulgas, tähendab see, et $ FFFC ja $ FFFD võivad pärast lähtestamist hoida 6502 stardiaadressi. Kuna 6522 aadressid jäävad vahemikku 6000–600 dollarit ja riiv on 4100 dollari juures, peatab see mälukonfliktid.

NMI vektorit ($ FFFA ja $ FFFB) ja BRK / IRQ vektorit ($ FFFE anf $ FFFF) võiks samuti kirjutada samamoodi.

3. samm: EEPROM -i programmeerimine

EEPROMi programmeerimine
EEPROMi programmeerimine
EEPROMi programmeerimine
EEPROMi programmeerimine

Programmi EEPROM -i salvestamiseks vajab see programmeerijat. Tegin ühe ribaplaadist, Arduino Pro Minist, paarist 74HC595 -st ja ZIF -pistikupesast. Algselt oli programmeerija loodud AT28C16 jaoks, millel on vähem aadressiridu kui AT28C256, nii et seda tuli muuta.

Lülitusskeem näitab, kuidas ühendada mõlemad need EEPROM -id. Fotolt ei selgu, et kaks 595 kiipi on tagurpidi ja mitte nii, nagu skeemil näidatud. Nööpnõelad 1 kuni 7 595/1 on kooskõlas EEPROMi A1 kuni A7, olenemata sellest, kumba kasutatakse. See säästab 7 ühendusjuhet. Tahvel näeb nüüd natuke kitsas välja ja seda seetõttu, et algselt kasutasin 24 -kontaktilist DIL -pesa, mis on nüüd asendatud palju suurema 28 -kontaktilise ZIF -pesaga.

Kaasas programm, mis töötab minu pardal. Programm töötab mis tahes Arduino ja 595 -ga ahelas, nagu näidatud. Valisin 5v Pro Mini, kuna see on piisavalt kompaktne ja odav, et seadistusse jätta.

4. samm: EEPROMi programmid

EEPROMi programmid
EEPROMi programmid

EEPROM programmeerijas on kolm lihtsat programmi. Nende kasutamiseks tühistage lihtsalt soovitud rea märkimine.

// Loe 6522 portist A

// konst baidiandmed = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Programm näitab mälu tühjendamist, kui see on lõpetatud. Allpool olev programmi osa annab teile täieliku kontrolli selle kohta, mida soovite kirjutada või kustutada, määrab $ FFFC & $ FFFD ja kuvab seejärel antud vahemiku sisu. Lihtsalt tühistage kommentaar või muutke parameetreid vastavalt vajadusele. Aadresse saab sisestada ka kümnendvormingus.

// eraseEEPROM (422, 930, 0x41); // Kasutage kogu või osa EEPROM -i kustutamiseks - algus, lõpp, bait

Serial.println ("Programmeerimine EEPROM"); summa = programmi_numbrilised_andmed (0x1000); writeEEPROM (0x7ffc, 0x00); // Määra $ FFFC 6502 kirjutamiseleEEPROM (0x7ffd, 0x90); // Määra $ FFFD 6502 jaoks // writeEEPROM (0x1000, 0xA9); // Kirjutage 1 bait andmeid Serial.println ("tehtud"); String kontuur = "Kirjutatud" + (String) kogus + "baiti"; Serial.println (ülevaade); Serial.println ("EEPROM -i lugemine"); printContents (0x0000, 0x112f); // Määra vahemik printContents kuvamiseks (0x7ff0, 0x7fff); // Loeb EEPROM -i viimast 16 baiti

Programmi lühendatud väljund on ülal.

Samm: käivitage 6502 EEPROM -ist

Käivitab 6502 EEPROMist
Käivitab 6502 EEPROMist
Käivitab 6502 EEPROMist
Käivitab 6502 EEPROMist
Käivitab 6502 EEPROMist
Käivitab 6502 EEPROMist

Programmeeritud EEPROMi saab nüüd sisestada tahvlisse ja see notsu toetab 6502 peamist tahvlit, mis toetab MEGA -d. Ülaltoodud külg- ja pealtvaate fotod näitavad, kuidas see kõik kokku sobib.

6502 saab nüüd lugeda algusvektorit $ FFFC ja $ FFFD (mis on 9000 dollarit) ja seejärel hüpata sinna salvestatud programmi juurde. MEGA edastab endiselt kella signaali ja selle programmi tuleb muuta, et anda ainult kella signaal ja jälgida 6502. Selleks on ette nähtud muudetud programm.

Jooksval fotol on näha, kuidas see programm töötab.

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

Lülitid on ühendatud porti A ja programm kuvab loetud väärtuse porti B ja 74HC373 (mis on praegu varjatud). lülitid on ühendatud maandusega ja valgusdioodid on ühendatud 5v pingega. EOR #$ FF parandab riivi ja pordi B probleemi, mis kuvab erinevaid mustreid, pöörates bitid enne riivi kirjutamist.

6. samm: väline aja signaal

Välise aja signaal
Välise aja signaal

Kui tahvli ülaosas olevale tihvtile rakendatakse kellasignaali, saab 6502 nüüd töötada MEGA -st sõltumatult. Muidugi vajab see ka toiteallikat. Olen katsetanud erinevate kelladega ja isegi käivitanud 6502 1MHz kristallostsillaatoriga. MEGA ei suuda kiiremate kiirustega sammu pidada, seega tuleb see eemaldada.

Proovisin ka 555 taimeri väljundit, kuid see ei tööta. Ma arvan, et see võib olla sellepärast, et see pole ruutlaine? Kui see oli ühendatud ühe CD4017 väljundiga, sõitis see 6502. Sõidutasin ühte ülaltoodud komplektidest, et proovida kella signaali saada.

Ma vaatan endiselt erinevaid meetodeid kella signaali saamiseks.

Samm 7: Järeldus

Olen näidanud, kuidas ehitada mõningaid keerukaid vooluahelaid ja panna väga lihtne "arvuti" tööle minimaalse koguse osadega. Tõsi, arvuti ei saa praegu palju teha või tõenäoliselt teeb seda tulevikus.

Veel 80ndate alguses, oma VIC20 -ga, imestasin ma vinge masina üle ja mul polnud esimest ideed, kuidas seda kokku panna. Ajad on edasi läinud ja tehnoloogia ka, kuid siiski on tore naasta põhitõdede juurde ja olla uhke millegi üle, mille olete nullist üles ehitanud.

Selle arvuti edasiarendamiseks kavatsen panna 2k SRAM -i väärtusele 0000–2047 dollarit ja lisada 1 MHz ostsillaatori. Tõenäoliselt lisan midagi sellist nagu CD4040 (12-etapiline binaarne Ripple'i loendur / jagaja), et saaksin kasutada erinevaid taktsagedusi.

Võib isegi lisada LCD -ekraani, et anda tekstiväljundeid, mitte ainult vilkuvaid tulesid. EEPROM -i programmeerijat tuleb samuti muuta, et tulla toime suuremate programmidega, mis on vajalikud LCD -ekraani käitamiseks.

Kuigi MEGA muutub 6502 käitamiseks mittevajalikuks, on see siiski masinakoodi silumiseks kasulik. Nagu keegi teab, sisaldab masinakood alati vigu!

Soovitan: