विषयसूची:

6502 न्यूनतम कंप्यूटर (Arduino MEGA के साथ) भाग 1: 7 चरण
6502 न्यूनतम कंप्यूटर (Arduino MEGA के साथ) भाग 1: 7 चरण

वीडियो: 6502 न्यूनतम कंप्यूटर (Arduino MEGA के साथ) भाग 1: 7 चरण

वीडियो: 6502 न्यूनतम कंप्यूटर (Arduino MEGA के साथ) भाग 1: 7 चरण
वीडियो: अरुडिनो मास्टरक्लास | 90 मिनट में पूर्ण प्रोग्रामिंग कार्यशाला! 2024, नवंबर
Anonim
6502 न्यूनतम कंप्यूटर (Arduino MEGA के साथ) भाग 1
6502 न्यूनतम कंप्यूटर (Arduino MEGA के साथ) भाग 1

6502 माइक्रोप्रोसेसर पहली बार 1975 में सामने आया था और इसे MOS टेक्नोलॉजी के लिए चक पेडल के नेतृत्व में एक छोटी टीम द्वारा डिजाइन किया गया था। उस समय इसका उपयोग वीडियो कंसोल और घरेलू कंप्यूटरों में किया जाता था जिसमें अटारी, ऐप्पल II, निन्टेंडो एंटरटेनमेंट सिस्टम, बीबीसी माइक्रो, कमोडोर वीआईसी 20 और 64 शामिल थे। उस समय यह बाजार में सबसे सस्ता था। यह वास्तव में कभी दूर नहीं हुआ है और अब इसका उपयोग शौकियों और पेशेवरों द्वारा कई अनुप्रयोगों के लिए किया जाता है।

मैं जिस संस्करण का उपयोग कर रहा हूं वह W65C02S6TPG-14 है जो पश्चिमी डिजाइन केंद्र द्वारा बनाया गया है और मूल से दस गुना कम बिजली का उपयोग करता है। खास बात यह है कि इसमें ओरिजिनल चिप की तरह 1 मेगाहर्ट्ज पर चलने की जरूरत नहीं है। यह बहुत धीमी गति से चल सकता है या एक प्रोग्राम के माध्यम से सिंगल स्टेप के लिए उपयोग किया जा सकता है और यहां तक कि 14 मेगाहर्ट्ज तक रैंप किया जा सकता है। चिप के लिए डेटा शीट इसकी क्षमताओं की व्याख्या करती है। अन्य 6502 चिप्स में यह क्षमता नहीं है और इस तरह से नहीं चलेंगे। चिप्स वर्तमान में eBay के साथ-साथ अन्य स्रोतों पर भी उपलब्ध हैं।

आपूर्ति

उपयोग किए गए सभी भाग वर्तमान में Ebay, AliExpress और अन्य पर उपलब्ध हैं।

चरण 1: अवधारणा

मुझे मेरी प्रेरणा बेन ईटर से मिली जिन्होंने YouTube पर 6502 और कंप्यूटर और सर्किट बनाने के कई अन्य पहलुओं के बारे में वीडियो की एक श्रृंखला तैयार की है। कार्यक्रम मूल रूप से उनके द्वारा लिखा गया था और मैंने इस निर्देश के साथ आने के लिए इसे और उनके कुछ डिजाइनों को संशोधित किया है। एक अन्य व्यक्ति जिसने मुझे प्रेरित किया, वह था एंड्रयू जैकब्स जिसका गिटहब पर एक अनुभाग है जहां वह अपने 6502 को नियंत्रित करने के लिए एक पीआईसी माइक्रो का उपयोग करता है।

बेन की तरह, मैं 6502 की निगरानी के लिए एक Arduino MEGA का उपयोग कर रहा हूं। मैं बेन के विपरीत घड़ी संकेत प्रदान करने के लिए MEGA का भी उपयोग कर रहा हूं। वर्तमान में मैं किसी EEPROM या RAM का उपयोग नहीं कर रहा हूँ।

चरण 2: आवश्यकताएँ

आवश्यकताएं
आवश्यकताएं

इस "कंप्यूटर" को बनाने के लिए मदों की एक सूची इस प्रकार है:

1 एक्स अरुडिनो मेगा

1 एक्स पश्चिमी डिजाइन केंद्र W65C02S6TPG-14

