विषयसूची:

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

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

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

और भी आगे बढ़ते हुए, मैंने अब मुख्य बोर्ड में एक ऑक्टल लैच, 8 आयताकार एलईडी और 220 ओम रेसिस्टर ऐरे को जोड़ा है। ऐरे के कॉमन पिन और ग्राउंड के बीच एक जम्पर भी होता है, जिससे एलईडी को बंद किया जा सकता है। 74HC00 NAND गेट को 78LS08 और गेट से बदल दिया गया है, गेट की वायरिंग भी बदल दी गई है। AND गेट का मतलब है कि 6522 अब $E000 के बजाय $6000 पर स्थित है।

6502 ड्राइव करने के लिए बाहरी घड़ी के कनेक्शन के लिए एक पिन भी है। इस कनेक्शन के साथ, मेगा को घड़ी संकेत प्रदान करने की कोई आवश्यकता नहीं है। MEGA अभी भी मॉनिटर करता है कि पहले की तरह प्रोसेसर के साथ क्या हो रहा है।

मैंने कुंडी के लिए 20 पिन 74HC373 का उपयोग किया क्योंकि मेरे पास कुछ था। ब्रेडबोर्ड पर यह ठीक था, लेकिन 74HC573 बस संगत है और तारों के भार को बचा सकता है। UCN5801A जो कि 22 पिन IC है, को भी सर्किट में माना जा सकता है, लेकिन वायरिंग थोड़ी अलग होगी।

शीर्ष, एकल नारंगी एलईडी एक शक्ति संकेतक है और निचला बायां लाल इंगित करता है कि लेखन कब हो रहा है। यदि बोर्ड उच्च गति से चलाया जाता है तो उत्तरार्द्ध महत्वहीन होगा।

संशोधित सर्किट ऊपर है (74HC573 के साथ)।

चरण 1: प्रदर्शन कार्यक्रम

प्रदर्शन कार्यक्रम
प्रदर्शन कार्यक्रम

6502 मॉनिटर में दो सरल प्रदर्शन कार्यक्रम शामिल हैं और उनका डिसैम्बल्ड कोड यहां है।

यह प्रोग्राम 1 को 6502 ए रजिस्टर में लोड करता है और इसे कुंडी में संग्रहीत करता है। यह तब ए रजिस्टर में 1 जोड़ता है और उसे कुंडी में संग्रहीत करता है। फिर यह $१००५ पर वापस कूदता है और प्रक्रिया हमेशा के लिए दोहराती है।

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

यह प्रोग्राम पहले 6522 पोर्ट बी के डीडीआर को आउटपुट पर सेट करता है। यह तब बंदरगाह के साथ-साथ कुंडी में $ 55 (B01010101) संग्रहीत करता है। ए रजिस्टर फिर 1 कदम दाहिनी ओर घूमता है और अब $AA (B10101010) रखता है। इसे फिर से पोर्ट बी और लैच में स्टोर किया जाता है। कार्यक्रम $ 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 STA $4100 1015 4सी 05 10 जेएमपी $1005 1018. END

आप में से तेज आंखों ने देखा होगा कि रंगीन एल ई डी हरे रंग की तुलना में एक अलग पैटर्न दिखा रहे हैं। ऐसा इसलिए है क्योंकि रंगीन वाले पर आम सीसा 5v से जुड़ा होता है और हरे रंग पर आम जमीन से जुड़ा होता है।

कोड की इस लाइन को प्रोग्राम 2 या प्रोग्राम 3 में बदलें।

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

एक 6502 असेंबलर और डिस्सेम्बलर आपके प्रोग्राम को एन्कोड करने में मदद करने के लिए उपयोगी टूल हैं।

चरण 2: एक EEPROM जोड़ना

एक EEPROM जोड़ना
एक EEPROM जोड़ना
एक EEPROM जोड़ना
एक EEPROM जोड़ना
एक EEPROM जोड़ना
एक EEPROM जोड़ना

