সুচিপত্র:

6502 মিনিমাল কম্পিউটার (আরডুইনো মেগা সহ) পার্ট 3: 7 ধাপ
6502 মিনিমাল কম্পিউটার (আরডুইনো মেগা সহ) পার্ট 3: 7 ধাপ

ভিডিও: 6502 মিনিমাল কম্পিউটার (আরডুইনো মেগা সহ) পার্ট 3: 7 ধাপ

ভিডিও: 6502 মিনিমাল কম্পিউটার (আরডুইনো মেগা সহ) পার্ট 3: 7 ধাপ
ভিডিও: История CPU: MOS 6502 2024, জুলাই
Anonim
6502 মিনিমাল কম্পিউটার (Arduino MEGA সহ) পার্ট 3
6502 মিনিমাল কম্পিউটার (Arduino MEGA সহ) পার্ট 3

আরও এগিয়ে যাচ্ছি, আমি এখন প্রধান বোর্ডে একটি অক্টাল লেচ, 8 আয়তক্ষেত্রাকার এলইডি এবং একটি 220 ওহম প্রতিরোধক অ্যারে যুক্ত করেছি। অ্যারের সাধারণ পিন এবং গ্রাউন্ডের মধ্যে একটি জাম্পারও রয়েছে, যাতে এলইডি বন্ধ করা যায়। 74HC00 NAND গেটটি 78LS08 এবং গেট দিয়ে প্রতিস্থাপিত হয়েছে, গেটের ওয়্যারিংও পরিবর্তন করা হয়েছে। এবং গেট মানে 6522 এখন $ E000 এর পরিবর্তে $ 6000 এ অবস্থিত।

6502 চালানোর জন্য একটি বাহ্যিক ঘড়ির সংযোগের জন্য একটি পিনও রয়েছে। এই সংযোগের সাথে, ঘড়ির সংকেত দেওয়ার জন্য MEGA এর প্রয়োজন নেই। MEGA এখনও আগের মতো প্রসেসরের সাথে কি হচ্ছে তা পর্যবেক্ষণ করে।

আমি একটি 20 পিন 74HC373 ল্যাচ ব্যবহার করেছি কারণ আমার কিছু ছিল। ব্রেডবোর্ডে এটি ঠিক ছিল, কিন্তু একটি 74HC573 বাস সামঞ্জস্যপূর্ণ এবং তারের লোড সংরক্ষণ করবে। UCN5801A যা একটি 22 পিন আইসি সার্কিটেও বিবেচনা করা যেতে পারে, কিন্তু তারের কিছুটা ভিন্ন হবে।

উপরের, একক কমলা LED একটি শক্তি নির্দেশক এবং নিচের বাম লালটি নির্দেশ করে যখন একটি লেখা হচ্ছে। উচ্চতর গতিতে বোর্ড চালানো হলে পরবর্তীটি তুচ্ছ হবে।

পরিবর্তিত সার্কিট উপরে (74HC573 সহ)।

ধাপ 1: বিক্ষোভ কর্মসূচি

বিক্ষোভ কর্মসূচি
বিক্ষোভ কর্মসূচি

দুটি সাধারণ প্রদর্শনী প্রোগ্রাম 6502 মনিটরে অন্তর্ভুক্ত করা হয়েছে এবং তাদের বিচ্ছিন্ন কোড এখানে।

এই প্রোগ্রামটি 6502 A রেজিস্টারে 1 লোড করে এবং এটি ল্যাচে সংরক্ষণ করে। এটি তারপর A রেজিস্টারে 1 যোগ করে এবং এটি ল্যাচে সঞ্চয় করে। তারপর এটি $ 1005 এ ফিরে যায় এবং প্রক্রিয়াটি চিরতরে পুনরাবৃত্তি করে।

* = 1000

1000 A9 01 LDA #$ 01 1002 8D 00 41 STA $ 4100 1005 69 01 ADC #$ 01 1007 8D 00 41 STA $ 4100 100A 4C 05 10 JMP $ 1005 100D. END

এই প্রোগ্রামটি প্রথমে 6522 পোর্ট B এর DDR আউটপুটে সেট করে। এটি তারপর পোর্টে $ 55 (B01010101) এবং ল্যাচ সংরক্ষণ করে। A রেজিস্টার তারপর 1 ধাপ ডানদিকে ঘোরায় এবং এখন $ AA (B10101010) ধারণ করে। এটি আবার পোর্ট বি এবং ল্যাচে সংরক্ষণ করা হয়। প্রোগ্রামটি $ 1005 এ ফিরে আসে এবং চিরকালের জন্য অব্যাহত থাকে।

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA #$ 55 1007 38 SEC 1008 8D 00 60 STA $ 6000 100B 8D 00 41 STA $ 4100 100E 6A ROR A 100F 8D 00 60 STA $ 6000 1012 8D 00 41 STA $ 4100 1015 4C 05 10 JMP $ 1005 1018. END

