نوستالژی: زمانی که مردها هنوز مرد بودند! (بخش پایانی- هک‌های عمیق‌تر)

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


برنامه‌نویسی پیشرفته با Commodore 64 Programmers Reference Guide

در کلاس‌های مدرسه و زمانی که با دوستان در مورد کامپیوترهای‌مان و بازی‌ها و غیره حرف می‌زدیم، یکی از دوستان به کتاب «پیشرفته‌ای» اشاره کرده که به تازگی به دستش رسیده بود و دانش برنامه‌نویسی او را چندین پله ارتقا داده بود. با هزار خواهش و التماس توانستم آن را برای یکی دو روز امانت بگیرم. کتابی واقعی در کار نبود. کتاب واقعی را با فناوری فتوکپی (هنوز دستگاه به اصطلاح زیراکس که کیفیت بالاتری داشت همه‌گیر نشده بود و هزینه یک برگ زیراکس بیش از دو برابر فتوکپی بود!) تکثیر کرده بودند و در نبود صحافی‌های سیمی و فنری، آن را با منگنه کتاب دوخته بودند. شما فقط باید تصور کنید که از جلدی که در تصویر زیر می‌بینید، چه اثر سیاه و سفیدی بر روی یک مقوای کرم رنگ نقش می‌بندد!

c64-ProgrammersReferenceGuide

اما برخلاف ظاهر بدترکیب و مدت کوتاهی (کمتر از یک هفته) که آن را در اختیار داشتم، این کتاب تاثیر بسیار شدیدی روی دانش من از کامپیوتر (در مقیاس آن دوران) گذاشت. Commodore 64 Programmers Reference Guide در واقع کتاب مقدس برنامه‌نویسان کمودور بود:

مرجعی کامل برای درک کامل یک کامپیوتر.

چیزی که بعید می‌دانم در دنیای کنونی ما برای یک گوشی کوچک موبایل هم وجود داشته باشد. با این کتاب تازه فهمیدم که چیزی به اسم زبان ماشین هم وجود دارد. مفهوم IRQ و عملکردهای بیتی AND و OR را فهمیدم و مفاهیم پوینتر و ذخیره آدرس دو بایتی و بسیاری چیزهای دیگر را درک کردم. بارهای اولی که بازی‌های کمودور را LOAD می‌کردم با تصور این‌که با خواندن کد برنامه می‌توانم آن را درک کنم و تغییر دهم، دستور LIST را اجرا می‌کردم تا برنامه بازی را ببینم و غالبا تنها با یک خط روبرو می‌شدم:

10 SYS 2061

بعد از خواندن کتاب تازه فهمیدم کل برنامه بازی به زبان ماشین در حافظه سیستم بار شده و این دستور تنها کنترل اجرا را به روالی در آدرس 2061 منتقل می‌کند. اما چرا 2061؟

صرفه‌جویی در حافظه، برنامه‌ای که خودش را تغییر می‌داد

در همین کتاب خواندم که کمودور باز هم برای صرفه‌جویی در حافظه، هیچ‌گاه مانند کامپیوترهای دیگر سورس برنامه را به صورت متن نگه‌داری نمی‌کند. بلکه هر یک از کلمات کلیدی و عملگرها و غیره را با یک کد عددی یک بایتی جایگزین می‌کند. فکر می‌کنم شروع این اطلاعات از آدرس ۲۰۴۹ حافظه بود. به این ترتیب هر خط دستور مانند

10 FOR I=1 TO 100

به جای این‌که با احتساب فضاهای خالی ۱۷ کاراکتر جا بگیرد، تبدیل می‌شد به ۹ بایت کد. دو بایت برای شماره خط، دو بایت برای آدرس شروع خط بعدی، یک بایت کد FOR، یک بایت I، یک بایت علامت مساوی، یک بایت عدد ۱، یک بایت کد TO و یک بایت هم ۱۰۰. وقتی این را فهمیدم به این فکر افتادم که احتمالا می‌شود با چند دستور POKE و عوض کردن خانه‌های مناسب حافظه، خود کدهای برنامه در حال اجرا را عوض کرد به گونه‌ای که در هر بار اجرا عملکردی متفاوت داشته باشد.

escher-hands

برنامه‌ای برای این کار نوشتم و آنقدر با شماره خط‌ها و علامت‌های «:» اضافی (جدا کردن دستورات در یک خط) بازی کردم تا بالاخره تغییر محتویات آدرس‌ها Syntax برنامه را خراب نمی‌کرد. حالا برنامه‌ای داشتم که در یک بار اجرا عدد ۱ را چاپ می‌کرد و بار دوم عدد ۲ را و این کار را با متغیرها انجام نمی‌داد. سورس برنامه عوض می‌شد و اگر از آن LIST می‌گرفتم، هر بار لیستی جدید را به نمایش می‌گذاشت! البته هیچ کاربردی برای این برنامه متصور نبودم، اما همین الان با خواندن مطلب ویکی‌پدیا در مورد self-modifying code فهمیدم که چنین برنامه‌هایی می‌توانند کاربردهای جالبی داشته باشند!

