mirror of
https://github.com/libretro/Play-.git
synced 2025-02-23 13:10:32 +00:00
Implement index SYSCLIB function.
This commit is contained in:
parent
05d939aaf0
commit
b11821322d
@ -68,6 +68,9 @@ std::string CSysclib::GetFunctionName(unsigned int functionId) const
|
||||
case 24:
|
||||
return "strcspn";
|
||||
break;
|
||||
case 25:
|
||||
return "index";
|
||||
break;
|
||||
case 27:
|
||||
return "strlen";
|
||||
break;
|
||||
@ -201,6 +204,12 @@ void CSysclib::Invoke(CMIPS& context, unsigned int functionId)
|
||||
context.m_State.nGPR[CMIPS::A1].nV0
|
||||
);
|
||||
break;
|
||||
case 25:
|
||||
context.m_State.nGPR[CMIPS::V0].nD0 = __index(
|
||||
context.m_State.nGPR[CMIPS::A0].nV0,
|
||||
context.m_State.nGPR[CMIPS::A1].nV0
|
||||
);
|
||||
break;
|
||||
case 27:
|
||||
context.m_State.nGPR[CMIPS::V0].nD0 = static_cast<int32>(__strlen(
|
||||
reinterpret_cast<char*>(&m_ram[context.m_State.nGPR[CMIPS::A0].nV0])
|
||||
@ -507,6 +516,14 @@ uint32 CSysclib::__strcspn(uint32 str1Ptr, uint32 str2Ptr)
|
||||
return result;
|
||||
}
|
||||
|
||||
uint32 CSysclib::__index(uint32 sPtr, uint32 c)
|
||||
{
|
||||
auto s = reinterpret_cast<const char*>(m_ram + sPtr);
|
||||
auto result = strchr(s, c);
|
||||
if(result == nullptr) return 0;
|
||||
return reinterpret_cast<const uint8*>(result) - m_ram;
|
||||
}
|
||||
|
||||
uint32 CSysclib::__strtol(uint32 stringPtr, uint32 endPtrPtr, uint32 radix)
|
||||
{
|
||||
auto string = reinterpret_cast<const char*>(GetPtr(stringPtr, 0));
|
||||
|
@ -54,6 +54,7 @@ namespace Iop
|
||||
uint32 __strstr(uint32, uint32);
|
||||
uint32 __strtok(uint32, uint32);
|
||||
uint32 __strcspn(uint32, uint32);
|
||||
uint32 __index(uint32, uint32);
|
||||
uint32 __strtol(uint32, uint32, uint32);
|
||||
uint32 __wmemcopy(uint32, uint32, uint32);
|
||||
uint32 __vsprintf(CMIPS&, uint32, uint32, uint32);
|
||||
|
Loading…
x
Reference in New Issue
Block a user