ثبات كنترل پورت موازي

ثبات كنترل پورت موازي يك ثبات خروجي است. خواندن اين مكان آخرين مقدار نوشته شده به ثبات كنترل، بجزء براي بيت ۵ كه فقط نوشتني است، را بر مي گرداند. بيت ۵ يا بيت مسير داده، تنها در PS/2 و ديگر سيستم هايي كه از پورت موازي دو طرفه پشتيباني مي كنند وجود دارد. اگر شما در اين بيت صفر

بنويسيد، خطوط داده و strobe به عنوان بيت هاي ورودي هستند، دقيقاً مثل پورت موازي يكطرفه، اگر شما در اين بيت ۱ بنويسيد، خطوط داده و strobe به عنوان ورودي ها هستند. توجه كنيد كه در حالت ورودي (bit5=1) بيت صفر ثبات كنترل دقيقاً يك ورودي است. توجه: نوشتن ۱ در بيت ۴ ثبات كنترل، IRQ چاپگر را توانا مي سازد. اين ويژگي در همة سيستم ها كار نمي كند، بطوريكه فقط برنامه هاي اندكي از وقفه هاي پورت موازي استفاده مي‌كنند. وقتي فعال باشد، پورت موازي يك وقفه OFH را توليد خواهد كرد هرگاه چاپگر انتقال داده را تصديق مي كند.

زمانيكه كامپيوترهاي شخصي در حدود ۳ پورت موازي جداگانه را پشتيباني مي كردند، مي توانست بيشتر از ۳ مجموعه از ثبات هاي پورت موازي در سيستم در هر لحظه وجود داشته باشد. آدرس هاي پايه پورت موازي به ۳ پورت موازي تحصيص داده شده‌اند: ۳Bch و ۳۷۸h و ۲۷۸h. ما به اينها به عنوان آدرس هاي پايه براي: LPT1، LPT2 و LPT3 به ترتيب رجوع مي كنيم. ثبات داده پورت موازي هميشه واقع شده در آدرس پايه براي يك پورت موازي، ثبات وضعيت در آدرس پايه ۱+

قرار گرفته و ثبات كنترل در آدرس پايه ۲+ قرار گرفته است. براي مثال براي LPT1 ثبات داده در آدرس ۳Bch:I/O و ثبات وضعيت در آدرس ۳BDH:I/O و ثبات كنترل در آدرس ۳BEH:I/Q قرار دارد. مشكل كوچكي وجود دارد، آدرس هاي I\O براي LPT1:، LPT2: و LPT3: داده شده در بالا، آدرس هاي فيزيكي براي پورت هاي موازي هستند. بايوس آدرس هاي منطقي براي پورت هاي موازي فراهم مي كند. اين امر به استفاده كنندگان اجازه مي دهد چاپگرهايشان را Remap كنند (زمانيكه بيشتر نرم افزارها فقط با LPT1: نوشته شده اند). براي انجام اين امر، بايوس هشت بايت در فضاي متغير بايوس در نظر مي گيرد ( ) مكان ۴۰:۸ شامل آدرس پايه براي LPT1: منطقي است. مكان شامل آدرس پايه براي LPT2: است. وقتي نرم افزاري به LPT1: و LPT2: و غيره دستيابي پيدا مي كند، آن بطور معمول به پورت موازي آدرس پايه اي كه در يكي از اين مكان ها رخ داده دسترسي پيدا مي‌كند.

 

۳-۲۱- كنترل يك چاپگر از طريق پورت موازي
اگرچه دستگاههاي زيادي وجود دارند كه به پورت موازي PC شما وصل مي شوند، چاپگرها تعداد گسترده اي از اين اتصالات به شمار مي آيند. بنابراين، شح اينكه چطور مي شود و چاپگرها را به وسيله پورت موازي كنترل كرد احتمالاً بهترين مثال در حال حاضر است. با استفاده از صفحه كليد، نرم افزارهاي شما در ۳ سطح مختلف عمل مي‌كنند:

آن مي تواند داده ها را به وسيله داس يا بوسيله استفاده از بايوس يا مستقيماً بوسيله نوشتن روي سخت افزار پورت موازي چاپ كند. با استفاده از واسط صفحه كليد، استفاده از داس يا بايوس بهترين راه است، اگر شما مي خواهيد سازگاري را با وسايل ديگر كه به پورت موازي وصل شده اند را حفظ كنيد. البته، اگر شما در حال كنترل دستگاههاي پورت موازي ديگر هستيد، تماس با سخت افزار (به صورت مستقيم) تنها راه شماست. به هر حال، بايوس پشتيباني خوبي از چاپگر بفرستيد.

 

۱-۳-۲۱-چاپ از طريق DOS
MS-Dos دو فراخواني كه شما مي توانيد براي فرستادن داده ها به چاپگر استفاده كنيد را فراهم كرده است. تابع ۰۵h داس، كاراكتر موجود در ثبات dl را به طور مستقيم به چاپگر مي نويسد. اين توابع در فصل داس و بايوس به صورت گسترده بحث شده اند، ما اينجا در اين رابطه بيشتر بحث نخواهيم كرد. براي اطلاعات بيشتر نگاه كنيد به «MS-Dos و PC-BIOS و File I\O» در صفحه ۶۹۹٫

