
Wheel support in DOS real-mode mouse drivers

List of DOS applications which use the wheel API:

Thanks to Rugxulo and others for collecting this list :-)

- GVFM                          (graphical file manager)
- Mpxplay                       (.MP3, .OGG, etc. audio player)
- Arachne/GPL                   (graphical web browser / email suite)
- Star Commander                (file manager)
- PDCurses 3.x                  (console library)
- Necromancer's DOS Navigator   (file manager)
- Fred                          (text editor using graphics mode)
- Blocek                        (graphical Unicode text editor, image viewer)
- Hammer of Thyrion             (DOS port of Hexen II game)
- 4DOS                          (COMMAND.COM shell replacement)
- Deskwork                      (graphical user interface, StarTrek style)

---------------------------------------------------------------------

API version 1.0

Summary:

This document describes an extension to the commonly used INT 33h Mouse
API to add wheel (Z axis) support. This draft introduces extra functions
and additions to the standard INT 33 API. These new and changed functions
are mentioned in the technote.txt as the WheelAPI.

---------------------------------------------------------------------
New functions:

INT 33/0011 - Check wheel support and get capabilities flags
	AX = 0011h
Return:	AX = 574Dh ('WM' in assembly) if Wheel API is supported by driver
	BX = Capabilities flag (all bits reserved)
	CX = Capabilities flag
		Bit(s)	Description
		------	-----------
		 0	1=Pointing device supports wheel
		 1-15	Reserved
Note:	this function should be examined before accessing wheel features

---------------------------------------------------------------------
Changes in the original INT 33h functions:

INT 33/0000 - Reset driver and read status
Note:	this call clears the wheel movement counter

INT 33/0003 - Get cursor position, buttons status and wheel counter
	AX = 0003h
Return:	BL = buttons status
	BH = 8-bit signed counter of wheel movement since last call
	CX = column
	DX = row
Notes:	returned wheel counter contains all wheel movements accumulated since
	  the last call to INT 33/AX=0003h, INT 33/AX=0005h/BX=-1 or
	  INT 33/AX=0006h/BX=-1
	positive value of wheel counter means downward wheel movement
	this call clears the wheel movement counter

INT 33/0005 - Get button press or wheel movement data
	AX = 0005h
	BX = button number or -1 for wheel
Return:	AL = state of buttons
	AH = 8-bit signed counter of wheel movement
	---button info---
	BX = number of times specified button has been pressed since last call
	CX = column where specified button was last pressed
	DX = row where specified button was last pressed
	---wheel info---
	BX = 16-bit signed counter of wheel movement since last call
	CX = column where wheel was last moved
	DX = row where wheel was last moved
Notes:	returned wheel counters contain all wheel movements accumulated since
	  the last call to INT 33/AX=0003h, INT 33/AX=0005h/BX=-1 or
	  INT 33/AX=0006h/BX=-1
	positive value of wheel counter means downward wheel movement
	this call clears the wheel movement counter for BX=-1

INT 33/0006 - Get button release or wheel movement data
	AX = 0006h
	BX = button number or -1 for wheel
Return:	AL = state of buttons
	AH = 8-bit signed counter of wheel movement
	---button info---
	BX = number of times specified button has been released since last call
	CX = column where specified button was last released
	DX = row where specified button was last released
	---wheel info---
	BX = 16-bit signed counter of wheel movement since last call
	CX = column where wheel was last moved
	DX = row where wheel was last moved
Notes:	returned wheel counters contain all wheel movements accumulated since
	  the last call to INT 33/AX=0003h, INT 33/AX=0005h/BX=-1 or
	  INT 33/AX=0006h/BX=-1
	positive value of wheel counter means downward wheel movement
	this call clears the wheel movement counter for BX=-1

INT 33/000C - Define User Interrupt Routine
INT 33/0014 - Exchange User Interrupt Routines
Notes:	on entry, bit 7 of CX (call mask) indicates that the user routine
	  will be called on a wheel movement
	the user routine will be called with BH holding the 8-bit signed
	  counter of wheel movement since the last call to the routine

INT 33/0021 - Software reset
Note:	this call clears the wheel movement counter
