لینک مقاله اصلی : Opcodes 6502
1. انواع وقفههاوقتی که وقفه ایجاد میشه پردازنده وظیفهای رو که در حال انجامش هست رو به طور موقت متوقف میکنه و کار جدیدی رو که در اثر وقفه بهش محول میشه رو انجام میده. به طور کلی سه نوع وقفه در اسمبلی 6502 وجود داره :
1.1. وقفه NMI
این وقفه توسط پردازنده گرافیک ایجاد میشه و به پردازنده اصلی اطلاع میده که نمایش یه فریم رو تکمیل کرده و منتظر پاک شدن صفحه هست تا فریم بعدی رو نمایش بده. به مدت زمانی که در اون صفحه نمایش پاک میشه پاک سازی عمودی (vBlank) گفته میشه. این زمان اهمیت زیادی داره چون فقط در طی این زمان میشه فریم جدید رو با گرافیک متفاوت نمایش داد.
1.2. وقفه Reset
وقتی کنسول روشن میشه یا دکمه ریست زده میشه این وقفه فعال میشه و پردازنده رو به آدرس آغازین دستورات ارجاع میده.
1.3. وقفه IRQ یا BRK
وقفه IRQ توسط سخت افزاری که داخل بعضی از کارتریجها قرار داره ایجاد میشه. معمولا این نوع کارتریجها برای بازیهای پیچیده و پرحجم استفاده میشه. وقفه BRK هم زمانی اجرا میشه که پردازنده دستور اوپ کد BRK رو اجرا بکنه.
2. انواع ثباتها 2.1. ثبات A
اکثر محاسبات ریاضی و منطقی بر روی مقدار این ثبات انجام میشه.
2.2. ثباتهای X و Y
ثباتهای کمکی هستن که بیشتر برای شمارش حلقه به کار میرن.
2.3. ثبات پشته
یه نوع اشارهگر هست که حافظه خالی بعدی در قسمتی از رم ($01XX) رو مشخص میکنه که XX همون مقدار این ثبات هست.
2.4. ثبات شمارشگر
این ثبات که 16 بیتی هست، آدرس آفستی که پردازنده در حال اجراش هست رو دقیقا مشخص میکنه.
2.5. ثبات پردازنده
این ثبات اطلاعات مربوط به وضعیت پردازنده رو نگهداری میکنه. اجرای دستورات مختلف باعث تغییر در مقدار این ثبات میشن. این ثبات 8 بیتی هست. هر بیت این ثبات نشان دهنده وضعیت خاصی از پردازنده هست.
b0 | انتقال | اگه حاصل عملیاتی توی یه مقدار هشت بیتی جا نشه این بیت فعال (1) میشه. مثلا اگه مقدار ثبات A بیشتر از 255 یا کمتر از 0 بشه این بیت فعال میشه. |
b1 | صفر | در حالتی فعال میشه که حاصل عملیات اخیر صفر بشه. |
b2 | وقفه | این بیت وضعیت وققه IRQ رو مشخص میکنه. اگه این بیت فعال باشه از اجرای وقفه IRQ جلوگیری میکنه. اگه این بیت غیرفعال باشه وفقه IRQ مجاز خواهد بود. |
b3 | دهدهی | با فعال شدن این بیت پردازنده اعداد رو دهدهی در نظر میگیره. و با غیر فعال شدن این بیت پردازنده اعداد رو هگزادسیمال (مبنای 16) در نظر میگیره. البته این بیت بر روی پردازنده اورجینال شرکت نینتندو تاثیری نداره چون به لحاظ سخت افزاری کاملا غیرفعال هست. |
b4 | توقف | با اجرا شدن دستور BRK این بیت فعال میشه. |
b5 | X | بدون استفاده |
b6 | تغییر علامت | اگه علامت عدد تغییر پیدا بکنه این بیت فعال میشه. |
b7 | علامت | این بیت نشان دهنده مثبت یا منفی بودن عدد حاصل از آخرین دستورالعمل هست. مثبت یا منفی بودن یه عدد بر اساس بیت 7 ام اون عدد مشخص میشه. بنابراین عدد FF که در مبنای دودویی میشه 11111111 یه عدد منفی هست و باعث میشه که بیت علامت ثبات پردازنده هم فعال بشه. |
3. حالتهای مختلف تعیین عملونداکثر دستورات اسمبلی نیاز به عملوند دارن. به طور کل هفت روش برای تعیین عملوند وجود داره. که عبارتاند از :
3.1. مقدار مستقیم
مانند LDA #$3F که مقدار 3F به طور مستقیم در داخل ثبات A ذخیره میشه.
3.2. آدرس مستقیم
مانند STA $2007 که در این حالت مقدار A به طور مستقیم در آدرس 2007 ذخیره میشه.
3.3. آدرس شاخص دار
مانند STA $8000,X و اگه X=#$20 باشه در اون صورت مقدار A در آدرس 8020 ذخیره میشه.
3.4. آدرس غیر مستقیم
مانند JMP ($FFFC) و اگه مقادیر موجود در آدرسهای FFFD و FFFC به ترتیب برابر 80 و 00 باشن، در نهایت عمل پرش به آدرس 8000 خواهد بود.
نکته : پردازنده میکرو از نوع کوچیک ته خور هست و بنابراین مقادیر موجود در دو تا آدرس بالا به طور معکوس کنار هم قرار داده میشن.
3.5. آدرس غیر مستقیم شاخص دار
مانند LDA ($00),Y و اگه مقادیر موجود در آدرسهای 0001 و 0000 به ترتیب برابر 80 و 00 باشن، و مقدار Y هم برابر 05 باشه، در نهایت مقدار A از آدرس 8005 لود میشه.
نکته : این دستور فقط برای آدرسهای $00XX قابل انجام هست.
3.6. ثبات به ثبات
در این حالت هیچ نوع آدرس دهی انجام نمیشه و عمل بین ثباتها انجام میشه. مانند TXA که باعث میشه مقدار موجود در ثبات X به داخل ثبات A کپی بشه.
3.7. ضمنی
در این حالت هیچ نوع عملوندی استفاده نمیشه. مانند دستور NOP که پردازنده هیچ کاری انجام نمیده و یا دستور BRK که باعث ایجاد وقفه IRQ میشه.
4. دستورات اوپ کد 6502در کل 56 تا دستور اوپ کد 6502 وجود داره که در ادامه کارکرد هر کدوم رو به طور مختصر و مفید بیان میکنم.
4.1. دستورات لود و ذخیره