emulation - अनुकरणकर्ता कैसे काम करते हैं और वे कैसे लिखे जाते हैं?




c64 (11)

अनुकरणक कैसे काम करते हैं? जब मैं एनईएस / एसएनईएस या सी 64 अनुकरणकर्ताओं को देखता हूं, तो यह मुझे आश्चर्यचकित करता है।

क्या आपको अपने विशेष असेंबली निर्देशों की व्याख्या करके उन मशीनों के प्रोसेसर का अनुकरण करना है? इसमें और क्या है? वे आम तौर पर कैसे डिजाइन किए जाते हैं?

क्या आप किसी एमुलेटर (विशेष रूप से एक गेम सिस्टम) लिखने में रुचि रखने वाले किसी के लिए कोई सलाह दे सकते हैं?


एमुलेटर बहुत कठिन है क्योंकि कई हैक्स (असामान्य प्रभावों में), समय के मुद्दों, आदि जिन्हें आपको अनुकरण करने की आवश्यकता है।

इसके उदाहरण के लिए, http://queue.acm.org/detail.cfm?id=1755886 देखें।

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


80 के दशक के बीबीसी माइक्रो कंप्यूटर के अपने स्वयं के एमुलेटर (Google में VBeeb टाइप करें) बनाने के बाद, जानने के लिए कई चीजें हैं।

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

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


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

मूल विचार:

इम्यूलेशन प्रोसेसर और व्यक्तिगत घटकों के व्यवहार को संभालने से काम करता है। आप सिस्टम के प्रत्येक अलग-अलग टुकड़े का निर्माण करते हैं और फिर तारों को हार्डवेयर में करते हुए तारों से जोड़ते हैं।

प्रोसेसर इम्यूलेशन:

प्रोसेसर इम्यूलेशन को संभालने के तीन तरीके हैं:

  • व्याख्या
  • गतिशील पुनर्मूल्यांकन
  • स्टेटिक पुनर्मूल्यांकन

इन सभी पथों के साथ, आपके पास एक ही समग्र लक्ष्य है: प्रोसेसर राज्य को संशोधित करने और 'हार्डवेयर' के साथ बातचीत करने के लिए कोड का एक टुकड़ा निष्पादित करें। प्रोसेसर राज्य एक प्रोसेसर रजिस्टर के लिए प्रोसेसर रजिस्टरों, हस्तक्षेप हैंडलर आदि का एक समूह है। 6502 के लिए, आपके पास रजिस्टर्स का प्रतिनिधित्व करने वाले कई 8-बिट पूर्णांक होंगे: A , X , Y , P , और S ; आपके पास 16-बिट PC रजिस्टर भी होगा।

व्याख्या के साथ, आप IP (निर्देश सूचक - जिसे PC , प्रोग्राम काउंटर भी कहते हैं) से शुरू करते हैं और स्मृति से निर्देश पढ़ते हैं। आपका कोड इस निर्देश को पार करता है और प्रोसेसर राज्य को आपके प्रोसेसर द्वारा निर्दिष्ट अनुसार बदलने के लिए इस जानकारी का उपयोग करता है। व्याख्या के साथ मूल समस्या यह है कि यह बहुत धीमी है; प्रत्येक बार जब आप किसी दिए गए निर्देश को संभालते हैं, तो आपको इसे डीकोड करना होगा और आवश्यक ऑपरेशन करना होगा।

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

स्थिर पुनर्मूल्यांकन के साथ, आप गतिशील पुनर्मूल्यांकन के समान ही करते हैं, लेकिन आप शाखाओं का पालन करते हैं। आप कोड का एक हिस्सा बनाते हैं जो प्रोग्राम में सभी कोड का प्रतिनिधित्व करता है, जिसे आगे हस्तक्षेप के साथ निष्पादित किया जा सकता है। यह एक महान तंत्र होगा यदि यह निम्नलिखित समस्याओं के लिए नहीं था:

  • कोड जो प्रोग्राम में शुरू नहीं होता है (उदाहरण के लिए संपीड़ित, एन्क्रिप्टेड, जेनरेट / रनटाइम पर संशोधित, इत्यादि) को पुन: संकलित नहीं किया जाएगा, इसलिए यह नहीं चलेगा
  • यह सिद्ध किया गया है कि किसी दिए गए बाइनरी में सभी कोड ढूंढना हैल्टिंग समस्या के बराबर है

