Tweak delays to make both Tekken 5.1 and Tekken DR happy.

This commit is contained in:
Jean-Philip Desjardins 2023-06-27 17:50:26 -04:00
parent 2138b076e2
commit 616c4e32a9
3 changed files with 26 additions and 3 deletions

View file

@ -502,6 +502,7 @@ set(COMMON_SRC_FILES
states/XmlStateFile.cpp states/XmlStateFile.cpp
states/XmlStateFile.h states/XmlStateFile.h
static_loop.h static_loop.h
TimeUtils.h
uint128.h uint128.h
VirtualPad.cpp VirtualPad.cpp
VirtualPad.h VirtualPad.h

19
Source/TimeUtils.h Normal file
View file

@ -0,0 +1,19 @@
#pragma once
namespace TimeUtils
{
constexpr static uint64 SecsToCycles(uint64 freq, uint64 secs)
{
return secs * freq;
}
constexpr uint64 MsecsToCycles(uint64 freq, uint64 msecs)
{
return msecs * freq / 1000;
}
constexpr uint64 UsecsToCycles(uint64 freq, uint64 usecs)
{
return usecs * freq / 1'000'000;
}
}

View file

@ -2,6 +2,7 @@
#include "../Log.h" #include "../Log.h"
#include "../states/RegisterStateFile.h" #include "../states/RegisterStateFile.h"
#include "../Ps2Const.h" #include "../Ps2Const.h"
#include "../TimeUtils.h"
#include "IopBios.h" #include "IopBios.h"
#include "Iop_Cdvdman.h" #include "Iop_Cdvdman.h"
@ -41,7 +42,9 @@
#define FUNCTION_CDREADDVDDUALINFO "CdReadDvdDualInfo" #define FUNCTION_CDREADDVDDUALINFO "CdReadDvdDualInfo"
#define FUNCTION_CDLAYERSEARCHFILE "CdLayerSearchFile" #define FUNCTION_CDLAYERSEARCHFILE "CdLayerSearchFile"
#define COMMAND_BASE_DELAY 0x100000 constexpr uint64 COMMAND_READ_BASE_DELAY = TimeUtils::UsecsToCycles(PS2::IOP_CLOCK_OVER_FREQ, 100);
constexpr uint64 COMMAND_READ_SECTOR_DELAY = TimeUtils::UsecsToCycles(PS2::IOP_CLOCK_OVER_FREQ, 500);
constexpr uint64 COMMAND_SEEK_DELAY = TimeUtils::UsecsToCycles(PS2::IOP_CLOCK_OVER_FREQ, 100);
using namespace Iop; using namespace Iop;
@ -479,7 +482,7 @@ uint32 CCdvdman::CdRead(uint32 startSector, uint32 sectorCount, uint32 bufferPtr
} }
} }
m_pendingCommand = COMMAND_READ; m_pendingCommand = COMMAND_READ;
m_pendingCommandDelay = COMMAND_BASE_DELAY + (sectorCount * 0x100); m_pendingCommandDelay = COMMAND_READ_BASE_DELAY + (sectorCount * COMMAND_READ_SECTOR_DELAY);
m_status = CDVD_STATUS_READING; m_status = CDVD_STATUS_READING;
return 1; return 1;
} }
@ -490,7 +493,7 @@ uint32 CCdvdman::CdSeek(uint32 sector)
sector); sector);
assert(m_pendingCommand == COMMAND_NONE); assert(m_pendingCommand == COMMAND_NONE);
m_pendingCommand = COMMAND_SEEK; m_pendingCommand = COMMAND_SEEK;
m_pendingCommandDelay = COMMAND_BASE_DELAY; m_pendingCommandDelay = COMMAND_SEEK_DELAY;
return 1; return 1;
} }