اسمبلی ۶۵۰۲: زبان بازیهای دهه ۸۰

ash|ae|ash

کاربر سایت
Jul 22, 2013
94
در آن سالها همه ی کنسولها و کامپیوترهای خانگی --- همه نه، بیشتر --- از پردازنده ی CMOS 6502 استفاده میکردند. این پردازنده بسیار ارزان بود و نسبت به پردازنده های اینتل و موتورولا Instruction Set (مجموعه دستور) کمتر و فشرده تری داشت. نوشتن برنامه برای این پردازنده به دو صورت ممکن بود:
۱- استفاده از زبان BASIC که سازنده در اختیار کاربر میگذاشت.
۲- استفاده از زبان 6502 Assembly.

زبان بیسیک کند بود. خیلی ازکارها را نمیتوانست با آن انجام داد. زبان بیسیک بیشتر برای مراوده با کامپیوتر بود تا نوشتن بازی و برنامه. و همچنین کنسولها Interpreter بیسیک نداشتند.

اولین کنسول بازی ای که ازین پردازنده استفاده کرد پدر کنسولهای کارتریجی یعنی Atari 2600 بود. بعد از آن Commodore 64 و بعد از آن NES که در ایران به میکرو معروف است.

نوشتن بازی با زبان اسمبلی ۶۵۰۲ اینگونه است که، هر چیپست و Peripheral در بورد کنسول یا کامپیوتر یک نشانی حافظه (Memory Address) دارد. و میتوان با لود کردن یک ارزش ۸ بیتی (برای همین به این پردازنده ۸ بیت میگویند) در این نشانی حافظه یک چیزی را در صفحه نشان دهی یا زن دکمه ای در کیبود را چک کنی و...

مثلا کد زیر را در نظر بگیرید:

Code:
loop:
ldx #0
lda (source mem addr), x,
sta (destination mem addr), x
inx
cpx #10
bne loop

در زبانهای جدید معمولا از یک حلقه ی for برای این کار استفاده میشود. اما در این زبان ما میاییم از رجیستری X پردازنده استفاده میکنیم تا با فرمان lda از نشانی حافظه ای مثلا $FFCFFFCC یک ارزش مثلا عدد ۰ ($00) را به رجیستری A لود کرده، و سپس از همین رجیستری با استفاده از فرمان sta ارزش را به یک نشانی حافظه ی دیگر ببریم. . تکرار ۱۰ بار. ما با فرمان cpx رجیستری X را با عدد ده دهی ۱۰ مقایسه میکنیم و bne (branch on not equal) انجام میدهیم اگر نبود این عدد. با افزایش یافتن x نشانی های حافظه ی دقیقا بعد از آن لود و استور میشوند.

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

Code:
arr = []
for x in range(10):
arr[x] = x * 2 #or any random value

جالب است بدانید که پردازنده ی ۶۵۰۲ در آینده هم استفاده میشود! در سال ۳۰۰۰ تمام رباتهایی که پروفسور فارنسوورت خواهد ساخت ازین سی پی یو استفاده خواهند کرد!

bender.jpeg



اما کنسولها و کامپیوترهای خانگی تنها پلتفورمهایی نبودند که از این پردازنده استفاده میکردند. میخواهم شما را با Game Board های دهه ی ۸۰ آشنا کنم. این گیم بوردها از لحاظ اینپوت و اوتپوت بسیار محدود بودند --- مثلا یک صفحه کلید ارقامی و یک صفحه ال ای دی.

game_board_2.jpg



از این گیم بوردها یک کتاب باقی مانده که میتوانیددر لینک زیر بخوانیدش:

6502 Games by Rodnay Zaks : Rodnay Zaks : Free Download, Borrow, and Streaming : Internet Archive


این روزها خیلی ها هنوز ازین زبان برای Retroprogramming استفاده میکنند. شاید بپرسید فرق Retro با قدیمی چیست؟ جواب اینجاست که به چیزهای قدیمی ای که باحال هستند رترو میگوییم. مثلا ورژن ۱ کامپایلر C++ قدیمیست. اما کمدور بیسیک رتروست!

این روزها میتوان از KickAssembler برای CrossAssembly این زبان استفاده کرد. یا اگر میخواهید یک بازی میکرو بنویسید از NESASM استفاده کنید.

مرسی که مطلب مرا خواندید.


منبع: بلاگ خودم
 

کاربرانی که این قسمت را مشاهده می‌کنند

Top
رمز عبور خود را فراموش کرده اید؟
or ثبت‌نام سریع از طریق سرویس‌های زیر