Microbaz
Would you like to react to this message? Create an account in a few clicks or log in to continue.



 
HomeSearchLatest imagesRegisterLog in

Share
 

 ترجمه Nerdy Nights week 4

View previous topic View next topic Go down 
AuthorMessage
Farid
Farid

Posts : 111
Join date : 2010-07-25
Age : 39
Location : IRAN
گروهبان سوم

گروهبان سوم


ترجمه Nerdy Nights week 4 Empty
PostSubject: ترجمه Nerdy Nights week 4   ترجمه Nerdy Nights week 4 I_icon_minitime2015-02-24, 1:30 pm

آماده‌سازی جعبه رنگ‌ها
کنسول میکرو در کل میتونه 64 تا رنگ مختلف رو نمایش بده :

ترجمه Nerdy Nights week 4 Nes-palette

البته به خاطر محدودیت‌های سخت افزاری نمیتونه همه این رنگ‌ها رو همزمان نمایش بده! در هر صفحه فقط میتونه 25 تا رنگ رو همزمان نشون بده که داخل دو تا جعبه نقاشی مجزا قرار میگیرن که 13 تا رنگ برای پس زمینه و 12 تا رنگ برای تصاویر متحرک قابل استفاده هست. برای استفاده از یه رنگ دلخواه باید از قبل اون رو داخل جعبه رنگ قرار داد. جعبه رنگ پس زمینه از آدرس 3F00 تا آدرس 3F0F هست و جعبه رنگ گرافیک‌های متحرک از آدرس 3F10 تا آدرس 3F10 هست :

ترجمه Nerdy Nights week 4 Nes-palette-memory

این آدرس‌ها ماله پردازنده گرافیک هستن و نمیتونیم به طور مستقیم مقادیر اونا رو تغییر بدیم. برای تغییر مقدار این آدرس‌ها حتما باید از درگاه‌های ارتباط با پردازنده گرافیک استفاده بکنیم. برای این کار آدرس مورد نظر رو از طریق درگاه 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
Back to top Go down
http://microbaz.blogfa.com
Farid
Farid

Posts : 111
Join date : 2010-07-25
Age : 39
Location : IRAN
گروهبان سوم

گروهبان سوم


ترجمه Nerdy Nights week 4 Empty
PostSubject: Re: ترجمه Nerdy Nights week 4   ترجمه Nerdy Nights week 4 I_icon_minitime2015-02-24, 2:28 pm

گرافیک‌های متحرک
هر چیزی که توی صفحه نمایش حرکت میکنه به عنوان یه گرافیک متحرک شناخته میشه. گرافیک‌های متحرک جدول پازل مخصوص به خودشون رو دارن و از کاشی‌های 8 در 8 تشکیل میشن. گرافیک‌های متحرک بزرگ‌تر از کنار هم قرار گرفتن این کاشی‌ها به وجود میان. به عنوان مثال شخصیت کونیو با هشت تا کاشی ساخته میشه :

ترجمه Nerdy Nights week 4 KunioSprite

اطلاعات مربوط به نحوه نمایش هر کدوم از این کاشی‌ها با چهار بایت مشخص میشه.

بایت اولمختصات عمودی کاشی بر روی صفحه هست.
مقدار 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 رو مرور بکنین و قسمت‌هایی که مربوط به درس امروز بود رو تغییر بدین و نتیجه کار رو بررسی بکنین.
Back to top Go down
http://microbaz.blogfa.com
 

ترجمه Nerdy Nights week 4

View previous topic View next topic Back to top 
Page 1 of 1

 Similar topics

-
» ترجمه Nerdy Nights week 5
» ترجمه Nerdy Nights week 6
» ترجمه Nerdy Nights week 3
» درخواست ترجمه
» ترجمه بازی لاک پشت های نینجا

Permissions in this forum:You cannot reply to topics in this forum
Microbaz :: برنامه نویسی اسمبلی 6502-