احتمالا الان می‌توانید حدس بزنید که ۲۰۶۱ از کجا آمده است. برنامه بیسیک تنها برای این نوشته شده بود که برنامه اصلی بازی به زبان ماشین را صدا بزند. برنامه‌نویسان هم برای حداکثر استفاده از حافظه، روال‌های زبان ماشین را درست از اولین آدرس خالی بعد از کدهای بیسیک ذخیره کرده بودند.

به هر حال این کتاب و آشنایی با زبان اسمبلی و کدهای ماشین و خانه‌های حافظه باعث شد که به دنبال برنامه اسمبلر بگردم که البته پیشاپیش بگویم همانند بازی‌ها و برنامه‌های خودتغییر، هیچ‌گاه چیز خاصی از آن حاصل نشد! نخستین برنامه‌های اسمبلر را باید مثل همه برنامه‌ها از روی کاست می‌خواندم، اما مشکل طولانی بودن بارگذاری و محدودیت امکانات باعث شد به سراغ ابزاری سریع‌تر و با قابلیت‌های بیشتر بروم.

کارتریج ACTION-VI : دنیای جدید

در جست‌وجوی یک کارتریج اسمبلر به کارتریج اکشن ۶ برخورد کردم (که باز هم مطابق دید عموم مردم از کمودور ۶۴ به عنوان یک کنسول بازی) برای «نسوز کردن بازی‌ها» مشهور شده بود. اما ابزاری بسیار قدرتمند بود و توانایی‌هایی بسیار بیشتر از اجرا کردن کدهای تقلب بازی‌ها داشت.

 

ActionReplay-6

این کارتریج یک برنامه اسمبلر سریع با خودش داشت. امکاناتی برای فرمت کردن و آماده‌سازی دیسکت‌ها، گرفتن نسخه‌های پشتیبان، دستکاری تنظیمات حافظه و نصب یک Fast Loader فراهم می‌کرد و از همه مهم‌تر سیستمی داشت که می‌توانست محتوای حافظه RAM کمودور را به اصطلاح فریز کرده و بعد از ویرایش خانه‌های دلخواه دوباره کمودور را وادار به ادامه کارش کند. یکی از کلیدهایی که بالای کارتریج می‌بینید (معمولا سمت راستی) دکمه ریست است و دیگری دکمه فریز کردن حافظه. تصویر زیر صفحه آغازین کمودور را هنگام زدن کلید ریست این کارتریج نشان می‌دهد.

ActionReplay6-ScreenShot

در این صفحه من هیچ‌گاه از گزینه CONFIGURE MEMORY سر درنیاوردم و از آن استفاده نکردم. اما در قسمت UTILITIES یک اسمبلر سریع و راحت وجود داشت که با آن اسمبلی را هم کمی تجربه کردم.

بالن هوای گرم، با سرعت نور

اولین برنامه کاملی که با دستورهای اسمبلی نوشتم، اسپرایت بالن مشهور کمودور را در بالا سمت چپ صفحه نمایش می‌داد و سپس در یک حلقه هر بار یک واحد به x و y آن اضافه می‌کرد تا به سمت پایین سمت راست صفحه حرکت کند. البته اول اسپرایت را با برنامه اسپرایت ادیتوری که خودم نوشته بودم، ساختم و در خانه‌های حافظه گذاشتم و بعد با اسمبلر کارتریج مختصات‌دهی آغازین و روال حلقه را پیاده کردم. بار اول با این که برنامه کامل و بی‌اشکال بود هیچ چیزی روی صفحه ظاهر نشد. بعد از چندین بار آزمایش و خطا فهمیدم که سرعت این برنامه به حدی زیاد است که بالن حرکت را انجام می‌دهد، اما من آن را نمی‌بینم.

balloon

برای کند کردن سرعت برنامه دو حلقه تو در توی ۲۵۶ تایی خالی را برای تلف کردن وقت داخل حلقه اصلی بازی گذاشتم تا موفق شدم بالن را ببینم. اما باز هم بالن با سرعت نور قطر صفحه را طی می‌کرد و برنامه تمام می‌شد. به این فکر افتادم که برنامه ۸ وزیر را برای سرعت بالا با اسمبلی بنویسم ولی سواد واقعی من در اسمبلی به چند دستور JMP و CMP و ADD محدود می‌شد که برای برنامه‌ای پر از شرط و محاسبات مانند ۸ وزیر بسیار کم بود.

مالتی تسکینگ واقعی با IRQ

