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