Loading...
Searching...
No Matches
Mouse Input

SNES Mouse support (1-2 mice on ports 1/2) More...

Macros

#define MOUSE_BUTTON_LEFT   0x01
 
#define MOUSE_BUTTON_RIGHT   0x02
 
#define MOUSE_SENS_HIGH   2
 
#define MOUSE_SENS_LOW   0
 
#define MOUSE_SENS_MEDIUM   1
 

Functions

u8 mouseButtonsHeld (u8 port)
 Get currently held mouse buttons.
 
u8 mouseButtonsPressed (u8 port)
 Get newly pressed mouse buttons this frame.
 
u8 mouseGetSensitivity (u8 port)
 Get current mouse sensitivity.
 
s16 mouseGetX (u8 port)
 Get X displacement since last frame.
 
s16 mouseGetY (u8 port)
 Get Y displacement since last frame.
 
u8 mouseInit (u8 port)
 Initialize mouse on given port.
 
u8 mouseIsConnected (u8 port)
 Check if mouse is connected on port.
 
void mouseSetSensitivity (u8 port, u8 sensitivity)
 Set mouse sensitivity.
 

Detailed Description

SNES Mouse support (1-2 mice on ports 1/2)

The SNES mouse provides 2 buttons and relative X/Y displacement. Displacement is read via bit-bang in the NMI handler after mouseInit().

Usage

// Detect and initialize mouse on port 1
if (mouseInit(0)) {
// Mouse found!
}
// Main loop
while (1) {
s16 dx = mouseGetX(0);
s16 dy = mouseGetY(0);
cursor_x += dx;
cursor_y += dy;
// Left click!
}
}
void WaitForVBlank(void)
Wait for next VBlank period.
static u16 bx
Definition main.c:159
s16 mouseGetY(u8 port)
Get Y displacement since last frame.
#define MOUSE_BUTTON_LEFT
Definition input.h:191
u8 mouseInit(u8 port)
Initialize mouse on given port.
s16 mouseGetX(u8 port)
Get X displacement since last frame.
u8 mouseButtonsPressed(u8 port)
Get newly pressed mouse buttons this frame.
signed short s16
16-bit signed integer (-32768 to 32767)
Definition types.h:49

Macro Definition Documentation

◆ MOUSE_BUTTON_LEFT

#define MOUSE_BUTTON_LEFT   0x01

Left mouse button

◆ MOUSE_BUTTON_RIGHT

#define MOUSE_BUTTON_RIGHT   0x02

Right mouse button

◆ MOUSE_SENS_HIGH

#define MOUSE_SENS_HIGH   2

High sensitivity

◆ MOUSE_SENS_LOW

#define MOUSE_SENS_LOW   0

Low sensitivity

◆ MOUSE_SENS_MEDIUM

#define MOUSE_SENS_MEDIUM   1

Medium sensitivity

Function Documentation

◆ mouseButtonsHeld()

u8 mouseButtonsHeld ( u8  port)

Get currently held mouse buttons.

Parameters
portController port (0 or 1)
Returns
Button mask (MOUSE_BUTTON_LEFT / MOUSE_BUTTON_RIGHT)

◆ mouseButtonsPressed()

u8 mouseButtonsPressed ( u8  port)

Get newly pressed mouse buttons this frame.

Parameters
portController port (0 or 1)
Returns
Button mask of buttons pressed this frame (edge detection)

◆ mouseGetSensitivity()

u8 mouseGetSensitivity ( u8  port)

Get current mouse sensitivity.

Parameters
portController port (0 or 1)
Returns
Current sensitivity (MOUSE_SENS_LOW/MEDIUM/HIGH)

◆ mouseGetX()

s16 mouseGetX ( u8  port)

Get X displacement since last frame.

Returns signed displacement: positive = right, negative = left. Raw hardware format is sign-magnitude; this function converts it.

Parameters
portController port (0 or 1)
Returns
X displacement (-127 to +127)

◆ mouseGetY()

s16 mouseGetY ( u8  port)

Get Y displacement since last frame.

Returns signed displacement: positive = down, negative = up.

Parameters
portController port (0 or 1)
Returns
Y displacement (-127 to +127)

◆ mouseInit()

u8 mouseInit ( u8  port)

Initialize mouse on given port.

Detects if a mouse is connected by checking the auto-joypad device signature. If found, cycles sensitivity to fix the Nintendo power-on bug and enables mouse reading in the NMI handler.

Parameters
portController port (0 = port 1, 1 = port 2)
Returns
1 if mouse detected, 0 if not

◆ mouseIsConnected()

u8 mouseIsConnected ( u8  port)

Check if mouse is connected on port.

Parameters
portController port (0 or 1)
Returns
1 if connected, 0 if not

◆ mouseSetSensitivity()

void mouseSetSensitivity ( u8  port,
u8  sensitivity 
)

Set mouse sensitivity.

Cycles the mouse sensitivity by strobing the controller port. The sensitivity cycles: LOW -> MEDIUM -> HIGH -> LOW -> ...

Parameters
portController port (0 or 1)
sensitivityTarget sensitivity (MOUSE_SENS_LOW/MEDIUM/HIGH)