Toby Opferman
http://www.opferman.net
programming@opferman.net
How To Use The Mouse
This Tutorial is a tutorial on how to use the mouse
in your assembly (or C) programs. The mouse is extremely simple
if you use the Microsoft Mouse Driver or Compat, which all
applications and computers use. It's always installed. You COULD
access the ports directly and poll the IRQ and set up an Interrupt
handler to keep track, but that is not nessary unless you are
developing your own OS.
INT 33h is the Mouse Driver's Interupt and it does EVERYTHING
for you.
To Initialize/Reset the Mouse:
XOR AX, AX ; Set AX = 0
INT 33h ; Call Mouse Driver
TEST AX, AX ; Test For Error (AX = FFFFh on Success or AX = 0 For Failure)
JZ SHORT NO_DRIVER
NOTE: BX = Number of buttons
Now, you have the mouse Initialized. All you have to do is display the
mouse pointer.
MOV AX, 1 ; Display Mouse Pointer
INT 33h
That's it. The driver will take care of the mouse movement and such.
There is one note though, If you go to update the Video Screen,
You will want to Hide the Mouse pointer or else it will leave an
image of itself on the screen. To Hide the Mouse, just:
MOV AX, 2 ; Hide Mouse Pointer
INT 33h
Very Simple. Now, one last thing you will want to do is get the
mouse X Y location and what buttons are pressed.
MOV AX, 3 ; Get Mouse Status
INT 33h
BX = Button Status
Bit 2 = Center Button, 1 = Pressed, 0 = No
Bit 1 = Right Button, 1 = Pressed, 0 = No
Bit 0 = Left Button, 1 = Pressed, 0 = No
CX = Absolute X Position (NOTE: in Mode 13h, you will probably want to
SHR CX, 1 Because it returns a value of 0-639
and not 0-319)
DX = Absolute Y Position
And that's it. There are other functions, such as changing the Mouse Pointer
bitmap, Mouse Sensitivity or etc. Those are easy to do as well, you just
call the INT 33h Functions. There are a lot of functions for the mouse,
You may want to get Ralf Browns' Interrupt list or Another Kind of
Interrupt list that will list all the Functions of INT 33h in simple
form.