۲-۳-۲۱-چاپ تز طريق بايوس

اگرچه داس توابع پاسخگويي براي فرستادن كاراكتر به چاپگر فراهم كرده است، اما توابعي كه به شما اجازه مقدار دهي چاپگر براي بدست آوردن وضعيت فعلي چاپ را بدهد، فراهم نكرده است. علاوه بر اين داس فقط بر روي :LPT1 چاپ مي كند. روتين nit 17h بايوس كامپيوترهاي شخصي، سه تابع چاپ، مقدار دهي مجدد و وضعيت را فراهم كرده است شما مي توانيد اين توابع را براي هر پورت موازي پشتيباني شده در سيستم بكار ببريد. تابع چاپ همانند تابع كاراكتر داس است. تابع initialize، چاپگري را كه از سيستم وابسته به اطلاعات زمان استفاده مي كند، مقداردهي اوليه مي كند. وضعيت چاپگر، اطلاعاتي را از وضعيت پورت چاپگر در مورد اطلاعاتي كه زمانش به اتمام رسيده بر مي گرداند. براي اطلاعات بيشتر در مورد اين روتين ها به MS-Dos، PC-BIOS و File I/O نگاه كنيد.

۳-۳-۲۱-يك روتين سرويس وقفه int 17h

شايد بهترين راه براي مشاهده عملكرد توابع بايوس، نوشتن يك int 17h ISR جايگزين براي چاپگر است. اين بخش پروتكل دست تكاني و متغيرهايي كه درايور چاپگر استفاده مي كند را شرح مي دهد. همچنين عملكرد و نتايج برگشتي اختصاص يافته به هر ماشين را توضيح مي دهد. ۸ متغير در فضاي متغير بايوس وجود دارد كه درايور چاپگر استفاده مي كند. جدول زير هر يك از اين متغيرها را شرح مي دهد:
شرح آدرس
آدرس پايه براي LPT1:device 40:08
آدرس پايه براي LPT2:device 40:0A
آدرس پايه براي LPT3:device 40:0C
آدرس پايه براي LPT4:device 40:0E
LPT1:Time-out value: نرم افزار گرداننده پورت چاپگر بايد يك خطا برگرداند اگر دستگاه چاپگر در يك زمان معقول پاسخگو نباشد.
اين متغير (اگر صفر نباشد) تعيين مي كند كه چطور درايور براي گرفتن ACK چاپگر در حلقه هاي ۶۵۵۳۶ بار تكرار بايد منتظر بماند. اگر صفر باشد درايور براي هميشه منتظر خواهد ماند ۴۰:۷۸
LPT2:Time out value توضيح بالا را ببينيد ۴۰:۷۹
LPT3:Time out value توضيح بالا را ببينيد ۴۰:۷A

Time-out value توضيح بالا را ببينيد ۴۰:۷B
شما متوجه خواهيد شد كه يك اختلاف ناچيز در پروتكل دست تكاني در اين كد وجود دارد. اين درايور چاپگر براي گرفتن تصديق از چاپگر بعد از فرستادن يك كاراكتر منتظر نمي ماند. در عوض، آن چك مي كند تا ببيند آيا چاپگر يك تصديق دريافت براي كاراكتر قبلي، قبل از فرستادن يك كاراكتر فرستاده است يا نه. اين عمل مقداري زمان مي برد زيرا، برنامه چاپ كاراكترها مي تواند به صورت موازي با دريافت تصديق از چاپگر كار كند. شما همچنين متوجه خواهيد شد كه اين درايور

ويژه، بر خطوط Busy(اشغال) نظارت نمي كند. تقريباً هر چاپگر در زمان هستي خودش اين خطوط را غير فعال مي گذارد (نه اشغال)، بخاطر اينكه نيازي به چك كردن آن نيست. اگر شما با چاپگري كه خط Busy ا دستكاري كرده است مواجه بشويد، تغيير كد ناچيز است. كدهاي زير در سرويس ۱۷h انجام مي شود:
; INT17. ASM

يك TSR غير فعال كه اداره كننده Int 17h بايوس را جايگزين مي كند ;
اين روش كار هر يك از توابع Int17h را كه يك بايوس استاندارد فراهم مي كند ا شرح مي دهند;
توجه كنيد كه اين كد به int 2Fh وصل نشده است (وقفه تسهيم) ;
به هيچ وجه شما نمي توانيد اين كدها را از حافظه برداريد به غير از راه اندازي مجدد;

اگر شما قصد انجام اين دو چيز را داريد (همچنين چك كردن براي نصب قبلي)، فصل;
مربوط به برنامه هاي مقيم را ببينيد. اين كدها از اين برنامه به خاطر اندازه شان حذف شده اند;

Cseg و EndResident بايد قبل از سگمنت هاي استاندارد قرار بگيرند. ;
Cseg segment para public ‘code’
Cseg ends
سگمنت نشانگر، براي پيدا كردن انتهاب بخش resident
EndResident segment para public ‘Resident’
EndResident ends
.Xlist
include stdlib.a
includelib stdlib.lib
.list
Byp equ <byte ptr>

