डब्ल्यूडीसी 65C02: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 203: Line 203:
एक बग जो 6502 के सभी NMOS वेरिएंट में स्थित है, एड्रेसिंग मोड#इंडेक्स्ड एब्सोल्यूट का उपयोग करते समय जंप निर्देश सम्मिलित  करता है। इस एड्रेसिंग मोड में, लक्ष्य का पता <code>JMP</code> निर्देश एक ऑपरेंड होने के अतिरिक्त मेमोरी जंप वेक्टर से प्राप्त किया जाता है <code>JMP</code> निर्देश। उदाहरण के लिए <code>JMP ($1234)</code> स्मृति स्थानों में मूल्य लाएगा {{mono|$1234}} (कम महत्वपूर्ण बाइट) और {{mono|$1235}} (सबसे महत्वपूर्ण बाइट) और उन मानों को प्रोग्राम काउंटर में लोड करें जो तब प्रोसेसर को वेक्टर में संग्रहीत पते पर निष्पादन प्रचलित  रखने का कारण बनेगा।
एक बग जो 6502 के सभी NMOS वेरिएंट में स्थित है, एड्रेसिंग मोड#इंडेक्स्ड एब्सोल्यूट का उपयोग करते समय जंप निर्देश सम्मिलित  करता है। इस एड्रेसिंग मोड में, लक्ष्य का पता <code>JMP</code> निर्देश एक ऑपरेंड होने के अतिरिक्त मेमोरी जंप वेक्टर से प्राप्त किया जाता है <code>JMP</code> निर्देश। उदाहरण के लिए <code>JMP ($1234)</code> स्मृति स्थानों में मूल्य लाएगा {{mono|$1234}} (कम महत्वपूर्ण बाइट) और {{mono|$1235}} (सबसे महत्वपूर्ण बाइट) और उन मानों को प्रोग्राम काउंटर में लोड करें जो तब प्रोसेसर को वेक्टर में संग्रहीत पते पर निष्पादन प्रचलित  रखने का कारण बनेगा।


बग तब प्रकट होता है जब वेक्टर पता समाप्त होता है {{mono|$FF}} जो [[स्मृति पृष्ठ]] की सीमा है। इस विषय में<code>JMP</code> लक्ष्य पते का सबसे महत्वपूर्ण बाइट प्राप्त करेगा {{mono|$00}}<nowiki> मूल पृष्ठ के अतिरिक्त {{Mono|$00}नए पृष्ठ का }। इस तरह </nowiki><code>JMP ($12FF)</code> पर लक्ष्य पते का कम से कम महत्वपूर्ण बाइट प्राप्त होगा {{mono|$12FF}} और लक्षित पते का सबसे महत्वपूर्ण बाइट {{mono|$1200}} इसके अतिरिक्त {{mono|$1300}}. 65C02 ने इस समस्या को ठीक किया।{{sfn|Wagner|1983|p=204}}
बग तब प्रकट होता है जब वेक्टर पता समाप्त होता है {{mono|$FF}} जो [[स्मृति पृष्ठ]] की सीमा है। इस विषय में<code>JMP</code>लक्ष्य पते का सबसे महत्वपूर्ण बाइट प्राप्त करेगा {{mono|$00}}<nowiki> मूल पृष्ठ के अतिरिक्त {{Mono|$00}नए पृष्ठ का }। इस तरह</nowiki><code>JMP($12FF)</code> पर लक्ष्य पते का कम से कम महत्वपूर्ण बाइट प्राप्त होगा {{mono|$12FF}} और लक्षित पते का सबसे महत्वपूर्ण बाइट {{mono|$1200}} इसके अतिरिक्त {{mono|$1300}}. 65C02 ने इस समस्या को ठीक किया।{{sfn|Wagner|1983|p=204}}