ये 99% मामलों में स्थिर पुनर्मूल्यांकन को पूरी तरह से अक्षम करने के लिए गठबंधन करते हैं। अधिक जानकारी के लिए, माइकल स्टीइल ने स्थिर पुनर्मूल्यांकन में कुछ बेहतरीन शोध किया है - मैंने जो देखा है सबसे अच्छा।

प्रोसेसर इम्यूलेशन के लिए दूसरी तरफ वह तरीका है जिसमें आप हार्डवेयर के साथ बातचीत करते हैं। यह वास्तव में दो पक्ष है:

  • प्रोसेसर समय
  • हस्तक्षेप हस्तक्षेप

प्रोसेसर समय:

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

हस्तक्षेप हस्तक्षेप:

इंटरप्ट्स प्राथमिक तंत्र हैं जो सीपीयू हार्डवेयर के साथ संचार करता है। आम तौर पर, आपके हार्डवेयर घटक सीपीयू को बताएंगे कि इसमें किस बाधाओं की परवाह है। यह बहुत सरल है - जब आपका कोड किसी दिए गए बाधा को फेंकता है, तो आप इंटरप्ट हैंडलर टेबल को देखते हैं और उचित कॉलबैक कॉल करते हैं।

हार्डवेयर इम्यूलेशन:

किसी दिए गए हार्डवेयर डिवाइस को अनुकरण करने के लिए दो पक्ष हैं:

  • डिवाइस की कार्यक्षमता को अनुकरण करना
  • वास्तविक डिवाइस इंटरफेस को अनुकरण करना

हार्ड ड्राइव का मामला लें। कार्यक्षमता बैकिंग स्टोरेज, पढ़ने / लिखने / प्रारूप दिनचर्या आदि बनाकर नकल की जाती है। यह हिस्सा आम तौर पर बहुत सरल होता है।

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

मैं अधिक जानकारी में जाऊंगा, लेकिन इसके साथ आप लाखों तरीके जा सकते हैं। यदि आपके यहां कोई विशिष्ट प्रश्न हैं, तो बेझिझक पूछें और मैं जानकारी जोड़ूंगा।

संसाधन:

मुझे लगता है कि मैंने यहां एक बहुत अच्छा परिचय दिया है, लेकिन अतिरिक्त क्षेत्रों में से एक टन हैं। मैं किसी भी प्रश्न के साथ मदद करने के लिए खुश हूं; मैं अत्यधिक जटिलता के कारण बस इसमें से अधिकांश में बहुत अस्पष्ट रहा हूं।

अनिवार्य विकिपीडिया लिंक:

सामान्य अनुकरण संसाधन:

  • Zophar - यह वह जगह है जहां मुझे अनुकरण के साथ अपनी शुरुआत मिली, पहले अनुकरणकर्ताओं को डाउनलोड करना और अंततः दस्तावेज़ीकरण के अपने विशाल अभिलेखागार को लूटना। यह संभवतः सबसे अच्छा संसाधन है जो आप संभवतः कर सकते हैं।
  • NGEmu - कई प्रत्यक्ष संसाधन नहीं, लेकिन उनके मंच NGEmu हैं।
  • RomHacking.net - दस्तावेज़ अनुभाग में लोकप्रिय कंसोल के लिए मशीन आर्किटेक्चर के संबंध में संसाधन शामिल हैं

