پاک کردن اطلاعات حافظه CMOS در کامپيوترهايXT باتوجه به تعداد محدود پارامترها، پيکربندي سيستم بااستفاده از ميکروسوئيچ امکان پذير مي باشد اما در سيستم هاي AT به دليل بالا بودن تعداد پارامترهاي قابل برنامه ريزي توسط استفاده کننده ، حضور يک منبع که هم به راحتي در دسترس باشد و هم جاي کمي اشغال نمايد ، ضروري به نظر مي رسد. اين منبع در کامپيوترهاي AT حافظه CMOS ناميده مي شود . حافظه CMOS داراي 64 بايت و يا بيشتر ظرفيت مي باشد که توسط دو پورت H70 و H71 قابل دسترسي مي باشد. و از آن براي نگهداري ساعت ، تاريخ و پيکربندي سيستم استفاده مي شود. همچنين تعدادي از بيت هاي اين حافظه براي چک کردن پيکربندي سيستم تحت عنوان CHECKSUM استفاده مي شود. محتويات اين حافظه در زمان خاموش بودن سيستم توسط يک باطري پشتيبان 6/3 ولتي نگهداري مي شود. اين باطري ممکن است در داخل و يا در خارج از مادربورد قرار داشته باشد . البته در بعضي از سيستمها مجموعه باطري و حافظه به صورت يکپارچه ارائه شده که نمونه آن مارک DALLAS مي باشد. از نظر عملکرد و نحوه دستيابي هيچ تفاوتي بين انواع متفاوت CMOS وجود ندارد و همگي با استفاده از دو پورت يادشده قابل دسترسي و برنامه ريزي مي باشند. تغيير در محتويات CMOS بطور معمول از طريق برنامه SETUP امکان پذير است اما در صورتي که در ست آپ سيستم رمز تعريف شده باشد و رمز مربوطه را هم در اختيار نداشته باشيد در اينصورت امکان ورود به برنامه ست آپ و تغيير در پيکر بندي سيستم ( اطلاعات CMOS ) امکان پذير نخواهد بود . در اين موارد راهي جز پاک کردن محتويات CMOS نداريم . دراين مواقع در احتمال وجود دارد . 1) براي وارد شدن به سيستم رمز تعريف شده باشد. 2) براي وارد شدن به ست آپ رمز تعريف شده باشد. در حالت اول با توجه به بوت نشدن کامپيوتر کاري از نرم افزارها ساخته نيست و بايد اقدام به پاک کردن محتويات CMOS به صورت سخت افزاري نمود . اين کار معمولا با برداشتن باطري پشتيبان ست آپ براي چند دقيقه ، يااتصال کوتاه بر روي جامپر مربوطه ( J8 ) و يا تعويض تراشه CMOSامکان پذير مي باشد . البته اين روشها در صورتي کارآمد خواهد بود که شما مجاز به بازکردن کيس کامپيوتر باشيد که البته در اکثر مواقع اين امکان وجود ندارد . شايان ذکر است در صورتي که اعمال فوق درست صورت نگيرد احتمال سوختن و خراب شدن CMOS وجود دارد بنابراين تا حد امکان بايد از کاربرد اين روش اجتناب شود مگر در مواقعي که ضرورت ايجاب نمايد. در حالت دوم با توجه به بوت شدن کامپيوتر نيازي به اقدامات فوق نبوده و مي توان با استفاده از نرم افزارهاي مناسب اقدام به پاک کردن و يا ذخيره اطلاعات CMOS نماييم . از آنجايي که هميشه نرم افزار مناسب وجود ندارد و يا در دسترس نيست بعنوان يک مهندس نرم افزار بايد قادر باشيم تا با استفاده از امکانات موجود بر روي کامپيوتر اين کار را انجام دهيم . با استفاده از برنامه DEBUG.EXE که همراه فايلهاي سيستم عامل DOS و ويندوز وجود دارد مي توان با خواندن و يا نوشتن در پورت هاي H70 و H71 تغييرات لازم را در محتوياتCMOS اعمال نمود از دو پورت فوق پورت H70 بعنوان گذرگاه آدرس( ADDRESS BUS ) و پورت H71 بعنوان گذرگاه داده بکار مي رود. الگوريتم کلي کار به اين صورت است که CMOS را بعنوان يک آرايه يک بعدي در نظر مي گيريم که داراي 256 خانه مي باشد . براي دسترسي به هر خانه بايد ابتدا انديس ( آدرس ) خانه را در پورت H70 بنويسيم و بعد از دسترسي به خانه مورد نظر مي توان دادة دلخواه را درآن نوشت و يا از آن خواند . دسترسي به داده ها نيز فقط از طريق پورت H71 امکان پذير مي باشد . آخرين نکته اينکه عمل نوشتن و يا خواندن از پورت ها به کمک ثبات AL و توسط دستورهاي IN و OUT مربوط به زبان اسمبلي امکان پذير است . الگوريتم کلي حذف اطلاعات حافظه CMOS
void
CLR_CMOS(void){
پياده سازي اين الگوريتم به کمک زبان اسمبلي بسيار آسان مي باشد . اما از
آنجا که قرار است اين الگوريتم را با استفاده از
debug
پياده سازي کنيم قبل از هر چيز بايد با تعدادي از دستورات
اين نرم افزار آشنا شويم
حال با فرض بر اين که شما وارد محيط debug شده ايد مجموعه دستورات لازم براي پياده سازي الگوريتم فوق را در زير مي آوريم . مرحله 1 با اجراي دستور a وارد مود برنامه نويسي اسمبلي شويد در اين صورت debug با نشان دادن آدرس xxxx:0100 آمادگي خود را براي دريافت دستورات اعلام مي دارد ( در عمل debug بجاي xxxx سگمنت مربوط به برنامه را نشان مي دهد که توجه به اين موضوع اصلاً در اينجا اهميتي ندارد .) مرحله 2 دستورات زير را با دقت تايپ کرده و در انتهاي هر خط کليد ENTER را فشار دهيد ( مواردي که زير آن خط کشيده شده از طرف نرم افزار نشان داده مي شود اين آدرسها در واقع مشخص کننده طول هر دستور و در نهايت طول برنامه مي باشد) . XXXX:100 MOV CL , FF XXXX:102 MOV AL , CL XXXX:104 OUT 70 , AL XXXX:106 MOV AL , 0 XXXX:108 OUT 71 , AL XXXX:10A LOOP 102 XXXX:10C INT 20 XXXX:10E (در صورتي که مايل به درک کار دستورات برنامه نمي باشيد به مرحله 3 برويد ) توضيح خط به خط برنامه : خط اول : يک شمارنده با مقدار 255 در نظر گرفته شده که معادل همان متغير i در الگوريتم است . خط دوم : al را برابر cl قرار مي دهيم. خط سوم : محتواي al را به پورت h70 ارسال کرديم (در واقع تنظيم گذرگاه آدرس ) . خط چهارم : al را برابر صفر قرار مي دهيم . خط پنجم : محتواي al را به پورت h71 ارسا ل مي کنيم و در واقع داده موجود در al را در آدرسي که قبلاً مشخص کرده ايم مي نويسيم خط ششم : از آنجا که عمليات مربوط به تنظيم آدرس و نوشتن داده در محل آدرس بايد به تعداد لازم تکرار شود بنايراين از دستور LOOP براي ايجاد يک حلقه با تعداد تکرار مشخص شده در CX استفاده کرديم دستور LOOP 102 باعث مي شود تا برنامه در هربار اجرا يک واحد از مقدار CX کم کرده و در صورت منفي شدن دستور بعدي و در غير اينصورت به آدرس مشخص شده پرش مي کند .در اين برنامه با توجه به مقدار CX خطوط دوم تا پنجم 256 بار اجرا مي شوند . خط هفتم : اجراي اين وقفه باعث ختم برنامه خواهد شد مرحله 3
بعد از فشردن کليدENTER
درآخرين مرحله مجدداً اعلان
DEBUG
ظاهر مي شود در اين مرحله چنانچه نمي خواهيد برنامه را ذخيره کنيد در جلوي
اعلان مرحله 4 با اجراي فرمان R CX در مقابل اعلان DEBUG مقدار ثبات CX را به E تغيير داده و کليد ENTER را فشار دهيد .( دقت داشته باشد که کليه اعداد در DEBUG در مبناي 16 نوشته مي شوند و عدد Eهمان طول برنامه شماست يعني اختلاف 10E – 100 در مبناي 16) مرحله 5 با اجراي فرمان N CLR_CMOS.COM در جلوي اعلان DEBUG نام CLR_CMOS.COM را براي برنامه خود مشخص کنيد ( به جاي اين نام مي توانيد نام دلخواه خودتان را با پسوند COM جايگزين کنيد ) مرحله 6 با اجراي فرمان W در جلوي اعلان DEBUG تعداد 14 بايت کد نوشته شده در فايلي با نامي که در مرحله قبل مشخص کرده ايد ذخيره خواهد شد . حال شما داراي يک فايل اجرايي 14 بايتي خواهيد بود که هر وقت بر روي يک کامپيوتر اجرا شود محتويات حافظه CMOS آنرا پاک مي کند . مرحله 7 در اين مرحله مي توانيد همچون مرحله 3 عمل نموده و يا با اجراي دستور Q از DEBUG خارج شويد و فايلي را که ساخته ايد اجرا نموده و سيستم را RESET کنيد و وارد ست آپ شويد. |