EEPROM बोर्ड के लिए, मैंने 950 x 650 मिमी स्ट्रिप बोर्ड और 19 मिमी पुरुष हेडर पिन का उपयोग किया ताकि बोर्ड नीचे वाले को साफ़ कर सके। यह बोर्ड नीचे 6502 बोर्ड में प्लग करता है। EEPROM एक ATMEL 28C256 है जिसमें 28 पिन हैं और इसमें 32k x 8 बिट मेमोरी है। यह वर्तमान में उपयोग किए जा रहे छोटे कार्यक्रमों के लिए पर्याप्त से अधिक है।

मैंने इस बोर्ड के लिए एक सर्किट आरेख नहीं किया है, लेकिन यह काफी सीधा है कि यह नीचे के 6502 बोर्ड से कैसे जुड़ता है। ये EEPROM चिप्स बस के अनुकूल नहीं हैं इसलिए इन्हें अलग-अलग पिनों से जोड़ा जाना चाहिए, इसलिए सभी "हरे और सफेद स्पेगेटी"। मैंने बोर्ड के नीचे की तरफ डेटा लाइनों को एक साथ जोड़कर पहले के बोर्ड पर ब्रिजिंग मुद्दे को हल किया है।

EEPROM के 14 एड्रेस पिन बाईं ओर (ग्रीन वायर) पर उपयुक्त पिन से जुड़ते हैं और I/O पिन दाईं ओर (व्हाइट वायर) डेटा पिन से जुड़ते हैं। पिन 27 (WE) पिन 28 (5v) से जुड़ा है, पिन 22 (OE) जमीन से जुड़ा है और पिन 20 (CE) एक NAND गेट से जुड़ा है। NAND गेट के 2 इनपुट A15 से जुड़े हैं मुख्य बोर्ड। इसका मतलब यह है कि जब यह पिन ऊंचा हो जाता है, तो NAND गेट EEPROM के CE पिन को कम सिग्नल देता है जो इसे सक्रिय बनाता है। इस सेट अप के साथ इसका मतलब है कि EEPROM को केवल 6502 तक ही पढ़ा जा सकता है।

चूंकि EEPROM मेमोरी मैप पर शीर्ष 32k में रहता है, इसका मतलब है कि $FFFC और $FFFD रीसेट होने के बाद 6502 के लिए प्रारंभ पता रख सकते हैं। ६५२२ के पते $६००० और $६००एफ के बीच होने के साथ और कुंडी $४१०० पर है, यह किसी भी स्मृति संघर्ष को रोकता है।

NMI वेक्टर ($FFFA और $FFFB) और BRK / IRQ वेक्टर ($FFFE anf $FFFF) को भी इसी तरह लिखा जा सकता है।

चरण 3: EEPROM की प्रोग्रामिंग

EEPROM की प्रोग्रामिंग
EEPROM की प्रोग्रामिंग
EEPROM की प्रोग्रामिंग
EEPROM की प्रोग्रामिंग

EEPROM पर किसी प्रोग्राम को स्टोर करने के लिए उसे एक प्रोग्रामर की जरूरत होती है। मैंने एक स्ट्रिप बोर्ड, एक Arduino Pro Mini, 74HC595 के एक जोड़े और एक ZIF सॉकेट से एक बनाया है। मूल रूप से, प्रोग्रामर को AT28C16 के लिए बनाया गया था जिसमें AT28C256 की तुलना में कम पता लाइनें हैं इसलिए इसे संशोधित करना पड़ा।

सर्किट आरेख दिखाता है कि इन दोनों EEPROM को कैसे वायर किया जाए। फोटो से यह स्पष्ट नहीं है कि दो 595 चिप्स उल्टा हैं और जैसा कि चित्र में दिखाया गया है। ५९५/१ के पिन १ से ७ ईईपीरोम के ए१ से ए७ तक लाइन अप करते हैं, भले ही इसका उपयोग किया जाता हो। यह 7 कनेक्टिंग तारों को बचाता है। बोर्ड अब थोड़ा तंग दिखता है और ऐसा इसलिए है क्योंकि मूल रूप से मैंने 24 पिन डीआईएल सॉकेट का उपयोग किया था जिसे अब 28 पिन वाले ZIF सॉकेट से बदल दिया गया है।