संदर्भ के लिए एम्यूलेटर परियोजनाओं:

  • IronBabel - यह IronBabel लिए एक इम्यूलेशन प्लेटफार्म है, जो IronBabel में लिखा गया है और फ्लाई पर सी # को पुनः IronBabel कोड है। अस्वीकरण: यह मेरी परियोजना है, इसलिए लापरवाही प्लग क्षमा करें।
  • BSnes - चक्र-सही सटीकता के लक्ष्य के साथ एक अद्भुत एसएनईएस एमुलेटर।
  • MAME - आर्केड एमुलेटर। महान संदर्भ।
  • 6502asm.com - यह एक छोटा सा फोरम वाला जावास्क्रिप्ट 6502 एमुलेटर है।
  • dynarec'd 6502asm - यह एक छोटा सा हैक मैंने एक या दो दिन में किया था। मैंने मौजूदा एमुलेटर को 6502asm.com से लिया और इसे गतिशील रूप से बड़े पैमाने पर गति बढ़ाने के लिए कोड को जावास्क्रिप्ट में पुन: संकलित करने के लिए बदल दिया।

प्रोसेसर पुनर्मूल्यांकन संदर्भ:

  • माइकल स्टीइल (उपरोक्त संदर्भित) द्वारा किए गए स्थिर पुनर्मूल्यांकन में शोध इस पेपर में समाप्त हो गया और आप स्रोत और ऐसे here पा सकते हैं।

परिशिष्ट:

यह एक साल से भी अच्छा रहा है क्योंकि यह जवाब सबमिट किया गया था और यह सब ध्यान देने के साथ, मुझे लगा कि कुछ चीजों को अपडेट करने का समय है।

शायद इम्यूलेशन में सबसे रोमांचक बात अब libcpu , जो उपरोक्त माइकल libcpu द्वारा शुरू की गई थी। यह एक पुस्तकालय है जिसका उद्देश्य बड़ी संख्या में सीपीयू कोर का समर्थन करना है, जो पुनर्मूल्यांकन (स्थैतिक और गतिशील!) के लिए एलएलवीएम का उपयोग करता है। यह बड़ी क्षमता है, और मुझे लगता है कि यह अनुकरण के लिए महान चीजें करेगा।

emu-docs को भी मेरे ध्यान में लाया गया है, जिसमें सिस्टम प्रलेखन का एक बड़ा भंडार है, जो अनुकरण उद्देश्यों के लिए बहुत उपयोगी है। मैंने वहां ज्यादा समय नहीं बिताया है, लेकिन ऐसा लगता है कि उनके पास बहुत सारे संसाधन हैं।

मुझे खुशी है कि यह पोस्ट सहायक रही है, और मुझे आशा है कि मैं अपने गधे से उतर सकता हूं और अगले वर्ष के अंत तक / विषय के अंत तक इस विषय पर अपनी पुस्तक समाप्त कर सकता हूं।


इम्यूलेशन मुश्किल लग सकता है लेकिन वास्तव में अनुकरण करने से काफी आसान है।

किसी भी प्रोसेसर में आमतौर पर एक अच्छी तरह लिखित विनिर्देश होता है जो राज्यों, बातचीत, आदि का वर्णन करता है।

यदि आपको बिल्कुल प्रदर्शन की परवाह नहीं है, तो आप बहुत ही सुरुचिपूर्ण ऑब्जेक्ट उन्मुख कार्यक्रमों का उपयोग करके आसानी से अधिकांश पुराने प्रोसेसर का अनुकरण कर सकते हैं। उदाहरण के लिए, एक एक्स 86 प्रोसेसर को रजिस्टरों की स्थिति (आसान) को बनाए रखने के लिए कुछ चाहिए, स्मृति की स्थिति को बनाए रखने के लिए कुछ (आसान), और कुछ ऐसा जो प्रत्येक आने वाले कमांड को ले लेगा और इसे मशीन की वर्तमान स्थिति में लागू करेगा। यदि आप वास्तव में सटीकता चाहते थे, तो आप स्मृति अनुवाद, कैशिंग आदि का भी अनुकरण करेंगे, लेकिन यह करने योग्य है।

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

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

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


जब आप एक एमुलेटर विकसित करते हैं तो आप प्रोसेसर असेंबली की व्याख्या कर रहे हैं कि सिस्टम (Z80, 8080, PS CPU, आदि) पर काम कर रहा है।

