Farid
Posts : 111 Join date : 2010-07-25 Age : 39 Location : IRAN گروهبان سوم
| Subject: ترجمه Nerdy Nights week 4 2015-02-24, 1:30 pm | |
| آمادهسازی جعبه رنگها کنسول میکرو در کل میتونه 64 تا رنگ مختلف رو نمایش بده : البته به خاطر محدودیتهای سخت افزاری نمیتونه همه این رنگها رو همزمان نمایش بده! در هر صفحه فقط میتونه 25 تا رنگ رو همزمان نشون بده که داخل دو تا جعبه نقاشی مجزا قرار میگیرن که 13 تا رنگ برای پس زمینه و 12 تا رنگ برای تصاویر متحرک قابل استفاده هست. برای استفاده از یه رنگ دلخواه باید از قبل اون رو داخل جعبه رنگ قرار داد. جعبه رنگ پس زمینه از آدرس 3F00 تا آدرس 3F0F هست و جعبه رنگ گرافیکهای متحرک از آدرس 3F10 تا آدرس 3F10 هست : این آدرسها ماله پردازنده گرافیک هستن و نمیتونیم به طور مستقیم مقادیر اونا رو تغییر بدیم. برای تغییر مقدار این آدرسها حتما باید از درگاههای ارتباط با پردازنده گرافیک استفاده بکنیم. برای این کار آدرس مورد نظر رو از طریق درگاه 2006 اعلام میکنیم و سپس مقداری که میخواهیم توی اون آدرس قرار بگیره رو بر روی درگاه 2007 مینویسیم. چون آدرسهای پردازنده گرافیک 16 بیتی هستن بنابراین دو بار عمل نوشتن روی درگاه 2006 باید انجام بیشه. دفعه اول بایت بالاتر و دفعه دوم بایت پایینتر نوشته میشه : - Code:
-
LDA $2002 LDA #$3F STA $2006 LDA #$05 STA $2006 LDA #$11 STA $2007 با این کار مقدار 11 که مربوط به آبی پر رنگ هست داخل جعبه رنگ پس زمینه قرار میگیره. با هر بار نوشتن روی درگاه 2007 آدرس پردازنده گرافیک به طور اتوماتیک افزایش پیدا میکنه. بنابراین برای آدرسهای بعدی دیگه نیازی به اعلام آدرس از طریق درگاه 2006 نیست. ضمنا برای اینکه وضعیت پردازنده گرافیک ریست بشه قبل از اعلام آدرس باید درگاه 2002 رو خوند. بنابراین برای اینجاد جعبه رنگها به صورت زیر کدنویسی میکنیم : - Code:
-
LDX #$00 LoadPalettesLoop: LDA PaletteData, x STA $2007 INX CPX #$20 BNE LoadPalettesLoop
PaletteData: .db $0F,$31,$32,$33,$0F,$35,$36,$37,$0F,$39,$3A,$3B,$0F,$3D,$3E,$0F .db $0F,$1C,$15,$14,$0F,$02,$38,$3C,$0F,$1C,$15,$14,$0F,$02,$38,$3C با استفاده از رهنمود .db کل رنگهای دلخواه رو مینویسم و در طی یه حلقه کل دو تا جعبه رنگها به راحتی ایجاد میشن.
Last edited by Farid on 2015-02-24, 6:40 pm; edited 2 times in total |
|
Farid
Posts : 111 Join date : 2010-07-25 Age : 39 Location : IRAN گروهبان سوم
| Subject: Re: ترجمه Nerdy Nights week 4 2015-02-24, 2:28 pm | |
| گرافیکهای متحرک هر چیزی که توی صفحه نمایش حرکت میکنه به عنوان یه گرافیک متحرک شناخته میشه. گرافیکهای متحرک جدول پازل مخصوص به خودشون رو دارن و از کاشیهای 8 در 8 تشکیل میشن. گرافیکهای متحرک بزرگتر از کنار هم قرار گرفتن این کاشیها به وجود میان. به عنوان مثال شخصیت کونیو با هشت تا کاشی ساخته میشه : اطلاعات مربوط به نحوه نمایش هر کدوم از این کاشیها با چهار بایت مشخص میشه. بایت اول | مختصات عمودی کاشی بر روی صفحه هست. مقدار 00 حد بالای صفحه و مقدار EF حد پایین صفحه برای چاپ کاشی هستن. | بایت دوم | مشخص کننده مقدار هگز کاشی با توجه به جدول تکههای پازل هست. | بایت سوم | b1 b0 | 00 : | مجموعه رنگ اول از جعبه رنگ | 01 : | مجموعه رنگ دوم از جعبه رنگ | 10 : | مجموعه رنگ سوم از جعبه رنگ | 11 : | مجموعه رنگ چهارم از جعبه رنگ |
| b4 b3 b2 | بدون استفاده | b5 | 0 : | نمایش بر روی زمینه | 1 : | نمایش پشت زمنیه |
| b6 | 0 : | استاندارد | 1 : | نمایشه آینه |
| b7 | 0 : | استاندارد | 1 : | نمایش وارونه |
|
| بایت چهارم | مختصات افقی کاشی بر روی صفحه هست. مقدار 00 حد سمت چپ صفحه و مقدار F9 حد سمت راست صفحه برای چاپ کاشی هستن. |
علاوه بر آدرسهای اصلی پردازنده گرافیک که از 0000 تا 3FFF هستن یه حافظه جداگانه برای چاپ گرافیکهای متحرک هم وجود داره که از 00 تا FF رو میتونه آدرسدهی بکنه. از اونجایی که هر کاشی از گرافیک متحرک 4 بایت برای چاپ شدن نیاز داره بنابراین حافظه گرافیک متحرک حداکثر میتونه اطلاعات 64 تا کاشی رو برای چاپ و نمایش توی خودش نگه داره. برای نوشتن روی حافظه گرافیک متحرک باید از درگاههای 2003 و 2004 استفاده کرد. با استفاده از درگاه 2003 آدرس مورد نظر اعلام میشه و بعد با استفاده از درگاه 2004 اطلاعات مورد نظر در اون آدرس نوشته میشه. با هر بار نوشتن روی 2004 آدرس حافظه گرافیک متحرک یه واحد افزایش پیدا میکنه. دقت بکنین که چون اطلاعات هر کاشی از گرافیک متحرک 4 بایت هست بنابراین برای چاپ یه کاشی گرافیک متحرک باید چهار بار عمل نوشتن روی درگاه 2004 انجام بشه. - Code:
-
LDA #$00 STA $2003 LDA #$80 STA $2004 LDA #$00 STA $2004 LDA #$00 STA $2004 LDA #$80 STA $2004 در کد بالا ابتدا آدرس 00 از حافظه گرافیک متحرک با استفاده از درگاه 2003 اعلام میشه و سپس کاشی که مقدارش در جدول تکههای پازل 00 هست در مختصات 80h عمودی و 80h افقی (تقریبا مرکز صفحه نمایش) چاپ بشه. همچنین درگاههای 2000 و 2001 هم باید به طور مناسبی تنظیم بشن. بنابراین : - Code:
-
LDA #%10000000 STA $2000
LDA #%00010000 STA $2001 بیت 7 درگاه 2000 باید فعال باشه تا وقفه NMI در زمان vBlank ایجاد بشه تا گرافیک چاپ بشه. بیت 4 درگاه 2001 هم باید فعال باشه تا گرافیکهای متحرک نمایش داده بشن. از اینجا میتونین کدهای آماده برنامه رو به همراه اسمبلر دانلود بکنین. برای ساختن فایل NES کافیه که فایل sprites.bat رو اجرا بکنین. کدهای داخل فایل sprites.asm رو مرور بکنین و قسمتهایی که مربوط به درس امروز بود رو تغییر بدین و نتیجه کار رو بررسی بکنین.
|
|