एक प्रोग्राम शामिल है जो मेरे बोर्ड के साथ काम करता है। कार्यक्रम किसी भी Arduino और 595s के साथ सर्किट में काम करेगा जैसा कि दिखाया गया है। मैंने 5v प्रो मिनी को चुना क्योंकि यह कॉम्पैक्ट है और सेट अप में छोड़ने के लिए काफी सस्ता है।

चरण 4: EEPROM कार्यक्रम

ईईपीरोम कार्यक्रम
ईईपीरोम कार्यक्रम

EEPROM प्रोग्रामर में तीन सरल प्रोग्राम होते हैं। उनका उपयोग करने के लिए, बस उस लाइन को अनकम्मेंट करें जिसका आप उपयोग करना चाहते हैं।

// 6522 के पोर्ट ए से पढ़ें

// कॉन्स्ट बाइट डेटा = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

प्रोग्राम समाप्त होने पर मेमोरी डंप दिखाता है। नीचे दिए गए कार्यक्रम का हिस्सा आपको उस पर पूरा नियंत्रण देता है जिसे आप लिखना या मिटाना चाहते हैं, $FFFC और $FFFD सेट करता है और फिर किसी दी गई सीमा की सामग्री प्रदर्शित करता है। अपनी आवश्यकता के अनुसार बस असम्बद्ध करें या मापदंडों को बदलें। पते दशमलव प्रारूप में भी दर्ज किए जा सकते हैं।

// मिटाएं EEPROM (422, 930, 0x41); // EEPROM के पूरे या हिस्से को मिटाने के लिए उपयोग करें - प्रारंभ, अंत, बाइट

Serial.println ("प्रोग्रामिंग EEPROM"); राशि = प्रोग्राम_न्यूमेरिक_डेटा (0x1000); राइटईईपीरोम (0x7ffc, 0x00); // 6502 राइटईईपीरोम (0x7ffd, 0x90) के लिए $FFFC सेट करें; // 6502 के लिए $ FFFD सेट करें // writeEEPROM (0x1000, 0xA9); // डेटा का 1 बाइट लिखें Serial.println ("किया गया"); स्ट्रिंग रूपरेखा = "लिखित" + (स्ट्रिंग) राशि + "बाइट्स"; Serial.println (रूपरेखा); Serial.println ("ईईपीरोम पढ़ना"); प्रिंट सामग्री (0x0000, 0x112f); // प्रिंट सामग्री प्रदर्शित करने के लिए सीमा निर्धारित करें (0x7ff0, 0x7fff); // EEPROM पर अंतिम 16 बाइट्स पढ़ता है

कार्यक्रम से एक संक्षिप्त आउटपुट ऊपर है।

चरण 5: EEPROM से 6502 चलाना

EEPROM से 6502 चलाना
EEPROM से 6502 चलाना
EEPROM से 6502 चलाना
EEPROM से 6502 चलाना
EEPROM से 6502 चलाना
EEPROM से 6502 चलाना

प्रोग्राम किए गए EEPROM को अब इसके बोर्ड में डाला जा सकता है और यह गुल्लक मुख्य 6502 बोर्ड पर वापस आ जाता है, जो MEGA पर वापस आ जाता है। ऊपर दी गई साइड और टॉप व्यू तस्वीरें दिखाती हैं कि यह सब एक साथ कैसे फिट बैठता है।

