Permalink
Browse files

Merge pull request #9978 from LunaMoo/ctrl_extra

Add more PSP keys(for some homebrew and cwcheats)
  • Loading branch information...
hrydgard committed Sep 28, 2017
2 parents 479eb48 + d96232b commit ce21642a61baf48871617915aaf1cb8595ce7671
Showing with 73 additions and 40 deletions.
  1. +9 −0 Common/KeyMap.cpp
  2. +22 −22 Common/KeyMap.h
  3. +23 −17 Core/HLE/sceCtrl.cpp
  4. +19 −1 Core/HLE/sceCtrl.h
View
@@ -664,6 +664,15 @@ const KeyMap_IntStrPair psp_button_names[] = {
{VIRTKEY_AXIS_SWAP, "AxisSwap"},
{VIRTKEY_DEVMENU, "DevMenu"},
{CTRL_HOME, "Home"},
{CTRL_HOLD, "Hold"},
{CTRL_WLAN, "Wlan"},
{CTRL_REMOTE_HOLD, "Remote hold"},
{CTRL_VOL_UP, "Vol +"},
{CTRL_VOL_DOWN, "Vol -"},
{CTRL_SCREEN, "Screen"},
{CTRL_NOTE, "Note"},
};
const int AXIS_BIND_NKCODE_START = 4000;
View
@@ -29,28 +29,28 @@
#define KEYMAP_ERROR_UNKNOWN_KEY 0
enum {
VIRTKEY_FIRST = 0x10000,
VIRTKEY_AXIS_X_MIN = 0x10000,
VIRTKEY_AXIS_Y_MIN = 0x10001,
VIRTKEY_AXIS_X_MAX = 0x10002,
VIRTKEY_AXIS_Y_MAX = 0x10003,
VIRTKEY_RAPID_FIRE = 0x10004,
VIRTKEY_UNTHROTTLE = 0x10005,
VIRTKEY_PAUSE = 0x10006,
VIRTKEY_SPEED_TOGGLE = 0x10007,
VIRTKEY_AXIS_RIGHT_X_MIN = 0x10008,
VIRTKEY_AXIS_RIGHT_Y_MIN = 0x10009,
VIRTKEY_AXIS_RIGHT_X_MAX = 0x1000a,
VIRTKEY_AXIS_RIGHT_Y_MAX = 0x1000b,
VIRTKEY_REWIND = 0x1000c,
VIRTKEY_SAVE_STATE = 0x1000d,
VIRTKEY_LOAD_STATE = 0x1000e,
VIRTKEY_NEXT_SLOT = 0x1000f,
VIRTKEY_TOGGLE_FULLSCREEN = 0x10010,
VIRTKEY_ANALOG_LIGHTLY = 0x10011,
VIRTKEY_AXIS_SWAP = 0x10012,
VIRTKEY_DEVMENU = 0x10013,
VIRTKEY_FRAME_ADVANCE = 0x10014,
VIRTKEY_FIRST = 0x40000001,
VIRTKEY_AXIS_X_MIN = 0x40000001,
VIRTKEY_AXIS_Y_MIN = 0x40000002,
VIRTKEY_AXIS_X_MAX = 0x40000003,
VIRTKEY_AXIS_Y_MAX = 0x40000004,
VIRTKEY_RAPID_FIRE = 0x40000005,
VIRTKEY_UNTHROTTLE = 0x40000006,
VIRTKEY_PAUSE = 0x40000007,
VIRTKEY_SPEED_TOGGLE = 0x40000008,
VIRTKEY_AXIS_RIGHT_X_MIN = 0x40000009,
VIRTKEY_AXIS_RIGHT_Y_MIN = 0x4000000a,
VIRTKEY_AXIS_RIGHT_X_MAX = 0x4000000b,
VIRTKEY_AXIS_RIGHT_Y_MAX = 0x4000000c,
VIRTKEY_REWIND = 0x4000000d,
VIRTKEY_SAVE_STATE = 0x4000000e,
VIRTKEY_LOAD_STATE = 0x4000000f,
VIRTKEY_NEXT_SLOT = 0x40000010,
VIRTKEY_TOGGLE_FULLSCREEN = 0x40000011,
VIRTKEY_ANALOG_LIGHTLY = 0x40000012,
VIRTKEY_AXIS_SWAP = 0x40000013,
VIRTKEY_DEVMENU = 0x40000014,
VIRTKEY_FRAME_ADVANCE = 0x40000015,
VIRTKEY_LAST,
VIRTKEY_COUNT = VIRTKEY_LAST - VIRTKEY_FIRST
};
View
@@ -207,6 +207,8 @@ static int __CtrlReadSingleBuffer(PSPPointer<_ctrl_data> data, bool negative)
*data = ctrlBufs[ctrlBufRead];
ctrlBufRead = (ctrlBufRead + 1) % NUM_CTRL_BUFFERS;
// Mask out buttons games aren't allowed to see.
data->buttons &= CTRL_MASK_USER;
if (negative)
data->buttons = ~data->buttons;
@@ -500,24 +502,28 @@ static int sceCtrlPeekBufferNegative(u32 ctrlDataPtr, u32 nBufs)
return done;
}
static u32 sceCtrlPeekLatch(u32 latchDataPtr)
{
DEBUG_LOG(SCECTRL, "sceCtrlPeekLatch(%08x)", latchDataPtr);
if (Memory::IsValidAddress(latchDataPtr))
Memory::WriteStruct(latchDataPtr, &latch);
return ctrlLatchBufs;
void __CtrlWriteUserLatch(CtrlLatch *userLatch) {
*userLatch = latch;
userLatch->btnBreak &= CTRL_MASK_USER;
userLatch->btnMake &= CTRL_MASK_USER;
userLatch->btnPress &= CTRL_MASK_USER;
userLatch->btnRelease &= CTRL_MASK_USER;
}
static u32 sceCtrlReadLatch(u32 latchDataPtr)
{
DEBUG_LOG(SCECTRL, "sceCtrlReadLatch(%08x)", latchDataPtr);
if (Memory::IsValidAddress(latchDataPtr))
Memory::WriteStruct(latchDataPtr, &latch);
static u32 sceCtrlPeekLatch(u32 latchDataPtr) {
auto userLatch = PSPPointer<CtrlLatch>::Create(latchDataPtr);
if (userLatch.IsValid()) {
__CtrlWriteUserLatch(userLatch);
}
return hleLogSuccessI(SCECTRL, ctrlLatchBufs);
}
return __CtrlResetLatch();
static u32 sceCtrlReadLatch(u32 latchDataPtr) {
auto userLatch = PSPPointer<CtrlLatch>::Create(latchDataPtr);
if (userLatch.IsValid()) {
__CtrlWriteUserLatch(userLatch);
}
return hleLogSuccessI(SCECTRL, __CtrlResetLatch());
}
static const HLEFunction sceCtrl[] =
@@ -531,8 +537,8 @@ static const HLEFunction sceCtrl[] =
{0X3A622550, &WrapI_UU<sceCtrlPeekBufferPositive>, "sceCtrlPeekBufferPositive", 'i', "xx"},
{0XC152080A, &WrapI_UU<sceCtrlPeekBufferNegative>, "sceCtrlPeekBufferNegative", 'i', "xx"},
{0X60B81F86, &WrapI_UU<sceCtrlReadBufferNegative>, "sceCtrlReadBufferNegative", 'i', "xx"},
{0XB1D0E5CD, &WrapU_U<sceCtrlPeekLatch>, "sceCtrlPeekLatch", 'x', "x" },
{0X0B588501, &WrapU_U<sceCtrlReadLatch>, "sceCtrlReadLatch", 'x', "x" },
{0XB1D0E5CD, &WrapU_U<sceCtrlPeekLatch>, "sceCtrlPeekLatch", 'i', "x" },
{0X0B588501, &WrapU_U<sceCtrlReadLatch>, "sceCtrlReadLatch", 'i', "x" },
{0X348D99D4, nullptr, "sceCtrlSetSuspendingExtraSamples", '?', "" },
{0XAF5960F3, nullptr, "sceCtrlGetSuspendingExtraSamples", '?', "" },
{0XA68FD260, nullptr, "sceCtrlClearRapidFire", '?', "" },
View
@@ -40,7 +40,25 @@ const int CTRL_STICK_RIGHT = 1;
#define CTRL_LTRIGGER 0x0100
#define CTRL_RTRIGGER 0x0200
#define CTRL_ALL_BUTTONS 0xF3F9
// System-ish buttons. Not generally used by games.
#define CTRL_HOME 0x00010000
#define CTRL_HOLD 0x00020000
#define CTRL_WLAN 0x00040000
#define CTRL_REMOTE_HOLD 0x00080000
#define CTRL_VOL_UP 0x00100000
#define CTRL_VOL_DOWN 0x00200000
#define CTRL_SCREEN 0x00400000
#define CTRL_NOTE 0x00800000
#define CTRL_DISC 0x01000000
#define CTRL_MEMSTICK 0x02000000
#define CTRL_FORWARD 0x10000000
#define CTRL_BACK 0x20000000
#define CTRL_PLAYPAUSE 0x40000000
#define CTRL_MASK_DPAD (CTRL_UP | CTRL_DOWN | CTRL_LEFT | CTRL_RIGHT)
#define CTRL_MASK_ACTION (CTRL_SQUARE | CTRL_TRIANGLE | CTRL_CIRCLE | CTRL_CROSS)
#define CTRL_MASK_TRIGGER (CTRL_LTRIGGER | CTRL_RTRIGGER)
#define CTRL_MASK_USER (CTRL_MASK_DPAD | CTRL_MASK_ACTION | CTRL_START | CTRL_SELECT | CTRL_MASK_TRIGGER | CTRL_HOME | CTRL_HOLD | CTRL_WLAN | CTRL_REMOTE_HOLD | CTRL_VOL_UP | CTRL_VOL_DOWN | CTRL_SCREEN | CTRL_NOTE)
void __CtrlInit();
void __CtrlDoState(PointerWrap &p);

0 comments on commit ce21642

Please sign in to comment.