অনুকরণকারীরা কীভাবে কাজ করে এবং কীভাবে তারা লিখিত হয়? [বন্ধ]


968

অনুকরণকারীরা কীভাবে কাজ করবেন? আমি যখন এনইএস / এসএনইএস বা সি 64 ইমুলেটর দেখি তখন তা আমাকে অবাক করে দেয়।

http://www.tommowalker.co.uk/snemzelda.png

আপনার কি এই বিশেষ মেশিনগুলির প্রসেসরের নির্দিষ্ট সমাবেশ নির্দেশাবলীর ব্যাখ্যার মাধ্যমে অনুকরণ করতে হবে? এর মধ্যে আর কি যায়? তারা সাধারণত ডিজাইন করা হয় কিভাবে?

এমুলেটর (বিশেষত একটি গেম সিস্টেম) লিখতে আগ্রহী এমন কাউকে আপনি কি কোনও পরামর্শ দিতে পারেন?


15
আপনার সর্বাধিক গুরুত্বপূর্ণ বিষয়টি সেই সিস্টেমের জন্য "প্রোগ্রামার ম্যানুয়াল" হ'ল, যেহেতু এইচডাব্লু বিক্রেতা এবং প্রোগ্রামারদের মধ্যে "চুক্তি" সম্পর্কিত বিবরণ দেয় এবং প্রাসঙ্গিক নয় এবং পরিবর্তিত হতে পারে এমন বিবরণ গোপন করে। আপনার সম্ভাবনাগুলি সিস্টেমের জনপ্রিয়তার উপর নির্ভর করে।
উরি

155
ভাল খেলা পছন্দ।
ক্রিশ্চিয়ান রোমো

2
হাঁ, আমি তাই বিশ্বাস করি: en.wikipedia.org/wiki/The_Legend_of_Zelda:_A_Link_to_the_Past
mmcdole


8
আমি যখন প্রথমবার সেই খেলাটি খেলেছি তখন থেকেই আমি সবসময়ই ভাবছিলাম কেন হিউরুল "8-বল" বোল্ডার দিয়ে জড়িত :-)
ভিভিয়ান নদী

উত্তর:


1124

অনুকরণ একটি বহু-মুখী অঞ্চল। এখানে মূল ধারণা এবং কার্যকরী উপাদান রয়েছে are আমি এটিকে টুকরো টুকরো করে টুকরো টুকরো করব এবং তারপরে সম্পাদনাগুলির মাধ্যমে বিশদটি পূরণ করব। আমি যে বিষয়গুলি বর্ণনা করতে চলেছি তার অনেকগুলি প্রসেসরের অভ্যন্তরীণ কার্যকারিতা সম্পর্কে জ্ঞানের প্রয়োজন হবে - সমাবেশ জ্ঞান প্রয়োজনীয়। আমি যদি কিছু বিষয়ে কিছুটা অস্পষ্ট হয়ে থাকি তবে দয়া করে প্রশ্ন জিজ্ঞাসা করুন যাতে আমি এই উত্তরটির উন্নতি অবিরত রাখতে পারি।

মৌলিক ধারণা:

অনুকরণ প্রসেসরের আচরণ এবং স্বতন্ত্র উপাদানগুলির পরিচালনা করে কাজ করে। আপনি সিস্টেমের প্রতিটি পৃথক টুকরা তৈরি করেন এবং তারপরে হার্ডওয়ারের মতো তারের মতো টুকরোগুলি সংযুক্ত করেন।

প্রসেসর অনুকরণ:

প্রসেসরের এমুলেশন পরিচালনা করার তিনটি উপায় রয়েছে:

  • ব্যাখ্যা
  • গতিশীল পুনঃসংশোধন
  • স্থির পুনঃসংশোধন

এই সমস্ত পাথের সাথে আপনার একই সামগ্রিক লক্ষ্য রয়েছে: প্রসেসরের স্টেটটি সংশোধন করতে এবং 'হার্ডওয়্যার' এর সাথে ইন্টারঅ্যাক্ট করার জন্য একটি কোডের টুকরা কার্যকর করুন। প্রসেসর রাষ্ট্রটি প্রদত্ত প্রসেসরের টার্গেটের জন্য প্রসেসর রেজিস্টার, বাধা হ্যান্ডলার ইত্যাদির একত্রিত করা is 6502 জন্য, আপনি রেজিস্টার প্রতিনিধিত্বমূলক 8 বিট ইন্টিজার সংখ্যার আছে চাই: A, X, Y, P, এবং S; আপনার একটি 16-বিট PCরেজিস্টার থাকতে হবে।

ব্যাখ্যার সাথে, আপনি IP(নির্দেশ পয়েন্টার - এটিও বলা হয় PC, প্রোগ্রাম কাউন্টার) থেকে শুরু করুন এবং মেমরি থেকে নির্দেশটি পড়েন। আপনার কোড এই নির্দেশকে পার্স করে এবং আপনার প্রসেসরের দ্বারা নির্দিষ্ট হিসাবে প্রসেসরের অবস্থার পরিবর্তন করতে এই তথ্য ব্যবহার করে। ব্যাখ্যার মূল সমস্যাটি হ'ল এটি খুব ধীর; প্রতিবার আপনি কোনও প্রদত্ত নির্দেশকে পরিচালনা করবেন, আপনাকে এটিকে ডিকোড করতে হবে এবং প্রয়োজনীয় অপারেশন করতে হবে।

