aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md71
1 files changed, 39 insertions, 32 deletions
diff --git a/README.md b/README.md
index 193fc55..7f57741 100644
--- a/README.md
+++ b/README.md
@@ -1,40 +1,52 @@
-This is a mouse driver for Windows 3.x with VirtualBox mouse integration support.
-I have tested it with Windows 3.0 in real and 386 enhanced modes, Windows 3.11 in 386 enhanced mode
-with paging on, as well as Windows 95 (Windows 9x can use 16-bit mouse drivers).
+This is a DOS mouse driver as a TSR written in C and compilable using OpenWatcom C.
+It is not going to stand out in either compatibility, performance, or memory usage;
+the main goal is to have a driver that is at least a bit easier to hack on, for experimentation.
-# Install
+Like any other DOS mouse driver, it partially supports the MS Mouse API (int 33h), but has
+some additional features:
+
+* Implements the hooks required for DOS boxes inside Windows.
+ Multiple DOS boxes can use this driver simultaneously,
+ and clicks in the DOS window will be passed through to the correct running DOS application.
+
+* PS/2 Wheel and 3 button mouse support, using the API from CuteMouse.
-Download [vbmouse.flp](https://depot.javispedro.com/vbox/vbmouse1.flp)
-(a floppy image containing vbmouse.drv and oemsetup.inf) and insert it into your virtual machine.
+* Integration with VirtualBox: in many DOS programs, the mouse can be used without requiring capture,
+ and will seamlessly integrate with the mouse cursor in the host.
+ The mouse cursor will be rendered by the host rather than the guest OS, appearing much more responsive.
+ Programs/games that utilize relative mouse motion information will be "jumpy" when this is enabled,
+ so this integration can be disabled (either from the VirtualBox menu or by using `vbmouse integ off` after loading
+ the driver).
-In the Windows Setup program (accessible either via SETUP.EXE on an installed Windows or via
-the corresponding icon in Program Manager), go to
-Options → Change system configuration → Mouse → Select "Other mouse..." → Search in "A:"
-→ "VirtualBox PS/2 Mouse".
-Select the "VirtualBox PS/2 Mouse" in the Mouse section again.
+* A companion driver for Windows 3.x that uses this driver (via int33h) instead of accessing the mouse directly,
+ so that Windows 3.x gains some of the features of this driver (like mouse integration in VirtualBox).
+ Wheel doesn't work in Windows 3.x right now.
-Alternatively, you can copy vbmouse.drv to your WINDOWS\SYSTEM directory and edit WINDOWS\SYSTEM.INI 's mouse.drv line to point to it, e.g.
+Note that it does not support serial mice or anything other than PS/2.
- [boot]
- mouse.drv = vbmouse.drv
+# Install
-This later option also works with Windows 9x.
+Just run vbmouse.
# Building
This requires [OpenWatcom 2.0](http://open-watcom.github.io/), albeit it may work with an older version,
and was only tested on a Linux host.
-The included makefile is a wmake makefile. To build it just enter the OpenWatcom environment and run `wmake vbmouse.drv`.
-`wmake flp` may be used to build a floppy image containg oemsetup.inf and vbmouse.drv for easier installation.
+The included makefile is a wmake makefile. To build it just enter the OpenWatcom environment and run `wmake flp`.
+This will create a floppy image containing vbmouse.exe plus the Windows 3.x driver (oemsetup.inf and vbmouse.drv).
# Design
This is at its core a driver for a plain PS/2 mouse driver, using the PS/2 BIOS.
If running outside VirtualBox, in fact it will behave like a PS/2 mouse driver.
-However, it removes a lot of checks for older platforms and is mostly written in C rather than assembly,
-so hopefully it is easier to understand than the Windows sample drivers.
+
+The .exe file is comprised of two segments, the first one contains the resident part,
+while the second one contains the command line interface. This second segment
+is dropped once the driver goes resident.
+
+### VirtualBox communication
The VirtualBox guest integrations present itself as a PCI device to the guest.
Thanks to the BIOS, the device is already pre-configured.
@@ -45,21 +57,16 @@ The host will write back the response in the same buffer.
Further details are available in [OSDev](https://wiki.osdev.org/VirtualBox_Guest_Additions).
The only challenge here is getting the physical address (what the VirtualBox PCI device expects)
-corresponding to a logical address (segment:offset) as seen from inside Windows.
-In real mode Windows, the segment can be converted to a physical address without difficulty.
-In 386 enhanced mode, the segment is actually a selector, but turns out one can obtain the base
-of a selector with the `GetSelectorBase()` WINAPI.
-However, if paging is enabled, that only computes the linear address, which is still not the same
-as the physical address.
-In this case, the [Virtual DMA services](https://en.wikipedia.org/wiki/Virtual_DMA_Services) are used
-to obtain the physical address, even though we are not doing DMA.
+corresponding to a logical address (segment:offset).
+While running under real mode DOS, the segment can be converted to a physical address without difficulty.
+However, when using DOS extenders, EMM386, Windows in 386 mode, etc. DOS is actually run
+in virtual 8086 mode, and the logical address may not correspond to a physical address.
+However, most DOS extenders still map conventional memory 1:1, and for those who don't,
+the driver uses the [Virtual DMA services](https://en.wikipedia.org/wiki/Virtual_DMA_Services)
+to obtain the physical address.
When VirtualBox is told that the guest wants absolute mouse information, VirtualBox will stop sending
relative mouse information via the PS/2 mouse. However, the PS/2 controller will still send interrupts
whenever mouse motion happens, and it will still report mouse button presses. In fact, the only way
-to obtain mouse button presses is still through the PS/2 controller.
-Thus, the only difference between this driver and a standard PS/2 mouse driver is that,
-when an interrupt from the mouse comes in, we won't report the relative mouse motion to Windows.
-Rather, we call into VirtualBox (right from the PS/2 BIOS interrupt handler)
-to obtain the absolution mouse position, and report that to Windows.
+to obtain mouse button presses (and wheel movement) is still through the PS/2 controller.