فهرست مطالب:

حداقل کامپیوتر 6502 (با Arduino MEGA) قسمت 3: 7 مرحله
حداقل کامپیوتر 6502 (با Arduino MEGA) قسمت 3: 7 مرحله

تصویری: حداقل کامپیوتر 6502 (با Arduino MEGA) قسمت 3: 7 مرحله

تصویری: حداقل کامپیوتر 6502 (با Arduino MEGA) قسمت 3: 7 مرحله
تصویری: CPU کار می کند 2024, جولای
Anonim
6502 حداقل کامپیوتر (با Arduino MEGA) قسمت 3
6502 حداقل کامپیوتر (با Arduino MEGA) قسمت 3

با حرکت بیشتر ، من اکنون یک Octal Latch ، 8 LED مستطیلی و یک آرایه مقاومت 220 اهم به برد اصلی اضافه کرده ام. همچنین بین پین و زمین مشترک آرایه یک جهنده وجود دارد تا LED ها خاموش شوند. دروازه 74HC00 NAND با یک دروازه 78LS08 AND جایگزین شده است ، سیم کشی به دروازه نیز تغییر کرده است. دروازه AND به این معنی است که 6522 اکنون به جای E000 دلار در 6000 دلار قرار دارد.

همچنین یک پین برای اتصال یک ساعت خارجی برای رانندگی 6502 وجود دارد. با این اتصال ، نیازی به MEGA برای ارائه سیگنال ساعت نیست. MEGA همچنان آنچه را که قبلاً در پردازنده می گذرد ، نظارت می کند.

من برای قفل از 20 پین 74HC373 استفاده کردم زیرا مقداری داشتم. هنگامی که روی تخته نان بودید این کار خوب بود ، اما 74HC573 با اتوبوس سازگار است و بارهای زیادی از سیم کشی را ذخیره می کرد. UCN5801A که یک IC 22 پین است نیز ممکن است در مدار در نظر گرفته شود ، اما سیم کشی کمی متفاوت خواهد بود.

چراغ LED نارنجی بالا یک نشانگر قدرت است و قرمز پایین سمت چپ نشان می دهد که در حال نوشتن است. اگر تخته با سرعت بیشتری کار کند ، دومی ناچیز خواهد بود.

مدار اصلاح شده در بالا (با 74HC573) است.

مرحله 1: برنامه های نمایشی

برنامه های نمایشی
برنامه های نمایشی

دو برنامه نمایشی ساده در مانیتور 6502 گنجانده شده است و کد جدا شده آنها در اینجا قرار دارد.

این برنامه 1 را در رجیستر 6502 A بارگذاری می کند و آن را در قفل ذخیره می کند. سپس 1 را به ثبت A اضافه می کند و آن را در قفل ذخیره می کند. سپس به 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 100DEND

این برنامه ابتدا DDR پورت 6522 B را به خروجی تنظیم می کند. سپس 55 دلار (B01010101) در بندر و همچنین قفل ذخیره می کند. سپس ثبت A یک قدم به راست می چرخد و در حال حاضر $ AA (B10101010) را نگه می دارد. این دوباره در پورت B و لچ ذخیره می شود. این برنامه به 1005 دلار بازگشت و برای همیشه ادامه دارد.

* = 1000

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

چشم تیز بین شما ممکن است متوجه شود که LED های رنگی الگوی متفاوتی با الگوی سبز نشان می دهند. این به این دلیل است که سیم معمولی روی رنگهای 5 ولت و سیمهای سبز به زمین متصل می شود.

این خط کد را به program2 یا program3 تغییر دهید.

setDataPins (برنامه 3 [افست]) ؛

6502 Assembler و Disassembler ابزارهای مفیدی برای کمک به رمزگذاری برنامه های شما هستند.

مرحله 2: اضافه کردن EEPROM

افزودن EEPROM
افزودن EEPROM
افزودن EEPROM
افزودن EEPROM
افزودن EEPROM
افزودن EEPROM

برای برد EEPROM ، من از یک تخته نوار 950 در 650 میلی متر و پین های هدر مردانه 19 میلی متری استفاده کردم تا تخته بتواند صفحه زیر را پاک کند. این برد به برد 6502 زیر متصل می شود. EEPROM یک ATMEL 28C256 است که دارای 28 پین است و شامل 32k x 8 بیت حافظه است. این برای برنامه های کوچکی که در حال حاضر استفاده می شود بیش از حد کافی است.

من یک نمودار مدار برای این برد انجام نداده ام ، اما نحوه اتصال آن به برد 6502 زیر بسیار ساده است. این تراشه های EEPROM برای اتوبوس مناسب نیستند ، بنابراین باید به پین های جداگانه متصل شوند ، بنابراین همه "اسپاگتی سبز و سفید" وجود دارد. من مشکل پل زدن روی برد قبلی را با سیم کشی خطوط داده به هم در قسمت زیرین برد حل کرده ام.

14 پین آدرس EEPROM به پین های مناسب در سمت چپ (سیم های سبز) و پین های ورودی/خروجی به پین های داده در سمت راست (سیم های سفید) متصل می شوند. پین 27 (WE) به پین 28 (5v) ، پین 22 (OE) به زمین و پین 20 (CE) به یک دروازه NAND متصل است. 2 ورودی از دروازه NAND به A15 در برد اصلی این بدان معناست که وقتی این پین بالا می رود ، دروازه NAND سیگنال پایینی به پین CE EEPROM می دهد که باعث فعال شدن آن می شود. با این تنظیم به این معنی است که EEPROM فقط توسط 6502 قابل خواندن است.

با توجه به اینکه EEPROM در 32k بالای نقشه حافظه قرار دارد ، به این معنی است که $ FFFC و $ FFFD می توانند آدرس شروع 6502 را پس از بازنشانی نگه دارند. با داشتن آدرس 6522 بین 6000 تا 600 دلار فارنهایت و قفل 4100 دلار ، هر گونه اختلال حافظه را متوقف می کند.

بردار NMI ($ FFFA و $ FFFB) و بردار BRK / IRQ ($ FFFE و $ FFFF) نیز می توانند به همین ترتیب نوشته شوند.

مرحله 3: برنامه نویسی EEPROM

برنامه نویسی EEPROM
برنامه نویسی EEPROM
برنامه نویسی EEPROM
برنامه نویسی EEPROM

برای ذخیره یک برنامه در EEPROM ، به یک برنامه نویس نیاز دارد. من یکی را از یک تخته نوار ، Arduino Pro Mini ، چند عدد 74HC595 و یک سوکت ZIF تهیه کردم. در اصل ، برنامه نویس برای AT28C16 ساخته شده بود که خطوط آدرس کمتری نسبت به AT28C256 دارد بنابراین باید اصلاح شود.

نمودار مدار نحوه سیم کشی هر دو این EEPROM ها را نشان می دهد. در عکس مشخص نیست که دو تراشه 595 وارونه هستند و آنطور که در نمودار نشان داده شده نیست. پین های 1 تا 7 از 595/1 بدون توجه به اینکه از کدام مورد استفاده می شود ، با A1 تا A7 EEPROM مطابقت دارد. با این کار 7 سیم اتصال ذخیره می شود. تخته در حال حاضر کمی محکم به نظر می رسد و این به این دلیل است که در ابتدا من از سوکت DIL 24 پین استفاده کردم که اکنون با سوکت بسیار بزرگتر ZIF 28 پین جایگزین شده است.

برنامه ای وجود دارد که با برد من کار می کند. مطابق شکل ، برنامه با هر آردوینو و 595 در یک مدار کار می کند. من 5v Pro Mini را انتخاب کردم زیرا جمع و جور و به اندازه کافی ارزان است که در تنظیمات باقی می ماند.

مرحله 4: برنامه های EEPROM

برنامه های EEPROM
برنامه های EEPROM

سه برنامه ساده در برنامه نویس EEPROM وجود دارد. برای استفاده از آنها ، فقط خط مورد نظر خود را کامنت کنید.

// از بندر A 6522 بخوانید

// const byte data = {0xA9 ، 0x00 ، 0x8D ، 0x03 ، 0x60 ، 0xAD ، 0x01 ، 0x60 ، 0x4C ، 0x05 ، 0x90 ، 0x00} ؛

این برنامه پس از اتمام یک تخلیه حافظه را نشان می دهد. بخشی از برنامه زیر به شما کنترل کامل آنچه می خواهید بنویسید یا پاک کنید را می دهد ، $ FFFC و $ FFFD را تنظیم می کند و سپس محتویات یک محدوده مشخص را نمایش می دهد. فقط کافی است پارامترها را مطابق نیاز خود کامنت گذاری یا تغییر دهید. آدرس ها را می توان در قالب اعشاری نیز وارد کرد.

// eraseEEPROM (422 ، 930 ، 0x41) ؛ // برای پاک کردن کامل یا بخشی از EEPROM - شروع ، پایان ، بایت استفاده کنید

Serial.println ("برنامه نویسی EEPROM") ؛ مقدار = data_numeric_data (0x1000)؛ writeEEPROM (0x7ffc ، 0x00) ؛ // $ FFFC را برای 6502 writeEEPROM (0x7ffd ، 0x90) تنظیم کنید ؛ // $ FFFD را برای 6502 تنظیم کنید // writeEEPROM (0x1000، 0xA9)؛ // 1 بایت داده بنویسید Serial.println ("انجام شد") ؛ String outline = "نوشته شده" + (رشته) مقدار + "بایت"؛ Serial.println (طرح کلی) ؛ Serial.println ("خواندن EEPROM") ؛ printContents (0x0000 ، 0x112f) ؛ // تنظیم محدوده برای نمایش printContents (0x7ff0 ، 0x7fff) ؛ // 16 بایت آخر را در EEPROM می خواند

خروجی خلاصه شده از برنامه در بالا است.

مرحله 5: اجرای 6502 از EEPROM

اجرای 6502 From EEPROM
اجرای 6502 From EEPROM
اجرای 6502 From EEPROM
اجرای 6502 From EEPROM
اجرای 6502 From EEPROM
اجرای 6502 From EEPROM

EEPROM برنامه ریزی شده اکنون می تواند در برد خود قرار داده شود و این قلک به تخته اصلی 6502 که از طریق PEGIG به MEGA پشت می کند ، متصل می شود. عکسهای نمای جانبی و بالا نشان می دهد که چگونه همه آنها با هم هماهنگ هستند.

اکنون 6502 می تواند بردار شروع را از $ FFFC و $ FFFD (که 9000 دلار است) بخواند و سپس به برنامه ذخیره شده در آن بپردازد. MEGA هنوز سیگنال ساعت را ارائه می دهد و برنامه آن باید تغییر کند تا فقط سیگنال ساعت را نشان دهد و 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 90

سوئیچ ها به پورت A متصل می شوند و برنامه مقداری را که در پورت B می خواند و 74HC373 (که در حال حاضر مبهم است) نشان می دهد. سوئیچ ها به زمین و LED ها به 5 ولت متصل می شوند. EOR #$ FF مشکل قفل و درگاه B را نشان می دهد که الگوهای مختلف را با چرخاندن بیت ها قبل از نوشتن به چفت نشان می دهد.

مرحله 6: سیگنال زمان خارجی

سیگنال زمان خارجی
سیگنال زمان خارجی

اگر سیگنال ساعت به پین بالای برد اعمال شود ، 6502 می تواند مستقل از MEGA اجرا شود. البته به منبع تغذیه نیز نیاز دارد. من ساعت های مختلف را آزمایش کرده ام و حتی 6502 را در فرکانس 1 مگاهرتز با نوسان ساز کریستالی اجرا کرده ام. MEGA نمی تواند با سرعتهای بالاتر پیش برود ، بنابراین باید حذف شود.

من خروجی تایمر 555 را نیز امتحان کردم اما کار نمی کند. من فکر می کنم ممکن است به این دلیل باشد که موج مربعی نیست؟ وقتی به یکی از خروجی های CD4017 متصل شد ، 6502 را درایو کرد. من یکی از کیت های بالا را وصله کردم تا سیگنال ساعت را دریافت کنم.

من هنوز در حال بررسی روش های مختلف برای دریافت سیگنال ساعت هستم.

مرحله 7: نتیجه گیری

من نشان داده ام که چگونه می توان مدارهای پیچیده ای ساخت و از یک "کامپیوتر" بسیار ساده برای کار با حداقل قطعات استفاده کرد. مسلماً رایانه در حال حاضر نمی تواند کار بزرگی انجام دهد یا احتمالاً در آینده می تواند این کار را انجام دهد.

در اوایل دهه 80 ، با VIC20 ، من از دستگاه فوق العاده تعجب می کردم و اولین ایده ای را در مورد چگونگی شروع به کار کردن نداشتم. روزگار پیش رفته است و تکنولوژی نیز پیشرفت کرده است ، اما باز هم خوب است که به اصول اولیه برگردیم و به چیزی که از ابتدا ساخته ایم افتخار کنیم.

برای توسعه بیشتر این رایانه ، قصد دارم 2k SRAM را در 0000 دلار تا 2047 دلار قرار دهم و یک نوسان ساز 1 مگاهرتزی را اضافه کنم. احتمالاً چیزی شبیه CD4040 (شمارنده / تقسیم کننده دو مرحله ای دوتایی Ripple Counter / Divider) اضافه می کند تا بتوانم به سرعتهای مختلف ساعت ضربه بزنم.

حتی ممکن است یک صفحه نمایش LCD را برای خروجی متن به جای نورهای چشمک زن اضافه کنید. برنامه نویس EEPROM همچنین باید اصلاح شود تا با برنامه های بزرگتر مورد نیاز برای اجرای صفحه نمایش LCD کار کند.

اگرچه MEGA برای اجرای 6502 غیر ضروری می شود ، اما برای اشکال زدایی کد دستگاه هنوز مفید است. همانطور که همه می دانند ، کد ماشین همیشه حاوی اشکالات است!

توصیه شده: