Re: [AD] Mouse (DOS and WINDOWS) patches

[ Thread Index | Date Index | More lists.liballeg.org/allegro-developers Archives ]


> so, if cx = 8 (that is the mouse default, it's when allegro is given 2)
and
> dx = 16 (the mouse default, it's when allegro is given 2) it sets the
> sensivity to the default

Ok, it's the default for the DOS mouse driver (I mean the TSR program) but
Allegro's mouse driver uses its own policy.

> so imho, if in the actual code we specify mouse_setspeed(2, 2), cx would
be
> 2 and dx would be 2, meanwhile it should be cx = 8 and dx = 16.
> That's why i've changed that to cx = xspeed * 4 (if it's given 2, its 8)
and
> dx = yspeed * 8 (if it's given 2, its 16 as it should be too)

If you look at the default driver (namely the mousedrv_mickeys driver),
you'll find that (horizontal or vertical) speed is defined as mickey/pixel
ratio and that the driver actually does all the position tracking.
The second driver (mousedrv_int33), unlike the previous one, relies on the
TSR DOS mouse driver for position tracking; but there's a little hitch: for
the DOS driver, speed (or sensitivity as set by int33 - function 15) is
defined as number of mickeys per *8* pixels.

So to be consistent, we have to correct this factor 8:
- first solution (yours): scaling up the DOS driver sensitivity

static void int33_set_speed(int xspeed, int yspeed)
{
   __dpmi_regs r;

   r.x.ax = 15;
   r.x.cx = xspeed*8;
   r.x.dx = yspeed*8;
   __dpmi_int(0x33, &r);
}

- second solution (Shawn's): scaling down the DOS driver position output

static void int33_set_range(int x1, int y1, int x2, int y2)
{
   __dpmi_regs r;

   r.x.ax = 7;                   /* set horizontal range */
   r.x.cx = x1 * 8;
   r.x.dx = x2 * 8;
   __dpmi_int(0x33, &r);

   r.x.ax = 8;                   /* set vertical range */
   r.x.cx = y1 * 8;
   r.x.dx = y2 * 8;
   __dpmi_int(0x33, &r);

   r.x.ax = 3;                   /* check the position */
   __dpmi_int(0x33, &r);

   _mouse_x = r.x.cx / 8;
   _mouse_y = r.x.dx / 8;
}

The code treats 8 DOS driver pixels as 1 Allegro pixel; therefore speed,
defined as number of mickeys per 8 DOS pixels, is consistent with its
original definition.

Shawn, am I wrong ?

--
Eric Botcazou (ebotcazou@xxxxxxxxxx)
Web Site: http://www.multimania.com/ebotcazou



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/