تولد یک سیستمعامل، بخش یکم
بعضی از آدمها، تاریخ را با ماشینهایی که داشتهاند یا شغلهایشان یا مکان زندگی یا حتی عشقهایی که داشتهاند به یاد میآورند. سالهای زندگی من، با کامپیوترها مشخص میشوند.
سالهای نوجوانی را با سه کامپیوتر سپری کردم. اولی همان کمودور VIC-20ی که بالاتر در موردش صحبت کردم و از پدربزرگم به ارث برده بودم. این یکی از اولین کامپیوترهای «خانگی» بود. یکی از اجداد PCهای امروزی. کامپیوتر کمودور ۶۴ به نوعی برادر بزرگتر همین کامپیوتر بود و همخانواده بعدی آمیگاها بودند که در اروپا محبوبیت بیشتری پیدا کردند. البته هیچکدام از این کامپیوترها موفق نشدند به مقبولیتی که بعدها کامپیوترهای خانگی دیگر مثل PCها یا حتی اپل II -که هم دوره VIC من بود- دست پیدا کردند، برسند.
آن روزها که هنوز PCها اینقدر زیاد نشده بودند، تقریبا همه برنامهنویسیهای مربوط به کامپیوترهای خانگی با زبان اسمبلی انجام میشد (باور نمیکنم که شروع کردهام به گذاشتن «آن روزها...» در اول جملههایم). کامپیوترها، سیستمعاملهای خانگی خود را داشتند که چیزی مشابه سیستمعامل داس برای PCها بودند. این سیستمعاملها، یک بارگذار ساده برای برنامهها و یک محیط برنامهنویسی ابتدایی داشتند. در آن دوره، استانداردهای چندانی وجود نداشت و هر شرکت سعی میکرد بازار را در اختیار خودش بگیرد. کمودور هم به این تلاش، شهره بود.
وقتی هر کاری که میتوانستم با VIC-20 انجام دهم را انجام دادم، شروع کردم به پسانداز پول برای خرید کامپیوتر بعدی. این در زندگی من مساله مهمی بود. همانطور که قبلا هم گفتهام، یادم نیست که کدام فامیل در کدام دوره در کجا زندگی میکرده است و خیلی چیزهای دیگر را هم فراموش کردهام؛ ولی مسیری که برای تصاحب کامپیوتر دومم رفتهام را به این راحتیها فراموش نخواهم کرد.
من از پولهایی که به عنوان هدیه کریسمس و هدیه تولد به من داده میشد، کمی پسانداز داشتم (چون در ۲۸ دسامبر به دنیا آمده بودم، عملا هدایای کریسمس و تولد با هم ادغام میشدند). مقداری پول هم از طریق کار تابستانی به عنوان تمیزکننده پارکهای هلسینکی به آن اضافه میشد. پارکهای هلسینکی، فضاهای سبز مرتبی نیستند که به عنوان یک چشمانداز جذاب درست شده باشند بلکه جنگلهایی هستند که هر طور خواستهاند، رشد کردهاند. کاری که ما باید انجام میدادیم، این بود که شاخههای بیش از حد رشد کرده را قطع کنیم یا چوبهای خشک را از روی زمین جمع کنیم. این، کار جالبی بود. من همیشه طرفدار فعالیت در فضای باز بودهام. در یک دوره هم روزنامه پخش میکردم. البته روزنامه که نه، نامههای تبلیغاتی! حالا که به جریان فکر میکنم میبینم که هیچوقت خیلی اهل کار تابستانی نبودهام؛ ولی گاهی شغلهای موقت داشتهام. احتمالا بیشترین درآمد من از مستمریهای مدرسه بوده است.
در فنلاند مرسوم است که مردم به مدارس کمکهای مالی میکنند. حتی به مدارس ابتدایی دولتی. از سال چهارم، این پول بر اساس چیزی که اهداکننده در ذهن داشته، به بچهها میرسد. یادم هست که یک بار اهداکننده خواسته بود که پولش به محبوبترین فرد کلاس برسد. این مساله در کلاس ششم بود و ما برای انتخاب محبوبترین فرد رای گیری کردیم. شاید لازم باشد اضافه کنم که برنده من نبودم. آن پول، حدود ۲۰۰ مارک فنلاندی بود که حدود ۴۰ دلار میشد. این در حقیقت پول زیادی نبود ولی برای یک کلاس ششمی که آن را به خاطر محبوب بودن دریافت میکرد، زیاد به حساب میآمد.
این پول معمولا به کسی داده میشد که در یک درس یا رشته ورزشی بهتر از بقیه باشد و بسیاری از جایزهها هم مختص مدارس خاصی هستند یا از طریق دولت در اختیار مدارس قرار داده میشوند. گاهی در طول زمان، این جوایز کمتر و کمتر میشدند. فراموش نمیکنم که جایزهای بود که ارزش مالیاش از یک پنی بیشتر نبود. در اینجور مواقع، مدرسه چیزی به این جایزه اضافه میکرد تا مقدار آن با معنیتر شود اما به هرحال ارزش نهایی خیلی کم بود. این جوایز بیشتر به این خاطر داده میشدند که سنت کمک مالی به دانشآموزان حفظ شود. یکی از خوبیهای فنلاند این است که سنتهای آموزشیاش را جدی میگیرد.
من هرسال به خاطر «مرد ریاضی» بودن، این مستمریها و جوایز را میگرفتم. در دبیرستان، جوایز بزرگتر بود. بزرگترین آنها حدود ۵۰۰ دلار بود و اکثر پول کامپیوتر دوم من هم از همینجا میآمد؛ وگرنه پول تو جیبی هفتگی من به کامپیوتر خریدن نمیرسید. راستی کمی پول هم از پدرم قرض کردم.
سال ۱۹۸۶ یا ۱۹۸۷ بود. من شانزده یا هفده ساله بودم. سالهای بسکتبال را پشت سر گذاشته بودم. وقت بسیار زیادی را صرف تصمیمگیری در این باره کردم که چه کامپیوتری بخرم. قدیمترها PCها، کامپیوترهای چندان جذابی نبودند و در نتیجه وقتی که درباره کامپیوتر آیندهام خیالپردازی میکردم، مطمئن بودم که سراغ یک PC نخواهم رفت.
من در نهایت سینکلر کیو.ال. را انتخاب کردم که احتمالا اکثر شما برای به یاد آوردنش خیلی جوان هستید. جریان از این قرار است که سینکلر یکی از اولین کامپیوترهای ۳۲ بیتی برای استفاده کاربران خانگی بود. بنیانگذار شرکت، سر کلیو سینکلر، در واقع استیو وزنیاک انگلستان بود. او سه کیت کامپیوتری ساخت که در آمریکا با عنوان تیمکس فروخته میشدند. بله! همان شرکتی که ساعتهای تیمکس را میسازد، کامپیوترهای سینکلر را هم وارد آمریکا کرده و با نام تجاری خود به فروش رساند. اولین سری به شکل کیتهای آماده ساخت، فروخته شده و سریهای بعدی به شکل کامپیوترهای آماده به کار.
سیستمعامل کامپیوترهای سینکلر کیو.داس خوانده میشد. آن دوران همه چیزش را از حفظ بودم. این سیستمعامل برای یک کامپیوتر خاص نوشته شده بود و برای آن روزها، از زبان بیسیک نسبتا پیشرفتهای پشتیبانی میکرد و گرافیک خوبی هم داشت. چیزی که من را بسیار به این سیستمعامل علاقهمند کرده بود، چندوظیفگی آن بود: میتوانستید چندین برنامه را به شکل همزمان اجرا کنید. البته بخش بیسیک، قابلیت چندوظیفگی را نداشت و در هر لحظه فقط میشد یک برنامه بیسیک را اجرا کرد؛ اما اگر برنامههای خود را به زبان اسمبلی مینوشتید، سیستمعامل میتوانست از طریق تسهیم زمانی، آن را به شکل همزمان با دیگر برنامهها اجرا کند.
کامپیوتر، یک تراشه ۶۸۰۸۰ هشت مگاهرتزی داشت که نسخه دوم و ارزانتر سری ۶۸۰۰۰ بود که تراشهای ۳۲ بیتی با یک رابط ۱۶ بیتی به دنیای خارج بود؛ یعنی عملیات درون تراشه با ۳۲ بیت و تمام ارتباطات آن با دنیای بیرون (مانند حافظه، دیسک و ...) با ۱۶ بیت انجام میشد. از آنجایی که تراشه تنها میتوانست اطلاعات ۱۶ بیتی را از حافظه بخواند، اینگونه عملیات، سریعتر از عملیات ۳۲ بیتی انجام میشدند. این طراحی بسیار مرسوم بود و حتی این روزها هم در بسیاری از سیستمهای جاسازیشده و اتومبیلها از همین معماری استفاده میشود.
تراشه ۶۸۰۸۰ که در کامپیوتر من استفاده شده بود، به جای ارتباطات ۱۶ بیتی با دنیای خارج از پردازشگر مرکزی، از ارتباطات ۸ بیتی برای این منظور استفاده میکرد. با وجود ارتباط ۸ بیتی با دنیای خارج، عملیات درونی پردازشگر هنوز ۳۲ بیتی بود. این باعث میشد برنامهنویسی با آن لذتبخشتر باشد.
من ۱۲۸ کیلوبایت -نه مگابایت- حافظه داشتم که برای زمان خودش حافظه زیادی بود. کامپیوتر VIC-20ی که این کامپیوتر جایگزینش شده بود، فقط سه و نیم کیلوبایت حافظه داشت. در عین حال از آنجایی که پردازشگر مرکزی ۳۲ بیتی بود، این کامپیوتر میتوانست بدون هیچ مشکلی به کل حافظه موجود دسترسی داشته باشد؛ مساله ای که پیش از این تصورش هم نمیرفت. این دلیل اصلیای بود که من این کامپیوتر را انتخاب کردم. تکنولوژی جذاب بود و من عاشق پردازشگر مرکزیاش بودم.
امیدوار بودم با خرید کامپیوتر از مغازهای که آشنای یکی از دوستانم بود، بتوانم تخفیف بگیرم؛ اما متوجه شدم که کامپیوتر دلخواه من را ندارند و برای دریافت آن، باید کلی منتظر بمانم. توان انتظار نداشتم؛ پس سری به بزرگترین کتابفروشی هلسینکی یعنی آکادمیسکا بوکهاندلن زدم که بخشی را هم به فروش کامپیوتر اختصاص داده بود. کامپیوترم را مستقیم از همانجا خریدم.
قیمت کامپیوتر نزدیک به ۲۰۰۰ دلار بود. این قانون، مدتها دوام داشت که جدیدترین کامپیوترها حدود ۲۰۰۰ دلار قیمت داشتند. همین یکی دو ساله است که این قانون از اعتبار افتاده. حالا میشود یک کامپیوتر شخصی جدید را با ۵۰۰ دلار خرید. مثل اتومبیل. کسی اتومبیلی زیر ۱۰۰۰۰ دلار نمیسازد. گاهی اصلا ارزشش را ندارد. مطمئنا شرکتها میتوانند اتومبیلهای ۷۰۰۰ دلاری بسازند ولی استدلال آنها این است که اگر کسی بتواند اتومبیل ۷۰۰۰ دلاری بخرد، احتمالا ترجیح میدهد با دادن ۳۰۰۰ دلار بیشتر، اتومبیلی با قابلیتهای بهتر یا امکانات بیشتر مثل کیسه هوا دریافت کند. اگر اتومبیلهای جدید امروزی را با اتومبیلهای پانزده سال پیش مقایسه کنید، قیمتها تقریبا برابر هستند. در حقیقت با در نظر گرفتن تورم، اتومبیلها کمی هم ارزانتر شدهاند. ولی کیفیت بسیار بهتر شده است.
در مورد کامپیوترها هم مساله همین بود. وقتی کامپیوتر چیزی نبود که هر کسی بخرد، قیمتش از ۲۰۰۰ دلار پایینتر نمیآمد. اگر کامپیوترها گرانتر میشدند، شرکتها دیگر نمیتوانستند تعداد زیادی از آنها را بفروشند. قیمت دقیقا بهاندازهای بود که فروش برود ولی ارزانتر شدنش به زیاد شدن فروش کمک خاصی نکند. مردم حاضر بودند ۲۰۰ دلار بیشتر را بدهند و کامپیوتر بهتری بگیرند.
در دو سال اخیر، ساختن کامپیوتر بسیار ارزانتر شده است و قابلیتهایش نیز بسیار پیشرفت کردهاند. شرکتها، افراد زیادی را که حاضر بودند ۲۰۰ دلار بدهند تا کامپیوتر کمی بهتر بخرند، از دست دادهاند و چون دیگر فقط به خاطر قابلیتهای کمی بهتر نمیشود فروش را بالا برد، مجبور شدهاند سر قیمت رقابت کنند.
قبول میکنم: در ۱۹۸۷ یکی از دلایلی که باعث میشد سینکلر، خوب فروش برود، ظاهر باحال آن بود.
رنگ آن سیاه مات یکدست بود با یک صفحهکلید سیاه و زاویههای نود درجه. شبیه کامپیوترهای پر زرق و برق پر از انحنا نبود. تلاش میکرد نهایت کامپیوتر باشد. صفحهکلید تقریبا دو سه سانتیمتر ارتفاع داشت چون بخشی از خود کامپیوتر بود. اکثر کامپیوترهای آن دوره، همینطور طراحی میشدند. در سمت راست صفحهکلید، جایی که انتظار داریم صفحهکلید عددی باشد، یک حلقه نامتناهی از نوار کاست قرار داشت. چیزی که فقط کامپیوترهای سینکلر آن را استفاده کردند. کاربرد این وسیله شبیه دیسک گردان بود البته با این تفاوت که به دلیل طراحی نواریاش، برای رسیدن به اطلاعاتی که دنبال آنها بودید، باید نوار را تا سر اطلاعات مورد نظر میچرخاندید. بعدها مشخص شد که این وسیله ایده خوبی نیست، چون اطمینان و راحتی دیسکها را ندارد.
پس من نزدیک به ۲۰۰۰ دلار خرج کامپیوتر سینکلرم کردم. بیشترین کاری که با آن میکردم، تمام کردن یک پروژه و رفتن سراغ پروژه بعدی بود. همیشه دنبال یک کار جالب برای انجام دادن بودم. یک مفسر و کمپایلر زبان فورت داشتم تا با آن ور بروم. فورت زبان عجیبی بود که دیگر کسی با آن کار نمیکند. یک زبان خاص و جالب که در دهه ۱۹۸۰ برای کارهای متنوعی استفاده میشد. ولی به دلیل پیچیدگیهای برنامهنویسی با آن هیچوقت تبدیل به زبانی مرسوم نشد و افراد غیرفنی از آن استفاده نکردند. این زبان در عمل بیمصرف بود.
من برای خودم چند ابزار برنامهنویسی نوشتم. یکی از اولین چیزهایی هم که برای دستگاهم خریدم، یک کارت توسعه دارای حافظه EEPROM (حافظه فقط خواندنی قابل پاککردن و برنامهنویسی مجدد با برق) بود. این حافظهای است که با استفاده از یک دستگاه خاص میتوانید چیزهایی را روی آن بنویسید و حتی وقتی برق کامپیوتر را قطع میکنید، اطلاعات روی آن باقی میمانند. با این دستگاه میتوانستم ابزارهایی که خودم نوشته بودم را بدون اینکه مجبور باشم هربار آنها را در RAM (حافظه با دسترسی اتفاقی) بارگذاری کنم، همیشه دم دست داشته باشم. در عین حال با استفاده از این ابزار، حافظه ارزشمند RAM برای بقیه کارهای کامپیوتر باقی میماند.
چیزی که من را به سیستمعاملها علاقهمند کرد: یک کنترلکننده فلاپی خریدم تا مجبور نباشم از میکرودرایو خود سینکلر استفاده کنم اما درایوری که روی این کنترلکننده بود چنگی به دل نمیزند و در نهایت، خودم نشستم و کنترلکننده آن را نوشتم. طی نوشتن این کنترلکننده به چند باگ در سیستمعامل هم پی بردم؛ یا لااقل به چند ناهماهنگی بین چیزی که راهنماها ادعا میکردند سیستمعامل انجام میدهد و آنچه که واقعا انجام میداد. اینها را کشف کردم چون برنامهای که نوشته بودم درست کار نمیکرد.
کدهای من همیشه، اوم...، بدون نقص هستند. پس مطمئن هستم مشکل باید از جای دیگری باشد. پس بررسی را ادامه دادم و سیستمعامل را دیساسمبل کردم.
میتوانید کتابهایی را بخرید که حاوی بخشهایی از کدهای سیستمعامل باشند. این کمک میکند. همچنین نیازمند یک دیساسمبلر هستید؛ ابزاری که برنامه به زبان ماشین را میگیرد و آن را به زبان اسمبلی ترجمه میکند. این برنامه هم کمک بزرگی است؛ چون وقتی با زبان ماشین روبرو هستید، دنبال کردن دستورات بسیار مشکل است؛ مثلا جهشها فقط به آدرسهای عددی اشاره میکنند و پیگیری آنها دردسر زیادی دارد. یک دیساسمبلر خوب، این آدرسهای عددی را به اسمهای معنادارتری ترجمه میکند یا حتی به خود شما اجازه میدهد تا اسمهای مورد نظرتان را وارد کنید. در عین حال کمک میکند تا مجموعهای از دستورالعملها را که کار خاصی انجام میدهند شناسایی کنید. من هم دیساسمبلر خودم را داشتم که ترجمههای نسبتا خوبی انجام میداد و لیستهای قابل فهمی تولید میکرد. اگر برنامه کار نمیکرد میتوانستم به آن بگویم که در طول لیست جلو برود و از جای خاصی، اجرای برنامه را پیگیری کند و با این کار، دقیقا میدیدم که سیستمعامل مشغول انجام چه کاری است. گاهی هم نه به خاطر کشف باگها که به خاطر درک بهتر اینکه چه چیزی در جریان است، از دیساسمبلر استفاده میکردم.
یکی از چیزهایی که درباره سینکلر مورد تنفرم بود، وضعیت «فقط خواندنی» سیستمعامل بود. نمیتوانستید آن را تغییر بدهید. میشد کدهایی را به بخشهایی از آن اضافه کرد ولی فقط به همان بخشهایی که از قبل این قابلیت در آنها تعبیه شده بود. بسیار بهتر میبود اگر میشد کلا سیستمعامل را با یک سیستمعامل جدید جایگزین کرد. پیادهسازی سیستمعامل در حافظه رام (فقط خواندنی) ایده بدی است.
باوجود چیزهایی که درباره شیفتگی تکنولوژیک فنلاندیها گفتم، سینکلر کیو.ال. نتوانست جای پای محکمی در بین هفتمین ملت بزرگ اروپا پیدا کند. به خاطر بازار کوچک سینکلر در فنلاند، هربار که میخواستید برای ماشین فوقالعاده و لبه تکنولوژیتان تجهیزات جانبی بخرید، مجبور بودید این کار را با پست و از طریق انگلستان انجام دهید. اول باید سراغ کاتالوگها میرفتید و به امید یافتن کسی که قطعه مورد نظر شما را بفروشد، آنها را زیر و رو میکردید. بعد باید چکهای تضمینی به اسم فروشنده تهیه میکردید و چند هفتهای برای دریافت جنس منتظر میماندید (میبینید که هنوز دوره آمازون و کارتهای اعتباری شروع نشده بود). این دقیقا همانکاری بود که وقتی میخواستم حافظه دستگاهم را از ۱۲۸ کیلوبایت به ۶۴۰ کیلوبایت ارتقاء بدهم انجام دادم. همین ماجرا وقتی که میخواستم یک اسمبلر بخرم تا کدهای اسمبلیام را به کدهای ماشین (صفر و یک) ترجمه کند و وقتی که یک ادیتور خریدم تا از آن به عنوان ویرایشگر متن استفاده کنم، تکرار شد.
اسمبلر و ادیتور بهخوبی کار میکردند ولی هر دو، روی میکرو درایو بودند و نمیشد آنها را به EEPROM منتقل کرد. برای حل این مشکل، ادیتور و اسمبلر خودم را نوشتم و از آنها برای تمام کارهای برنامهنویسی استفاده کردم. هر دو را با اسمبلی نوشتم که طبق استانداردهای امروزی، کار احمقانهای بوده. نوشتن به اسمبلی بسیار کندتر و پیچیدهتر است و فکر کنم حل یک مساله با اسمبلی صد برابر بیشتر از حل همان مساله با زبانی مثل سی طول بکشد که آن روزها هم موجود بود.
من چند دستور به مفسر سینکلر اضافه کردم و در نتیجه اگر مثلا میخواستم چیزی را ویرایش کنم فقط دستورش را صادر میکردم و یک لحظه بعد ویرایشگر حاضر و آماده، زیر دستم بود. ادیتوری هم که خودم نوشته بودم، سریعتر از ادیتوری بود که با ماشین به من داده شده بود. یک جورهایی مفتخر بودم که برنامه من میتواند با سرعت بیشتری کارکترها را روی صفحه بریزد. معمولا با ماشینی مثل آن، زمان قابل توجهی طول میکشد تا صفحه پر از کاراکتر شود و برای خالی کردن خطهای جدید، شروع به حرکت به سمت بالا کند. من به این افتخار میکردم که در ادیتور من حروف آن قدر سریع تایپ میشدند که حرکت سریع صفحه به سمت بالا، به نمایشگر فرصت عملکرد صحیح نمیداد و کاراکترها حین حرکت محو به نظر میرسیدند. این برای من مهم بود. این مساله باعث میشد ماشین چابکتر به نظر برسد و من میدانستم که برای به دست آوردن این سرعت، کلی کار کردهام.
در این دوره، آدمهای زیادی نبودند که من آنها را بشناسم و به اندازه من درگیر کامپیوترها باشند. در مدرسه، یک باشگاه کامپیوتر داشتیم ولی من وقت چندانی در آن نمیگذراندم. آنجا بیشتر به درد بچههایی میخورد که میخواستند با کامپیوتر آشنا شوند. در کل دبیرستان من، حدود ۲۵۰ دانشآموز وجود داشت و بعید میدانم جز من کسی در آن مدرسه بوده باشد که پیش از ده سالگی با کامپیوتری کار کرده باشد.
یکی از کارهایی که دوست داشتم با سینکلر کیو.ال. بکنم، نوشتن کپی بازیهای مشهور بود. من مشابههایی برای بازیهایی که روی VIC-20 داشتم مینوشتم و گاهی قابلیتهای جدید هم به آن اضافه میکردم. البته معمولا بازیها بهتر نمیشدند: کامپیوتر بهتر شده بود ولی مفهوم همان مفهوم قدیمی بود.
بازی مورد علاقه من، آسترویدز بود و هیچوقت هم نتوانستم کپی خوبی از آن را بنویسم. مشکل اینجا بود که در آن دوره، همه نمونههای خوب آستروئید، با گرافیک برداری نوشته میشدند. این بازیها به جای اینکه از گرافیک مبتنی بر نقاط استفاده کنند، از شیوهای استفاده میکردند که لامپهای کاتدی بر اساس آن ساخته شده بودند؛ یعنی شلیک الکترونها از یک تفنگ الکترونی در پشت صفحه نمایش و منحرف کردن این الکترونها با استفاده از میدانهای مغناطیسی. با این شیوه میشد به دقت و وضوح بسیار بهتری رسید اما پیادهسازی آن ساده نبود. میتوانستید یک مشابه برای بازیهای رده آستروئید بنویسید ولی روی کامپیوتری که قابلیتهای گرافیکی لازم را نداشت، امکان نداشت بشود کیفیت نمونه اصلی را به دست آورد.
یادم هست که با اسمبلی، یک کپی از بازی پکمن نوشتم. اولین قدم این بود که ببینم شخصیتهای حاضر در پکمن قرار است چه شکلی باشند. بعد سعی میکردید که آن شخصیت را در یک ماتریس شانزده در شانزده جا دهید و رنگ آن را مشخص کنید. اگر آدم هنرمندی بودید، نتیجه خوب از آب در میآمد؛ اما اگر -مثل من- آقای بیهنر بودید، نتیجه چیزی شبیه به پسرعموی بیمار پکمن بود.
قبول! کپی من چندان جذاب نبود اما خودم به آن افتخار میکردم. برنامه حاصل قابل بازی کردن بود و من آن را برای مجلهای که کدهای کامپیوتری را چاپ میکرد ارسال کردم. من برنامههای دیگری را هم به مجلات فروختهام و احساسم این بوده که این کار طبیعی است.
نه.
یکی از مشکلات این بود که کدها به اسمبلی نوشته شده بودند؛ به عبارت دیگر اگر کوچکترین اشتباهی در تایپ کد از مجله میکردید، برنامه کار نمیکرد.
چند بازی هم از خودم نوشتم ولی نوشتن بازی مغز خاصی میخواهد. بازی نیازمند بهرهوری خیلی بالا از تواناییهای کامپیوتر است و باید خیلی خیلی در سختافزار پایین بروید. این کار را میتوانستم انجام دهم؛ ولی ذهنیت بازیکنها را نداشتم. چیزی که یک بازی را دوستداشتنی میکند، معمولا سرعت یا گرافیک بالای آن نیست. باید چیزی باشد که باعث شود شما به بازی بچسبید؛ چیزی که باعث شود شما بازی را ادامه دهید. مثل فیلمهای سینمایی. جلوههای ویژه یک چیز هستند و چیزی که پشت بازی قرار دارد یک چیز دیگر؛ و هیچوقت پشت بازیهایی که من نوشتم، چیز خاصی نبود. بازی باید یک پیشرفت داشته باشد؛ یک ایده. معمولا پیشرفت بازی این است که دائما سریعتر میشود. همان کاری که پکمن میکند. بعضی وقتها هم مسیرها پیچیدهتر میشوند یا هیولاها دقیقتر شما را تعقیب میکنند.
یکی از نکاتی که من را جذب پکمن میکرد، سر و کله زدن با این مساله بود که چگونه باید شخصیتها را حرکت دهیم، بدون اینکه حرکت آنها چشمکزن یا دارای پرش به نظر برسد. این چشمک زدن، مشکل اصلی بازیهای کامپیوتری در قدیم بود چون بدون سختافزارهای خاص، حرکت کاراکترها به سادگی باعث چشمک زدن آنها میشود. در حالت طبیعی برای حرکت دادن یک کاراکتر، کاراکتر را از مکان اول حذف میکنیم و بعد آن را در مکان دوم ترسیم میکنیم. اگر نتوانید زمانبندی دقیقی برای این کار داشته باشید، کاربران لحظهای که هیچ شخصیتی روی صفحه نیست را خواهند دید و این باعث چشمک زدن شخصیت شما خواهد شد. برای رفع این مشکل چندین راهحل وجود دارد. میتوانید اول شخصیت را در جای جدید بکشید و بعد شخصیت قبلی را پاک کنید؛ اما باید توجه داشته باشید که آن قسمتهایی از شخصیت قبلی که توسط شخصیت جدید پوشانده شدهاند، پاک نشوند. با استفاده از این روش، چشمک زدن لعنتی حذف میشود و در عین حال گاهی حرکت با دیدن سایهای از شخصیت در حال حرکت، بسیار هم مطبوعتر میشود. مغز تفسیر خوبی از این جریان ارائه میدهد. حالا به جای چشمک زدن، احساس واقعی حرکت را دارید. مشکل این روش این است که هزینهبر است و کلی از منابع سیستم را صرف خودش میکند.
اینکه بازیها دقیقا در لبه تکنولوژی قرار گرفتهاند و اولین برنامههایی هستند که برنامهنویسان مینویسند، دلیلی دارد. بخشی از دلیل مربوط به این واقعیت است که در بسیاری از مواقع، باهوشترین برنامهنویسها بچههای پانزده، شانزده سالهای هستند که در اتاقخوابشان مشغول ور رفتن با کامپیوتر هستند (این چیزی است که شانزده سال پیش به آن اعتقاد داشتم و هنوز هم فکر میکنم درست است)؛ اما دلیل دیگری هم برای پیشرو بودن بازیها هست: بازیها سختافزارها را به جلو هل میدهند.
اگر به کامپیوترهای امروزی نگاه کنید میبینید که برای کارهای معمول به اندازه کافی سریع هستند؛ اما درست وقتی به محدودیتهای کامپیوترها پیمیبرید که سراغ بازیهای هیجانانگیز جدید و بخصوص این بازیهای سه بعدی که این روزها مشهور شدهاند بروید. اصولا بازیها یکی از آن حوزههایی هستند که در آن به راحتی میتوانید بگویید آیا کارها در حال انجام شدن در زمان واقعی هستند یا خیر. در کار با ویرایشهای متن، یکی دو ثانیه مکث در اینجا و آنجا به کسی برنمیخورد؛ اما در هنگام بازی، اگر چیزی کمی بیشتر از یکدهم ثانیه طول بکشد، آزار دهنده خواهد بود. بازیهای آن دوره، بسیار ساده بودند. این روزها برنامهنویسی بخش کوچکی از ساخت هر بازیای است. اگر ساخت بازی را با فیلمسازی مقایسه کنید، برنامهنویسی در حد فیلمبرداری است.
خب. من سینکلر کیو.ال. را برای سه سال داشتم. از دبیرستان تا دانشگاه هلسینکی و سپس ارتش فنلاند. کامپیوتر خوبی بود؛ ولی به هرحال دیگر آماده بودم تا از آن جدا شوم. در سال آخر یا کمی زودتر، کمبودهایش را کشف کرده بودم. پردازنده ۶۸۰۰۸ پردازشگر خوبی بود ولی من داشتم درباره نسل بعدی آن، یعنی ۶۸۰۲۰ چیز میخواندم و جذب مباحثی مثل مدیریت حافظه و صفحهبندی میشدم. این کامپیوترها میتوانستند کارهایی انجام دهند که وقتی در سطح نزدیک به سختافزار مشغول کار هستید، بسیار ارزشمندند.
یکی از چیزهایی که در سینکلر کیو.ال. بسیار ناراحتم میکرد، این بود که با وجود توانایی چندوظیفگی در سیستمعامل، به خاطر نبود حفاظت از حافظههای مشترک، هر لحظه امکان فروریزی سیستم وجود داشت. هر وظیفهای که کار اشتباهی انجام میداد، کل سیستم دچار فروریزی میشد.
سینکلر کیو.ال. آخرین تلاش سر کلیو سینکلر برای طراحی و ساخت کامپیوتر بود. دلیل اصلی هم عدم موفقیت شرکت از نظر اقتصادی بود. فناوری آن جذاب بود ولی شرکت مشکلات تولید داشت و مشکلات کیفی به معنی شکست تبلیغاتی است. در عین حال بازار هم در حال رقابتیتر شدن بود.
در دهه ۱۹۸۰ کمکم میشد تصور کرد که یک راننده تراموای معمولی هم بتواند فقط برای کارهای ویرایش متنش، صاحب کامپیوتر شود و همه نشانهها هم به نفع کامپیوترهای شخصی یا همان PC ها بودند. بله! کامپیوترهای اصیل IBM PC شروع به سرازیر شدن به قفسههای مغازهها کردند و با وجود نواقص فنیای که داشتند، بسیار موفق ظاهر شدند. این کامپیوترهای همه جا حاضر بژ، مهر تایید آی.بی.ام را داشتند و این چیز کمی نبود. یک جاذبه دیگر: لوازم جانبی استاندارد و به راحتی قابل تهیه بودند.
من دائما درباره پردازشگرهای جدیدی که میتوانستند پاسخگوی نیازهای من باشند چیز میخواندم. برایم واضح بود که ۶۸۰۲۰ با وجود جذاب به نظر رسیدن، به جایی نخواهد رسید. این امکان هم وجود داشت که یک پردازشگر جدید برای سینکلرم بخرم و آن را ارتقاء دهم. آن روزها این کار به معنی بازسازی ماشین بود. سیستمعامل هم چیزی درباره مدیریت حافظه نمیدانست و در این صورت مجبور بودم خودم آن را بنویسم. پس ماجرا این بود: هووومممم... این کار قدم بزرگی است و خریدن یک پردازشگر جدید هم خرج زیادی دارد.
و این جریان خریدهای دائمی برای کامپیوتر هم دردسر بزرگی بود. آن روزها کاتالوگ درست و حسابیای وجود نداشت که کلیه تجهیزات سینکلر در آن باشند و من بتوانم تلفن را بردارم و کمی حافظه بیشتر سفارش دهم. کار من شده بود سفارش پستی از انگلیس (البته در مورد نرمافزار مشکلی نبود چون نرمافزارهای مورد نیازم را خودم مینوشتم).
این دردسر یک جنبه مثبت هم داشت. وقتی قرار شد از شر ماشین خلاص شوم، تصمیم گرفتم قطعات اضافی آن را هم بفروشم؛ یعنی دیسک سختی که خریده بودم چون حتی یک لحظه دیگر نمیتوانستم میکرو درایو را تحمل کنم و رم اضافهای که داشتم. مردم در خیابان صف نکشیده بودند تا وسایل دستدوم سینکلر من را بخرند و تنها روش این بود که در یک مجله کامپیوتری آگهی بدهم و دعا کنم. همینجا بود که دوست خوبم جوکو ویروماکی را دیدم که بعدها معلوم شد به جز من احتمالا تنها کسی در فنلاند است که یک سینکلر کیو.ال. دارد. او به آگهی من جواب داد و با یک قطار از لاهتی به شهر ما آمد تا قطعات سینکلر من را بخرد؛ و همینجا بود که من را با اسنوکر آشنا کرد.