एक बग की तुलना में अधिक निरीक्षण NMOS 6502 के स्थिति रजिस्टर में (डी) ecimal ध्वज की स्थिति एक [[रीसेट (कंप्यूटिंग)]] या रुकावट के बाद अपरिभाषित है। इसका मतलब यह है कि अंकगणितीय परिचालनों से संबंधित किसी भी बग से बचने के लिए प्रोग्रामर को ध्वज को ज्ञात मान पर सेट करना होगा। नतीजतन एक पाता है<code>CLD</code>निर्देश (स्पष्ट दशमलव) लगभग सभी 6502 [[इंटरप्ट हैंडलर]] में साथ ही साथ रीसेट कोड में भी। 65C02 किसी भी बाधा या हार्डवेयर रीसेट के जवाब में स्टैक पर स्थिति रजिस्टर को धक्का देने के बाद स्वचालित रूप से इस ध्वज को साफ़ करता है इस प्रकार प्रोसेसर को बाइनरी अंकगणितीय मोड में वापस रखता है।<ref name=differences/>
एक बग की तुलना में अधिक निरीक्षण NMOS 6502 के स्थिति रजिस्टर में (डी) ecimal ध्वज की स्थिति एक [[रीसेट (कंप्यूटिंग)]] या रुकावट के बाद अपरिभाषित है। इसका मतलब यह है कि अंकगणितीय परिचालनों से संबंधित किसी भी बग से बचने के लिए प्रोग्रामर को ध्वज को ज्ञात मान पर सेट करना होगा। नतीजतन एक पाता है<code>CLD</code>निर्देश (स्पष्ट दशमलव) लगभग सभी 6502 [[इंटरप्ट हैंडलर]] में साथ ही साथ रीसेट कोड में भी। 65C02 किसी भी बाधा या हार्डवेयर रीसेट के जवाब में स्टैक पर स्थिति रजिस्टर को धक्का देने के बाद स्वचालित रूप से इस ध्वज को साफ़ करता है इस प्रकार प्रोसेसर को बाइनरी अंकगणितीय मोड में वापस रखता है।<ref name=differences/>
Line 209: Line 209:
[[बाइनरी-कोडित दशमलव]] अंकगणितीय के दौरान NMOS 6502 अंतर्निहित बाइनरी अंकगणित के परिणाम को प्रतिबिंबित करने के लिए (N)निष्क्रिय  o(V) erflow और (Z) ero फ़्लैग्स को अपडेट करेगा अर्थात फ़्लैग्स पहले की गणना किए गए परिणाम को दर्शा रहे हैं प्रोसेसर दशमलव सुधार कर रहा है। इसके विपरीत 65C02 अंकगणित निर्देश के अनुसार अतिरिक्त घड़ी चक्र की कीमत पर, दशमलव अंकगणित के परिणाम के अनुसार इन झंडों को सेट करता है।<ref name=differences>{{cite web|title=Differences between NMOS 6502 and CMOS 65c02|url=http://wilsonminesco.com/NMOS-CMOSdif/|access-date=27 February 2018|quote=N, V, and Z flags were incorrect after decimal operation (but C was ok).}}</ref>
[[बाइनरी-कोडित दशमलव]] अंकगणितीय के दौरान NMOS 6502 अंतर्निहित बाइनरी अंकगणित के परिणाम को प्रतिबिंबित करने के लिए (N)निष्क्रिय  o(V) erflow और (Z) ero फ़्लैग्स को अपडेट करेगा अर्थात फ़्लैग्स पहले की गणना किए गए परिणाम को दर्शा रहे हैं प्रोसेसर दशमलव सुधार कर रहा है। इसके विपरीत 65C02 अंकगणित निर्देश के अनुसार अतिरिक्त घड़ी चक्र की कीमत पर, दशमलव अंकगणित के परिणाम के अनुसार इन झंडों को सेट करता है।<ref name=differences>{{cite web|title=Differences between NMOS 6502 and CMOS 65c02|url=http://wilsonminesco.com/NMOS-CMOSdif/|access-date=27 February 2018|quote=N, V, and Z flags were incorrect after decimal operation (but C was ok).}}</ref>


पढ़ने-संशोधित-लिखने (आर-एम-डब्ल्यू) निर्देश निष्पादित करते समय जैसे <code>INC ''addr''</code>सभी NMOS वैरिएंट Addr पर दोहरा लेखन करेंगे पहले Addr पर मिले वर्तमान मान को फिर से लिखेंगे और फिर संशोधित मान लिखेंगे। यदि Addr एक हार्डवेयर रजिस्टर है तो यह व्यवहार कठिन-से-समाधान बग में परिणाम कर सकता है। यह तब हो सकता है जब हार्डवेयर रजिस्टर में मूल्य में परिवर्तन के लिए देख रहा हो और फिर एक क्रिया करता है इस विषय में यह दो क्रियाएं करेगा एक मूल मूल्य के साथ और फिर नए मूल्य के साथ। 65C02 इसके अतिरिक्त  Addr का दोहरा रीड करता है उसके बाद सिंगल राइट करता है।
पढ़ने-संशोधित-लिखने (आर-एम-डब्ल्यू) निर्देश निष्पादित करते समय जैसे<code>INC ''addr''</code>सभी NMOS वैरिएंट Addr पर दोहरा लेखन करेंगे पहले Addr पर मिले वर्तमान मान को फिर से लिखेंगे और फिर संशोधित मान लिखेंगे। यदि Addr एक हार्डवेयर रजिस्टर है तो यह व्यवहार कठिन-से-समाधान बग में परिणाम कर सकता है। यह तब हो सकता है जब हार्डवेयर रजिस्टर में मूल्य में परिवर्तन के लिए देख रहा हो और फिर एक क्रिया करता है इस विषय में यह दो क्रियाएं करेगा एक मूल मूल्य के साथ और फिर नए मूल्य के साथ। 65C02 इसके अतिरिक्त  Addr का दोहरा रीड करता है उसके बाद सिंगल राइट करता है।


इंडेक्सिंग एड्रेसिंग करते समय यदि इंडेक्सिंग एक पृष्ठ सीमा को पार कर जाती है तो सही पते तक पहुँचने से पहले सभी NMOS वेरिएंट एक अमान्य पते से पढ़ेंगे। जैसा कि R-M-W निर्देश के साथ होता है, अनुक्रमण के माध्यम से हार्डवेयर रजिस्टरों तक पहुँचने पर यह व्यवहार समस्याएँ पैदा कर सकता है। 65C02 ने इस समस्या को ठीक किया जब इंडेक्सिंग एक पृष्ठ सीमा को पार कर जाती है तो निर्देश ओपकोड का एक डमी रीड प्रदर्शन करके। हालाँकि इस फिक्स ने एक नया बग प्रस्तुत किया{{cn|date=November 2022}} जो तब होता है जब आधार पता एक समान पृष्ठ सीमा पर होता है (जिसका अर्थ है कि अनुक्रमण अगले पृष्ठ पर कभी नहीं जाएगा)। नए बग के साथ अनुक्रमण से पहले आधार पते पर एक डमी रीड किया जाता है जैसे कि <code>LDA $1200,X</code> एक डमी पढ़ेगा {{mono|$1200}} X के मान को जोड़े जाने से पहले {{mono|$1200}}. फिर से यदि हार्डवेयर रजिस्टर पतों पर अनुक्रमण किया जाता है तो इस बग का परिणाम अपरिभाषित व्यवहार हो सकता है।
इंडेक्सिंग एड्रेसिंग करते समय यदि इंडेक्सिंग एक पृष्ठ सीमा को पार कर जाती है तो सही पते तक पहुँचने से पहले सभी NMOS वेरिएंट एक अमान्य पते से पढ़ेंगे। जैसा कि R-M-W निर्देश के साथ होता है, अनुक्रमण के माध्यम से हार्डवेयर रजिस्टरों तक पहुँचने पर यह व्यवहार समस्याएँ पैदा कर सकता है। 65C02 ने इस समस्या को ठीक किया जब इंडेक्सिंग एक पृष्ठ सीमा को पार कर जाती है तो निर्देश ओपकोड का एक डमी रीड प्रदर्शन करके। हालाँकि इस फिक्स ने एक नया बग प्रस्तुत किया{{cn|date=November 2022}} जो तब होता है जब आधार पता एक समान पृष्ठ सीमा पर होता है (जिसका अर्थ है कि अनुक्रमण अगले पृष्ठ पर कभी नहीं जाएगा)। नए बग के साथ अनुक्रमण से पहले आधार पते पर एक डमी रीड किया जाता है जैसे कि <code>LDA $1200,X</code> एक डमी पढ़ेगा {{mono|$1200}} X के मान को जोड़े जाने से पहले {{mono|$1200}}. फिर से यदि हार्डवेयर रजिस्टर पतों पर अनुक्रमण किया जाता है तो इस बग का परिणाम अपरिभाषित व्यवहार हो सकता है।
Line 232: Line 232:
* <code>STZ ''addr''</code>, Addr में शून्य स्टोर करें। की आवश्यकता को प्रतिस्थापित करता है<code>LDA 0;STA ''addr''</code> और संचायक के मान को बदलने की आवश्यकता नहीं है। जैसा कि अधिकांश कार्यक्रमों में यह कार्य सामान्य है {{code|STZ}}कोड आकार को कम कर सकते हैं और दोनों को समाप्त करके {{code|LDA}}के साथ-साथ संचायक के मूल्य को बचाने के लिए आवश्यक कोई भी कोड प्राय: a <code>PHA</code> <code>PLA</code> जोड़ा।{{sfn|Wagner|1983|p=203}}
* <code>STZ ''addr''</code>, Addr में शून्य स्टोर करें। की आवश्यकता को प्रतिस्थापित करता है<code>LDA 0;STA ''addr''</code> और संचायक के मान को बदलने की आवश्यकता नहीं है। जैसा कि अधिकांश कार्यक्रमों में यह कार्य सामान्य है {{code|STZ}}कोड आकार को कम कर सकते हैं और दोनों को समाप्त करके {{code|LDA}}के साथ-साथ संचायक के मूल्य को बचाने के लिए आवश्यक कोई भी कोड प्राय: a <code>PHA</code> <code>PLA</code> जोड़ा।{{sfn|Wagner|1983|p=203}}
* <code>PHX</code>,<code>PLX</code>,<code>PHY</code>,<code>PLY</code>, X और Y रजिस्टरों को स्टैक से/में धकेलें और खींचें। पहले केवल संचायक और स्थिति रजिस्टर में पुश और पुल निर्देश होते थे। X और Y को पहले संचायक में ले जाकर ही ढेर किया जा सकता है<code>TXA</code>या<code>TYA</code>जिससे संचायक की सामग्री<code>PHA मे</code>बदली जाती है फिर उपयोग किया जाता है।  
* <code>PHX</code>,<code>PLX</code>,<code>PHY</code>,<code>PLY</code>, X और Y रजिस्टरों को स्टैक से/में धकेलें और खींचें। पहले केवल संचायक और स्थिति रजिस्टर में पुश और पुल निर्देश होते थे। X और Y को पहले संचायक में ले जाकर ही ढेर किया जा सकता है<code>TXA</code>या<code>TYA</code>जिससे संचायक की सामग्री<code>PHA मे</code>बदली जाती है फिर उपयोग किया जाता है।  
* <code>BRA</code> शाखा हमेशा। ए की तरह काम करता है<code>JMP</code>लेकिन अन्य शाखाओं की तरह 1-बाइट सापेक्ष पते का उपयोग करता है और एक बाइट बचाता है। गति अक्सर 3 चक्र निरपेक्ष के समान होती है <code>JMP</code> जब तक कि एक पृष्ठ पार नहीं किया जाता है जो इसे बना देगा <code>BRA</code> संस्करण 1 चक्र लंबा (4 चक्र)।<ref>{{cite web |url=http://www.westerndesigncenter.com/wdc/documentation/w65c02s.pdf |title=W65C02S Datasheet }}</ref> जैसा कि पता सापेक्ष है यह पुनर्निधारणीय कोड लिखते समय भी उपयोगी होता है{{sfn|Wagner|1983|p=203}} स्मृति प्रबंधन इकाइयों से पहले युग में एक सामान्य कार्य।
* <code>BRA</code>शाखा हमेशा। ए की तरह काम करता है<code>JMP</code>लेकिन अन्य शाखाओं की तरह 1-बाइट सापेक्ष पते का उपयोग करता है और एक बाइट बचाता है। गति अक्सर 3 चक्र निरपेक्ष के समान होती है<code>JMP</code>जब तक कि एक पृष्ठ पार नहीं किया जाता है जो इसे बना देगा<code>BRA</code>संस्करण 1 चक्र लंबा (4 चक्र)।<ref>{{cite web |url=http://www.westerndesigncenter.com/wdc/documentation/w65c02s.pdf |title=W65C02S Datasheet }}</ref> जैसा कि पता सापेक्ष है यह पुनर्निधारणीय कोड लिखते समय भी उपयोगी होता है{{sfn|Wagner|1983|p=203}} स्मृति प्रबंधन इकाइयों से पहले युग में एक सामान्य कार्य।


=== बिट हेरफेर निर्देश ===
=== बिट हेरफेर निर्देश ===
Line 251: Line 251:
* <code>TSB ''addr''</code>और <code>TRB ''addr''</code>टेस्ट और सेट बिट्स और टेस्ट और रीसेट बिट्स।
* <code>TSB ''addr''</code>और <code>TRB ''addr''</code>टेस्ट और सेट बिट्स और टेस्ट और रीसेट बिट्स।


: संचायक में एक मुखौटा (<code>.A</code>) Addr पर मेमोरी के साथ तार्किक रूप से ANDed है कौन सा स्थान शून्य पृष्ठ या निरपेक्ष हो सकता है। स्थिति रजिस्टर में Z ध्वज तार्किक के परिणाम के अनुसार वातानुकूलित है और—कोई अन्य स्थिति रजिस्टर ध्वज प्रभावित नहीं होता है। इसके अतिरिक्त Addr में बिट्स को मास्क के अनुसार सेट (TSB) या क्लियर (TRB) किया जाता है संक्षेप में TSB तार्किक के बाद एक तार्किक प्रदर्शन करता है और तार्किक के परिणाम को ''Addr'' पर संग्रहीत करता है , जबकि TRB तार्किक के परिणामों को ''Addr'' पर संग्रहीत करता है। दोनों ही स्थितियों  में स्थिति रजिस्टर में Z ध्वज ''Addr'' की सामग्री से पहले के परिणाम को इंगित करता है<code>A OR AND OR AND.A AND ''addr''</code>बदल गया है। <code>BIT</code>टीआरबी और टीएसबी इस प्रकार निर्देशों के अनुक्रम को प्रतिस्थापित करते हैं कम्प्यूटेशनल परिवर्तनों को बचाने के लिए अनिवार्य रूप से निर्देश को अतिरिक्त चरणों के साथ जोड़ते हैं लेकिन एक तरह से प्रभावित मूल्य की स्थिति को बदलने से पहले रिपोर्ट करते हैं।  
: संचायक में एक मुखौटा (<code>A</code>) Addr पर मेमोरी के साथ तार्किक रूप से ANDed है कौन सा स्थान शून्य पृष्ठ या निरपेक्ष हो सकता है। स्थिति रजिस्टर में Z ध्वज तार्किक के परिणाम के अनुसार वातानुकूलित है और—कोई अन्य स्थिति रजिस्टर ध्वज प्रभावित नहीं होता है। इसके अतिरिक्त Addr में बिट्स को मास्क के अनुसार सेट (TSB) या क्लियर (TRB) किया जाता है संक्षेप में TSB तार्किक के बाद एक तार्किक प्रदर्शन करता है और तार्किक के परिणाम को ''Addr'' पर संग्रहीत करता है जबकि TRB तार्किक के परिणामों को ''Addr'' पर संग्रहीत करता है। दोनों ही स्थितियों  में स्थिति रजिस्टर में Z ध्वज ''Addr'' की सामग्री से पहले के परिणाम को इंगित करता है<code>A OR AND OR AND.A AND ''addr''</code>बदल गया है। <code>BIT</code>टीआरबी और टीएसबी इस प्रकार निर्देशों के अनुक्रम को प्रतिस्थापित करते हैं कम्प्यूटेशनल परिवर्तनों को बचाने के लिए अनिवार्य रूप से निर्देश को अतिरिक्त चरणों के साथ जोड़ते हैं लेकिन एक तरह से प्रभावित मूल्य की स्थिति को बदलने से पहले रिपोर्ट करते हैं।  


रॉकवेल के परिवर्तनों ने किसी भी बिट को सीधे सेट करने और परीक्षण करने के लिए और परीक्षण, स्पष्ट और शाखा को एक ही ऑपकोड में संयोजित करने के लिए अधिक बिट हेरफेर निर्देश जोड़े। रॉकवेल के R65C00 परिवार में प्रारम्भ से ही नए निर्देश उपलब्ध थे{{sfn|Wagner|1983|p=199}} लेकिन मूल 65C02 विनिर्देश का हिस्सा नहीं था और डब्ल्यूडीसी या इसके अन्य लाइसेंसधारियों द्वारा बनाए गए संस्करणों में नहीं पाया गया। इन्हें बाद में बेसलाइन डिज़ाइन में वापस कॉपी किया गया और बाद के डब्ल्यूडीसी संस्करणों में उपलब्ध थे।
रॉकवेल के परिवर्तनों ने किसी भी बिट को सीधे सेट करने और परीक्षण करने के लिए और परीक्षण, स्पष्ट और शाखा को एक ही ऑपकोड में संयोजित करने के लिए अधिक बिट हेरफेर निर्देश जोड़े। रॉकवेल के R65C00 परिवार में प्रारम्भ से ही नए निर्देश उपलब्ध थे{{sfn|Wagner|1983|p=199}} लेकिन मूल 65C02 विनिर्देश का हिस्सा नहीं था और डब्ल्यूडीसी या इसके अन्य लाइसेंसधारियों द्वारा बनाए गए संस्करणों में नहीं पाया गया। इन्हें बाद में बेसलाइन डिज़ाइन में वापस कॉपी किया गया और बाद के डब्ल्यूडीसी संस्करणों में उपलब्ध थे।
Line 258: Line 258:
* <code>एसएमबी''bit#'' ''zp''</code>/<code>आरएमबी''bit#'' ''zp''</code>. जीरो पेज बाइट zp में सेट या रीसेट (क्लियर) बिट नंबर बिट#।
* <code>एसएमबी''bit#'' ''zp''</code>/<code>आरएमबी''bit#'' ''zp''</code>. जीरो पेज बाइट zp में सेट या रीसेट (क्लियर) बिट नंबर बिट#।


: आरएमबी और एसएमबी का उपयोग बिट फ़ील्ड में अलग-अलग बिट्स (आरएमबी) या सेट (एसएमबी) को साफ़ करने के लिए किया जाता है प्रत्येक तीन निर्देशों के अनुक्रम को प्रतिस्थापित करता है। चूंकि आरएमबी और एसएमबी केवल जीरो पेज एड्रेसिंग हैं ये निर्देश उपयोगिता में सीमित हैं और मुख्य रूप से उन प्रणालियों में महत्वपूर्ण हैं जिनमें डिवाइस रजिस्टर शून्य पेज में स्थित  हैं। निर्देश का बिट # घटक अक्सर स्मरक के भाग के रूप में लिखा जाता है जैसे <code>एसएमबी1 $12</code> जो बिट 1 को शून्य-पृष्ठ पते $12 में सेट करता है। कुछ असेंबलर बिट को निर्देश के ऑपरेंड के हिस्से के रूप में मानते हैं उदाहरण के लिए<code>एसएमबी '''1''',$12</code>जिसके पास इसे एक चर नाम या परिकलित संख्या द्वारा प्रतिस्थापित करने की अनुमति देने का लाभ है।{{sfn|Wagner|1983|p=203}}
: आरएमबी और एसएमबी का उपयोग बिट फ़ील्ड में अलग-अलग बिट्स (आरएमबी) या सेट (एसएमबी) को साफ़ करने के लिए किया जाता है प्रत्येक तीन निर्देशों के अनुक्रम को प्रतिस्थापित करता है। चूंकि आरएमबी और एसएमबी केवल जीरो पेज एड्रेसिंग हैं ये निर्देश उपयोगिता में सीमित हैं और मुख्य रूप से उन प्रणालियों में महत्वपूर्ण हैं जिनमें डिवाइस रजिस्टर शून्य पेज में स्थित  हैं। निर्देश का बिट घटक अक्सर स्मरक के भाग के रूप में लिखा जाता है जैसे <code>एसएमबी 1 $12</code>जो बिट 1 को शून्य-पृष्ठ पते $12 में सेट करता है। कुछ असेंबलर बिट को निर्देश के ऑपरेंड के हिस्से के रूप में मानते हैं उदाहरण के लिए<code>एसएमबी '''1''',$12</code>जिसके पास इसे एक चर नाम या परिकलित संख्या द्वारा प्रतिस्थापित करने की अनुमति देने का लाभ है।{{sfn|Wagner|1983|p=203}}
* <code>बीबीआर ''bit#'',''offset'',''addr''</code>और<code>BBS ''bit#'',''offset'',''addr''</code> बिट सेट/रीसेट पर शाखा।
* <code>बीबीआर ''bit#'',''offset'',''addr''</code>और<code>BBS ''bit#'',''offset'',''addr''</code> बिट सेट/रीसेट पर शाखा।


Line 270: Line 270:
{{code|WAI}} का एक समान प्रभाव था, लो-पावर मोड में प्रवेश करना लेकिन इस निर्देश ने प्रोसेसर को एक रुकावट के स्वागत पर फिर से जगा दिया। पहले एक बाधा को संभालने में प्राय: एक लूप चलाने के लिए सम्मिलित होता था ताकि यह जांचा जा सके कि क्या कोई रुकावट प्राप्त हुई है जिसे कभी-कभी व्यस्त प्रतीक्षा के रूप में जाना जाता है जब कोई प्राप्त होता है तो प्रकार की जांच करना और फिर प्रसंस्करण कोड पर कूदना। इसका मतलब यह था कि प्रोसेसर पूरी प्रक्रिया के दौरान चल रहा था तब भी जब कोई रुकावट नहीं आ रही थी।
{{code|WAI}} का एक समान प्रभाव था, लो-पावर मोड में प्रवेश करना लेकिन इस निर्देश ने प्रोसेसर को एक रुकावट के स्वागत पर फिर से जगा दिया। पहले एक बाधा को संभालने में प्राय: एक लूप चलाने के लिए सम्मिलित होता था ताकि यह जांचा जा सके कि क्या कोई रुकावट प्राप्त हुई है जिसे कभी-कभी व्यस्त प्रतीक्षा के रूप में जाना जाता है जब कोई प्राप्त होता है तो प्रकार की जांच करना और फिर प्रसंस्करण कोड पर कूदना। इसका मतलब यह था कि प्रोसेसर पूरी प्रक्रिया के दौरान चल रहा था तब भी जब कोई रुकावट नहीं आ रही थी।


इसके विपरीत 65C02 में इंटरप्ट कोड को लिख कर लिखा जा सकता है {{code|WAI}}के तुरंत बाद a {{code|JSR}} या {{code|JMP}} हैंडलर को। जब {{code|WAI}} का सामना करना पड़ा प्रोसेसिंग बंद हो गई और प्रोसेसर लो-पावर मोड में चला गया। जब व्यवधान प्राप्त हुआ तो उसने तुरंत प्रक्रिया की {{code|JSR}}और अनुरोध को संभाला।
इसके विपरीत 65C02 में इंटरप्ट कोड को लिख कर लिखा जा सकता है {{code|WAI}}के तुरंत बाद a {{code|JSR}}या {{code|JMP}}हैंडलर को। जब {{code|WAI}}का सामना करना पड़ा प्रोसेसिंग बंद हो गई और प्रोसेसर लो-पावर मोड में चला गया। जब व्यवधान प्राप्त हुआ तो उसने तुरंत प्रक्रिया की {{code|JSR}}और अनुरोध को संभाला।


प्रदर्शन में कुछ सुधार करने का यह अतिरिक्त लाभ था। कताई के विषय में रुकावट लूप के निर्देशों में से एक के बीच में आ सकती है और हैंडलर से लौटने के बाद इसे फिर से प्रारम्भ करने की अनुमति देने के लिए प्रोसेसर अपने स्थान को बचाने के लिए एक चक्र खर्च करता है। साथ {{code|WAI}}प्रोसेसर एक ज्ञात स्थान पर कम-शक्ति स्थिति में प्रवेश करता है जहां सभी निर्देशों को पूरा करने की गारंटी दी जाती है इसलिए जब व्यवधान आता है तो यह संभवतः एक निर्देश को बाधित नहीं कर सकता है और प्रोसेसर बिना चक्र बचत स्थिति खर्च किए सुरक्षित रूप से प्रचलित रह सकता है।
प्रदर्शन में कुछ सुधार करने का यह अतिरिक्त लाभ था। कताई के विषय में रुकावट लूप के निर्देशों में से एक के बीच में आ सकती है और हैंडलर से लौटने के बाद इसे फिर से प्रारम्भ करने की अनुमति देने के लिए प्रोसेसर अपने स्थान को बचाने के लिए एक चक्र खर्च करता है। साथ {{code|WAI}}प्रोसेसर एक ज्ञात स्थान पर कम-शक्ति स्थिति में प्रवेश करता है जहां सभी निर्देशों को पूरा करने की गारंटी दी जाती है इसलिए जब व्यवधान आता है तो यह संभवतः एक निर्देश को बाधित नहीं कर सकता है और प्रोसेसर बिना चक्र बचत स्थिति खर्च किए सुरक्षित रूप से प्रचलित रह सकता है।

Revision as of 08:40, 11 June 2023

W65c02s8p-14 lg.jpg
W65C02S microprocessor in a PDIP-40 package
General information
Launched1983; 41 years ago (1983)
Common manufacturer(s)
Performance
Max. CPU clock rate1 MHz to 14 MHz
History
PredecessorMOS Technology 6502

वेस्टर्न डिज़ाइन सेंटर (डब्ल्यूडीसी) 65C02 माइक्रोप्रोसेसर लोकप्रिय nMOS- आधारित 8-बिट MOS टेक्नोलॉजी 6502 का उन्नत CMOS संस्करण है। 65C02 ने मूल 6502 में कई समस्याओं को ठीक किया और कुछ नए निर्देश जोड़े लेकिन इसकी मुख्य विशेषता समान गति से चलने वाले मूल 6502 की तुलना में 10 से 20 गुना कम विद्युत का उपयोग करना था। कम विद्युत की खपत ने 65C02 को औद्योगिक सेटिंग्स में पोर्टेबल कंप्यूटर भूमिकाओं और माइक्रोकंट्रोलर तंत्र में उपयोगी बना दिया। इसका उपयोग कुछ घरेलू कंप्यूटरों के साथ-साथ अंतः स्थापित प्रणाली अनुप्रयोगों में किया गया है जिसमें मेडिकल-ग्रेड इम्प्लांटेड डिवाइस सम्मिलित हैं।

डब्ल्यूडीसी 65C02 का विकास 1981 में प्रारम्भ हुआ[lower-alpha 1] 1983 की प्रारम्भ में प्रचलित किए गए नमूनों के साथ।[lower-alpha 2] 65C02 को आधिकारिक तौर पर कुछ समय बाद प्रचलित किया गया था। डब्ल्यूडीसी ने सिनरटेक, एनसीआर, जीटीई और रॉकवेल सेमीकंडक्टर को डिजाइन का लाइसेंस दिया। रॉकवेल की प्राथमिक रुचि एम्बेडेड मार्केट में थी और इस भूमिका में सहायता के लिए कई नए कमांड जोड़े जाने के लिए कहा। इन्हें बाद में बेसलाइन संस्करण में वापस कॉपी किया गया था और जिस बिंदु पर डब्ल्यूडीसी ने W65C02 बनाने के लिए अपने स्वयं के दो नए आदेश जोड़े। सान्यो ने बाद में डिजाइन को भी लाइसेंस दिया और सिएको एप्सन ने HuC6280 के रूप में एक और संशोधित संस्करण का उत्पादन किया।

प्रारम्भिक संस्करण 40-पिन डीआईपी पैकेजिंग का उपयोग करते थे और मूल एनएमओएस संस्करणों की गति से मेल खाते हुए 1, 2 और 4 मेगाहर्ट्ज संस्करणों में उपलब्ध थे। बाद के संस्करणों को पीएलसीसी और क्यूएफपी पैकेजों के साथ-साथ पीडीआईपी में और बहुत अधिक क्लॉक स्पीड रेटिंग के साथ तैयार किया गया था। डब्ल्यूडीसी के वर्तमान संस्करण W65C02S-14 में पूरी तरह से स्थिर कोर है और 5 वोल्ट पर संचालित होने पर आधिकारिक तौर पर 14 मेगाहर्ट्ज तक की गति से चलता है।

परिचय और सुविधाएँ

65C02 एक 16-बिट प्रोग्राम काउंटर और एड्रेस बस के साथ कम लागत वाला सामान्य-उद्देश्य वाला 8-बिट माइक्रोप्रोसेसर (8-बिट रजिस्टर और डेटा बस) है। रजिस्टर सेट छोटा है जिसमें एक सिंगल 8-बिट संचायक (कंप्यूटिंग) (A) दो 8-बिट सूचकांक रजिस्टर (X और Y) एक 8-बिट स्टेटस रजिस्टर (P) और एक 16-बिट प्रोग्राम काउंटर ( पीसी)। एकल संचायक के अतिरिक्त रैम के पहले 256 बाइट्स, शून्य पृष्ठ ($0000 को $00FF) 16-बिट पते के अतिरिक्त 8-बिट मेमोरी एड्रेस का उपयोग करने वाले एड्रेसिंग मोड के माध्यम से तेजी से पहुंच की अनुमति देंता है। स्टैक (डेटा संरचना) अगले 256 बाइट्स पृष्ठ एक ($0100 से $01FF) में निहित हैऔर इसे स्थानांतरित या विस्तारित नहीं किया जा सकता है। स्टैक $01FF से प्रारम्भ होने वाले स्टेक सूचक (S) के साथ पीछे की ओर बढ़ता है और जैसे-जैसे स्टैक बढ़ता है घटता जाता है।[1] इसमें एक चर-लंबाई निर्देश सेट है जो प्रति निर्देश एक और तीन बाइट्स के बीच भिन्न होता है।[2]

65C02 का मूल आर्किटेक्चर मूल 6502 के समान है और इसे उस डिज़ाइन का कम-शक्ति कार्यान्वयन माना जा सकता है। 1 मेगाहर्ट्ज पर मूल 6502 के लिए सबसे लोकप्रिय गति 65C02 के लिए केवल 20 mW की आवश्यकता होती है जबकि मूल 450 mW का उपयोग करता है जो बीस गुना से अधिक की कमी है।[3] मैन्युअल रूप से अनुकूलित कोर और कम विद्युत के उपयोग का इरादा 65C02 को लो पावर तंत्र -ऑन-चिप (SoC) डिजाइनों के लिए उपयुक्त बनाना है।[2]

वेरिलॉग हार्डवेयर डिस्क्रिप्शन मॉडल W65C02S कोर को एप्लिकेशन-स्पेसिफिक इंटीग्रेटेड सर्किट (ASIC) या फील्ड-प्रोग्रामेबल गेट ऐरे (FPGA) में डिजाइन करने के लिए उपलब्ध है।[4] जैसा कि अर्धचालक उद्योग में आम है डब्ल्यूडीसी एक विकास प्रणाली प्रदान करता हैजिसमें एक डेवलपर बोर्ड, एक इन-सर्किट एमुलेटर (आईसीई) और एक सॉफ्टवेयर विकास प्रणाली सम्मिलित है।[5]

W65C02S –14 2023 तक उत्पादन संस्करण है और पीडीआईपी, पीएलसीसी और क्यूएफपी पैकेज में उपलब्ध है। अधिकतम आधिकारिक तौर पर समर्थित Ø2 (प्राथमिक) घड़ी की गति  5 वोल्ट पर संचालित होने पर 14 मेगाहर्ट्ज होती है जो -14 भाग संख्या प्रत्यय द्वारा इंगित की जाती है (शौकिया लोगों ने 65C02 होमब्रू तंत्र विकसित किए हैं जो आधिकारिक रेटिंग से तेज़ी से चलते हैं)। "एस" पदनाम इंगित करता है कि भाग में पूरी तरह से स्थिर कोर है और एक विशेषता जो Ø2 को धीमा करने या डेटा की कोई हानि के बिना उच्च या निम्न स्थिति में पूरी तरह से बंद करने की अनुमति देती है।[6] CMOS में लागू नहीं किए गए विशिष्ट माइक्रोप्रोसेसरों में डायनेमिक कोर होते हैं और यदि वे कुछ न्यूनतम और अधिकतम निर्दिष्ट मानों के बीच लगातार क्लॉक नहीं किए जाते हैं तो वे अपनी आंतरिक रजिस्टर सामग्री (और इस प्रकार क्रैश) खो देंगे।

65C02 registers
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (bit position)
Main registers
  A Accumulator
Index registers
  X X Index Register
  Y Y Index Register
0 0 0 0 0 0 0 1 SP Stack Pointer
Program counter
PC Program Counter
Status register
  N V - B D I Z C Status Register

सामान्य तर्क विशेषताएं

सिट्रोनिक्स ST2064B माइक्रोकंट्रोलर का डाई फोटोग्राफ जो ऊपर दाईं ओर एम्बेडेड W65C02S कोर दिखा रहा है

तर्क सुविधाएँ

  • वेक्टर पुल (VPB) आउटपुट इंगित करता है कि कब व्यवधान वेक्टर को संबोधित किया जा रहा है
  • मेमोरी लॉक (MLB) आउटपुट अन्य बस मास्टर को इंगित करता है जब एक पठन-संशोधित-लेखन निर्देश संसाधित किया जा रहा है
  • व्यवधान के लिए प्रतीक्षा करें (WAI) और एसटीओपी (STP) निर्देश विद्युत की खपत को कम करते हैं व्यवधान विलंबता को कम करते हैं और बाहरी घटनाओं के साथ सिंक्रोनाइज़ेशन को सक्षम करते हैं

विद्युत सुविधाएँ

  • आपूर्ति वोल्टेज 1.71 V से 5.25 V पर निर्दिष्ट है
  • क्रमशः 1.89 V और 5.25 V पर 0.15 और 1.5 मिलीमीटर प्रति मेगाहर्ट्ज़ की वर्तमान खपत (कोर)
  • परिवर्तनीय लंबाई निर्देश सेट निश्चित लंबाई निर्देश सेट प्रोसेसर पर कोड आकार अनुकूलन को सक्षम करने से विद्युत की बचत होती है
  • पूरी तरह से गतिशील तर्क शक्ति को बचाने के लिए घड़ी को रोकने की अनुमति देता है

घड़ी की विशेषताएं

W65C02S को 1.8 और 5 वोल्ट (±5%) के बीच किसी भी सुविधाजनक आपूर्ति वोल्टेज (VDD) पर संचालित किया जा सकता है। डेटा शीट एसी विशेषताओं की तालिका 5V पर 14 मेगाहर्ट्ज, 3.3 V या 3 V पर 8 मेगाहर्ट्ज 2.5 V पर 4 मेगाहर्ट्ज और 1.8 V पर 2 मेगाहर्ट्ज पर परिचालन विशेषताओं को सूचीबद्ध करती है। यह जानकारी पहले के डेटा शीट का एक आर्टिफैक्ट हो सकता है क्योंकि एक ग्राफ़ इंगित करता है कि सामान्य उपकरण एसी विशेषता तालिका द्वारा सुझाए गए उच्च गति पर संचालन करने में सक्षम हैं और 20 मेगाहर्ट्ज पर विश्वसनीय संचालन VDD के साथ आसानी से प्राप्य होना चाहिए और 5 वोल्ट पर यह मानते हुए कि सहायक हार्डवेयर इसे अनुमति देगा।

मनमानी घड़ी दरों के लिए W65C02S समर्थन इसे ऐसी घड़ी का उपयोग करने की अनुमति देता है जो तंत्र के किसी अन्य भाग के लिए आदर्श दर पर चलती है जैसे कि 13.5 मेगाहर्ट्ज (डिजिटल एसडीटीवी लूमा सैंपलिंग दर) 14.31818 मेगाहर्ट्ज (एनटीएससी रंग वाहक आवृत्ति × 4), 14.75 MHz (PAL वर्ग पिक्सेल), 14.7456 (बॉड रेट क्रिस्टल)आदि जब तक VDD आवृत्ति का समर्थन करने के लिए पर्याप्त है। डिजाइनर बिल मेन्श ने बताया है कि FMAX ऑफ-चिप कारकों से प्रभावित होता है जैसे माइक्रोप्रोसेसर के पिन पर कैपेसिटिव लोड। शॉर्ट सिग्नल ट्रैक्स और सबसे कम उपकरणों का उपयोग करके लोड को कम करने से FMAX को बढ़ाने में मदद मिलती है। पीएलसीसी और क्यूएफपी पैकेज में पीडीआईपी पैकेज की तुलना में कम पिन-टू-पिन कैपेसिटेंस होता है और मुद्रित सर्किट बोर्ड स्पेस के उपयोग में अधिक प्रभावकारी होता है।

डब्ल्यूडीसी ने बताया है कि W65C02S की FPGA प्राप्तियों को सफलतापूर्वक 200 मेगाहर्ट्ज पर संचालित किया गया है।

NMOS 6502 के साथ तुलना

बुनियादी वास्तुकला

हालांकि 65C02 को अधिकतर कम-शक्ति 6502 के रूप में माना जा सकता है। यह मूल में पाए जाने वाले कई बगों को भी ठीक करता है और नए निर्देश जोड़ता है ऐसे मोड और सुविधाओं को संबोधित करता है जो प्रोग्रामर को छोटे और तेजी से निष्पादित प्रोग्राम लिखने में सहायता कर सकते हैं। यह अनुमान लगाया गया है कि औसत 6502 असेंबली लैंग्वेज प्रोग्राम को 65C02 पर 10 से 15 प्रतिशत छोटा बनाया जा सकता है और प्रदर्शन में समान सुधार देखा जा सकता है मोटे तौर पर किसी दिए गए कार्य को पूरा करने के लिए कम निर्देशों के उपयोग के माध्यम से मेमोरी एक्सेस से बचा जाता है।[2]

गैर-दस्तावेजी निर्देश हटा दिए गए

मूल 6502 में 56 निर्देश हैं जो अलग-अलग एड्रेसिंग मोड के साथ संयुक्त होने पर संभावित 256 8-बिट ऑपकोड पैटर्न के कुल 151 ऑपकोड उत्पन्न करते हैं। शेष 105 अप्रयुक्त ऑपकोड अपरिभाषित हैं और 3, 7, बी या एफ के साथ कम-ऑर्डर 4-बिट वाले कोड के सेट के साथ पूरी तरह से अप्रयुक्त छोड़ दिया गया है और कम-ऑर्डर 2 वाले कोड में केवल एक ही ऑपकोड है।[7]

6502 पर इनमें से कुछ बचे हुए कोड वास्तव में संगणना करते हैं। 6502 के निर्देश डिकोडर के काम करने के तरीके के कारण ओपकोड में कुछ बिट्स को सेट करने से निर्देश प्रसंस्करण के कुछ हिस्सों का कारण बनता है। इनमें से कुछ ऑपकोड तुरंत प्रोसेसर को क्रैश कर देते हैं जबकि अन्य उपयोगी कार्य करते हैं और यहां तक ​​कि कुछ प्रोग्रामर द्वारा अनौपचारिक असेंबलर स्मृति चिन्ह भी दिए जाते हैं।[8]

65C02 नए ऑपकोड जोड़ता है जो इनमें से कुछ पहले से अप्रमाणित निर्देश स्लॉट का उपयोग करते हैं। उदाहरण के लिए $FF नए के लिए प्रयोग किया जाता हैBBSनिर्देश जो वास्तव में अनुपयोगी रह जाते हैं वे समतुल्य होते हैं NOPएस उन ऑपकोड का उपयोग करने वाले 6502 प्रोग्राम 65C02 पर काम नहीं करेंगे।[2]

बग फिक्स

मूल 6502 में प्रारम्भ में लॉन्च होने पर कई इरेटा थे। प्रोसेसर के प्रारम्भिक संस्करणों में नहीं था ROR(दाईं ओर घुमाएं) निर्देश और एमओएस टेक्नोलॉजी मैनुअल ने भी इसका दस्तावेजीकरण नहीं किया।RORउत्पादन चलाने में बहुत जल्दी लागू किया गया था और प्रोसेसर का उपयोग करने वाली अधिकांश मशीनें इस निर्देश का समर्थन करती हैं।[9]

एक बग जो 6502 के सभी NMOS वेरिएंट में स्थित है, एड्रेसिंग मोड#इंडेक्स्ड एब्सोल्यूट का उपयोग करते समय जंप निर्देश सम्मिलित करता है। इस एड्रेसिंग मोड में, लक्ष्य का पता JMP निर्देश एक ऑपरेंड होने के अतिरिक्त मेमोरी जंप वेक्टर से प्राप्त किया जाता है JMP निर्देश। उदाहरण के लिए JMP ($1234) स्मृति स्थानों में मूल्य लाएगा $1234 (कम महत्वपूर्ण बाइट) और $1235 (सबसे महत्वपूर्ण बाइट) और उन मानों को प्रोग्राम काउंटर में लोड करें जो तब प्रोसेसर को वेक्टर में संग्रहीत पते पर निष्पादन प्रचलित रखने का कारण बनेगा।

बग तब प्रकट होता है जब वेक्टर पता समाप्त होता है $FF जो स्मृति पृष्ठ की सीमा है। इस विषय मेंJMPलक्ष्य पते का सबसे महत्वपूर्ण बाइट प्राप्त करेगा $00 मूल पृष्ठ के अतिरिक्त {{Mono|$00}नए पृष्ठ का }। इस तरहJMP($12FF) पर लक्ष्य पते का कम से कम महत्वपूर्ण बाइट प्राप्त होगा $12FF और लक्षित पते का सबसे महत्वपूर्ण बाइट $1200 इसके अतिरिक्त $1300. 65C02 ने इस समस्या को ठीक किया।[2]

एक बग की तुलना में अधिक निरीक्षण NMOS 6502 के स्थिति रजिस्टर में (डी) ecimal ध्वज की स्थिति एक रीसेट (कंप्यूटिंग) या रुकावट के बाद अपरिभाषित है। इसका मतलब यह है कि अंकगणितीय परिचालनों से संबंधित किसी भी बग से बचने के लिए प्रोग्रामर को ध्वज को ज्ञात मान पर सेट करना होगा। नतीजतन एक पाता हैCLDनिर्देश (स्पष्ट दशमलव) लगभग सभी 6502 इंटरप्ट हैंडलर में साथ ही साथ रीसेट कोड में भी। 65C02 किसी भी बाधा या हार्डवेयर रीसेट के जवाब में स्टैक पर स्थिति रजिस्टर को धक्का देने के बाद स्वचालित रूप से इस ध्वज को साफ़ करता है इस प्रकार प्रोसेसर को बाइनरी अंकगणितीय मोड में वापस रखता है।[10]

बाइनरी-कोडित दशमलव अंकगणितीय के दौरान NMOS 6502 अंतर्निहित बाइनरी अंकगणित के परिणाम को प्रतिबिंबित करने के लिए (N)निष्क्रिय o(V) erflow और (Z) ero फ़्लैग्स को अपडेट करेगा अर्थात फ़्लैग्स पहले की गणना किए गए परिणाम को दर्शा रहे हैं प्रोसेसर दशमलव सुधार कर रहा है। इसके विपरीत 65C02 अंकगणित निर्देश के अनुसार अतिरिक्त घड़ी चक्र की कीमत पर, दशमलव अंकगणित के परिणाम के अनुसार इन झंडों को सेट करता है।[10]

पढ़ने-संशोधित-लिखने (आर-एम-डब्ल्यू) निर्देश निष्पादित करते समय जैसेINC addrसभी NMOS वैरिएंट Addr पर दोहरा लेखन करेंगे पहले Addr पर मिले वर्तमान मान को फिर से लिखेंगे और फिर संशोधित मान लिखेंगे। यदि Addr एक हार्डवेयर रजिस्टर है तो यह व्यवहार कठिन-से-समाधान बग में परिणाम कर सकता है। यह तब हो सकता है जब हार्डवेयर रजिस्टर में मूल्य में परिवर्तन के लिए देख रहा हो और फिर एक क्रिया करता है इस विषय में यह दो क्रियाएं करेगा एक मूल मूल्य के साथ और फिर नए मूल्य के साथ। 65C02 इसके अतिरिक्त Addr का दोहरा रीड करता है उसके बाद सिंगल राइट करता है।

इंडेक्सिंग एड्रेसिंग करते समय यदि इंडेक्सिंग एक पृष्ठ सीमा को पार कर जाती है तो सही पते तक पहुँचने से पहले सभी NMOS वेरिएंट एक अमान्य पते से पढ़ेंगे। जैसा कि R-M-W निर्देश के साथ होता है, अनुक्रमण के माध्यम से हार्डवेयर रजिस्टरों तक पहुँचने पर यह व्यवहार समस्याएँ पैदा कर सकता है। 65C02 ने इस समस्या को ठीक किया जब इंडेक्सिंग एक पृष्ठ सीमा को पार कर जाती है तो निर्देश ओपकोड का एक डमी रीड प्रदर्शन करके। हालाँकि इस फिक्स ने एक नया बग प्रस्तुत किया[citation needed] जो तब होता है जब आधार पता एक समान पृष्ठ सीमा पर होता है (जिसका अर्थ है कि अनुक्रमण अगले पृष्ठ पर कभी नहीं जाएगा)। नए बग के साथ अनुक्रमण से पहले आधार पते पर एक डमी रीड किया जाता है जैसे कि LDA $1200,X एक डमी पढ़ेगा $1200 X के मान को जोड़े जाने से पहले $1200. फिर से यदि हार्डवेयर रजिस्टर पतों पर अनुक्रमण किया जाता है तो इस बग का परिणाम अपरिभाषित व्यवहार हो सकता है।

यदि एक NMOS 6502 एक BRK (सॉफ़्टवेयर इंटरप्ट) ऑपकोड ला रहा है उसी समय एक हार्डवेयर व्यवधान होता है तो BRK को अनदेखा कर दिया जाएगा क्योंकि प्रोसेसर हार्डवेयर इंटरप्ट पर प्रतिक्रिया करता है। 65C02 इंटरप्ट को सर्विस करके और फिर BRK को निष्पादित करके इस स्थिति को सही ढंग से हैंडल करता है।

नए एड्रेसिंग मोड

6502 में दो अप्रत्यक्ष एड्रेसिंग मोड हैं जो पृष्ठ शून्य में संग्रहीत 16-बिट पतों के माध्यम से विचलन करते हैं:

  • अनुक्रमित अप्रत्यक्ष, उदाहरण LDA ($10,X)16-बिट वेक्टर को पढ़ने से पहले दिए गए पृष्ठ शून्य पते पर X रजिस्टर जोड़ता है। इस उदाहरण में यदि X 5 है तो यह स्थान $15/$16 से 16-बिट पता पढ़ता है। यह तब उपयोगी होता है जब पेज ज़ीरो में संकेत की एक सारणी होती है।
  • अप्रत्यक्ष अनुक्रमित LDA ($10),Y दिए गए पृष्ठ शून्य पते से पढ़े गए 16-बिट वेक्टर में वाई रजिस्टर जोड़ता है। उदाहरण के लिए यदि Y 5 है और $10/$11 वेक्टर सम्मिलित है $1000, यह से मान पढ़ता है $1005. यह पॉइंटर-ऑफ़सेट एड्रेसिंग करता है।

इस मॉडल का निष्क्रिय पक्ष यह है कि यदि अनुक्रमण की आवश्यकता नहीं है लेकिन पता शून्य पृष्ठ में है तो सूचकांक रजिस्टरों में से एक को अभी भी शून्य पर सेट किया जाना चाहिए और इन निर्देशों में से एक में उपयोग किया जाना चाहिए। 65C02 ने एक गैर-अनुक्रमित अप्रत्यक्ष एड्रेसिंग मोड जोड़ाLDA ($10)उन सभी निर्देशों के लिए जो अनुक्रमित अप्रत्यक्ष और अप्रत्यक्ष अनुक्रमित मोड का उपयोग करते थे और सूचकांक रजिस्टरों को मुक्त करते थे।[11]

6502 काJMPनिर्देश में एक अनूठा (6502 निर्देशों के बीच) एड्रेसिंग मोड था जिसे पूर्ण अप्रत्यक्ष के रूप में जाना जाता है जो किसी दिए गए मेमोरी पते से 16-बिट मान पढ़ता है और फिर उस 16-बिट मान में पते पर कूद जाता है। उदाहरण के लिए यदि स्मृति स्थान $A000 के पास $34 और $A001 के पास $12 है JMP ($A000)उन दो बाइट्स को पढ़ेगा और मूल्य का निर्माण करेगा $1234 और फिर उस स्थान पर जाएगा।

अप्रत्यक्ष संबोधन के लिए एक सामान्य उपयोग शाखा तालिकाओं का निर्माण करना है सबरूटीन के लिए प्रवेश बिंदुओं की एक सूची जिसे एक इंडेक्स का उपयोग करके एक्सेस किया जा सकता है। उदाहरण के लिए एक डिवाइस ड्राइवर $A000 पर तालिका मेंOPEN,CLOSEआदि के लिए प्रवेश बिंदुओं को सूचीबद्ध कर सकता है तीसरी प्रविष्टि है शून्य अनुक्रमित और प्रत्येक पते के लिए 16-बिट्स की आवश्यकता होती है इसलिए कॉल करने के लिए कुछ इसी तरह का उपयोग किया जाएगा। यदि ड्राइवर अपडेट किया गया है और सबरूटीन कोड मेमोरी में चला जाता है तो कोई भी स्थित कोड तब तक काम करेगा जब तक पॉइंटर्स $A000 की तालिका बनी रहती है।READ READ READ JMP ($A004)

65C02 ने नया अनुक्रमित पूर्ण अप्रत्यक्ष मोड जोड़ा जिसने शाखा तालिकाओं के उपयोग को आसान बना दिया। इस मोड ने एक्स रजिस्टर के मूल्य को पूर्ण पते में जोड़ा और परिणामी स्थान से 16-बिट का पता लगा लिया। उदाहरण के लिए एक्सेस करने के लिएREADऊपर दी गई तालिका से कार्य करता है तब कोई X में 4 संग्रहीत करेगाJMP ($A000,X)पहुँच की यह शैली शाखा तालिकाओं तक पहुँच को सरल बनाती है क्योंकि एकल आधार पते का उपयोग 8-बिट ऑफ़सेट के संयोजन में किया जाता है।[11]अनुक्रमित अप्रत्यक्ष मोड का उपयोग करके NMOS संस्करण में इसे प्राप्त किया जा सकता है लेकिन केवल तभी जब एक सीमित संसाधन तालिका शून्य पृष्ठ में हो। इन्हें शून्य पृष्ठ के बाहर बनाने की अनुमति देने से न केवल इस संसाधन की मांग कम हुई बल्कि रोम में तालिकाओं के निर्माण की भी अनुमति मिली।

नए और संशोधित निर्देश

नए एड्रेसिंग मोड के अतिरिक्त बेस मॉडल 65C02 ने नए निर्देशों का एक सेट भी जोड़ा।[12]

  • INCऔरDECबिना किसी पैरामीटर के अब संचायक को बढ़ाएँ या घटाएँ। मूल निर्देश सेट में यह एक अजीब निरीक्षण था जिसमें केवलINX/DEX,INY/DEYऔरINC addr/DEC addrसम्मिलित था और कुछ असेंबलर वैकल्पिकINA/DEA या INC A/DEC A रूपों का उपयोग करते हैं।[12]
  • STZ addr, Addr में शून्य स्टोर करें। की आवश्यकता को प्रतिस्थापित करता हैLDA 0;STA addr और संचायक के मान को बदलने की आवश्यकता नहीं है। जैसा कि अधिकांश कार्यक्रमों में यह कार्य सामान्य है STZकोड आकार को कम कर सकते हैं और दोनों को समाप्त करके LDAके साथ-साथ संचायक के मूल्य को बचाने के लिए आवश्यक कोई भी कोड प्राय: a PHA PLA जोड़ा।[13]
  • PHX,PLX,PHY,PLY, X और Y रजिस्टरों को स्टैक से/में धकेलें और खींचें। पहले केवल संचायक और स्थिति रजिस्टर में पुश और पुल निर्देश होते थे। X और Y को पहले संचायक में ले जाकर ही ढेर किया जा सकता हैTXAयाTYAजिससे संचायक की सामग्रीPHA मेबदली जाती है फिर उपयोग किया जाता है।
  • BRAशाखा हमेशा। ए की तरह काम करता हैJMPलेकिन अन्य शाखाओं की तरह 1-बाइट सापेक्ष पते का उपयोग करता है और एक बाइट बचाता है। गति अक्सर 3 चक्र निरपेक्ष के समान होती हैJMPजब तक कि एक पृष्ठ पार नहीं किया जाता है जो इसे बना देगाBRAसंस्करण 1 चक्र लंबा (4 चक्र)।[14] जैसा कि पता सापेक्ष है यह पुनर्निधारणीय कोड लिखते समय भी उपयोगी होता है[13] स्मृति प्रबंधन इकाइयों से पहले युग में एक सामान्य कार्य।

बिट हेरफेर निर्देश

डब्ल्यूडीसी और रॉकवेल दोनों ने 65C02 में बिट परीक्षण और हेरफेर कार्यों में सुधार का योगदान दिया। डब्ल्यूडीसी ने BIT निर्देश में नए एड्रेसिंग मोड जोड़े जो 6502 में स्थित थे और साथ ही बिट फ़ील्ड के सुविधाजनक हेरफेर के लिए दो नए निर्देश डिवाइस ड्राइवरों में एक सामान्य गतिविधि।

BIT 65C02 में तत्काल मोड जोड़ता है और एक्स द्वारा अनुक्रमित शून्य पृष्ठ और एक्स एड्रेसिंग द्वारा पूर्ण अनुक्रमित।[12] तत्काल मोड एड्रेसिंग विशेष रूप से सुविधाजनक है क्योंकि यह पूरी तरह से गैर-विनाशकारी है। उदाहरण के लिए:

LDA $1234
BIT #%00010000

के स्थान पर इस्तेमाल किया जा सकता है:

LDA $1234
AND #%00010000
AND}NDऑपरेशन संचायक में मान को बदल देता है इसलिए $1234 से लोड किया गया मूल मान खो जाता है। का उपयोग करते हुए BIT संचायक में मान को अपरिवर्तित छोड़ देता है इसलिए बाद का कोड मूल मान के विरुद्ध अतिरिक्त परीक्षण कर सकता है और स्मृति से मान को फिर से लोड करने से बच सकता है।

के संवर्द्धन के अतिरिक्त BIT निर्देश डब्ल्यूडीसी ने बिट फ़ील्ड्स को आसानी से हेरफेर करने के लिए डिज़ाइन किए गए दो निर्देश जोड़े:

  • TSB addrऔर TRB addrटेस्ट और सेट बिट्स और टेस्ट और रीसेट बिट्स।
संचायक में एक मुखौटा (A) Addr पर मेमोरी के साथ तार्किक रूप से ANDed है कौन सा स्थान शून्य पृष्ठ या निरपेक्ष हो सकता है। स्थिति रजिस्टर में Z ध्वज तार्किक के परिणाम के अनुसार वातानुकूलित है और—कोई अन्य स्थिति रजिस्टर ध्वज प्रभावित नहीं होता है। इसके अतिरिक्त Addr में बिट्स को मास्क के अनुसार सेट (TSB) या क्लियर (TRB) किया जाता है संक्षेप में TSB तार्किक के बाद एक तार्किक प्रदर्शन करता है और तार्किक के परिणाम को Addr पर संग्रहीत करता है जबकि TRB तार्किक के परिणामों को Addr पर संग्रहीत करता है। दोनों ही स्थितियों में स्थिति रजिस्टर में Z ध्वज Addr की सामग्री से पहले के परिणाम को इंगित करता हैA OR AND OR AND.A AND addrबदल गया है। BITटीआरबी और टीएसबी इस प्रकार निर्देशों के अनुक्रम को प्रतिस्थापित करते हैं कम्प्यूटेशनल परिवर्तनों को बचाने के लिए अनिवार्य रूप से निर्देश को अतिरिक्त चरणों के साथ जोड़ते हैं लेकिन एक तरह से प्रभावित मूल्य की स्थिति को बदलने से पहले रिपोर्ट करते हैं।

रॉकवेल के परिवर्तनों ने किसी भी बिट को सीधे सेट करने और परीक्षण करने के लिए और परीक्षण, स्पष्ट और शाखा को एक ही ऑपकोड में संयोजित करने के लिए अधिक बिट हेरफेर निर्देश जोड़े। रॉकवेल के R65C00 परिवार में प्रारम्भ से ही नए निर्देश उपलब्ध थे[15] लेकिन मूल 65C02 विनिर्देश का हिस्सा नहीं था और डब्ल्यूडीसी या इसके अन्य लाइसेंसधारियों द्वारा बनाए गए संस्करणों में नहीं पाया गया। इन्हें बाद में बेसलाइन डिज़ाइन में वापस कॉपी किया गया और बाद के डब्ल्यूडीसी संस्करणों में उपलब्ध थे।

रॉकवेल-विशिष्ट निर्देश हैं:

  • एसएमबीbit# zp/आरएमबीbit# zp. जीरो पेज बाइट zp में सेट या रीसेट (क्लियर) बिट नंबर बिट#।
आरएमबी और एसएमबी का उपयोग बिट फ़ील्ड में अलग-अलग बिट्स (आरएमबी) या सेट (एसएमबी) को साफ़ करने के लिए किया जाता है प्रत्येक तीन निर्देशों के अनुक्रम को प्रतिस्थापित करता है। चूंकि आरएमबी और एसएमबी केवल जीरो पेज एड्रेसिंग हैं ये निर्देश उपयोगिता में सीमित हैं और मुख्य रूप से उन प्रणालियों में महत्वपूर्ण हैं जिनमें डिवाइस रजिस्टर शून्य पेज में स्थित हैं। निर्देश का बिट घटक अक्सर स्मरक के भाग के रूप में लिखा जाता है जैसे एसएमबी 1 $12जो बिट 1 को शून्य-पृष्ठ पते $12 में सेट करता है। कुछ असेंबलर बिट को निर्देश के ऑपरेंड के हिस्से के रूप में मानते हैं उदाहरण के लिएएसएमबी 1,$12जिसके पास इसे एक चर नाम या परिकलित संख्या द्वारा प्रतिस्थापित करने की अनुमति देने का लाभ है।[13]
  • बीबीआर bit#,offset,addrऔरBBS bit#,offset,addr बिट सेट/रीसेट पर शाखा।
आरएमबी और एसएमबी के समान शून्य-पेज एड्रेसिंग और सीमाएं लेकिन चयनित बिट स्पष्ट (बीबीआर) या सेट (बीबीएस) होने पर शाखाओं को जोड़ने के लिए। जैसा कि आरएमबी और एसएमबी के साथ होता है बीबीआर और बीबीएस तीन निर्देशों के अनुक्रम को प्रतिस्थापित करते हैं।[13]

कम-शक्ति मोड

उपरोक्त नए आदेशों के अतिरिक्त डब्ल्यूडीसी ने भी जोड़ाSTPऔरWAIकम-शक्ति मोड का समर्थन करने के निर्देश।

STPप्रोसेसर को STop करें हार्डवेयर रीसेट प्रचलित होने तक सभी प्रोसेसिंग को रोक दें। इसका उपयोग किसी तंत्र को सुलाने के लिए किया जा सकता है और फिर इसे रीसेट के साथ तेजी से जगाया जा सकता है। प्राय: इसके लिए मुख्य मेमोरी को बनाए रखने के लिए कुछ बाहरी तंत्र की आवश्यकता होती है और इसका व्यापक रूप से उपयोग नहीं किया जाता था।

WAI का एक समान प्रभाव था, लो-पावर मोड में प्रवेश करना लेकिन इस निर्देश ने प्रोसेसर को एक रुकावट के स्वागत पर फिर से जगा दिया। पहले एक बाधा को संभालने में प्राय: एक लूप चलाने के लिए सम्मिलित होता था ताकि यह जांचा जा सके कि क्या कोई रुकावट प्राप्त हुई है जिसे कभी-कभी व्यस्त प्रतीक्षा के रूप में जाना जाता है जब कोई प्राप्त होता है तो प्रकार की जांच करना और फिर प्रसंस्करण कोड पर कूदना। इसका मतलब यह था कि प्रोसेसर पूरी प्रक्रिया के दौरान चल रहा था तब भी जब कोई रुकावट नहीं आ रही थी।

इसके विपरीत 65C02 में इंटरप्ट कोड को लिख कर लिखा जा सकता है WAIके तुरंत बाद a JSRया JMPहैंडलर को। जब WAIका सामना करना पड़ा प्रोसेसिंग बंद हो गई और प्रोसेसर लो-पावर मोड में चला गया। जब व्यवधान प्राप्त हुआ तो उसने तुरंत प्रक्रिया की JSRऔर अनुरोध को संभाला।

प्रदर्शन में कुछ सुधार करने का यह अतिरिक्त लाभ था। कताई के विषय में रुकावट लूप के निर्देशों में से एक के बीच में आ सकती है और हैंडलर से लौटने के बाद इसे फिर से प्रारम्भ करने की अनुमति देने के लिए प्रोसेसर अपने स्थान को बचाने के लिए एक चक्र खर्च करता है। साथ WAIप्रोसेसर एक ज्ञात स्थान पर कम-शक्ति स्थिति में प्रवेश करता है जहां सभी निर्देशों को पूरा करने की गारंटी दी जाती है इसलिए जब व्यवधान आता है तो यह संभवतः एक निर्देश को बाधित नहीं कर सकता है और प्रोसेसर बिना चक्र बचत स्थिति खर्च किए सुरक्षित रूप से प्रचलित रह सकता है।

65SC02

65SC02 बिना किसी निर्देश के डब्ल्यूडीसी 65C02 का एक प्रकार है।[16]== 65C02 == के उल्लेखनीय उपयोग

एप्पल कंप्यूटर

वीडियो गेम कंसोल

अन्य उत्पाद

  • कमोडोर 64 होम कंप्यूटर के लिए TurboMaster एक्सीलरेटर कार्ट्रिज (65C02 @ 4.09 मेगाहर्ट्ज)
  • एकोर्न बीबीसी माइक्रो होम कंप्यूटर के लिए ट्यूब से जुड़ा दूसरा प्रोसेसर (65C02 @ 3 मेगाहर्ट्ज)
  • कई समर्पित शतरंज कंप्यूटर यानी: मेफिस्टो एमएमवी, नोवाग सुपर कांस्टेलेशन, फिडेलिटी एलीट और कई अन्य (4-20 मेगाहर्ट्ज

यह भी देखें

टिप्पणियाँ

  1. Some sources, including prior versions of this article, claim 1978. This was the date that Bill Mensch, the primary designer, formed WDC. In a 1984 article, Mensch specifically states 1981 as the start date.
  2. Wagner's June 1983 article mentions it being available for “several months”. Given typical publication delays at that point this may date it to as early as late 1982. Another source points to 1980, see talk page.


संदर्भ

उद्धरण

  1. Koehn, Philipp (2 March 2018). "6502 Stack" (PDF).
  2. 2.0 2.1 2.2 2.3 2.4 Wagner 1983, p. 204.
  3. Taylor & Watford 1984, p. 174.
  4. "6502 CPU Projects in HDL (for FPGA)".
  5. "W65C02DB Developer Board".
  6. "W65C02S-14".
  7. Parker, Neil. "The 6502/65C02/65C816 Instruction Set Decoded". Neil Parker's Apple II page.
  8. Vardy, Adam (22 August 1995). "Extra Instructions Of The 65XX Series CPU".
  9. File:MCS650x Instruction Set.jpg
  10. 10.0 10.1 "Differences between NMOS 6502 and CMOS 65c02". Retrieved 27 February 2018. N, V, and Z flags were incorrect after decimal operation (but C was ok).
  11. 11.0 11.1 Clark, Bruce. "65C02 Opcodes".
  12. 12.0 12.1 12.2 Wagner 1983, p. 200.
  13. 13.0 13.1 13.2 13.3 Wagner 1983, p. 203.
  14. "W65C02S Datasheet" (PDF).
  15. Wagner 1983, p. 199.
  16. Zaks, Rodnay (1983). Programming the 6502. Sybex. p. 348. ISBN 0895881357.
  17. "HuC6280 - Archaic Pixels".


ग्रन्थसूची

  • Wagner, Robert (June 1983). "Assembly Lines". Softtalk. pp. 199–204.
  • Taylor, Simon; Watford, Bob (July 1984). "6502 revival". Personal Computer World. pp. 174–175.


अग्रिम पठन


बाहरी संबंध