Cseg segment para public ‘code’
Assume Cs:Cseg, ds:Cseg
OldInt17 dword ?
متغيرهاي بايوس
;
prtrBase equ 8
prtrTimeout equ 78h
اين كد عملكرد تابع Int 17h را اداره مي كند. Int 17h يك روتين بايوس براي ;

فرستادن داده به چاپگر و گزارش وضعيت چاپگر است. براي اين روتين سه نوع ;
فراخواني مختلف بر طبق محتواي ثبات AH وجود دارد. ;
ثبات DX شامل شماره پورت چاپگر است.
; Dx=0 – – useLPT1:
; Dx=1 – – use LPT2:
; Dx=2 – – use LPT3:
; Dx=3 – – use LPT4:
چاپ كاراكتر در AL به چاپگر، وضعيت چاپگر در AH برگردانده شده ;AH=0 – –
اگر بيت باشد سپس يك خطاي Timeout رخ مي دهد ;

چاپگر را مقدار دهي اوليه مي كند. وضعيت در AHبرگشت داده مي شود ;AH=1 – –
وضعيت چاپگر در AH برگردانده مي شود ;AH=2
بيت هاي وضعيت برگشت داده شده در AH به صورت زير هستند: ;

; Bit function Non-error values
; 0 1=timeout error
; 1 unused
; 2 unused
; 3 1=I/O error

; ۴ ۱=selected, 0=deselected
; 5 1=out of paper
; 6 1=Acknowledge
; 7 1=not Busy
توجه كنيد كه سخت افزار، بيت ۳ با مقدار صفر بر مي گرداند اگر اين خطا اتفاق افتاده باشد و ۱ اگر هيچ خطايي اتفاق نيفتاده باشد. رم افزار بطور معمول اين بيت ها را قبل از برگشت دادن به فراخواننده معكوس مي كند.

مكان هاي سخت افزار پورت چاپگر
۳پورت استفاده شده بوسيله سخت افزار چاپگر وجود دارد: ;
پورت خروجي كه داده به چاپگر فرستاده شده است(۸ بيت) ; prtporaAdrs
پورت ورودي كه وضعيت چاپگر مي تواند خوانده شود(۸ بيت) ;PrtrPortAdrs+1
پورت خروجي كه اطلاعات كنترلي به چاپگر فرستاده شده است ; l prtrportAdrs+2
پورت خروجي داده ۸ بيتي به چاپگر از طريق اين پورت منتقل شده است ;
پورت وضعيت ورودي ;
;bit0 :unused.
; bit1:unused.
; bit2:unused.
Error، به طور معمول اين بيت به اين معني است كه چاپگر با خطايي ; bit3:
مواجه شده است به هر حال، بوسيله p101 نصب شده است. اين يك خط برگشتي داده براي اسكن صفحه كليد است.
; bit 4:
+SLCT معمولاً اين بيت براي تعيين اينكه آيا چاپگ انتخاب شده است يا نه بكار مي‌رود به وسيله p101 نصب شده است. اين يك خط برگشتي داده براي اسكن صفحه كليد است.

+pe، وجود ۱ در اين بيت نشان مي دهد كه چاپگر با آخر صفحه رسيده ; bit5:
است. در بسياري از پورت هاي چاپگر، اين بيت به صورت پوج وجود دارد;
-ACK، وجود ۰ در اين بيت بيانگر آن است كه چاپگر آخرين كاراكتر ;bit 6 را دريافت كرده و براي پذيرش كاراكترهاي ديگر آماده است. اين بيت به طور معمول در بايوس به عنوان بيت ۷ استفاده نشده است.

– Busy، وقتي اين سيگنال فعال باشد، پرينتر مشغول است و ;bit7
نمي تواند داده اي را بپذيرد. وقتي اين بيت به ۱ بيت شده باشد چاپگر كاراكترهاي ديگر را مي تواند بپذيرد.
پورت كنترل خروجي
, + strobe
; bit 0:
;
+Auto FD xt: مقدار ۱ ذخيره شده در اين بيت باعث ; bit 1: مي شود چاپگر بعد از چاپ خط فعلي، تعويض خط انجام دهد. در تعدادي از واسطه‌هاي چاپگر (براي مثال كارت گرافيك Hercules) اين بيت Null است ;
;
-init مقدار ۰ در اين بيت (براي حداقل ۵۰us) ; bit 2:

باعث مي شود چاپگر دوباره خودش را مقداردهي اوليه كند. ;
+SLCTIN مقدار ۱ در اين بيت چاپگر را انتخاب مي كند ;bit 3:
و مقدار ۰ سبب مي شود چاپگر به حالت off line برود ;
+IRQ Enable، مقدار ۱ در اين بيت اجازه مي دهد يك وقفه ; bit 4:

رخ بدهد وقتي –ACK از ۱ به ۰ تغيير مي كند. ;
;
كنترل مستقيم روي پورت BI-DIR ; bit 5:
;
0= خروجي و =۱ ورودي ;
;
رزرو شد، بايد صفر باشد ; bit 6: