*** 1 : BRIEF DESCRIPTION
The Genius Mouse Driver enables you to use mouse hardware to move an
on-screen
cursor and control its movement through a software program. Various
functions
allow you to determine cursor placement, cursor shape, and button status.
In order for you to interface your Genius Mouse with an application
program, the
following information on the Genius Driver has been provided.
*** 2 : GRAPHICS AND TEXT CURSORS
GMOUSE Driver supports a hardware text cursor, a software
text cursor, and
a graphics cursor. A hardware text cursor is a blinking cursor which
moves from
one character to another on-screen. This blinking cursor may take the
form of a
block or underscore. A software text cursor makes use of display attributes
to
change the visual appearance of a character on-screen. Movement
is from
character to character. A graphics cursor is a shape that moves over
on-screen
images.
You can choose any of these three cursors to use on-screen, however,
only one
cursor can be displayed at a given time. Also, within your application
program,
you can switch back and forth between cursors.
Display the Graphics Cursor
The cursor appears on-screen or disappears from the screen through the
calling
program. This cursor consists of a block of pixels. As
this block moves
on-screen and affects the pixels beneath it, the cursor shape and background
are
created. This interaction is defined by two 16-by-16 bit arrays;
one is the screen mask and the other is the cursor mask. The screen
mask
determines what part of the cursor pixel is to be the shape, and what
part is
is to be the background. The cursor mask determines which pixels contribute
to
the color of the cursor. Whenever changes are made to the screen which
lie
directly beneath the cursor, the cursor should be concealed so
that old values
are not restored to the screen.
Please note that with a high resolution mode, you have a 16-by-16 pixel
block;
with a medium resolution (four color) mode, you have a 8-by-16 pixel
block; with
a medium resolution (sixteen color) mode, you have a 4-by-16 pixel
block.
Refer to function 9.
To create the cursor, the software uses data from the computer's screen
memory
which defines the color of each pixel on-screen. Operations are
performed that
affect individual screen bits. Software ANDs the screen mask
defining the
pixels under the cursor and XORs the cursor mask with the result of
the AND
operation.
Note the results when:
page 1
Screen Mask Bit is Cursor Mask Bit is
Resulting Screen Bit is
------------------ ------------------
-----------------------
0
0
0
0
1
1
1
0
unchanged
1
1
inverted
With each mouse function, a reference to the graphics cursor location
is in
reference to a point on-screen directly beneath the cursor. This
point that the
mouse software uses to determine the cursor coordinates is known as
the cursor's
hot spot.
Generally, the upper_left hand corner of the cursor block is designated
as the
coordinates for the cursor default value. ((0,0) are the upper_left
hand corner
coordinates.)
Software Text Cursor
You can use this text cursor when your computer is in one of the text
modes. By
changing the character attributes beneath the cursor, the appearance
of the
character is influenced on-screen. This effect on the text cursor
can be
defined by two 16-bit mask values. These bits can be described as follows:
bit 15 sets the blinking (1) or non-blinking (0) character ; bit 12
- 14 set the
background (1); bits 8 - 10 set the foreground color; and bits 0 -
7 set the
character code. These values in the screen mask and the cursor mask
determine the character's new attributes when the cursor is covering
the
character. The screen mask decides which of the character's attributes
are
maintained. The cursor mask decides in what manner the attributes are
altered
to produce the cursor.
In creating this cursor, the software works from data which defines
each
character on the screen. The software first ANDs the screen mask
and the screen
data bit for the character beneath the cursor. Next, the software
XORs the
cursor mask and the result of the AND operation.
When a function refers to the text cursor location, it gives the coordinates
of
the character beneath the cursor.
Refer to function 10.
Hardware Text Cursor
This cursor is also available when the computer is in one of the text
modes.
This cursor is the one seen on-screen when the computer is powered
on. It
consists of 8 pixels wide and 8 to 14 pixels tall. Software allows
you to use
this cursor for your needs. Scan lines determine a cursor's appearance
on-screen. A scan line consists of a horizontal set of pixels.
If a line is on, there will be flashing on the screen. If a line is
off, there
is no effect. Scan lines are numbered from 0 to 7, or 0 to 11 depending
on the
type of display used. 0 indicates the top scan line.
Refer to function 10.
*** 2.1 : Mouse Buttons
page 2
Mouse functions can give the status of the mouse buttons and the number
of times
a certain button has been pressed and released. The button status
is given as
an integer. If a bit is set to 1 the button is down; if a bit is set
to 0, the
button is up.
Bit 0 - Left Button Status
Bit 1 - Right Button Status
Bit 2 - Middle Button Status
Each time a mouse button is pressed, a counter records the number of
presses and
releases. The software sets the counter to zero once it has been
read or after
a reset.
*** 2.2 : Unit of Distance - Mouse Motion
The motion of the mouse can be expressed in a unit of distance (mouse
motion)
and is approximately 1/200 of an inch.
With mouse movement, mouse software determines a horizontal and vertical
mouse
motion count. This count is used by the software to move a cursor
a certain
number of pixels on-screen. Software defines mouse motion sensitivity
(the
number of mouse motions needed to move the cursor 8 pixels on-screen)
and this
sensitivity determines the rate at which the cursor moves on-screen.
Refer to function 15.
*** 2.3 : Internal Cursor Flag
Mouse software supports an internal flag. This flag determines
when the cursor
should appear on-screen. If the flag equals 0, the cursor appears
on-screen; if
the flag is any other number, the cursor disappears from the screen.
You can call functions 1 and 2 a number of times, however, if you call
function
2, you must call function 1 later. This is necessary to restore
the flag's
previous value.
Refer to functions 1 and 2.
*** 3 : CALLING FROM ASSEMBLY LANGUAGE PROGRAMS
To make mouse function calls:
Load the appropriate registers (AX, BX, CX, DX) with the parameter values.
These correspond to G1%, G2%, G3%, and G4% as shown in the BASIC example
to
follow. Then execute software interrupt 51 (33H). The values
given by the
mouse functions will be installed in the registers.
Example:
; * set cursor to location (150,100)
Mov AX,4 ;(function call 4)
Mov CX,150 ;(set horizontal to 150)
Mov DX,100 ;(set vertical to 100)
Int 51(33H) ;(interrupt to mouse)
It is important to note that before using INT 33H, one should verify
the
presence of the mouse driver. Executing an INT 33H will cause
uncertain results
if the mouse driver is not loaded. Assume a mouse driver is present
when INT
33H vector is non-zero and the vector does not point to an IRET instruction.
page 3
Note: When making a mouse call in Assembly Language, expect somewhat
of a
different value for the fourth parameter (when compared with calls
using a BASIC
program) involving functions 9, 12, and 16.
*** 4 : CALLING FROM BASIC LANGUAGE PROGRAM
To make mouse function calls:
Set a pair of integer variables in your program for the offset
and the segment
of the mouse driver entry point.
In order to obtain the offset and segment values, the following
statements
must be inserted into your program before any calls to mouse
functions:
10 DEF SEG = 0
15 ' GET GMOUSE ENTRY POINT
20 GMSEG = PEEK( 51*4 + 2 ) + 256 * PEEK( 51*4 + 3 )
' GET SEGMENT ENTRY
30 GMOUSE = 2 + PEEK( 51*4 ) + 256 * PEEK( 51*4 + 1 )
' GET OFFSET ENTRY
40 DEF SEG = GMSEG
' SET SEGMENT REGISTER AS THE SEGMENT OF GMOUSE
To enter the mouse driver, use the CALL statement:
CALL GMOUSE (G1%, G2%, G3%, G4%)
GMOUSE contains the entry offset of the mouse driver. G1%, G2%,
G3%, and G4%
are the integer variables given in the call. These four must
be specified in
the CALL statement even if a value is not assigned. When a value
is assigned,
it must be an integer, that is, a whole number.
Example:
50 ' Find the Activated Mode of Genius Mouse
60 G1% = 0 : G2% = 0
70 CALL GMOUSE ( G1%, G2%, G3%, G4% )
80 IF G2% AND 2 THEN PRINT "Genius Mouse ( 2_Button Mode ) Enable"
90 IF G2% AND 3 THEN PRINT "Genius Mouse ( 3_Button Mode ) Enable"
100 IF NOT G1% THEN PRINT "Can't Find Genius Mouse"
*** 5 : MOUSE FUNCTIONS
These functions listed apply to the Genius Mouse. Further descriptions
of each
mouse function will be given in the following pages.
Functions
Function Number
-----------------------------------------------------------------
Reset Genius Mouse Driver
0
Enable Cursor Display
1
Disable Cursor Display
2
Read Cursor Location & Button State of Genius Mouse
3
Set Cursor Location of Genius Mouse
4
Read Button Press State of Genius Mouse
5
Read Button Release State of Genius Mouse
6
Define Horizontal (X) Range of Cursor Location
7
Define Vertical (Y) Range of Cursor Location
8
Define Graphics Mode Cursor Style
9
Define Text Mode Cursor Style
10
Read Genius Mouse Motion Number
11
page 4
Define Event Handler Entry Location
12
Enable Light Pen Emulation Function
13
Disable Light Pen Emulation Function
14
Define Sensitivity (Mouse Motion/Pixel) of Genius Mouse 15
Disable Cursor Display in Special Range
16
Define Double-Speed Threshold
19
Swap Event Handler Entry Location
20
Get Mouse Driver State Storage Size
21
Save Mouse Driver state
22
Restore Mouse Driver state
23
Set CRT Page Number
29
Read CRT Page Number
30
EGA functions are described in Section *** 7.
*** 6 : DESCRIPTION OF THE MOUSE FUNCTIONS
You'll notice that with the following mouse function descriptions, the
parameters needed to make the calls and the expected outcome (return)
for each
is indicated. Also, any special conditions regarding any of the
mouse functions
have been included. Further, an example of a program has been
provided in order
for you to understand how to make the call.
The input and return values are presented for 8086 registers and for
BASIC in
the following pages.
It is important to note that each mouse function call needs four parameters.
The Genius Mouse software does not verify any input values, and therefore,
if
any incorrect values are given, uncertain results will occur.
Function 0: Reset Genius Mouse Driver
Function 0 gives the current status of the mouse hardware plus the current
status of the mouse software. The calling program is able to
determine the
presence of a mouse driver and/or a serial port.
This function resets the mouse driver to the following default status
as
indicated:
Variable
Value
------------------------------------------------------------------------------
internal cursor flag
-1 (cursor concealed)
graphics cursor shape
horizontal oval
text cursor
reverse video
user-defined call mask
all zeroes
light pen emulation mode
enabled
vertical mouse motion/pixel ratio
16 to 8
horizontal mouse motion/pixel ratio 8 to 8
vertical min/max cursor coordinates 0/current
display mode y values minus 1
horizontal min/max cursor coordinates 0/current display
mode x values minus 1
8086 Register
Input: AX = 0
Return: AX = mouse state (-1: installed, 0: not installed)
BX = number of buttons (2
button mode, 3 button mode)
page 5
BASIC
Input: G1% = 0
Return: G1% = mouse state (-1: installed, 0: not installed)
G2% = number of buttons
(2 button mode, 3 button mode)
Example: Used initially to determine if the GMOUSE driver is present
and to
reset GMOUSE.
50 ' Find the Actived Mode of Genius Mouse
60 G1% = 0 : G2% = 0
70 CALL GMOUSE ( G1%, G2%, G3%, G4% )
80 IF G2% AND 2 THEN PRINT "Genius Mouse ( 2_Button Mode ) Enable"
90 IF G2% AND 3 THEN PRINT "Genius Mouse ( 3_Button Mode ) Enable"
100 IF NOT G1% THEN PRINT "Can't Find Genius Mouse"
Function 1: Enable Cursor Display
Function 1 increments the internal cursor flag counter. If the
counter is zero,
the cursor is enabled and appears on-screen.
The default value is -1 which indicates a concealed cursor. Function
1 must be
called to display the cursor. In case the internal cursor flag
is already zero,
a call to this function produces no effect.
8086 Register
Input: AX = 1
Return: none
BASIC
Input: G1% = 1
Return: none
Example:
110 ' Enable Genius Mouse's Cursor
120 G1% = 1
130 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 2: Disable Cursor Display
Function 2 disables the cursor by removing it from the screen and decrementing
the internal cursor flag. Even though the cursor cannot be seen,
it still
tracks any motion made with the mouse.
You should use this function before changing any portion of the screen
containing the cursor. You will avoid the problem of the cursor
affecting
screen data.
Keep in mind that whenever your program calls function 2, it must later
call
function 1 to return the internal cursor flag to its default value.
In
addition, if your program changes the screen mode, function 2 is called
automatically. Therefore, the cursor's movement is enabled the next
time it is
displayed.
Call function 2 at the end of a program in order to conceal the cursor.
This
ensures that nothing remains on-screen.
page 6
8086 Register
Input: AX = 2
Return: none
BASIC
Input: G1% = 2
Return: none
Example:
110 ' Disable Genius Mouse's Cursor
120 G1% = 2
130 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 3: Read Cursor Location & Button State of Genius Mouse
Function 3 gives the status of mouse buttons, plus cursor location.
Button status consists of a single integer value:
Bit 0 = left button (2 button mode, 3 button mode)
Bit 1 = right button (2 button mode, 3 button mode)
Bit 2 = middle button (3 button mode)
The bit is 1 when the button is pressed. The bit is 0 when the
button is
released.
8086 Register
Input: AX = 3
Return: BX = button status
CX = horizontal cursor coordinate
DX = vertical cursor coordinate
BASIC
Input: G1% = 3
Return: G2% = button status
G3% = horizontal cursor
coordinate
G4% = vertical cursor coordinate
Example:
110 ' Read Genius Mouse Location & Button State
120 G1% = 3
130 CALL GMOUSE ( G1%, G2%, G3%, G4% )
140 PRINT "Genius Mouse Location : X_Coord=" G3% " Y_Coord=" G4%
150 IF G2% AND 1 THEN PRINT "Left Button"
160 IF G2% AND 2 THEN PRINT "Right Button"
170 IF G2% AND 4 THEN PRINT "Middle Button"
180 PRINT "Pressed"
Function 4: Set Cursor Location of Genius Mouse
Function 4 sets the current cursor location. Values must be within
the
coordinate ranges for the virtual screen and, if necessary, are rounded
to the
nearest values allowed for the current screen mode.
page 7
Screen Display
Virtual Cell
Bits/Pixel
Mode Adapter
Screen (XxY) Size
Graphics Mode
--------- ------------ --------------- --------
----------------
0 C, E, 3270
640 x 200 16 x 8
-
1 C, E, 3270
640 x 200 16 x 8
-
2 C, E, 3270
640 x 200 8 x 8
-
3 C, E, 3270
640 x 200 8 x 8
-
4 C, E, 3270
640 x 200 2 x 1
2
5 C, E, 3270
640 x 200 2 x 1
2
6 C, E, 3270
640 x 200 1 x 1
1
7 M, E, 3270
640 x 200 8 x 8
-
D E
640 x 200 16 x 8
2
E E
640 x 200 1 x 1
1
F E
640 x 350 1 x 1
1
10 E
640 x 350 1 x 1
1
30 3270
720 x 350 1 x 1
1
H
720 x 348 1 x 1
1
Display Adapter:
M = IBM Monochrome Display/Printer Adapter
C = IBM Color/Graphics Adapter
E = IBM Enhanced Graphics Adapter
3270 = IBM All Points Addressable Graphics Adapter (3270 PC)
H = Hercules Monochrome Graphics Card
8086 Register
Input: AX = 4
CX = new horizontal cursor
coordinate
DX = new vertical cursor
coordinate
Return: none
BASIC
Input: G1% = 4
G3% = new horizontal cursor
coordinate
G4% = new vertical cursor
coordinate
Return: none
Example:
110 ' Set Cursor Location at the Upper_Left Corner of Screen
120 G1% = 4
130 G3% = 0 : G4% = 0
140 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 5: Read Button Press State of Genius Mouse
Function 5 provides status on the specified button, gives the number
of button
presses since the last call, and produces the location of the cursor
at last
button press.
Button status consists of a single integer value. Again, as in
function 3:
Bit 0 = left button (2 button mode, 3 button mode)
Bit 1 = right button (2 button mode, 3 button mode)
Bit 2 = middle button (3 button mode)
The bit is 1 when the button is pressed. The bit is 0 when the
button is
released.
page 8
The number of button presses will always fall in the range of 0 to 32767.
There
is no indicator for overflow. Following this function call, the
count is reset
to zero.
8086 Register
Input: AX = 5
BX = button status (left
= 0, right = 1, middle = 2)
Return: AX = button status
BX = number of button presses
CX = horizontal cursor coordinate
at last press
DX = vertical cursor coordinate
at last press
BASIC
Input: G1% = 5
G2% = button status (left
= 0, right = 1, middle = 2)
Return: G1% = button status
G2% = number of button presses
G3% = horizontal cursor
coordinate at last press
G4% = vertical cursor coordinate
at last press
Example:
110 ' Read the Left Button Press State of Genius Mouse
120 G1% = 5 : G2% = 2
130 CALL GMOUSE ( G1%, G2%, G3%, G4% )
140 IF G1% AND 2 THEN PRINT "The Middle Button Pressed at X_loc=" G3%
Function 6: Read Button Release State of Genius Mouse
Function 6 provides status on the specified button, gives the number
of button
releases since the last call, and provides the location of the cursor
at the
last button release.
Button status consists of a single integer value. Again, as in
function 3:
Bit 0 = left button (2 button mode, 3 button mode)
Bit 1 = right button (2 button mode, 3 button mode)
Bit 2 = middle button (3 button mode)
The bit is 1 when the button is pressed. The bit is 0 when the
button is
released.
The number of button releases will always fall in the range of 0 to
32767.
There is no indicator for overflow. Following this function call,
the count is
reset to zero.
8086 Register
Input: AX = 6
BX = button status (left
= 0, right = 1, middle = 2)
Return: AX = button status
BX = number of button releases
CX = horizontal cursor coordinate
at last release
DX = vertical cursor coordinate
at last release
BASIC
Input: G1% = 6
G2% = button status (left
= 0, right = 1, middle = 2)
page 9
Return: G1% = button status
G2% = number of button releases
G3% = horizontal cursor
coordinate at last release
G4% = vertical cursor coordinate
at last release
Example:
110 ' Read the Left Button Release State of Genius Mouse
120 G1% = 6 : G2% = 2
130 CALL GMOUSE ( G1%, G2%, G3%, G4% )
140 IF NOT G1% OR &HFFFB THEN PRINT "The Middle Button Released
at X_loc=" G3%
Function 7: Define Horizontal (X) Range of Cursor Location
Function 7 defines the horizontal range of the cursor on-screen.
As a result,
cursor movement is limited to this specified area. If a cursor
happens to be
outside of this area when a call is made, the cursor is moved to just
inside the
area.
8086 Register
Input: AX = 7
CX = minimum horizontal
cursor coordinate
DX = maximum horizontal
cursor coordinate
Return: none
BASIC
Input: G1% = 7
G3% = minimum horizontal
cursor coordinate
G4% = maximum horizontal
cursor coordinate
Return: none
Example:
110 ' Enable Cursor in Horizontal Range between 100 to 200
120 G1% = 7
130 G2% = 100 : G3% = 200
140 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 8: Define Vertical (Y) Range of Cursor Location
Function 8 defines the vertical range of the cursor on-screen.
As a result,
cursor movement is limited to this specified area. If a cursor
happens to be
outside of this area when a call is made, the cursor is moved to just
inside the
area.
8086 Register
Input: AX = 8
CX = minimum vertical cursor
coordinate
DX = maximum vertical cursor
coordinate
Return: none
BASIC
Input: G1% = 8
G3% = minimum vertical cursor
coordinate
G4% = maximum vertical cursor
coordinate
Return: none
page 10
Example:
110 ' Enable Cursor in Vertical Range between 100 to 200
120 G1% = 8
130 G2% = 100 : G3% = 200
140 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 9: Define Graphics Mode Cursor Style
Function 9 defines the style of the cursor in terms of color, shape,
and center
for the graphics. As mentioned before, this cursor is a 16-by-16
pixel block
and is defined by two 16-bit arrays (the screen mask bit and the cursor
mask
bit). Cursor coordinates for the hot spot must be in the range of -16
to +16.
8086 Register
Input: AX = 9
BX = horizontal cursor hot
spot
CX = vertical cursor hot
spot
DX = pointer to screen and
cursor mask
Return: none
BASIC
Input: G1% = 9
G2% = horizontal cursor
hot spot
G3% = vertical cursor hot
spot
G4% = pointer to screen
and cursor mask
Return: none
Example:
10 ' Define the screen mask
20 '
30 cursor (0,0) = &HFFFF
'1111111111111111
40 cursor (1,0) = &HFFFF
'1111111111111111
50 cursor (2,0) = &HFFFF
'1111111111111111
60 cursor (3,0) = &HFFFF
'1111111111111111
70 cursor (4,0) = &HFFFF
'1111111111111111
80 cursor (5,0) = &HF00F
'1111000000001111
90 cursor (6,0) = &H0000
'0000000000000000
100 cursor (7,0) = &H0000
'0000000000000000
110 cursor (8,0) = &H0000
'0000000000000000
120 cursor (9,0) = &H0000
'0000000000000000
130 cursor (10,0) = &HF00F
'1111000000001111
140 cursor (11,0) = &HFFFF
'1111111111111111
150 cursor (12,0) = &HFFFF
'1111111111111111
160 cursor (13,0) = &HFFFF
'1111111111111111
170 cursor (14,0) = &HFFFF
'1111111111111111
180 cursor (15,0) = &HFFFF
'1111111111111111
190 '
200 ' Define the cursor mask
210 '
page 11
220 cursor (0,1) = &H0000
'0000000000000000
230 cursor (1,1) = &H0000
'0000000000000000
240 cursor (2,1) = &H0000
'0000000000000000
250 cursor (3,1) = &H0000
'0000000000000000
260 cursor (4,1) = &H0000
'0000000000000000
270 cursor (5,1) = &H0000
'0000000000000000
280 cursor (6,1) = &H07E0
'0000011111100000
290 cursor (7,1) = &H7FFE
'0111111111111110
300 cursor (8,1) = &H7FFE
'0111111111111110
310 cursor (9,1) = &H07E0
'0000011111100000
320 cursor (10,1) = &H0000
'0000000000000000
330 cursor (11,1) = &H0000
'0000000000000000
340 cursor (12,1) = &H0000
'0000000000000000
350 cursor (13,1) = &H0000
'0000000000000000
360 cursor (14,1) = &H0000
'0000000000000000
370 cursor (15,1) = &H0000
'0000000000000000
380 '
390 ' Set the cursor style and hot spot number of Genius Mouse
400 '
410 '
420 G1% = 9
430 G2% = 6 ' horizontal hot spot
440 G3% = 5 ' vertical hot spot
450 CALL GMOUSE ( G1%, G2%, G3%, cursor (0,0))
Function 10: Define Text Mode Cursor Style
Function 10 chooses the hardware or the software text cursor.
For example, if BX (G2%) is 1, the hardware cursor is selected and the
hardware
is set up with the first and last scan lines which define the cursor.
(Values for CX (G3%) and DX (G4%) range from 0 to 7 for the color display
and 0
to 11 for the monochrome display.)
If BX (G2%) is 0, the software cursor is selected; and CX (G3%) and
DX (G4%)
must specify the screen and cursor masks. (These masks give the
attributes and
character code of the cursor, and their values are dependent on the
type of
display in use.)
8086 Register
Input: AX = 10
BX = select cursor (0: software
text, 1: hardware text)
CX = screen mask value/scan
line start
DX = cursor mask value/scan
line stop
Return: none
BASIC
Input: G1% = 10
G2% = select cursor (0:
software text, 1: hardware text)
G3% = screen mask value/scan
line start
G4% = cursor mask value/scan
line stop
Return: none
Example:
page 12
110 ' Enable an Inverting Cursor
120 G1% = 10
130 G2% = 0
140 G3% = &HFFFF : G4% = &H7700
150 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 11: Read Genius Mouse Motion Number
Function 11 gives the mouse motion number since the last call.
A positive
horizontal number indicates rightward movement (negative shows leftward
movement). A positive vertical number indicates downward movement
(negative
shows upward movement).
The number is always in the range of -32768 to 32767. Overflow
is disregarded.
Once the call is completed, the number is set to 0.
8086 Registers
Input: AX = 11
Return: CX = horizontal number
DX = vertical number
BASIC
Input: G1% = 11
Return: G3% = horizontal number
G4% = vertical number
Example:
110 ' Read Genius Mouse Motion Number
120 G1% = 11
130 CALL GMOUSE ( G1%, G2%, G3%, G4% )
140 IF G3% > 0 THEN PRINT "Genius Mouse is Moving to Right"
150 IF G4% > 0 THEN PRINT "Genius Mouse is Moving Down"
Function 12: Define Event Handler Entry Location
Function 12 defines the address entry location of an event handler routine
which
is called when a certain event (defined by the call mask) occurs.
The program
is temporarily interrupted by the mouse driver. At the end of the event
handler
routine the program continues at the point it was interrupted.
The call mask is a single integer value defining the conditions which
will cause
an interrupt.
A specific condition corresponds to a bit in the call mask:
Mask Bit
Condition
--------------------------------------------------
0
cursor location changed
1
left button pressed
2
left button released
3
right button pressed
4
right button released
5
middle button pressed
6
middle button released
7 - 15
not used
page 13
In order to call the event handler routine, set the mask bit to 1 and
put the
mask in at CX (G3%). To disable, set the mask bit to 0 and put
the mask in at
CX (G3%). Always be sure to set the call mask to 0 before the
program finishes.
(Leave the system in the same state upon exit as if was upon entrance.)
8086 Register
Input: AX = 12
CX = call mask
ES:DX = pointer to event
handler routine
Return: none
BASIC
Input: G1% = 12
G3% = call mask
G4% = pointer to event handler
routine
Return: none
Example:
110 ' Active BUTTDOWN Event Handler Routine, When One or More Buttons
Pressed
120 G1% = 12
130 G3% = &H002A : G4% = BUTTDOWN%
140 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 13: Enable Light Pen Emulation Function
Function 13 permits the mouse to act like a light pen. When in
this mode, calls
to the pen function will give the cursor coordinates at the last pen
down
location.
Note that the status of "pen down" and "pen off-screen" is controlled
by the
mouse buttons: all buttons up, pen off-screen; one button pressed,
pen down.
Light pen emulation is ON after each call to function 0 (Reset Mouse Driver).
8086 Register
Input: AX = 13
Return: none
BASIC
Input: G1% = 13
Return: none
Example:
110 ' Enable Light Pen Emulation Function
120 G1% = 13
130 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 14: Disable Light Pen Emulation Function
Function 14 turns off the light pen emulation mode. When disabled,
any call to
the pen function will give information only about a real light pen.
8086 Register
Input: AX = 14
page 14
Return: none
BASIC
Input: G1% = 14
Return: none
Example:
110 ' Disable Light Pen Emulation Function
120 G1% = 14
130 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 15: Define Sensitivity (Mouse Motion/Pixel) of Genius Mouse
Function 15 defines mouse sensitivity as determined by the mouse motion/pixel
ratio. This is a way of setting the amount of cursor motion wanted
for mouse
movement. These ratios specify mouse motion per 8 pixels.
These values must
be in the range of 1 to 32767. With a larger ratio, the cursor
movement is
shortened for each mouse movement.
Default values: horizontal ratio - 8 mouse motions
to 8 pixels
vertical ratio - 16 mouse motions to 8 pixels
Note: 1 mouse motion = 1/200 of an inch increment
8086 Register
Input: AX = 15
CX = horizontal mouse motion
counts to pixel ratio
DX = vertical mouse motion
counts to pixel ratio
Return: none
BASIC
Input: G1% = 15
G3% = horizontal mouse motion
counts to pixel ratio
G4% = vertical mouse motion
counts to pixel ratio
Return: none
Example:
110 ' Define Horizontal Sensitivity as 8
120 ' Define Vertical Sensitivity as 16
130 G1% = 15
140 G3% = 8
150 G4% = 16
160 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 16: Disable Cursor Display in Special Range
Function 16 sets up a special range on-screen. If the cursor moves
to this area
or is in this area, it will be disabled. After a call is made
to this function,
it is necessary to call function 1 to enable the cursor again.
Define the special range with screen location values using four components:
page 15
Components Values
--------------------------------------------------------
1
Left horizontal screen location
2
Upper vertical screen location
3
Right horizontal screen location
4
Lower vertical screen location
8086 Register
Input: AX = 16
ES:DX = pointer to special
range
Return: none
BASIC
Input: G1% = 16
G4% = pointer to special
range
Return: none
Example:
110 ' Disable Cursor Display in (0,0) to (100,100) Range
120 G1% = 16
130 RANGE%(1) = 0 : RANGE%(2) = 0
140 RANGE%(3) = 100 : RANGE%(4) = 100
150 CALL GMOUSE ( G1%, G2%, G3%, RANGE%(0) )
.
.
.
500 ' Enable Cursor Display Again
510 G1% = 1
520 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 19: Define Double-Speed Threshold
Function 19 defines the threshold value (mouse motion per second) for
doubling
the cursor's motion. Should the mouse move faster than the DX
(G4%) value, the
cursor motion doubles. The default value is 64 mouse motions
per second.
If you should want to disable double-speed, just set the threshold to
32767
(7FFFH) mouse motions/second.
8086 Register
Input: AX = 19
DX = threshold speed in
mouse motions/second
Return: none
BASIC
Input: G1% = 19
G4% = threshold speed in
mouse motions/second
Return: none
Example:
110 ' Define Double-Speed Threshold as 20 Mouse Motions/Second
page 16
120 G1% = 19
130 G4% = 20
140 CALL GMOUSE ( G1%, G2%, G3%, G4% )
.
.
.
500 ' Disable Double-Speed Threshold Function
510 G1% = 19
520 G4% = 256 'MAX. VALUE
530 CALL GMOUSE ( G1%, G2%, G3%, G4% )
Function 20: Swap Event Handler Entry Location
Function 20 sets new values for the call mask and event handler routine
address for mouse hardware interrupts and return the values
that were
previously specified.
For detail information to reference Function 12 description.
8086 Register
Input: AX = 20
CX = new call mask
ES:DX = new pointer to event
handler routine
Return: CX = old call mask
ES:DX = old pointer to event
handler routine
BASIC
Input: G1% = 20
G3% = call mask
G4% = pointer to event handler
routine
Return: G3% = old call mask
G4% = old pointer to event
handler routine
Example:
100 ' Swap Event Handler Entry Location
110 ' Active BUTTDOWN Event Handler Routine, When One or More Buttons
Pressed
120 G1% = 20
130 G3% = &H002A : G4% = BUTTDOWN%
140 CALL MOUSE ( G1%, G2%, G3%, G4% )
Function 21: Get Mouse Driver State Storage Size
Function 21 returns the size of the buffer required to store the current
state
of the mouse driver. It is used with functions
22 and 23 when you want to
temporarily interrupt a program that is using the mouse
and execute another
that also uses the mouse.
8086 Register
Input: AX = 21
Return: BX = buffer size required for mouse driver state
BASIC
Input: G1% = 21
page 17
Return: G2% = buffer size required for mouse driver state
Example:
110 ' Get Mouse Driver State Storage Size
120 G1% = 21
130 CALL MOUSE ( G1%, G2%, G3%, G4% )
140 STATESIZE% = G2%
Function 22: Save Mouse Driver state
Function 22 saves the current mouse driver state in a buffer allocated
by your
program. It is used with functions 21 and 23
when you want to temporarily
interrupt a program that is using the mouse and execute
another program that
also uses the mouse.
Before your program calls function 22, the program should call
function 21 to
determine the buffer size required for saving the
mouse driver state, then
allocate the appropriate amount of memory.
8086 Register
Input: AX = 22
ES:DX = pointer to the buffer
Return: None
BASIC
Input: G1% = 22
G4% = pointer to the buffer
Return: None
Example:
110 ' Save The Mouse Driver State
120 G1% = 22
130 G4% = BUFPTR
140 ' Assume BUFPTR contains the address of the buffer
150 CALL MOUSE ( G1%, G2%, G3%, G4% )
Function 23: Restore Mouse Driver State
Function 23 restores the last mouse driver state saved by function
22. It is
used with functions 21 and 22 when you want to temporarily interrupt
a program
that is using the mouse and execute another program that
also uses the mouse.
To restore the mouse driver state saved by function 22, call function
23 at the
end of the interrupt program.
8086 Register
Input: AX = 23
ES:DX = pointer to the buffer
Return: None
BASIC
Input: G1% = 23
G4% = pointer to the buffer
Return: None
Example:
page 18
110 ' Restore The Mouse Driver State
120 G1% = 23
130 G4% = BUFPTR
140 ' Assume BUFPTR contains the address of the buffer
150 CALL MOUSE ( G1%, G2%, G3%, G4% )
Function 29: Set CRT Page Number
Function 29 specifies the CRT page on which the mouse cursor will be displayed.
For information on the number of CRT pages available in each display
mode your
adapter supports, see the documentation that came with the graphics
adapter.
8086 Register
Input: AX = 29
BX = CRT page for mouse
cursor display
Return: none
BASIC
Input: G1% = 29
G2% = CRT page for mouse
cursor display
Return: none
Example:
110 ; Set CRT page 2 for display mouse cursor
120 G1% = 29
130 G2% = 2
140 CALL MOUSE ( G1%, G2%, G3%, G4% )
.
.
.
500 ; Enable Cursor Display Again
510 G1% = 1
520 CALL MOUSE ( G1%, G2%, G3%, G4% )
Function 30: Read CRT Page Number
Function 30 returns the number of the CRT page on which the mouse cursor
is
displayed.
8086 Register
Input: AX = 30
Return: BX = CRT page number of current cursor display
BASIC
Input: G1% = 30
Return: G2% = CRT page number of current cursor display
Example:
110 ; Read CRT page number
120 G1% = 30
130 CALL MOUSE ( G1%, G2%, G3%, G4% )
page 19
*** 7 : USING GENIUS MOUSE WITH IBM ENHANCED GRAPHICS ADAPTER
Within the Genius Mouse driver, you'll find nine EGA functions.
These functions
permit your program to write to and read from write-only registers.
The cursor in use is defined as a monochrome cursor with one bit per
pixel. The
bit masks are determined by function 9 and apply to all active planes.
In order to make an EGA function call from an Assembly-Language program,
first
load the AX, BX, CX, DX, and ES registers with the values indicated
for the
parameters. Note that five values must be given for a high level
language
program. Next, execute software interrupt 16 (10h). The values
that are
returned are intalled in the registers by EGA functions.
Upon start with DOS, PC BIOS will verify if the EGA BIOS exists.
When this is
verified, the PC will execute the EGA BIOS, booting up the program
to write the
INT 10h entry vector to the address of the INT 42h vector. Now,
EGA BIOS
address will be written to INT 10h. Following this, you are able to
call EGA
BIOS (by using INT 10h) and PC video BIOS (by using INT 42h).
There are twenty functions in EGA BIOS. (PC BIOS has only 16.)
The EGA BIOS
routines only intercept the BIOS ROM video routines (INT 10h, AH =
13h or less).
The following indicates nine EGA functions and the corresponding function
number:
Function
Number (HEX)
-----------------------------------------------------------------
Retrieve Single Data
F0
Save Single Data
F1
Retrieve Registers on a Specified Port
F2
Save Registers on a Specified Port
F3
Retrieve Several Registers Data
F4
Save Several Registers Data
F5
Reset All Registers as Initial Values
F6
Set Initial Values
F7
Get Version Number of Genius Mouse Driver
FA
In the above functions, the EGA I/O port number and address are as follows:
Port No. Register Name No. of Registers Index
No. Address Select Register
------------------------------------------------------------------------------
00H CRT Controller
25 0 - 24
3x4H
08H Sequencer
5 0 - 4
3C4H
10H Graphics Controller
9 0 - 8
3CEH
18H Attribute Controlle
20 0 - 19
3C0H
Singular Registers
20H Miscellaneous Output
1 ignored
3C2H
28H Feature Control
1 ignored
3xAH
30H Graphics 1 Position
1 ignored
3CCH
38H Graphics 2 Position
1 ignored
3CAH
Note: x = B or D depending on the base I/O address;
determined by Miscellaneous
Output Register bit 1.
page 20
Function F0: Retrieve Single Data
This function retrieves data from a single register.
Input: AH = F0H
BX = Index number
DX = Port number
Return: BL = Retrieved data from EGA register
Example:
FUN_F0 EQU 0f0H
; Function F0
;
GR_CONTR EQU 010H
; Graphics Controller
MODE_REG EQU 005H
; Mode Regisiter
;
GR1_PORT EQU 030H
; Graphics 1 Position Register
GR2_PORT EQU 038H
; Graphics 2 Position Register
;
VIDEO EQU 010H
; BIOS ROM Video Routine Entry
; Retrieve
the Mode Register in Graphics Controller
MODE_REG DB 00
;
MOV
DX, GR_CONTR
MOV
BX, MODE_REG
MOV
AH, FUN_F0
INT
VIDEO
MOV
MODE_REG, BL
; Retrieve
Graphics 1 Position Data
GR1_POS DB 00
;
MOV
DX, GR1_POS
MOV
AH, FUN_F0
INT
VIDEO
MOV
GR1_POS, NL
Function F1: Save Single Data
This function saves data to an EGA register. Upon finishing a
call to this
function, the BH and DX values are altered.
Input: AH = F1H
BL = Index number (Non-single
register only)
= Data
(Single register only)
BH = Data (Non-single register
only)
= Disregard
(Single register only)
DX = Port number
Return: None
Example:
page 21
FUN_F1 EQU 0f1H
; Function F1
;
SEQUENCE EQU 008H
; Sequencer
MASK_REG EQU 002H
; Map Mask Register
;
FEAT_PORT EQU 028H
; Feature Control Register
;
VIDEO EQU 010H
; BIOS ROM Video Routine Entry
; Save
Map Mask Register of Sequencer
MAP_MASK EQU 03H
;
MOV
DX, SEQUENCE
MOV
BL, MASK_REG
MOV
BH, MAP_MASK
MOV
AH, FUN_F1
INT
VIDEO
MOV
MAP_MASK, BL
; Save
Feature Control Register
FEATURE DB 02H
;
MOV
DX, FEAT_PORT
MOV
BL, FEATURE
MOV
AH, FUN_F1
INT
VIDEO
MOV
FEATURE, BL
Function F2: Retrieve Registers on a Specified Port
This function retrieves data from registers on a specifiã port.
Upon finishing
a call to this function, the CX value is altered.
Input: AH = F3H
CH = Starting index number
CL = Number of registers
DX = Port number
ES:BX = Destination of returned
data
Return: Returned data to destination address
Example:
FUN_F2 EQU 0f2H
; Function F2
;
GR_CONTR EQU 010H
; Graphics Controller
;
VIDEO EQU 010H
; BIOS ROM Video Routine Entry
; Retrieve
Four Registers Data from Graphics Controller
GRAPH_POOL DB 04 DUP (0)
;
MOV
DX, DS
MOV
ES, DX
;
page 22
MOV
DX, GR_CONTR
MOV
BX, OFFSET GRAPH_POOL
MOV
CX, 04H
MOV
AH, FUN_F2
INT
VIDEO
Function F3: Save Registers on a Specified Port
This function saves data from registers on a specifiã port.
Upon finishing a
call to this function, the BX, CX, and DX values are altered.
Input: AH = F3H
CH = Starting index number
CL = Number of register
DX = Port number
ES:BX = Address source of
incoming data
Return: None
Example:
FUN_F3 EQU 0f3H
; Function F3
;
ATTR_CONTR EQU 018H
; Attribute Controller
;
VIDEO EQU 010H
; BIOS ROM Video Routine Entry
; Save
Four Registers Data into Attribute Controller
PALET_DATA DB 1, 2, 4, 3
;
MOV
DX, DS
MOV
ES, DX
;
MOV
DX, ATTR_CONTR
MOV
BX, OFFSET PALET_DATA
MOV
CX, 08
MOV
AH, FUN_F3
INT
VIDEO
Function F4: Retrieve Several Registers Data At The Same Time
This function retrieves data from several registers at the same time.
Upon
finishing a call to this function, the CX value is altered.
Input: AH = F4H
CX = Number of registers
(more than 1)
ES:BX = Address of register
packet (each consists of 4 bytes;
port address, byte 1-2; index number, byte 3;
returned data, byte 4)
Return: Returned data is saved into byte 4
Example:
FUN_F4 EQU 0f4H
; Function F4
;
VIDEO EQU 010H
; BIOS ROM Video Routine Entry
page 23
;
Retrieve Follow Registers Data
TABLE DW
030H ; Graphics 1 Position
Register
DB 00
; Single Register
DB 00
; Retrieved Data
;
DW 010H
; Graphics Controller
DB 05
; Mode Register
DB 00
; Retrieved Data
;
;
MOV DX, DS
MOV ES, DX
;
MOV BX, OFFSET TABLE
MOV CX, 02
MOV AH, FUN_F4
INT VIDEO
Function F5: Save Several Registers Data At The Same Time
This function saves data from several registers at the same time.
Upon
finishing a call to this function, the CX value is altered.
Input: AH = F5H
CX = Number of registers
(more than 1)
ES:BX = Address of register
packet (each consists of 4 bytes;
port number, byte 1-2; index number, byte 3;
output data, byte 4)
Return: None
Example:
FUN_F5 EQU 0f5H
; Function F5
;
VIDEO EQU 010H
; BIOS ROM Video Routine Entry
;
Save Follow Registers Data
TABLE DW
20H ; Miscellaneous
DB 00
; Single Register
DB 01
; Data
;
DW 18H
; Attribute Controller
DB 12H
; Color Plane Enable
DB 07H
; Data
;
;
MOV DX, DS
MOV ES, DX
;
MOV BX, OFFSET TABLE
MOV CX, 02
MOV AH, FUN_F5
INT VIDEO
page 24
Function F6: Reset All Registers as Initial Values
This function resets all values to default values for the specific registers.
Function 7 sets the default values.
Input: AH = F6H
Return: None
Example:
FUN_F6 EQU 0f6H
; Function F6h
;
VIDEO EQU 010H
; BIOS ROM Video Routine Entry
MOV
AH, FUN_F6
INT
VIDEO
Function F7: Set Initial Values
This function sets the initial default values. Upon finishing
a call to this
function, the BX and DX values are altered.
Input: AH = F7H
DX = Port number
ES:BX = Table of output
data
Return: None
Example:
FUN_F7 EQU 0f7H
; Function F7
;
ATTR_CONTR EQU 018H
; Attribute Controller
;
VIDEO EQU 010H
; BIOS ROM Video Routine Entry
; Setting
Initial Values for the Attribute Controller
ATTR_DATA DB 1, 2,
4, 3, 5, 6, 0, 7
DB
0, 0, 0, 0, 0, 0, 0, 0
DB
0, 0, 0fh, 0
;
MOV
DX, DS
MOV
ES, DX
;
MOV
DX, ATTR_CONTR
MOV
BX, OFFSET ATTR_DATA
MOV
AH, FUN_F7
INT
VIDEO
Function FA: Get Version Number of Genius Mouse Driver
This function will give the Genius Mouse driver version number.
Input: AH = FAH
BX = 00H
Return: ES:BX = Pointer to Genius Mouse driver version number.
page 25