mirror of https://github.com/RPCS3/rpcs3.git
Restore cellPadSetActDirect's reserved error check
This commit is contained in:
parent
a17a5a76a0
commit
25382a7dae
|
@ -1,7 +1,8 @@
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "Emu/System.h"
|
#include "Emu/System.h"
|
||||||
#include "Emu/IdManager.h"
|
#include "Emu/IdManager.h"
|
||||||
#include "Emu/Cell/PPUModule.h"
|
#include "Emu/Cell/PPUModule.h"
|
||||||
|
#include "Emu/Cell/lv2/sys_process.h"
|
||||||
|
|
||||||
#include "pad_thread.h"
|
#include "pad_thread.h"
|
||||||
#include "cellPad.h"
|
#include "cellPad.h"
|
||||||
|
@ -572,6 +573,17 @@ error_code cellPadSetActDirect(u32 port_no, vm::ptr<CellPadActParam> param)
|
||||||
if (port_no >= CELL_MAX_PADS || !param)
|
if (port_no >= CELL_MAX_PADS || !param)
|
||||||
return CELL_PAD_ERROR_INVALID_PARAMETER;
|
return CELL_PAD_ERROR_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
// Note: signed check unlike the usual unsigned check
|
||||||
|
if ((s32)g_ps3_process_info.sdk_ver > 0x1FFFFF)
|
||||||
|
{
|
||||||
|
// make sure reserved bits are 0
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
{
|
||||||
|
if (param->reserved[i])
|
||||||
|
return CELL_PAD_ERROR_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const auto& pads = handler->GetPads();
|
const auto& pads = handler->GetPads();
|
||||||
|
|
||||||
if (port_no >= config->max_connect)
|
if (port_no >= config->max_connect)
|
||||||
|
@ -586,12 +598,6 @@ error_code cellPadSetActDirect(u32 port_no, vm::ptr<CellPadActParam> param)
|
||||||
if (!(pad->m_device_capability & CELL_PAD_CAPABILITY_ACTUATOR))
|
if (!(pad->m_device_capability & CELL_PAD_CAPABILITY_ACTUATOR))
|
||||||
return CELL_PAD_ERROR_UNSUPPORTED_GAMEPAD;
|
return CELL_PAD_ERROR_UNSUPPORTED_GAMEPAD;
|
||||||
|
|
||||||
// make sure reserved bits are 0. Looks like this happens after checking the pad status
|
|
||||||
// TODO: test this on real hardware and both old and new firmware
|
|
||||||
//for (int i = 0; i < 6; i++)
|
|
||||||
// if (param->reserved[i])
|
|
||||||
// return CELL_PAD_ERROR_INVALID_PARAMETER;
|
|
||||||
|
|
||||||
handler->SetRumble(port_no, param->motor[1], param->motor[0] > 0);
|
handler->SetRumble(port_no, param->motor[1], param->motor[0] > 0);
|
||||||
|
|
||||||
return CELL_OK;
|
return CELL_OK;
|
||||||
|
|
Loading…
Reference in New Issue