Բովանդակություն:

6502 Նվազագույն համակարգիչ (Arduino MEGA- ով) Մաս 3: 7 քայլ
6502 Նվազագույն համակարգիչ (Arduino MEGA- ով) Մաս 3: 7 քայլ

Video: 6502 Նվազագույն համակարգիչ (Arduino MEGA- ով) Մաս 3: 7 քայլ

Video: 6502 Նվազագույն համակարգիչ (Arduino MEGA- ով) Մաս 3: 7 քայլ
Video: История CPU: MOS 6502 2024, Հուլիսի
Anonim
6502 Նվազագույն համակարգիչ (Arduino MEGA- ի հետ) Մաս 3
6502 Նվազագույն համակարգիչ (Arduino MEGA- ի հետ) Մաս 3

Շարունակելով շարունակել, ես այժմ հիմնական տախտակին ավելացրել եմ Octal Latch, 8 ուղղանկյուն LED և 220 Օմ դիմադրության զանգված: Alsoանգվածի ընդհանուր քորոցի և գետնի միջև կա նաև jumper, այնպես որ LED- ները կարող են անջատվել: 74HC00 NAND դարպասը փոխարինվել է 78LS08 AND դարպասով, դարպասի էլեկտրագծերը նույնպես փոխվել են: AND դարպասը նշանակում է, որ 6522 -ը այժմ գտնվում է $ 6000 -ի փոխարեն $ E000- ի փոխարեն:

6502 -ը վարելու համար արտաքին ժամացույցի միացման համար կա նաև քորոց: Այս կապով MEGA- ի կողմից ժամացույցի ազդանշան տրամադրելու կարիք չկա: MEGA- ն շարունակում է վերահսկել, թե ինչ է կատարվում պրոցեսորի հետ, ինչպես նախկինում:

Ես սողնակի համար օգտագործեցի 20 փին 74HC373, քանի որ ունեի մի քանիսը: Դա նորմալ էր, երբ տախտակի վրա էր, բայց 74HC573- ը ավտոբուսների հետ համատեղելի է և կխնայի էլեկտրագծերի բեռները: UCN5801A- ն, որը 22 փին IC է, նույնպես կարող է դիտարկվել սխեմայի մեջ, սակայն էլեկտրագծերը մի փոքր այլ կլինեն:

Վերին, մեկ նարնջագույն LED- ն էներգիայի ցուցիչ է, իսկ ներքևի ձախ կարմիրը ցույց է տալիս, երբ գրառումը տեղի է ունենում: Վերջինս աննշան կլինի, եթե տախտակն աշխատի ավելի մեծ արագությամբ:

Փոփոխված սխեման վերևում է (74HC573- ով):

Քայլ 1: onstուցադրական ծրագրեր

Ուցադրական ծրագրեր
Ուցադրական ծրագրեր

Երկու պարզ ցուցադրական ծրագիր ներառված է 6502 մոնիտորի մեջ և դրանց ապամոնտաժված ծածկագիրը ՝ այստեղ:

Այս ծրագիրը 1 -ը բեռնում է 6502 A գրանցամատյանում և պահում այն սողնակում: Այնուհետև այն ավելացնում է 1 -ը գրանցամատյանում և պահում է այն սողնակում: Հետո այն վերադառնում է 1005 դոլար և գործընթացը կրկնում է հավիտյան:

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

Այս ծրագիրը նախ ելքային է դնում 6522 B նավահանգստի DDR- ը: Այնուհետև նավահանգստում պահում է 55 դոլար (B01010101), ինչպես նաև սողնակ: A գրանցամատյանը այնուհետև պտտվում է 1 քայլ աջ և այժմ պահում է $ AA (B10101010): Սա կրկին պահվում է B նավահանգստում և սողնակում: Backրագիրը վերադառնում է $ 1005 և շարունակվում հավիտյան:

* = 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 41 STA $ 4100 1015 4C 05 10 JMP 1005 1018 $. END

Ձեր մեջ սուր աչքերով կարող եք նկատել, որ գունավոր LED- ները այլ կերպ են ցույց տալիս, քան կանաչները: Դա պայմանավորված է նրանով, որ ընդհանուր կապը գունավորների վրա միացված է 5 վ -ին, իսկ կանաչների վրա սովորականը `գետնին:

Կոդի այս տողը փոխեք program2 կամ program3:

setDataPins (program3 [օֆսեթ]);

6502 Assembler- ը և Disassembler- ը օգտակար գործիքներ են, որոնք կօգնեն կոդավորել ձեր ծրագրերը:

Քայլ 2: EEPROM- ի ավելացում

EEPROM- ի ավելացում
EEPROM- ի ավելացում
EEPROM- ի ավելացում
EEPROM- ի ավելացում
EEPROM- ի ավելացում
EEPROM- ի ավելացում

EEPROM- ի տախտակի համար ես օգտագործեցի 950 x 650 մմ չափսերի տախտակ և 19 մմ տրամագծով տղամարդու գլխատախտակներ `տախտակին մաքրելու համար տակը: Այս տախտակը միանում է ներքևում գտնվող 6502 տախտակին: EEPROM- ը 28C256 ATMEL է, որն ունի 28 կապում և պարունակում է 32k x 8 բիթ հիշողություն: Սա առավել քան համարժեք է ներկայումս կիրառվող փոքր ծրագրերին:

Այս տախտակի համար ես սխեմայի սխեմա չեմ արել, բայց այն բավականին պարզ է, թե ինչպես է այն միանում ներքևի 6502 տախտակին: Այս EEPROM չիպերը հարմար չեն ավտոբուսին, այնպես որ դրանք պետք է միացված լինեն առանձին կապումներին, հետևաբար բոլոր «կանաչ և սպիտակ սպագետտին»: Ես լուծել եմ կամրջման հարցը ավելի վաղ տախտակի վրա ՝ տվյալների տողերը միացնելով տախտակի ներքևի մասում:

EEPROM- ի 14 հասցեն կապում են միացված ձախ կողմի համապատասխան կապումներին (կանաչ լարեր), իսկ I/O կապումներին ՝ աջ կողմում գտնվող տվյալների կապերին (սպիտակ լարեր): Pin 27 (WE) միացված է 28 (5v), 22 -ի (OE) ՝ գետնին, իսկ pin 20 (CE) միացված է NAND դարպասին: NAND դարպասի 2 մուտքերը միացված են A15- ին հիմնական տախտակ: Սա նշանակում է, որ երբ այս քորոցը բարձրանում է, NAND դարպասը ցածր ազդանշան է տալիս EEPROM- ի CE կապին, որն այն դարձնում է ակտիվ: Այս կարգավորմամբ դա նշանակում է, որ EEPROM- ը կարող է կարդալ միայն 6502 -ով:

Քանի որ EEPROM- ն ապրում է հիշողության քարտեզի վերևում `32k- ում, դա նշանակում է, որ $ FFFC- ն և $ FFFD- ն կարող են պահել սկզբնական հասցեն 6502 -ի համար այն վերականգնելուց հետո: 6522 -ի հասցեները 6000-600 դոլար են, իսկ փակիչը 4100 դոլար է, այն դադարեցնում է հիշողության ցանկացած կոնֆլիկտ:

NMI վեկտորը ($ FFFA և $ FFFB) և BRK / IRQ վեկտորը ($ FFFE և $ FFFF) նույնպես կարող են գրվել նույն կերպ:

Քայլ 3. EEPROM- ի ծրագրավորում

EEPROM- ի ծրագրավորում
EEPROM- ի ծրագրավորում
EEPROM- ի ծրագրավորում
EEPROM- ի ծրագրավորում

EEPROM- ում ծրագիր պահելու համար անհրաժեշտ է ծրագրավորող: Մեկը պատրաստեցի շերտի տախտակից, Arduino Pro Mini- ից, մի քանի հատ 74HC595 և ZIF վարդակից: Ի սկզբանե, ծրագրավորողը ստեղծվել է AT28C16- ի համար, որն ունի ավելի քիչ հասցեատողեր, քան AT28C256- ը, ուստի պետք է փոփոխվեր:

Շղթայի դիագրամը ցույց է տալիս, թե ինչպես միացնել այս երկու EEPROM- երը: Լուսանկարից պարզ չէ, որ երկու 595 չիպերը գլխիվայր են և ոչ այնպես, ինչպես ցույց է տրված դիագրամում: 595/1 -ի 1 -ից 7 -րդ կապերը համընկնում են EEPROM- ի A1- ից A7- ի հետ `անկախ նրանից, թե որն է օգտագործվում: Սա խնայում է 7 միացնող լարերը: Տախտակն այժմ մի փոքր ամուր տեսք ունի, և դա այն պատճառով է, որ ի սկզբանե ես օգտագործել եմ 24 պինանոց DIL վարդակից, որն այժմ փոխարինվել է շատ ավելի մեծ 28 ZIN վարդակով:

Ներառված է ծրագիր, որն աշխատում է իմ խորհրդի հետ: Theրագիրը կաշխատի ցանկացած Arduino- ի և 595 -ի հետ միացումով, ինչպես ցույց է տրված: Ես ընտրեցի 5v Pro Mini- ն, քանի որ այն կոմպակտ է և բավական էժան ՝ տեղադրման մեջ թողնելու համար:

Քայլ 4: EEPROM ծրագրեր

EEPROM ծրագրեր
EEPROM ծրագրեր

EEPROM ծրագրավորողում կա երեք պարզ ծրագիր: Դրանք օգտագործելու համար պարզապես մեկնաբանեք այն տողը, որը ցանկանում եք օգտագործել:

// Կարդալ 6522 -ի A նավահանգստից

// const բայթ տվյալներ = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

Programրագիրը ցուցադրում է հիշողության աղբանոց, երբ այն ավարտվում է: Ստորև բերված ծրագրի մասը ձեզ լիովին վերահսկում է այն, ինչ ցանկանում եք գրել կամ ջնջել, սահմանում է $ FFFC և $ FFFD և այնուհետև ցուցադրում է տվյալ տիրույթի բովանդակությունը: Պարզապես մեկնաբանեք կամ փոփոխեք պարամետրերը, ինչպես դուք եք պահանջում: Հասցեները կարող են մուտքագրվել նաև տասնորդական ձևաչափով:

// ջնջել EEPROM (422, 930, 0x41); // Օգտագործեք EEPROM- ի ամբողջ կամ մի մասը ջնջելու համար `սկիզբ, ավարտ, բայթ

Serial.println («mingրագրավորում EEPROM»); գումար = ծրագրի_թվային_տվյալներ (0x1000); գրել EEPROM (0x7ffc, 0x00); // Սահմանեք $ FFFC 6502 գրելու համար EEPROM (0x7ffd, 0x90); // Սահմանեք $ FFFD 6502 -ի համար // writeEEPROM (0x1000, 0xA9); // Գրել 1 բայթ տվյալներ Serial.println («կատարված է»); String outline = "Գրված է" + (Լարային) գումար + "բայթ"; Serial.println (ուրվագիծ); Serial.println («Ընթերցում ենք EEPROM»); printContent (0x0000, 0x112f); // Սահմանել շրջանակը printContents- ի ցուցադրման համար (0x7ff0, 0x7fff); // Կարդում է վերջին 16 բայթերը EEPROM- ում

Programրագրից կրճատված ելքը վերևում է:

Քայլ 5. 6502 -ի գործարկում EEPROM- ից

Գործարկում է 6502 EEPROM- ից
Գործարկում է 6502 EEPROM- ից
Գործարկում է 6502 EEPROM- ից
Գործարկում է 6502 EEPROM- ից
Գործարկում է 6502 EEPROM- ից
Գործարկում է 6502 EEPROM- ից

Medրագրավորված EEPROM- ն այժմ կարող է տեղադրվել դրա տախտակի մեջ, և այս խոզուկը հետ է մնում հիմնական 6502 տախտակին, որը խոզուկը հետ է մնում MEGA- ին: Կողքի և վերևի լուսանկարները վերևում ցույց են տալիս, թե ինչպես է այդ ամենը համընկնում:

6502 -ն այժմ կարող է կարդալ սկզբնական վեկտորը $ FFFC- ից և $ FFFD- ից (որը $ 9000 է), այնուհետև անցնել այնտեղ պահված ծրագրին: MEGA- ն դեռ ապահովում է ժամացույցի ազդանշանը, և դրա ծրագիրը պետք է փոխվի `միայն ժամացույցի ազդանշանը ապահովելու և 6502 -ը վերահսկելու համար: Դրա համար նախատեսված է փոփոխված ծրագիր:

Վազող լուսանկարը ցույց է տալիս, որ այս ծրագիրը գործում է:

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

Անջատիչները միացված են A պորտին, և ծրագիրը ցուցադրում է այն արժեքը, որը կարդում է B նավահանգստում և 74HC373- ում (որը ներկայումս քողարկված է): անջատիչները միացված են գետնին, իսկ LED- ները միացված են 5 վ -ին: EOR #$ FF- ն ուղղում է սողնակի և B նավահանգստի տարբեր ձևերի ցուցադրման խնդիրը `բիթերը պտտելով փականին գրելուց առաջ:

Քայլ 6: Արտաքին ժամանակի ազդանշան

Արտաքին ժամանակի ազդանշան
Արտաքին ժամանակի ազդանշան

Եթե տախտակի վերին մասում տեղադրված ժամացույցի ազդանշանը կիրառվի, ապա 6502 -ն այժմ կարող է աշխատել MEGA- ից անկախ: Իհարկե, այն նաև էներգիայի մատակարարման կարիք ունի: Ես փորձեր եմ կատարել տարբեր ժամացույցների հետ և նույնիսկ աշխատել եմ 6502 -ով 1 ՄՀց հաճախականությամբ ՝ բյուրեղյա տատանումով: MEGA- ն չի կարող հետևել ավելի արագ արագություններին, ուստի պետք է հեռացվի:

Ես նաև փորձեցի 555 ժամաչափի ելքը, բայց դա չի աշխատում: Կարծում եմ, որ դա կարող է լինել, քանի որ դա քառակուսի ալիք չէ՞: CD4017 ելքերից մեկին միացնելիս այն 6502 -ը վարեց: Ես վերևում տեղադրեցի հավաքածուներից մեկը `ժամացույցի ազդանշան ստանալու համար:

Ես դեռ տարբեր մեթոդների եմ նայում ժամացույցի ազդանշան ստանալու համար:

Քայլ 7: Եզրակացություն

Ես ցույց տվեցի, թե ինչպես կարելի է կառուցել մի քանի բարդ սխեմաներ և ձեռք բերել շատ պարզ «համակարգիչ» `նվազագույն քանակությամբ մասերով աշխատելու համար: Edիշտ է, համակարգիչը ներկայումս չի կարող շատ բան անել կամ, ամենայն հավանականությամբ, դա կանի ապագայում:

Դեռ 80 -ականների սկզբին, իմ VIC20- ի հետ, ես մտածում էի սարսափելի մեքենայի մասին և չունեի առաջին գաղափարը, թե ինչպես սկսել այն համատեղել: Timesամանակներն անցել են, և տեխնոլոգիան նույնպես, բայց դեռ հաճելի է վերադառնալ հիմնականին և հպարտանալ այն ամենով, ինչ կառուցել ես զրոյից:

Այս համակարգիչն ավելի զարգացնելու համար ես մտադիր եմ 2k SRAM- ը դնել 0000 դոլարից մինչև 2047 դոլար և ավելացնել 1 ՄՀց տատանում: Հավանաբար, CD4040- ի (12 փուլից բաղկացած երկուական ծածանքների հաշվիչ / բաժանարար) պես մի բան կավելացնեմ, որպեսզի կարողանամ ժամացույցի տարբեր արագությունների թակել:

Կարող է նույնիսկ ավելացնել LCD էկրան `տեքստային ելքեր տալու համար, այլ ոչ թե պարզապես թարթող լույսեր: EEPROM ծրագրավորողը նույնպես պետք է փոփոխվի `LCD էկրան աշխատելու համար անհրաժեշտ ավելի մեծ ծրագրերի հետ առնչվելու համար:

Չնայած MEGA- ն դառնում է ավելորդ 6502 -ի գործարկման համար, այն, այնուամենայնիվ, ձեռնտու է մեքենայի կոդը կարգաբերելու համար: Ինչպես որևէ մեկը գիտի, մեքենայի կոդը միշտ պարունակում է սխալներ:

Խորհուրդ ենք տալիս: