ترجمه Nerdy Nights week 3
::: در حال بارگيري لطفا صبر کنيد :::
صفحه اصلي انجمن ورود عضويت خوراک نقشه تماس با ما
نام کاربري : پسورد : يا عضويت | رمز عبور را فراموش کردم

صفحه اصلي ? برنامه نویسی ? ترجمه Nerdy Nights week 3

تعداد بازديد : 259
نويسنده پيام
farid آفلاين



ارسال‌ها : 139
عضويت : 25 /2 /1393
محل زندگي : ارومیه
سن : 29
ياهو : krauser35@yahoo.com
تشکر ها: 90
تشکر شده : 148
ترجمه Nerdy Nights week 3
لینک مقاله اصلی : Nerdy Nights week 3

1. توضیح چند مفهوم ساده
بیت : کوچیکترین واحد محاسباتی در علم کامپیوتر هست که مقدارش 1 یا 0 میتونه باشه.
بایت : 8 بیت تشکیل یک بایت میدن. با یک بایت میشه در مجموع 256 حالت (از 0 تا 255) منحصر به فرد کدگذاری ایجاد کرد.
دستورالعمل : هر دستورالعمل به طور مجزا توسط پردازنده اجرا میشه.


2. ساختار کدنویسی
در زبان اسمبلی 5 نوع ساختار کدنویسی وجود داره که عبارت اند از :

2.1. رهنمود
رهنمودها با علامت نقطه شروع میشن و دستورات خاصی رو به اسمبلر میدن. برای نوشتن رهنمود یه بار دکمه تب رو میزنیم تا یه کمی فاصله از کنار ایجاد بشه. برای مثال رهنمود زیر باعث میشه که اسبملر کدهای بعدی در آدرس 8000 قرار بده :
کد:
.org $8000




2.2. ورچسب
ورچسب در نهایت توسط اسمبلر تبدیل به یه آدرس حافظه میشه. با استفاده از ورچسب بخش های مختلف برنامه خواناتر میشن. در انتهای ورچسب حتما باید از علامت دوقطه استفاده کرد. برای مثال loopcode یک ورچسب هست :

کد:
.org $8000
loopcode:



2.3. عملگر
عملگر دستوری هست که توسط پردازه اجرا میشه. عملگرهای اسمبلی دستوراتی سه حرفی هستن که به اصطلاح اوپکد گفته میشن. پردازنده 6502 کلا 56 تا دستور اوپکد داره. برای نوشتن عملگر ابتدا دکمه تب رو میزنیم تا یه کمی فاصله از کنار ایجاد بشه. برای مثال دستور JMP یه عملگر هست که باعث پرش به ورچسب loopcode میشه :

کد:
.org $8000
LoopCode:
JMP LoopCode



2.4. عملوند
به داده هایی که عملگر بر روی اونا کار خاصی انجام میده عملوند میگن. اگه عملوند با علامت #$ شروع بشه یعنی داده عددی واقعی هست ولی اگه با علامت $ شروع بشه یعنی آدرس حافظه پردازنده هست. در مثال زیر FF یه عملوند از نوع داده عددی واقعی هست :


کد:
.org $8000
LoopCode:
LDA #$FF
JMP LoopCode



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


کد:
.org $8000
LoopCode:
LDA #$FF ;loads FF into accumulator
JMP LoopCode



3. آدرس های حافظه پردازنده 6502
پردازنده 6502 دارای قدرت پردازش هشت بیتی هست. حداکثر تا 64 کیلوبایت ظرفیت حافظه داخلی داره که به بخش های زیر تقسیم میشه :
کد:
$0000 - $0800 : رم داخل کنسول
$2000 - $2007 : درگاه گرافیک
$4000 - $4017 : درگاه دسته و آهنگ
$6000 - $7FFF : رم داخل کارتریج
$8000 - $FFFF : کدهای برنامه بازی



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

4.1. ثبات A
از این ثبات برای لود، ذخیره، مقایسه و انجام اعمال ریاضی بر روی داده استفاده میشه. به عنوان مثال دستور زیر باعث لود شدن مقدار FF به ثبات A میشه :
کد:
LDA #$FF




4.2. ثبات X
از این ثبات به عنوان شاخصی برای شمارش تعداد حلقه ها استفاده میشه. به عنوان مثال دستور زیر باعث افزایش مقدار موجود در ثبات X میشه :
کد:
INX




4.3. ثبات Y
ثبات Y هم کاربرد کمکی برای ثبات های A و X داره. به عنوان مثال دستور زیر باعث انتقال اطلاعات ثبات A به Y میشه :
کد:
TYA




4.4. ثبات P
این ثبات اطلاعات مربوط به وضعیت پردازنده رو نگهداری میکنه. اجرای دستورات مختلف باعث تغییر در مقدار این ثبات میشن. همون طور که قبلا هم گفته شد این ثبات 8 بیتی هست. هر بیت این ثبات نشان دهنده وضعیت خاصی از پردازنده هست.


5. دستورات اوپکد 6502
در ادامه چند تا از دستورات متداول و کاربردشون رو توضیح میدم.

کد:
LDA #$0B

مقدار عددی 0B رو به داخل ثبات A لود میکنه.

کد:
STA $2000

مقدار موجود در ثبات A رو در آدرس افست $2000 ذخیره میکنه.

کد:
TAY

مقدار ثبات A رو داخل ثبات Y ذخیره میکنه.

کد:
INX

مقدار موجود در ثبات X رو یک واحد افزایش میده.

کد:
JMP $C000

به پردازنده دستور میده که به آدرس $C000 بپره و ادامه برنامه رو از اونجا اجرا بکنه


6. ساختار کدنویسی
کدها داخل یه فایل نت پد با پسوند txt نوشته میشن.
در کدنویسی بخش هایی وجود دارن که ثابت هستن و باید از همون ابتدا به طور صحیح نوشته بشن.
بعد از اتمام کدنویسی با استفاده از اسمبلر کدها تبدیل به فایل بازی میکرو با پسوند NES میشه.

6.1. هدر فایل
در ابتدای فایل این بخش ثابت به صورت زیر باید نوشته بشه که میتونین از همینجا کپی پست بکنین.
کد:

.inesprg 1 ; 1x 16KB PRG code
.ineschr 1 ; 1x 8KB CHR data
.inesmap 0 ; mapper 0 = NROM, no bank swapping
.inesmir 1 ; background mirroring

6.2. بانک صفر برای کدنویسی بازی
کدهای برنامه در بانک صفر و از آدرس $C000 شروع میکنیم :
کد:

.bank 0
.org $C000
NMI:
RTI

RESET:
SEI ; disable IRQs
CLD ; disable decimal mode
LDX #$40
STX $4017 ; disable APU frame IRQ
LDX #$FF
TXS ; Set up stack
INX ; now X = 0
STX $2000 ; disable NMI
STX $2001 ; disable rendering
STX $4010 ; disable DMC IRQs

vblankwait1: ; First wait for vblank to make sure PPU is ready
BIT $2002
BPL vblankwait1

clrmem:
LDA #$00
STA $0000, x
STA $0100, x
STA $0200, x
STA $0400, x
STA $0500, x
STA $0600, x
STA $0700, x
LDA #$FE
STA $0300, x
INX
BNE clrmem

vblankwait2: ; Second wait for vblank, PPU is ready after this
BIT $2002
BPL vblankwait2

6.3. بانک یک برای وقفه ها
در بانک یک آدرس سه نوع وقفه نوشته میشه. فعلا فقط به وقفه RESET دقت بکنین که در واقع همون آدرس آغازین اجرای دستورات هست.
کد:

.bank 1
.org $FFFA ;first of the three vectors starts here
.dw NMI ;when an NMI happens (once per frame if enabled) the
;processor will jump to the label NMI:
.dw RESET ;when the processor first turns on or is reset, it will jump
;to the label RESET:
.dw 0 ;external interrupt IRQ is not used in this tutorial


6.4. بانک دو برای معرفی فایل گرافیگ
در
بانک 2 که مربوط به گرافیک هست باید یه فایل گرافیک خارجی با پسوند chr به
برنامه معرفی بکنیم. در اینجا برای راحتی کار از فایل chr بازی قارچ خور
استفاده میکنیم که حاوی گرافیک مربوط به این بازی هست. بنابراین بخش مربوط
به گرافیگ رو این طوری مینویسم :
کد:

.bank 2
.org $0000
.incbin "mario.chr" ;includes 8KB graphics file from SMB1



7. نوشتن اولین برنامه 6502
به
عنوان اولین برنامه سعی بکنین کل صفحه رو به رنگ آبی در بیارین! برای این
کار باید از آدرس $2001 که یکی از درگاه های گرافیک هست استفاده بکنیم.
کافیه که کد رنگ مورد نظر رو به این آدرس ذخیره بکنیم. با این کار کل زمینه
به اون رنگ در میاد. نوشتن این برنامه به این صورت خواهد بود که باید در
ادامه کدهای ثابت بانک یک قرار داده بشه :
کد:

LDA #$80 ;intensify blues
STA $2001

اگه به جای 80 از 40 یا 20 استفاده بکنین پس زمینه به ترتیب به رنگ سبز یا قرمز در میاد.


8. دانلود اسمبلر به همراه اولین برنامه
داخل پوشه دانلود شده فایل های زیر موجود هستن :
NESASM3.exe : اسمبلر 6502 هست و دستورات اسمبلی رو به زبان ماشین تبدیل میکنه تا توسط پردازنده قابل خواندن باشه.
background.asm : این فایل رو میتونین با نت پد باز بکنین. کدهای اولین برنامه 6502 داخلش هست.
mario.chr : فایل گرافیک هست که از بازی قارچ خور استخراج شده.
Compile.bat
: با اجرای این فایل در واقع دستور NESASM3 background.asm اجرا میشه و
باعث میشه فایل NES از روی فایل background.asm ایجاد بشه.



جمعه 01 اسفند 1393 - 03:40
وب کاربر ارسال پيام نقل قول تشکر گزارش
براي نمايش پاسخ جديد نيازي به رفرش صفحه نيست روي تازه سازي پاسخ ها کليک کنيد !



برای ارسال پاسخ ابتدا باید لوگین یا ثبت نام کنید.