1 x 74HC00N आईसी (क्वाड 2-इनपुट नंद गेट) या समान

1 x 74HC373N आईसी (ऑक्टल डी-प्रकार पारदर्शी कुंडी) या समान

2 x 830 होल ब्रेड बोर्ड (एक चुटकी में)

विभिन्न ड्यूपॉन्ट पुरुष - पुरुष लीड और लिंक वायर

2 x एल ई डी (मैंने 5 मिमी नीले रंग का उपयोग किया क्योंकि आप बिना किसी प्रतिरोध के दूर हो सकते हैं)

1 x 12 मिमी मोमेंटरी टैक्टाइल पुश बटन स्विच पीसीबी माउंटेड एसपीएसटी या समान

1 एक्स 1 के प्रतिरोधी

2 x 0.1 यूएफ सिरेमिक कैपेसिटर

1 x 8 वे वाटर लाइट मार्की 5 मिमी लाल एलईडी (ऊपर के रूप में) या 8 एलईडी और प्रतिरोधक

नोट: यदि आपको अनसोल्ड किट मिलती है, तो आप एलईडी को गलत तरीके से गोल कर सकते हैं ताकि वे सामान्य कैथोड हों। मैं एक फ्लाई लीड (पिन के बजाय) संलग्न करता हूं ताकि यह आसानी से कहीं और जुड़ सके। वीसीसी अब ग्राउंड बन गया है। आप निश्चित रूप से एल ई डी को (एक इकट्ठे आइटम पर) घुमा सकते हैं और उन्हें फिर से मिलाप कर सकते हैं, लेकिन यह बहुत अधिक है! किट वर्तमान में AliExpress पर उपलब्ध हैं।

चरण 3: इसे एक साथ रखना

एक साथ रखते हुए
एक साथ रखते हुए
एक साथ रखते हुए
एक साथ रखते हुए

मुझे नए ड्यूपॉन्ट तारों का उपयोग करना आसान लगा जो पते और डेटा बसों के लिए उनके रिबन से अलग नहीं किए गए थे।

MEGA के 52 को पिन करने के लिए 6502 के पिन 9 (A0) को कनेक्ट करें, पिन १० (ए१) ६५०२ से ५० आदि को पिन करने के लिए …

जब तक

MEGA के 22 को पिन करने के लिए 6502 के पिन 25 (A15) को कनेक्ट करें।

अब तक 16 कनेक्शन

वैसे ही

MEGA के 39 को पिन करने के लिए 6502 के पिन 26 (D7) को कनेक्ट करें, पिन 27 (D6) 6502 से 41 आदि को पिन करने के लिए …

जब तक

MEGA के 53 को पिन करने के लिए 6502 के पिन 33 (D0) को कनेक्ट करें।

8 और कनेक्शन।

MEGA पर पिन 8 (VDD) को 5v से कनेक्ट करें।

ब्रेड बोर्ड के पिन 8 से Gnd से जुड़ा 0.1uF संधारित्र यहां उपयोगी हो सकता है लेकिन आवश्यक नहीं है।

MEGA पर पिन 21 (VSS) को Gnd से कनेक्ट करें।

पिन 2, 4, 6, 36 और 38 को 5v. से बांधा जा सकता है

MEGA के पिन ३७ (घड़ी) को २ पिन और पिन ७ से कनेक्ट करें।

MEGA के 3 पिन करने के लिए पिन 34 (RWB) कनेक्ट करें।

पिन 40 (रीसेट) को ऊपर आरेख के रूप में कनेक्ट करें।

चरण 4: सर्किट का परीक्षण

सर्किट का परीक्षण
सर्किट का परीक्षण

इस स्तर पर 6502 काम करेगा और प्रोग्राम1 का उपयोग किया जा सकता है। यदि आप 8 तरह के मार्की (ऊपर के रूप में) का उपयोग कर रहे हैं, तो इसे सीधे ब्रेडबोर्ड में डाला जा सकता है और फ्लाई लीड को जमीन से जोड़ा जा सकता है, या आप 8 एलईडी और प्रतिरोधों का उपयोग कर सकते हैं। LEDS दिखाएगा कि डेटा बस में क्या है।

इस स्तर पर जो हो रहा है उसका पालन करने के लिए लूप() में 500 या उससे अधिक में देरी सेट करना भी होगा।