احتمالا می‌دانید که وقفه‌ها یا IRQ (سرنام Interrupt ReQuest) روال‌هایی هستند که به صورت منظم و در فواصل زمانی مشخص توسط پردازنده کامپیوتر اجرا می‌شوند.  دلیل این که وقفه نامیده می‌شوند این است که پردازنده در این فواصل زمانی برنامه در حال اجرا را متوقف کرده و روال‌های IRQ را اجرا می‌کند و دوباره به سراغ برنامه اصلی باز می‌گردد. استفاده از وقفه‌ها بیشتر به دردبرنامه‌نویس‌های سیستم می‌خورد که توسط آن‌ها تمام مدت ابزارهای جانبی را برای دریافت یا ارسال اطلاعات کنترل کنند یا در بازی‌ها و برنامه‌های بی‌درنگ (Real Time) شرط‌های حیاتی را به صورت مداوم چک کنند. مثلا سیستم پیش‌فرض کمودور از یکی ازهمین وقفه‌ها برای نمایش مکان‌نمای چشمک‌زن استفاده می‌کرد.

IRQ

برای امتحان کردن این قابلیت عجیب هم تنها هنری که توانستم به خرج دهم این بود که روالی را به اسمبلی نوشتم که دایما بیت‌های کنترلی کلیدهای SHIFT و CONTROL را تست می‌کرد و در صورت فشرده شدن این کلیدها به ترتیب رنگ زمینه متن و رنگ حاشیه آن را عوض می‌کرد. این چیزی بود که در جمع دوستان هم کسی به سراغش نرفته بود و برای همه‌مان جذاب بود که سیستم در عین حالی که وظایف معمولش را انجام می‌دهد، بدون هیچ کد مریی کار دیگری را هم به صورت همزمان در دست اجرا دارد.

هک آخر، بازی دوست‌داشتنی

و اما آخرین و از دید خودم جذاب‌ترین هکی که انجام دادم، به قابلیت فریز کردن حافظه کمودور توسط کارتریج اکشن ۶ مربوط بود و بازی Arkanoid که در قسمت اول از آن صحبت کردم. اندکی پس از شروع بازی، کلید فریز را می‌زدم و وارد منوهای اکشن ۶ می‌شدم. آن‌جا گزینه‌ای برای نسوز کردن بازی وجود داشت. سیستم کار به این شکل بود که یک بار محتویات حافظه را بررسی (یا ذخیره) می‌کرد. بعد از شما می‌خواست به بازی برگردید و عمدا یک بار ببازید و دوباره حافظه را فریز کنید. وقتی این کار را می‌کردید دوباره حافظه را چک می‌کرد تا ببیند محتویات کدام خانه‌ها عوض شده است. معمولا با همان یک بار و گه‌گاه با دوبار تکرار این فرآیند خانه‌ای که اعداد مربوط به «جان» کاراکتر بازی در آن ذخیره شده بود پیدا می‌شد و کارتریج از آن به بعد محتویات آن خانه را ثابت نگه می‌داشت. یعنی بازی شما دیگر نسوز شده بود!

arkanoid_level_10

اما باز هم بازی کردن ۳۲ مرحله Arkanoid با احتساب هر مرحله ۲ یا ۳ دقیقه، آن هم بدون SAVE کلی زمان می‌برد. هک اصلی این بود که من بعد از نسوز کردن بازی به سراغ محتویات حافظه تصویر می‌رفتم و آن‌ها را پاک می‌کردم. اگر خاطرتان مانده باشد در قسمت قبلی گفتم که پس‌زمینه‌ها و برخی اجزای بازی‌ها با فونت‌ها ساخته می‌شدند. من چیزی مانند دستور cls را اجرا می‌کردم و خلاص! همه آجرها از بین رفته بودند. فقط کافی بود در هر مرحله یک بار فریز کنم، حافظه تصویر را پاک کنم و بعد از برگشت به بازی عمدا بسوزم.

arkanoid_last_level
غول مرحله آخر

جان‌هایم که تمام نمی‌شد، اما بعد از سوختن و شروع مجدد مرحله، کامپیوتر متوجه می‌شد که تمام آجرها پاک شده و من به مرحله بعد می‌رفتم! تنها در برخی مراحل که حریف‌های متحرک هم وجود داشتند، مجبور بودم نهایتا ۵ یا ۶ ضربه موفق (به آن اسپرایت‌ها) بزنم تا آن مرحله هم تمام شود. فقط مرحله آخر بود که در ساخت غول آن از اسپرایت و آجر و غیره خبری نبود و این مرحله را باید حتما به صورت عادی رد می‌کردم. به این ترتیب من تقریبا در ۹۰ درصد اوقات بازی را تا آخر تمام می‌کردم و بلند می‌شدم! باید اعتراف کنم این کار به خصوص در جمع‌های فامیلی، باعث می‌شد حس یک گیک تمام عیار را داشته باشم!

پایان داستان

شاید شما هم کنجکاو باشید که بر سر این ابزار عزیز چه آمد! واقعیت چندان هم جذاب نیست! حدود سال ۸۱ بود، ده سال از خرید کمودور می‌گذشت و در دوران پادشاهی پنتیوم ۲ و ۳ مدت‌ها بود سراغش نرفته بودم. آن زمان هم هیچ‌گاه فکر نمی‌کردم چنین حس نوستالژیکی نسبت به این اولین کامپیوترم پیدا کنم. به همین دلیل آن را با همه کارتریج‌ها و نوارها و دسته‌های بازی در اصفهان به قیمت ۱۰۰۰۰ تومان فروختم. کاری که اکنون حس می‌کنم از انجامش به شدت پشیمانم!

c64_Pack


بعید می دانم کسی از خوانندگان علاقه‌ای به آزمودن سیستمی به این قدمت داشته باشد، اما اگر دوست داشتید کمی با پیرمردهای عصر کامپیوتر و نیای بزرگ پی‌سی‌ها سروکله بزنید می‌توانید یک امولاتور خوب را در این آدرس بیابید. بازی‌های بسیاری در این آدرس موجود است و برنامه‌ها را هم با کمی جست‌وجو در سایت‌های طرفداران کمودور (مثل این) پیدا خواهید کرد.

به هر حال در این چهار پست، با پررنگ‌ترین خاطرات من از آن دوران خوش همراه بودید. حداقل در لحظه‌ای که این مطالب را می‌نویسم فکر نمی‌کنم هیچ ابزار، سرگرمی، کامپیوتر یا چیز دیگری تا این اندازه برایم خاطره‌انگیز بوده باشد یا از این به بعد هم بتواند باشد. اما از کجا معلوم، شاید ۲۰ سال دیگر خاطره نوشتن همین پست هم داستانی نوستالژیک باشد که برای نسلی کوچک‌تر تعریف می‌شود.

تا آن زمان، با ماشین‌های‌تان خوش باشید و لذت ببرید!

نوستالژی: زمانی که مردها هنوز مرد بودند! (بخش سوم- معنای قدیمی هک)

بعد از دو بخشی که اشاره‌ای داشتند به سخت‌افزار و نرم‌افزار در آن دوران خوش گذشته، می‌خواهم از عمیق‌ترین لذت‌ها و یادگیری‌های آن دوره حرف بزنم. از لذت برنامه‌نویسی و سر و کله زدن با ماشین‌ها، چیزهایی که احتمالا بسیاری از گیک‌ها موافق خواهند بود که تجربه‌های ناب هک به معنای واقعی (و نه مفهوم عام و هالیوودی آن) هستند. (اگر هنوز هم فکر می‌کنید هک یعنی به دست آوردن دسترسی غیرمجاز روی یک سیستم، بهتر است این‌ مطلب را به صورت کامل بخوانید و اگر فرصت کردید به این پادکست هم گوش بدهید.)

Glider

بد نیست همین ابتدای کار هم بگویم که این دو مقاله طولانی آخر پر است از جزییات فنی و توضیحات یک سیستم کامپیوتری که الان دیگر باید در موزه‌ها به دنبالش بگردید و اگر شما نمی‌دانید IRQ چیست، اسمبلی به چه دردی می‌خورد و یا اصلا برنامه‌نویسی را دوست ندارید، مطالب بسیار جذاب‌تری را می‌توانید روی اینترنت برای خواندن پیدا کنید.


پیش از همه باید اعتراف کنم که من هم مثل تمام هم سن و سال‌هایم در آن دوران، بیشتر از هر کار دیگری با کمودورم بازی کرده‌ام. تجربه‌هایی که قصد دارم این‌جا شرح‌شان دهم، بیشتر مدیون کلاس‌های کامپیوتری هستند که مدرسه ما از سوم راهنمایی به اجبار برای دانش‌آموزان برگزار می‌کرد و همین‌طور مدیون جمع کوچکی از دوستان که همه‌شان مثل من از سروکله زدن با سیستم‌های کامپیوتری لذت می‌بردند.

basic

به هر صورت این‌ها به یادماندنی‌ترین تجربه‌هایی هستند که من ۲۰ سال پیش با ابزار محاسباتی آن دوره داشته‌ام.

حلقه‌های تو در تو: هشت وزیر در یک بعدازظهر تابستانی

پیش از خریدن کمودور برنامه‌نویسی بیسیک را کم‌وبیش بلد بودم. همان‌طور هم که پیش‌تر گفتم اولین برنامه‌ای که روی کمودور نوشتم چاپ اعداد یک تا ده بود. اما نخستین تجربه جدی برنامه‌نویسی‌ام به مساله ۸ وزیر شطرنج برمی‌گردد. این مساله را در یکی از روزهای تابستان از زبان یکی از آشنایان که در خارج از کشور کامپیوتر می‌خواند شنیدم.

8-Queensهمان روز دست به کار شدم و الگویتم حل مساله را به ساده‌ترین و البته ابلهانه‌ترین شکل ممکن نوشتم. ۸ حلقه تودرتوی FOR که به ترتیب موقعیت وزیرها را در هر سطر مشخص می‌کرد. در نهایت در دل داخلی‌ترین حلقه کنترل می‌کردم که آیا این وزیرها یکدیگر را تهدید می‌کنند یا نه. با توجه به این که امتحان کردن این ۱۶ و خورده‌ای میلیون حالت برای کمودور با پردازنده ۴ مگاهرتزی و زبان BASIC V2 مدت مدیدی طول می‌کشید، برنامه را طوری نوشته بودم که با پیدا شدن اولین جواب تمام شود. به نتیجه رسیدن این برنامه یک ظهر تا شب تمام وقت گرفت و من بیش از هر چیز دیگری باید شکایت‌های سایر اعضای خانواده از اشغال بودن تلویزیون را تحمل می‌کردم! البته جواب هم چیزی گرافیکی مانند تصویر بالایی نبود، بلکه ۸ عدد بود که در ۸ سطر روی صفحه تلویزیون چاپ شد و آن‌ها را روی کاغذ یادداشت کردم.

هوش مصنوعی برای کمودور ۶۴؛ واقعا؟

هوش مصنوعی و کمودور ۶۴؟ این یکی دیگر برای خودم هم باور کردنی نبود. در آن سال‌ها مرکز آموزش انفورماتیک شرکت داده پردازی ایران سری کتاب‌هایی را در حوزه انفورماتیک منتشر می‌کرد. سه کتاب اول «انفورماتیک چیست؟»، «انفورماتیک در جهان» و «انفورماتیک از دیدگاه توسعه» نام داشتند. کتاب چهارم اما چیزی بسیار متفاوت بود.

AI-C64

کتاب «مبانی هوش مصنوعی برای کمودور ۶۴» ابتدا به تعریف هوش مصنوعی و صحبت از تورینگ و . . . می‌پرداخت و بعد به تدریج با جهت‌گیری به سمت بازی‌ها، رفتارها و خودگردان‌ها، پردازش زبان طبیعی، تشخیص الگوها و سیستم‌های مکاشفه‌ای برنامه‌های هوشمندتری را به نمایش در می‌آورد که همه با همان بیسیک بدوی کمودور ۶۴ نوشته شده بودند. معماهای کلاسیکی چون برج‌های هانوی، گشت زدن اسب روی صفحه شطرنج و چیزی شبیه برنامه مشهور الیزا (که قبلا هم در مورد آن نوشته‌ام) از جمله نمونه‌هایی هستند که خط به خط روی کمودور تایپ و اجرا کردم. هرچند از شیوه کار آن برنامه شبه لیزا نه آن زمان و نه حتی الان به درستی سر در نیاوردم. یکی از برنامه‌های دیگری که خاطره شفافی از آن دارم، برنامه‌ای بود که مشخصات یک لابیرنت را به صورت پر و خالی بودن خانه‌های یک صفحه شطرنجی می‌گرفت و با وارونه کردن کار (حذف خانه‌های بن‌ست به جای امتحان راه‌های باز) در نهایت مسیر درست را پیدا می‌کرد.

گرافیک: اشباح و کاراکترها

کمی بعد و البته در حین کار با برنامه‌هایی که فقط منطق برنامه‌نویسی‌شان مهم بود، به گرافیک و رنگ‌ها هم علاقه‌مند شده بودم. دوست داشتم حالا که منطق کار این سیستم را می‌فهمم، بتوانم برنامه‌هایم را با ظاهری جذاب‌تر و با رنگ و لعاب بیشتر همراه کنم. به همین دلیل تصمیم گرفتم به سراغ نوشتن یک بازی بروم. در کمودور ۶۴ وقتی می‌خواستید به سراغ گرافیک بروید، به دو چیز مختلف نیاز داشتید. تصاویر متحرک (کاراکترها، گلوله‌ها و . . . ) و تصویرهای ثابت یا همان پس‌زمینه‌ها.

مساله اول به کمک اسپرایت‌ها حل می‌شد. نقش‌هایی گرافیکی شبیه یک آیکن که می‌توانستند هر کجای صفحه ظاهر شوند و با تغییر مختصات‌شان حرکت کنند. البته خود کامپیوتر هم برخورد آن‌ها با یکدیگر یا با قسمت‌های مختلف پس‌زمینه را کنترل می‌کرد.

Sprite-C64

اسپرایت‌ها که هنوز در سیستم‌عامل مدرنی مانند آخرین نسخه Mac OSX Mavericks هم حضور دارند، در کمودور ۶۴ مستطیل‌هایی با ابعاد ۲۴ در ۲۱ خانه بودند. ۳ بایت در هر ردیف که باید نقاط پر و خالی آن را با ۱ و ۰ جایگزین می‌کردیم و بعد عدد را به مبنای ۱۰ می‌بردیم و آن را با دستور POKE در خانه حافظه متناظر با آن می‌نشاندیم. یادم هست که هنوز هیچ داستانی برای بازی در ذهن نداشتم و حتی نمی‌دانستم چند اسپرایت و به چه شکل‌هایی لازم دارم، اما فکر این‌که هر بار این مستطیل شطرنجی را بکشم و خانه‌ها را پر کنم و تبدیل مبنا و . . . اذیتم می‌کرد. اکنون برنامه‌های طراحی اسپرایت زیادی وجود دارند که این کار را به سادگی انجام می‌دهند اما همه به تازگی با زبان‌های جدید و صرفا برای کنجکاوی و یادآوری خاطرات نوشته شده‌اند.

SpriteEditor-C64اما من آن زمان با 180 خط برنامه بیسیک ادیتور اسپرایت خودم را نوشتم. این برنامه با جوی‌استیک کار می‌کرد و در سمت راست صفحه منویی برای انتخاب ابزار (نوشتن یا پاک کردن) و انتخاب رنگ داشت. البته به لحاظ گرافیکی از تصویر بالایی بسیار ضعیف‌تر بود! با حرکت جوی‌استیک نشانگر آن روی صفحه حرکت می‌کرد و با فشرده شدن تنها کلید جوی‌استیک خانه پر (یا خالی) می‌شد. بعد می‌توانستم اطلاعات این اسپرایت را ذخیره کرده و در بازی‌ام استفاده کنم. البته حتما باید اشاره کنم که بعد از تمام این کارها، هیچ‌وقت به نوشتن بازی یا حتی داستان آن نرسیدم!

اما مساله دوم پس‌زمینه‌ها بودند که به علت محدودیت‌های حافظه و امکانات پردازشی نمی‌توانستند تصاویر معمولی باشند. کمودور حالت گرافیکی و به اصطلاح بیت‌مپ هم داشت اما گرافیک بیشتر بازی‌ها از طریق دستکاری فونت‌ها و نوشتن متن روی صفحه نمایش بوجود می‌آمدند. چیزی شبیه به ASCII ART اما به شدت قدرتمندتر. برای درک بهتر، بد نیست اول نگاهی به PETSCII ها بیاندازید که معادل کدهای ASCII در کمودور بودند، بعد به این تصویر که کلیدهای کمودور را از نزدیک نشان می‌دهد دقت کنید.

C64-KeyboardCloseupبا نشانه‌هایی که کمودور به عنوان فونت و متن می‌شناخت، کافی بود اگر می‌خواهید دایره‌ای ترسیم کنید کلید کمودور را نگه دارید و در سطر اول U و I و در سطر دوم هم J و K را تایپ کنید تا با ترکیب چهار ربع دایره شکل شما کامل شود. حال اگر در نظر بگیرید که در کمودور ۶۴ می‌شد به سادگی علامت‌های کلیدها را تغییر داد و جایگزین کرد به تصویر کلی دست پیدا می‌کنید. هر بازی در ابتدا مجموعه‌ای فونت طراحی کرده و با آن‌ها صحنه بازی را می‌ساخت. مثلا یک کاراکتر را طوری تغییر می‌داد که با تکرار آن روی صفحه نمایش ظاهری شبیه آجر دیده شود و از آن برای ساخت یک دیوار استفاده می‌کرد. حال اگر قرار بود دیوار خراب شود کافی بود کاراکترها از روی صفحه نمایش پاک شوند! و البته اگر تا این‌جای مطلب را خوانده‌اید می‌دانید که کار با متن‌ها و کاراکترها برای کامپیوتر هزاران بار ساده‌تر از گرافیک است. کمی بعدتر می‌گویم که از این موضوع چطور برای تقلب در بازی Arkanoid استفاده می‌کردم.


از ابتدا قصد داشتم تمام داستان‌های برنامه‌نویسی و . . . را در قالب یک پست بیاورم. اما به دلیل طولانی شدن مطلب، آن را به دو قسمت تقسیم کرده‌ام. در قسمت بعدی از کارتریج اکشن ۶، زبان اسمبلی، برنامه‌هایی که خودشان را تغییر می‌دادند و چیزهایی مشابه حرف خواهم زد.

عزرائیل در دنیای دیجیتال