6502 अब $FFFC और $FFFD (जो कि $9000 है) से प्रारंभ वेक्टर को पढ़ सकता है और फिर वहां संग्रहीत प्रोग्राम पर जा सकता है। MEGA अभी भी क्लॉक सिग्नल प्रदान कर रहा है और इसके प्रोग्राम को केवल क्लॉक सिग्नल प्रदान करने और 6502 मॉनिटर करने के लिए बदलने की आवश्यकता है। ऐसा करने के लिए एक संशोधित प्रोग्राम प्रदान किया गया है।

चल रही तस्वीर इस कार्यक्रम को चल रही दिखाती है।

9000 एलडीए #$00 ए9 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

स्विच पोर्ट ए में प्लग किए गए हैं और प्रोग्राम पोर्ट बी और 74HC373 (जो वर्तमान में अस्पष्ट है) पर पढ़ रहे मान को प्रदर्शित करता है। स्विच जमीन से जुड़े हैं और एलईडी 5v से जुड़े हैं। EOR #$FF लैच की समस्या को ठीक करता है और पोर्ट B को लैच पर लिखने से पहले बिट्स को फ़्लिप करके अलग-अलग पैटर्न प्रदर्शित करता है।

चरण 6: बाहरी समय संकेत

बाहरी समय संकेत
बाहरी समय संकेत

यदि बोर्ड के शीर्ष पर पिन पर क्लॉक सिग्नल लगाया जाता है, तो 6502 अब MEGA से स्वतंत्र रूप से चल सकता है। बेशक इसे बिजली की आपूर्ति की भी जरूरत है। मैंने अलग-अलग घड़ियों के साथ प्रयोग किया है और यहां तक कि एक क्रिस्टल ऑसीलेटर के साथ 6502 को 1 मेगाहर्ट्ज पर भी चलाया है। MEGA तेज गति के साथ नहीं चल सकता है, इसलिए इसे हटाना होगा।

मैंने 555 टाइमर से आउटपुट की भी कोशिश की लेकिन वह काम नहीं करता है। मुझे लगता है कि ऐसा इसलिए हो सकता है क्योंकि यह एक वर्गाकार तरंग नहीं है? सीडी4017 आउटपुट में से एक से कनेक्ट होने पर, यह 6502 ड्राइव करता था। मैंने घड़ी संकेत प्राप्त करने और प्राप्त करने के लिए उपरोक्त किटों में से एक में पैच किया।

मैं अभी भी घड़ी संकेत प्राप्त करने के लिए विभिन्न तरीकों को देख रहा हूं।

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

मैंने दिखाया है कि कुछ जटिल सर्किट कैसे बनाए जाते हैं और कम से कम भागों के साथ काम करने के लिए एक बहुत ही सरल "कंप्यूटर" प्राप्त किया जाता है। दी, कंप्यूटर वर्तमान में बहुत कुछ नहीं कर सकता है या भविष्य में ऐसा करने की संभावना है।

80 के दशक की शुरुआत में, अपने VIC20 के साथ, मैं भयानक मशीन पर आश्चर्य करता था और मुझे यह नहीं पता था कि एक को एक साथ कैसे रखा जाए। समय आगे बढ़ गया है और इसलिए तकनीक भी है, लेकिन बुनियादी बातों पर वापस जाना और खरोंच से आपके द्वारा बनाई गई किसी चीज़ पर गर्व करना अभी भी अच्छा है।

इस कंप्यूटर को और विकसित करने के लिए, मैं 2k SRAM को $0000 से $2047 तक लगाने का इरादा रखता हूं और 1 MHz थरथरानवाला जोड़ना चाहता हूं। शायद सीडी 4040 (12-स्टेज बाइनरी रिपल काउंटर/डिवाइडर) जैसा कुछ जोड़ देगा ताकि मैं अलग-अलग घड़ी की गति में टैप कर सकूं।

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

भले ही MEGA 6502 को चलाने के लिए अनावश्यक होता जा रहा है, फिर भी यह मशीन कोड को डीबग करने के काम आता है। जैसा कि सभी जानते हैं, मशीन कोड में हमेशा बग होते हैं!

सिफारिश की: