ســـــــــــــــلام Fuzebox


بعد از اینکه کنسول بازی رو ساختیم ( ! ) حالا نوبت برنامه نویسی میرسد . ابتدا از برنامه کلاسیک Hello World شروع می کنیم . این برنامه تا حد ممکن ساده است و تنها عبارت Hello World را روی صفحه می نویسد ولی پایه و اساس تمام بازی هاست .
خوشبختانه نیاز نیست که شما از صفر شروع کنید و موتور ویدیویی و صدا رو خودتون بنویسید ! تمام بازی ها و دموها بر پایه یک Firmware Kernel/Core ساخته میشوند که تمام این کارهای سخت را در بک گراند انجام می دهد . اول از همه باید آخرین نگارش از این هسته را دانلود کنید سپس آنرا در پوشه ای که بازی های خود را در آن قرار می دهید از حالت فشرده شده خارج کنید .

محتوای پوشه باید چیزی شیبه این باشد . در آن باید پوشه هایی به نام kernel و tools و schematic باشد که هر کدام شامل کدها ، نرم افزار و مستندات مورد نیاز باشند . در آن تعدادی پروژه بازی مانند hello نیز هست . پوشه hello را باز کنید .

دو فایل در آن است که هر دو از نوع فایل متنی هستند . یکی از آنها Makefile است ، هر پروژه یک Makefile دارد که در آن اطلاعاتی قرار دارد و کامپایلر از آنها برای ساختن فایل باینری بازی استفاده می کند . در آن یک فایل hello.c هم وجود دارد که کدهای بازی در آن است . توجه کنید که حجم آن زیاد نیست چون بیشتر کارهایی که باید انجام شود در پوشه kernel ذخیره شده است .
ابتدا یه نگاهی به Makefile بیندازیم .

فایل makefile مربوط به hello world شامل لیست بزرگی از VARIABLE هاست ( که باید با حروف بزرگ نوشته شوند ) و مقادیر آنها که بعد از علامت = قرار می گیرند . چهار تا از مهمترین برچسبها در بالا قرار گرفته اند .
1- PROJECT : اول از همه هر پروژه به یک نام نیاز دارد ، مثلا hello .توجه کنید که نام پروژه باید هم نام با فایل .c باشد که در پوشه پروژه قرار گرفته . تا زمانی که نمی خواهید نام را تغییر دهید به این قسمت کاری نداشته باشید .
2- VIDEOMODE : بعدا این قسمت را مفصل توضیح خواهیم داد . این قسمت به کرنل می گوید که از چه مد گرافیکی می خواهیم استفاده کنیم . مد 1 فقط از tile استفاده می کند و مد 2 از tile + sprite استفاده می کند ( البته مد های دیگری هم وجود دارد ) . این قسمت را هم تغییر ندهید.
3- AVRDUDE_PROGRAMMER : این قسمت برنامه ریزی که در قسمت avrdude command line استفاده می کنید را مشخص می کند .اگر شما یک کابل FTDI یا STK500v1 دارید یا از یک usbtinyisp استفاده می کنید آنرا به usbtiny تغییر دهید یا هر برنامه ریزی که از آن استفاده می کنید .
4- AVRDUDE_PORT : این قسمت پورت ارتباطی با برنامه ریزی که در بالا تعیین کردید انتخاب می کند .گزینه های رایج usb ، COM1 ، LPT1 و غیره است . اگر پورت COM شما متفاوت است مطمئن شوید که آنرا انتخاب کرده اید .
بعد از اینکه Makefile را تعریف کردید آنرا ذخیره کنید و ببندید . حالا command line را باز کنید و با دستور cd به دایرکتوری دموی خود بروید و دستور make را اجرا کنید تا برنامه make با استفاده از Makefile دموی hello world را کامپایل کند .

یک سری حروف شکسته در زمان اسکرول شدن صفحه دیده میشوند . اگر دقت کنید می بینید که فایل hello.c با استفاده از uzeboxCore ، uzeboxSoundEngineCore و uzeboxVideoEngineCore که کرنل را می سازند کامپایل می شود .
اگر کامپایل به درستی انجام شود ( همان طور همیشه درسته ) باید میزان حافظه مورد استفاده نشان داده شود . شما فقط باید به اولین عدد توجه کنید که نشان می دهد فقط 22% از حافظه در دسترس پر شده . اگر زمانی به نزدیکی 90% رسید باید نگران شوید که چرا بازی شما اینقدر بزرگ شده است ولی متاسفانه این خیلی طول میکشد که به این حد برسید .
سپس باید firmware را به کنسول انتقال داد .حالا باید در صفحه تلویزیون این عبارت را ببینید !

آفرین ، شما تونستید اولین بازی خودتون رو کامپایل کنید وبه کنسول انتقال بدید …

مرحله بعد این است که در برنامه تغییراتی بدهیم که عبارت دیگری را نشان دهد این کار اصلا سخت نیست . اول hello.c را در یک ویرایشگر باز کنید مثلا در Programmers Notepade یا XCode ، بستگی به خودتان دارد .

#include <stdbool.h> 
#include <avr/io.h> 
#include <stdlib.h> 
#include <avr/pgmspace.h> 
#include "kernel/uzebox.h" 
#include "data/fonts.pic.inc" 

const char strHello[] PROGMEM = "HELLO WORLD FROM THE FUZEBOX!"; 

int main(){ 
 SetFontTable(fonts);
 ClearVram();
 Print(7,12,strHello);

 while(1);

 } 

جند خط اول مربوط به include هاست ، فایل هایی که برای کامپایل شدن این مثال مورد نیاز هستند . بیشتر آنها استاندارد های برنامه نویسی AVR هستند و اکثرا نادیده گرفته میشوند . یکی از آنها fonts.pic.inc است که جدول فونت ها را شامل می شودو تعیین می کند که هر متن به چه صورت روی صفحه ظاهر شود .
اولین خطی که واقعا جالبه این خطه :

 const char strHello[] PROGMEM = "HELLO WORLD FROM THE FUZEBOX!"; 

در حالت کلی متغییرها در داخل حافظه داینامیک RAM نگه داری میشوند تا مقدار دهی شوند و یا مقدار جدید بگیرند . در حالی که فقط 2K RAM در اختیار داریم در مقابل 64K Flash . بخاط اینکه رشته هایی که نمایش داده می شوند ثابت هستند ( در هیچ حالتی دوباره تعریف نمی شوند ، فقط نمایش داده می شوند ) میتوانیم آنها را در حافظه فلش ذخیره کنیم بجای RAM ، برای این کار از کلمه کلیدی const قبل از رشته استفاده کردیم و کلمه کلیدی PROGMEM بعد از نام متغییر نوشته شده تا در حافظه فلش ذخیره شود . عبارت به این صورت نمایش داده می شود .

int main(){ 
 SetFontTable(fonts); 
 ClearVram();
 Print(7,12,strHello);

 while(1);

 } 

Main زمانی که fuzebox بوت می شود اجرا می شود .خط اول واضح است و جدول فونت را می سازد که به ما اجازه میدهد از فونت از پیش تعریف شده در زمان نوشتن پیام استفاده کنیم . خط دوم صفحه را پاک می کند ، مطمئن میشود که چیزی در زمان بوت شدن باقی نمانده باشد .
خط سوم جایی ست که اتفاقات خارق العاده رخ می دهد . تابع Print(x,y,string)در کرنل تعریف شدهو به ما اجازه میدهد به سادگی یک رشته را در محلی که میخواهیم نمایش داده شود .توجه کنید که مختصات به پیکسل نیست بجای آن تعداد tileهاست و 40×28 تا tile وجود دارد ( بعدا در موردش بحث می کنیم ) .
خط آخر یک حلقه است که کاری انجام نمی دهد . اگر اینترفیس یا منطق بازی را می خواهید در کد بنویسید می توانید اینجا بنویسید اما در این دمو فقط یک رشته نشان داده می شود .
حالا نوبت شماست !
خوب حالا که Hello World رو امتحان کردید این کار ها رو هم انجام بدید :
1- پیام رو تغییر بدید تا چیز دیگه ای رو نشان بدهد.
2- جای پیام را به قسمت دیگری از صفحه تغییر بدهید .
3- یک خط دیگر به متن اظافه کنید .
بعد از هر تغییر دوباره کامپایل کنید و آنرا به کنسول انتقال دهیدتا ببینید کار می کند یا نه . اگر مشکلی داشتید به برنامه hello.c اصلی مراجعه کنید و ببینید کجا اشتباه کردید.

منبع :

http://www.ladyada.net/make/fuzebox/helloworld.html

Advertisements

دربارهٔ DeltaCode

Somewhere near the sky Far away from people Far away from noise Somewhere near yourself

Posted on ژوئن 24, 2011, in AVR and tagged , , . Bookmark the permalink. بیان دیدگاه.

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: