windows-nt/Source/XPSP1/NT/base/mvdm/softpc.new/base/inc/mouse.h
2020-09-26 16:20:57 +08:00

122 lines
3.1 KiB
C

/*
* VPC-XT Revision 1.0
*
* Title : mouse.h
*
* Description : Microsoft Mouse
*
* Author :
*
* Notes :
*/
/* SccsID[]="@(#)mouse.h 1.7 08/10/92 Copyright Insignia Solutions Ltd."; */
/*
* ============================================================================
* External declarations and macros
* ============================================================================
*/
/* Mouse port number definitions. */
#if defined(NEC_98)
#define NMODE_BASE 0x7FD9
#define HMODE_BASE 0x61
#define MOUSE_PORT_START 0
#define MOUSE_PORT_END 6
#define MOUSE_PORT_0 0
#define MOUSE_PORT_1 2
#define MOUSE_PORT_2 4
#define MOUSE_PORT_3 6
#define NEC98_CPU_MOUSE_INT2 6 //INT2 Master PIC
#define NEC98_CPU_MOUSE_INT6 5 //INT6 Slave PIC
#define NEC98_CPU_MOUSE_ADAPTER0 0
#define NEC98_CPU_MOUSE_ADAPTER1 1
#else // !NEC_98
#define MOUSE_PORT_0 0x023c
#define MOUSE_PORT_1 0x023d
#define MOUSE_PORT_2 0x023e
#define MOUSE_PORT_3 0x023f
#define MOUSE_PORT_START 0x023c
#define MOUSE_PORT_END 0x023f
#endif // !NEC_98
/* Internal mouse status word bits. */
#define LEFT_BUTTON_DOWN 0x04
#define LEFT_BUTTON_CHANGE 0x20
#define RIGHT_BUTTON_DOWN 0x01
#define RIGHT_BUTTON_CHANGE 0x08
#define MOVEMENT 0x40
/* Internal mode register word bits. */
#define HOLD 0x20
/* Inport internal registers. */
#define INTERNAL_MOUSE_STAT_REG 0x0
#define INTERNAL_DATA1_REG 0x1
#define INTERNAL_DATA2_REG 0x2
#define INTERNAL_DATA3_REG 0x3
#define INTERNAL_DATA4_REG 0x4
#define INTERFACE_STATUS_REG 0x5
#define INTERFACE_CONTROL_REG 0x6
#define INTERNAL_MODE_REG 0x7
/*
* Maximum acceleration threshold - treated as unsigned word by supplied
* handler routine so 0xffff is large rather than -1.
*/
#define MAX_THRESHOLD 0xffff
/* Count of the number of different bop functions. */
#define NUM_MOUSE_FUNCS (sizeof(mouse_functions)/sizeof(SHORT (*)()))
/*
* Definitions below are copied from MS-Windows Intel mouse driver and are
* required to acknowledge mouse interrupts.
*/
#define ACK_PORT 0x0020
#define ACK_SLAVE_PORT 0x00a0
#define EOI 0x20
#define PMODE_WINDOWS 1
#define INPORT_MAX_INTERRUPTS 30
/*
* Machine word bit definitions.
*/
#define BIT0 (1 << 0)
#define BIT1 (1 << 1)
#define BIT2 (1 << 2)
#define BIT3 (1 << 3)
#define BIT4 (1 << 4)
#define BIT5 (1 << 5)
#define BIT6 (1 << 6)
#define BIT7 (1 << 7)
#define BIT8 (1 << 8)
#define BIT9 (1 << 9)
#define BIT10 (1 << 10)
#define BIT11 (1 << 11)
#define BIT12 (1 << 12)
#define BIT13 (1 << 13)
#define BIT14 (1 << 14)
#define BIT15 (1 << 15)
/* Microsoft Inport mouse driver assumes mouse has 2 buttons so so do we. */
#define INPORT_NUMBER_BUTTONS 2
/* Size of Intel MOUSEINFO structure. */
#define MOUSEINFO_SIZE 14
/* Offset of fuunction parameters from frame pointer in Intel. */
#define PARAM_OFFSET 6
IMPORT void mouse_init IPT0();
IMPORT void mouse_inb IPT2(io_addr, port, half_word *, value);
IMPORT void mouse_outb IPT2(io_addr, port, half_word, value);
IMPORT void mouse_send IPT4(int, Delta_x, int, Delta_y, int, left, int, right);
IMPORT ULONG mouse_last; /* remembers last time mouse was processed */