عزرائیل انگار بصورت تخصصی کارش رو روی جامعه IT متمرکز کرده! اگرچه باز هم مثل «ریچی» فقید سر و صدایی به پا نشد و نشریات چیزی ننوشتند، اما به هر حال بعد از یک هفته، تصمیم گرفتم حداقل خبر درگذشت «جان مک‌کارتی» رو اینجا بیارم.

مک‌کارتی در سال 1927 در بوستون به دنیا اومد. پدرش یک مهاجر فنلاندی و مادرش یک یهودی اهل لیتوانی بود. بعد از جابجایی‌های زیاد و زمانی که پدرش توی لس‌آنجلس کار پیدا کرد ساکن اونجا شدن. مک‌کارتی استعداد زیادی توی ریاضی از خودش نشون داد و در نوجوانی با خوندن کتاب‌های درسی ریاضیات کالج کالتک (Caltech) پیش خودش ریاضی رو یاد می‌گرفت. به همین خاطر وقتی سال 1944 در کالتک پذیرفته شد تونست دو سال اول دانشگاه رو رد کنه و مستقیما از سال سوم تحصیلش رو شروع کنه. توی همین کالتک بود که بعد از حضور در یک سخنرانی جان فون نویمان، تکلیف آینده کار و زندگی مک‌کارتی مشخص شد. اون مدرک دکترای ریاضیش رو هم در سال 1951 از دانشگاه پرینستون گرفت.

اون در سال 1958 اولین سمینار بین‌المللی در مورد هوش مصنوعی رو برگزار کرد و اصلا اصطلاح «هوش مصنوعی» رو اون سکه زد. ماروین مینسکی (یکی از بزرگترین تئوریسین‌های هوش مصنوعی) از همون سمینار بود که به این حوزه علاقه‌مند شد. تا سال 1960 مک‌کارتی زبان لیسپ وGarbage Collection رو برای حل مشکلات لیسپ، ابداع کرده بود. لیسپ به سرعت به زبان اول حوزه هوش مصنوعی تبدیل شد. در سال 1961 اولین کسی بود که ایده چیزی شبیه پردازش ابری رو مطرح کرد. بعد از ایجاد سیستم‌های اشتراک زمانی (Time-Sharing) در یک سخنرانی توی MIT این ایده رو مطرح کرد که سیستم اشتراک زمانی می‌تونه این فرصت رو فراهم کنه که قدرت پردازشی و حتی شاید برنامه‌های خاصی رو بشه مثل آب و برق و . . . به دست مردم رسوند. در اواسط 1960 این ایده فراموش شد ولی از ابتدای هزاره جدید به شکل‌های مختلف (Grid Computing و SaaS و Cloud Computing) دوباره خودشو نشون داد.

مک‌کارتی بعد از حضور کوتاه مدت ولی پر ثمرش در MIT، کالج دارتموث و پرینستون در سال 1962 به عنوان استاد در دانشگاه استنفورد مشغول کار شد و تا زمان بازنشستگی (سال 2000) همون جا موند. این عکس مک‌کارتی رو در سال 1974 توی لابراتوارهای هوش مصنوعی استنفورد نشون می‌ده.

مک کارتی ایده‌هایی در مورد یک فواره فضایی را نیز مطرح کرده بود. سازه‌ای که بتونه اجرام رو از زمین به فضای خارج از جو منتقل کنه. او طرفدار جدی و سرسخت ریاضی و آموزش ریاضیات بود و حتی پلاکی روی خودروی ب.ام.و اش نصب کرده بود که روی آن نوشته بود:

آن‌ها که به زبان ریاضی حرف نمی‌زنند، محکومند که حرف‌های یاوه بزنند.

بالاخره مک‌کارتی، 24 اکتبر 2011 یعنی حدود یک هفته قبل در سن 84 سالگی توی خونه‌اش در اسنفورد از دنیا رفت و با رفتنش باز بهمون یادآوری کرد که دنیای کامپیوتر و IT داره نسل اول پیشگامانش رو کم کم از دست می‌ده.

دست آخر هم به این دو تا لینک یه نگاهی بکنید. منبع نوشته‌ها و عکس‌های این پست هم همین دوتا سایت بودن. مدخل ویکی‌پدیای جان مک‌کارتی و خبر سایت واشینگتون‌پست درباره مک‌کارتی.

سی‌ری (Siri)، سیراب کننده کاربران

یا چرا iPhone 4S به اندازه iPhone 5 مهم است.

هرچند خیلی از عاشقان و طرفداران اپل از معرفی آیفون 4S به جای آیفون 5 ناامید و سرخورده شدند، اما به نظر می‌رسه بیشتر کسانی که به صورت عمیق‌تر و دقیق‌تر تکنولوژی و اخبار صنعت آی‌تی رو دنبال میکنن قبول داشته باشن که تکنولوژی تشخیص گفتار طبیعی معرفی شده در این نسخه انقلابی‌تر و جذاب‌تر از تمام تغییرات ظاهری و سخت‌افزاری باشه که همه برای آیفون 5 منتظرش بودن. وبلاگ 1پزشک کنفرانس خبری دیروز اپل رو به قول خودش نیمه‌زنده پوشش داده و انصافا هم به خوبی از پس این کار براومده. اما به شدت پیشنهاد می‌کنم که اول از همه توضیحات و به خصوص ویدیوی تبلیغی اپل رو توی این آدرس ببینید و اگر سواد انگلیسی خوبی دارین، حتما تا انتهای مطلب رو بخونید. تشخیص گفتار از اولین نسخه‌های آیفون یکی از قابلیت‌های پیش‌فرض این گوشی‌ها بوده، اما این نرم‌افزار Siri واقعا مرزهای فناوری و کارایی رو چندین پله جلوتر برده و اون رو برای کاربرای عادی هم قابل استفاده کرده.

این نرم‌افزار که در پس‌زمینه با تکنولوژی‌های شرکت نوانس (نوانس در ویکی‌پدیا) کار می‌کنه، به سادگی زبان طبیعی کاربر رو درک میکنه و بهش عکس‌العمل نشون می‌ده. نه تنها زبان طبیعی رو درک و پردازش می‌کنه بلکه (حداقل اینطوری که از دموها و تبلیغ‌ها بر می‌آد) مفهوم جمله‌ها رو هم در حالت‌های مختلف متوجه میشه. اگر بپرسید «امروز پالتو بپوشم یا نه؟» درک می‌کنه که این سئوال شما به وضعیت آب‌وهوا بستگی داره و در نتیجه با چک کردن پیش‌بینی شرایط جوی به شما جواب می‌ده. اگر بپرسید «این طرف‌ها پیتزافروشی خوب کجاست؟» درک میکنه که «این‌طرف‌ها» یعنی باید از GPS موقعیت شما رو دربیاره و بعد رستوران‌های اون منطقه رو جستجو کنه. تازه این سئوال یادش می‌مونه تا اگر بی‌مقدمه پرسیدین «غذای مکزیکی چی؟» نپرسه «چی یعنی چی؟» و بدونه که منظورتون اینه که این‌طرف‌ها غذای مکزیکی هم پیدا میشه یا نه. این یکی از کامل‌ترین و بهترین نمونه‌های تشخیص  گفتاره که قبلا نمونه‌اش رو فقط توی واتسون IBM دیده بودیم. حالا تصور کنید که قابلیت‌های یک سوپرکامپیوتر چند میلیارد دلاری توی یک گجت 130 گرمی توی جیبتون باشه. ضمن اینکه تقریبا با تمام اپ‌های پیش‌فرض آیفون هم سازگاره و بنابراین برقراری تماس، خوندن و نوشتن پیامک و ایمیل، تنظیم ساعت و زنگ هشدار و . . . به سادگی امکان‌پذیر خواهد بود.

سئوالی که اینجا از هر چیز دیگه‌ای مهمتره اینه که آیا اپل API های این نرم‌افزار قدرتمند رو برای توسعه‌دهنده‌ها باز می‌کنه یا نه. اگر چنین اتفاقی بیافته، خدا می‌دونه که از ترکیب این تکنولوژی با بقیه فناوری‌ها و حسگرها و . . . چه کاربردهایی که برای این سیستم تشخیص گفتار ایجاد نمی‌شه. فرض کنید با گفتن «سردمه!» بسته به موقعیت شما سیستم تهویه ماشین یا خونه تنظیم بشه یا با دونستن سابقه بیماری‌هاتون بهتون پیشنهاد بشه که به جای مترو با تاکسی برین خونه. یا با گفتن  «لعنتی، عجب ترافیکی!» مسیرهای جایگزین برای رسیدن به مقصد رو بهتون پیشنهاد کنه. به نظر من فقط یک نکته خیلی مهم باقی می‌مونه. اگر گجت یا کامپیوتر بتونه مثل یک انسان با ما صحبت کنه آیا اپیدمی گوشه‌گیری و انزواطلبی خوره‌های کامپیوتر چندین پله شدیدتر نمی‌شه؟ چون این آدم‌ها همون یک ذره احساس نیاز به یک دوست و یک همزبون رو هم دیگه می‌تونن با کامپیوترشون ارضا کنن. این جنبه‌اش به شدت ترسناکه.


پی‌نوشتشرکت نوانس هم برای خودش غولی محسوب میشه که ارزش تکنولوژی‌هاش چیزی بسیار بیشتر از تشخیص گفتار برای دارندگان آیفونه. به سایتش دوباره سر بزنید.

پی‌نوشت 2: این مطلب را در وبلاگ اهالی شبکه نیز منتشر کرده‌ام.