ساخت دیسکت Boot
در
کامپيوترهاي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){
for(int
i=0;i<256;i++){
move
value of i to register Al ;
Out
Register Al to Port 70h ;
Set
register Al to ziro ;// Al=0
Out
Register Al to Port 71h
}
return;
}
پياده سازي اين الگوريتم به کمک
زبان اسمبلي بسيار آسان مي باشد .
اما از آنجا که قرار است اين
الگوريتم را با استفاده از
debug
پياده سازي کنيم
قبل از هر چيز بايد با تعدادي از
دستورات اين نرم افزار آشنا شويم
.
با
اجراي فايل
debug.exe
مي توانيد وارد محيط نرم افزار
debug
شويد محيط اصلي نرم افزار يک
علامت خط تيره مي باشد که بعد از
اجراي فايل
debug.exe
ظاهر مي شود.
اين نرم افزار داراي تعدادي دستور
مي باشد که با تايپ يک علامت
سئوال و فشردن کليد
ENTER
مي توان ليست فرمانها را مشاهده
نمود . در زير تعدادي از فرمانها
را که براي پياده سازي اين
الگوريتم به آن نياز داريم توضيح
مي دهيم و ساير فرامين را به
خواننده واگذار مي کنيم تا درصورت
نياز با مراجعه به راهنماي نرم
افزار با نحوه کار هريک آشنا شود
|
عملکرد |
دستور |
|
امکان نوشتن کداسمبلي
از آدرس مشخص شده در
صورت مشخص نکردن آدرس
از آدرس موجود در
IP
بعنوان آدرس شروع
استفاده مي شود . در
ابتداي کار
IP=100
است که همان شروع
فايلهاي
Com
و يا
bin
مي باشد |
A [address] |
|
براي نمايش /
مقداردهي ثبات ها
بکار مي رود. در
صورتي که بدون
پارامتر استفاده شود
محتويات کليه ثبات ها
را نشان مي دهد اما
در صورتي که با نام
يک ثبات بکار رود
علاوه بر نمايش مقدار
فعلي ثبات مورد نظر
امکان تغيير محتويات
آنرا نيز فراهم مي
آورد. |
R [register] |
|
براي مشخص نمودن نام
و مسير فايل ورودي /
خروجي بکار مي رود . |
N [pathname] |
|
براي اجراي برنامه تا
يک آدرس مشخص بکار مي
رود . چنانچه بدون
پارامتر بکار رود
برنامه را از خط
جاري (ip
فعلي ) تا انتهاي
برنامه اجرا مي کند . |
G |
|
براي نوشتن برنامه
از آدرس
h100
به تعداد بايتهاي
مشخص شده در ثبات
cx
بکار مي رود . |
W |
|
براي خروج از محيط
DEBUG
بکار مي رود |
Q |
حال با فرض بر اين که شما وارد
محيط
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
ظاهر مي شود در اين مرحله چنانچه
نمي خواهيد برنامه را ذخيره کنيد
در جلوي اعلان ( همان علامت منها
) دستور
G
را اجرا کنيد تا کليه محتويات
CMOS
پاک شود. سيستم
را
RESET
نموده و با فشردن کليد
DEL
وارد ست آپ سيستم شويد و تغييرات
لازم را اعمال نماييد . اما در
صورتي که تمايل داريد کد برنامه
را به صورت يک فايل اجرايي از نوع
COM
درآوريد مراحل بعدي را انجام دهيد
مرحله
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
کنيد و وارد ست آپ شويد.