2012-06-21 35 views
7

संभव डुप्लिकेट:
How do emulators work and how are they written?मैं कंसोल एमुलेटर लिखना कैसे सीखूं?

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

मैंने इंटरनेट की खोज की है, लेकिन मुझे केवल अस्पष्ट ट्यूटोरियल मिले हैं जिनमें स्वयं को समझने के लिए बहुत सारी त्रुटियां हैं। मुझे कहां से शुरू करना है?

+1

मैं सिमुलेटर http://github.com/dwelch67 आप पहली बार सीखने की जरूरत है क्या का एक संग्रह है लक्ष्य सीपीयू के लिए विधानसभा भाषा है, तो एक disassembler कि निष्पादन के क्रम में disassembles पर काम , किसी बिंदु पर आप इसे निर्देश सेट सिम्युलेटर में बदलना शुरू कर सकते हैं। फिर आपको सभी परिधीय के लिए अनुकरणक बनाना होगा। तो आपको उस प्रणाली के लिए अच्छे दस्तावेज़ों की आवश्यकता होगी जो आप अनुकरण कर रहे हैं। –

+0

एक और दृष्टिकोण एक स्थिर बाइनरी अनुवादक, एसबीटी है। http://www.dwelch.com/ipod/asteroids.htm मैंने आईपॉड (क्लासिक) के लिए किया है, उस रिलीज के बाद से उस पर बहुत अधिक काम है, हालांकि कहीं भी प्रकाशित नहीं हुआ है। विषय पर एक अच्छा ट्यूटोरियल। http://www.gtoal.com/sbt/ आप गतिशील अनुवाद भी कर सकते हैं, स्थिर के बजाए फ्लाई पर अनुवाद करें। जब तक आप स्थैतिक नहीं कर सकते तब तक मैं गतिशील कोशिश नहीं करता। –

उत्तर

6

आप नहीं करते हैं। आप हार्डवेयर का अनुकरण करते हैं। आपको प्रोग्राम डेटा को "संसाधित" करने की ज़रूरत नहीं है, आपको सीपीयू, ग्राफिक्स हार्डवेयर, इनपुट डिवाइस इत्यादि की नकल करने की आवश्यकता होगी

शायद एक अच्छा पहला कदम एक जेड- मशीन एमुलेटर, जो एक कंसोल नहीं था, वास्तव में यह पहला व्यापक "एमुलेटर" था। यह सभी infocom पाठ रोमांच (ज़ोर, आदि) के लिए इस्तेमाल किया गया था। चूंकि यह एक टेक्स्ट उन्मुख गेम प्रारूप है, ग्राफिक्स या ध्वनि के संदर्भ में अनुकरण करने के लिए बहुत कुछ नहीं है, केवल इनपुट डिवाइस कीबोर्ड है, और आपको निष्पादन गति/सिंक के बारे में चिंता करने की आवश्यकता नहीं है।

यह बहुत अच्छी तरह यहाँ प्रलेखित है: http://www.gnelson.demon.co.uk/zspec/preface.html

यह वास्तव में एक परियोजना मैं अपने आप को इन दिनों में से एक शुरू करने के लिए इसका मतलब है, बस कभी नहीं किया है काफी समय मिल गया।

+0

एक चीज जिसे मैंने हमेशा सोचा है वह है जहां बिल्कुल किसी विशेष प्रणाली के लिए चश्मा पाता है। आपके द्वारा उल्लेखित कुछ सिस्टम, बहुत अच्छी तरह से प्रलेखित हैं, लेकिन [डॉल्फिन इमू] (http://dolphin-emulator.com/) जैसे किसी प्रोजेक्ट के बारे में क्या है? क्या निंटेंडो वास्तव में सभी को देखने के लिए अपने कंसोल के आर्किटेक्चर को छोड़ देता है? – voithos

+0

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

1

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

एक सीपीयू एमुलेटर मूल रूप से किसी प्रोग्राम के बाइट्स को पढ़ता है, व्यक्तिगत निर्देश डीकोड करता है, और उन्हें निष्पादित करता है। आप आमतौर पर डिवाइस की मेमोरी का प्रतिनिधित्व करने के लिए एक बड़ी सरणी आवंटित करते हैं, और CPU के रजिस्टरों का प्रतिनिधित्व करने के लिए कुछ चर। आप उन "रजिस्टर्स"/मेमोरी स्थानों पर एक समय में संचालन करके निर्देशों का निष्पादन अनुकरण करते हैं।

आपको उस डिवाइस पर I/O के बारे में जानकारी भी प्राप्त करनी होगी जिसे आप अनुकरण करने की कोशिश कर रहे हैं - उदाहरण के लिए, बंदरगाह या स्मृति स्थान जो विशेष बटन से इनपुट का प्रतिनिधित्व करते हैं, जो स्क्रीन का प्रतिनिधित्व करते हैं, इत्यादि। एक नया डिवाइस (लेकिन आम तौर पर अधिकतर पुराने नहीं) आपके पास एक अलग ग्राफिक्स प्रोसेसर होगा जिसे आपको अनुकरण करने की आवश्यकता है। आपको केवल उस प्रोसेसर को अनुकरण करने की आवश्यकता नहीं होगी, बल्कि यह मुख्य सीपीयू से कैसे जुड़ा हुआ है।

1

एक कंसोल एमुलेटर वास्तव में एक बड़ी परियोजना है, और मुझे लगता है कि यह ज्यादातर के लिए बहुत मजेदार नहीं होगा; आपको किसी भी गेम को चलाने के लिए शुरू होने से पहले लॉट सामानों को ठीक से प्राप्त करना होगा।

कंसोल अनुकरण करने की कोशिश कर रहे मौजूदा ओपन-सोर्स प्रोजेक्ट को ढूंढना और अधिक मजेदार हो सकता है, और देखें कि क्या आप इसे सुधारने के किसी भी तरीके ढूंढ सकते हैं।

लेकिन यदि आप सिर्फ एक बहुत ही शैक्षिक परियोजना की तलाश में हैं, तो मेरे पास एक और सुझाव है: अपना खुद का स्कीम दुभाषिया लिखें, या अपना खुद का फोर्थ दुभाषिया लिखें। इनमें से दोनों न्यूनतम, सुरुचिपूर्ण भाषाएं हैं (और दोनों गैर-मुख्यधारा के वाक्यविन्यास नियमों के साथ!)।आप अपनी योजना या फोर्थ स्क्रैच से लिख सकते हैं और दिनों के मामले में प्रोग्राम चला रहे हैं।

ये खिलौने नहीं हैं, और उन्हें लिखना शैक्षिक होगा।

बस कल्पना करें: एसआईसीपी की एक प्रति प्राप्त करना [1] और एक सिस्टम में प्रोग्राम चलाएं जो आपने स्वयं लिखा है! या एक फॉर्थ बुक की प्रति प्राप्त करना और उस प्रणाली पर समस्याएं करना जो आपने स्वयं लिखा है!

यदि आप इन परियोजनाओं में रुचि रखते हैं, तो Google "एक योजना दुभाषिया लिखने" और/या "एक फोर्थ दुभाषिया लिखने" की खोज करता है।

पीएस जब मैं पहली बार कंप्यूटर के साथ शुरुआत कर रहा था, मैंने फोरथ में घूमने में बहुत समय लगाया, और उसने मुझे बहुत कुछ सिखाया। मैंने जो सबक सीखा वह वर्षों से मुझे मदद मिली है।

[1] http://sicpebook.wordpress.com/

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

  • कोई संबंधित समस्या नहीं^_^