#if defined(STEM_PLATFORM_linux)

GAMEPAD_DEVICE_BEGIN(0x79, 0x11) // RetroLink NES
GAMEPAD_AXIS(0, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_X, 1)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x810, 0xE501) // XCSource SNES
GAMEPAD_AXIS(0, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_X, 1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x20D6, 0xA710) // Mayflash Nintendo 64 controller adapter
GAMEPAD_AXIS(0, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(4, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(1, GAMEPAD_BOTTOM_FACE_BUTTON) // A button
GAMEPAD_BUTTON(2, GAMEPAD_LEFT_FACE_BUTTON) // B button
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_FRONT_SHOULDER) // L button
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_FRONT_SHOULDER) // R button
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_BACK_SHOULDER) // Z button
GAMEPAD_BUTTON(9, GAMEPAD_CENTER_BUTTON) // Start button
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0xF30, 0x10A) // RedOctane 3 in 1 conversion box
GAMEPAD_AXIS(0, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0xE8F, 0x3) // RadioShack PSXToUSB
GAMEPAD_AXIS(0, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x6666, 0x8802) // Super Dual Box Pro PS/PS2 Controller Adapter For Windows
GAMEPAD_AXIS(0, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_BLACKLIST_AXIS(4) // Analog on/off state
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_BUTTON(12, GAMEPAD_DPAD_UP)
GAMEPAD_BUTTON(13, GAMEPAD_DPAD_RIGHT)
GAMEPAD_BUTTON(14, GAMEPAD_DPAD_DOWN)
GAMEPAD_BUTTON(15, GAMEPAD_DPAD_LEFT)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x45E, 0x8) // Microsoft Sidewinder Precision Pro
GAMEPAD_AXIS(0, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_X, 1) // Stick twist
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_Y, 1) // Throttle
GAMEPAD_AXIS(4, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(0, GAMEPAD_RIGHT_BACK_SHOULDER) // Trigger
GAMEPAD_BUTTON(1, GAMEPAD_LEFT_STICK_BUTTON) // Left button on stick
GAMEPAD_BUTTON(2, GAMEPAD_RIGHT_STICK_BUTTON) // Top right button on stick
GAMEPAD_BUTTON(3, GAMEPAD_RIGHT_CENTER_BUTTON) // Bottom right button on stick
GAMEPAD_BUTTON(4, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(5, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(7, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(8, GAMEPAD_CENTER_BUTTON) // Up arrow button in front
GAMEPAD_DEVICE_END()

#elif defined(STEM_PLATFORM_windows)

// Use DsHidMini for DualShock 3 on Windows, in Generic DirectInput Device mode: https://vigem.org/projects/DsHidMini/
GAMEPAD_DEVICE_BEGIN(VENDOR_ID_SONY, PRODUCT_ID_DUALSHOCK3)
GAMEPAD_AXIS(0, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(1, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(2, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(3, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(6, GAMEPAD_LEFT_FRONT_SHOULDER, 1) // L1 pressure
GAMEPAD_AXIS(7, GAMEPAD_RIGHT_FRONT_SHOULDER, 1) // R1 pressure
GAMEPAD_AXIS(8, GAMEPAD_RIGHT_BACK_SHOULDER, 1)
GAMEPAD_AXIS(9, GAMEPAD_LEFT_BACK_SHOULDER, 1)
// Pressure sensitivity axes show up as second device; how will I handle that!?
//GAMEPAD_AXIS(0, GAMEPAD_DPAD_UP, 1) // Dpad up pressure
//GAMEPAD_AXIS(1, GAMEPAD_DPAD_RIGHT, 1) // Dpad right pressure
//GAMEPAD_AXIS(2, GAMEPAD_DPAD_DOWN, 1) // Dpad down pressure
//GAMEPAD_AXIS(3, GAMEPAD_DPAD_LEFT, 1) // Dpad left pressure
//GAMEPAD_AXIS(4, GAMEPAD_TOP_FACE_BUTTON, 1) // Triangle button pressure
//GAMEPAD_AXIS(5, GAMEPAD_RIGHT_FACE_BUTTON, 1) // Circle button pressure
//GAMEPAD_AXIS(6, GAMEPAD_BOTTOM_FACE_BUTTON, 1) // X button pressure
//GAMEPAD_AXIS(7, GAMEPAD_LEFT_FACE_BUTTON, 1) // Square button pressure
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(5, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(6, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(12, GAMEPAD_CENTER_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x79, 0x11) // RetroLink NES
GAMEPAD_AXIS(0, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_X, 1)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x810, 0xE501) // XCSource SNES
GAMEPAD_AXIS(0, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_X, 1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x20D6, 0xA710) // Mayflash Nintendo 64 controller adapter
GAMEPAD_AXIS(0, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(5, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_BUTTON(1, GAMEPAD_BOTTOM_FACE_BUTTON) // A button
GAMEPAD_BUTTON(2, GAMEPAD_LEFT_FACE_BUTTON) // B button
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_FRONT_SHOULDER) // L button
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_FRONT_SHOULDER) // R button
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_BACK_SHOULDER) // Z button
GAMEPAD_BUTTON(9, GAMEPAD_CENTER_BUTTON) // Start button
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0xF30, 0x10A) // RedOctane 3 in 1 conversion box
GAMEPAD_AXIS(0, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(3, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0xE8F, 0x3) // RadioShack PSXToUSB
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(6, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x6666, 0x8802) // Super Dual Box Pro PS/PS2 Controller Adapter For Windows
GAMEPAD_AXIS(0, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_BUTTON(12, GAMEPAD_DPAD_UP)
GAMEPAD_BUTTON(13, GAMEPAD_DPAD_RIGHT)
GAMEPAD_BUTTON(14, GAMEPAD_DPAD_DOWN)
GAMEPAD_BUTTON(15, GAMEPAD_DPAD_LEFT)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x45E, 0x8) // Microsoft Sidewinder Precision Pro
GAMEPAD_AXIS(0, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(3, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_RIGHT_STICK_X, 1) // Stick twist
GAMEPAD_AXIS(5, GAMEPAD_RIGHT_STICK_Y, 1) // Throttle
GAMEPAD_BUTTON(0, GAMEPAD_RIGHT_BACK_SHOULDER) // Trigger
GAMEPAD_BUTTON(1, GAMEPAD_LEFT_STICK_BUTTON) // Left button on stick
GAMEPAD_BUTTON(2, GAMEPAD_RIGHT_STICK_BUTTON) // Top right button on stick
GAMEPAD_BUTTON(3, GAMEPAD_RIGHT_CENTER_BUTTON) // Bottom right button on stick
GAMEPAD_BUTTON(4, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(5, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(7, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(8, GAMEPAD_CENTER_BUTTON) // Up arrow button in front
GAMEPAD_DEVICE_END()

#elif defined(STEM_PLATFORM_macosx)

GAMEPAD_DEVICE_BEGIN(0x79, 0x11) // RetroLink NES
GAMEPAD_AXIS(3, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x810, 0xE501) // XCSource SNES
GAMEPAD_AXIS(0, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x20D6, 0xA710) // Mayflash Nintendo 64 controller adapter
GAMEPAD_AXIS(0, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(3, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(4, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(5, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_BUTTON(1, GAMEPAD_BOTTOM_FACE_BUTTON) // A button
GAMEPAD_BUTTON(2, GAMEPAD_LEFT_FACE_BUTTON) // B button
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_FRONT_SHOULDER) // L button
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_FRONT_SHOULDER) // R button
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_BACK_SHOULDER) // Z button
GAMEPAD_BUTTON(9, GAMEPAD_CENTER_BUTTON) // Start button
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0xF30, 0x10A) // RedOctane 3 in 1 conversion box
GAMEPAD_AXIS(0, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(4, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0xE8F, 0x3) // RadioShack PSXToUSB
GAMEPAD_AXIS(0, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_AXIS(1, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(2, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(3, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(5, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(6, GAMEPAD_DPAD_Y, -1)
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x6666, 0x8802) // Super Dual Box Pro PS/PS2 Controller Adapter For Windows
GAMEPAD_AXIS(0, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_RIGHT_STICK_X, 1)
GAMEPAD_AXIS(3, GAMEPAD_RIGHT_STICK_Y, -1)
GAMEPAD_BLACKLIST_AXIS(4) // Analog on/off state
GAMEPAD_BUTTON(0, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(1, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(2, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(3, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(4, GAMEPAD_LEFT_BACK_SHOULDER)
GAMEPAD_BUTTON(5, GAMEPAD_RIGHT_BACK_SHOULDER)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FRONT_SHOULDER)
GAMEPAD_BUTTON(7, GAMEPAD_RIGHT_FRONT_SHOULDER)
GAMEPAD_BUTTON(8, GAMEPAD_RIGHT_CENTER_BUTTON)
GAMEPAD_BUTTON(9, GAMEPAD_LEFT_CENTER_BUTTON)
GAMEPAD_BUTTON(10, GAMEPAD_LEFT_STICK_BUTTON)
GAMEPAD_BUTTON(11, GAMEPAD_RIGHT_STICK_BUTTON)
GAMEPAD_BUTTON(12, GAMEPAD_DPAD_UP)
GAMEPAD_BUTTON(13, GAMEPAD_DPAD_RIGHT)
GAMEPAD_BUTTON(14, GAMEPAD_DPAD_DOWN)
GAMEPAD_BUTTON(15, GAMEPAD_DPAD_LEFT)
GAMEPAD_DEVICE_END()

GAMEPAD_DEVICE_BEGIN(0x45E, 0x8) // Microsoft Sidewinder Precision Pro
GAMEPAD_AXIS(0, GAMEPAD_DPAD_X, 1)
GAMEPAD_AXIS(1, GAMEPAD_DPAD_Y, -1)
GAMEPAD_AXIS(2, GAMEPAD_LEFT_STICK_X, 1)
GAMEPAD_AXIS(3, GAMEPAD_LEFT_STICK_Y, -1)
GAMEPAD_AXIS(4, GAMEPAD_RIGHT_STICK_X, 1) // Stick twist
GAMEPAD_AXIS(5, GAMEPAD_ADDITIONAL_AXIS_1, 1) // Throttle
GAMEPAD_BUTTON(0, GAMEPAD_RIGHT_BACK_SHOULDER) // Trigger
GAMEPAD_BUTTON(1, GAMEPAD_LEFT_STICK_BUTTON) // Left button on stick
GAMEPAD_BUTTON(2, GAMEPAD_RIGHT_STICK_BUTTON) // Top right button on stick
GAMEPAD_BUTTON(3, GAMEPAD_RIGHT_CENTER_BUTTON) // Bottom right button on stick
GAMEPAD_BUTTON(4, GAMEPAD_RIGHT_FACE_BUTTON)
GAMEPAD_BUTTON(5, GAMEPAD_TOP_FACE_BUTTON)
GAMEPAD_BUTTON(6, GAMEPAD_LEFT_FACE_BUTTON)
GAMEPAD_BUTTON(7, GAMEPAD_BOTTOM_FACE_BUTTON)
GAMEPAD_BUTTON(8, GAMEPAD_CENTER_BUTTON) // Up arrow button in front
GAMEPAD_DEVICE_END()

#endif
