mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 23:41:26 +12:00
RawSPU initialization fix
This commit is contained in:
parent
8e19af530b
commit
b487dcee27
4 changed files with 24 additions and 12 deletions
|
@ -11,7 +11,6 @@
|
||||||
#include "Emu/ARMv7/ARMv7Thread.h"
|
#include "Emu/ARMv7/ARMv7Thread.h"
|
||||||
|
|
||||||
CPUThreadManager::CPUThreadManager()
|
CPUThreadManager::CPUThreadManager()
|
||||||
: m_raw_spu_num(0)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +21,6 @@ CPUThreadManager::~CPUThreadManager()
|
||||||
|
|
||||||
void CPUThreadManager::Close()
|
void CPUThreadManager::Close()
|
||||||
{
|
{
|
||||||
m_raw_spu_num = 0;
|
|
||||||
while(m_threads.size()) RemoveThread(m_threads[0]->GetId());
|
while(m_threads.size()) RemoveThread(m_threads[0]->GetId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,10 +32,26 @@ CPUThread& CPUThreadManager::AddThread(CPUThreadType type)
|
||||||
|
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
case CPU_THREAD_PPU: new_thread = new PPUThread(); break;
|
case CPU_THREAD_PPU:
|
||||||
case CPU_THREAD_SPU: new_thread = new SPUThread(); break;
|
{
|
||||||
case CPU_THREAD_RAW_SPU: new_thread = new RawSPUThread(m_raw_spu_num++); break;
|
new_thread = new PPUThread();
|
||||||
case CPU_THREAD_ARMv7: new_thread = new ARMv7Thread(); break;
|
break;
|
||||||
|
}
|
||||||
|
case CPU_THREAD_SPU:
|
||||||
|
{
|
||||||
|
new_thread = new SPUThread();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CPU_THREAD_RAW_SPU:
|
||||||
|
{
|
||||||
|
new_thread = new RawSPUThread();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CPU_THREAD_ARMv7:
|
||||||
|
{
|
||||||
|
new_thread = new ARMv7Thread();
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: assert(0);
|
default: assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ class CPUThreadManager
|
||||||
{
|
{
|
||||||
std::vector<CPUThread*> m_threads;
|
std::vector<CPUThread*> m_threads;
|
||||||
std::mutex m_mtx_thread;
|
std::mutex m_mtx_thread;
|
||||||
u32 m_raw_spu_num;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CPUThreadManager();
|
CPUThreadManager();
|
||||||
|
|
|
@ -7,12 +7,11 @@
|
||||||
|
|
||||||
#include "Emu/Cell/RawSPUThread.h"
|
#include "Emu/Cell/RawSPUThread.h"
|
||||||
|
|
||||||
RawSPUThread::RawSPUThread(u32 index, CPUThreadType type)
|
RawSPUThread::RawSPUThread(CPUThreadType type)
|
||||||
: SPUThread(type)
|
: SPUThread(type)
|
||||||
, MemoryBlock()
|
, MemoryBlock()
|
||||||
, m_index(index)
|
|
||||||
{
|
{
|
||||||
Memory.InitRawSPU(SetRange(RAW_SPU_BASE_ADDR + RAW_SPU_OFFSET * index, RAW_SPU_PROB_OFFSET), m_index);
|
m_index = Memory.InitRawSPU(this);
|
||||||
Reset();
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -344,7 +343,7 @@ void RawSPUThread::Task()
|
||||||
{
|
{
|
||||||
PC = SPU.NPC.GetValue();
|
PC = SPU.NPC.GetValue();
|
||||||
|
|
||||||
CPUThread::Task();
|
SPUThread::Task();
|
||||||
|
|
||||||
SPU.NPC.SetValue(PC);
|
SPU.NPC.SetValue(PC);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ class RawSPUThread
|
||||||
u32 m_index;
|
u32 m_index;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RawSPUThread(u32 index, CPUThreadType type = CPU_THREAD_RAW_SPU);
|
RawSPUThread(CPUThreadType type = CPU_THREAD_RAW_SPU);
|
||||||
virtual ~RawSPUThread();
|
virtual ~RawSPUThread();
|
||||||
|
|
||||||
virtual bool Read32(const u64 addr, u32* value) override;
|
virtual bool Read32(const u64 addr, u32* value) override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue