mirror of
https://github.com/jpd002/Play-.git
synced 2025-04-29 06:07:56 +03:00
PsfPlayer v0.16
git-svn-id: http://svn.purei.org/purei/trunk@416 b36208d7-6611-0410-8bec-b1987f11c4a2
This commit is contained in:
parent
7bfac71738
commit
be0de1ee26
10 changed files with 98 additions and 18 deletions
|
@ -65,7 +65,6 @@ CIopBios::~CIopBios()
|
||||||
SaveAllModulesTags(m_cpu.m_Functions, "functions");
|
SaveAllModulesTags(m_cpu.m_Functions, "functions");
|
||||||
#endif
|
#endif
|
||||||
DeleteModules();
|
DeleteModules();
|
||||||
delete m_sifMan;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CIopBios::Reset()
|
void CIopBios::Reset()
|
||||||
|
@ -122,6 +121,9 @@ void CIopBios::Reset()
|
||||||
{
|
{
|
||||||
RegisterModule(new Iop::CIntrman(*this, m_ram));
|
RegisterModule(new Iop::CIntrman(*this, m_ram));
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
RegisterModule(m_sifMan);
|
||||||
|
}
|
||||||
#ifdef _IOP_EMULATE_MODULES
|
#ifdef _IOP_EMULATE_MODULES
|
||||||
{
|
{
|
||||||
RegisterModule(new Iop::CFileIo(*m_sifMan, *m_ioman));
|
RegisterModule(new Iop::CFileIo(*m_sifMan, *m_ioman));
|
||||||
|
@ -403,7 +405,7 @@ uint32 CIopBios::WakeupThread(uint32 threadId, bool inInterrupt)
|
||||||
return thread.wakeupCount;
|
return thread.wakeupCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 CIopBios::GetThreadId()
|
uint32 CIopBios::GetCurrentThreadId()
|
||||||
{
|
{
|
||||||
return m_currentThreadId;
|
return m_currentThreadId;
|
||||||
}
|
}
|
||||||
|
@ -477,6 +479,12 @@ void CIopBios::Reschedule()
|
||||||
{
|
{
|
||||||
LoadThreadContext(nextThreadId);
|
LoadThreadContext(nextThreadId);
|
||||||
}
|
}
|
||||||
|
#ifdef _DEBUG
|
||||||
|
if(nextThreadId != m_currentThreadId)
|
||||||
|
{
|
||||||
|
CLog::GetInstance().Print(LOGNAME, "Switched over to thread %i.\r\n", nextThreadId);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
m_currentThreadId = nextThreadId;
|
m_currentThreadId = nextThreadId;
|
||||||
m_cpu.m_nQuota = 1;
|
m_cpu.m_nQuota = 1;
|
||||||
}
|
}
|
||||||
|
@ -733,9 +741,6 @@ void CIopBios::HandleException()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Hack for FFX PSF ---------------------
|
|
||||||
//m_cpu.m_State.nGPR[CMIPS::V0].nD0 = 1;
|
|
||||||
//Hack for FFX PSF ---------------------
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
CLog::GetInstance().Print(LOGNAME, "%0.8X: Trying to call a function from non-existing module (%s, %d).\r\n",
|
CLog::GetInstance().Print(LOGNAME, "%0.8X: Trying to call a function from non-existing module (%s, %d).\r\n",
|
||||||
m_cpu.m_State.nPC, moduleName.c_str(), functionId);
|
m_cpu.m_State.nPC, moduleName.c_str(), functionId);
|
||||||
|
|
|
@ -43,7 +43,7 @@ public:
|
||||||
uint32 CreateThread(uint32, uint32);
|
uint32 CreateThread(uint32, uint32);
|
||||||
void StartThread(uint32, uint32* = NULL);
|
void StartThread(uint32, uint32* = NULL);
|
||||||
void DelayThread(uint32);
|
void DelayThread(uint32);
|
||||||
uint32 GetThreadId();
|
uint32 GetCurrentThreadId();
|
||||||
void SleepThread();
|
void SleepThread();
|
||||||
uint32 WakeupThread(uint32, bool);
|
uint32 WakeupThread(uint32, bool);
|
||||||
|
|
||||||
|
|
46
Source/iop/Iop_SifMan.cpp
Normal file
46
Source/iop/Iop_SifMan.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include "Iop_SifMan.h"
|
||||||
|
#include "../Log.h"
|
||||||
|
|
||||||
|
#define LOG_NAME ("iop_sifman")
|
||||||
|
|
||||||
|
using namespace Iop;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
CSifMan::CSifMan()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
CSifMan::~CSifMan()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
string CSifMan::GetId() const
|
||||||
|
{
|
||||||
|
return "sifman";
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSifMan::Invoke(CMIPS& context, unsigned int functionId)
|
||||||
|
{
|
||||||
|
switch(functionId)
|
||||||
|
{
|
||||||
|
case 7:
|
||||||
|
context.m_State.nGPR[CMIPS::V0].nD0 = static_cast<int32>(SifSetDma(
|
||||||
|
context.m_State.nGPR[CMIPS::A0].nV0,
|
||||||
|
context.m_State.nGPR[CMIPS::A1].nV0
|
||||||
|
));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
CLog::GetInstance().Print(LOG_NAME, "%0.8X: Unknown function (%d) called.", context.m_State.nPC, functionId);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32 CSifMan::SifSetDma(uint32 structAddr, uint32 length)
|
||||||
|
{
|
||||||
|
CLog::GetInstance().Print(LOG_NAME, "SifSetDma(structAddr = 0x%0.8X, length = %X);\r\n",
|
||||||
|
structAddr, length);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
|
@ -2,17 +2,25 @@
|
||||||
#define _IOP_SIFMAN_H_
|
#define _IOP_SIFMAN_H_
|
||||||
|
|
||||||
#include "../SifModule.h"
|
#include "../SifModule.h"
|
||||||
|
#include "Iop_Module.h"
|
||||||
|
|
||||||
namespace Iop
|
namespace Iop
|
||||||
{
|
{
|
||||||
class CSifMan
|
class CSifMan : public CModule
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~CSifMan() {}
|
CSifMan();
|
||||||
|
virtual ~CSifMan();
|
||||||
|
|
||||||
|
virtual std::string GetId() const;
|
||||||
|
virtual void Invoke(CMIPS&, unsigned int);
|
||||||
|
|
||||||
virtual void RegisterModule(uint32, CSifModule*) = 0;
|
virtual void RegisterModule(uint32, CSifModule*) = 0;
|
||||||
virtual void SendPacket(void*, uint32) = 0;
|
virtual void SendPacket(void*, uint32) = 0;
|
||||||
virtual void SetDmaBuffer(uint8*, uint32) = 0;
|
virtual void SetDmaBuffer(uint8*, uint32) = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint32 SifSetDma(uint32, uint32);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -256,6 +256,12 @@ void CSpuBase::Render(int16* samples, unsigned int sampleCount, unsigned int sam
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if(reader.IsDone())
|
||||||
|
{
|
||||||
|
channel.status = STOPPED;
|
||||||
|
channel.adsrVolume = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
uint8* repeat = reader.GetRepeat();
|
uint8* repeat = reader.GetRepeat();
|
||||||
channel.repeat = repeat - m_ram;
|
channel.repeat = repeat - m_ram;
|
||||||
}
|
}
|
||||||
|
@ -726,6 +732,11 @@ uint8* CSpuBase::CSampleReader::GetCurrent() const
|
||||||
return m_nextSample;
|
return m_nextSample;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CSpuBase::CSampleReader::IsDone() const
|
||||||
|
{
|
||||||
|
return m_done;
|
||||||
|
}
|
||||||
|
|
||||||
double CSpuBase::CSampleReader::GetSamplingRate() const
|
double CSpuBase::CSampleReader::GetSamplingRate() const
|
||||||
{
|
{
|
||||||
return m_sourceSamplingRate;
|
return m_sourceSamplingRate;
|
||||||
|
|
|
@ -192,6 +192,7 @@ namespace Iop
|
||||||
void GetSamples(int16*, unsigned int, unsigned int);
|
void GetSamples(int16*, unsigned int, unsigned int);
|
||||||
uint8* GetRepeat() const;
|
uint8* GetRepeat() const;
|
||||||
uint8* GetCurrent() const;
|
uint8* GetCurrent() const;
|
||||||
|
bool IsDone() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum
|
enum
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
#include "Iop_Thbase.h"
|
#include "Iop_Thbase.h"
|
||||||
#include "IopBios.h"
|
#include "IopBios.h"
|
||||||
|
#include "../Log.h"
|
||||||
|
|
||||||
using namespace Iop;
|
using namespace Iop;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
|
#define LOG_NAME ("iop_thbase")
|
||||||
|
|
||||||
CThbase::CThbase(CIopBios& bios, uint8* ram) :
|
CThbase::CThbase(CIopBios& bios, uint8* ram) :
|
||||||
m_ram(ram),
|
m_ram(ram),
|
||||||
m_bios(bios)
|
m_bios(bios)
|
||||||
|
@ -87,7 +90,7 @@ uint32 CThbase::DelayThread(uint32 delay)
|
||||||
|
|
||||||
uint32 CThbase::GetThreadId()
|
uint32 CThbase::GetThreadId()
|
||||||
{
|
{
|
||||||
return m_bios.GetThreadId();
|
return m_bios.GetCurrentThreadId();
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 CThbase::SleepThread()
|
uint32 CThbase::SleepThread()
|
||||||
|
@ -108,6 +111,10 @@ uint32 CThbase::iWakeupThread(uint32 threadId)
|
||||||
|
|
||||||
uint32 CThbase::GetSystemTime(uint32 resultAddr)
|
uint32 CThbase::GetSystemTime(uint32 resultAddr)
|
||||||
{
|
{
|
||||||
|
#ifdef _DEBUG
|
||||||
|
CLog::GetInstance().Print(LOG_NAME, "%d : GetSystemTime(result);\r\n",
|
||||||
|
m_bios.GetCurrentThreadId());
|
||||||
|
#endif
|
||||||
uint64* result = NULL;
|
uint64* result = NULL;
|
||||||
if(resultAddr != 0)
|
if(resultAddr != 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#define _APPDEF_H_
|
#define _APPDEF_H_
|
||||||
|
|
||||||
#define APP_NAME _T("PsfPlayer")
|
#define APP_NAME _T("PsfPlayer")
|
||||||
#define APP_VERSION (16)
|
#define APP_VERSION (17)
|
||||||
#define APP_VERSIONSTR _T("0.16")
|
#define APP_VERSIONSTR _T("0.17")
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
Name="VCCLCompilerTool"
|
Name="VCCLCompilerTool"
|
||||||
Optimization="0"
|
Optimization="0"
|
||||||
AdditionalIncludeDirectories=""C:\Program Files\OpenAL 1.1 SDK\include";C:\Projects\Rawr\Source;C:\Projects\zlib;C:\Components\boost_1_35_0\boost\tr1\tr1;C:\Components\boost_1_35_0;C:\Projects\Framework\include;C:\Projects\Rawr\tools\PsfPlayer2\Source"
|
AdditionalIncludeDirectories=""C:\Program Files\OpenAL 1.1 SDK\include";C:\Projects\Rawr\Source;C:\Projects\zlib;C:\Components\boost_1_35_0\boost\tr1\tr1;C:\Components\boost_1_35_0;C:\Projects\Framework\include;C:\Projects\Rawr\tools\PsfPlayer2\Source"
|
||||||
PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_MSVC;_PSX;_NULL_SIFMAN;DEBUGGER_INCLUDED"
|
PreprocessorDefinitions="WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;_MSVC;_PSX;_NULL_SIFMAN"
|
||||||
MinimalRebuild="true"
|
MinimalRebuild="true"
|
||||||
BasicRuntimeChecks="3"
|
BasicRuntimeChecks="3"
|
||||||
RuntimeLibrary="3"
|
RuntimeLibrary="3"
|
||||||
|
@ -700,6 +700,10 @@
|
||||||
RelativePath="..\..\Source\iop\Iop_RootCounters.h"
|
RelativePath="..\..\Source\iop\Iop_RootCounters.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\Source\iop\Iop_SifMan.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\Source\iop\Iop_Sifman.h"
|
RelativePath="..\..\Source\iop\Iop_Sifman.h"
|
||||||
>
|
>
|
||||||
|
|
|
@ -1,11 +1,9 @@
|
||||||
TODO:
|
TODO:
|
||||||
|
- Final Fantasy 7 - Still More Fighting - Cymbals sound not fading?
|
||||||
- Reverb for SPU2
|
- Reverb for SPU2
|
||||||
- Reverb enable option
|
- Reverb enable option
|
||||||
- Support for both SPU cores.
|
|
||||||
- Fix nasty bug with PSX sound files and home computer.
|
- Fix nasty bug with PSX sound files and home computer.
|
||||||
- Atelier Iris
|
|
||||||
- Final Fantasy X
|
- Final Fantasy X
|
||||||
- Seperate Ioman and Fileio modules.
|
|
||||||
- Exception for invalid PSFs
|
- Exception for invalid PSFs
|
||||||
- 32-bits MA_MIPSIV support
|
- 32-bits MA_MIPSIV support
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue