10. The Mouse group of Modules

All of the Mouse handling code is in the "mouse" subdirectory.

There are only 2 main files, mouse.c and mouseint.c.

10.1. Functions in base/mouse/mouse.c

These are the functions defined in base/mouse/mouse.c.

10.1.1. mouse_init

Initialize internal mouse.

10.2. Remarks in base/mouse/mouse.c

I have not properly tested this INT74 - JES 96/10/20 I have removed it. INT74 is irq 12. Which I suppose is the proper irq for a ps2 mouse. It appears initial support was planned to support irq 12 and at Mouse_ROUTINE_OFF is a routine that acknowledges an irq. That routine is probably what should be acknowledging irq12, and what int 0x74 should point to. I have disabled int0x74 support for now. --EB 29 Oct 1997 Got it working --BO 4 Nov 2004


Whoever wrote the dos mouse driver spec was brain dead... For some video modes the mouse driver appears to randomly pick a shift factor, possibly to keep at least a 640x200 resolution.

The general programming documentation doesn't make this clear. And says that in text modes it is safe to divide the resolution by 8 to get the coordinates in characters.

The only safe way to handle the mouse driver is to call function 0x26 Get max x & max y coordinates and scale whatever the driver returns yourself.

To handle programs written by programmers who weren't so cautious a doctrine of least suprise has been implemented.

As much as possible do the same as a standard dos mouse driver in the original vga modes 0,1,2,3,4,5,6,7,13,14,15,16,17,18,19.

For other text modes allow the divide by 8 technique to work. For other graphics modes return x & y in screen coordinates. Except when those modes are either 40x?? or 320x??? and then handle the x resolution as in 40x25 and 320x200 modes.

320x200 modes are slightly controversial as I have indications that not all mouse drivers do the same thing. So I have taken the simplest, and most common route, which is also long standing dosemu practice of always shifting the xaxis by 1. When I researched this I could find no examples that did otherwise.

-- Eric Biederman 19 August 1998

This code has now been updated so it defaults as above but allows work arounds if necessary. Because tweaking dosemu is easier than fixing applications without source.

-- Eric Biederman 29 May 2000