আপনার মধ্যে তীক্ষ্ণ চোখগুলি লক্ষ্য করতে পারে যে রঙিন LEDs সবুজ রঙের তুলনায় একটি ভিন্ন প্যাটার্ন দেখাচ্ছে। এর কারণ হল সাধারণ সীসাটি 5v এর সাথে রঙিন এবং সবুজের উপর সাধারণটি মাটির সাথে সংযুক্ত থাকে।

কোডের এই লাইনটি প্রোগ্রাম 2 বা প্রোগ্রাম 3 এ পরিবর্তন করুন।

setDataPins (program3 [অফসেট]);

আপনার প্রোগ্রামগুলিকে এনকোড করতে সাহায্য করার জন্য একটি 6502 অ্যাসেম্বলার এবং ডিসাসেম্বলার দরকারী সরঞ্জাম।

ধাপ 2: একটি EEPROM যোগ করা

একটি EEPROM যোগ করা হচ্ছে
একটি EEPROM যোগ করা হচ্ছে
একটি EEPROM যোগ করা হচ্ছে
একটি EEPROM যোগ করা হচ্ছে
একটি EEPROM যোগ করা হচ্ছে
একটি EEPROM যোগ করা হচ্ছে

EEPROM বোর্ডের জন্য, আমি একটি 950 x 650 মিমি স্ট্রিপ বোর্ড এবং 19 মিমি পুরুষ হেডার পিন ব্যবহার করেছি যাতে বোর্ডটি নীচেরটি পরিষ্কার করতে সক্ষম হয়। এই বোর্ডটি নীচের 6502 বোর্ডে প্লাগ করে। EEPROM হল একটি ATMEL 28C256 যার 28 টি পিন আছে এবং এতে 32k x 8 বিট মেমরি রয়েছে। এটি বর্তমানে ব্যবহৃত ছোট প্রোগ্রামগুলির জন্য পর্যাপ্ত নয়।

আমি এই বোর্ডের জন্য একটি সার্কিট ডায়াগ্রাম করিনি, কিন্তু এটি মোটামুটি সোজা এগিয়ে কিভাবে এটি নিচের 6502 বোর্ডের সাথে সংযুক্ত হয়। এই EEPROM চিপগুলি বাস বান্ধব নয় তাই একেকটি পিনের সাথে যুক্ত করতে হবে, তাই সমস্ত "সবুজ এবং সাদা স্প্যাগেটি"। আমি বোর্ডের নীচের অংশে ডেটা লাইনগুলিকে একত্রিত করে আগের বোর্ডে ব্রিজিং সমস্যার সমাধান করেছি।

EEPROM এর 14 ঠিকানা পিনগুলি বাম দিকের উপযুক্ত পিনের (সবুজ তারের) এবং I/O পিনের সাথে ডানদিকে (সাদা তারের) ডাটা পিনের সাথে সংযোগ স্থাপন করে। পিন 27 (WE) পিন 28 (5v), পিন 22 (OE) স্থল এবং পিন 20 (CE) একটি NAND গেটের সাথে সংযুক্ত। NAND গেটের 2 টি ইনপুট A15 এর সাথে সংযুক্ত প্রধান বোর্ড। এর মানে হল যে যখন এই পিনটি উচ্চ হয়, NAND গেট EEPROM এর সিই পিনকে একটি কম সংকেত দেয় যা এটি সক্রিয় করে। এই সেট আপের সাথে এর মানে হল যে EEPROM শুধুমাত্র 6502 দ্বারা পড়া যাবে।

যেহেতু EEPROM মেমরি মানচিত্রে শীর্ষ 32k তে থাকে, এর অর্থ হল $ FFFC এবং $ FFFD পুনরায় সেট করার পরে 6502 এর জন্য শুরু ঠিকানাটি ধরে রাখতে পারে। 6522 এর ঠিকানাগুলি $ 6000 এবং $ 600F এর মধ্যে এবং ল্যাচটি $ 4100 এ রয়েছে, এটি কোনও মেমরি দ্বন্দ্ব বন্ধ করে দেয়।

NMI ভেক্টর ($ FFFA এবং $ FFFB) এবং BRK / IRQ ভেক্টর ($ FFFE anf $ FFFF) একই ভাবে লেখা যেতে পারে।

ধাপ 3: EEPROM প্রোগ্রামিং

