۱۷
بيسكوئيت پيسي خوردين تا حالا؟ ( + + + ) نميخوام دلتون رو بسوزونم كه من خوردم و چقدم خوشمزه بود و اين حرفا. چون بيسكوئيت پيسي يه مدل از كامپيوترهايي هست كه در ابعاد بيسكوئيت و با قابليتهاي محدود و براي كاربردهاي خاص توليد ميشه.
گفتهبودم كه چطور پروتكل PPP رو براي اسمبل كردن روي يه دستگاه پياده سازي كردم… تا ديروز قرار بود كه اين دستگاه يه بيلبيلكي باشه كه معلوم نيست سر و تهش چيه و يه اسمبلي خاص خودش داره و ۸ بيتي هم هست و كلاً چيز وحشتناكي از آب در ميآد. ديروز يه دفعه متوجه شدم آقاي فتحي پلتفورم پروژه رو عوض كرده و قرار هست كه از اين به بعد پروژهي نهايي روي يه بيسكوئيت پيسي -كه از بس خلاصه هست، بيشتر به از اين بيسكوئيت باغ وحشها ميخوره تا بيسكوئيت عادي- پياده سازي و اجرا بشه. يه سيستم ۴۸۶ اينتل كه Lan و Keyboard و ۵۱۲K هارد فلشي و ۶۴۰K رم داره و از باقي امكاناتش بيخبرم و قرار هست كه قيمت خودش حدود ۶۰ تومن در بياد. دقت دارين كه هاردش كمتر از رمش هست! پايين، عكس يكي از اين بيسكوئيت پيسيهايي كه امروز توي شركت بود رو ميذارم. اين، سه تا RS۲۳۲ و دوتا USB و كارت گرافيك و يه دونه ISA و كيبورد و موس و سي پي يوي ۲۳۳ و خلاصه كلي چيز ميز داشت ديگه! همهش هم تو همون بيلبيلك كه عكسش هست بود!
پروژهي نهايي قراره يه چيزي بشه مثل اون چيزي كه شراگيم ازش به عنوان شوهرياب آنلاين ياد ميكنه
با اين تفاوت كه اين يه دستگاه هست كه يه جيپياس توش به يه بيسكوئيت پيسي متصل ميشه و از طريق يه سيم كارت به اينترنت يا گيرندهي اساماس متصل ميشه و به اين شكل اطلاعات موقعيت رو در فواصل منظم زماني، به سرور اينترنتي ارسال ميكنه. من اصلاً نميتونم بفهمم براي چي بايد به همچين دم و دستگاهي احتياج باشه براي اين كارها. وقتي راهكارهاي سادهتري براي اين مسئله هست چرا بايد همچين هزينههايي رو بهجون خريد، ولي خوب اين طرح يه مناقصه بوده كه شركت گرفتهتش و دليل تاكيد كارفرما بر استفاده از جيپياس و سيم كارت و قابليت GPRS و SMS براي اتصال و گزارشگيري از سرور اينترنتي ديگه به ما ربطي نداره!!
توي اون پست PPP گفتم كه تونستم يه بسته پيدا كنم كه يه Packet Driver Class ۱ براي PPP روي مودم يا RS۲۳۲ يا اتصالات اينجوري تحت DOS ، پياده سازي كنه و الحق و الانصاف كار بزرگي بوده كه جناب David Lindauer انجام دادن و سورسباز گذاشتنش. [LSppp] اين برنامه كد اجرايي و كد اسمبليش باهاشه. چون كد اجراييش باهاش بود نيازي نبود كه تحت DOS كامپايلش كنيم و نوشتم كه چطور تستش كرديم. اين مدت به شدت دنبال اين بودم كه بفهمم Vectorي كه اين برنامه برميگردونه به چه كار ميآد و چطور ميشه بستههاي IP رو بهش داد تا مثل هويج آب گرفتن، از اينور بسته بديم و از اونور رد كنه.
بعد از يكي دو بار ممايله (رد و بدل كردن ميل:D ) با جناب David Lindauer متوجه معني دقيق Packet Driver شدم. زمان داس، درايورها به شكل Interrupt هاي استانداردي نوشته ميشدن و از اونها توقع ميرفته كه به Function Codeهاي خاصي، جوابهاي خاصي بدن. DOSنويسها ميدونن كه اينجور مواقع در اسمبلي، كد تابع توي رجيستر AH گذاشته ميشه و بعد Int فراخواني ميشه. از اونجايي كه اينتراپتي كه پكت درايورهاي اتصال به شبكه پيادهسازي ميكنن طبق عرف شماره ۰×۶۰ هست اين بسته هم وكتور ۶۰ برميگردوند كه من اونوقتا برام عجيب بود كه چرا همهش اين شماره؟!
يه مدت هم ور رفتم به اينكه بدونم اين حرفا واقعاً همونيه كه من استنباط ميكنم؟ براي اينكار بايد از آدرس ۰۰۰۰:۰۰۰۰ كه معروف به وكتور اينتراپتها هست بخونين. اين وكتور تيبل، آدرسهاي Farي كه اينتراپتها موقع كال شدن از اونجا شروع به اجرا ميكنن رو نگه ميداره. براي اينكه بدونيم اينتراپت ۰×۶۰ به كجا اشاره ميكنه بايد آدرس ۰۰۰۰:۰۱۸۰ رو بخونين و ببينين چهار بايت اشارهگر دور رو به كجاست؟ اشتباه نكردم، اين ۱۸۰ ضرب مبناي ۱۶ عدد ۶۰ در چهار هست كه تعداد بايتهاي لازم براي يه جامپ فار هست. بعد اين چهار بايت رو برعكس به شيوهي اينتل بايد بخونين و ردگيري كنين. سه بايت اول اين جايي كه بهش اشاره ميشه، يه جامپ مطلق به كد واقعي اينتراپت هست و اگر اين جامپ تونست يه جامپ نزديك باشه -كه دوبايتي هست- بايد كد بعديش NOP باشه تا سه بايت پر بشه. بعد بايد رشته ي “PKT DRIVER” و بعد يك كاراكتر صفر بياد. اگر اين مشخصات وجود داشته باشه اين يعني واقعاً اينتراپت اينستال شده. من بررسي كردم و ديدم شده بود! (يعني من اينا رو بلد بودما!!)
اينا رو كه داشتين؟ همه بعد از اون روز بود كه Lsppp رو پيدا كردم و براتون تعريف كردم. آخ وقتي اون پرومپت Dialing… Carrier Detected…Negotiating … Authentication… Connected رو ديدم چقدر خوشحال شدم. ولي قدم بزرگ بعدي، بعد از اون رو، امروز برداشتم. مدتي بود يه سري لايبرري C پيدا كرده بودم كه توانايي ارتباط اينترنتي رو تحت داس فراهم ميكرد. لايبرري WATTCP، يه كتابخونهي مفصل هست كه برنامههاي زيادي ( + + + ) تحت داس توانايي ارتباط با اينترنت خودشون رو، وامدار اين لايبرري هستن. فكرش رو بكنين كه براي داس SSH و FTP و مرورگر گرافيكي و حتي وب سرور هم نوشتهشده…
من هميشه با اينكه ادعاي سي نداشتم ولي خوب، دوستش داشتم و فكر ميكردم كه لااقل سي داس رو نسبتاً واردم بهش. منتها اين روزا يه عالمه خط كد سي و اسمبلي دستم بود كه ميگفت از من استفاده كن و من نميتونستم! اگر خيال ميكنين كه بايد راحت يه فايل رو باز كنين و CTRL+F۹ بزنين و اجرا بشه اشتباه ميكنين. بخاطر اينكه اين كدها اول بايد به يه لايبرري تبديل ميشدن. اين جور پكيجها يه فايل makefile دارن كه به صورت دستهاي تمام كارهايي كه بايد با اون فايلها بشه رو انجام ميده. من به اين فايلها وارد نبودم و با يكي دو تا اروري كه دستور Make.exe روي اين فايلها داد متوقف شدم. بعد دست بكار شدم كه فايلهاي .asm رو با tasm.exe و فايلهاي .c رو با tcc.exe به فايل .obj تبديل كنم. اينهم خودش باز كلي ريزهكاري داشت و كلي سوئيچ رو مجبور شدم ياد بگيرم. مثلاً براي مورد ما بايد فايلها با مدل حافظهي small كامپايل ميشدن. انتخاب مدل حافظه هم يه سري آمادگيها ميخواد كه بايد داشته باشين. مثلاً مدل tiny براي كسايي هست كه ميخوان فايل .com بسازن. بههرروي اين فايلهاي .obj رو كنار هم نگه داشتيم. بعد با دستور tlib.exe دونهدونه اين فايلها رو به لايبرريهايي كه بايد استفاده ميشدن اضافه ميكرديم. بعدتر وقتي فايلهاي makefile رو ميخوندم متوجه شدم كه اونها هم سعي داشتن كاري شبيه به همين كار رو بكنن. خلاصه تونستم سه تا لايبرري كه اين پروژه ميخواست رو توليد كنم. بعد اين سه تا لايبرري رو توي شاخه ي Lib و هدرهاشون رو هم به شاخهي Include كپي كردم و به IDE توربو سي رفتم. يكي از سمپلهاي اين پروژه كه پيادهسازي عمل Ping بود رو باز كردم و پروژه رو كامپايل كردم. ران شد؟ كور خوندين! نشد.
من تا امروز خيال ميكردم كه IDE توربوسي يه قدري از هوش انساندادي(!) بهره برده و فقط لايبرريهايي كه لازم هست رو به پروژه اضافه ميكنه و از طرفي هر چيزي كه توي فولدر lib هست رو در صورت لزوم به پروژه اضافه ميكنه. در حالي كه اين برنامه از هوش انساندادي هيچ بهرهاي نبرده و فقط مثل احمقها يه سري لايبرري پيشفرض كه بهش گفتن رو به برنامه لينك ميكنه كه شايد حتي احتياج هم نباشن! اين يعني اينكه بايد برنامهي من توسط كامپايلر خط فرمان كامپايل بشه و بعد توسط لينكر خط فرمان لينك بشه. گند بزنن به اين همه مراحل. وقتي برنامه هيچ مشكلي نداشته باشه بدون ارور كامپايل ميشه و فايل obj رو ميده منتها لينك كردن زياد برو تو گلو نيست. ضمن اينكه بايد توجه ميكردم كه آيا توابع اسمبليم با Underscore پيشفرضي كه سي براي معادل قرار دادن توابع extern دنبالش ميگرده سازگاره يا نه وگرنه بايد با يه آپشن خاصي لينك بشه. همينطور بايد با توجه به مدل حافظه، يكي از فايلهاي توي شاخهي Lib رو بعلاوهي يكي از لايبرريهايي كه حاصل دست خودم بود، به obj پروژهي پينگمون لينك ميكردم. خلاصه اينكه اينهمه كار كه كرديم همه توي خط فرمان بود و همگي يادآور خاطرات دوران راهنمايي و دبيرستان بود كه همه جور پشتك و آفتابمهتابي با خط فرمان ميزديم.
لحظهي موعود فرا رسيد و فايل exe ساخته شد. توي خط فرمان جداگونهاي زدم Ping yahoo.com تا آي پي ياهو رو بدست بيارم. سه جواب با TTL هاي ۵۱و ۵۰و ۴۹ اومد كه نمونهي بارزي از “امكان طي مسيرهاي مختلف براي رسيدن به يه سيستم ديگه در پروتكل IP” هست و نشون ميداد كه آيپي ياهو (البته يكيشون) ۲۱۶.۱۰۹.۱۱۲.۱۳۵ هست. برنامهي پينگ ما قدرت resolve كردن دامنهها رو نداره و فقط آيپي دريافت ميكنه. بعد توي خط فرمان اصليمون كه lsppp هم اينستال شده بود، پينگ رو با آيپي بالا براي ۵ بسته (تعداد بستهها رو بعنوان پارامتر ميگرفت) تنظيم كردم و Enter رو زدم.
Ping Statistics
Sent ۱
Sent ۲
Sent ۳
Sent ۴
Sent ۵
^C
واي از خوشحالي يه ضربهي تاي چي حواله فضاي بين خودم و مانيتور كردم. (نترسين تاي چي ضربههاش هم بر پايهي تنفس و آرامش هست اصلاً كسي اسمش رو ضربه نميذاره!) دقت كردين چي شد؟ ۵ بستهي پينگ ارسال شد. فقط ارسال. برنامهي ما بخاطر اينكه از آيپي خودش خبر نداشت نميدونست كه آدرس برگشت رو چي بذاره و فقط بستههاي پينگ رو ارسال كرد و طبعاًَ قادر به دريافتش نبود. ولي تا همينجا هم يعني پروژه به نقطهي مطلوب رسيده و Mile Stone حساسي رو گذرونده. اين اتفاق اينقدر خوشحالم كرد و اينقدر زور زده بودم و خسته بودم كه بعد از اين اصلاً نموندم كه ببينم ميتونم recive ش رو هم انجام بدم يا نه و گفتم “من كار خود را كردم” و ديگه داشت ديروقت ميشد كه خداحافظي كردم و اومدم خونه.
اضافه:
توضيح عكسها:
۱- اين همون بيسكوئيت پيسياي هست كه گفتم تو شركت بود. پورت COM به وضوح مشخصه. سيم دو رشتهاي، سيم برقش هست و سيمي هم كه خارج شده Lan هست. اون دايره هم باتري CMOS هست و بوردي هم كه جدا از اصل پيسي، بالاي عكس ديده ميشه، هارد فلشي هست. قسمت سياه كنار انگشت هم ISA كارد هست.
۲- اين هم مودم GSM هست كه به پورت RS۲۳۲وصل شده. اون فيش هم كه ميبينين تو هوا هست مال برقشه. آنتن مودم هم كه معرف حضور هستن! يه برآمدگي سياه كنار پايهي آنتن، پشت برد ديده ميشه كه توش يه باريكه ي زرد پيداست. اين مفلوك هم سيم كارت ايرانسل هست.
۳- پي سي شلوغ پلوغ! واي عشق منه. با يه حركت از تو دل و رودهي آويزونش ميتوني جامپر آپانديسيتش رو دستكاري كني و چرخش قلبش رو ببيني. البته بعيد نيست وقتي مشغول پارتيشن بندي هستي مامانت بياد و هارد رو مجبور به سكتهي كامل كنه. خدا رو شكر هنوز گارانتيش مونده بود وگرنه هيچ ماساژي نميتونست ريكاورش كنه! اون كاغذ زردا هم دستور كارهايي هست كه آقاي فتحي ميده. فردا ساعت ده فلان كار؛ فلان روز ساعت فلان جلسهي فلاني… كاغذ ميده، ولي من به اضافه كردن Appointment و Event به Calendar موبايلم بيشتر اعتماد دارم تا اين كاغذا! Reminder ست ميكني از غم دنيا فارغ ميشي!
نكتهي نهايي اينكه كپي رايت انگشتها اكيداً مال خودمه!!
دلم برای اون هارده که وسط مراسم شخمیدن(شخم زدن) خاموش شد میسوزه,
به نام حق
راه های ساده تریم بود ، لغمه را چرخوندی ، توصیه میکنم قبل از هر کاری یک مقدار بیش از اندازه ای تحقیق کن ! حتما (۸۸%)کسی قبلا این کار کرده =>…
موفق باشی
لذت بردم!
بنويس!
.
.
فروغ!