आपको सीरियल मॉनिटर पर ऊपर की तरह एक समान आउटपुट मिलना चाहिए। जब रीसेट दबाया जाता है, तो प्रोसेसर 7 चक्रों से गुजरता है और फिर यह $FFFC और $FFFD स्थानों में कार्यक्रम की शुरुआत की तलाश करता है। चूंकि 6502 पढ़ने के लिए कोई भौतिक पता नहीं है, इसलिए हमें उन्हें मेगा से आपूर्ति करनी होगी।

उपरोक्त आउटपुट में, 6502 $FFFC और $FFFD पढ़ता है और $00 और $10 (लो बाइट, हाई बाइट) प्राप्त करता है जो $1000 पर प्रोग्राम की शुरुआत है। प्रोसेसर तब प्रोग्राम को $1000 (ऊपर के रूप में) स्थान पर निष्पादित करना शुरू कर देता है। इस मामले में यह $A9 और $55 पढ़ता है, यानी LDA#$55 (संचयक में 85 लोड करें)। फिर से कोई भौतिक स्मृति स्थान नहीं है, मेगा डेटा बस से जो पढ़ा जाता है उसका अनुकरण करता है।

$55 (85) बाइनरी पैटर्न 01010101 देता है और जब घुमाया जाता है तो 1 बिट बाएं $AA (170) 10101010 देता है।

कार्यक्रम से पता चलता है कि प्रोसेसर सही ढंग से काम कर रहा है लेकिन जल्द ही थोड़ा उबाऊ हो जाता है, इसलिए अगले भाग पर।

चरण 5: अगला चरण

अगला कदम
अगला कदम
अगला कदम
अगला कदम

ऊपर दिया गया "स्पेगेटी का ढेर" शायद कुछ वैसा ही है जैसा इस चरण के बाद आपके पास होगा।

आगे आपको 74HC373N और 74HC00N IC को ब्रेडबोर्ड में जोड़ना होगा।

दुर्भाग्य से ३७३ के पिन डेटा बस के साथ पंक्तिबद्ध नहीं होते हैं, इसलिए उन्हें तारों से जोड़ने की आवश्यकता होगी।

5v को पिन 20 से कनेक्ट करें।

ग्राउंड को पिन 10 से कनेक्ट करें।

6502 के पिन 33 (D0) को 74HC373N के पिन 3 (D0) से कनेक्ट करें

और इसी तरह पिन D1 से D7 तक।

Q0 से Q7 आउटपुट हैं और इन्हें LED मार्की या अलग-अलग LED और रेसिस्टर्स से कनेक्ट करने की आवश्यकता होगी।

74HC00 के साथ इसके केवल 2 फाटकों की जरूरत है

5v को पिन 14 से कनेक्ट करें।

ग्राउंड को पिन 7 से कनेक्ट करें।

6502 के पिन 17 (A8) को 74HC00. के 1 (1A) को पिन से कनेक्ट करें

6502 के पिन 25 (A15) को 74HC00. के 2 (1B) को पिन से कनेक्ट करें

6502 के पिन 34(R/W) को 74HC00. के 5 (2B) को पिन से कनेक्ट करें

74HC00 के पिन 3 (1Y) को 74HC00 के पिन 4 (2A) से कनेक्ट करें

74HC00 के पिन 6 (2Y) को 74HC373N के 11 (LE) को पिन करने के लिए कनेक्ट करें

74HC373N के पिन 11 (LE) को 74HC373N के पिन 1 (OE) से कनेक्ट करें

आप एक नीली एलईडी को 1Y और जमीन के साथ-साथ 2Y को जमीन से जोड़ सकते हैं, यह इंगित करेगा कि गेट कब सक्रिय है।

अंत में ऑनक्लॉक प्रक्रिया में प्रोग्राम 1 से प्रोग्राम 2 में लाइन बदलें

setDataPins (प्रोग्राम 2 [ऑफ़सेट]);

चरण 6: कार्यक्रम

कार्यक्रम
कार्यक्रम
कार्यक्रम
कार्यक्रम

6502-मॉनिटर कार्यक्रम में ऊपर वर्णित दो 6502 रूटीन शामिल हैं।

कार्यक्रम अभी भी विकास के अधीन है और थोड़ा गन्दा है।