आपको सिस्टम के सभी परिधीय अनुकरण करने की भी आवश्यकता है (वीडियो आउटपुट, नियंत्रक)।

आपको पुराने पुराने गेम बॉय (जो एक जेड 80 प्रोसेसर का उपयोग करते हैं, क्या मैं गलत नहीं कर रहा हूं) या सी 64 के लिए सिंप सिस्टम के लिए अनुकरणकर्ताओं को लिखना शुरू कर देना चाहिए।


जावास्क्रिप्ट में Gameboy एमुलेटर लिखने पर इमरान नज़र के प्रयास को देखने के लायक कुछ है।


मुझे पता है कि यह सवाल थोड़ा पुराना है, लेकिन मैं चर्चा में कुछ जोड़ना चाहता हूं। यहां दिए गए अधिकांश उत्तर उन अनुकरणकर्ताओं के आस-पास केंद्र हैं जो उनके द्वारा अनुकरण किए गए सिस्टम के मशीन निर्देशों की व्याख्या करते हैं।

हालांकि, इस "अल्ट्राहेले" ( WIKIpedia लेख ) नामक एक बहुत ही प्रसिद्ध अपवाद है। UltraHLE, कभी भी बनाए गए सबसे मशहूर अनुकरणकर्ताओं में से एक, वाणिज्यिक निंटेंडो 64 गेम (घरेलू कंप्यूटर पर सभ्य प्रदर्शन के साथ) नकल करता है, जब इसे व्यापक रूप से ऐसा करना असंभव माना जाता था। तथ्य के तौर पर, जब अल्ट्राहेल बनाया गया था तो निंटेंडो 64 के लिए निंटेंडो नए खिताब तैयार कर रहा था!

पहली बार, मैंने प्रिंट पत्रिकाओं में अनुकरणकर्ताओं के बारे में लेख देखा जहां पहले, मैंने उन्हें केवल वेब पर चर्चा की थी।

अल्ट्राहेएल की अवधारणा मशीन स्तर कॉल के बजाए सी लाइब्रेरी कॉल को अनुकरण करके असंभव बनाना संभव था।


मैं अनुकरण कैसे शुरू करूंगा।

1. निम्न स्तर के प्रोग्रामिंग के आसपास आधारित किताबें प्राप्त करें, आपको निंटेंडो के "नाटक" ऑपरेटिंग सिस्टम के लिए इसकी आवश्यकता होगी ... गेम लड़का ...

2. विशेष रूप से अनुकरण पर किताबें प्राप्त करें, और शायद विकास हो। (आप ओएस नहीं बनायेंगे, लेकिन इसके सबसे नज़दीक हैं।

3. कुछ ओपन सोर्स एमुलेटर पर नजर रखें, खासकर उस सिस्टम के जिन्हें आप एमुलेटर बनाना चाहते हैं।

4. आपके आईडीई / शिकायतकर्ता में अधिक जटिल कोड के कॉपी स्निपेट्स। यह आपको लंबे कोड लिखने से बचाएगा। ओएस विकास के लिए मैं यही करता हूं, लिनक्स के जिले का उपयोग करता हूं


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


विक्टर मोया डेल बैरियो नाम के एक लड़के ने इस विषय पर अपनी थीसिस लिखी। 152 पृष्ठों पर बहुत अच्छी जानकारी। आप here पीडीएफ डाउनलोड कर सकते here

यदि आप scribd साथ पंजीकरण नहीं करना चाहते हैं, तो आप पीडीएफ शीर्षक, "अनुकरण प्रोग्रामिंग के लिए तकनीकों का अध्ययन" के लिए Google पर जा सकते हैं। पीडीएफ के लिए कुछ अलग-अलग स्रोत हैं।


साझा स्रोत डिवाइस एमुलेटर में पॉकेटपीसी / स्मार्टफ़ोन एमुलेटर (विजुअल स्टूडियो की आवश्यकता होती है, विंडोज़ पर चलती है) में बिल्ड करने योग्य स्रोत कोड शामिल है। मैंने द्विआधारी रिलीज के वी 1 और वी 2 पर काम किया।

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