2015-05-20 7 views
6

मैं एक NES एमुलेटर लिख रहा हूँ और लिखा था 6502 सीपीयू का प्रतिनिधित्व करने के लिए एक एकल वर्ग:पुनर्रचना बड़े C++ वर्ग

class CCpu6502 { 
    public: 
     /*....*/ 
     void fetch8(); 
     void fetch16(); 

     void ADC(); 
     void AND(); 
     /* Around 50+ cpu instruction types */ 
    private: 
     /*register state, jump table definition*/ 
}; 

मूल रूप से, मैं एक कूद तालिका कि opcode में ले जाता है और उचित सदस्य फ़ंक्शन निष्पादित है - बदल रहा है सीपीयू की आंतरिक स्थिति। कुछ अन्य कार्य हैं जो सही एड्रेसिंग प्रकार निर्धारित करते हैं।

मुझे एहसास हुआ है कि कक्षा परिभाषा बहुत बड़ी और पार्स के साथ-साथ परीक्षण के लिए मुश्किल है। हालांकि, कक्षा को अलग-अलग वर्गों में विभाजित करना समस्याग्रस्त लगता है क्योंकि लगभग हर समारोह सीपीयू की आंतरिक स्थिति को बदल देगा।

मैं इस तरह के रूप अनुदेश प्रकार वर्गीकृत करने के बारे में सोचा:

class AInstructionHandler {/*...*/}; 
class CArithmeticInstHandler : public AInstructionHandler{/*...*/}; 
class CBranchInstHandler : public AInstructionHandler{/*...*/}; 
/*memory accessors, logical, etc. */ 

हालांकि, मैं तो प्रत्येक वर्ग के एक दोस्त है, जो लगता है बनाकर cpu की आंतरिक स्थिति के लिए प्रत्येक अनुदेश हैंडलर वर्ग पहुँच प्रदान करने के लिए होता है एक बुरा विचार की तरह।

मुझे आश्चर्य है कि एक बड़ी कक्षा को दोबारा करने का कोई पसंदीदा तरीका है जहां लगभग सभी विधियां ऑब्जेक्ट की स्थिति को प्रभावित करती हैं या यदि मेरा डिज़ाइन शुरू होने के लिए त्रुटिपूर्ण है।

धन्यवाद

+2

मैं उपयुक्त getters/setters के माध्यम से सीपीयू राज्य का पर्दाफाश होता है, और के रूप में जो CPU के सार्वजनिक इंटरफ़ेस .. – Nim

+2

हो सकता है कि [रणनीति पैटर्न] (http का उपयोग गैर-सदस्य, गैर दोस्त कार्यों निर्देश: // en.wikipedia.org/wiki/Strategy_pattern) यहां उपयोगी हो सकता है। प्रत्येक ओप-कोड एक रणनीति हो सकती है। – Steve

उत्तर

3

ठीक है, अगर वहाँ तो शायद आप अपने स्वयं के वर्गों में जगह छोटे टुकड़े पा सकते हैं, को तोड़ने के लिए बड़े तार्किक हिस्सा नहीं हैं। आपने जंपटेबल का उल्लेख किया है, जो कि अपनी कक्षा के लिए एक उम्मीदवार है। यह एक ओपोड ले सकता है और शायद एक पता वापस कर सकता है?

फिर, opcodes खुद को कर रहे हैं, जो वस्तुओं है कि 6502. तो राज्य के कुछ फेरबदल करना हो सकता है, कि, तो आप शायद की आंतरिक स्थिति से संबंधित बिट्स पैकेज चाहेगा करने के लिए सी पी यू।

एक बार जब आप छोटे टुकड़ों को हटाने शुरू कर देते हैं, तो यह स्पष्ट हो सकता है कि अन्य रिफैक्टरिंग क्या हो सकती है।

स्टैक ओवरव्लो पर कुछ relatedanswers भी मदद कर सकते हैं जो मदद कर सकते हैं। डॉ। डॉबब के some additional thoughts यहां दिए गए हैं।

संबंधित मुद्दे