আপনি সাধারণভাবে এটি করতে পারবেন না, তবে কিছু সংশ্লেষে আপনি খুব বেশি কিছু করতে পারেন, এবং কয়েকটি historicalতিহাসিক ঘটনা ঘটেছে যা আপনার সত্যই ছিল ।
Atari -এ 2600 (অথবা Atari -এ ভিডিও কম্পিউটার সিস্টেম) নিকটতম হোম ভিডিও খেলা সিস্টেম অন্যতম এবং প্রথম যুগের পরে সিস্টেম ভিন্ন 1978 সালে মুক্তি পায় Atari -এ ডিভাইস একটি ফ্রেম বাফার দিতে সামর্থ্য না পারে, যার মানে হল ছিল CPU- র কী উত্পাদিত হবে তা নির্ধারণের জন্য প্রতিটি স্ক্যানলাইনে কোড চালানোর জন্য - এই কোডটি চালাতে 17.08 মাইক্রোসেকেন্ডের (HBlank অন্তর) নিয়ে গেলে স্ক্যানলাইনগুলি অঙ্কন শুরু করার আগে গ্রাফিকগুলি সঠিকভাবে সেট করা যায় না। সবচেয়ে খারাপ বিষয়, যদি প্রোগ্রামার আটারি সাধারণত যা অনুমতি দেয় তার চেয়ে জটিল বিষয়বস্তু আঁকতে চায়, তবে পুরো স্ক্যান লাইনের জন্য 57.29 মাইক্রোসেকেন্ডের স্প্যান সহ, বিমটি আঁকানোর সাথে সাথে নির্দেশাবলীর জন্য তাদের সঠিক সময়গুলি নির্ধারণ করতে হবে এবং গ্রাফিক্স রেজিস্টারগুলি পরিবর্তন করতে হয়েছিল।
যাইহোক, 6502 ভিত্তিক অন্যান্য সিস্টেমের মতো আটারি 2600 এরও খুব গুরুত্বপূর্ণ বৈশিষ্ট্য ছিল যা এই দৃশ্যের জন্য প্রয়োজনীয় সতর্কতার সাথে সময় পরিচালনা করতে সক্ষম করে: সিপিইউ, র্যাম, এবং টিভি সিগন্যাল সমস্ত একই মাস্টারের উপর ভিত্তি করে ঘড়ি বন্ধ করেছিল ran ঘড়ি। টিভি সিগন্যালটি একটি 3.98 মেগাহার্টজ ঘড়ি ছড়িয়েছিল, উপরের সময়গুলিকে টিভি সংকেত পরিচালিত "রঙের ঘড়ি" এর সংখ্যার সাথে ভাগ করে দিয়েছে, এবং সিপিইউ এবং র্যাম ঘড়িগুলির একটি চক্র ছিল ঠিক তিনটি রঙের ঘড়ি, যা সিপিইউটির ঘড়ি হতে দেয় বর্তমান অগ্রগতি টিভি সিগন্যালের সাথে সম্পর্কিত সময়ের সঠিক পরিমাপ। (এটি সম্পর্কে আরও তথ্যের জন্য, স্টেলা আটারি 2600 এমুলেটরের জন্য লেখা স্টেলা প্রোগ্রামার গাইডটি দেখুন )।
এই অপারেটিং পরিবেশটি ছাড়াও, এর অর্থ হ'ল প্রতিটি সিপিইউ নির্দেশনায় প্রতিটি ক্ষেত্রে যে পরিমাণ চক্র গ্রহণ করা হয় তার একটি নির্ধারিত পরিমাণ চক্র ছিল এবং অনেক 6502 বিকাশকারী রেফারেন্স সারণিতে এই তথ্য প্রকাশ করেছিলেন। উদাহরণস্বরূপ, এই টেবিলCMP
থেকে নেওয়া ( প্রবেশকারীর সাথে মেমরি তুলনা করুন) নির্দেশের জন্য এই এন্ট্রিটি বিবেচনা করুন :
CMP Compare Memory with Accumulator
A - M N Z C I D V
+ + + - - -
addressing assembler opc bytes cycles
--------------------------------------------
immediate CMP #oper C9 2 2
zeropage CMP oper C5 2 3
zeropage,X CMP oper,X D5 2 4
absolute CMP oper CD 3 4
absolute,X CMP oper,X DD 3 4*
absolute,Y CMP oper,Y D9 3 4*
(indirect,X) CMP (oper,X) C1 2 6
(indirect),Y CMP (oper),Y D1 2 5*
* add 1 to cycles if page boundary is crossed
এই সমস্ত তথ্য ব্যবহার করে, অ্যাটারি 2600 (এবং অন্যান্য 6502 বিকাশকারী) ঠিক কতক্ষণ তাদের কোডটি কার্যকর করতে লেগেছে তা নির্ধারণ করতে সক্ষম হয়েছিল এবং রুটিনগুলি তৈরি করেছিল যা তাদের প্রয়োজন এবং এখনও আটরীর টিভি সিগন্যাল সময় সংক্রান্ত প্রয়োজনীয়তা মেনে চলেছিল। এবং যেহেতু এই সময়টি সঠিক ছিল (বিশেষত এনওপির মতো সময় নষ্ট করার নির্দেশাবলীর জন্য), তারা অঙ্কিত হওয়ার সাথে সাথে তারা গ্রাফিকগুলিকে সংশোধন করতে এটি ব্যবহার করতে সক্ষম হয়েছিল।
অবশ্যই, আটারির 6502 একটি খুব নির্দিষ্ট কেস এবং এটি সমস্তই কেবল সম্ভব কারণ সিস্টেমটিতে নিম্নলিখিতগুলির সমস্ত ছিল:
- একটি মাস্টার ক্লক যা র্যাম সহ সমস্ত কিছু চালিয়েছিল। আধুনিক সিস্টেমে সিপিইউ এবং র্যামের জন্য স্বতন্ত্র ঘড়ি রয়েছে, র্যাম ঘড়িটি প্রায়শই ধীর হয়ে যায় এবং দুটোই সমগত হয় না।
- কোনও ধরণের কোনও ক্যাচিং নেই - 6502 সর্বদা সরাসরি ডিআরএএম থেকে অ্যাক্সেস করা হয়। আধুনিক সিস্টেমে এসআরএএম ক্যাশ রয়েছে যা রাষ্ট্রের পূর্বাভাস দেওয়া আরও কঠিন করে তোলে - যদিও ক্যাশে সহ কোনও সিস্টেমের আচরণ সম্পর্কে ভবিষ্যদ্বাণী করা এখনও সম্ভব হলেও এটি অবশ্যই আরও কঠিন is
- অন্য কোনও প্রোগ্রাম একযোগে চলমান নয় - কার্ট্রিজে থাকা প্রোগ্রামটির সিস্টেমে সম্পূর্ণ নিয়ন্ত্রণ ছিল। আধুনিক সিস্টেমগুলি নন-ডিস্ট্রিমেন্টিক শিডিয়ুলিং অ্যালগরিদমগুলি ব্যবহার করে একবারে একাধিক প্রোগ্রাম চালায়।
- একটি ঘড়ির গতি যথেষ্ট ধীর যে সংকেতগুলি সময়মতো সিস্টেম জুড়ে ভ্রমণ করতে পারে। ৪ গিগাহার্জ ঘড়ির গতিযুক্ত আধুনিক সিস্টেমে (উদাহরণস্বরূপ), আধ আধ মিটার মাদারবোর্ডের দৈর্ঘ্য ভ্রমণ করতে হালকা light..67 ঘড়ির চক্রের ফোটন লাগে - আপনি কোনও আধুনিক প্রসেসরের বোর্ডে অন্য কোনও কিছুর সাথে ইন্টারেক্ট করার আশা করতে পারেন না could কেবল একটি চক্রের মধ্যে, বোর্ডে সিগন্যালের জন্য এমনকি ডিভাইসে পৌঁছাতে এটি একাধিক চক্র লাগে।
- একটি ভাল সংজ্ঞায়িত ঘড়ির গতি যা খুব কমই পরিবর্তিত হয় (আটারির ক্ষেত্রে 1.19 মেগাহার্টজ) - আধুনিক সিস্টেমগুলির সিপিইউ গতি সর্বদা পরিবর্তিত হয়, যখন কোনও আটারি টিভি সংকেতকে প্রভাবিত না করেও এটি করতে পারে না।
- প্রকাশিত চক্রের সময় - x86 এর কোনও নির্দেশিকা কতটা সময় নেয় তা নির্ধারণ করে না।
এই সমস্ত কিছুই একত্রিত হয়ে এমন একটি সিস্টেম তৈরি করল যেখানে সঠিক সময় গ্রহণের নির্দেশাবলীর সেট তৈরি করা সম্ভব হয়েছিল - এবং এই অ্যাপ্লিকেশনটির জন্য ঠিক এটিই দাবি করা হয়েছিল। বেশিরভাগ সিস্টেমে এই ডিগ্রিটি নির্ভুলতার জন্য কেবল প্রয়োজন হয় না কারণ এটির কোনও প্রয়োজন নেই - হিসাবগুলি হয় তারা যখন হয়ে যায় তখন হয়ে যায়, বা যদি সঠিক সময়ের প্রয়োজন হয় তবে একটি স্বাধীন ঘড়িটি জিজ্ঞাসা করা যেতে পারে। তবে যদি প্রয়োজনটি সঠিক হয় (যেমন কিছু এম্বেড থাকা সিস্টেমে), এটি এখনও উপস্থিত হতে পারে এবং আপনি আপনার কোডটি এই পরিবেশে চালাতে কত সময় নেয় তা সঠিকভাবে নির্ধারণ করতে সক্ষম হবেন।
এবং আমি বড় বৃহদায়তন দাবিত্যাগ যে এই সব শুধুমাত্র এতে প্রয়োগ যোগ করা উচিত নির্মাণের সমাবেশ নির্দেশাবলী সময় একজন সঠিক পরিমাণ গ্রহণ করা হবে একটি সেট। আপনি যা করতে চান তা যদি এই পরিবেশগুলিতেও কিছুটা নির্বিচারে সংগ্রহ করা হয় এবং জিজ্ঞাসা করুন "এটি কার্যকর করতে কতক্ষণ সময় লাগে?", আপনি স্পষ্টতই এটি করতে পারবেন না - এটি হলটিং সমস্যা , যা অগ্রহণযোগ্য প্রমাণিত হয়েছে।
সম্পাদনা 1: এই উত্তরের পূর্ববর্তী সংস্করণে, আমি বলেছিলাম যে টিভি সিগন্যালে প্রসেসরটি কোথায় ছিল সে সম্পর্কে আটারি 2600 এর কোনও উপায় নেই, যা গোড়া থেকেই পুরো প্রোগ্রামটি গণনা এবং সিঙ্ক্রোনাইজ করতে বাধ্য করে। মতামতগুলিতে আমাকে নির্দেশিত হিসাবে, এটি জেডএক্স স্পেকট্রামের মতো কিছু সিস্টেমের ক্ষেত্রেও সত্য, তবে আটারি 2600 এর ক্ষেত্রে এটি সত্য নয়, কারণ এটিতে একটি হার্ডওয়্যার রেজিস্টার রয়েছে যা পরবর্তী অনুভূমিক ফাঁকা ব্যবধান না হওয়া পর্যন্ত সিপিইউ থামিয়ে দেয়, পাশাপাশি ইচ্ছায় উল্লম্ব ব্ল্যাকিং অন্তর শুরু করতে একটি ফাংশন। সুতরাং, গণনা চক্রের সমস্যা প্রতিটি স্ক্যানলাইনের মধ্যে সীমাবদ্ধ এবং স্ক্যানলাইনটি টানা হওয়ায় বিকাশকারী সামগ্রীটি পরিবর্তন করতে চান তবেই ঠিক হয়ে যায়।