HomeSearchRegisterLog in

Share | 
 

 ترجمه Nerdy Nights week 3

View previous topic View next topic Go down 
AuthorMessage
Farid
avatar

Posts : 98
Join date : 2010-07-25
Age : 32
Location : IRAN
درجه : سرباز یکم

درجه : سرباز یکم


PostSubject: ترجمه Nerdy Nights week 3   2015-02-19, 9:05 pm

لینک مقاله اصلی : Nerdy Nights week 3

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


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

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



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

Code:
  .org $8000
loopcode:

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

Code:
  .org $8000
LoopCode:
    JMP LoopCode

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


Code:
  .org $8000
LoopCode:
    LDA #$FF
    JMP LoopCode

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


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

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


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

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



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



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



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


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

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

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

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

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

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


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

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

  .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 شروع میکنیم :
Code:

  .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 دقت بکنین که در واقع همون آدرس آغازین اجرای دستورات هست.
Code:

  .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 بازی قارچ خور
استفاده میکنیم که حاوی گرافیک مربوط به این بازی هست. بنابراین بخش مربوط
به گرافیگ رو این طوری مینویسم :
Code:

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

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

  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 ایجاد بشه.


Last edited by Farid on 2015-02-27, 4:09 pm; edited 2 times in total
Back to top Go down
http://microbaz.blogfa.com
Shin Yahiko
avatar

Posts : 7
Join date : 2015-02-13
Age : 22
Location : Dark Hades
درجه : سرباز

درجه : سرباز


PostSubject: Re: ترجمه Nerdy Nights week 3   2015-02-20, 6:07 am

ایولا فرید دمت گرم عالی بود cheers
کامل میخونمش و بعد نظر میدمVery Happy
Back to top Go down
http://captaintsubasa.blogfa.com
 

ترجمه Nerdy Nights week 3

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

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