* Added toggles for game log output: EE StdOut, EE Deci2, and IOP StdOut. Toggles are provided via a menu in the Console Log.

Dev notes:
 * Renamed MtgsthreadObject to SysMtgsThread (matches naming pattern of other thread classes).
 * Added accessors for GetMtgs() and GetCoreThread() [rationale for them documented in source comments]
 * Removed wxHelpers namespace since we're using px name prefix instead for most stuff.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2238 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-11-23 06:54:24 +00:00
parent 03909ce78c
commit 4828beb3c3
50 changed files with 292 additions and 217 deletions

View File

@ -541,10 +541,6 @@
RelativePath="..\..\include\Utilities\wxGuiTools.h" RelativePath="..\..\include\Utilities\wxGuiTools.h"
> >
</File> </File>
<File
RelativePath="..\..\include\Utilities\wxHelpers.h"
>
</File>
</Filter> </Filter>
</Files> </Files>
<Globals> <Globals>

View File

@ -15,7 +15,7 @@
#pragma once #pragma once
#include "wxHelpers.h" #include "wxGuiTools.h"
class CheckedStaticBox : public wxPanelWithHelpers class CheckedStaticBox : public wxPanelWithHelpers
{ {

View File

@ -1,26 +0,0 @@
/* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2009 PCSX2 Dev Team
*
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with PCSX2.
* If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#include <wx/wx.h>
#include "wxGuiTools.h"
namespace wxHelpers
{
extern pxStaticText& InsertStaticTextAt(wxWindow* parent, wxSizer& sizer, int position, const wxString& label, int alignFlags=wxALIGN_CENTRE );
}

View File

@ -15,20 +15,13 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "HashMap.h" #include "HashMap.h"
#include "wxHelpers.h" #include "wxGuiTools.h"
#include "pxStaticText.h" #include "pxStaticText.h"
#include <wx/cshelp.h> #include <wx/cshelp.h>
#include <wx/tooltip.h> #include <wx/tooltip.h>
pxStaticText& wxHelpers::InsertStaticTextAt(wxWindow* parent, wxSizer& sizer, int position, const wxString& label, int alignFlags )
{
pxStaticText& temp( *new pxStaticText(parent, label, alignFlags ) );
temp.InsertAt( sizer, position );
return temp;
}
// ===================================================================================================== // =====================================================================================================
// wxDialogWithHelpers Class Implementations // wxDialogWithHelpers Class Implementations
// ===================================================================================================== // =====================================================================================================

View File

@ -314,7 +314,7 @@ static void reloadElfInfo(const char* str)
ElfCRC = loadElfCRC( str ); ElfCRC = loadElfCRC( str );
ElfApplyPatches(); ElfApplyPatches();
mtgsThread.SendGameCRC( ElfCRC ); GetMTGS().SendGameCRC( ElfCRC );
} }
} }

View File

@ -248,7 +248,16 @@ struct TraceLogFilters
struct ConsoleLogFilters struct ConsoleLogFilters
{ {
bool ELF; BITFIELD32()
bool
ELF :1,
Deci2 :1,
StdoutEE :1,
StdoutIOP :1;
BITFIELD_END;
ConsoleLogFilters();
void LoadSave( IniInterface& ini );
}; };
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------

View File

@ -597,7 +597,7 @@ void loadElfFile(const wxString& filename)
ElfCRC = elfobj.GetCRC(); ElfCRC = elfobj.GetCRC();
Console.WriteLn( L"loadElfFile: %s; CRC = %8.8X", filename.c_str(), ElfCRC ); Console.WriteLn( L"loadElfFile: %s; CRC = %8.8X", filename.c_str(), ElfCRC );
ElfApplyPatches(); ElfApplyPatches();
mtgsThread.SendGameCRC( ElfCRC ); GetMTGS().SendGameCRC( ElfCRC );
return; return;
} }

View File

@ -149,11 +149,11 @@ void __fastcall WriteFIFO_page_6(u32 mem, const mem128_t *value)
psHu64(GIF_FIFO + 8) = value[1]; psHu64(GIF_FIFO + 8) = value[1];
Registers::Freeze(); Registers::Freeze();
mtgsThread.PrepDataPacket(GIF_PATH_3, nloop0_packet, 1); GetMTGS().PrepDataPacket(GIF_PATH_3, nloop0_packet, 1);
u64* data = (u64*)mtgsThread.GetDataPacketPtr(); u64* data = (u64*)GetMTGS().GetDataPacketPtr();
data[0] = value[0]; data[0] = value[0];
data[1] = value[1]; data[1] = value[1];
mtgsThread.SendDataPacket(); GetMTGS().SendDataPacket();
Registers::Thaw(); Registers::Thaw();
} }

View File

@ -65,7 +65,7 @@ void _gs_ChangeTimings( u32 framerate, u32 iTicks )
void gsOnModeChanged( u32 framerate, u32 newTickrate ) void gsOnModeChanged( u32 framerate, u32 newTickrate )
{ {
mtgsThread.SendSimplePacket( GS_RINGTYPE_MODECHANGE, framerate, newTickrate, 0 ); GetMTGS().SendSimplePacket( GS_RINGTYPE_MODECHANGE, framerate, newTickrate, 0 );
} }
static bool gsIsInterlaced = false; static bool gsIsInterlaced = false;
@ -90,7 +90,7 @@ void gsInit()
void gsReset() void gsReset()
{ {
mtgsThread.ResetGS(); GetMTGS().ResetGS();
gsOnModeChanged( gsOnModeChanged(
(gsRegionMode == Region_NTSC) ? FRAMERATE_NTSC : FRAMERATE_PAL, (gsRegionMode == Region_NTSC) ? FRAMERATE_NTSC : FRAMERATE_PAL,
@ -128,7 +128,7 @@ void gsCSRwrite(u32 value)
} }
else else
{ {
mtgsThread.SendSimplePacket( GS_RINGTYPE_RESET, 0, 0, 0 ); GetMTGS().SendSimplePacket( GS_RINGTYPE_RESET, 0, 0, 0 );
} }
CSRw |= 0x1f; CSRw |= 0x1f;
@ -143,7 +143,7 @@ void gsCSRwrite(u32 value)
else else
{ {
CSRw |= value & 0x1f; CSRw |= value & 0x1f;
mtgsThread.SendSimplePacket( GS_RINGTYPE_WRITECSR, CSRw, 0, 0 ); GetMTGS().SendSimplePacket( GS_RINGTYPE_WRITECSR, CSRw, 0, 0 );
GSCSRr = ((GSCSRr&~value)&0x1f)|(GSCSRr&~0x1f); GSCSRr = ((GSCSRr&~value)&0x1f)|(GSCSRr&~0x1f);
} }
@ -174,7 +174,7 @@ __forceinline void gsWrite8(u32 mem, u8 value)
gsCSRwrite((CSRw & ~0xff000000) | (value << 24)); break; gsCSRwrite((CSRw & ~0xff000000) | (value << 24)); break;
default: default:
*PS2GS_BASE(mem) = value; *PS2GS_BASE(mem) = value;
mtgsThread.SendSimplePacket(GS_RINGTYPE_MEMWRITE8, mem&0x13ff, value, 0); GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE8, mem&0x13ff, value, 0);
} }
GIF_LOG("GS write 8 at %8.8lx with data %8.8lx", mem, value); GIF_LOG("GS write 8 at %8.8lx with data %8.8lx", mem, value);
} }
@ -218,7 +218,7 @@ __forceinline void gsWrite16(u32 mem, u16 value)
} }
*(u16*)PS2GS_BASE(mem) = value; *(u16*)PS2GS_BASE(mem) = value;
mtgsThread.SendSimplePacket(GS_RINGTYPE_MEMWRITE16, mem&0x13ff, value, 0); GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE16, mem&0x13ff, value, 0);
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -243,7 +243,7 @@ __forceinline void gsWrite32(u32 mem, u32 value)
} }
*(u32*)PS2GS_BASE(mem) = value; *(u32*)PS2GS_BASE(mem) = value;
mtgsThread.SendSimplePacket(GS_RINGTYPE_MEMWRITE32, mem&0x13ff, value, 0); GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE32, mem&0x13ff, value, 0);
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -279,7 +279,7 @@ void __fastcall gsWrite64_generic( u32 mem, const mem64_t* value )
GIF_LOG("GS Write64 at %8.8lx with data %8.8x_%8.8x", mem, srcval32[1], srcval32[0]); GIF_LOG("GS Write64 at %8.8lx with data %8.8x_%8.8x", mem, srcval32[1], srcval32[0]);
*(u64*)PS2GS_BASE(mem) = *value; *(u64*)PS2GS_BASE(mem) = *value;
mtgsThread.SendSimplePacket(GS_RINGTYPE_MEMWRITE64, mem&0x13ff, srcval32[0], srcval32[1]); GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE64, mem&0x13ff, srcval32[0], srcval32[1]);
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
@ -320,8 +320,8 @@ void __fastcall gsWrite128_generic( u32 mem, const mem128_t* value )
writeTo[0] = value[0]; writeTo[0] = value[0];
writeTo[1] = value[1]; writeTo[1] = value[1];
mtgsThread.SendSimplePacket(GS_RINGTYPE_MEMWRITE64, masked_mem, srcval32[0], srcval32[1]); GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE64, masked_mem, srcval32[0], srcval32[1]);
mtgsThread.SendSimplePacket(GS_RINGTYPE_MEMWRITE64, masked_mem+8, srcval32[2], srcval32[3]); GetMTGS().SendSimplePacket(GS_RINGTYPE_MEMWRITE64, masked_mem+8, srcval32[2], srcval32[3]);
} }
__forceinline u8 gsRead8(u32 mem) __forceinline u8 gsRead8(u32 mem)
@ -363,7 +363,7 @@ void gsSyncLimiterLostTime( s32 deltaTime )
//Console.WriteLn("LostTime on the EE!"); //Console.WriteLn("LostTime on the EE!");
mtgsThread.SendSimplePacket( GetMTGS().SendSimplePacket(
GS_RINGTYPE_STARTTIME, GS_RINGTYPE_STARTTIME,
deltaTime, deltaTime,
0, 0,
@ -507,7 +507,7 @@ __forceinline void gsFrameSkip( bool forceskip )
void gsPostVsyncEnd( bool updategs ) void gsPostVsyncEnd( bool updategs )
{ {
*(u32*)(PS2MEM_GS+0x1000) ^= 0x2000; // swap the vsync field *(u32*)(PS2MEM_GS+0x1000) ^= 0x2000; // swap the vsync field
mtgsThread.PostVsyncEnd( updategs ); GetMTGS().PostVsyncEnd( updategs );
} }
void _gs_ResetFrameskip() void _gs_ResetFrameskip()
@ -518,14 +518,14 @@ void _gs_ResetFrameskip()
// Disables the GS Frameskip at runtime without any racy mess... // Disables the GS Frameskip at runtime without any racy mess...
void gsResetFrameSkip() void gsResetFrameSkip()
{ {
mtgsThread.SendSimplePacket(GS_RINGTYPE_FRAMESKIP, 0, 0, 0); GetMTGS().SendSimplePacket(GS_RINGTYPE_FRAMESKIP, 0, 0, 0);
} }
void gsDynamicSkipEnable() void gsDynamicSkipEnable()
{ {
if( !m_StrictSkipping ) return; if( !m_StrictSkipping ) return;
mtgsThread.WaitGS(); GetMTGS().WaitGS();
m_iSlowStart = GetCPUTicks(); m_iSlowStart = GetCPUTicks();
frameLimitReset(); frameLimitReset();
} }

View File

@ -84,7 +84,10 @@ struct MTGS_FreezeData
s32 retval; // value returned from the call, valid only after an mtgsWaitGS() s32 retval; // value returned from the call, valid only after an mtgsWaitGS()
}; };
class mtgsThreadObject : public SysThreadBase // --------------------------------------------------------------------------------------
// SysMtgsThread
// --------------------------------------------------------------------------------------
class SysMtgsThread : public SysThreadBase
{ {
typedef SysThreadBase _parent; typedef SysThreadBase _parent;
@ -123,10 +126,10 @@ protected:
#endif #endif
public: public:
mtgsThreadObject(); SysMtgsThread();
virtual ~mtgsThreadObject() throw(); virtual ~SysMtgsThread() throw();
static mtgsThreadObject& Get(); static SysMtgsThread& Get();
// Waits for the GS to empty out the entire ring buffer contents. // Waits for the GS to empty out the entire ring buffer contents.
// Used primarily for plugin startup/shutdown. // Used primarily for plugin startup/shutdown.
@ -171,7 +174,12 @@ protected:
void ExecuteTaskInThread(); void ExecuteTaskInThread();
}; };
extern __aligned16 mtgsThreadObject mtgsThread; // GetMtgsThread() is a required external implementation. This function is *NOT*
// provided by the PCSX2 core library. It provides an interface for the linking User
// Interface apps or DLLs to reference their own instance of SysMtgsThread (also allowing
// them to extend the class and override virtual methods).
//
SysMtgsThread& GetMTGS();
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// Generalized GS Functions and Stuff // Generalized GS Functions and Stuff

View File

@ -99,12 +99,12 @@ static u32 WRITERING_DMA(u32 *pMem, u32 qwc)
gifRegs->stat.APATH = GIF_APATH3; gifRegs->stat.APATH = GIF_APATH3;
gifRegs->stat.OPH = 1; gifRegs->stat.OPH = 1;
int size = mtgsThread.PrepDataPacket(GIF_PATH_3, pMem, qwc); int size = GetMTGS().PrepDataPacket(GIF_PATH_3, pMem, qwc);
u8* pgsmem = mtgsThread.GetDataPacketPtr(); u8* pgsmem = GetMTGS().GetDataPacketPtr();
memcpy_aligned(pgsmem, pMem, size<<4); memcpy_aligned(pgsmem, pMem, size<<4);
mtgsThread.SendDataPacket(); GetMTGS().SendDataPacket();
return size; return size;
} }

View File

@ -59,8 +59,6 @@ static const uint RingBufferSize = 1<<RingBufferSizeFactor;
// start (the wrapping is what makes it a ringbuffer, yo!) // start (the wrapping is what makes it a ringbuffer, yo!)
static const uint RingBufferMask = RingBufferSize - 1; static const uint RingBufferMask = RingBufferSize - 1;
__aligned16 mtgsThreadObject mtgsThread;
struct MTGS_BufferedData struct MTGS_BufferedData
{ {
u128 m_Ring[RingBufferSize]; u128 m_Ring[RingBufferSize];
@ -84,15 +82,15 @@ extern bool renderswitch;
std::list<uint> ringposStack; std::list<uint> ringposStack;
#endif #endif
static __threadlocal mtgsThreadObject* tls_mtgsThread = NULL; static __threadlocal SysMtgsThread* tls_mtgsThread = NULL;
mtgsThreadObject& mtgsThreadObject::Get() SysMtgsThread& SysMtgsThread::Get()
{ {
pxAssertMsg( tls_mtgsThread != NULL, L"This function must be called from the context of a running mtgsThreadObject." ); pxAssertMsg( tls_mtgsThread != NULL, L"This function must be called from the context of a running SysMtgsThread." );
return *tls_mtgsThread; return *tls_mtgsThread;
} }
mtgsThreadObject::mtgsThreadObject() : SysMtgsThread::SysMtgsThread() :
SysThreadBase() SysThreadBase()
#ifdef RINGBUF_DEBUG_STACK #ifdef RINGBUF_DEBUG_STACK
, m_lock_Stack() , m_lock_Stack()
@ -103,7 +101,7 @@ mtgsThreadObject::mtgsThreadObject() :
// All other state vars are initialized by OnStart(). // All other state vars are initialized by OnStart().
} }
void mtgsThreadObject::OnStart() void SysMtgsThread::OnStart()
{ {
m_PluginOpened = false; m_PluginOpened = false;
@ -122,17 +120,17 @@ void mtgsThreadObject::OnStart()
_parent::OnStart(); _parent::OnStart();
} }
mtgsThreadObject::~mtgsThreadObject() throw() SysMtgsThread::~SysMtgsThread() throw()
{ {
_parent::Cancel(); _parent::Cancel();
} }
void mtgsThreadObject::OnResumeReady() void SysMtgsThread::OnResumeReady()
{ {
m_sem_OpenDone.Reset(); m_sem_OpenDone.Reset();
} }
void mtgsThreadObject::ResetGS() void SysMtgsThread::ResetGS()
{ {
// MTGS Reset process: // MTGS Reset process:
// * clear the ringbuffer. // * clear the ringbuffer.
@ -151,7 +149,7 @@ void mtgsThreadObject::ResetGS()
static int alterFrameFlush = 0; static int alterFrameFlush = 0;
void mtgsThreadObject::PostVsyncEnd( bool updategs ) void SysMtgsThread::PostVsyncEnd( bool updategs )
{ {
SendSimplePacket( GS_RINGTYPE_VSYNC, (*(u32*)(PS2MEM_GS+0x1000)&0x2000), updategs, 0 ); SendSimplePacket( GS_RINGTYPE_VSYNC, (*(u32*)(PS2MEM_GS+0x1000)&0x2000), updategs, 0 );
if( alterFrameFlush || (m_WritePos > (RingBufferSize/3)) ) if( alterFrameFlush || (m_WritePos > (RingBufferSize/3)) )
@ -174,7 +172,7 @@ static void dummyIrqCallback()
// (and zerogs does >_<) // (and zerogs does >_<)
} }
void mtgsThreadObject::OpenPlugin() void SysMtgsThread::OpenPlugin()
{ {
if( m_PluginOpened ) return; if( m_PluginOpened ) return;
@ -205,7 +203,7 @@ void mtgsThreadObject::OpenPlugin()
GSsetGameCRC( ElfCRC, 0 ); GSsetGameCRC( ElfCRC, 0 );
} }
void mtgsThreadObject::ExecuteTaskInThread() void SysMtgsThread::ExecuteTaskInThread()
{ {
tls_mtgsThread = this; tls_mtgsThread = this;
@ -404,7 +402,7 @@ void mtgsThreadObject::ExecuteTaskInThread()
} }
} }
void mtgsThreadObject::ClosePlugin() void SysMtgsThread::ClosePlugin()
{ {
if( !m_PluginOpened ) return; if( !m_PluginOpened ) return;
m_PluginOpened = false; m_PluginOpened = false;
@ -412,13 +410,13 @@ void mtgsThreadObject::ClosePlugin()
g_plugins->m_info[PluginId_GS].CommonBindings.Close(); g_plugins->m_info[PluginId_GS].CommonBindings.Close();
} }
void mtgsThreadObject::OnSuspendInThread() void SysMtgsThread::OnSuspendInThread()
{ {
ClosePlugin(); ClosePlugin();
_parent::OnSuspendInThread(); _parent::OnSuspendInThread();
} }
void mtgsThreadObject::OnResumeInThread( bool isSuspended ) void SysMtgsThread::OnResumeInThread( bool isSuspended )
{ {
if( isSuspended ) if( isSuspended )
OpenPlugin(); OpenPlugin();
@ -426,7 +424,7 @@ void mtgsThreadObject::OnResumeInThread( bool isSuspended )
_parent::OnResumeInThread( isSuspended ); _parent::OnResumeInThread( isSuspended );
} }
void mtgsThreadObject::OnCleanupInThread() void SysMtgsThread::OnCleanupInThread()
{ {
ClosePlugin(); ClosePlugin();
tls_mtgsThread = NULL; tls_mtgsThread = NULL;
@ -435,7 +433,7 @@ void mtgsThreadObject::OnCleanupInThread()
// Waits for the GS to empty out the entire ring buffer contents. // Waits for the GS to empty out the entire ring buffer contents.
// Used primarily for plugin startup/shutdown. // Used primarily for plugin startup/shutdown.
void mtgsThreadObject::WaitGS() void SysMtgsThread::WaitGS()
{ {
pxAssertDev( !IsSelf(), "This method is only allowed from threads *not* named MTGS." ); pxAssertDev( !IsSelf(), "This method is only allowed from threads *not* named MTGS." );
@ -453,27 +451,27 @@ void mtgsThreadObject::WaitGS()
// Sets the gsEvent flag and releases a timeslice. // Sets the gsEvent flag and releases a timeslice.
// For use in loops that wait on the GS thread to do certain things. // For use in loops that wait on the GS thread to do certain things.
void mtgsThreadObject::SetEvent() void SysMtgsThread::SetEvent()
{ {
m_sem_event.Post(); m_sem_event.Post();
m_CopyCommandTally = 0; m_CopyCommandTally = 0;
m_CopyDataTally = 0; m_CopyDataTally = 0;
} }
void mtgsThreadObject::PrepEventWait() void SysMtgsThread::PrepEventWait()
{ {
//Console.Warning( "MTGS Stall! EE waits for nothing! ... except your GPU sometimes." ); //Console.Warning( "MTGS Stall! EE waits for nothing! ... except your GPU sometimes." );
SetEvent(); SetEvent();
Timeslice(); Timeslice();
} }
u8* mtgsThreadObject::GetDataPacketPtr() const u8* SysMtgsThread::GetDataPacketPtr() const
{ {
return (u8*)&RingBuffer[m_packet_ringpos]; return (u8*)&RingBuffer[m_packet_ringpos];
} }
// Closes the data packet send command, and initiates the gs thread (if needed). // Closes the data packet send command, and initiates the gs thread (if needed).
void mtgsThreadObject::SendDataPacket() void SysMtgsThread::SendDataPacket()
{ {
// make sure a previous copy block has been started somewhere. // make sure a previous copy block has been started somewhere.
pxAssert( m_packet_size != 0 ); pxAssert( m_packet_size != 0 );
@ -514,7 +512,7 @@ void mtgsThreadObject::SendDataPacket()
//m_PacketLocker.Release(); //m_PacketLocker.Release();
} }
int mtgsThreadObject::PrepDataPacket( GIF_PATH pathidx, const u32* srcdata, u32 size ) int SysMtgsThread::PrepDataPacket( GIF_PATH pathidx, const u32* srcdata, u32 size )
{ {
return PrepDataPacket( pathidx, (u8*)srcdata, size ); return PrepDataPacket( pathidx, (u8*)srcdata, size );
} }
@ -534,7 +532,7 @@ static u32 ringtx_inf_s[32];
// large for VU1 memory. // large for VU1 memory.
// Parameters: // Parameters:
// size - size of the packet data, in smd128's // size - size of the packet data, in smd128's
int mtgsThreadObject::PrepDataPacket( GIF_PATH pathidx, const u8* srcdata, u32 size ) int SysMtgsThread::PrepDataPacket( GIF_PATH pathidx, const u8* srcdata, u32 size )
{ {
//m_PacketLocker.Acquire(); //m_PacketLocker.Acquire();
@ -684,7 +682,7 @@ int mtgsThreadObject::PrepDataPacket( GIF_PATH pathidx, const u8* srcdata, u32 s
return m_packet_size; return m_packet_size;
} }
__forceinline uint mtgsThreadObject::_PrepForSimplePacket() __forceinline uint SysMtgsThread::_PrepForSimplePacket()
{ {
#ifdef RINGBUF_DEBUG_STACK #ifdef RINGBUF_DEBUG_STACK
m_lock_Stack.Lock(); m_lock_Stack.Lock();
@ -710,7 +708,7 @@ __forceinline uint mtgsThreadObject::_PrepForSimplePacket()
return future_writepos; return future_writepos;
} }
__forceinline void mtgsThreadObject::_FinishSimplePacket( uint future_writepos ) __forceinline void SysMtgsThread::_FinishSimplePacket( uint future_writepos )
{ {
pxAssert( future_writepos != volatize(m_RingPos) ); pxAssert( future_writepos != volatize(m_RingPos) );
m_WritePos = future_writepos; m_WritePos = future_writepos;
@ -723,7 +721,7 @@ __forceinline void mtgsThreadObject::_FinishSimplePacket( uint future_writepos )
Semaphore m_sem_OnRingReset; Semaphore m_sem_OnRingReset;
u32 m_SignalRingReset; u32 m_SignalRingReset;
void mtgsThreadObject::RestartRingbuffer() void SysMtgsThread::RestartRingbuffer()
{ {
if( m_WritePos == 0 ) return; if( m_WritePos == 0 ) return;
const uint thefuture = 0; const uint thefuture = 0;
@ -777,7 +775,7 @@ void mtgsThreadObject::RestartRingbuffer()
WaitGS(); WaitGS();
} }
void mtgsThreadObject::SendSimplePacket( MTGS_RingCommand type, int data0, int data1, int data2 ) void SysMtgsThread::SendSimplePacket( MTGS_RingCommand type, int data0, int data1, int data2 )
{ {
//ScopedLock locker( m_PacketLocker ); //ScopedLock locker( m_PacketLocker );
@ -792,7 +790,7 @@ void mtgsThreadObject::SendSimplePacket( MTGS_RingCommand type, int data0, int d
_FinishSimplePacket( thefuture ); _FinishSimplePacket( thefuture );
} }
void mtgsThreadObject::SendPointerPacket( MTGS_RingCommand type, u32 data0, void* data1 ) void SysMtgsThread::SendPointerPacket( MTGS_RingCommand type, u32 data0, void* data1 )
{ {
//ScopedLock locker( m_PacketLocker ); //ScopedLock locker( m_PacketLocker );
@ -806,12 +804,12 @@ void mtgsThreadObject::SendPointerPacket( MTGS_RingCommand type, u32 data0, void
_FinishSimplePacket( thefuture ); _FinishSimplePacket( thefuture );
} }
void mtgsThreadObject::SendGameCRC( u32 crc ) void SysMtgsThread::SendGameCRC( u32 crc )
{ {
SendSimplePacket( GS_RINGTYPE_CRC, crc, 0, 0 ); SendSimplePacket( GS_RINGTYPE_CRC, crc, 0, 0 );
} }
void mtgsThreadObject::WaitForOpen() void SysMtgsThread::WaitForOpen()
{ {
if( m_PluginOpened ) return; if( m_PluginOpened ) return;
Resume(); Resume();
@ -837,10 +835,10 @@ void mtgsThreadObject::WaitForOpen()
} }
} }
mtgsThread.RethrowException(); RethrowException();
} }
void mtgsThreadObject::Freeze( int mode, MTGS_FreezeData& data ) void SysMtgsThread::Freeze( int mode, MTGS_FreezeData& data )
{ {
SendPointerPacket( GS_RINGTYPE_FREEZE, mode, &data ); SendPointerPacket( GS_RINGTYPE_FREEZE, mode, &data );
Resume(); Resume();

View File

@ -37,11 +37,30 @@ void TraceLogFilters::LoadSave( IniInterface& ini )
} }
// all speedhacks are disabled by default // all speedhacks are disabled by default
Pcsx2Config::SpeedhackOptions::SpeedhackOptions() : Pcsx2Config::SpeedhackOptions::SpeedhackOptions()
bitset( 0 )
, EECycleRate( 0 )
, VUCycleSteal( 0 )
{ {
bitset = 0;
EECycleRate = 0;
VUCycleSteal = 0;
}
ConsoleLogFilters::ConsoleLogFilters()
{
ELF = false;
StdoutEE = true;
StdoutIOP = true;
Deci2 = true;
}
void ConsoleLogFilters::LoadSave( IniInterface& ini )
{
ConsoleLogFilters defaults;
IniScopedGroup path( ini, L"ConsoleLog" );
IniBitBool( ELF );
IniBitBool( StdoutEE );
IniBitBool( StdoutIOP );
IniBitBool( Deci2 );
} }
void Pcsx2Config::SpeedhackOptions::LoadSave( IniInterface& ini ) void Pcsx2Config::SpeedhackOptions::LoadSave( IniInterface& ini )

View File

@ -859,7 +859,7 @@ extern void spu2Irq();
static bool OpenPlugin_GS() static bool OpenPlugin_GS()
{ {
mtgsThread.Resume(); GetMTGS().Resume();
return true; return true;
} }
@ -942,10 +942,10 @@ void PluginManager::Open()
// If GS doesn't support GSopen2, need to wait until call to GSopen // If GS doesn't support GSopen2, need to wait until call to GSopen
// returns to populate pDsp. If it does, can initialize other plugins // returns to populate pDsp. If it does, can initialize other plugins
// at same time as GS, as long as GSopen2 does not subclass its window. // at same time as GS, as long as GSopen2 does not subclass its window.
if (pi->id == PluginId_GS && !GSopen2) mtgsThread.WaitForOpen(); if (pi->id == PluginId_GS && !GSopen2) GetMTGS().WaitForOpen();
} while( ++pi, pi->shortname != NULL ); } while( ++pi, pi->shortname != NULL );
if (GSopen2) mtgsThread.WaitForOpen(); if (GSopen2) GetMTGS().WaitForOpen();
Console.WriteLn( Color_StrongBlue, "Plugins opened successfully." ); Console.WriteLn( Color_StrongBlue, "Plugins opened successfully." );
} }
@ -959,7 +959,7 @@ void PluginManager::Close( PluginsEnum_t pid )
{ {
// force-close PAD before GS, because the PAD depends on the GS window. // force-close PAD before GS, because the PAD depends on the GS window.
Close( PluginId_PAD ); Close( PluginId_PAD );
mtgsThread.Suspend(); GetMTGS().Suspend();
} }
else if( pid == PluginId_CDVD ) else if( pid == PluginId_CDVD )
DoCDVDclose(); DoCDVDclose();
@ -1034,7 +1034,7 @@ void PluginManager::Init()
// //
void PluginManager::Shutdown() void PluginManager::Shutdown()
{ {
mtgsThread.Cancel(); // cancel it for speedier shutdown! GetMTGS().Cancel(); // cancel it for speedier shutdown!
Close(); Close();
DbgCon.WriteLn( Color_StrongGreen, "Shutting down plugins..." ); DbgCon.WriteLn( Color_StrongGreen, "Shutting down plugins..." );
@ -1066,12 +1066,12 @@ void PluginManager::Shutdown()
// Returns false if the plugin returned an error. // Returns false if the plugin returned an error.
bool PluginManager::DoFreeze( PluginsEnum_t pid, int mode, freezeData* data ) bool PluginManager::DoFreeze( PluginsEnum_t pid, int mode, freezeData* data )
{ {
if( (pid == PluginId_GS) && !mtgsThread.IsSelf() ) if( (pid == PluginId_GS) && !GetMTGS().IsSelf() )
{ {
// GS needs some thread safety love... // GS needs some thread safety love...
MTGS_FreezeData woot = { data, 0 }; MTGS_FreezeData woot = { data, 0 };
mtgsThread.Freeze( mode, woot ); GetMTGS().Freeze( mode, woot );
return woot.retval != -1; return woot.retval != -1;
} }
else else

View File

@ -189,7 +189,7 @@ struct LegacyPluginAPI_Common
}; };
class SaveStateBase; class SaveStateBase;
class mtgsThreadObject; class SysMtgsThread;
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// PluginBindings // PluginBindings
@ -323,7 +323,7 @@ protected:
void BindRequired( PluginsEnum_t pid ); void BindRequired( PluginsEnum_t pid );
void BindOptional( PluginsEnum_t pid ); void BindOptional( PluginsEnum_t pid );
friend class mtgsThreadObject; friend class SysMtgsThread;
}; };
extern const PluginInfo tbl_PluginInfo[]; extern const PluginInfo tbl_PluginInfo[];

View File

@ -105,6 +105,8 @@ void __fastcall psxException(u32 code, u32 bd)
if (!CHECK_IOPREC) if (!CHECK_IOPREC)
{ {
// HLE Bios Handlers, enabled for interpreters only.
u32 call = psxRegs.GPR.n.t1 & 0xff; u32 call = psxRegs.GPR.n.t1 & 0xff;
switch (psxRegs.pc & 0x1fffff) { switch (psxRegs.pc & 0x1fffff) {
case 0xa0: case 0xa0:

View File

@ -49,8 +49,8 @@ R5900Exception::BaseExcept::~BaseExcept() throw (){}
void cpuReset() void cpuReset()
{ {
if( mtgsThread.IsOpen() ) if( GetMTGS().IsOpen() )
mtgsThread.WaitGS(); // GS better be done processing before we reset the EE, just in case. GetMTGS().WaitGS(); // GS better be done processing before we reset the EE, just in case.
SysClearExecutionCache(); SysClearExecutionCache();

View File

@ -742,6 +742,8 @@ char deci2buffer[256];
/* /*
* int Deci2Call(int, u_int *); * int Deci2Call(int, u_int *);
*
* HLE implementation of the Deci2 interface.
*/ */
int __Deci2Call(int call, u32 *addr) int __Deci2Call(int call, u32 *addr)
@ -788,10 +790,12 @@ int __Deci2Call(int call, u32 *addr)
if( pdeciaddr == NULL ) if( pdeciaddr == NULL )
pdeciaddr = (u8*)PSM(deci2addr[4]+0xc); pdeciaddr = (u8*)PSM(deci2addr[4]+0xc);
else else
pdeciaddr += (deci2addr[4]+0xc)%16; pdeciaddr += (deci2addr[4]+0xc) % 16;
memcpy(deci2buffer, pdeciaddr, deci2addr[1]-0xc); memcpy(deci2buffer, pdeciaddr, deci2addr[1]-0xc);
deci2buffer[deci2addr[1]-0xc>=255?255:deci2addr[1]-0xc]='\0'; deci2buffer[(deci2addr[1]-0xc>=255) ? 255 : (deci2addr[1]-0xc)] = '\0';
Console.Write( ConColor_EE, L"%s", ShiftJIS_ConvertString(deci2buffer).c_str() );
if( EmuConfig.Log.Deci2 )
Console.Write( ConColor_EE, L"%s", ShiftJIS_ConvertString(deci2buffer).c_str() );
} }
deci2addr[3] = 0; deci2addr[3] = 0;
return 1; return 1;
@ -809,7 +813,7 @@ int __Deci2Call(int call, u32 *addr)
return 1; return 1;
case 0x10://kputs case 0x10://kputs
if( addr != NULL ) if( addr != NULL && EmuConfig.Log.Deci2 )
Console.Write( ConColor_EE, L"%s", ShiftJIS_ConvertString((char*)PSM(*addr)).c_str() ); Console.Write( ConColor_EE, L"%s", ShiftJIS_ConvertString((char*)PSM(*addr)).c_str() );
return 1; return 1;
} }
@ -823,7 +827,7 @@ void SYSCALL()
u8 call; u8 call;
if (cpuRegs.GPR.n.v1.SL[0] < 0) if (cpuRegs.GPR.n.v1.SL[0] < 0)
call = (u8)(-cpuRegs.GPR.n.v1.SL[0]); call = (u8)(-cpuRegs.GPR.n.v1.SL[0]);
else else
call = cpuRegs.GPR.n.v1.UC[0]; call = cpuRegs.GPR.n.v1.UC[0];

View File

@ -101,22 +101,42 @@ void SysCoreThread::SetElfOverride( const wxString& elf )
m_elf_override = elf; m_elf_override = elf;
} }
ScopedCoreThreadSuspend::ScopedCoreThreadSuspend()
{
m_ResumeWhenDone = GetCoreThread().Suspend();
}
// Resumes CoreThread execution, but *only* if it was in a running state when this object
// was instanized. Subsequent calls to Resume() will be ignored.
void ScopedCoreThreadSuspend::Resume()
{
if( m_ResumeWhenDone )
GetCoreThread().Resume();
m_ResumeWhenDone = false;
}
ScopedCoreThreadSuspend::~ScopedCoreThreadSuspend() throw()
{
if( m_ResumeWhenDone )
{
Console.WriteLn( Color_Gray, "Scoped CoreThread suspend was not allowed to resume." );
}
}
// Applies a full suite of new settings, which will automatically facilitate the necessary // Applies a full suite of new settings, which will automatically facilitate the necessary
// resets of the core and components (including plugins, if needed). The scope of resetting // resets of the core and components (including plugins, if needed). The scope of resetting
// is determined by comparing the current settings against the new settings. // is determined by comparing the current settings against the new settings, so that only
// real differences are applied.
void SysCoreThread::ApplySettings( const Pcsx2Config& src ) void SysCoreThread::ApplySettings( const Pcsx2Config& src )
{ {
if( src == EmuConfig ) return; if( src == EmuConfig ) return;
const bool resumeWhenDone = Suspend(); ScopedCoreThreadSuspend suspend_core;
m_resetRecompilers = ( src.Cpu != EmuConfig.Cpu ) || ( src.Gamefixes != EmuConfig.Gamefixes ) || ( src.Speedhacks != EmuConfig.Speedhacks ); m_resetRecompilers = ( src.Cpu != EmuConfig.Cpu ) || ( src.Gamefixes != EmuConfig.Gamefixes ) || ( src.Speedhacks != EmuConfig.Speedhacks );
m_resetProfilers = (src.Profiler != EmuConfig.Profiler ); m_resetProfilers = (src.Profiler != EmuConfig.Profiler );
const_cast<Pcsx2Config&>(EmuConfig) = src; const_cast<Pcsx2Config&>(EmuConfig) = src;
if( resumeWhenDone ) Resume();
} }
void SysCoreThread::ChangeCdvdSource( CDVD_SourceType type ) void SysCoreThread::ChangeCdvdSource( CDVD_SourceType type )
@ -143,7 +163,7 @@ SysCoreThread& SysCoreThread::Get()
bool SysCoreThread::HasPendingStateChangeRequest() const bool SysCoreThread::HasPendingStateChangeRequest() const
{ {
return m_CoreCancelDamnit || mtgsThread.HasPendingException() || _parent::HasPendingStateChangeRequest(); return m_CoreCancelDamnit || GetMTGS().HasPendingException() || _parent::HasPendingStateChangeRequest();
} }
struct ScopedBool_ClearOnError struct ScopedBool_ClearOnError
@ -220,7 +240,7 @@ void SysCoreThread::CpuInitializeMess()
void SysCoreThread::StateCheckInThread() void SysCoreThread::StateCheckInThread()
{ {
mtgsThread.RethrowException(); GetMTGS().RethrowException();
_parent::StateCheckInThread(); _parent::StateCheckInThread();
if( !m_hasValidState ) if( !m_hasValidState )
throw Exception::RuntimeError( "Invalid emulation state detected; Virtual machine threads have been cancelled." ); throw Exception::RuntimeError( "Invalid emulation state detected; Virtual machine threads have been cancelled." );

View File

@ -43,7 +43,7 @@ class ISysThread : public virtual IThread
{ {
public: public:
ISysThread() {} ISysThread() {}
virtual ~ISysThread() throw() {}; virtual ~ISysThread() throw() {}
virtual bool Suspend( bool isBlocking = true ) { return false; } virtual bool Suspend( bool isBlocking = true ) { return false; }
virtual bool Pause() { return false; } virtual bool Pause() { return false; }
@ -58,7 +58,7 @@ class SysThreadBase : public PersistentThread, public virtual ISysThread
{ {
typedef PersistentThread _parent; typedef PersistentThread _parent;
protected: public:
// Important: The order of these enumerations matters. All "not-open" statuses must // Important: The order of these enumerations matters. All "not-open" statuses must
// be listed before ExecMode_Closed, since there are "optimized" tests that rely on the // be listed before ExecMode_Closed, since there are "optimized" tests that rely on the
// assumption that "ExecMode <= ExecMode_Closed" equates to a closed thread status. // assumption that "ExecMode <= ExecMode_Closed" equates to a closed thread status.
@ -88,6 +88,7 @@ protected:
ExecMode_Paused, ExecMode_Paused,
}; };
protected:
volatile ExecutionMode m_ExecMode; volatile ExecutionMode m_ExecMode;
// This lock is used to avoid simultaneous requests to Suspend/Resume/Pause from // This lock is used to avoid simultaneous requests to Suspend/Resume/Pause from
@ -176,8 +177,6 @@ protected:
virtual void OnResumeInThread( bool isSuspended )=0; virtual void OnResumeInThread( bool isSuspended )=0;
}; };
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
// SysCoreThread class // SysCoreThread class
// -------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------
@ -235,4 +234,33 @@ protected:
void _StateCheckThrows(); void _StateCheckThrows();
}; };
// --------------------------------------------------------------------------------------
// ScopedCoreThreadSuspend
// --------------------------------------------------------------------------------------
// This class behaves a bit differently from other scoped classes due to the "standard"
// assumption that we actually do *not* want to resume CoreThread operations when an
// exception occurs. Because of this, the destructor of this class does *not* unroll the
// suspend operation. Instead you must manually instruct the class to resume using a call
// to the provisioned Resume() method.
//
// If the class leaves scope without having been resumed, a log is written to the console.
// This can be useful for troubleshooting, and also allows the log a second line of info
// indicating the status of CoreThread execution at the time of the exception.
//
struct ScopedCoreThreadSuspend
{
bool m_ResumeWhenDone;
ScopedCoreThreadSuspend();
void Resume();
virtual ~ScopedCoreThreadSuspend() throw();
};
// GetCoreThread() is a required external implementation. This function is *NOT*
// provided by the PCSX2 core library. It provides an interface for the linking User
// Interface apps or DLLs to reference their own instance of SysCoreThread (also allowing
// them to extend the class and override virtual methods).
//
extern SysCoreThread& GetCoreThread();
extern int sys_resume_lock; extern int sys_resume_lock;

View File

@ -2057,8 +2057,8 @@ void _vuXGKICK(VURegs * VU)
u8* data = ((u8*)VU->Mem + ((VU->VI[_Is_].US[0]*16) & 0x3fff)); u8* data = ((u8*)VU->Mem + ((VU->VI[_Is_].US[0]*16) & 0x3fff));
u32 size; u32 size;
size = mtgsThread.PrepDataPacket( GIF_PATH_1, data, (0x4000-((VU->VI[_Is_].US[0]*16) & 0x3fff)) >> 4); size = GetMTGS().PrepDataPacket( GIF_PATH_1, data, (0x4000-((VU->VI[_Is_].US[0]*16) & 0x3fff)) >> 4);
u8* pmem = mtgsThread.GetDataPacketPtr(); u8* pmem = GetMTGS().GetDataPacketPtr();
if((size << 4) > (u32)(0x4000-((VU->VI[_Is_].US[0]*16) & 0x3fff))) if((size << 4) > (u32)(0x4000-((VU->VI[_Is_].US[0]*16) & 0x3fff)))
{ {
@ -2072,7 +2072,7 @@ void _vuXGKICK(VURegs * VU)
else { else {
memcpy_aligned(pmem, (u8*)VU->Mem+((VU->VI[_Is_].US[0]*16) & 0x3fff), size<<4); memcpy_aligned(pmem, (u8*)VU->Mem+((VU->VI[_Is_].US[0]*16) & 0x3fff), size<<4);
} }
mtgsThread.SendDataPacket(); GetMTGS().SendDataPacket();
} }
void _vuXTOP(VURegs * VU) { void _vuXTOP(VURegs * VU) {

View File

@ -266,12 +266,12 @@ static int __fastcall Vif1TransDirectHL(u32 *data)
Registers::Freeze(); Registers::Freeze();
// copy 16 bytes the fast way: // copy 16 bytes the fast way:
const u64* src = (u64*)splittransfer[0]; const u64* src = (u64*)splittransfer[0];
mtgsThread.PrepDataPacket(GIF_PATH_2, nloop0_packet, 1); GetMTGS().PrepDataPacket(GIF_PATH_2, nloop0_packet, 1);
u64* dst = (u64*)mtgsThread.GetDataPacketPtr(); u64* dst = (u64*)GetMTGS().GetDataPacketPtr();
dst[0] = src[0]; dst[0] = src[0];
dst[1] = src[1]; dst[1] = src[1];
mtgsThread.SendDataPacket(); GetMTGS().SendDataPacket();
Registers::Thaw(); Registers::Thaw();
if (vif1.tag.size == 0) vif1.cmd = 0; if (vif1.tag.size == 0) vif1.cmd = 0;
@ -308,9 +308,9 @@ static int __fastcall Vif1TransDirectHL(u32 *data)
Registers::Freeze(); Registers::Freeze();
// Round ret up, just in case it's not 128bit aligned. // Round ret up, just in case it's not 128bit aligned.
const uint count = mtgsThread.PrepDataPacket(GIF_PATH_2, data, (ret + 3) >> 2); const uint count = GetMTGS().PrepDataPacket(GIF_PATH_2, data, (ret + 3) >> 2);
memcpy_fast(mtgsThread.GetDataPacketPtr(), data, count << 4); memcpy_fast(GetMTGS().GetDataPacketPtr(), data, count << 4);
mtgsThread.SendDataPacket(); GetMTGS().SendDataPacket();
Registers::Thaw(); Registers::Thaw();
@ -730,7 +730,7 @@ void vif1TransferFromMemory()
{ {
if (size > 1) if (size > 1)
{ {
mtgsThread.WaitGS(); GetMTGS().WaitGS();
GSreadFIFO((u64*)&PS2MEM_HW[0x5000]); GSreadFIFO((u64*)&PS2MEM_HW[0x5000]);
} }
pMem[0] = psHu64(VIF1_FIFO); pMem[0] = psHu64(VIF1_FIFO);
@ -740,7 +740,7 @@ void vif1TransferFromMemory()
} }
else else
{ {
mtgsThread.WaitGS(); GetMTGS().WaitGS();
GSreadFIFO2(pMem, vif1ch->qwc); GSreadFIFO2(pMem, vif1ch->qwc);
// set incase read // set incase read

View File

@ -613,7 +613,7 @@ extern void UnloadPlugins();
extern void AppLoadSettings(); extern void AppLoadSettings();
extern void AppSaveSettings(); extern void AppSaveSettings();
extern void AppApplySettings( const AppConfig* oldconf=NULL, bool saveOnSuccess=false ); extern void AppApplySettings( const AppConfig* oldconf=NULL );
extern bool SysHasValidState(); extern bool SysHasValidState();
extern void SysUpdateIsoSrcFile( const wxString& newIsoFile ); extern void SysUpdateIsoSrcFile( const wxString& newIsoFile );
@ -623,5 +623,7 @@ extern bool HasMainFrame();
extern MainEmuFrame& GetMainFrame(); extern MainEmuFrame& GetMainFrame();
extern MainEmuFrame* GetMainFramePtr(); extern MainEmuFrame* GetMainFramePtr();
extern AppCoreThread CoreThread; extern __aligned16 AppCoreThread CoreThread;
extern __aligned16 SysMtgsThread mtgsThread;

View File

@ -20,7 +20,6 @@
#include "Utilities/Threading.h" #include "Utilities/Threading.h"
#include "Utilities/wxGuiTools.h" #include "Utilities/wxGuiTools.h"
#include "Utilities/wxHelpers.h"
#include "Utilities/pxRadioPanel.h" #include "Utilities/pxRadioPanel.h"
#include "Utilities/pxCheckBox.h" #include "Utilities/pxCheckBox.h"
#include "Utilities/pxStaticText.h" #include "Utilities/pxStaticText.h"

View File

@ -17,10 +17,12 @@
#include "MainFrame.h" #include "MainFrame.h"
#include "ps2/BiosTools.h" #include "ps2/BiosTools.h"
AppCoreThread CoreThread; #include "GS.h"
__aligned16 SysMtgsThread mtgsThread;
__aligned16 AppCoreThread CoreThread;
AppCoreThread::AppCoreThread() : SysCoreThread() AppCoreThread::AppCoreThread() : SysCoreThread()
, m_kevt()
{ {
} }
@ -197,21 +199,20 @@ void AppCoreThread::StateCheckInThread()
// suspended. If the thread has mot been suspended, this call will fail *silently*. // suspended. If the thread has mot been suspended, this call will fail *silently*.
void AppCoreThread::ApplySettings( const Pcsx2Config& src ) void AppCoreThread::ApplySettings( const Pcsx2Config& src )
{ {
if( m_ExecMode != ExecMode_Closed ) return; //if( m_ExecMode != ExecMode_Closed ) return;
Pcsx2Config fixup( src ); Pcsx2Config fixup( src );
if( !g_Conf->EnableSpeedHacks ) if( !g_Conf->EnableSpeedHacks )
fixup.Speedhacks = Pcsx2Config::SpeedhackOptions(); fixup.Speedhacks = Pcsx2Config::SpeedhackOptions();
if( fixup == EmuConfig ) return;
// Re-entry guard protects against cases where code wants to manually set core settings // Re-entry guard protects against cases where code wants to manually set core settings
// which are not part of g_Conf. The subsequent call to apply g_Conf settings (which is // which are not part of g_Conf. The subsequent call to apply g_Conf settings (which is
// usually the desired behavior) will be ignored. // usually the desired behavior) will be ignored.
static int localc = 0; static int localc = 0;
RecursionGuard guard( localc ); RecursionGuard guard( localc );
if(guard.IsReentrant()) return; if( guard.IsReentrant() ) return;
if( fixup == EmuConfig ) return;
_parent::ApplySettings( fixup ); _parent::ApplySettings( fixup );
} }

View File

@ -409,7 +409,7 @@ MainEmuFrame& Pcsx2App::GetMainFrame() const
return *m_MainFrame; return *m_MainFrame;
} }
void AppApplySettings( const AppConfig* oldconf, bool saveOnSuccess ) void AppApplySettings( const AppConfig* oldconf )
{ {
AllowFromMainThreadOnly(); AllowFromMainThreadOnly();
@ -426,7 +426,7 @@ void AppApplySettings( const AppConfig* oldconf, bool saveOnSuccess )
RelocateLogfile(); RelocateLogfile();
bool resume = CoreThread.Suspend(); ScopedCoreThreadSuspend suspend_core;
// Update the compression attribute on the Memcards folder. // Update the compression attribute on the Memcards folder.
// Memcards generally compress very well via NTFS compression. // Memcards generally compress very well via NTFS compression.
@ -447,12 +447,6 @@ void AppApplySettings( const AppConfig* oldconf, bool saveOnSuccess )
int toSend = 0; int toSend = 0;
sApp.Source_SettingsApplied().Dispatch( toSend ); sApp.Source_SettingsApplied().Dispatch( toSend );
if( resume )
CoreThread.Resume();
if( saveOnSuccess )
AppSaveSettings();
} }
static wxFileConfig _dud_config; static wxFileConfig _dud_config;
@ -664,3 +658,13 @@ MainEmuFrame* GetMainFramePtr()
{ {
return wxTheApp ? wxGetApp().GetMainFramePtr() : NULL; return wxTheApp ? wxGetApp().GetMainFramePtr() : NULL;
} }
SysCoreThread& GetCoreThread()
{
return CoreThread;
}
SysMtgsThread& GetMTGS()
{
return mtgsThread;
}

View File

@ -185,7 +185,7 @@ void ConsoleLogFrame::ColorArray::Create( int fontsize )
new (&m_table[Color_Red]) wxTextAttr( wxColor( 128, 0, 0 ), wxNullColour, fixed ); new (&m_table[Color_Red]) wxTextAttr( wxColor( 128, 0, 0 ), wxNullColour, fixed );
new (&m_table[Color_Green]) wxTextAttr( wxColor( 0, 128, 0 ), wxNullColour, fixed ); new (&m_table[Color_Green]) wxTextAttr( wxColor( 0, 128, 0 ), wxNullColour, fixed );
new (&m_table[Color_Blue]) wxTextAttr( wxColor( 0, 0, 128 ), wxNullColour, fixed ); new (&m_table[Color_Blue]) wxTextAttr( wxColor( 0, 0, 128 ), wxNullColour, fixed );
new (&m_table[Color_Magenta] ) wxTextAttr( wxColor( 160, 0, 160 ), wxNullColour, fixed ); new (&m_table[Color_Magenta]) wxTextAttr( wxColor( 160, 0, 160 ), wxNullColour, fixed );
new (&m_table[Color_Orange]) wxTextAttr( wxColor( 160, 120, 0 ), wxNullColour, fixed ); new (&m_table[Color_Orange]) wxTextAttr( wxColor( 160, 120, 0 ), wxNullColour, fixed );
new (&m_table[Color_Gray]) wxTextAttr( wxColor( 108, 108, 108 ), wxNullColour, fixed ); new (&m_table[Color_Gray]) wxTextAttr( wxColor( 108, 108, 108 ), wxNullColour, fixed );
@ -262,17 +262,17 @@ ConsoleLogFrame::ConsoleLogFrame( MainEmuFrame *parent, const wxString& title, A
m_TextCtrl.SetBackgroundColour( wxColor( 230, 235, 242 ) ); m_TextCtrl.SetBackgroundColour( wxColor( 230, 235, 242 ) );
m_TextCtrl.SetDefaultStyle( m_ColorTable[DefaultConsoleColor] ); m_TextCtrl.SetDefaultStyle( m_ColorTable[DefaultConsoleColor] );
wxMenu& menuLog (*new wxMenu());
wxMenu& menuAppear (*new wxMenu());
wxMenu& menuSources (*new wxMenu());
wxMenu& menuFontSizes( menuAppear );
// create Log menu (contains most options) // create Log menu (contains most options)
wxMenuBar *pMenuBar = new wxMenuBar(); wxMenuBar *pMenuBar = new wxMenuBar();
wxMenu& menuLog = *new wxMenu(); SetMenuBar( pMenuBar );
menuLog.Append(wxID_SAVE, _("&Save..."), _("Save log contents to file"));
menuLog.Append(wxID_CLEAR, _("C&lear"), _("Clear the log window contents"));
menuLog.AppendSeparator();
menuLog.Append(wxID_CLOSE, _("&Close"), _("Close this log window; contents are preserved"));
// create Appearance menu and submenus // create Appearance menu and submenus
wxMenu& menuFontSizes = *new wxMenu();
menuFontSizes.Append( MenuID_FontSize_Small, _("Small"), _("Fits a lot of log in a microcosmically small area."), menuFontSizes.Append( MenuID_FontSize_Small, _("Small"), _("Fits a lot of log in a microcosmically small area."),
wxITEM_RADIO )->Check( options.FontSize == 7 ); wxITEM_RADIO )->Check( options.FontSize == 7 );
menuFontSizes.Append( MenuID_FontSize_Normal, _("Normal"),_("It's what I use (the programmer guy)."), menuFontSizes.Append( MenuID_FontSize_Normal, _("Normal"),_("It's what I use (the programmer guy)."),
@ -282,14 +282,27 @@ ConsoleLogFrame::ConsoleLogFrame( MainEmuFrame *parent, const wxString& title, A
menuFontSizes.Append( MenuID_FontSize_Huge, _("Huge"), _("In case you have a really high res display."), menuFontSizes.Append( MenuID_FontSize_Huge, _("Huge"), _("In case you have a really high res display."),
wxITEM_RADIO )->Check( options.FontSize == 12 ); wxITEM_RADIO )->Check( options.FontSize == 12 );
wxMenu& menuAppear = *new wxMenu(); menuAppear.AppendSeparator();
menuAppear.Append( wxID_ANY, _("Always on Top"), menuAppear.Append( wxID_ANY, _("Always on Top"),
_("When checked the log window will be visible over other foreground windows."), wxITEM_CHECK ); _("When checked the log window will be visible over other foreground windows."), wxITEM_CHECK );
menuAppear.Append( wxID_ANY, _("Font Size"), &menuFontSizes ); //menuAppear.Append( wxID_ANY, _("Font Size"), &menuFontSizes );
menuLog.Append(wxID_SAVE, _("&Save..."), _("Save log contents to file"));
menuLog.Append(wxID_CLEAR, _("C&lear"), _("Clear the log window contents"));
menuLog.AppendSeparator();
menuLog.AppendSubMenu( &menuAppear, _("Appearance") );
menuLog.Append(wxID_ANY, _("Show Legend"), _("Displays the console color legend.") );
menuLog.AppendSeparator();
menuLog.Append(wxID_CLOSE, _("&Close"), _("Close this log window; contents are preserved"));
// Source Selection/Toggle menu
m_item_Deci2 = menuSources.AppendCheckItem( wxID_ANY, _("EE Deci2"), _("Enables debug output from the EEcore.") );
m_item_StdoutEE = menuSources.AppendCheckItem( wxID_ANY, _("EE StdOut"), _("Enables STDOUT from the EEcore.") );
m_item_StdoutIOP= menuSources.AppendCheckItem( wxID_ANY, _("IOP StdOut"), _("Enables STDOUT from the IOP.") );
pMenuBar->Append(&menuLog, _("&Log")); pMenuBar->Append(&menuLog, _("&Log"));
pMenuBar->Append(&menuAppear, _("&Appearance")); pMenuBar->Append(&menuSources, _("&Sources"));
SetMenuBar(pMenuBar);
// status bar for menu prompts // status bar for menu prompts
CreateStatusBar(); CreateStatusBar();
@ -304,7 +317,11 @@ ConsoleLogFrame::ConsoleLogFrame( MainEmuFrame *parent, const wxString& title, A
Connect( wxID_SAVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ConsoleLogFrame::OnSave) ); Connect( wxID_SAVE, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ConsoleLogFrame::OnSave) );
Connect( wxID_CLEAR, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ConsoleLogFrame::OnClear) ); Connect( wxID_CLEAR, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(ConsoleLogFrame::OnClear) );
Connect( MenuID_FontSize_Small, MenuID_FontSize_Huge, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( ConsoleLogFrame::OnFontSize ) ); Connect( MenuID_FontSize_Small, MenuID_FontSize_Huge, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( ConsoleLogFrame::OnFontSize ) );
Connect( m_item_Deci2->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( ConsoleLogFrame::OnLogSourceChanged ) );
Connect( m_item_StdoutEE->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( ConsoleLogFrame::OnLogSourceChanged ) );
Connect( m_item_StdoutIOP->GetId(), wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( ConsoleLogFrame::OnLogSourceChanged ) );
Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler(ConsoleLogFrame::OnCloseWindow) ); Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler(ConsoleLogFrame::OnCloseWindow) );
Connect( wxEVT_MOVE, wxMoveEventHandler(ConsoleLogFrame::OnMoveAround) ); Connect( wxEVT_MOVE, wxMoveEventHandler(ConsoleLogFrame::OnMoveAround) );
@ -312,8 +329,11 @@ ConsoleLogFrame::ConsoleLogFrame( MainEmuFrame *parent, const wxString& title, A
Connect( wxEVT_SetTitleText, wxCommandEventHandler(ConsoleLogFrame::OnSetTitle) ); Connect( wxEVT_SetTitleText, wxCommandEventHandler(ConsoleLogFrame::OnSetTitle) );
Connect( wxEVT_DockConsole, wxCommandEventHandler(ConsoleLogFrame::OnDockedMove) ); Connect( wxEVT_DockConsole, wxCommandEventHandler(ConsoleLogFrame::OnDockedMove) );
Connect( wxEVT_FlushQueue, wxCommandEventHandler(ConsoleLogFrame::OnFlushEvent) ); Connect( wxEVT_FlushQueue, wxCommandEventHandler(ConsoleLogFrame::OnFlushEvent) );
m_item_Deci2 ->Check( g_Conf->EmuOptions.Log.Deci2 );
m_item_StdoutEE ->Check( g_Conf->EmuOptions.Log.StdoutEE );
m_item_StdoutIOP ->Check( g_Conf->EmuOptions.Log.StdoutIOP );
if( m_threadlogger != NULL ) if( m_threadlogger != NULL )
m_threadlogger->Start(); m_threadlogger->Start();
@ -500,6 +520,15 @@ void ConsoleLogFrame::OnClear(wxCommandEvent& WXUNUSED(event))
m_TextCtrl.Clear(); m_TextCtrl.Clear();
} }
void ConsoleLogFrame::OnLogSourceChanged( wxCommandEvent& evt )
{
g_Conf->EmuOptions.Log.Deci2 = m_item_Deci2 ->IsChecked();
g_Conf->EmuOptions.Log.StdoutEE = m_item_StdoutEE ->IsChecked();
g_Conf->EmuOptions.Log.StdoutIOP= m_item_StdoutIOP ->IsChecked();
CoreThread.ApplySettings( g_Conf->EmuOptions );
}
void ConsoleLogFrame::OnFontSize( wxCommandEvent& evt ) void ConsoleLogFrame::OnFontSize( wxCommandEvent& evt )
{ {
int ptsize = 8; int ptsize = 8;

View File

@ -183,6 +183,14 @@ protected:
// (alternatively you can enable Disasm logging in any recompiler and achieve // (alternatively you can enable Disasm logging in any recompiler and achieve
// a similar effect) // a similar effect)
ScopedPtr<ConsoleTestThread> m_threadlogger; ScopedPtr<ConsoleTestThread> m_threadlogger;
// ----------------------------------------------------------------------------
// Window and Menu Object Handles
// ----------------------------------------------------------------------------
wxMenuItem* m_item_Deci2;
wxMenuItem* m_item_StdoutEE;
wxMenuItem* m_item_StdoutIOP;
public: public:
// ctor & dtor // ctor & dtor
@ -206,6 +214,7 @@ protected:
virtual void OnClear(wxCommandEvent& event); virtual void OnClear(wxCommandEvent& event);
void OnFontSize(wxCommandEvent& event); void OnFontSize(wxCommandEvent& event);
void OnLogSourceChanged(wxCommandEvent& event);
virtual void OnCloseWindow(wxCloseEvent& event); virtual void OnCloseWindow(wxCloseEvent& event);

View File

@ -25,8 +25,6 @@
#include <wx/mstream.h> #include <wx/mstream.h>
#include <wx/hyperlink.h> #include <wx/hyperlink.h>
using namespace wxHelpers;
namespace Dialogs namespace Dialogs
{ {
// Helper class for creating wxStaticText labels which are aligned to center. // Helper class for creating wxStaticText labels which are aligned to center.

View File

@ -30,7 +30,6 @@
# include <commctrl.h> # include <commctrl.h>
#endif #endif
using namespace wxHelpers;
using namespace Panels; using namespace Panels;
// configure the orientation of the listbox based on the platform // configure the orientation of the listbox based on the platform
@ -119,7 +118,7 @@ Dialogs::ConfigurationDialog::~ConfigurationDialog() throw()
void Dialogs::ConfigurationDialog::OnOk_Click( wxCommandEvent& evt ) void Dialogs::ConfigurationDialog::OnOk_Click( wxCommandEvent& evt )
{ {
if( g_ApplyState.ApplyAll( false ) ) if( g_ApplyState.ApplyAll() )
{ {
FindWindow( wxID_APPLY )->Disable(); FindWindow( wxID_APPLY )->Disable();
g_Conf->SettingsTabName = m_labels[m_listbook.GetSelection()]; g_Conf->SettingsTabName = m_labels[m_listbook.GetSelection()];
@ -138,7 +137,7 @@ void Dialogs::ConfigurationDialog::OnCancel_Click( wxCommandEvent& evt )
void Dialogs::ConfigurationDialog::OnApply_Click( wxCommandEvent& evt ) void Dialogs::ConfigurationDialog::OnApply_Click( wxCommandEvent& evt )
{ {
if( g_ApplyState.ApplyAll( false ) ) if( g_ApplyState.ApplyAll() )
FindWindow( wxID_APPLY )->Disable(); FindWindow( wxID_APPLY )->Disable();
g_Conf->SettingsTabName = m_labels[m_listbook.GetSelection()]; g_Conf->SettingsTabName = m_labels[m_listbook.GetSelection()];

View File

@ -20,8 +20,6 @@
#include "ModalPopups.h" #include "ModalPopups.h"
#include "Utilities/StringHelpers.h" #include "Utilities/StringHelpers.h"
using namespace wxHelpers;
bool ConfButtons::Allows( wxWindowID id ) const bool ConfButtons::Allows( wxWindowID id ) const
{ {
switch( id ) switch( id )

View File

@ -21,7 +21,6 @@
#include "Panels/ConfigurationPanels.h" #include "Panels/ConfigurationPanels.h"
#include <wx/file.h> #include <wx/file.h>
using namespace wxHelpers;
using namespace Panels; using namespace Panels;
template< typename T > template< typename T >
@ -156,7 +155,7 @@ void FirstTimeWizard::OnPageChanging( wxWizardEvent& evt )
if( page >= 0 ) if( page >= 0 )
{ {
if( !g_ApplyState.ApplyPage( page, false ) ) if( !g_ApplyState.ApplyPage( page ) )
{ {
evt.Veto(); evt.Veto();
return; return;

View File

@ -18,9 +18,6 @@
#include "ModalPopups.h" #include "ModalPopups.h"
using namespace wxHelpers;
Dialogs::ImportSettingsDialog::ImportSettingsDialog( wxWindow* parent ) Dialogs::ImportSettingsDialog::ImportSettingsDialog( wxWindow* parent )
: wxDialogWithHelpers( parent, wxID_ANY, _("Import Existing Settings?"), false ) : wxDialogWithHelpers( parent, wxID_ANY, _("Import Existing Settings?"), false )
{ {

View File

@ -19,7 +19,6 @@
#include <wx/statline.h> #include <wx/statline.h>
using namespace wxHelpers;
using namespace Panels; using namespace Panels;
Dialogs::LogOptionsDialog::LogOptionsDialog( wxWindow* parent, int id ) Dialogs::LogOptionsDialog::LogOptionsDialog( wxWindow* parent, int id )
@ -41,7 +40,7 @@ Dialogs::LogOptionsDialog::LogOptionsDialog( wxWindow* parent, int id )
void Dialogs::LogOptionsDialog::OnOk_Click( wxCommandEvent& evt ) void Dialogs::LogOptionsDialog::OnOk_Click( wxCommandEvent& evt )
{ {
if( g_ApplyState.ApplyAll( false ) ) if( g_ApplyState.ApplyAll() )
{ {
FindWindow( wxID_APPLY )->Disable(); FindWindow( wxID_APPLY )->Disable();
AppSaveSettings(); AppSaveSettings();
@ -53,7 +52,7 @@ void Dialogs::LogOptionsDialog::OnOk_Click( wxCommandEvent& evt )
void Dialogs::LogOptionsDialog::OnApply_Click( wxCommandEvent& evt ) void Dialogs::LogOptionsDialog::OnApply_Click( wxCommandEvent& evt )
{ {
if( g_ApplyState.ApplyAll( false ) ) if( g_ApplyState.ApplyAll() )
FindWindow( wxID_APPLY )->Disable(); FindWindow( wxID_APPLY )->Disable();
AppSaveSettings(); AppSaveSettings();

View File

@ -17,7 +17,7 @@
#include "App.h" #include "App.h"
#include "Utilities/wxHelpers.h" #include "Utilities/wxGuiTools.h"
#include "Utilities/CheckedStaticBox.h" #include "Utilities/CheckedStaticBox.h"
#include "Utilities/HashMap.h" #include "Utilities/HashMap.h"

View File

@ -18,7 +18,6 @@
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
using namespace wxHelpers;
using namespace Panels; using namespace Panels;
Dialogs::PickUserModeDialog::PickUserModeDialog( wxWindow* parent, int id ) Dialogs::PickUserModeDialog::PickUserModeDialog( wxWindow* parent, int id )

View File

@ -141,8 +141,8 @@ namespace Implementations
{ {
g_Pcsx2Recording ^= 1; g_Pcsx2Recording ^= 1;
mtgsThread.WaitGS(); // make sure GS is in sync with the audio stream when we start. GetMTGS().WaitGS(); // make sure GS is in sync with the audio stream when we start.
mtgsThread.SendSimplePacket(GS_RINGTYPE_RECORD, g_Pcsx2Recording, 0, 0); GetMTGS().SendSimplePacket(GS_RINGTYPE_RECORD, g_Pcsx2Recording, 0, 0);
if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL); if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL);
} }

View File

@ -34,7 +34,7 @@ wxString GetMsg_ConfirmSysReset()
bool IsoDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames) bool IsoDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filenames)
{ {
bool resume = CoreThread.Suspend(); ScopedCoreThreadSuspend stopped_core;
if( filenames.GetCount() > 1 ) if( filenames.GetCount() > 1 )
{ {
@ -81,7 +81,7 @@ bool IsoDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filen
sApp.SysExecute( g_Conf->CdvdSource, g_Conf->CurrentELF ); sApp.SysExecute( g_Conf->CdvdSource, g_Conf->CurrentELF );
} }
if( resume ) CoreThread.Resume(); stopped_core.Resume();
return true; return true;
} }
} }
@ -132,6 +132,6 @@ bool IsoDropTarget::OnDropFiles(wxCoord x, wxCoord y, const wxArrayString& filen
} }
_closefile( iso.handle ); _closefile( iso.handle );
if( resume ) CoreThread.Resume(); stopped_core.Resume();
return true; return true;
} }

View File

@ -102,8 +102,8 @@ namespace Panels
void StartBook( wxBookCtrlBase* book ); void StartBook( wxBookCtrlBase* book );
void StartWizard(); void StartWizard();
bool ApplyAll( bool saveOnSuccess=true ); bool ApplyAll();
bool ApplyPage( int pageid, bool saveOnSuccess=true ); bool ApplyPage( int pageid );
void DoCleanup() throw(); void DoCleanup() throw();
}; };

View File

@ -24,7 +24,6 @@
#include <wx/filepicker.h> #include <wx/filepicker.h>
#include <wx/listbox.h> #include <wx/listbox.h>
using namespace wxHelpers;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------
Panels::BaseSelectorPanel::BaseSelectorPanel( wxWindow* parent ) Panels::BaseSelectorPanel::BaseSelectorPanel( wxWindow* parent )

View File

@ -21,8 +21,6 @@
#include <wx/dir.h> #include <wx/dir.h>
#include <wx/filepicker.h> #include <wx/filepicker.h>
using namespace wxHelpers;
static wxString GetNormalizedConfigFolder( FoldersEnum_t folderId ) static wxString GetNormalizedConfigFolder( FoldersEnum_t folderId )
{ {
const bool isDefault = g_Conf->Folders.IsDefault( folderId ); const bool isDefault = g_Conf->Folders.IsDefault( folderId );
@ -121,7 +119,7 @@ Panels::DirPickerPanel::DirPickerPanel( wxWindow* parent, FoldersEnum_t folderid
Panels::DirPickerPanel& Panels::DirPickerPanel::SetStaticDesc( const wxString& msg ) Panels::DirPickerPanel& Panels::DirPickerPanel::SetStaticDesc( const wxString& msg )
{ {
InsertStaticTextAt( this, *GetSizer(), 0, msg ); (new pxStaticText( this, msg ))->InsertAt( *GetSizer(), 0 );
return *this; return *this;
} }

View File

@ -16,8 +16,6 @@
#include "PrecompiledHeader.h" #include "PrecompiledHeader.h"
#include "ConfigurationPanels.h" #include "ConfigurationPanels.h"
using namespace wxHelpers;
Panels::GameFixesPanel::GameFixesPanel( wxWindow* parent ) : Panels::GameFixesPanel::GameFixesPanel( wxWindow* parent ) :
BaseApplicableConfigPanel( parent ) BaseApplicableConfigPanel( parent )
{ {

View File

@ -23,7 +23,6 @@
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
#include <wx/bookctrl.h> #include <wx/bookctrl.h>
using namespace wxHelpers;
Panels::StaticApplyState Panels::g_ApplyState; Panels::StaticApplyState Panels::g_ApplyState;
@ -59,7 +58,7 @@ void Panels::StaticApplyState::StartWizard()
// Returns false if one of the panels fails input validation (in which case dialogs // Returns false if one of the panels fails input validation (in which case dialogs
// should not be closed, etc). // should not be closed, etc).
// //
bool Panels::StaticApplyState::ApplyPage( int pageid, bool saveOnSuccess ) bool Panels::StaticApplyState::ApplyPage( int pageid )
{ {
bool retval = true; bool retval = true;
@ -87,7 +86,7 @@ bool Panels::StaticApplyState::ApplyPage( int pageid, bool saveOnSuccess )
// Note: apply first, then save -- in case the apply fails. // Note: apply first, then save -- in case the apply fails.
AppApplySettings( &confcopy, saveOnSuccess ); AppApplySettings( &confcopy );
} }
catch( Exception::CannotApplySettings& ex ) catch( Exception::CannotApplySettings& ex )
{ {
@ -121,9 +120,9 @@ bool Panels::StaticApplyState::ApplyPage( int pageid, bool saveOnSuccess )
// Returns false if one of the panels fails input validation (in which case dialogs // Returns false if one of the panels fails input validation (in which case dialogs
// should not be closed, etc). // should not be closed, etc).
bool Panels::StaticApplyState::ApplyAll( bool saveOnSuccess ) bool Panels::StaticApplyState::ApplyAll()
{ {
return ApplyPage( -1, saveOnSuccess ); return ApplyPage( -1 );
} }
void Panels::BaseApplicableConfigPanel::SetFocusToMe() void Panels::BaseApplicableConfigPanel::SetFocusToMe()

View File

@ -18,7 +18,6 @@
#include <wx/stdpaths.h> #include <wx/stdpaths.h>
using namespace wxHelpers;
static const int BetweenFolderSpace = 5; static const int BetweenFolderSpace = 5;
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------

View File

@ -31,7 +31,6 @@ static const bool DisableThreading =
false; false;
#endif #endif
using namespace wxHelpers;
using namespace pxSizerFlags; using namespace pxSizerFlags;
using namespace Threading; using namespace Threading;

View File

@ -18,7 +18,6 @@
#include "System.h" #include "System.h"
using namespace wxHelpers;
using namespace pxSizerFlags; using namespace pxSizerFlags;
static int pxGetTextHeight( const wxWindow* wind, int rows ) static int pxGetTextHeight( const wxWindow* wind, int rows )

View File

@ -414,5 +414,5 @@ __forceinline void GIFPath_Clear( GIF_PATH pathidx )
{ {
memzero(s_gifPath.path[pathidx]); memzero(s_gifPath.path[pathidx]);
if( GSgifSoftReset == NULL ) return; if( GSgifSoftReset == NULL ) return;
mtgsThread.SendSimplePacket( GS_RINGTYPE_SOFTRESET, (1<<pathidx), 0, 0 ); GetMTGS().SendSimplePacket( GS_RINGTYPE_SOFTRESET, (1<<pathidx), 0, 0 );
} }

View File

@ -122,7 +122,7 @@ void __fastcall iopHwWrite8_Page3( u32 addr, mem8_t val )
( val == '\n' && g_pbufi != 0 ) ) ( val == '\n' && g_pbufi != 0 ) )
{ {
g_pbuf[g_pbufi] = 0; g_pbuf[g_pbufi] = 0;
Console.WriteLn( ConColor_IOP, "%s", g_pbuf ); Console.WriteLn( ConColor_IOP, L"%s", L"%s", ShiftJIS_ConvertString(g_pbuf).c_str() );
g_pbufi = 0; g_pbufi = 0;
} }
else if( val != '\n' ) else if( val != '\n' )

View File

@ -1106,8 +1106,8 @@ void __fastcall mVU_XGKICK_(u32 addr) {
addr &= 0x3ff; addr &= 0x3ff;
u8* data = microVU1.regs->Mem + (addr*16); u8* data = microVU1.regs->Mem + (addr*16);
u32 diff = 0x400 - addr; u32 diff = 0x400 - addr;
u32 size = mtgsThread.PrepDataPacket(GIF_PATH_1, data, diff); u32 size = GetMTGS().PrepDataPacket(GIF_PATH_1, data, diff);
u8* pDest = mtgsThread.GetDataPacketPtr(); u8* pDest = GetMTGS().GetDataPacketPtr();
if (size > diff) { if (size > diff) {
// fixme: one of these days the following *16's will get cleaned up when we introduce // fixme: one of these days the following *16's will get cleaned up when we introduce
@ -1121,7 +1121,7 @@ void __fastcall mVU_XGKICK_(u32 addr) {
else { else {
memcpy_aligned(pDest, microVU1.regs->Mem + (addr*16), size*16); memcpy_aligned(pDest, microVU1.regs->Mem + (addr*16), size*16);
} }
mtgsThread.SendDataPacket(); GetMTGS().SendDataPacket();
} }
microVUt(void) mVU_XGKICK_DELAY(mV, bool memVI) { microVUt(void) mVU_XGKICK_DELAY(mV, bool memVI) {

View File

@ -1974,10 +1974,10 @@ void __fastcall VU1XGKICK_MTGSTransfer(u32 *pMem, u32 addr)
u32 size; u32 size;
u8* data = ((u8*)pMem + (addr&0x3fff)); u8* data = ((u8*)pMem + (addr&0x3fff));
size = mtgsThread.PrepDataPacket(GIF_PATH_1, data, (0x4000-(addr&0x3fff)) / 16); size = GetMTGS().PrepDataPacket(GIF_PATH_1, data, (0x4000-(addr&0x3fff)) / 16);
jASSUME( size > 0 ); jASSUME( size > 0 );
u8* pmem = mtgsThread.GetDataPacketPtr(); u8* pmem = GetMTGS().GetDataPacketPtr();
if((size << 4) > (0x4000-(addr&0x3fff))) if((size << 4) > (0x4000-(addr&0x3fff)))
{ {
@ -1992,6 +1992,6 @@ void __fastcall VU1XGKICK_MTGSTransfer(u32 *pMem, u32 addr)
memcpy_aligned(pmem, (u8*)pMem+addr, size<<4); memcpy_aligned(pmem, (u8*)pMem+addr, size<<4);
} }
mtgsThread.SendDataPacket(); GetMTGS().SendDataPacket();
} }
//------------------------------------------------------------------ //------------------------------------------------------------------