Fiddle with ProcessFKeys a bit, and hack in a key to turn logging on and off(F10).

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@891 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2009-04-03 01:05:28 +00:00
parent 3b570f8a2b
commit b44d1590ca
6 changed files with 165 additions and 121 deletions

View File

@ -74,6 +74,7 @@ namespace R3000A
#ifdef PCSX2_DEVBUILD #ifdef PCSX2_DEVBUILD
extern u32 varLog; extern u32 varLog;
extern bool enableLogging;
void SourceLog( u16 protocol, u8 source, u32 cpuPc, u32 cpuCycle, const char *fmt, ...); void SourceLog( u16 protocol, u8 source, u32 cpuPc, u32 cpuCycle, const char *fmt, ...);
void __Log( const char* fmt, ... ); void __Log( const char* fmt, ... );

View File

@ -291,12 +291,6 @@ void OnStates_SaveOther(GtkMenuItem *menuitem, gpointer user_data)
gdk_window_raise(FileSel->window); gdk_window_raise(FileSel->window);
} }
/* Quick macros for checking shift, control, alt, and caps lock. */
#define SHIFT_EVT(evt) ((evt == XK_Shift_L) || (evt == XK_Shift_R))
#define CTRL_EVT(evt) ((evt == XK_Control_L) || (evt == XK_Control_L))
#define ALT_EVT(evt) ((evt == XK_Alt_L) || (evt == XK_Alt_R))
#define CAPS_LOCK_EVT(evt) (evt == XK_Caps_Lock)
bool SysInit() bool SysInit()
{ {
if (sinit) return true; if (sinit) return true;
@ -450,22 +444,34 @@ namespace HostGui
SysExecute(); SysExecute();
} }
void __fastcall KeyEvent(keyEvent* ev) /* Quick macros for checking shift, control, alt, and caps lock. */
{ #define SHIFT_EVT(evt) ((evt == XK_Shift_L) || (evt == XK_Shift_R))
static int shift = 0; #define CTRL_EVT(evt) ((evt == XK_Control_L) || (evt == XK_Control_R))
#define ALT_EVT(evt) ((evt == XK_Alt_L) || (evt == XK_Alt_R))
#define CAPS_LOCK_EVT(evt) (evt == XK_Caps_Lock)
void __fastcall KeyEvent(keyEvent* ev)
{
struct KeyModifiers *keymod = &keymodifiers;
if (ev == NULL) return; if (ev == NULL) return;
if (GSkeyEvent != NULL) GSkeyEvent(ev); if (ev->evt == KEYRELEASE)
{
if (SHIFT_EVT(ev->key)) keymod->shift = FALSE;
if (CTRL_EVT(ev->key)) keymod->control = FALSE;
if (ALT_EVT(ev->key)) keymod->alt = FALSE;
if (CAPS_LOCK_EVT(ev->key)) keymod->capslock = FALSE;
GSkeyEvent(ev);
return;
}
if (ev->evt == KEYPRESS) if (ev->evt == KEYPRESS)
{ {
if (SHIFT_EVT(ev->key)) if (SHIFT_EVT(ev->key)) keymod->shift = TRUE;
shift = 1; if (CTRL_EVT(ev->key)) keymod->control = TRUE;
if (CAPS_LOCK_EVT(ev->key)) if (ALT_EVT(ev->key)) keymod->alt = TRUE;
{ if (CAPS_LOCK_EVT(ev->key)) keymod->capslock = TRUE;
//Set up anything we want to happen while caps lock is down.
}
switch (ev->key) switch (ev->key)
{ {
@ -483,7 +489,7 @@ namespace HostGui
case XK_F12: case XK_F12:
try try
{ {
ProcessFKeys(ev->key - XK_F1 + 1, shift); ProcessFKeys(ev->key - XK_F1 + 1, keymod);
} }
catch (Exception::CpuStateShutdown&) catch (Exception::CpuStateShutdown&)
{ {
@ -503,13 +509,13 @@ namespace HostGui
signal(SIGINT, SIG_DFL); signal(SIGINT, SIG_DFL);
signal(SIGPIPE, SIG_DFL); signal(SIGPIPE, SIG_DFL);
#ifdef PCSX2_DEVBUILD #ifdef PCSX2_DEVBUILD
if (g_SaveGSStream >= 3) if (g_SaveGSStream >= 3)
{ {
g_SaveGSStream = 4;// gs state g_SaveGSStream = 4;// gs state
break; break;
} }
#endif #endif
SysEndExecution(); SysEndExecution();
if (g_Startup.NoGui) exit(0); if (g_Startup.NoGui) exit(0);
@ -531,17 +537,7 @@ namespace HostGui
break; break;
} }
} }
else if (ev->evt == KEYRELEASE)
{
if (SHIFT_EVT(ev->key))
shift = 0;
if (CAPS_LOCK_EVT(ev->key))
{
//Release caps lock
}
}
return; return;
} }
} }

View File

@ -51,6 +51,8 @@ char CdromId[12];
static int g_Pcsx2Recording = 0; // true 1 if recording video and sound static int g_Pcsx2Recording = 0; // true 1 if recording video and sound
bool renderswitch = 0; bool renderswitch = 0;
struct KeyModifiers keymodifiers = {false, false, false, false};
#define NUM_STATES 10 #define NUM_STATES 10
int StatesC = 0; int StatesC = 0;
@ -489,11 +491,12 @@ void CycleFrameLimit(int dir)
//SaveConfig(); //SaveConfig();
} }
void ProcessFKeys(int fkey, int shift) void ProcessFKeys(int fkey, struct KeyModifiers *keymod)
{ {
assert(fkey >= 1 && fkey <= 12 ); assert(fkey >= 1 && fkey <= 12 );
switch(fkey) { switch(fkey)
{
case 1: case 1:
try try
{ {
@ -511,7 +514,7 @@ void ProcessFKeys(int fkey, int shift)
break; break;
case 2: case 2:
if( shift ) if( keymod->shift )
StatesC = (StatesC+NUM_STATES-1) % NUM_STATES; StatesC = (StatesC+NUM_STATES-1) % NUM_STATES;
else else
StatesC = (StatesC+1) % NUM_STATES; StatesC = (StatesC+1) % NUM_STATES;
@ -558,7 +561,7 @@ void ProcessFKeys(int fkey, int shift)
break; break;
case 4: case 4:
CycleFrameLimit(shift ? -1 : 1); CycleFrameLimit(keymod->shift ? -1 : 1);
break; break;
// note: VK_F5-VK_F7 are reserved for GS // note: VK_F5-VK_F7 are reserved for GS
@ -567,7 +570,8 @@ void ProcessFKeys(int fkey, int shift)
break; break;
case 9: //gsdx "on the fly" renderer switching case 9: //gsdx "on the fly" renderer switching
if (!renderswitch) { if (!renderswitch)
{
StateRecovery::MakeGsOnly(); StateRecovery::MakeGsOnly();
g_EmulationInProgress = false; g_EmulationInProgress = false;
CloseGS(); CloseGS();
@ -575,7 +579,8 @@ void ProcessFKeys(int fkey, int shift)
StateRecovery::Recover(); StateRecovery::Recover();
HostGui::BeginExecution(); //also sets g_EmulationInProgress to true later HostGui::BeginExecution(); //also sets g_EmulationInProgress to true later
} }
else { else
{
StateRecovery::MakeGsOnly(); StateRecovery::MakeGsOnly();
g_EmulationInProgress = false; g_EmulationInProgress = false;
CloseGS(); CloseGS();
@ -585,21 +590,35 @@ void ProcessFKeys(int fkey, int shift)
} }
break; break;
#ifdef PCSX2_DEVBUILD #ifdef PCSX2_DEVBUILD
case 10:
// There's likely a better way to implement this, but this seemed useful.
// I might add turning EE, VU0, and VU1 recs on and off by hotkey at some point, too.
// --arcum42
enableLogging = !enableLogging;
if (enableLogging)
GSprintf(10, "Logging Enabled.");
else
GSprintf(10,"Logging Disabled.");
break;
case 11: case 11:
if( mtgsThread != NULL ) { if( mtgsThread != NULL )
{
Console::Notice( "Cannot make gsstates in MTGS mode" ); Console::Notice( "Cannot make gsstates in MTGS mode" );
} }
else else
{ {
string Text; string Text;
if( strgametitle[0] != 0 ) { if( strgametitle[0] != 0 )
{
// only take the first two words // only take the first two words
char name[256], *tok; char name[256], *tok;
string gsText; string gsText;
tok = strtok(strgametitle, " "); tok = strtok(strgametitle, " ");
sprintf(name, "%s_", mystrlwr(tok)); sprintf(name, "%s_", mystrlwr(tok));
tok = strtok(NULL, " "); tok = strtok(NULL, " ");
if( tok != NULL ) strcat(name, tok); if( tok != NULL ) strcat(name, tok);
@ -607,7 +626,9 @@ void ProcessFKeys(int fkey, int shift)
Text = Path::Combine( SSTATES_DIR, gsText ); Text = Path::Combine( SSTATES_DIR, gsText );
} }
else else
{
Text = GetGSStateFilename(); Text = GetGSStateFilename();
}
SaveGSState(Text); SaveGSState(Text);
} }
@ -615,20 +636,22 @@ void ProcessFKeys(int fkey, int shift)
#endif #endif
case 12: case 12:
if( shift ) { if( keymod->shift )
{
#ifdef PCSX2_DEVBUILD #ifdef PCSX2_DEVBUILD
iDumpRegisters(cpuRegs.pc, 0); iDumpRegisters(cpuRegs.pc, 0);
Console::Notice("hardware registers dumped EE:%x, IOP:%x\n", params cpuRegs.pc, psxRegs.pc); Console::Notice("hardware registers dumped EE:%x, IOP:%x\n", params cpuRegs.pc, psxRegs.pc);
#endif #endif
} }
else { else
{
g_Pcsx2Recording ^= 1; g_Pcsx2Recording ^= 1;
if( mtgsThread != NULL ) {
if( mtgsThread != NULL )
mtgsThread->SendSimplePacket(GS_RINGTYPE_RECORD, g_Pcsx2Recording, 0, 0); mtgsThread->SendSimplePacket(GS_RINGTYPE_RECORD, g_Pcsx2Recording, 0, 0);
} else if( GSsetupRecording != NULL )
else { GSsetupRecording(g_Pcsx2Recording, NULL);
if( GSsetupRecording != NULL ) GSsetupRecording(g_Pcsx2Recording, NULL);
}
if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL); if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL);
} }
break; break;

View File

@ -19,6 +19,15 @@
#ifndef __MISC_H__ #ifndef __MISC_H__
#define __MISC_H__ #define __MISC_H__
struct KeyModifiers
{
bool control;
bool alt;
bool shift;
bool capslock;
};
extern struct KeyModifiers keymodifiers;
// Per ChickenLiver, this is being used to pass the GS plugins window handle to the Pad plugins. // Per ChickenLiver, this is being used to pass the GS plugins window handle to the Pad plugins.
// So a rename to pDisplay is in the works, but it will not, in fact, be removed. // So a rename to pDisplay is in the works, but it will not, in fact, be removed.
extern uptr pDsp; //Used in GS, MTGS, Plugins, Misc extern uptr pDsp; //Used in GS, MTGS, Plugins, Misc
@ -55,7 +64,7 @@ extern u64 GetCPUTicks();
extern u64 GetTickFrequency(); extern u64 GetTickFrequency();
// Used in Misc,and Windows/Linux files. // Used in Misc,and Windows/Linux files.
extern void ProcessFKeys(int fkey, int shift); // processes fkey related commands value 1-12 extern void ProcessFKeys(int fkey, struct KeyModifiers *keymod); // processes fkey related commands value 1-12
extern int IsBIOS(const char *filename, char *description); extern int IsBIOS(const char *filename, char *description);
char *ParseLang(char *id); char *ParseLang(char *id);

View File

@ -38,6 +38,7 @@ FILE *emuLog;
#ifdef PCSX2_DEVBUILD #ifdef PCSX2_DEVBUILD
u32 varLog; u32 varLog;
bool enableLogging = TRUE;
// these used by the depreciated _old_Log only // these used by the depreciated _old_Log only
u16 logProtocol; u16 logProtocol;
@ -52,8 +53,10 @@ int connected=0;
void __Log( const char* fmt, ... ) void __Log( const char* fmt, ... )
{ {
char tmp[2024]; char tmp[2024];
va_list list; va_list list;
if (!enableLogging) return;
va_start(list, fmt); va_start(list, fmt);
// concatenate the log message after the prefix: // concatenate the log message after the prefix:
@ -123,6 +126,9 @@ static __forceinline void _vSourceLog( u16 protocol, u8 source, u32 cpuPc, u32 c
void SourceLog( u16 protocol, u8 source, u32 cpuPc, u32 cpuCycle, const char *fmt, ...) void SourceLog( u16 protocol, u8 source, u32 cpuPc, u32 cpuCycle, const char *fmt, ...)
{ {
va_list list; va_list list;
if (!enableLogging) return;
va_start(list, fmt); va_start(list, fmt);
_vSourceLog( protocol, source, cpuPc, cpuCycle, fmt, list ); _vSourceLog( protocol, source, cpuPc, cpuCycle, fmt, list );
va_end(list); va_end(list);
@ -133,6 +139,7 @@ void SourceLog( u16 protocol, u8 source, u32 cpuPc, u32 cpuCycle, const char *fm
bool SrcLog_##unit( const char* fmt, ... ) \ bool SrcLog_##unit( const char* fmt, ... ) \
{ \ { \
va_list list; \ va_list list; \
if (!enableLogging) return false; \
va_start( list, fmt ); \ va_start( list, fmt ); \
_vSourceLog( protocol, source, \ _vSourceLog( protocol, source, \
(source == 'E') ? cpuRegs.pc : psxRegs.pc, \ (source == 'E') ? cpuRegs.pc : psxRegs.pc, \

View File

@ -386,14 +386,19 @@ namespace HostGui
void __fastcall KeyEvent( keyEvent* ev ) void __fastcall KeyEvent( keyEvent* ev )
{ {
static int shiftkey = 0; struct KeyModifiers *keymod = &keymodifiers;
if (ev == NULL) return; if (ev == NULL) return;
if (ev->evt == KEYRELEASE) if (ev->evt == KEYRELEASE)
{ {
switch (ev->key) switch (ev->key)
{ {
case VK_SHIFT: shiftkey = 0; break; case VK_SHIFT: keymod->shift = FALSE; break;
case VK_CONTROL: keymod->control = FALSE; break;
/* They couldn't just name this something simple, like VK_ALT */
case VK_MENU: keymod->alt = FALSE; break;
case VK_CAPITAL: keymod->capslock = FALSE; break;
} }
GSkeyEvent(ev); return; GSkeyEvent(ev); return;
} }
@ -402,14 +407,17 @@ namespace HostGui
switch (ev->key) switch (ev->key)
{ {
case VK_SHIFT: shiftkey = 1; break; case VK_SHIFT: keymod->shift = TRUE; break;
case VK_CONTROL: keymod->control = TRUE; break;
case VK_MENU: keymod->alt = TRUE; break;
case VK_CAPITAL: keymod->capslock = TRUE; break;
case VK_F1: case VK_F2: case VK_F3: case VK_F4: case VK_F1: case VK_F2: case VK_F3: case VK_F4:
case VK_F5: case VK_F6: case VK_F7: case VK_F8: case VK_F5: case VK_F6: case VK_F7: case VK_F8:
case VK_F9: case VK_F10: case VK_F11: case VK_F12: case VK_F9: case VK_F10: case VK_F11: case VK_F12:
try try
{ {
ProcessFKeys(ev->key-VK_F1 + 1, shiftkey); ProcessFKeys(ev->key-VK_F1 + 1, keymod);
} }
catch( Exception::CpuStateShutdown& ) catch( Exception::CpuStateShutdown& )
{ {