توابع و وقفه های موس
MOUSE
Presented by :
MahdieTahmasbi – Sara Ashraf joulaei-arezoo vahidi
موس یک دستگاه متداول اشاره گر می باشد که توسط یک رابط نرم افزاری به نام هدایت کننده دستگاه اداره می شود و به طور معمول توسط وارده ای در پرونده cnfig.sys یا autoexec.bat نصب می گردد.این هدایت کننده باید به شکلی نصب شود که برنامه موس را تشخیص دهد و به اعمال آن پاسخ دهد.
برخی از تعاریف موس عبارتند از
پیکسل : کوچکترین عنصر قابل آدرس دهی بر روی صفحه است. برای مثال در مود متنی 03 هشت پیکسل در هر بایت قرار دارد.
اشاره گر موس : در مود متنی این اشاره گر یک بلوک چشمک زن با ویدئوی معکوس می باشد؛ در مود گرافیک این اشاره گر یک فلش است.
میکی : واحد اندازه گیری حرکت موس است و تقریبا 200/1 یک اینچ می باشد.
شماره میکی : تعداد میکی هایی که موس به افقی و یا عمودی حرکت می کند . اداره کننده موس از شماره میکی برای حرکت اشاره گر بر روی صفحه به تعداد مشخصی پیکسل استفاده می کند.
محدوده سرعت : این سرعت بر حسب میکی در ثانیه است که موس باید حرکت کند تا سرعت حرکت اشاره گر بر روی صفحه 2 برابر شود. پیش فرض آن 64 میکی در ثانیه است.
تمام اعمال موس در برنامه توسط توابع استاندارد INT33H به این شکل اجرا می شوند:
Mov Ax , function ; request mouse function
… ; parameters (if any)
INT 33h
توجه داشته باشید که در مقابل اعمال INT که از ثبات AH استفاده می کنند، توابع INT 33H در ثبات AX قرار می گیرند.
تابع عضويت و درجه عضویت
اولین دستور موس که برنامه صادر می کند باید تابع 00H باشد ،
که فقط رابط بین اداره کننده موس و برنامه را مقدار اولیه می دهد. عموما نیاز به یکبار صدور لین فرمان در شروع برنامه می باشد. بعد از تابع 00H ،برنامه باید تابع 01H را اجرا کند که باعث می شود اشاره گر موس بر روی صفحه ظاهر شود . بعد از آن ، باید از محدوده وسیع اعمال موس ، عمل مورد نظر انتخاب شود.
توابع موس قابل دسترسی برای INT 33H
00H آماده سازی موس
01H نمایش اشاره گر موس
02H پنهان نمودن اشاره گر موس
03H تعیین وضعیت کلیدها و موقعیت موس
04H تنظیم محل موس
05H دریافت اطلاعات فشردن کلید
06H دریافت اطلاعات رها نمودن کلید
07H تنظیم حدود افقی اشاره گر
08H تنظیم حدود عمودی اشاره گر
09H تنطیم نوع اشاره گر گرافیکی
توابع موس قابل دسترسی برای INT 33H
0AH تنظیم نوع اشاره گر متنی
0BH خواندن شمارنده های حرکت موس
0CH نصب اداره کننده وقفه برای وقایع موس
0DH روشن نمودن شبیه ساز قلم نورانی
0EH خاموش نمودن شبیه ساز قلم نورانی
0FH تنظیم نسبت میکی به پیکسل
10H تنظیم ناحیه حذف اشاره گر
13H تنظیم محدوده سرعت دو برابر
14H جایگزینی وقفه واقعه موس
15H تعیین اندازه بافر برای وضعیت اداره کننده موس
16H ذخیره وضعیت اداره کننده موس
17H بازیابی وضعیت اداره کننده موس
18H نصب اداره کننده جایگزین برای وقایع موس
19H دریافت آدرس اداره کننده جایگزین
1AH تنظیم حساسیت موس
1BH دریافت حساسیت موس
1CH تنظیم سرعت وقفه موس
1DH انتخاب صفحه نمایش برای اشاره گر
1EH دریافت صفحه نمایش برای اشاره گر
توابع موس قابل دسترسی برای INT 33H
1BH دریافت حساسیت موس
1CH تنظیم سرعت وقفه موس
1DH انتخاب صفحه نمایش برای اشاره گر
1EH دریافت صفحه نمایش برای اشاره گر
1FH غیر فعال سازی اداره کننده موس
20H فعال سازی اداره کننده موس
21H راه اندازی مجدد اداره کننده موس
22H تعیین زبان برای پیغامهای اداره کننده موس
23H تعیین شماره زبان
24H دریافت اطلاعات موس
اعمال اصلی موس :
اعمال اصلی عمل INT 33H که برای برنامه های استفاده کننده از موس لازم است :
تابع 00H : آماده سازی موس.
اولین دستوری است که برنامه برای اداره موس صادر می کند و نیاز به یک بار اجرا دارد . AX با تابع 00H بدون پارامتر دیگر پر می شود و INT 33H صادر می گردد ، این عمل مقادیری به این شکل را بر می گرداند :
* AX=0000Hاگر حمایتی برای موس وجود نداشته باشد ، و FFFFH اگر حمایت وجود داشته باشد.
* BX= تعداد کلیدهای موس اگر حمایت وجود داشته باشد.
اگر حمایت وجود داشته باشد ، این عمل ، اداره کننده موس را به این صورت مقدار می دهد:
* اشاره گر موس در مرکز صفحه قرار می گیرد.
* اشاره گر موس در صورت قابل رویت بودن پنهان می شود .
* صفحه نمایش اشاره گر موس صفر قرار داده می شود.
* اشاره گر موس براساس مود صفحه نمایش تنظیم میشود.مربعی با رنگ معکوس برای متنی و فلش برای گرافیکی
*تنظیم نسبت میکی به پیکسل ، که افقی ="8به8" و نسبت عمودی 16 به 8 است.
* تنظیم حدود افقی و عمودی برای اشاره گر برای مقادیر حداقل و حداکثر.
* تنظیم محدوده سرعت دو برابر به 64 میکی در ثانیه که قابل تغییر است.
تابع 01H : نمایش اشاره گر موس
این عمل ،بعد از تابع 00H استفاده می شود و باعث میگردد اشاره گر بر روی صفحه ظاهر شود . این عمل نیازمند پارامترهای ورودی نیست و مقداری را بر نمی گرداند .
اداره کننده موس پرچمی را برای اشاره گر نگهداری می کند که مشخص می کند آیا اشاره گر نمایش داده شود یا خیر . اداره کننده موس اشاره گر را در صورت صفر بودن این پرچم نمایش می دهد و با هر مقدار دیگر آن را پنهان می کند.در ابتدا این مقدار 1- است ،تابع 01H پرچم را به 0 افزایش می دهد ، بنابراین باعث می شود اشاره گر نمایش داده شود .
تابع 02H : پنهان نمودن اشاره گر موس .
روش استاندارد صادر نمودن این تابع در انتهای برنامه در حال اجرا می باشد تا باعث شود اشاره گر پنهان گردد. این عمل نیازمند پارامترهای ورودی نیست و مقداری را بر نمی گرداند .
اشاره گر زمانی ظاهر می شود که پرچم آن 0 باشد و برای هر مقدار دیگر پنهان می شود . این تابع پرچم را از 0 به 1- تبدیل می کند تا اشاره گر پنهان گردد.
تابع 03H : دریافت وضعیت کلیدها و موقعیت اشاره گر
این تابع نیاز به پارامترهای ورودی ندارد و این اطلاعات را در مورد موس بر می گرداند :
* BX = وضعیت کلیدها، بر طبق مکان بیت به این صورت است :
بیت 0 کلید سمت چپ ( 0 = بالا،1 = فشرده شدن به پایین )
بیت 1 کلید سمت راست ( 0 = بالا ، 1 = فشرده شدن به پایین )
بیت 2 کلید وسط ( 0 = بالا ، 1 = فشرده شدن به پایین )
بیت های 15-3 برای استفاده داخلی در نظر گرفته شده اند.
* CX = مختصات افقی (X)
* DX= مختصات عمودی (Y)
مختصات افقی و عمودی بر حسب پیکسل سنجیده می شوند ، حتی در مود متنی ( هشت بایت برای مود ویدئوی 03). این مقادیر همیشه بین حدود حداقل و حداکثر برای اشاره گر هستند.
تابع 04H : تنظیم مکان اشاره گر.
این عمل مختصات افقی و عمودی را برای اشاره گر موس بر روی صفحه تنظیم می نماید. این مقادیر برای این مکان بر حسب پیکسل بیان می شوند،هشت بایت برای مود 03:
MOV AX ,04H ;request set mouse pointer
MOV CX,Horizontal ; horizontal location
MOV DX,vertical ; vertical location
Int 33h ; call mouse driver
این عمل اشاره گر موس را در مکان جدید قرار می دهد که در صورت قرار گرفتن در خارج از حدود حداقل و حداکثر باید تصحیح شود.
اعمال پیشرفته تر موس :
تابع 05h : دریافت اطلاعات فشردن کلید .
این تابع اطلاعاتی را در مورد کلید فشرده شده بر می گرداند.bx با شماره کلید مقدار می گیرد که 0 = چپ ، 1 = راست ، 2 = وسط می باشد:
این عمل وضعیت بالا و پایین بودن تمام کلیدها را به همراه تعداد دفعات فشردن و مکان فشردن کلید مشخص می نماید :
* ax = وضعیت کلیدها ، بر طبق مکان بیت به این صورت :
بیت 0 کلید چپ (0 = بالا ، 1 = فشرده شده به پایین )
بیت 1 کلید راست ( 0 = بالا ، 1 = فشرده شده به پایین )
بیت 2 کلید وسط (0 = بالا ، 1 = فشرده شده به پایین )
بیت 15-3 رزرو شده برای استفاده داخلی
* bx = شمارنده فشردن کلید
* cx = مختصات افقی (x) برای آخرین فشردن کلید ( مقدار پیکسل )
* dx= مختصات عمودی (y) برای آخرین فشردن کلید (مقدار پیکسل )
این عمل شمارنده فشردن کلید را صفر می نماید.
تابع 06h : دریافت اطلاعات رها نمودن کلید .
این تابع اطلاعاتی را در مورد رها نمودن کلید بر می گرداند. Bx با شمارنده کلید مقدار می گیرد ( 0 = چپ ، 1 = راست ، 2 = وسط ) :
Mov ax,06h ;request release information
Mov bx,button-no ; button number
Int 33h ;call mouse driver
این عمل وضعیت بالا و پایین بودن تمام کلیدها را به همراه شمارنده رها نمودن و مکان درخواست کلید به این صورت ، بر می گرداند :
* ax = وضعیت کلیدها بر طبق مکان بیت به صورت :
بیت 0 کلید چپ (0 = بالا ، 1 = پایین)
بیت 1 کلید راست ( 0 = بالا ، 1 = پایین )
بیت 2 کلید وسط (0 = بالا ، 1 = پایین )
بیت 15-3 رزرو شده برای استفاده داخلی
* bx = شمارنده رها نمودن کلید
* cx= مختصات افقی (x) برای آخرین فشردن کلید ( مقدار پیکسل )
* dx= مختصات عمودی (y) برای آخرین فشردن کلید ( مقدار پیکسل )
این عمل شمارنده رها نمودن کلید را صفر می نماید .
تابع 07h = تنظیم حدود افقی برای اشاره گر .
این عمل حداکثر و حداقل حدود افقی را برای اشاره گر بر می گرداند (مقدار پیکسل):
Mov ax,07h ;request set horizontal limit
Mov cx,minimum ;minimum limit
Mov dx,maximum ;maximum limit
Int 33h
اگر حداقل مقدار بیش از حداکثر باشد ، این عمل این مقادیر را جا به جا می کند . اگر این اشاره گر خارج از محدوده تعریف شده باشد ، این عمل آن را به داخل ناحیه انتقال می دهد .
تابع 08h : تنظیم حدود عمودی برای اشاره گر
این عمل حداقل و حداکثر حدود عمودی را برای اشاره گر تنظیم می کند ( مقدار پیکسل) :
Mov ax,08h ;request set vertical limit
Mov cx,minimum ; minimum limit
Mov dx,maximum ;maximum limit
Int 33h
اگر حداقل مقدار بیش از حداکثر باشد ، این عمل این مقادیر را جا به جا می کند . اگر اشاره گر خارج از محدوده تعریف شده باشد ، این عمل آن را به داخل ناحیه انتقال می دهد .
تابع 0bh= خواندن شمارنده های حرکت موس
این عمل شماره میکی افقی و عمودی را (در محدوده 32767+ - 32768-) از زمان آخرین درخواست این تابع بر می گرداند. مقادیر برگردانده شده عبارتند از :
cx = شماره افقی ( مقداری مثبت به معنی حرکت به راست ، مقداری منفی به معنی حرکت به چپ می باشد).
dx = شماره عمودی ( مقداری مثبت به معنی حرکت به پایین ، مقداری منفی به معنی حرکت به بالا می باشد).
یک برنامه ممکن است نیاز به پاسخ خودکار هنگام انجام عملی توسط موس ( یا واقعه) داشته باشد . هدف از تابع 0ch فراهم نمودن اداره کننده واقعه می باشد که نرم افزار موس، وقفه ای در برنامه ایجاد نموده و اداره کننده واقعه را فراخوانی می نماید که تابع مربوطه را اجرا نموده و با تکمیل شدن آن به اجرای برنامه باز می گردد.
cx با ماسک واقعه مقدارداده می شود که نشان دهنده عملی است که اداره کننده باید به آن پاسخ دهد و es:dx باید با آدرس " تفاوت مکان : سگمنت" مربوط به روال اداره کننده وقفه مقدار داده شود:
Mov ax,0ch ;request interrupt handler
Lea cx,mask ;address of event mask
Lea dx,handler ;address of handler (es:dx)
Int 33h ;call mouse driver
بیت های ماسک واقعه به این صورت تعریف می شوند:
0 = اشاره گر موس حرکت کرده
1 = کلید چپ فشرده شده
2 = کلید چپ رها شده
3 = کلید راست فشرده شده
4 = کلید راست رها شده
5 = کلید مرکزی فشرده شده
6 = کلید مرکزی رها شده
15-7 = رزرو شده و با مقدار صفر تعریف شده است.
اداره کننده وقفه به صورت far باید تعریف شود. اداره کننده موس فراخوانی دور را برای وارد شدن به اداره کننده وقفه با این مقادیر ثباتها انجام می دهد :
* ax= ماسک واقعه به صورت تعریف شده ، به جز اینکه بیت ها در صورت رخ دادن شرطی مقدار می گیرند.
* bx= حالت کلید (اگر یک شود ، بیت صفر به معنی پایین بودن کلید چپ می باشد ، سگمنت 1 به معنی پایین بودن کلید راست و بیت 2 به معنی پایین بودن کلید وسط می باشد).
* cx = مختصات افقی(x)
* dx = مختصات عمودی (y)
* si = آخرین شماره میکی عمودی
* di= آخرین شماره میکی افقی
* ds= سگمنت داده برای گرداننده موس
تابع 10h: تنظیم ناحیه حذف اشاره گر .
این عمل ناحیه ای از صفحه را تعریف می کند که در آن اشاره گر نمایش داده نمی شود :
Mov ax,10h ;request set exclusion area
Mov cx,upleft-x ;upper left x-coordinate
Mov dx,upleft-y ;upper left y- coordinate
Mov si,lowright-x ;lower right x- coordinate
Mov di,loweright-y ; lower right y- coordinate
Int 33h ;call mouse driver
برای جایگزین نمودن ناحیه حذف اشاره گر ، این تابع مجدد با پارامترهای متفاوت فراخوانی می شود یا تابع 00h یا 01h صادر می شوند.
تابع 13h : تنظیم محدوده سرعت دو برابر.
این عمل محدوده سرعتی را که در آن حرکت اشاره گر بر روی صفحه دو برابرمی شود تنظیم می کند . dx با مقدار جدید پر می شود(مقدار پیش فرض 64 میکی در ثانیه است ).
تابع 1AH : تنظیم حساسیت موس.
حساسیت، مربوط به تعداد میکی هایی است که موس باید قبل از حرکت اشاره گر حرکت نماید. این تابع حرکت افقی و عمودی موس را بر حسب تعداد میکی ها در هشت پیکسل تنظیم می کند، همراه با سرعت محدوده ای که در آن حرکت موس بر روی صفحه دو برابر می شود.
Mov ax,1ah ;request set mouse sensitivity
Mov bx,horizontal ;horizontal mickeys (default = 8)
Mov cx,vertical ; vertical mickeys (default =16)
Mov dx,threshold ;threshold speed (default =64)
Int 33h ;call mouse driver
تابع 1DH : انتخاب صفحه نمایش برای اشاره گر .
صفحه نمایش ویدئو با INT 10H تابع 05H مشخص می شود. برای انجام اعمال موس ، شماره صفحه در BX قرار می گیرد و این تابع صادر می گردد.
تابع 1EH : تعیین صفحه نمایش برای اشاره گر .
این عمل صفحه نمایش ویدئوی جاری را بر می گرداند.
تابع 24H : دریافت اطلاعات موس .
این عمل اطلاعاتی را در مورد روایت و نوع موس نصب شده بر می گرداند:
BH = بالاترین شماره روایت
BL = پایین ترین شماره روایت
CH = نوع موس ( 1 = موس گذرگاه ، 2 = موس سری )
با تشکر از استاد گرامی مهندس مدنی
و دوستان عزیز