গতিশীল পুনঃসংশোধন সহ, আপনি কোডটি অনেকটা ব্যাখ্যার মতো পুনরাবৃত্তি করেন, তবে কেবল অপকডগুলি কার্যকর করার পরিবর্তে, আপনি অপারেশনগুলির একটি তালিকা তৈরি করেন। একবার আপনি কোনও শাখার নির্দেশে পৌঁছানোর পরে, আপনি আপনার হোস্ট প্ল্যাটফর্মের জন্য মেশিন কোডে অপারেশনগুলির এই তালিকাটি সংকলন করুন, তারপরে আপনি এই সংকলিত কোডটি ক্যাশে করুন এবং এটি সম্পাদন করুন। তারপরে আপনি যখন কোনও প্রদত্ত নির্দেশ গোষ্ঠীকে আবার আঘাত করবেন তখন আপনাকে কেবল ক্যাশে থেকে কোডটি কার্যকর করতে হবে। (বিটিডাব্লু, বেশিরভাগ লোকেরা আসলে নির্দেশাবলীর একটি তালিকা তৈরি করে না তবে ফ্লাইতে মেশিন কোডে সেগুলি সংকলন করে - এটি অনুকূলকরণ আরও কঠিন করে তোলে, তবে পর্যাপ্ত লোকেরা আগ্রহী না হলে এটি এই উত্তরের ক্ষেত্রের বাইরে))

স্থির পুনঃসংশোধন সহ, আপনি গতিশীল পুনঃসংশোধনের মতোই করেন তবে আপনি শাখাগুলি অনুসরণ করেন। আপনি প্রোগ্রামের সমস্ত কোডকে উপস্থাপিত কোডের একটি অংশ তৈরির কাজ শেষ করেন, যা পরে আর কোনও হস্তক্ষেপ ছাড়াই কার্যকর করা যায়। নিম্নলিখিত সমস্যাগুলির জন্য না হলে এটি একটি দুর্দান্ত প্রক্রিয়া হবে:

  • প্রোগ্রামে যে কোডটি শুরু হয় না (যেমন সংক্ষেপিত, এনক্রিপ্ট করা, জেনারেট / রানটাইম সময়ে সংশোধিত ইত্যাদি) পুনরায় সংযোগ করা হবে না, সুতরাং এটি চলবে না
  • এটি প্রমাণিত হয়েছে যে প্রদত্ত বাইনারিতে সমস্ত কোড সন্ধান করা হ্যালটিং সমস্যার সমতুল্য

এগুলি 99% ক্ষেত্রে স্থিতিশীল পুনঃসংশোধন সম্পূর্ণভাবে অদৃশ্য করে তোলে। আরও তথ্যের জন্য, মাইকেল স্টিল স্থির পুনঃসংশ্লিষ্ট সম্পর্কে কিছু দুর্দান্ত গবেষণা করেছেন - আমি দেখেছি সেরা।

প্রসেসর এমুলেশনের অন্য দিকটি হল আপনি যেভাবে হার্ডওয়্যারটির সাথে ইন্টারঅ্যাক্ট করেন। এর সত্যই দুটি দিক রয়েছে:

  • প্রসেসরের সময়
  • বাধা হ্যান্ডলিং

প্রসেসরের সময়:

নির্দিষ্ট প্ল্যাটফর্মগুলি - বিশেষত NES, SNES ইত্যাদির মতো পুরানো কনসোলগুলি - সম্পূর্ণরূপে সামঞ্জস্যপূর্ণ হওয়ার জন্য আপনার এমুলেটরটির কঠোর সময় প্রয়োজন। এনইএসের সাথে আপনার পিপিইউ (পিক্সেল প্রসেসিং ইউনিট) রয়েছে যার জন্য সিপিইউ নির্দিষ্ট মুহুর্তে পিক্সেলগুলি তার স্মৃতিতে রেখে দেয় memory আপনি যদি ব্যাখ্যার ব্যবহার করেন তবে আপনি সহজেই চক্রটি গণনা করতে পারেন এবং যথাযথ সময় নির্ধারণ করতে পারেন; গতিশীল / স্থির পুনঃসংশোধন সহ, জিনিসগুলি একটি / প্রচুর / আরও জটিল।

বাধা হ্যান্ডলিং:

বাধা হ'ল সিপিইউ হার্ডওয়্যারের সাথে যোগাযোগ করে এমন প্রাথমিক প্রক্রিয়া। সাধারণত, আপনার হার্ডওয়্যার উপাদানগুলি সিপিইউকে জানায় যে এটিতে কীভাবে বাধা দেয়। এটি বেশ সোজা - যখন আপনার কোডটি একটি প্রদত্ত বাধা দেয়, আপনি বাধা হ্যান্ডলার টেবিলটি দেখে সঠিক কলব্যাক কল করেন।

হার্ডওয়্যার অনুকরণ:

প্রদত্ত হার্ডওয়্যার ডিভাইস অনুকরণ করার দুটি দিক রয়েছে:

  • ডিভাইসের কার্যকারিতা অনুকরণ করে
  • আসল ডিভাইস ইন্টারফেস অনুকরণ

হার্ড-ড্রাইভের ক্ষেত্রে নিন। ব্যাকিং স্টোরেজ তৈরি, পড়া / লেখার / ফর্ম্যাট রুটিন ইত্যাদি তৈরি করে কার্যকারিতা অনুকরণ করা হয় This এই অংশটি সাধারণত খুব সোজা।

ডিভাইসের আসল ইন্টারফেসটি কিছুটা জটিল। এটি সাধারণত মেমরি ম্যাপ করা রেজিস্ট্রিগুলির (যেমন মেমরির অংশ যা সংকেত করতে ডিভাইস পরিবর্তনের জন্য লক্ষ্য রাখে) এবং বাধা দেয় of হার্ড-ড্রাইভের জন্য আপনার কাছে মেমরি ম্যাপ করা অঞ্চল থাকতে পারে যেখানে আপনি পড়া কমান্ড, রাইটিং ইত্যাদি স্থাপন করেন, তবে এই ডেটাটি আবার পড়ুন।

আমি আরও বিশদে যেতে চাই, তবে আপনি এটির সাথে যেতে পারেন এমন এক মিলিয়ন উপায় রয়েছে। আপনার যদি এখানে কোনও নির্দিষ্ট প্রশ্ন থাকে তবে নির্দ্বিধায় জিজ্ঞাসা করুন এবং আমি তথ্যটি যুক্ত করব।

সম্পদ:

আমি মনে করি আমি এখানে বেশ ভাল পরিচয় দিয়েছি, তবে এখানে আরও অনেকগুলি অতিরিক্ত অঞ্চল রয়েছে। আমি কোনও প্রশ্নে সাহায্য করতে পেরে অনেক বেশি খুশি; কেবলমাত্র প্রচুর জটিলতার কারণে আমি এর বেশিরভাগ ক্ষেত্রেই খুব অস্পষ্ট হয়েছি।

বাধ্যবাধক উইকিপিডিয়া লিঙ্ক:

সাধারণ অনুকরণের সংস্থানসমূহ:

  • জোফর - এখান থেকেই আমি অনুকরণ দিয়ে আমার সূচনা করেছি, প্রথমে অনুকরণকারীগুলি ডাউনলোড করছি এবং শেষ পর্যন্ত তাদের ডকুমেন্টেশনের প্রচুর সংরক্ষণাগার লুণ্ঠন করব। এটি আপনার হতে পারে নিখুঁত সেরা সম্পদ।
  • এনজিইমু - অনেকগুলি সরাসরি সংস্থান নেই, তবে তাদের ফোরামগুলি অপরাজেয়।
  • রোমহ্যাকিং.নেট - নথি বিভাগে জনপ্রিয় কনসোলগুলির জন্য মেশিন আর্কিটেকচার সম্পর্কিত সংস্থান রয়েছে

এমুলেটর প্রকল্প রেফারেন্স:

  • আয়রনবাবেল - এটি নেমারলে লিখিত .NET এর একটি এমুলেশন প্ল্যাটফর্ম এবং উড়ে যাওয়ার সময় সি # তে কোডটি পুনরায় কম্পাইল করে। দাবি অস্বীকার: এটি আমার প্রকল্প, তাই নির্লজ্জ প্লাগকে ক্ষমা করুন।
  • BSnes - চক্র-নিখুঁত নির্ভুলতার লক্ষ্যের সাথে দুর্দান্ত একটি SNES এমুলেটর।
  • MAME - তোরণ এমুলেটর। দুর্দান্ত রেফারেন্স।
  • 6502asm.com - এটি একটি শীতল ছোট ফোরাম সহ একটি জাভাস্ক্রিপ্ট 6502 এমুলেটর।
  • dinarec'd 6502asm - এটি আমি এক দু'দিন ধরে একটি সামান্য হ্যাক করেছি। আমি 6502asm.com থেকে বিদ্যমান এমুলেটরটি নিয়েছি এবং এটিকে পরিবর্তন করে গুরুতর গতি বৃদ্ধির জন্য কোডটিকে জাভাস্ক্রিপ্টে পুনরায় সংস্থায় পরিণত করেছি।

প্রসেসরের পুনঃসংশ্লিষ্ট রেফারেন্স:

  • মাইকেল Steil (উপরে উল্লিখিত) দ্বারা সম্পন্ন স্ট্যাটিক কম্পায়লেশান গবেষণা চরম পরিণতি পায় এই কাগজ এবং আপনি উৎস এবং এই ধরনের জানতে পারেন এখানে

সংযোজন:

এই উত্তরটি জমা দেওয়ার পরে এক বছর হয়ে গেছে এবং এটি যে মনোযোগ পাচ্ছে তার সাথে আমি বুঝতে পেরেছি যে কিছু জিনিস আপডেট করার সময় এসেছে।

সম্ভবত এখনই অনুকরণের সবচেয়ে উত্তেজনাপূর্ণ জিনিসটি হল লিবিপ্পু , যা পূর্বোক্ত মাইকেল স্টিল দ্বারা শুরু করা হয়েছিল। এটি একটি লাইব্রেরি যা বিপুল সংখ্যক সিপিইউ কোরকে সমর্থন করার উদ্দেশ্যে তৈরি করা হয়েছে, যা পুনঃসংযোগের জন্য এলএলভিএম ব্যবহার করে (স্ট্যাটিক এবং ডায়নামিক!)। এটি বিশাল সম্ভাবনা পেয়েছে এবং আমি মনে করি এটি অনুকরণের জন্য দুর্দান্ত কাজ করবে।

ইমু-ডক্সও আমার নজরে এনেছে, যা সিস্টেম ডকুমেন্টেশনের একটি দুর্দান্ত সংগ্রহস্থল রাখে, যা অনুকরণের উদ্দেশ্যে খুব কার্যকর useful আমি সেখানে খুব বেশি সময় ব্যয় করি নি, তবে দেখে মনে হচ্ছে তাদের কাছে প্রচুর সংস্থান রয়েছে।

এই পোস্টটি সহায়ক হয়েছে বলে আমি আনন্দিত এবং আমি আশা করছি যে আমি আমার গাধা থেকে নামতে পারি এবং বছরের শেষের দিকে / পরের বছরের শুরুতে এই বিষয়ে আমার বইটি শেষ করতে পারি।


37
এটি ইতিমধ্যে একটি মহাকাব্য উত্তর হতে প্রস্তুত। আপনি যদি আমাকে শেষ পর্যন্ত কোন সংস্থানগুলিতে নির্দেশ করতে পারেন তবে এটি প্রশংসা হবে। আমি সম্ভবত SNES বা NES সিস্টেমটি অনুকরণ করতে এবং এটি আমার সেমিস্টার প্রকল্প তৈরি করতে চাই।
এমএমসিডোল

8
নিশ্চয়ই. আমি উত্স একটি দুর্দান্ত তালিকা একত্রিত করতে যাচ্ছি। আপনার কাছে যদি কোনও নির্দিষ্ট অনুরোধ থাকে তবে আমি সেগুলি পূরণ করার জন্য যথাসাধ্য চেষ্টা করব।
কোডি ব্রোসিয়াস

3
@ তিথনহ্যাকার, আমার সংস্থান বিভাগে উল্লিখিত আয়রণবাবেল প্রকল্পটি আমার। (নির্লজ্জ প্লাগ চিহ্নিত;))
কোডি ব্রোসিয়াস

1
"এটি প্রমাণিত হয়েছে যে প্রদত্ত বাইনারিতে সমস্ত কোড সন্ধান করা হ্যালটিং সমস্যার সমতুল্য" - রেফারেন্স দয়া করে? অথবা এটি "এটি প্রমাণিত হয়েছে যে কোনও বাইনারিতে সমস্ত কোড সন্ধান করা হ্যালটিং সমস্যার সমতুল্য"? স্টিলের
কাগজটিও

4
আপনি উল্লেখ করেছেন আপনি একটি বই লিখছেন; আপনি দয়া করে আমাদের একটি আপডেট দিতে পারেন? আমি, এক জন্য এটি পড়তে আগ্রহী হবে।
অ্যালেক্স

126

ভিক্টর মোয়া ডেল ব্যারিও নামের এক ব্যক্তি এই বিষয়টিতে তাঁর থিসিস লিখেছিলেন। 152 পৃষ্ঠাগুলিতে প্রচুর ভাল তথ্য। আপনি এখানে পিডিএফ ডাউনলোড করতে পারেন ।

আপনি যদি স্ক্রিড দিয়ে নিবন্ধন করতে না চান , আপনি পিডিএফ শিরোনাম, "এমুলেশন প্রোগ্রামিংয়ের কৌশলগুলির অধ্যয়ন" এর জন্য গুগল করতে পারেন । পিডিএফটির জন্য কয়েকটি উত্স রয়েছে।


43

অনুকরণটি মনে হয় কঠিন মনে হলেও অনুকরণের চেয়ে আসলে বেশ সহজ।

যে কোনও প্রসেসরের সাধারণত একটি লিখিত স্পেসিফিকেশন থাকে যা রাজ্য, মিথস্ক্রিয়া ইত্যাদি বর্ণনা করে

আপনি যদি পারফরম্যান্সের বিষয়ে মোটেই যত্নবান না হন তবে আপনি খুব মার্জিত অবজেক্ট ওরিয়েন্টেড প্রোগ্রামগুলি ব্যবহার করে বেশিরভাগ পুরানো প্রসেসরকে সহজেই অনুকরণ করতে পারেন। উদাহরণস্বরূপ, একটি এক্স 86 প্রসেসরের রেজিস্ট্রারগুলির অবস্থা (সহজ) বজায় রাখার জন্য কিছু, মেমরির অবস্থা (সহজ) বজায় রাখার জন্য কিছু প্রয়োজন, এবং এমন প্রতিটি জিনিস যা প্রতিটি আগত কমান্ড গ্রহণ করে এবং এটি মেশিনের বর্তমান অবস্থায় প্রয়োগ করবে। আপনি যদি সত্যিই নির্ভুলতা চেয়েছিলেন, আপনি মেমরি অনুবাদ, ক্যাশিং ইত্যাদিরও অনুকরণ করতেন তবে তা করণীয়।

প্রকৃতপক্ষে, অনেকগুলি মাইক্রোচিপ এবং সিপিইউ নির্মাতারা চিপের একটি এমুলেটর এবং তারপরে নিজেই চিপের বিপরীতে প্রোগ্রাম পরীক্ষা করে, যা চিপের স্পেসিফিকেশনে সমস্যা আছে কিনা, বা হার্ডওয়্যারে চিপের প্রকৃত বাস্তবায়নে কিনা তা জানতে সহায়তা করে। উদাহরণস্বরূপ, একটি চিপ স্পেসিফিকেশন লিখতে সম্ভব হবে যার ফলস্বরূপ ডেডলকগুলি ঘটতে পারে এবং হার্ডওয়্যারে যখন একটি সময়সীমা ঘটে থাকে তখন এটি গুরুত্বপূর্ণ যে এটি নির্দিষ্টকরণে পুনরুত্পাদন করতে পারে কিনা তা দেখতে গুরুত্বপূর্ণ কারণ এটি চিপ বাস্তবায়নের কোনও কিছুর চেয়ে বড় সমস্যা নির্দেশ করে।

অবশ্যই, ভিডিও গেমগুলির জন্য ইমুলেটরগুলি সাধারণত পারফরম্যান্সের যত্ন করে তাই তারা নিখুঁত বাস্তবায়ন ব্যবহার না করে এবং তাদের মধ্যে এমন কোডও অন্তর্ভুক্ত থাকে যা হোস্ট সিস্টেমের ওএসের সাথে ইন্টারফেস করে, উদাহরণস্বরূপ অঙ্কন এবং শব্দ ব্যবহার করার জন্য।

পুরানো ভিডিও গেমগুলির খুব ধীর পারফরম্যান্স বিবেচনা করে (এনইএস / এসএনইএস ইত্যাদি) আধুনিক পদ্ধতিতে অনুকরণটি বেশ সহজ। প্রকৃতপক্ষে, এটি আরও আশ্চর্যজনক যে আপনি যে কোনও এসএনইএস গেমের যে কোনও সেট বা যে কোনও আটারি 2600 গেমটি কেবল কখনও ডাউনলোড করতে পারতেন, এই বিষয়টি বিবেচনা করেই যে এই সিস্টেমগুলি জনপ্রিয় ছিল যখন প্রতিটি কার্টিজের অবাধ অ্যাক্সেস থাকার স্বপ্নটি সত্য হয়ে উঠত।


1
অনুকরণ এবং সিমুলেশন মধ্যে পার্থক্য কি?
ওয়েই হু

2
@ ওয়েই: সাধারণভাবে বলতে গেলে, কোনও এমুলেটরকে "বহিরাগত" আচরণ করার কথা বলে তার সিস্টেমটি অনুকরণ করে তবে এটিকে একইভাবে প্রয়োগ করতে হবে বলে কিছু নেই। একটি সিমুলেটর এমনভাবে প্রয়োগ করা হয় যা সিমুলেটেড সিস্টেমের নকল করে এবং ফলস্বরূপ এটির মতো আচরণ করে।
উরি

যখন আপনি "সিমুলেটর" দেখেন তখন এটি একই রকম মনে হয় যখন কোনও এমুলেটর "এমুলেট" করে থাকে
এমপি।


29

আমি জানি যে এই প্রশ্নটি কিছুটা পুরানো, তবে আমি আলোচনায় কিছু যুক্ত করতে চাই। বেশিরভাগ উত্তর এখানে এমুলেটরদের আশেপাশে কেন্দ্র করে যেখানে তারা অনুকরণ করে তার মেশিনের নির্দেশাবলী ব্যাখ্যা করে।

তবে "আল্ট্রাএইচএলই" ( ডাব্লুআইকিপিডিয়া নিবন্ধ ) নামে একটি খুব সুপরিচিত ব্যতিক্রম রয়েছে । আল্ট্রাএইচএল, এখন পর্যন্ত তৈরি করা সবচেয়ে বিখ্যাত ইমুলেটরগুলির মধ্যে এমন একরকম বাণিজ্যিকভাবে নিন্টেন্ডো em৪ গেমস (হোম কম্পিউটারে শালীন পারফরম্যান্স সহ) তৈরি করা হয়েছিল যখন এটি করা অসম্ভব বলে মনে করা হত। প্রকৃতপক্ষে, আল্ট্রাএইচএল তৈরি হওয়ার সময় নিন্টেন্ডো তখনও নিন্টেন্ডো 64 এর জন্য নতুন শিরোনাম তৈরি করছিল!

প্রথমবারের জন্য, আমি প্রিন্ট ম্যাগাজিনগুলিতে এমুলেটরদের সম্পর্কে নিবন্ধগুলি দেখেছি যেখানে আগে আমি কেবল সেগুলি ওয়েবে আলোচিত দেখেছি।

আলট্রাএইচএল ধারণাটি ছিল মেশিন স্তরের কলগুলির পরিবর্তে সি লাইব্রেরি কল অনুকরণ করে অসম্ভবকে সম্ভব করে তুলতে।


22

জাভা স্ক্রিপ্টে গেমবয় এমুলেটর লেখার জন্য ইমরান নজরারের প্রয়াসটি লক্ষ্য করা যায় ।


1
গেমবয় গেমের জন্য আমরা কীভাবে কাঁচা অপকোড নির্দেশাবলী পেতে পারি?
পেসারিয়ার

'ধূসর বাজারে' বিক্রয়ের জন্য বেশ কয়েকটি ডিভাইস রয়েছে। আপনি এগুলিকে উন্নত বিশ্বের কোনও বড় দোকানে খুঁজে পাবেন না। এই ডিভাইসগুলি গেম কার্তুজ থেকে ফাইলগুলিতে অনুলিপি করতে সক্ষম হয় যা সাধারণত "আরওএম" বলে। গুগল "গেমবয় রোম", তবে ওয়ার্ক-অনিরাপদ লিঙ্ক এবং আক্রমণ সাইটের জন্য নজর রাখুন!
ভিভিয়ান নদী

18

৮০ এর দশকের বিবিসি মাইক্রো কম্পিউটারের নিজস্ব এমুলেটর তৈরি করে (গুগলে ভিবিবি টাইপ করুন), অনেকগুলি জিনিস জানতে হবে।

  • আপনি আসল জিনিসটিকে অনুকরণ করছেন না, এটি একটি প্রতিলিপি হবে। পরিবর্তে, আপনি রাজ্য অনুকরণ করছেন । একটি ভাল উদাহরণ হল একটি ক্যালকুলেটর, আসল জিনিসটিতে বোতাম, স্ক্রিন, কেস ইত্যাদি থাকে তবে ক্যালকুলেটর অনুকরণ করতে আপনাকে কেবল অনুকরণ করতে হবে যে বোতামগুলি উপরে বা নীচে রয়েছে, কোন এলসিডির অংশগুলি চালু আছে ইত্যাদি। মূলত, সংখ্যার একটি সেট ক্যালকুলেটরে পরিবর্তিত হতে পারে এমন সমস্ত সম্ভাব্য সংমিশ্রণের প্রতিনিধিত্ব করে।
  • আসল জিনিসটির মতো উপস্থিত এবং আচরণ করার জন্য আপনাকে কেবল এমুলেটরটির ইন্টারফেসের প্রয়োজন। এটি আরও দৃinc়তর অনুকরণটি যত কাছাকাছি হয়। পর্দার আড়ালে যা হয় তা আপনার পছন্দ মতো কিছু হতে পারে। তবে, একটি এমুলেটর লেখার স্বাচ্ছন্দ্যের জন্য, একটি মানসিক ম্যাপিং রয়েছে যা আসল সিস্টেমের মধ্যে ঘটে, যেমন চিপস, ডিসপ্লে, কীবোর্ডস, সার্কিট বোর্ড এবং বিমূর্ত কম্পিউটার কোড।
  • একটি কম্পিউটার সিস্টেম অনুকরণ করতে, এটিকে ছোট ছোট ভাণ্ডারে ভাঙ্গা এবং পৃথকভাবে এই খণ্ডগুলি অনুকরণ করা সহজ। তারপরে সমাপ্ত পণ্যটির জন্য পুরোটা এক সাথে স্ট্রিং করুন। অনেকগুলি ইনপুট এবং আউটপুট সহ কালো বাক্সগুলির সেটগুলির মতো, যা ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য নিজেকে সুন্দরভাবে ndsণ দেয়। জীবনকে আরও সহজ করতে আপনি এই খণ্ডগুলিকে আরও উপ-বিভাজন করতে পারেন।

ব্যবহারিকভাবে বলতে গেলে, আপনি সাধারণত অনুকরণের গতি এবং বিশ্বস্ততার জন্য লিখতে চাইছেন। এর কারণ হ'ল টার্গেট সিস্টেমে থাকা সফ্টওয়্যার উত্স সিস্টেমে মূল হার্ডওয়্যারের চেয়ে ধীরে ধীরে চলতে পারে। এটি প্রোগ্রামিং ভাষা, সংকলক, টার্গেট সিস্টেম ইত্যাদির
বাছাইকে বাধাগ্রস্ত করতে পারে এবং এছাড়াও আপনি যা অনুকরণ করতে প্রস্তুত তা বিচার করতে হবে, উদাহরণস্বরূপ, মাইক্রোপ্রসেসরে ট্রানজিস্টরের ভোল্টেজের অবস্থা অনুকরণ করার প্রয়োজন নেই, তবে সম্ভবত এটি প্রয়োজনীয় মাইক্রোপ্রসেসরের রেজিস্টার সেট এর রাজ্য অনুকরণ করতে।
সাধারণত অনুকরণের বিশদ স্তরের কথা যত কম বলা যায়, তত বেশি বিশ্বস্ততা আপনি মূল সিস্টেমে পাবেন।
শেষ অবধি, পুরানো সিস্টেমগুলির জন্য তথ্য অসম্পূর্ণ বা অস্তিত্বহীন হতে পারে। সুতরাং আসল সরঞ্জাম ধরে রাখা অপরিহার্য, বা কমপক্ষে অন্য কোনও ভাল এমুলেটর লিখে রেখেছেন যা অন্য কেউ লিখেছেন!


17

হ্যাঁ, আপনাকে পুরো বাইনারি মেশিন কোড জঞ্জাল "হাতে হাতে" ব্যাখ্যা করতে হবে। শুধু তাই নয়, বেশিরভাগ সময় আপনাকে কিছু বিদেশী হার্ডওয়্যারও অনুকরণ করতে হয় যা লক্ষ্য মেশিনের সমান হয় না।

সহজ পদ্ধতির হ'ল নির্দেশগুলি একের পর এক ব্যাখ্যা করা। এটি ভাল কাজ করে তবে এটি ধীর। একটি দ্রুত পদ্ধতির পুনরায় সংকলন হয় - মেশিন কোডকে লক্ষ্য করে উত্স মেশিন কোড অনুবাদ করা। এটি আরও জটিল, কারণ বেশিরভাগ নির্দেশাবলী একের সাথে মানচিত্র তৈরি করবে না। পরিবর্তে আপনাকে অতিরিক্ত কোড জড়িত বিস্তৃত কাজের চারপাশ তৈরি করতে হবে। তবে শেষ পর্যন্ত এটি আরও দ্রুত। বেশিরভাগ আধুনিক অনুকরণকারী এটি করেন।


1
সবচেয়ে খারাপ জিনিসটি এখন পর্যন্ত ডকুমেন্টেশন অনুপস্থিত। এটি যখন আপনি জানতে পারবেন যে গেমবয় রঙের সংশোধিত জেড 80 কোরটিতে এমন শৃঙ্খলাবদ্ধ ফ্ল্যাগ অপারেশন রয়েছে যা আপনি পরীক্ষা করছেন গেমটি ব্যবহার করে আপনি সত্যই বিশ্বাস হারাতে শুরু করেন।
কলম রজার্স

1
পোষা প্রাণবন্ত: এটি মেশিন কোড (একক), মেশিন কোডগুলি নয় (বহুবচন); শুধু এটা যেমন সাঙ্কেতিক লিখন না জলহস্তী কোড
লরেন্স ডল

1
@ ভিলাক্স: আসলে না - শব্দটি "মেশিন কোড", একটি সিপিইউর জন্য নির্দেশ নির্দেশকে উল্লেখ করে সফ্টওয়্যার প্রতিষ্ঠার পর থেকেই ব্যবহৃত হয়েছে এবং বহুবচন নয়। এটি "নির্দেশিকা সেট ", একটি একক রূপকে বোঝায় , বহুবচন রূপ "নির্দেশাবলী" নয়। প্রোগ্রাম কোড, মোর্স কোড ইত্যাদি হিসাবে একই ame বহুবচন ফর্মের ব্যবহার অপব্যবহার থেকে শুরু হয়েছে, সাধারণত যারা দ্বিতীয় ভাষা হিসাবে ইংরেজী ভাষায় কথা বলে by
লরেন্স ডল

1
@ সফটওয়্যার বানর - তবে আমি কি সেট থেকে কোনও আইটেমটি উল্লেখ করতে "কোড" শব্দটি ব্যবহার করতে পারি না? উদাহরণস্বরূপ: " ... --- ...- এই তিনটি মোর্স কোডগুলি এস, ও, এস এই তিনটি বর্ণকে উপস্থাপন করে" " কারণ ...হল একটি কোড চিঠি "এস" উপস্থাপন করে। কোন?
ভিলেক্স-

1
না, কোডটি অগণনীয় বিশেষ্য, এটি জল বা বালির মতো কোনও বহুবচন নয় ..
ইভান

15

যখন আপনি কোনও এমুলেটর বিকাশ করেন আপনি প্রসেসর অ্যাসেমব্লিকে ব্যাখ্যায়িত করছেন যে সিস্টেমটি কাজ করছে (জেড 80, 8080, পিএস সিপিইউ, ইত্যাদি)।

সিস্টেমে থাকা সমস্ত পেরিফেরিয়ালগুলি আপনাকে ভিডিওকরণের (ভিডিও আউটপুট, নিয়ামক) অনুকরণ করতে হবে।

আপনার ভাল পুরানো গেম বয়ের মতো সহজ সিস্টেমের জন্য ইমুলেটরগুলি লেখা শুরু করা উচিত (যে কোনও জেড 80 প্রসেসর ব্যবহার করে, আমি কী ভুল করছি না) অথবা সি 64 এর জন্য।


9
সি 64 একটি "সহজ" সিস্টেম? 6510 তুলনামূলকভাবে সহজ (একবার আপনি তালিকাভুক্ত অপকডগুলি coveredেকে রেখেছেন), সাউন্ড (এসআইডি) এবং ভিডিও (ভিআইসি) চিপগুলি সহজ কিছু নয় । কোনও সামঞ্জস্যের শালীন স্তর অর্জন করার জন্য, আপনাকে সেগুলি - হার্ডওয়্যার বাগ এবং সমস্তগুলি অনুকরণ করতে হবে।
মোবাবা

10

এমুলেটর তৈরি করা খুব শক্ত কারণ আপনার অনেকগুলি হ্যাক (অস্বাভাবিক প্রভাব হিসাবে), সময় সংক্রান্ত সমস্যা ইত্যাদি রয়েছে যা আপনাকে সিমুলেট করার দরকার।

এর উদাহরণের জন্য দেখুন http://queue.acm.org/detail.cfm?id=1755886

এটি আপনাকে দেখায় যে কেন 1MHz একর অনুকরণের জন্য আপনার একটি বহু-গিগাহার্টজ সিপিইউ প্রয়োজন।


9

এছাড়াও Darek Mihocka এর খুঁজে বার করো Emulators.com JITs জন্য নির্দেশ পর্যায়ের অপ্টিমাইজেশান উপর মহান পরামর্শ, এবং দক্ষ emulators নির্মাণের অন্যান্য অনেক গুডিজ জন্য।


7

আমি কোনও গেম কনসোল অনুকরণ করার মতো অভিনব কোনও কাজ কখনও করি নি তবে অ্যাস্রুমেন্টটি অ্যান্ড্রু টেনেনবাউস স্ট্রাকচার্ড কম্পিউটার অর্গানাইজেশনে বর্ণিত মেশিনের জন্য একটি এমুলেটর লেখার জন্য একবার কোর্স করেছিলাম । এটি মজার ছিল একটি আমাকে প্রচুর আহা মুহুর্ত দিয়েছে। আপনি সত্যিকারের এমুলেটর লেখার ক্ষেত্রে ডাইভ করার আগে সেই বইটি তুলতে চাইতে পারেন।


4

একটি বাস্তব সিস্টেম বা আপনার নিজস্ব জিনিস অনুকরণ পরামর্শ? আমি বলতে পারি যে এমুলেটররা সম্পূর্ণ হার্ডওয়্যার অনুকরণ করে কাজ করে। সম্ভবত সার্কিটের নিচে না (যেমন এইচডব্লিউর মতো চারদিকে বিটগুলি চলবে। বাইটটি সরিয়ে নেওয়া শেষ ফলাফল তাই বাইটটি অনুলিপি করা ভাল)। এমুলেটর তৈরি করা খুব শক্ত কারণ আপনার অনেকগুলি হ্যাক (অস্বাভাবিক প্রভাব হিসাবে), সময় সংক্রান্ত সমস্যা ইত্যাদি রয়েছে যা আপনাকে সিমুলেট করার দরকার। যদি একটি (ইনপুট) টুকরোটি ভুল হয় তবে পুরো সিস্টেমটি ডাউন ডাউন করতে পারে বা সর্বোপরি কোনও বাগ / সমস্যা থাকতে পারে।


4

ভাগ উৎস ডিভাইসের এমুলেটর (ভিসুয়াল স্টুডিও, Windows এ রান প্রয়োজন) একটি PocketPC / স্মার্টফোনের এমুলেটর থেকে তৈরি করার যোগ্য সোর্স কোড রয়েছে। আমি বাইনারি রিলিজের ভি 1 এবং ভি 2 তে কাজ করেছি।

এটি অনেকগুলি এমুলেশন সম্পর্কিত সমস্যাগুলি সমাধান করে: - গেস্ট ভার্চুয়াল থেকে ভার্চুয়ালকে হোস্ট ফিজিক্যাল - দক্ষ গেস্ট কোডের জেআইটি সংকলন - হোস্ট কীবোর্ড এবং মাউসের জন্য পেরিফেরাল ডিভাইসগুলির সিমুলেশন - হোস্ট কীবোর্ড এবং মাউসের জন্য ইউআই ইন্টিগ্রেশন - সংরক্ষণ / নিম্ন-পাওয়ার মোড থেকে পুনরায় শুরু করার অনুকরণের জন্য, রাষ্ট্রের পুনঃস্থাপন


1

@ কোডি ব্রোকিয়াস দ্বারা সরবরাহিত উত্তরটি যুক্ত করতে
ভার্চুয়ালাইজেশনের প্রসঙ্গে যেখানে আপনি ভার্চুয়াল মেশিনে একটি নতুন সিস্টেম (সিপিইউ, আই / ও ইত্যাদি) অনুকরণ করছেন আমরা নীচের বিভাগগুলির এমুলেটর দেখতে পাচ্ছি।

ব্যাখ্যা: বোচগুলি দোভাষীর একটি উদাহরণ, এটি একটি x86 পিসি এমুলেটর, এটি গেস্ট সিস্টেম থেকে প্রতিটি নির্দেশ গ্রহণ করে অভিপ্রায়িত প্রভাব তৈরি করতে নির্দেশের অন্য সেট (হোস্ট আইএসএ) এর অনুবাদে এটি অনুবাদ করে Yএহেতু এটি খুব মন্থর, এটি করায় না কোনও কিছুই ক্যাশে দেয় না তাই প্রতিটি নির্দেশ একই চক্রের মধ্য দিয়ে যায়।

গতিশীল ইমেলারেটর: কেমু একটি গতিশীল এমুলেটর। এটি অতিথির নির্দেশের উড়ে অনুবাদেও ফলাফলগুলিকে ক্যাশে করে। সর্বোত্তম অংশটি হ'ল সিস্টেমে সরাসরি যতটা সম্ভব নির্দেশনা কার্যকর করে যাতে এমুলেশন দ্রুত হয়। কোডি যেমন উল্লেখ করেছেন, এটি কোডটিকে ব্লকগুলিতে ভাগ করে দেয় (কার্যকর করার 1 একক প্রবাহ)।

স্ট্যাটিক এমুলেটর: আমি যতদূর জানি যে কোনও স্ট্যাটিক এমুলেটর নেই যা ভার্চুয়ালাইজেশনে সহায়ক হতে পারে।


1

আমি কিভাবে অনুকরণ শুরু করব।

1. নিম্ন স্তরের প্রোগ্রামিংয়ের উপর ভিত্তি করে বইগুলি পান, নিন্টেন্ডো "গেম বয় ..." অপারেটিং সিস্টেমের জন্য আপনার এটির প্রয়োজন হবে

2. বিশেষভাবে অনুকরণের বইগুলি পান এবং সম্ভবত ওএস বিকাশ পান। (আপনি কোনও ওস তৈরি করবেন না, তবে এটির সবচেয়ে নিকটতম।

কিছু ওপেন সোর্স এমুলেটরকে দেখুন, বিশেষত যে সিস্টেমটির জন্য আপনি একটি এমুলেটর তৈরি করতে চান।

আপনার আইডিই / কমপ্লেলারে আরও জটিল কোডের 4 কপির স্নিপেট। এটি আপনাকে দীর্ঘ কোড লেখার পক্ষে সংরক্ষণ করবে। আমি ওএস বিকাশের জন্য এটিই করি, একটি জেলা ব্যবহার করুন লিনাক্স


1

আমি জাভাস্ক্রিপ্টে চিপ -8 সিস্টেম অনুকরণ সম্পর্কে একটি নিবন্ধ লিখেছিলাম ।

সিস্টেমটি খুব জটিল না হওয়ায় এটি শুরু করার এক দুর্দান্ত জায়গা, তবে আপনি এখনও শিখেন কীভাবে অপকডস, স্ট্যাক, নিবন্ধন ইত্যাদি কাজ করে।

আমি শীঘ্রই এনইএস জন্য একটি দীর্ঘ গাইড লিখতে হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.