من فکر میکنم در حد خودم با کتاب و ادبیات دمخور بودهام، اما متاسفانه در دیگر شاخههای هنر، مهارت و شناخت چندانی ندارم. شناختم از نقاشی صفر مطلق است. انتخاب و سلیقهام در زمینه موسیقی بیشتر از آنکه به هنر موسیقایی و آهنگسازی و … مرتبط باشد، به نوستالژی مرتبط است. از عکاسی بیشتر تکنیک را میدانم و در سینما هم فقط یک ژانر خاص را دنبال (اگر کلمه مناسبی برای دیدن سالی ۳ تا ۴ فیلم باشد) میکنم. به همین دلیل شاید نوشتن درباره هنر آن هم «هنر مولد» که ژانری به نسبت نو محسوب میشود، چندان مناسب من نباشد. اما انگیزه شکلگیری این پست، بیش از هر چیز فرونشاندن کنجکاوی خودم درباره مفهوم هنر مولد بود. چرا که به دلیل ارتباط قدرتمند این شاخه از هنر با کامپیوترها، احساس کردم که این جا همان پل گمشدهای است که میتواند دنیای ریاضی و قاعدهمند من را به دنیای رنگارنگ، سرخوشانه و آزاد هنر پیوند بزند.
برچسب: برنامهنویسی
یادداشتهای روزانه؛ قسمت اول: «وردپرس» پرتابل روی فلش
زندگی هر انسانی یک دفترچه خاطرات است که میخواهد در آن داستان خاص خودش را بنویسد، اما در نهایت داستانی دیگر مینویسد. و تحقیرآمیزترین لحظات زندگی زمانی است که او نسخه نوشته شده را با آنچه قسم خورده بود بسازد، مقایسه میکند. جِی. ام. باری
قبلا هم نوشته بودم که عاشق نوشتنام و به خصوص سابقهای قدیمی در روزانهنویسی دارم. به تاریخنگاری و ثبت وقایع هم علاقهمندم. به همین خاطر در این دوره دیجیتال و Paperless بسیار به وردپرس علاقهمند شدم. غیر از تواناییاش در قدرت بخشیدن به بیش از نیمی از صفحات وب، به نوعی همه نیازهای نوشتن روزانه را برآورده میکند.
ادامه خواندن “یادداشتهای روزانه؛ قسمت اول: «وردپرس» پرتابل روی فلش”
ده توصیه برای برنامهنویسان جوان
من عاشق برنامهنویسی و لینوکس و منبعباز هستم. و خب وقتی به همه اینها علاقهمند باشی و هکری بزرگ مثل «اریک ریموند» از چیزی تعریف کرده باشد، نمیتوانی در برابرش مقاومت کنی. توی گوگل پلاس دیدم که لینکی در مورد برنامهنویسی را به اشتراک گذاشته و تصمیم گرفتم ترجمهاش کنم.
اصل مطلب را میتوانید اینجا بخوانید و این هم ترجمهاش:
کد نوشتن درست شبیه جادوگری است. کلمات درست را به کار ببرید و وقایعی هیجانانگیز رخ خواهند داد، یا اتفاقاتی هولناک به وقوع خواهند پیوست.
تبدیل شدن به یک برنامهنویس بزرگ کار سادهای نیست، به زمان احتیاج دارد. من در اینجا ده توصیه برای برنامهنویسان تازهکار دارم که می تواند در طی کردن این مسیر به آنها کمک کند.
۱- وقت بگذارید
تبدیل شدن به یک برنامهنویس خوب به سالها زمان نیاز دارد، پس صبر داشته باشید. هر چقدر هم که باهوش باشید، نخستین پروژههای شما به یقین ضعیف خواهند بود. اگر هر روز کد مینویسید، ظرف پنج سال برنامهنویس قابل قبولی میشوید و پس از ده سال یک برنامهنویس خوب خواهید بود. و در نهایت پس از بیست سال ممکن است به شهرت و بزرگی برسید!
BIRRC ابزاری احتمالا مفید برای بلاگرها
خلاصه
برای دوستانی که حوصله خوندن متن طولانی رو ندارند:
برنامهای نوشتم که میتونه تعدادی فایل تصویری رو بگیره (در واقع عکسهاتون رو انتخاب کنید و بکشید روی آیکن این برنامه) و همه اونها رو به فرمت jpg تبدیل کنه، ابعادشون رو به حداکثر ۸۰۰ پیکسل کاهش بده، کیفیت شون رو برای آپلود در وب تا حدود ۸۰ درصد پایین بیاره و بعد با اسمی که شما تعیین میکنید از نو نامگذاریشون کنه. این برنامه احتیاجی به نصب شدن نداره و میتونید از اینجا دانلودش کنید.
به نظرم رسید که این ابزار میتونه برای خیلی از بلاگرها به دردبخور باشه. به همین دلیل گفتم اینجا منتشرش کنم و در موردش بنویسم تا شاید هم به درد کسی بخوره و هم ایراد و اشکالهایی که خودم ندیدم، بهم نشون داده بشه.
نوستالژی: زمانی که مردها هنوز مرد بودند! (بخش پایانی- هکهای عمیقتر)
در قسمت قبلی در مورد تجربههای برنامهنویسیام و سروکله زدن با گرافیکهای کمودور صحبت کردم. در این قسمت پایانی میخواهم در مورد زبان ماشین صحبت کنم و همچنین کتاب و ابزاری جانبی که کمک کردند تا درک بهتر و بیشتری از ماشینام داشته باشم. و در آخر از هکی صحبت خواهم کرد که آن را بیش از همه دوست دارم.
برنامهنویسی پیشرفته با Commodore 64 Programmers Reference Guide
در کلاسهای مدرسه و زمانی که با دوستان در مورد کامپیوترهایمان و بازیها و غیره حرف میزدیم، یکی از دوستان به کتاب «پیشرفتهای» اشاره کرده که به تازگی به دستش رسیده بود و دانش برنامهنویسی او را چندین پله ارتقا داده بود. با هزار خواهش و التماس توانستم آن را برای یکی دو روز امانت بگیرم. کتابی واقعی در کار نبود. کتاب واقعی را با فناوری فتوکپی (هنوز دستگاه به اصطلاح زیراکس که کیفیت بالاتری داشت همهگیر نشده بود و هزینه یک برگ زیراکس بیش از دو برابر فتوکپی بود!) تکثیر کرده بودند و در نبود صحافیهای سیمی و فنری، آن را با منگنه کتاب دوخته بودند. شما فقط باید تصور کنید که از جلدی که در تصویر زیر میبینید، چه اثر سیاه و سفیدی بر روی یک مقوای کرم رنگ نقش میبندد!
اما برخلاف ظاهر بدترکیب و مدت کوتاهی (کمتر از یک هفته) که آن را در اختیار داشتم، این کتاب تاثیر بسیار شدیدی روی دانش من از کامپیوتر (در مقیاس آن دوران) گذاشت. 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 و عوض کردن خانههای مناسب حافظه، خود کدهای برنامه در حال اجرا را عوض کرد به گونهای که در هر بار اجرا عملکردی متفاوت داشته باشد.
برنامهای برای این کار نوشتم و آنقدر با شماره خطها و علامتهای «:» اضافی (جدا کردن دستورات در یک خط) بازی کردم تا بالاخره تغییر محتویات آدرسها Syntax برنامه را خراب نمیکرد. حالا برنامهای داشتم که در یک بار اجرا عدد ۱ را چاپ میکرد و بار دوم عدد ۲ را و این کار را با متغیرها انجام نمیداد. سورس برنامه عوض میشد و اگر از آن LIST میگرفتم، هر بار لیستی جدید را به نمایش میگذاشت! البته هیچ کاربردی برای این برنامه متصور نبودم، اما همین الان با خواندن مطلب ویکیپدیا در مورد self-modifying code فهمیدم که چنین برنامههایی میتوانند کاربردهای جالبی داشته باشند!
احتمالا الان میتوانید حدس بزنید که ۲۰۶۱ از کجا آمده است. برنامه بیسیک تنها برای این نوشته شده بود که برنامه اصلی بازی به زبان ماشین را صدا بزند. برنامهنویسان هم برای حداکثر استفاده از حافظه، روالهای زبان ماشین را درست از اولین آدرس خالی بعد از کدهای بیسیک ذخیره کرده بودند.
به هر حال این کتاب و آشنایی با زبان اسمبلی و کدهای ماشین و خانههای حافظه باعث شد که به دنبال برنامه اسمبلر بگردم که البته پیشاپیش بگویم همانند بازیها و برنامههای خودتغییر، هیچگاه چیز خاصی از آن حاصل نشد! نخستین برنامههای اسمبلر را باید مثل همه برنامهها از روی کاست میخواندم، اما مشکل طولانی بودن بارگذاری و محدودیت امکانات باعث شد به سراغ ابزاری سریعتر و با قابلیتهای بیشتر بروم.
کارتریج ACTION-VI : دنیای جدید
در جستوجوی یک کارتریج اسمبلر به کارتریج اکشن ۶ برخورد کردم (که باز هم مطابق دید عموم مردم از کمودور ۶۴ به عنوان یک کنسول بازی) برای «نسوز کردن بازیها» مشهور شده بود. اما ابزاری بسیار قدرتمند بود و تواناییهایی بسیار بیشتر از اجرا کردن کدهای تقلب بازیها داشت.
این کارتریج یک برنامه اسمبلر سریع با خودش داشت. امکاناتی برای فرمت کردن و آمادهسازی دیسکتها، گرفتن نسخههای پشتیبان، دستکاری تنظیمات حافظه و نصب یک Fast Loader فراهم میکرد و از همه مهمتر سیستمی داشت که میتوانست محتوای حافظه RAM کمودور را به اصطلاح فریز کرده و بعد از ویرایش خانههای دلخواه دوباره کمودور را وادار به ادامه کارش کند. یکی از کلیدهایی که بالای کارتریج میبینید (معمولا سمت راستی) دکمه ریست است و دیگری دکمه فریز کردن حافظه. تصویر زیر صفحه آغازین کمودور را هنگام زدن کلید ریست این کارتریج نشان میدهد.
در این صفحه من هیچگاه از گزینه CONFIGURE MEMORY سر درنیاوردم و از آن استفاده نکردم. اما در قسمت UTILITIES یک اسمبلر سریع و راحت وجود داشت که با آن اسمبلی را هم کمی تجربه کردم.
بالن هوای گرم، با سرعت نور
اولین برنامه کاملی که با دستورهای اسمبلی نوشتم، اسپرایت بالن مشهور کمودور را در بالا سمت چپ صفحه نمایش میداد و سپس در یک حلقه هر بار یک واحد به x و y آن اضافه میکرد تا به سمت پایین سمت راست صفحه حرکت کند. البته اول اسپرایت را با برنامه اسپرایت ادیتوری که خودم نوشته بودم، ساختم و در خانههای حافظه گذاشتم و بعد با اسمبلر کارتریج مختصاتدهی آغازین و روال حلقه را پیاده کردم. بار اول با این که برنامه کامل و بیاشکال بود هیچ چیزی روی صفحه ظاهر نشد. بعد از چندین بار آزمایش و خطا فهمیدم که سرعت این برنامه به حدی زیاد است که بالن حرکت را انجام میدهد، اما من آن را نمیبینم.
برای کند کردن سرعت برنامه دو حلقه تو در توی ۲۵۶ تایی خالی را برای تلف کردن وقت داخل حلقه اصلی بازی گذاشتم تا موفق شدم بالن را ببینم. اما باز هم بالن با سرعت نور قطر صفحه را طی میکرد و برنامه تمام میشد. به این فکر افتادم که برنامه ۸ وزیر را برای سرعت بالا با اسمبلی بنویسم ولی سواد واقعی من در اسمبلی به چند دستور JMP و CMP و ADD محدود میشد که برای برنامهای پر از شرط و محاسبات مانند ۸ وزیر بسیار کم بود.
مالتی تسکینگ واقعی با IRQ
احتمالا میدانید که وقفهها یا IRQ (سرنام Interrupt ReQuest) روالهایی هستند که به صورت منظم و در فواصل زمانی مشخص توسط پردازنده کامپیوتر اجرا میشوند. دلیل این که وقفه نامیده میشوند این است که پردازنده در این فواصل زمانی برنامه در حال اجرا را متوقف کرده و روالهای IRQ را اجرا میکند و دوباره به سراغ برنامه اصلی باز میگردد. استفاده از وقفهها بیشتر به دردبرنامهنویسهای سیستم میخورد که توسط آنها تمام مدت ابزارهای جانبی را برای دریافت یا ارسال اطلاعات کنترل کنند یا در بازیها و برنامههای بیدرنگ (Real Time) شرطهای حیاتی را به صورت مداوم چک کنند. مثلا سیستم پیشفرض کمودور از یکی ازهمین وقفهها برای نمایش مکاننمای چشمکزن استفاده میکرد.
برای امتحان کردن این قابلیت عجیب هم تنها هنری که توانستم به خرج دهم این بود که روالی را به اسمبلی نوشتم که دایما بیتهای کنترلی کلیدهای SHIFT و CONTROL را تست میکرد و در صورت فشرده شدن این کلیدها به ترتیب رنگ زمینه متن و رنگ حاشیه آن را عوض میکرد. این چیزی بود که در جمع دوستان هم کسی به سراغش نرفته بود و برای همهمان جذاب بود که سیستم در عین حالی که وظایف معمولش را انجام میدهد، بدون هیچ کد مریی کار دیگری را هم به صورت همزمان در دست اجرا دارد.
هک آخر، بازی دوستداشتنی
و اما آخرین و از دید خودم جذابترین هکی که انجام دادم، به قابلیت فریز کردن حافظه کمودور توسط کارتریج اکشن ۶ مربوط بود و بازی Arkanoid که در قسمت اول از آن صحبت کردم. اندکی پس از شروع بازی، کلید فریز را میزدم و وارد منوهای اکشن ۶ میشدم. آنجا گزینهای برای نسوز کردن بازی وجود داشت. سیستم کار به این شکل بود که یک بار محتویات حافظه را بررسی (یا ذخیره) میکرد. بعد از شما میخواست به بازی برگردید و عمدا یک بار ببازید و دوباره حافظه را فریز کنید. وقتی این کار را میکردید دوباره حافظه را چک میکرد تا ببیند محتویات کدام خانهها عوض شده است. معمولا با همان یک بار و گهگاه با دوبار تکرار این فرآیند خانهای که اعداد مربوط به «جان» کاراکتر بازی در آن ذخیره شده بود پیدا میشد و کارتریج از آن به بعد محتویات آن خانه را ثابت نگه میداشت. یعنی بازی شما دیگر نسوز شده بود!
اما باز هم بازی کردن ۳۲ مرحله Arkanoid با احتساب هر مرحله ۲ یا ۳ دقیقه، آن هم بدون SAVE کلی زمان میبرد. هک اصلی این بود که من بعد از نسوز کردن بازی به سراغ محتویات حافظه تصویر میرفتم و آنها را پاک میکردم. اگر خاطرتان مانده باشد در قسمت قبلی گفتم که پسزمینهها و برخی اجزای بازیها با فونتها ساخته میشدند. من چیزی مانند دستور cls را اجرا میکردم و خلاص! همه آجرها از بین رفته بودند. فقط کافی بود در هر مرحله یک بار فریز کنم، حافظه تصویر را پاک کنم و بعد از برگشت به بازی عمدا بسوزم.

جانهایم که تمام نمیشد، اما بعد از سوختن و شروع مجدد مرحله، کامپیوتر متوجه میشد که تمام آجرها پاک شده و من به مرحله بعد میرفتم! تنها در برخی مراحل که حریفهای متحرک هم وجود داشتند، مجبور بودم نهایتا ۵ یا ۶ ضربه موفق (به آن اسپرایتها) بزنم تا آن مرحله هم تمام شود. فقط مرحله آخر بود که در ساخت غول آن از اسپرایت و آجر و غیره خبری نبود و این مرحله را باید حتما به صورت عادی رد میکردم. به این ترتیب من تقریبا در ۹۰ درصد اوقات بازی را تا آخر تمام میکردم و بلند میشدم! باید اعتراف کنم این کار به خصوص در جمعهای فامیلی، باعث میشد حس یک گیک تمام عیار را داشته باشم!
پایان داستان
شاید شما هم کنجکاو باشید که بر سر این ابزار عزیز چه آمد! واقعیت چندان هم جذاب نیست! حدود سال ۸۱ بود، ده سال از خرید کمودور میگذشت و در دوران پادشاهی پنتیوم ۲ و ۳ مدتها بود سراغش نرفته بودم. آن زمان هم هیچگاه فکر نمیکردم چنین حس نوستالژیکی نسبت به این اولین کامپیوترم پیدا کنم. به همین دلیل آن را با همه کارتریجها و نوارها و دستههای بازی در اصفهان به قیمت ۱۰۰۰۰ تومان فروختم. کاری که اکنون حس میکنم از انجامش به شدت پشیمانم!
بعید می دانم کسی از خوانندگان علاقهای به آزمودن سیستمی به این قدمت داشته باشد، اما اگر دوست داشتید کمی با پیرمردهای عصر کامپیوتر و نیای بزرگ پیسیها سروکله بزنید میتوانید یک امولاتور خوب را در این آدرس بیابید. بازیهای بسیاری در این آدرس موجود است و برنامهها را هم با کمی جستوجو در سایتهای طرفداران کمودور (مثل این) پیدا خواهید کرد.
به هر حال در این چهار پست، با پررنگترین خاطرات من از آن دوران خوش همراه بودید. حداقل در لحظهای که این مطالب را مینویسم فکر نمیکنم هیچ ابزار، سرگرمی، کامپیوتر یا چیز دیگری تا این اندازه برایم خاطرهانگیز بوده باشد یا از این به بعد هم بتواند باشد. اما از کجا معلوم، شاید ۲۰ سال دیگر خاطره نوشتن همین پست هم داستانی نوستالژیک باشد که برای نسلی کوچکتر تعریف میشود.
تا آن زمان، با ماشینهایتان خوش باشید و لذت ببرید!
نوستالژی: زمانی که مردها هنوز مرد بودند! (بخش سوم- معنای قدیمی هک)
بعد از دو بخشی که اشارهای داشتند به سختافزار و نرمافزار در آن دوران خوش گذشته، میخواهم از عمیقترین لذتها و یادگیریهای آن دوره حرف بزنم. از لذت برنامهنویسی و سر و کله زدن با ماشینها، چیزهایی که احتمالا بسیاری از گیکها موافق خواهند بود که تجربههای ناب هک به معنای واقعی (و نه مفهوم عام و هالیوودی آن) هستند. (اگر هنوز هم فکر میکنید هک یعنی به دست آوردن دسترسی غیرمجاز روی یک سیستم، بهتر است این مطلب را به صورت کامل بخوانید و اگر فرصت کردید به این پادکست هم گوش بدهید.)
بد نیست همین ابتدای کار هم بگویم که این دو مقاله طولانی آخر پر است از جزییات فنی و توضیحات یک سیستم کامپیوتری که الان دیگر باید در موزهها به دنبالش بگردید و اگر شما نمیدانید IRQ چیست، اسمبلی به چه دردی میخورد و یا اصلا برنامهنویسی را دوست ندارید، مطالب بسیار جذابتری را میتوانید روی اینترنت برای خواندن پیدا کنید.
پیش از همه باید اعتراف کنم که من هم مثل تمام هم سن و سالهایم در آن دوران، بیشتر از هر کار دیگری با کمودورم بازی کردهام. تجربههایی که قصد دارم اینجا شرحشان دهم، بیشتر مدیون کلاسهای کامپیوتری هستند که مدرسه ما از سوم راهنمایی به اجبار برای دانشآموزان برگزار میکرد و همینطور مدیون جمع کوچکی از دوستان که همهشان مثل من از سروکله زدن با سیستمهای کامپیوتری لذت میبردند.
به هر صورت اینها به یادماندنیترین تجربههایی هستند که من ۲۰ سال پیش با ابزار محاسباتی آن دوره داشتهام.
حلقههای تو در تو: هشت وزیر در یک بعدازظهر تابستانی
پیش از خریدن کمودور برنامهنویسی بیسیک را کموبیش بلد بودم. همانطور هم که پیشتر گفتم اولین برنامهای که روی کمودور نوشتم چاپ اعداد یک تا ده بود. اما نخستین تجربه جدی برنامهنویسیام به مساله ۸ وزیر شطرنج برمیگردد. این مساله را در یکی از روزهای تابستان از زبان یکی از آشنایان که در خارج از کشور کامپیوتر میخواند شنیدم.
همان روز دست به کار شدم و الگویتم حل مساله را به سادهترین و البته ابلهانهترین شکل ممکن نوشتم. ۸ حلقه تودرتوی FOR که به ترتیب موقعیت وزیرها را در هر سطر مشخص میکرد. در نهایت در دل داخلیترین حلقه کنترل میکردم که آیا این وزیرها یکدیگر را تهدید میکنند یا نه. با توجه به این که امتحان کردن این ۱۶ و خوردهای میلیون حالت برای کمودور با پردازنده ۴ مگاهرتزی و زبان BASIC V2 مدت مدیدی طول میکشید، برنامه را طوری نوشته بودم که با پیدا شدن اولین جواب تمام شود. به نتیجه رسیدن این برنامه یک ظهر تا شب تمام وقت گرفت و من بیش از هر چیز دیگری باید شکایتهای سایر اعضای خانواده از اشغال بودن تلویزیون را تحمل میکردم! البته جواب هم چیزی گرافیکی مانند تصویر بالایی نبود، بلکه ۸ عدد (نشانگر موقعیت وزیرها در ۸ ردیف افقی) بود که در ۸ سطر روی صفحه تلویزیون چاپ شد. آنها را روی کاغذ یادداشت کردم و روی صفحه شطرنج واقعی مهرهها را چیدم.
هوش مصنوعی برای کمودور ۶۴؛ واقعا؟
هوش مصنوعی و کمودور ۶۴؟ این یکی دیگر برای خودم هم باور کردنی نبود. در آن سالها مرکز آموزش انفورماتیک شرکت داده پردازی ایران سری کتابهایی را در حوزه انفورماتیک منتشر میکرد. سه کتاب اول «انفورماتیک چیست؟»، «انفورماتیک در جهان» و «انفورماتیک از دیدگاه توسعه» نام داشتند. کتاب چهارم اما چیزی بسیار متفاوت بود.
کتاب «مبانی هوش مصنوعی برای کمودور ۶۴» ابتدا به تعریف هوش مصنوعی و صحبت از تورینگ و . . . میپرداخت و بعد به تدریج با جهتگیری به سمت بازیها، رفتارها و خودگردانها، پردازش زبان طبیعی، تشخیص الگوها و سیستمهای مکاشفهای برنامههای هوشمندتری را به نمایش در میآورد که همه با همان بیسیک بدوی کمودور ۶۴ نوشته شده بودند. معماهای کلاسیکی چون برجهای هانوی، گشت زدن اسب روی صفحه شطرنج و چیزی شبیه برنامه مشهور الیزا (که قبلا هم در مورد آن نوشتهام) از جمله نمونههایی هستند که خط به خط روی کمودور تایپ و اجرا کردم. هرچند از شیوه کار آن برنامه شبه الیزا نه آن زمان و نه حتی الان به درستی سر در نیاوردم. یکی از برنامههای دیگری که خاطره شفافی از آن دارم، برنامهای بود که مشخصات یک لابیرنت را به صورت پر و خالی بودن خانههای یک صفحه شطرنجی میگرفت و با وارونه کردن راهحل (حذف خانههای بنست به جای امتحان کردن راههای باز) در نهایت مسیر درست را پیدا میکرد.
گرافیک: اشباح و کاراکترها
کمی بعد و البته در حین کار با برنامههایی که فقط منطق برنامهنویسیشان مهم بود، به گرافیک و رنگها هم علاقهمند شده بودم. دوست داشتم حالا که منطق کار این سیستم را میفهمم، بتوانم برنامههایم را با ظاهری جذابتر و با رنگ و لعاب بیشتر همراه کنم. به همین دلیل تصمیم گرفتم به سراغ نوشتن یک بازی بروم. در کمودور ۶۴ و البته در غالب سیستمهای کامپیوتری (حتی نمونههای مدرن امروزی مانند گوشیهای هوشمند) وقتی بخواهید به سراغ بازی دوبعدی بروید، به دو چیز مختلف نیاز دارید. تصاویر متحرک (کاراکترها، گلولهها و . . . ) و تصویرهای ثابت یا همان پسزمینهها.
در کمودور ۶۴ مساله اول به کمک اسپرایتها حل میشد. نقشهایی گرافیکی شبیه یک آیکن که میتوانستند هر کجای صفحه ظاهر شوند و با تغییر مختصاتشان حرکت کنند. البته خود کامپیوتر هم برخورد آنها با یکدیگر یا با قسمتهای مختلف پسزمینه را کنترل میکرد.
اسپرایتها که هنوز در سیستمعامل مدرنی مانند آخرین نسخه Mac OSX Mavericks هم حضور دارند، در کمودور ۶۴ مستطیلهایی با ابعاد ۲۴ در ۲۱ خانه بودند. ۳ بایت در هر ردیف که باید نقاط پر و خالی آن را با ۱ و ۰ جایگزین میکردیم و بعد عدد را به مبنای ۱۰ میبردیم و آن را با دستور POKE در خانه حافظه متناظر با آن مینشاندیم. یادم هست که هنوز هیچ داستانی برای بازی در ذهن نداشتم و حتی نمیدانستم چند اسپرایت و به چه شکلهایی لازم دارم، اما فکر اینکه هر بار این مستطیل شطرنجی را بکشم و خانهها را پر کنم و تبدیل مبنا و . . . اذیتم میکرد. اکنون برنامههای طراحی اسپرایت زیادی وجود دارند که این کار را به سادگی انجام میدهند اما همه به تازگی با زبانهای جدید و صرفا برای کنجکاوی و یادآوری خاطرات نوشته شدهاند.
اما من آن زمان با 180 خط برنامه بیسیک، ادیتور اسپرایت خودم را نوشتم. این برنامه با جویاستیک کار میکرد و در سمت راست صفحه منویی برای انتخاب ابزار (نوشتن یا پاک کردن) و انتخاب رنگ داشت. البته به لحاظ گرافیکی از تصویر بالایی بسیار ضعیفتر بود! با حرکت جویاستیک نشانگر آن روی صفحه حرکت میکرد و با فشرده شدن تنها کلید جویاستیک خانه پر (یا خالی) میشد. بعد میتوانستم اطلاعات این اسپرایت را ذخیره کرده و در بازیام استفاده کنم. البته حتما باید اشاره کنم که بعد از تمام این کارها، هیچوقت به نوشتن بازی یا حتی داستان آن نرسیدم!
اما مساله دوم پسزمینهها بودند که به علت محدودیتهای حافظه و امکانات پردازشی کمودور نمیتوانستند تصاویر معمولی باشند. کمودور حالت گرافیکی و به اصطلاح بیتمپ هم داشت اما گرافیک بیشتر بازیها از طریق دستکاری فونتها و نوشتن متن روی صفحه نمایش بوجود میآمدند. چیزی شبیه به ASCII ART اما به شدت قدرتمندتر. برای درک بهتر، بد نیست اول نگاهی به PETSCII ها بیاندازید که معادل کدهای ASCII در کمودور بودند، بعد به این تصویر که کلیدهای کمودور را از نزدیک نشان میدهد دقت کنید.
با نشانههایی که کمودور به عنوان فونت و متن میشناخت، کافی بود اگر میخواهید دایرهای ترسیم کنید کلید کمودور را نگه دارید و در سطر اول U و I و در سطر دوم هم J و K را تایپ کنید تا با ترکیب چهار ربع دایره شکل شما کامل شود. حال اگر در نظر بگیرید که در کمودور ۶۴ میشد به سادگی علامتهای کلیدها را تغییر داد و جایگزین کرد به تصویر کلی دست پیدا میکنید. هر بازی در ابتدا مجموعهای فونت طراحی کرده و با آنها صحنه بازی را میساخت. مثلا یک کاراکتر را طوری تغییر میداد که با تکرار آن روی صفحه نمایش ظاهری شبیه آجر دیده شود و از آن برای ساخت یک دیوار استفاده میکرد. حال اگر قرار بود دیوار خراب شود کافی بود کاراکترها از روی صفحه نمایش پاک شوند! و البته اگر تا اینجای مطلب را خواندهاید میدانید که کار با متنها و کاراکترها برای کامپیوتر هزاران بار سادهتر از گرافیک است. کمی بعدتر میگویم که از این موضوع چطور برای تقلب در بازی Arkanoid استفاده میکردم.
ابتدا قصد داشتم تمام داستانهای برنامهنویسی و . . . را در قالب یک پست بیاورم. اما به دلیل طولانی شدن مطلب، آن را به دو قسمت تقسیم کردهام. در قسمت بعدی از کارتریج اکشن ۶، زبان اسمبلی، برنامههایی که خودشان را تغییر میدادند و چیزهایی مشابه حرف خواهم زد.
تائوی برنامهنویسی
استاد میگوید:
هنگامی که سه روز بگذرد و برنامهای نوشته نشود، زندگی معنای خود را از دست خواهد داد.
این بخشی از کتاب تائوی برنامهنویسی است که در سال 1987 توسط جفری جیمز به رشته تحریر درآمده است. این کتاب نیمه طنز، مجموعهای از حکمتها و گفتههای کوتاه است که در قالب نه بخش یا «نه کتاب» طبقهبندی شدهاند. این داستانها و حکمتها به بیان ایدهآلهای هکری در دنیای برنامهنویسی میپردازند. ترجمه فارسی این کتاب را میتوانید از کلبه آیدین دریافت کنید. در آینده درباره بخشهای دیگری از این کتاب خواهم نوشت.