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 = موس سری )

با تشکر از استاد گرامی مهندس مدنی
و دوستان عزیز