EEPROM প্রোগ্রামিং
EEPROM প্রোগ্রামিং
EEPROM প্রোগ্রামিং
EEPROM প্রোগ্রামিং

EEPROM এ একটি প্রোগ্রাম সঞ্চয় করার জন্য, এটি একটি প্রোগ্রামার প্রয়োজন। আমি একটি স্ট্রিপ বোর্ড, একটি Arduino প্রো মিনি, 74HC595 এবং এবং একটি ZIF সকেট থেকে একটি তৈরি করেছি। মূলত, প্রোগ্রামারটি একটি AT28C16 এর জন্য তৈরি করা হয়েছিল যার AT28C256 এর চেয়ে কম ঠিকানা লাইন রয়েছে তাই এটি পরিবর্তন করতে হয়েছিল।

সার্কিট ডায়াগ্রাম দেখায় কিভাবে এই দুটি EEPROM গুলিকে তারে লাগানো যায়। ছবি থেকে এটি স্পষ্ট নয় যে দুটি 595 চিপ উল্টো এবং চিত্রের মতো নয়। 595/1 এর 1 থেকে 7 পিনগুলি EEPROM এর A1 থেকে A7 এর সাথে লাইন আপ করা যাই হোক না কেন। এটি 7 টি সংযোগকারী তারগুলি সংরক্ষণ করে। বোর্ড এখন একটু টাইট লাগছে এবং এর কারণ হল মূলত আমি একটি 24 পিন DIL সকেট ব্যবহার করেছি যা এখন অনেক বড় 28 পিন ZIF সকেট দ্বারা প্রতিস্থাপিত হয়েছে।

একটি প্রোগ্রাম অন্তর্ভুক্ত করা হয়েছে যা আমার বোর্ডের সাথে কাজ করে। দেখানো হিসাবে প্রোগ্রামটি কোনও Arduino এবং 595s এর সাথে একটি সার্কিটে কাজ করবে। আমি একটি 5v প্রো মিনি বেছে নিলাম কারণ এটি কম্প্যাক্ট এবং সেট আপ করার জন্য যথেষ্ট সস্তা।

ধাপ 4: EEPROM প্রোগ্রাম

EEPROM প্রোগ্রাম
EEPROM প্রোগ্রাম

EEPROM প্রোগ্রামারে তিনটি সহজ প্রোগ্রাম আছে। এগুলি ব্যবহার করতে, আপনি যে লাইনটি ব্যবহার করতে চান তা কেবল অসম্পূর্ণ করুন।

// 6522 এর পোর্ট A থেকে পড়ুন

// কনস্ট বাইট ডেটা = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

প্রোগ্রামটি শেষ হয়ে গেলে একটি মেমরি ডাম্প দেখায়। নীচের প্রোগ্রামের অংশটি আপনি যা লিখতে বা মুছে ফেলতে চান তার সম্পূর্ণ নিয়ন্ত্রণ দেয়, $ FFFC এবং $ FFFD সেট করে এবং তারপর একটি নির্দিষ্ট পরিসরের বিষয়বস্তু প্রদর্শন করে। আপনার প্রয়োজন অনুসারে কেবল অস্বস্তি বা পরামিতিগুলি পরিবর্তন করুন। ঠিকানাগুলি দশমিক বিন্যাসেও প্রবেশ করা যেতে পারে।

// eraseEEPROM (422, 930, 0x41); // EEPROM এর পুরো বা কিছু অংশ মুছতে ব্যবহার করুন - শুরু, শেষ, বাইট

Serial.println ("প্রোগ্রামিং EEPROM"); পরিমাণ = program_numeric_data (0x1000); EEPROM লিখুন (0x7ffc, 0x00); // $ 6502 writeEEPROM (0x7ffd, 0x90) এর জন্য $ FFFC সেট করুন; // 6502 এর জন্য $ FFFD সেট করুন // writeEEPROM (0x1000, 0xA9); // 1 বাইট ডেটা লিখুন Serial.println ("সম্পন্ন"); স্ট্রিং আউটলাইন = "লিখিত" + (স্ট্রিং) পরিমাণ + "বাইট"; Serial.println (রূপরেখা); Serial.println ("EEPROM পড়া"); printContents (0x0000, 0x112f); // printContents (0x7ff0, 0x7fff) প্রদর্শনের জন্য রেঞ্জ সেট করুন; // EEPROM এ শেষ 16 বাইট পড়ে

প্রোগ্রাম থেকে একটি সংক্ষিপ্ত আউটপুট উপরে।

ধাপ 5: EEPROM থেকে 6502 চালানো

EEPROM থেকে 6502 চলছে
EEPROM থেকে 6502 চলছে
EEPROM থেকে 6502 চলছে
EEPROM থেকে 6502 চলছে
EEPROM থেকে 6502 চলছে
EEPROM থেকে 6502 চলছে

প্রোগ্রাম করা EEPROM এখন তার বোর্ডে beোকানো যেতে পারে এবং এই পিগি প্রধান 6502 বোর্ডে ফিরে আসে যা পিগি মেগাতে ফিরে আসে। উপরের দিক এবং উপরের দৃশ্যের ছবিগুলি দেখায় যে এটি কীভাবে একসাথে ফিট হয়।

6502 এখন $ FFFC এবং $ FFFD (যা $ 9000) থেকে স্টার্ট ভেক্টর পড়তে পারে এবং তারপর সেখানে সংরক্ষিত প্রোগ্রামটিতে যেতে পারে। মেগা এখনও ঘড়ি সংকেত প্রদান করছে এবং 6502 ঘড়ি সংকেত প্রদান এবং পর্যবেক্ষণ করার জন্য এর প্রোগ্রাম পরিবর্তন করা প্রয়োজন। এটি করার জন্য একটি পরিবর্তিত প্রোগ্রাম প্রদান করা হয়েছে।

চলমান ছবিতে দেখানো হয়েছে এই প্রোগ্রামটি চলছে।

9000 LDA #$ 00 A9 00

9002 STA $ 6003 8D 03 60 9005 LDA #$ FF A9 FF 9007 STA $ 6002 8D 02 60 900A LDA $ 6001 AD 01 60 900D STA $ 6000 8D 00 60 9010 EOR #$ FF 49 FF 9012 STA $ 4100 8D 00 41 9015 JMP $ 900A 4C 0A.০

সুইচগুলি পোর্ট A এ প্লাগ করা হয় এবং প্রোগ্রামটি পোর্ট B এবং 74HC373 (যা বর্তমানে অস্পষ্ট) এ পড়ার মান প্রদর্শন করে। সুইচগুলি মাটির সাথে সংযুক্ত এবং LEDs 5v এর সাথে সংযুক্ত। EOR #$ FF ল্যাচ এবং পোর্ট B এর সমস্যা সংশোধন করে ল্যাচ লেখার আগে বিটগুলি উল্টিয়ে বিভিন্ন প্যাটার্ন প্রদর্শন করে।

ধাপ 6: বাহ্যিক সময় সংকেত

বাহ্যিক সময় সংকেত
বাহ্যিক সময় সংকেত

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

আমি একটি 555 টাইমার থেকে আউটপুট চেষ্টা করেছি কিন্তু এটি কাজ করে না। আমি মনে করি এটি হতে পারে কারণ এটি একটি বর্গ তরঙ্গ নয়? যখন CD4017 আউটপুটগুলির একটিতে সংযুক্ত হয়, তখন এটি 6502 ড্রাইভ করে।

আমি এখনও একটি ঘড়ি সংকেত পেতে বিভিন্ন পদ্ধতি খুঁজছি।

ধাপ 7: উপসংহার

আমি দেখিয়েছি কিভাবে কিছু জটিল সার্কিট তৈরি করা যায় এবং খুব কম পরিমাণে যন্ত্রাংশ নিয়ে কাজ করার জন্য একটি খুব সহজ "কম্পিউটার" পাওয়া যায়। এটা ঠিক যে, কম্পিউটার বর্তমানে খুব বেশি কাজ করতে পারে না বা ভবিষ্যতেও করতে পারে।

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

এই কম্পিউটারের আরও বিকাশের জন্য, আমি $ 0000 থেকে $ 2047 এ 2k SRAM রাখতে এবং 1 MHz দোলক যোগ করতে চাই। সম্ভবত একটি CD4040 (12-স্টেজ বাইনারি রিপল কাউন্টার / ডিভাইডার) এর মতো কিছু যোগ করবে যাতে আমি বিভিন্ন ঘড়ির গতিতে ট্যাপ করতে পারি।

এমনকি একটি ফ্ল্যাশিং লাইটের পরিবর্তে টেক্সট আউটপুট দিতে একটি LCD ডিসপ্লে যোগ করতে পারে। EEPROM প্রোগ্রামারকে LCD ডিসপ্লে চালানোর জন্য প্রয়োজনীয় বৃহত্তর প্রোগ্রামগুলি মোকাবেলা করার জন্য পরিবর্তন করতে হবে।

যদিও মেগা 6502 চালানোর জন্য অপ্রয়োজনীয় হয়ে উঠছে, তবুও এটি মেশিন কোড ডিবাগ করার জন্য কাজে আসে। যে কেউ জানে, মেশিন কোডে সবসময় বাগ থাকে!

প্রস্তাবিত: