Satura rādītājs:

6502 Minimālais dators (ar Arduino MEGA) 3. daļa: 7 soļi
6502 Minimālais dators (ar Arduino MEGA) 3. daļa: 7 soļi

Video: 6502 Minimālais dators (ar Arduino MEGA) 3. daļa: 7 soļi

Video: 6502 Minimālais dators (ar Arduino MEGA) 3. daļa: 7 soļi
Video: История CPU: MOS 6502 2024, Jūlijs
Anonim
6502 Minimālais dators (ar Arduino MEGA) 3. daļa
6502 Minimālais dators (ar Arduino MEGA) 3. daļa

Pārejot vēl tālāk, es tagad galvenajai plāksnei esmu pievienojis astoņstūra aizbīdni, 8 taisnstūrveida gaismas diodes un 220 omu rezistoru bloku. Starp masīva kopējo tapu un zemi ir arī džemperis, lai gaismas diodes varētu izslēgt. 74HC00 NAND vārti ir aizstāti ar 78LS08 UN vārtiem, ir mainīta arī vārtu elektroinstalācija. AND vārti nozīmē, ka 6522 tagad atrodas USD 6000 vietā, nevis E000 USD.

Ir arī tapa ārējā pulksteņa savienošanai, lai vadītu 6502. Izmantojot šo savienojumu, MEGA nav jānodrošina pulksteņa signāls. MEGA tāpat kā iepriekš uzrauga, kas notiek ar procesoru.

Aizbīdnim izmantoju 20 kontaktu 74HC373, jo man tādas bija. Tas bija labi, atrodoties uz maizes dēļa, taču 74HC573 ir saderīgs ar autobusiem un būtu ietaupījis daudz vadu. UCN5801A, kas ir 22 kontaktu IC, var tikt ņemts vērā arī ķēdē, taču elektroinstalācija būs nedaudz atšķirīga.

Augšējā, viena oranžā gaismas diode ir strāvas indikators, un apakšējā kreisā sarkanā daļa norāda, kad notiek rakstīšana. Pēdējais būs nenozīmīgs, ja dēlis tiks palaists ar lielāku ātrumu.

Modificētā ķēde ir augstāk (ar 74HC573).

1. darbība. Demonstrācijas programmas

Demonstrācijas programmas
Demonstrācijas programmas

6502 monitorā ir iekļautas divas vienkāršas demonstrācijas programmas, un to izjauktais kods ir šeit.

Šī programma 6502 A reģistrā ielādē 1 un saglabā to aizbīdnī. Pēc tam tas pievieno A reģistram 1 un saglabā to aizbīdnī. Tad tas atgriežas līdz 1005 USD un process atkārtojas uz visiem laikiem.

* = 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

Šī programma vispirms nosaka izejas 6522 porta DDR DDR. Pēc tam tas ostā glabā 55 USD (B01010101), kā arī aizbīdni. A reģistrs pēc tam pagriežas vienu soli pa labi un tagad satur USD AA (B10101010). Tas atkal tiek saglabāts portā B un aizbīdnī. Programma atgriežas līdz 1005 USD un turpinās mūžīgi.

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

Jūsu acīgās acis var pamanīt, ka krāsainās gaismas diodes rāda atšķirīgu modeli nekā zaļās gaismas diodes. Tas ir tāpēc, ka kopējais vads ir savienots ar 5V uz krāsainajiem, un parastais uz zaļajiem ir savienots ar zemi.

Mainiet šo koda rindu uz programmu2 vai programmu3.

setDataPins (programma3 [nobīde]);

6502 Assembler un Demassembler ir noderīgi rīki, kas palīdz kodēt jūsu programmas.

2. darbība. EEPROM pievienošana

EEPROM pievienošana
EEPROM pievienošana
EEPROM pievienošana
EEPROM pievienošana
EEPROM pievienošana
EEPROM pievienošana

EEPROM plāksnei es izmantoju 950 x 650 mm sloksnes plāksni un 19 mm tērauda galvenes tapas, lai tā varētu notīrīt zemāk esošo. Šī plāksne tiek pievienota zemāk esošajai 6502 plāksnei. EEPROM ir ATMEL 28C256 ar 28 tapām un 32 x 8 bitu atmiņu. Tas ir vairāk nekā pietiekami mazajām programmām, kuras pašlaik tiek izmantotas.

Es neesmu izveidojis shēmas shēmu šai plāksnei, bet tā ir diezgan taisna uz priekšu, kā tā savienojas ar 6502 plati zemāk. Šīs EEPROM mikroshēmas nav autobusu draudzīgas, tāpēc tās ir jāpievieno atsevišķām tapām, līdz ar to arī visiem "zaļajiem un baltajiem spageti". Es esmu atrisinājis pārejas problēmu iepriekšējā panelī, savienojot datu līnijas kopā plāksnes apakšpusē.

EEPROM 14 adrešu tapas savienojas ar atbilstošajām tapām kreisajā pusē (zaļie vadi), bet I/O tapas - ar datu tapām labajā pusē (balti vadi). 27. tapa (WE) ir savienota ar 28. tapu (5v), 22. tapa (OE) ir pievienota zemei, un 20. tapa (CE) ir pievienota NAND vārtiem. 2 NAND vārtu ieejas ir savienotas ar A15 galvenā tāfele. Tas nozīmē, ka tad, kad šī tapa ir augsta, NAND vārti dod zemu signālu EEPROM CE tapai, kas padara to aktīvu. Ar šo iestatījumu tas nozīmē, ka EEPROM var nolasīt tikai 6502.

Tā kā EEPROM atrodas atmiņas kartes augšējā 32k vietā, tas nozīmē, ka $ FFFC un $ FFFD var saglabāt 6502 sākuma adresi pēc tā atiestatīšanas. Tā kā 6522 adreses ir no 6000 līdz 600 USD un aizbīdnis ir 4100 USD, tas aptur visus atmiņas konfliktus.

Tādā pašā veidā varētu uzrakstīt arī NMI vektoru ($ FFFA un $ FFFB) un BRK / IRQ vektoru ($ FFFE anf $ FFFF).

3. darbība: EEPROM programmēšana

EEPROM programmēšana
EEPROM programmēšana
EEPROM programmēšana
EEPROM programmēšana

Lai programmu saglabātu EEPROM, tai ir nepieciešams programmētājs. Es to izveidoju no sloksnes dēļa, Arduino Pro Mini, pāris 74HC595 un un ZIF ligzdas. Sākotnēji programmētājs bija paredzēts AT28C16, kuram ir mazāk adrešu rindu nekā AT28C256, tāpēc tas bija jāmaina.

Shēmas shēma parāda, kā savienot abus šos EEPROM. No fotoattēla nav skaidrs, ka abas 595 mikroshēmas ir otrādi un nav tādas, kā parādīts diagrammā. Tapas 1 līdz 7 no 595/1 sakrīt ar EEPROM A1 līdz A7 neatkarīgi no tā, kurš tiek izmantots. Tas ietaupa 7 savienojošos vadus. Dēlis tagad izskatās nedaudz saspringts, un tas ir tāpēc, ka sākotnēji es izmantoju 24 kontaktu DIL ligzdu, kas tagad ir aizstāta ar daudz lielāku 28 kontaktu ZIF ligzdu.

Ir iekļauta programma, kas darbojas ar manu dēli. Programma darbosies ar jebkuru Arduino un 595s ķēdē, kā parādīts attēlā. Es izvēlējos 5v Pro Mini, jo tas ir pietiekami kompakts un lēts, lai to varētu atstāt komplektā.

4. solis: EEPROM programmas

EEPROM programmas
EEPROM programmas

EEPROM programmētājā ir trīs vienkāršas programmas. Lai tos izmantotu, vienkārši noņemiet komentāru rindai, kuru vēlaties izmantot.

// Lasīt no 6522. A porta

// konstantu baitu dati = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Programma parāda atmiņas izmeti, kad tā ir pabeigta. Tālāk esošā programmas daļa sniedz jums pilnīgu kontroli pār to, ko vēlaties rakstīt vai dzēst, nosaka $ FFFC & $ FFFD un pēc tam parāda noteiktā diapazona saturu. Vienkārši komentējiet vai mainiet parametrus pēc nepieciešamības. Adreses var ievadīt arī decimālā formātā.

// eraseEEPROM (422, 930, 0x41); // Izmantojiet, lai izdzēstu visu EEPROM vai tā daļu - sākums, beigas, baits

Serial.println ("Programmēšana EEPROM"); summa = programmas_ciparu_dati (0x1000); rakstītEEPROM (0x7ffc, 0x00); // Iestatiet $ FFFC 6502 rakstīšanaiEEPROM (0x7ffd, 0x90); // Iestatiet $ FFFD 6502 // writeEEPROM (0x1000, 0xA9); // Uzrakstiet 1 baitu datu Serial.println ("darīts"); String outline = "Written" + (String) summa + "baiti"; Serial.println (izklāsts); Serial.println ("EEPROM lasīšana"); printContents (0x0000, 0x112f); // Iestatīt diapazonu, lai parādītu printContents (0x7ff0, 0x7fff); // Nolasa pēdējos 16 baitus EEPROM