प्रोग्राम 2 चलाते समय, लूप () में देरी 50 या उससे कम हो सकती है और पूरी तरह से हटा भी दी जा सकती है। Serial.print() लाइनों पर टिप्पणी करने से 6502 रन तेज हो जाते हैं। पिन ११ (एलई) से ३७३ के पिन १ (ओई) को डिस्कनेक्ट करने से अलग परिणाम मिलते हैं। NAND गेट से 373 में से पिन 1 और पिन 11 को डिस्कनेक्ट करने से आप यह देख सकते हैं कि प्रत्येक घड़ी चक्र में डेटा बस में क्या है।

आपको OE को जमीन से जोड़ने की आवश्यकता हो सकती है, न कि इसे तैरते हुए छोड़ने के लिए क्योंकि यदि यह पिन अधिक हो जाता है तो 8 आउटपुट लाइनें अक्षम हो जाती हैं। जब LE पिन अधिक होता है, तो आउटपुट पिन इनपुट के समान होते हैं। LE पिन को नीचे ले जाने से आउटपुट लैच हो जाते हैं यानी यदि इनपुट पिन बदलते हैं, तो आउटपुट वही रहता है।

मैंने प्रोग्राम को यथासंभव सरल रखने की कोशिश की है ताकि इसे समझना आसान हो सके।

समय की देरी के साथ प्रयोग करने से आप ठीक वैसा ही अनुसरण कर सकते हैं जैसा कि 6502 कर रहा है।

6502 असेंबलर में नीचे दो प्रोग्राम (दोनों पते पर चलते हैं) हैं:

कार्यक्रम1

एलडीए#$55

एनओपी

रोली

एसटीए$1010

जेएमपी$1000

ROL संचायक की सामग्री को एक बिट बाईं ओर घुमाता है जिसका अर्थ है कि $55 अब $AA हो जाता है।

मशीन कोड (हेक्स) में: A9 55 EA 2A 8D 10 10 4C 00 10

कार्यक्रम २

एलडीए#$01

एसटीए$8100

एडीसी#$03

एसटीए$8100

जेएमपी$1005

मशीन कोड (हेक्स) में: A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

प्रोग्राम 2 में अब एक भौतिक पता $ 8100 है, जो कि पता बस में 74HC373 है।

यानी 6502 का A15 32768 ($8000) है और A8 256 ($0100) = 33024 ($8100) है।

इसलिए जब ६५०२ $८१०० (एसटीए $८१००) को लिखता है तो ६५०२ का आर/डब्ल्यू कम होता है और ३७३ एलई के कम होने पर ६५०२ डेटा बस पर डेटा बंद हो जाता है। 74HC00 NAND गेट के कारण सिग्नल उलट जाते हैं।

उपरोक्त स्क्रीन प्रिंट में दूसरा लेखन 3 (ADC#$03) से बढ़ा है - $7F से $82 हो गया है।

वास्तव में, पता बस की 2 से अधिक पंक्तियों का उपयोग 373 के विशिष्ट स्थान के लिए किया जाएगा। चूंकि यह संभावित 65536 में से एकमात्र भौतिक पता है, यह दर्शाता है कि पता बस कैसे काम करती है। आप अलग-अलग एड्रेस पिन के साथ प्रयोग कर सकते हैं और इसे एक अलग स्थान पर रख सकते हैं। बेशक, आपको एसटीए ऑपरेंड को नए स्थान पर बदलना होगा। जैसे यदि आपने पता पंक्ति A15 और A9 का उपयोग किया है तो पता $8200 (32768 + 512) होगा।

चरण 7: निष्कर्ष

निष्कर्ष
निष्कर्ष

मैंने यह दिखाने की कोशिश की है कि 6502 को ऊपर उठाना और चलाना कितना आसान है।

मैं इस क्षेत्र का विशेषज्ञ नहीं हूं इसलिए मैं किसी भी रचनात्मक टिप्पणी या जानकारी का स्वागत करूंगा।

इसे और विकसित करने के लिए आपका स्वागत है और आपने जो किया है उसमें मेरी दिलचस्पी होगी।

मैं परियोजना में एक EEPROM, SRAM और एक 6522 जोड़ने के साथ-साथ भविष्य में इसे स्ट्रिप बोर्ड पर लगाने का इरादा रखता हूं।

सिफारिश की: