সুচিপত্র:
- ধাপ 1: পরিবর্তনের দ্রুত ওভারভিউ + স্কিম্যাটিক্স
- ধাপ 2: CPU, মেমরি এবং মেমরি কন্ট্রোল
- ধাপ 3: সিস্টেম স্থিতি LEDs
- ধাপ 4: ইনপুট এবং আউটপুট
- ধাপ 5: ইনপুট এবং আউটপুট পুনরায় সেট করুন এবং শেষ করুন
- ধাপ 6: প্রোগ্রামিং
ভিডিও: Z80 কম্পিউটার পুনরায় দেখা: 6 ধাপ
2024 লেখক: John Day | [email protected]. সর্বশেষ পরিবর্তিত: 2024-01-30 07:56
অতীতে, আমি কিভাবে একটি Z80- ভিত্তিক কম্পিউটার তৈরি করতে হয় তার জন্য একটি গাইড লিখেছি, এবং আমি সার্কিটটিকে যতটা সম্ভব সরল করার জন্য ডিজাইন করেছি যাতে এটি যতটা সম্ভব সহজেই তৈরি করা যায়। আমি সরলতার একই ধারণা ব্যবহার করে একটি ছোট প্রোগ্রামও লিখেছিলাম। এই নকশাটি বেশ ভালভাবে কাজ করেছে, তবে আমি এতে পুরোপুরি খুশি ছিলাম না। আমি এটির জন্য একটি প্রোগ্রাম পুনর্লিখন দিয়ে শুরু করেছিলাম যা রানটাইমের সময় এটি প্রোগ্রাম করার অনুমতি দেয়। এটি আমাকে EEPROM- এ উৎসর্গ না করে কোডের টুকরোগুলি পরীক্ষা করতে দেয়, যার ফলে আমাকে EEPROM পুনরায় প্রোগ্রাম করতে হবে। এটি আমার কাছে একটি মজার ধারণা বলে মনে হয়নি। তারপর আমি স্মৃতি স্থান সম্পর্কে চিন্তা শুরু। যদি আমি হার্ডওয়্যারের একটি অংশ (IO প্রধানত) ইন্টারফেস করতে চাই, কোডের একটি অংশ সিস্টেমের জন্য উপলব্ধ মেমরি স্পেসের পরিমাণকে অতিক্রম করতে পারে। মনে রাখবেন, নকশাটি শুধুমাত্র ঠিকানা বাসের নিচের বাইট ব্যবহার করেছিল এবং তারপরে উচ্চ বাইটের নিচের অংশটি রম এবং র RAM্যাম স্পেসগুলির মধ্যে নির্বাচন করতে ব্যবহৃত হয়েছিল। এর মানে হল আমার ব্যবহারের জন্য মাত্র 253 বাইট স্পেস ছিল। আপনি হয়তো 256 এর পরিবর্তে 253 কেন জিজ্ঞাসা করছেন। এর কারণ হল যে আমার নতুন কোড একটি লিখিত প্রোগ্রামের শেষে তিনটি বাইট ডেটা ইনজেকশন করে (এটি পরে অন্তর্ভুক্ত করা হবে, যেহেতু আমি নতুন ডিজাইনে কাজ করার জন্য এটি সংশোধন করেছি)।
n
আমি আমার পুরানো স্কিম্যাটিক্সের উপর ফিরে গেলাম দেখতে আর কি হচ্ছে। আমি মেমরি সিলেকশন সার্কিটের সাথে একটি ছোট ত্রুটি খুঁজে পেয়েছি, যা আমি যখন সেখানে পৌঁছাব তখন আমি তা coverেকে দেব। সরলীকৃত সংস্করণ: সমস্ত লেখার অনুরোধগুলি আসলেই চলবে, যদিও এটি সর্বদা র in্যামে থাকে। এটি সম্ভবত চিন্তা করার মতো কিছু ছিল না, তবে আমি এবার এটি সঠিকভাবে করতে চেয়েছিলাম। এবং এর সাথে, আমি একটি নতুন পরিকল্পনা আঁকতে শুরু করেছি। এই পৃষ্ঠায় সংযুক্ত দুটি ছবি আসল সার্কিটের আগে এবং পরে। আমি স্প্যাগেটি তারের অনেকটা পরিষ্কার করেছি, এটি মজার নয়।
n
যদি আপনি আমার আসল দাখিলার সাথে অনুসরণ করেন এবং এটির সাথে অনুসরণ করার পরিকল্পনা করেন তবে আপনি আমাকে ঘৃণা করতে যাচ্ছেন। আপনি যদি নতুন করে শুরু করেন, তাহলে আপনি ভাগ্যবান। কেবল তালিকার অংশগুলি (বা তাদের সমতুল্য) ধরুন এবং পাশাপাশি অনুসরণ করুন।
সরবরাহ:
LM7805 - 5 ভোল্ট রেগুলেটর Z80 - CPU; সিস্টেমের মস্তিষ্ক AT28C64B - EEPROM। কম্পিউটারের ফার্মওয়্যার IDT6116SA - SRAM এর জন্য ব্যবহৃত "স্থায়ী" ডেটা স্টোরেজ; ব্যবহারকারী কোড এবং /অথবা সাধারণ ডেটা স্টোরেজ সংরক্ষণের জন্য ব্যবহৃত ইনপুট চিপ 744S273 হিসাবে ব্যবহৃত - অক্টাল ডি -ল্যাচ /এমআর সহ; আউটপুট চিপ TLC59211 - LED ড্রাইভার চিপ (74LS273 এলইডি চালাতে পারে, কারণ এটি শুধুমাত্র বর্তমান আউটপুটে সক্ষম নয়) MC14572 - এটি একটি "লাইন ড্রাইভার" চিপ, কিন্তু আমি এটি মেমরি কন্ট্রোল লজিকের জন্য নিখুঁত বলে মনে করেছি। এটিতে 4 টি বৈদ্যুতিন সংকেতের মেরু বদল, এবং একটি NAND এবং NOR গেট নির্মিত হয়েছে 74LS32 - Quad OR gate CD4001 - Quad NOR gate CD4040 - 12 Stage Ripple Counter; আঁকা, কিন্তু বাস্তবায়িত হয়নি ঘড়ি বিভাজক (ধীর ঘড়ির গতিতে সিস্টেম চালানোর জন্য) 555 টাইমার সার্কিট, তাই আপনি যা চান তা ব্যবহার করুন। অন্যটি এলইডি চালানোর জন্য ব্যবহার করা হয়, তাই আপনি যদি 8x330 ওহম রেসিস্টার বাস 8x10 কে ওহম রেসিস্টার বাস 11 এলইডি চান তবে এটিও পরিবর্তন করুন - তিনটি সিস্টেম স্ট্যাটাসের জন্য ব্যবহৃত হয় এবং বাকি আটটি আউটপুট। 8 এর জন্য, আমি একটি বার গ্রাফ ডিসপ্লে (HDSP -4836) 4 ক্যাপাসিটার ব্যবহার করেছি - দুটি LM7805 ব্যবহার করা হয়; 0.22uF এবং 0.1uF। একটি 555 টাইমারের জন্য, তাই আপনি যা সঠিক মনে করেন তা ব্যবহার করুন। শেষটি পাওয়ার-অন রিসেটের জন্য; 100uF2 N. O. পুশ বাটন - একটি ইনপুটের জন্য ব্যবহৃত হয়, অন্যটি রিসেট 8 SPST DIP সুইচগুলির জন্য - ডেটা ইনপুট; আমি পিয়ানো কী স্টাইল ওয়্যার ব্যবহার করেছি। প্রচুর এবং প্রচুর তার
n
দ্রষ্টব্য: MC14572 গর্ত সংস্করণের মাধ্যমে অপ্রচলিত, কিন্তু SMD সংস্করণ এখনও সক্রিয় (এমনকি "নতুন ডিজাইনের জন্য নয়" অবস্থা), তাই আপনাকে এটি ব্যবহার করার অনুমতি দেওয়ার জন্য একটি সার্কিট বোর্ড ক্রয় করতে হতে পারে। MC14572 এর জায়গায় একটি দ্বিতীয় 74LS32 ব্যবহার করা যেতে পারে (পূর্ববর্তী ible এর "মেমরি সিলেকশন সার্কিট" স্কিম্যাটিক দেখুন)
ধাপ 1: পরিবর্তনের দ্রুত ওভারভিউ + স্কিম্যাটিক্স
কিভাবে স্কিম্যাটিক্স পড়তে হয়: একটি চিপের দিকে নির্দেশ করা একটি তীর হল একটি ইনপুট: ইনপুট> -চিপ থেকে দূরে নির্দেশিত একটি তীর একটি আউটপুট: আউটপুট <-বাস তীরের পরিবর্তে একটি লাইন ব্যবহার করে: বাস |-
n
বেশিরভাগ চিপগুলি তাদের সঠিক পিনআউট দিয়ে আঁকা হয়েছে। এই চিপসের উপর সামান্য ডুব আঁকা হয়েছে। বেশিরভাগ চিপে পিন নম্বর এবং লেবেল থাকে। এগুলি পড়তে কিছুটা কঠিন হতে পারে। আমার পেন্সিল নিস্তেজ হয়ে যাচ্ছিল।
n
সার্কিট্রি সংযোগের ক্ষেত্রে, নতুন নকশার বিন্যাস মূল থেকে বেশিরভাগই অপরিবর্তিত। আমি অ্যাড্রেস হাই বাইটের নিচের নিবলকে স্মৃতির সাথে সংযুক্ত করেছিলাম এবং তারপর RAM/ROM সিলেকশনের জন্য উপরের nibble (A12) এর লো বিট ব্যবহার করেছি। এর মানে হল যে রম স্পেস 0000-00FF থেকে 0000-0FFF পর্যন্ত চলে গেল। রাম স্পেস 0100-01FF থেকে 1000-1FFF এ গিয়েছিল। আমি আরও ভাল ডিজাইনের জন্য মেমরি কন্ট্রোল লজিককে বদল করেছি এবং দুটি নতুন স্ট্যাটাস এলইডি (এবং কিছু আঠালো যুক্তি) যুক্ত করেছি। আমি একটি ঘড়ি বিভাজক সার্কিটও (কিন্তু তারে লাগাইনি) আঁকছি। এটি ছিল দুটি ফাংশন সম্পাদন করা। সুস্পষ্ট কাজ হল ঘড়ির ফ্রিকোয়েন্সি নিচে ভাগ করা। অন্য ফাংশন PWM (পালস প্রস্থ মডুলেশন) উদ্দেশ্যে, কারণ 555 50% শুল্ক চক্রের সাথে তরঙ্গ উৎপন্ন করে না। এই সার্কিটে এটি আসলেই গুরুত্বপূর্ণ নয়, তবে আপনি যদি কিছু এলইডি চালানোর জন্য ঘড়িটি ব্যবহার করতে চান তবে আপনি অবশ্যই প্রভাবগুলি লক্ষ্য করবেন (একটি (সেট) LED (গুলি) অন্যটির চেয়ে ম্লান হবে)। সার্কিটের পুরো বাকিটা অপরিবর্তিত।
ধাপ 2: CPU, মেমরি এবং মেমরি কন্ট্রোল
এই সেই অংশ যেখানে আমার আগের সংস্করণের পাঠকরা আমাকে ঘৃণা করে। মূল নির্মাণে, আমি বোর্ডে এমন কিছু অংশ ফেলে দিয়েছি যেখানে তারা দেখেছিল যে তারা তারযুক্ত হওয়ার সাথে সামান্য সমস্যা চাপিয়ে দেবে। ফলাফলটি দেখে মনে হয়েছিল যে কেউ তার উপর স্প্যাগেটির একটি প্লেট ফেলে দিয়েছে এবং এটি "তারের!" আমি এটিকে একটু পরিষ্কার করতে চেয়েছিলাম, তাই আমি সিপিইউ, র RAM্যাম এবং রম ব্যতীত সবকিছু ছিঁড়ে ফেলে শুরু করেছি। আমি প্রায় পুরো ইনপুট সার্কিট, আউটপুট সার্কিট, এবং আঠালো যুক্তি টেনে এনেছি। এটা করতে প্রায় আমাকে আঘাত করেছে, কিন্তু এটি প্রয়োজনীয় ছিল। আমি সমস্ত ডাটা সংযোগ অক্ষত রেখেছি এবং ঠিকানা বাসের নিচের বাইট। আমি তারপর ঠিকানা বাসের পরবর্তী চারটি বিট (A8-A11) ROM চিপের সাথে সংযুক্ত করেছি। রিপ্রোগ্রামিংয়ের জন্য সহজে টানতে আমি চিপের চারপাশে যাওয়ার যত্ন নিয়েছি। আমি র connections্যাম চিপে ঠিকানা সংযোগগুলি লাফিয়েছি।
n
সেই পথের বাইরে, আমাকে এখন মেমরি কন্ট্রোল যুক্তি যুক্ত করতে হয়েছিল। মূল পরিকল্পনায়, আমি প্রসেসরের /MREQ লাইনকে সরাসরি /CE উভয় মেমরি চিপের সাথে সংযুক্ত করেছিলাম, তারপর আমি RAM /WE এর সাথে তার /WR সংযুক্ত করেছি। তারপরে আমি CPU এর /RD এবং /MREQ যৌক্তিকভাবে OR'd পাশাপাশি A9 ছিল। মূলত, এটি সেট আপ করা হয়েছিল যাতে সমস্ত মেমরি অনুরোধ র RAM্যাম এবং রম উভয়কেই সক্রিয় করে, কিন্তু A9 ব্যবহার করা হয়েছিল কোন চিপস /OE নির্বাচন করার জন্য। এটি ঠিক ছিল এবং সব কারণ চিপগুলি মেমরি অনুরোধ না করা পর্যন্ত নিষ্ক্রিয় থাকবে এবং তারপর একটি অনুরোধের সময় শুধুমাত্র একটি /OE সক্রিয় থাকবে। এটি ক্রসস্টলকে প্রতিরোধ করেছিল, কিন্তু একটি বিশ্রী সূক্ষ্মতা চালু করেছিল। কারণ কোন চিপটি ডেটা আউটপুট করছে তা নির্ধারণ করতে A9 ব্যবহার করা হয়েছিল এবং যেহেতু CPU- এর RAM /WE পিনে সরাসরি প্রবেশাধিকার ছিল, তাই যেকোনো এবং সমস্ত লেখার অনুরোধের মধ্য দিয়ে যাবে। রমের জন্য এটি ঠিক ছিল কারণ এর লেখার মোডটি সরাসরি 5V সরবরাহের সাথে /WE দ্বারা বাঁধা হয়। RAM, যাইহোক, A9 নির্বিশেষে লেখা হবে। এর মানে হল যে একটি রম স্পেস লোকেশনে লেখার প্রচেষ্টা র RAM্যাম স্পেসে একই স্থানে লেখা হবে।
n
এর একটি সমাধান হবে কন্ট্রোল লজিককে নতুন করে সাজানো যাতে সিপিইউ চিপস /OE এবং /WE পিনগুলিতে সরাসরি প্রবেশ করতে পারে এবং তারপর MREQ এবং A12 ব্যবহার করে কোন চিপস /সিই চালিত হয় তা নির্বাচন করতে। আমি এই ধারণা নিয়ে গিয়েছিলাম, কিন্তু মূল নকশার মতো চারটি এনওআর গেট এবং একটি বৈদ্যুতিন সংকেতের মেরু বদল ব্যবহার করার পরিবর্তে, আমি একটি বিশ্রী ছোট চিপ খুঁজে পেয়েছি যা এই কাজের জন্য উপযুক্ত। আমাকে একটি সার্কিট তৈরি করতে হয়েছিল যা কেবল চিপে উপলব্ধ লজিক গেট ব্যবহার করেছিল, তবে এটি যথেষ্ট সহজ ছিল। A12 সরাসরি একটি NAND গেট এবং একটি NOR গেটে ফিড করে। /MREQ NOR গেটে খাওয়ানো হয় এবং তার প্রশংসা NAND গেটে খাওয়ানো হয়। NAND গেটটি RAM এর জন্য ড্রাইভ /CE করার জন্য ব্যবহৃত হয় এবং NOR আউটপুট উল্টে যায় এবং ROM /CE চালাতে ব্যবহৃত হয়। এটি এমন করে তোলে যে চিপ নির্বাচন করার আগে /MREQ কম হতে হবে এবং তারপর A12 বেছে নেয় কোনটি নির্বাচিত হয়। এই সেটআপের সাথে, এখন ROM- এ যে কোন রাইট রিকোয়েস্ট কিছুই করবে না। এটি শক্তি সঞ্চয় করে কারণ উভয়টির পরিবর্তে শুধুমাত্র একটি চিপ সক্রিয়। লজিক চিপের জন্য, আমাদের এখনও দুটি অব্যবহৃত ইনভার্টার রয়েছে। একটি পরে ব্যবহার করা হবে, কিন্তু আমরা সেখানে যখন আমরা সেখানে পেতে হবে।
ধাপ 3: সিস্টেম স্থিতি LEDs
আমি এই প্রকল্পটি শুরু করার আগে, আমি একটি নির্দিষ্ট আইসি এর সাথে ইন্টারফেস করার চেষ্টা করছিলাম, কিন্তু আমার এটি নিয়ে সমস্যা হচ্ছিল। কি ঘটছে তা সম্পর্কে অনিশ্চিত, আমি চারপাশে অনুসন্ধানের জন্য একটি প্যানেল মাউন্ট LED ব্যবহার করেছি (সেই সমাবেশগুলির মধ্যে একটি যার মধ্যে একটি প্রতিরোধক রয়েছে)। এটি করা আমাকে একটি নস্টালজিয়া ধারণা দিয়েছে যা আজও ব্যবহৃত হয়: স্ট্যাটাস এলইডি ব্যবহার করে বোঝায় যে মেমরি থেকে পড়া হচ্ছে বা লেখা হচ্ছে কিনা। এটি আমার ইতিমধ্যেই থাকা ইনপুট এলইডি -র সাথে ব্যবহার করার কথা ছিল। ইনপুট LED /WAIT সিগন্যাল জেনারেটরের সাথে সংযুক্ত ছিল যাতে আমাদের বোঝাতে পারে যে সিস্টেমটি ভাল, ইনপুটের জন্য অপেক্ষা করছে (আমি সেখানে যাব, চিন্তা করবেন না)। আমি একটি IO লেখা নির্দেশ করার জন্য একটি LED যোগ করার কথা বিবেচনা করেছি, কিন্তু আমি ভেবেছিলাম যে আউটপুট LEDs পরিবর্তিত হচ্ছে ইতিমধ্যেই এটির একটি মহান সূচক হবে। এটি নিয়ে ভাবছি, আমি এখনও এটি যোগ করতে পারি। যাইহোক, মেমরি পড়া বা লেখা হচ্ছে কিনা তা জানা আমার কাছে দরকারী বলে মনে হয়। আচ্ছা, এটি প্রোগ্রাম ডিবাগিংয়ের জন্য দরকারী, যাই হোক না কেন। আমার প্রোগ্রামটি কাজ করার চেষ্টা করার সময় আমি আসলে এটির ভারী ব্যবহার করেছি: "কেন এটি স্মৃতিতে লেখা হচ্ছে? এটা এখনও করার কথা নয়!"
n
এই এলইডিগুলি নিয়ন্ত্রণ করতে, আমি চতুর্ভুজ নর গেট ব্যবহার করেছি। আমি সব গেট ব্যবহার করেছি। স্থিতি সংকেত উৎপন্ন করার জন্য মাত্র দুটি ব্যবহার করা হয়েছিল, কিন্তু চিপের প্রকৃতপক্ষে এলইডি চালানোর ক্ষমতা ক্ষমতা নেই। তারা এত শক্তি ডুবে যেতে সক্ষম, তাই আমি অন্য দুটি NOR গেটকে বৈদ্যুতিন সংকেতের মেরু বদল হিসাবে ব্যবহার করেছি এবং LEDs এর সাথে সংযুক্ত করেছি। যেহেতু একটি LED পঠন এবং অন্যটি লেখার জন্য নির্দেশিত হয়, এবং একটি পড়ার এবং লেখার অনুরোধ একই সময়ে ঘটবে না, তাই আমি উভয় LED এর জন্য শুধুমাত্র একটি প্রতিরোধক ব্যবহার করে পালাতে সক্ষম হয়েছি। ডিকোড করার জন্য যে সিগন্যালগুলির প্রয়োজন ছিল, সেটাও যথেষ্ট সহজ ছিল। আমি সব মেমরি পড়ার অনুরোধগুলি নির্দেশিত করতে চেয়েছিলাম, তাই প্রথম NOR গেটে /MREQ এবং /RD এর ইনপুট ছিল। লেখার স্ট্যাটাস একটু জটিল ছিল, কিন্তু ঠিক ততটাই সহজ। আমি এখনও একটি ইনপুট হিসাবে /MREQ ব্যবহার করেছি, কিন্তু অন্যটি /WR ব্যবহার করে একটি ছোটখাট সূক্ষ্মতা সৃষ্টি করবে যা আমি এড়াতে চেয়েছিলাম। এটি সমস্ত লেখার অনুরোধ নির্দেশ করবে। আমি কেবল সেইগুলিকেই চেয়েছিলাম যা আসলে দিয়ে গেছে। তাহলে আমি এটা কিভাবে করব? আচ্ছা, মনে রাখবেন কিভাবে আমি সিস্টেম সেট আপ করেছি তাই শুধুমাত্র RAM লেখা যাবে? আমি NOR গেটের অন্যান্য ইনপুট হিসাবে RAM /CE ব্যবহার করেছি। এর মানে হল যে LED কেবল তখনই জ্বলে উঠবে যখন RAM নির্বাচিত হবে এবং একটি লেখার অনুরোধ করা হচ্ছে। এলইডি রঙের ক্ষেত্রে, আমি পড়ার সূচক হিসাবে কমলাকে বেছে নিয়েছি (কিন্তু আমি কেবল হলুদ রঙের পেয়েছি) এবং লেখার সূচক হিসাবে লাল।
ধাপ 4: ইনপুট এবং আউটপুট
আগের ধাপে, আপনি হয়তো লক্ষ্য করেছেন আমি বাকি কিছু উপাদান ইতিমধ্যেই বোর্ডে যোগ করেছি। আমি জায়গাটি সংরক্ষণ করছিলাম তাই আমি দুর্ঘটনাক্রমে তারগুলি রাখব না যেখানে আমি একটি উপাদান চাই (এইভাবে আমাকে সেই উপাদানটির জন্য একটি নতুন অবস্থান খুঁজে পেতে হবে)। আপনি হয়তো লক্ষ্য করেছেন যে আমি ইনপুট সুইচগুলি রেখেছি এবং পাওয়ার রেল পর্যন্ত তারযুক্ত করেছি। আমি সিদ্ধান্ত নিয়েছি যে আসল অবস্থানটি নিখুঁত জায়গা এবং কাছাকাছি (উপরে) আউটপুট এলইডি রাখার সিদ্ধান্ত নিয়েছি। বার ডিসপ্লের ডানদিকে ইনপুট ল্যাচ। এর উপরে আউটপুট ল্যাচ, এবং এর বাম দিকে এলইডি ড্রাইভার। আমি ডিসপ্লেটিকে ড্রাইভারের সাথে সংযুক্ত করে শুরু করেছি যেহেতু এটি করা সবচেয়ে সহজ ছিল। তারপরে আমি সুইচগুলিকে ইনপুট ল্যাচের ইনপুট দিকে সংযুক্ত করেছি। পরবর্তী আমি আউটপুট ল্যাচের আউটপুট দিকটি LED ড্রাইভারের সাথে সংযুক্ত করেছি। এই ওয়্যার্ড পেতে এটি একটি বিশ্রী আদেশ বলে মনে হতে পারে, কিন্তু এটি একটি কারণের জন্য ছিল। আউটপুট ল্যাচের ইনপুট ডাটা বাসের সাথে সাথে ইনপুট ল্যাচের আউটপুটকে সংযুক্ত করতে হবে। ধারণা ছিল ইনপুট ল্যাচের আউটপুটগুলিকে আউটপুট ল্যাচের ইনপুটগুলির সাথে সংযুক্ত করা, যা আমি করেছি। তারপরে আমাকে যা করতে হয়েছিল তা হ'ল সেই মেসটি ডাটা বাসের সাথে সংযুক্ত। এই সংযোগগুলি শারীরিকভাবে কোথায় গিয়েছিল তা গুরুত্বপূর্ণ নয় কারণ এগুলি সবই বৈদ্যুতিকভাবে সংযুক্ত থাকবে। কম্পিউটার এখন প্রায় শেষ।
ধাপ 5: ইনপুট এবং আউটপুট পুনরায় সেট করুন এবং শেষ করুন
দু Sorryখিত, এই পদক্ষেপের জন্য কোন ছবি নেই ছবির জন্য আগের ধাপ দেখুন।
n
আপনি পূর্ববর্তী ধাপের শেষ ছবিতে লক্ষ্য করতে পারেন, আমার একটি সবুজ বোতাম এবং অন্য একটি লজিক চিপ ইনস্টল ছিল। চিপ হল OR গেট। WAIT সিগন্যাল তৈরি করতে দুটি গেট ব্যবহার করা হয়। ঠিক আছে, কেউ প্রসেসর থেকে OR-ing /IORQ এবং /RD দ্বারা সংকেত তৈরি করে। আউটপুটটি দ্বিতীয় গেটে খাওয়ানো হয়, যেখানে এটি আবার একটি পুশ বোতামে আসে। বোতামটি গেটের ইনপুটকে উচ্চতর করে, এইভাবে আউটপুটটিকে উচ্চতর করে। এই আউটপুট প্রসেসর /WAIT পিন খাওয়ানো হয়। চাপা না থাকাকালীন, একটি প্রতিরোধক ইনপুট কম রাখে। আমি প্রাথমিকভাবে একটি 10K প্রতিরোধক ব্যবহার করেছি, কিন্তু LS32 আসলে ইনপুটে ভোল্টেজ বের করে দিচ্ছিল। প্রতিরোধক এটিকে যথেষ্ট কম করেনি এবং আমাকে এটিকে 1K দিয়ে প্রতিস্থাপন করতে হয়েছিল। যাইহোক, ধারণা হল যে যখন একটি IO পড়ার অনুরোধ করা হয়, প্রথম এবং দ্বিতীয় বা গেট প্রসেসরকে অপেক্ষা করতে বলে। একবার আপনি যা খুশি ইনপুট সুইচ সেট করলে, আপনি বোতাম টিপুন এবং এটি CPU কে অপেক্ষা অবস্থা থেকে বের করে আনে। সবুজ "ইনপুট" এলইডি, যাকে আমি আগের ধাপে বলেছিলাম, তারযুক্ত করা হয় যাতে যখন /অপেক্ষা পিন কম যায়, তখন এটি জ্বলে ওঠে।
n
কিন্তু আমরা এখনো শেষ করিনি। ইনপুট ফ্লিপ ফ্লপের একটি সংকেত প্রয়োজন যখন এটি ডেটা ইনপুট বৈধ এবং CPU- এর কাছে রাখা উচিত। এই ঘড়ি পিন সক্রিয় উচ্চ। আগে, আমরা শুধু বোতামে এটি সংযুক্ত করেছি। এটি এখনও একটি বৈধ বিকল্প, কিন্তু এবার আমি এটিকে দ্বিতীয় OR গেটের মতো একই আউটপুটে রাখা বেছে নিলাম। এই আইসিতে একটি /OE পিনও আছে যা চালিত হওয়া প্রয়োজন। যদি এটিকে উঁচুতে ধরে রাখা হত, তবে এটি কখনই বাসে ডেটা ertোকাবে না। যদি কম রাখা হয়, এটি সর্বদা বাস চালাবে। এটি ঠিক করার জন্য, আমি কেবল একটি তৃতীয় বা গেট ব্যবহার করেছি। ইনপুটগুলি হল /IORQ এবং /RD এবং আউটপুট সরাসরি ল্যাচের /OE তে যায়
n
আউটপুট ল্যাচ চালানোর জন্য ঘড়ির পিনও প্রয়োজন। আবার, এটি সক্রিয় উচ্চ। আমার পরিকল্পিতভাবে, আমি /IORQ এবং /WR ব্যবহার করে সরাসরি পিন চালানোর চতুর্থ বা গেটটি আঁকলাম। এর মানে হল যে লেখার অনুরোধ না করা পর্যন্ত ঘড়ির পিনটি উঁচু করে রাখা হবে, তারপর এটি আবার নীচের দিকে যাবে। এটি সম্ভবত ভাল হত কারণ ডেটা বাসে লেখার প্রচেষ্টার পর অবিলম্বে এটির বৈধ তথ্য থাকত, কিন্তু প্রকৌশল দৃষ্টিকোণ থেকে, এটি একটি আবর্জনা নকশা ছিল। আমি চূড়ান্ত ছবি তোলা পর্যন্ত এই ত্রুটিটি লক্ষ্য করিনি, কিন্তু আমি সেই সংযোগটি ছিঁড়ে ফেলেছিলাম এবং তারপর মেমরি কন্ট্রোল লজিক থেকে অব্যবহৃত ইনভার্টারগুলির মধ্যে একটিতে OR গেট আউটপুট খাওয়ালাম, তারপর তার আউটপুটটি ঘড়ির পিনে সংযুক্ত করলাম । আমি পরিকল্পিতও ঠিক করেছি এবং আমার করা আরেকটি ত্রুটি খুঁজে পেয়েছি। আমি এটাও সংশোধন করেছি।
n
অবশেষে যে সব শেষ হয়ে গেছে, আমার খুব অল্প পরিমাণে কাজ ছিল: রিসেট সার্কিট। আমি বোর্ডে একটি বোতাম যুক্ত করেছি এবং একপাশে উঁচু রাখার জন্য 10K রোধক ব্যবহার করেছি। অন্য দিক সরাসরি মাটিতে যায়। পাশের উচ্চটি হল /RESET আউটপুট, যা প্রতিটি চিপে একটি /RESET পিন (CPU এবং আউটপুট ল্যাচ) দিয়ে যায়। পাওয়ার-অন রিসেট সম্পন্ন করার জন্য, আমি /RESET আউটপুটে একটি ক্যাপাসিটর যুক্ত করেছি। ধারণা হল যে বড় মান প্রতিরোধক অপেক্ষাকৃত বড় ক্যাপাসিটরকে ধীরে ধীরে চার্জ করে এবং কিছু পরিমাণ ঘড়ির চক্রের জন্য /RESET পিন কম রাখে (CPU- র চারটি ঘড়ির চক্র প্রয়োজন)। আপনি সম্ভবত ইতিমধ্যেই অনুমান করতে পারেন যে এই সার্কিটের নেতিবাচক দিকটি কী। এটি আগের সংস্করণের মতো একই নেতিবাচক কারণ এটি একই সার্কিট। যখন বোতামটি চাপানো হয়, ক্যাপাসিটরটি মূলত বোতামের মাধ্যমে সংক্ষিপ্ত হয়। এটি ক্যাপ এবং বোতাম উভয়ের জন্যই খারাপ, তাই আপনি যদি আপনার বিল্ডকে আরও স্থায়ী করতে চান, তাহলে আপনি এটিকে নতুন করে ডিজাইন করতে পারেন। আমি মনস্টেবল মোডে সেট করা আরেকটি 555 টাইমারের কথা ভাবছিলাম। কিন্তু সেই সঙ্গে, কম্পিউটার সার্কিট এখন শেষ। হ্যাঁ. এখন এটি প্রোগ্রাম করা প্রয়োজন।
ধাপ 6: প্রোগ্রামিং
এই জিনিসটি প্রোগ্রাম করা ছিল দু aস্বপ্ন। আমি একটি Arduino EEPROM প্রোগ্রামার তৈরি করেছি। এটা কাজ করেনি। আমি অন্য কারও নকশা এবং কোডিংয়ের উপর ভিত্তি করে আরেকটি তৈরি করেছি। এখনও কাজ করেনি। আমি হাত দিয়ে ঠিকানা এবং ডেটা বাইটগুলি ম্যানুয়ালি সেট করার চেষ্টা-ও-সত্য পদ্ধতিতে ফিরে গেলাম। একরকম, আমি এটা গোলমাল। আমি আবার চেষ্টা করেছি এবং এখনও ভুল করেছি। আমি আবার ফিরে গেলাম এবং আবিষ্কার করলাম যে এটি একটি বাইট দ্বারা বন্ধ ছিল, তাই আমি এটি সংশোধন করেছি এবং এটি অবশেষে কাজ করেছে, thankশ্বরকে ধন্যবাদ।
n
আসল প্রোগ্রামের জন্য, দেখে মনে হচ্ছে এটি অত্যন্ত জটিল এবং অনুসরণ করা কঠিন, তবে এটি নয়। এটা বেশ সহজ, আসলে। এর অর্ধেক হল চারপাশে সংখ্যা কপি করা। অন্য অর্ধেকটি 16-বিট গণিত, শর্তাধীন জাম্প এবং আরও অনেকগুলি অনুলিপি সংখ্যার মধ্যে ভাগ করা হয়। সুতরাং আমাকে এটি দিয়ে যেতে দিন এবং আপনাকে এটি কীভাবে কাজ করে তা বলুন।
n
প্রারম্ভিকতা প্রোগ্রাম দ্বারা ব্যবহারের জন্য কিছু রেজিস্টার মান নির্ধারণ করে। প্রোগ্রাম লুপটি একটু বেশি জটিল, তবে পুরোপুরি নয়। প্রথমে, এটি পোর্ট 00 এ A রেজিস্টারে ইনপুট গ্রহণ করে। তারপর E রেজিস্টার মেমরিতে লেখা হয়। প্রথম দুটি লুপে, ই রেজিস্টারে জাঙ্ক ডেটা থাকে, তাই আমরা এটি রোম স্পেসের শেষ দুই বাইটে লেখার চেষ্টা করি কারণ এটি আসলে লেখা হবে না; ঠিকানা নির্দেশক (IY) তারপর বৃদ্ধি করা হয়। D- তে সংরক্ষিত মানটি পরবর্তীতে E- এ স্থানান্তরিত হয়। A তারপর D এবং L তে লোড করা হয় এবং E কে H- তে অনুলিপি করা হয়। এর তুলনায় প্রথম মান B এবং C. রেজিস্টারে সংরক্ষণ করা হয়। যদি মানগুলি একই হয়, তাহলে প্রোগ্রামটি সরাসরি RAM স্পেসে ঝাঁপ দেয়, যেখানে ব্যবহারকারীর কোডটি ধরে নেওয়া হয়। যদি বিসি -তে কোডটি মিল না হয়, তাহলে এইচএলকে ডি এবং ই -এর প্রাথমিক মানগুলির সাথে পুনরায় লোড করা হয় এবং এসপি -তে ভ্যালুর সাথে আবার একইভাবে বিসি -র সাথে তুলনা করা হয়। যদি এটি একটি ম্যাচ হয়, এটি একই ফলাফল, কিন্তু তিনটি অতিরিক্ত বাইট স্মৃতিতে লেখা হয়। বাইট হল একটি কোড যার কারণে CPU তার প্রোগ্রামের একেবারে শুরুতে ফিরে যায় (একটি সফটওয়্যার রিসেট)। যদি দ্বিতীয় তুলনাটি একটি মিল না হয়, তবে, প্রোগ্রামটি ব্যবহারকারীর কাছ থেকে একটি মান গ্রহণ করে।
n
এলডি এসপি, ইডিবিএফএইচ; exe কোড (লাফ যোগ করে)
n
LD IY, FFEH; কোড স্টোরেজের জন্য প্রাথমিক মেমরি পয়েন্টার
n
LD BC, EDC3H; exe কোড (কোন লুপ নেই)
n
লুপ; অ্যাসেম্বলার নির্দেশিকা তাই আমাদের জানতে হবে না এই অংশটি মেমরিতে কোথায় থাকে
n
ইন এ, (00 এইচ); প্রোগ্রাম ডেটা পান
n
এলডি (IY+00H), ই; E সংরক্ষণের জন্য কোড রয়েছে
n
INC IY; পরবর্তী স্মৃতি অবস্থানে যান
n
এলডি ই, ডি; এলডি ডি থেকে ই
n
এলডি ডি, এ; ld A তে D
n
এলডি এইচ, ই; এলডি ই থেকে এইচ
n
এলডি এল, ডি; ld মধ্যে L
n
অথবা A; বহন পতাকা পুনরায় সেট করুন
n
এসবিসি এইচএল, বিসি; exe কোড 2 প্রবেশ করালে 0 রিটার্ন করে
n
জেপি জেড, 1000 এইচ; যদি তাই হয়, ঝাঁপ দাও এবং প্রোগ্রাম চালানো
n
এলডি এইচ, ই; অন্যথায়, এইগুলিকে সঠিক মানগুলিতে রিফ্রেশ করুন
n
এলডি এল, ডি
n
অথবা A; প্রথম বিয়োগ সেট বহন পতাকা থাকতে পারে। সাফ করে দাও
n
এসবিসি এইচএল, এসপি; exe কোড 1 প্রবেশ করালে 0 ফেরত দেয়
n
জেপি এনজেড, লুপ; যদি না হয়, প্রক্রিয়াটি পুনরাবৃত্তি করুন (একটি মান পাওয়ার সাথে শুরু)
n
LD (IY+00H), C3H; অন্যথায়, ব্যবহারকারী প্রোগ্রামের শেষে একটি জাম্প কোড ইনজেক্ট করুন
n
এলডি (IY+01H), 00H; জাম্প মূলত সফটওয়্যার রিসেট হিসেবে কাজ করে
n
এলডি (IY+02H), 00H; রেজিস্টার পরিবর্তন করা হলে এটি একটি সম্পূর্ণ রিসেট
n
জেপি 1000 এইচ; ঝাঁপ দাও এবং ব্যবহারকারী প্রোগ্রাম চালানো
প্রস্তাবিত:
Z80 MBC2 - QP/M বায়োস এবং লোডার পুনরায় কম্পাইল করুন: 6 টি ধাপ
Z80 MBC2 - QP/M Bios এবং Loader পুনরায় কম্পাইল করুন: যদি, আমার মত, আপনি নিজেকে এমন একটি অবস্থানে খুঁজে পান যেখানে আপনার MBC2 এর জন্য QP/M বায়োস পুনরায় কম্পাইল করার প্রয়োজন হয় - তাহলে এইভাবে আপনি এটি করবেন। প্রক্রিয়া, কিভাবে বিদ্যমান সংস্করণ পুনরায় কম্পাইল করতে হয়। প্রকৃত বায়োসে পরিবর্তন করা আপনার উপর নির্ভর করে
একটি কম্পিউটার হিটসিংক পুনরায় ব্যবহার করে একটি ট্রানজিস্টর হিটসিংক তৈরি করুন: 7 টি ধাপ
একটি ট্রানজিস্টার হিটসিংক তৈরির জন্য একটি কম্পিউটার হিটসিংকের পুনusingব্যবহার: কিছুক্ষণ আগে আমি কিছু রাস্পবেরি পাই s গুলি কিনে নিয়েছিলাম। যেহেতু তারা কোন হিটসিংক নিয়ে আসে আমি কিছু লোকের জন্য বাজারে ছিলাম। আমি একটি দ্রুত গুগল অনুসন্ধান করেছি এবং এই নির্দেশযোগ্য (রাস্পবেরি পাই হিট সিঙ্ক) জুড়ে এসেছি - এটি ধারণাটি প্রত্যাখ্যান করার পরে ছিল
একটি কম্পিউটার নিয়ন্ত্রণ করতে একটি পুরানো ল্যাপটপের টাচপ্যাড পুনরায় ব্যবহার করুন !: 11 টি ধাপ (ছবি সহ)
একটি কম্পিউটার নিয়ন্ত্রণ করতে একটি পুরানো ল্যাপটপের টাচপ্যাড পুনরায় ব্যবহার করুন!: PS/2 ল্যাপটপ টাচপ্যাডগুলি একটি মাইক্রোকন্ট্রোলারের সাথে ব্যবহার করার জন্য শীতল ইউজার ইন্টারফেস ডিভাইসগুলির মধ্যে একটি। স্লাইডিং এবং ট্যাপিং আঙ্গুলের অঙ্গভঙ্গিগুলি বেশ সহজ এবং মজাদার উপায়ে নিয়ন্ত্রণকারী জিনিস তৈরি করতে পারে। এই নির্দেশনায়, এর সাথে একত্রিত করা যাক
ESP8266 ডিভাইসের সাথে দূর থেকে শাটডাউন বা কম্পিউটার পুনরায় চালু করুন: 10 টি ধাপ (ছবি সহ)
ESP8266 ডিভাইসের সাহায্যে রিমোটলি শাটডাউন বা একটি কম্পিউটার পুনরায় চালু করুন: এখানে স্পষ্ট করার জন্য, আমরা আপনার কম্পিউটার বন্ধ করছি, অন্য কারো কম্পিউটার নয়। গল্পটি এইরকম: ফেসবুকে আমার এক বন্ধু আমাকে মেসেজ করেছে এবং বলেছে তার এক ডজন কম্পিউটার চলছে গণিতের গুচ্ছ, কিন্তু প্রতিদিন ভোর at টায় তারা তালা ঝুলিয়ে দেয়। এস
একটি মাইক্রোফোনে পুরাতন কম্পিউটার হেডফোন পুনরায় তৈরি করা: 4 টি ধাপ
একটি মাইক্রোফোনে পুরানো কম্পিউটার হেডফোনটি পুনরায় সাজানো: শুভ দিন। আমি এটি পরীক্ষা করেছি এবং মাইক্রোফোন এখনও ঠিক আছে যখন হেডফোনটি ছিল না। আমার কাছে ইতিমধ্যে একটি নতুন জোড়া হেডফোন আছে এবং আমি এটি ফেলে দিতে চাই না। এবং তারপরে আমি একটি ধারণা নিয়ে এসেছি