Iepriekš ir saīsināta programmas izvade.

5. darbība: 6502 palaišana no EEPROM

Darbojas 6502 no EEPROM
Darbojas 6502 no EEPROM
Darbojas 6502 no EEPROM
Darbojas 6502 no EEPROM
Darbojas 6502 no EEPROM
Darbojas 6502 no EEPROM

Ieprogrammēto EEPROM tagad var ievietot tāfele, un šis cūciņš balstās uz galveno 6502 plāksni, kas cūciņa atbalsta MEGA. Iepriekš redzamajos sānu un augšējā skata fotoattēlos ir parādīts, kā tas viss sader kopā.

6502 tagad var nolasīt sākuma vektoru no $ FFFC un $ FFFD (kas ir $ 9000) un pēc tam pāriet uz tur saglabāto programmu. MEGA joprojām nodrošina pulksteņa signālu, un tā programma ir jāmaina, lai nodrošinātu tikai pulksteņa signālu un uzraudzītu 6502. Lai to izdarītu, tiek nodrošināta modificēta programma.

Darbojošajā fotoattēlā ir redzama šīs programmas darbība.

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

Slēdži ir pievienoti portam A, un programma parāda vērtību, ko tā nolasa portā B un 74HC373 (kas pašlaik ir aizēnots). slēdži ir savienoti ar zemi, un gaismas diodes ir pievienotas 5 V spriegumam. EOR #$ FF novērš aizbīdņa un porta B problēmu, parādot dažādus modeļus, pagriežot bitus pirms rakstīšanas uz aizbīdni.

6. darbība. Ārējā laika signāls

Ārējā laika signāls
Ārējā laika signāls

Ja plāksnes augšpusē esošajai tapai tiek piemērots pulksteņa signāls, 6502 tagad var darboties neatkarīgi no MEGA. Protams, tam ir nepieciešams arī barošanas avots. Esmu eksperimentējis ar dažādiem pulksteņiem un pat palaidu 6502 ar 1MHz ar kristāla oscilatoru. MEGA nevar sekot līdzi lielākam ātrumam, tāpēc tas ir jānoņem.

Es arī izmēģināju 555 taimera izvadi, bet tas nedarbojas. Es domāju, ka tas varētu būt tāpēc, ka tas nav kvadrātveida vilnis? Kad tas bija savienots ar vienu no CD4017 izejām, tas vadīja 6502. Es iekļāvu vienā no iepriekš minētajiem komplektiem, lai mēģinātu iegūt pulksteņa signālu.

Es joprojām meklēju dažādas metodes pulksteņa signāla iegūšanai.

7. solis. Secinājums

Esmu parādījis, kā izveidot dažas sarežģītas shēmas un panākt, lai ļoti vienkāršs "dators" darbotos ar minimālu detaļu daudzumu. Jāatzīst, ka dators šobrīd nespēj paveikt daudz vai, visticamāk, to darīs nākotnē.

Vēl 80. gadu sākumā, izmantojot savu VIC20, es brīnījos par satriecošo mašīnu, un man nebija pirmās idejas, kā sākt to salikt kopā. Laiki ir gājuši uz priekšu un arī tehnoloģijas, taču joprojām ir patīkami atgriezties pie pamatiem un lepoties ar kaut ko, ko esat uzcēlis no nulles.

Lai turpinātu attīstīt šo datoru, es plānoju 2k SRAM no USD 0000 līdz USD 2047 un pievienot 1 MHz oscilatoru. Iespējams, pievienošu kaut ko līdzīgu CD4040 (12 pakāpju bināro viļņu skaitītājs / dalītājs), lai varētu izmantot dažādus pulksteņa ātrumus.

Var pat pievienot LCD displeju, lai sniegtu tekstu, nevis tikai mirgojošas gaismas. EEPROM programmētājs būs arī jāpārveido, lai tiktu galā ar lielākām programmām, kas nepieciešamas LCD displeja darbināšanai.

Lai gan MEGA kļūst nevajadzīgs 6502 darbināšanai, tas joprojām ir noderīgs mašīnas koda atkļūdošanai. Kā ikviens zina, mašīnas kodā vienmēr ir kļūdas!

Ieteicams: