mirror of https://github.com/PCSX2/pcsx2.git
Linux: Moved the new memcard work to separate files, and enabled it, as it seems to be about as safe as switching memcards in the Windows port. Cleaned up Linux.h a bit, and started a bit of work on the debugger.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@491 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
2cc719d5b0
commit
a8706a94ce
|
@ -23,6 +23,19 @@
|
||||||
#include "R3000A.h"
|
#include "R3000A.h"
|
||||||
#include "IopMem.h"
|
#include "IopMem.h"
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
GS,
|
||||||
|
PAD1,
|
||||||
|
PAD2,
|
||||||
|
SPU,
|
||||||
|
CDVD,
|
||||||
|
DEV9,
|
||||||
|
USB,
|
||||||
|
FW,
|
||||||
|
BIOS
|
||||||
|
} plugin_types;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
GtkWidget *Combo;
|
GtkWidget *Combo;
|
||||||
|
@ -59,10 +72,6 @@ static void ConfPlugin(PluginConf confs, char* plugin, const char* name);
|
||||||
static void TestPlugin(PluginConf confs, char* plugin, const char* name);
|
static void TestPlugin(PluginConf confs, char* plugin, const char* name);
|
||||||
|
|
||||||
extern void CheckSlots();
|
extern void CheckSlots();
|
||||||
|
extern bool configuringplug;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // __CONFIGDLG_H__
|
#endif // __CONFIGDLG_H__
|
|
@ -18,11 +18,11 @@
|
||||||
|
|
||||||
#include "DebugDlg.h"
|
#include "DebugDlg.h"
|
||||||
using namespace R5900;
|
using namespace R5900;
|
||||||
|
unsigned long DebuggerPC = 0;
|
||||||
|
|
||||||
void UpdateDebugger()
|
/*void UpdateDebugger()
|
||||||
{
|
{
|
||||||
|
char syscall_str[g_MaxPath] = "";
|
||||||
char *str;
|
|
||||||
int i;
|
int i;
|
||||||
std::string output;
|
std::string output;
|
||||||
|
|
||||||
|
@ -34,29 +34,81 @@ void UpdateDebugger()
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
u32 *mem;
|
u32 *mem;
|
||||||
u32 pc = dPC + i * 4;
|
u32 pc = dPC + i * 4;
|
||||||
if (DebugMode)
|
/*if (DebugMode)
|
||||||
{
|
{
|
||||||
mem = (u32*)PSXM(pc);
|
mem = (u32*)PSXM(pc);
|
||||||
}
|
}
|
||||||
else
|
else*//*
|
||||||
mem = (u32*)PSM(pc);
|
mem = (u32*)PSM(pc);
|
||||||
|
|
||||||
if (mem == NULL)
|
if (mem == NULL)
|
||||||
{
|
{
|
||||||
sprintf(nullAddr, "%8.8lX:\tNULL MEMORY", pc);
|
sprintf(nullAddr, "%8.8lX:\tNULL MEMORY", pc);
|
||||||
str = nullAddr;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::string output;
|
*//* special procesing for syscall. This should probably be moved into the disR5900Fasm() call in the future. */
|
||||||
|
/*if (0x0c == *mem && 0x24030000 == (*(mem-1) & 0xFFFFFF00))
|
||||||
disR5900Fasm(output, *mem, pc);
|
{
|
||||||
output.copy(str, 256);
|
*//* it's a syscall preceeded by a li v1,$data instruction. */
|
||||||
|
/*u8 bios_call = *(mem-1) & 0xFF;
|
||||||
|
sprintf(syscall_str, "%08X:\tsyscall\t%s", pc, R5900::bios[bios_call]);
|
||||||
|
}
|
||||||
|
else *//*
|
||||||
|
{
|
||||||
|
std::string str;
|
||||||
|
R5900::disR5900Fasm(str, *mem,pc);
|
||||||
|
str.copy( syscall_str, 256 );
|
||||||
|
syscall_str[str.length()] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
gtk_list_store_append(ListDVModel, &iter);
|
gtk_list_store_append(ListDVModel, &iter);
|
||||||
gtk_list_store_set(ListDVModel, &iter, 0, str, -1);
|
if (syscall_str != "") gtk_list_store_set(ListDVModel, &iter, 0, syscall_str, -1);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
void UpdateDebugger(void)
|
||||||
|
{
|
||||||
|
/* unsigned long t;
|
||||||
|
int cnt;
|
||||||
|
|
||||||
|
if (DebuggerPC == 0) DebuggerPC = cpuRegs.pc; //- 0x00000038;
|
||||||
|
|
||||||
|
gtk_list_store_clear(ListDVModel);
|
||||||
|
|
||||||
|
for (t = DebuggerPC, cnt = 0; t < (DebuggerPC + 0x00000074); t += 0x00000004, cnt++)
|
||||||
|
{
|
||||||
|
GtkTreeIter iter;
|
||||||
|
char syscall_str[256];
|
||||||
|
|
||||||
|
// Make the opcode.
|
||||||
|
u32 *mem = (u32*)PSM(t);
|
||||||
|
if (mem == NULL)
|
||||||
|
{
|
||||||
|
sprintf(syscall_str, "%8.8lx 00000000: NULL MEMORY", t);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*//* special procesing for syscall. This should probably be moved into the disR5900Fasm() call in the future. */
|
||||||
|
/*if (0x0c == *mem && 0x24030000 == (*(mem-1) & 0xFFFFFF00))
|
||||||
|
{
|
||||||
|
*//* it's a syscall preceeded by a li v1,$data instruction. */
|
||||||
|
/*u8 bios_call = *(mem-1) & 0xFF;
|
||||||
|
sprintf(syscall_str, "%08X:\tsyscall\t%s", t, R5900::bios[bios_call]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::string str;
|
||||||
|
R5900::disR5900Fasm(str, *mem, t);
|
||||||
|
str.copy( syscall_str, 256 );
|
||||||
|
syscall_str[str.length()] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gtk_list_store_append(ListDVModel, &iter);
|
||||||
|
gtk_list_store_set(ListDVModel, &iter, 0, syscall_str, -1);
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDebug_Close(GtkButton *button, gpointer user_data)
|
void OnDebug_Close(GtkButton *button, gpointer user_data)
|
||||||
|
@ -340,6 +392,7 @@ void OnDebug_Go(GtkButton *button, gpointer user_data)
|
||||||
if (HasBreakPoint(cpuRegs.pc)) break;
|
if (HasBreakPoint(cpuRegs.pc)) break;
|
||||||
Cpu->Step();
|
Cpu->Step();
|
||||||
}
|
}
|
||||||
|
|
||||||
dPC = cpuRegs.pc;
|
dPC = cpuRegs.pc;
|
||||||
UpdateDebugger();
|
UpdateDebugger();
|
||||||
}
|
}
|
||||||
|
@ -370,8 +423,9 @@ void OnMemWrite32_Ok(GtkButton *button, gpointer user_data)
|
||||||
char *mem = (char*)gtk_entry_get_text(GTK_ENTRY(MemEntry));
|
char *mem = (char*)gtk_entry_get_text(GTK_ENTRY(MemEntry));
|
||||||
char *data = (char*)gtk_entry_get_text(GTK_ENTRY(DataEntry));
|
char *data = (char*)gtk_entry_get_text(GTK_ENTRY(DataEntry));
|
||||||
|
|
||||||
printf("memWrite32: %s, %s\n", mem, data);
|
Console::Notice("memWrite32: %s, %s\n", params mem, data);
|
||||||
memWrite32(strtol(mem, (char**)NULL, 0), strtol(data, (char**)NULL, 0));
|
memWrite32(strtol(mem, (char**)NULL, 0), strtol(data, (char**)NULL, 0));
|
||||||
|
|
||||||
gtk_widget_destroy(MemWriteDlg);
|
gtk_widget_destroy(MemWriteDlg);
|
||||||
gtk_main_quit();
|
gtk_main_quit();
|
||||||
gtk_widget_set_sensitive(DebugWnd, TRUE);
|
gtk_widget_set_sensitive(DebugWnd, TRUE);
|
||||||
|
@ -398,31 +452,19 @@ void OnDebug_memWrite32(GtkButton *button, gpointer user_data)
|
||||||
UpdateDebugger();
|
UpdateDebugger();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDebug_Debugger(GtkMenuItem *menuitem, gpointer user_data)
|
void Create_Debugger()
|
||||||
{
|
{
|
||||||
GtkWidget *scroll;
|
GtkWidget *scroll;
|
||||||
GtkCellRenderer *renderer;
|
GtkCellRenderer *renderer;
|
||||||
GtkTreeViewColumn *column;
|
GtkTreeViewColumn *column;
|
||||||
|
|
||||||
if (OpenPlugins(NULL) == -1) return;
|
|
||||||
|
|
||||||
/*if (!efile)
|
|
||||||
efile=GetPS2ElfName(elfname);
|
|
||||||
if (efile)
|
|
||||||
loadElfFile(elfname);
|
|
||||||
efile=0;*/
|
|
||||||
|
|
||||||
dPC = cpuRegs.pc;
|
|
||||||
|
|
||||||
DebugWnd = create_DebugWnd();
|
DebugWnd = create_DebugWnd();
|
||||||
|
|
||||||
ListDVModel = gtk_list_store_new(1, G_TYPE_STRING);
|
ListDVModel = gtk_list_store_new(1, G_TYPE_STRING);
|
||||||
ListDV = lookup_widget(DebugWnd, "GtkList_DisView");
|
ListDV = lookup_widget(DebugWnd, "GtkList_DisView");
|
||||||
gtk_tree_view_set_model(GTK_TREE_VIEW(ListDV), GTK_TREE_MODEL(ListDVModel));
|
gtk_tree_view_set_model(GTK_TREE_VIEW(ListDV), GTK_TREE_MODEL(ListDVModel));
|
||||||
renderer = gtk_cell_renderer_text_new();
|
renderer = gtk_cell_renderer_text_new();
|
||||||
column = gtk_tree_view_column_new_with_attributes("heading", renderer,
|
column = gtk_tree_view_column_new_with_attributes("heading", renderer, "text", 0, NULL);
|
||||||
"text", 0,
|
|
||||||
NULL);
|
|
||||||
gtk_tree_view_append_column(GTK_TREE_VIEW(ListDV), column);
|
gtk_tree_view_append_column(GTK_TREE_VIEW(ListDV), column);
|
||||||
scroll = lookup_widget(DebugWnd, "GtkVScrollbar_VList");
|
scroll = lookup_widget(DebugWnd, "GtkVScrollbar_VList");
|
||||||
|
|
||||||
|
@ -433,10 +475,17 @@ void OnDebug_Debugger(GtkMenuItem *menuitem, gpointer user_data)
|
||||||
DebugAdj->page_increment = (gfloat)20;
|
DebugAdj->page_increment = (gfloat)20;
|
||||||
DebugAdj->page_size = (gfloat)23;
|
DebugAdj->page_size = (gfloat)23;
|
||||||
|
|
||||||
gtk_signal_connect(GTK_OBJECT(DebugAdj),
|
gtk_signal_connect(GTK_OBJECT(DebugAdj), "value_changed", GTK_SIGNAL_FUNC(OnDebug_ScrollChange), NULL);
|
||||||
"value_changed", GTK_SIGNAL_FUNC(OnDebug_ScrollChange),
|
}
|
||||||
NULL);
|
|
||||||
|
|
||||||
|
void OnDebug_Debugger(GtkMenuItem *menuitem, gpointer user_data)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (OpenPlugins(NULL) == -1) return;
|
||||||
|
|
||||||
|
dPC = cpuRegs.pc;
|
||||||
|
|
||||||
|
Create_Debugger();
|
||||||
UpdateDebugger();
|
UpdateDebugger();
|
||||||
|
|
||||||
gtk_widget_show_all(DebugWnd);
|
gtk_widget_show_all(DebugWnd);
|
||||||
|
|
|
@ -19,40 +19,23 @@
|
||||||
#ifndef __LINUX_H__
|
#ifndef __LINUX_H__
|
||||||
#define __LINUX_H__
|
#define __LINUX_H__
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <pthread.h>
|
|
||||||
|
|
||||||
#include <X11/keysym.h>
|
|
||||||
#include <gtk/gtk.h>
|
|
||||||
#include <glib/gthread.h>
|
|
||||||
#include <gdk/gdkkeysyms.h>
|
|
||||||
#include <gtk/gtkdialog.h>
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
#include "Paths.h"
|
#include "Paths.h"
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
|
|
||||||
|
//For CpuDlg
|
||||||
#include "Counters.h"
|
#include "Counters.h"
|
||||||
#include "VUmicro.h"
|
|
||||||
#include "Plugins.h"
|
// For AdvancedDialog
|
||||||
#include "x86/ix86/ix86.h"
|
#include "x86/ix86/ix86.h"
|
||||||
#include "x86/iR5900.h"
|
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <dlfcn.h>
|
||||||
|
|
||||||
|
#include <X11/keysym.h>
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
#include <glib/gthread.h>
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
|
@ -68,48 +51,16 @@ extern "C"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void SaveConfig();
|
extern void SaveConfig();
|
||||||
|
extern int LoadConfig();
|
||||||
|
extern void SysRestorableReset();
|
||||||
extern bool UseGui;
|
extern bool UseGui;
|
||||||
|
|
||||||
extern int Pcsx2Configure();
|
extern int Pcsx2Configure();
|
||||||
|
|
||||||
extern int LoadConfig();
|
|
||||||
extern void SaveConfig();
|
|
||||||
|
|
||||||
extern void SysRestorableReset();
|
|
||||||
extern void SignalExit(int sig);
|
|
||||||
extern bool isSlotUsed(int num);
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
char lang[g_MaxPath];
|
|
||||||
} _langs;
|
|
||||||
|
|
||||||
_langs *langs;
|
|
||||||
unsigned int langsMax;
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
GS,
|
|
||||||
PAD1,
|
|
||||||
PAD2,
|
|
||||||
SPU,
|
|
||||||
CDVD,
|
|
||||||
DEV9,
|
|
||||||
USB,
|
|
||||||
FW,
|
|
||||||
BIOS
|
|
||||||
} plugin_types;
|
|
||||||
|
|
||||||
extern GtkWidget *MainWindow;
|
extern GtkWidget *MainWindow;
|
||||||
extern bool configuringplug;
|
|
||||||
|
|
||||||
|
|
||||||
char cfgfile[g_MaxPath];
|
char cfgfile[g_MaxPath];
|
||||||
|
|
||||||
/* Hacks */
|
|
||||||
|
|
||||||
int Config_hacks_backup;
|
|
||||||
|
|
||||||
#define is_checked(main_widget, widget_name) (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(main_widget, widget_name))))
|
#define is_checked(main_widget, widget_name) (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(main_widget, widget_name))))
|
||||||
#define set_checked(main_widget,widget_name, state) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(main_widget, widget_name)), state)
|
#define set_checked(main_widget,widget_name, state) gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(main_widget, widget_name)), state)
|
||||||
|
|
||||||
|
|
|
@ -232,8 +232,7 @@ void StartGui()
|
||||||
gtk_box_pack_start(GTK_BOX(lookup_widget(MainWindow, "status_box")), pStatusBar, TRUE, TRUE, 0);
|
gtk_box_pack_start(GTK_BOX(lookup_widget(MainWindow, "status_box")), pStatusBar, TRUE, TRUE, 0);
|
||||||
gtk_widget_show(pStatusBar);
|
gtk_widget_show(pStatusBar);
|
||||||
|
|
||||||
gtk_statusbar_push(GTK_STATUSBAR(pStatusBar), 0,
|
StatusBar_SetMsg( "F1 - save, F2 - next state, Shift+F2 - prev state, F3 - load, F8 - snapshot");
|
||||||
"F1 - save, F2 - next state, Shift+F2 - prev state, F3 - load, F8 - snapshot");
|
|
||||||
|
|
||||||
// add all the languages
|
// add all the languages
|
||||||
Item = lookup_widget(MainWindow, "GtkMenuItem_Language");
|
Item = lookup_widget(MainWindow, "GtkMenuItem_Language");
|
||||||
|
@ -261,7 +260,8 @@ void StartGui()
|
||||||
// disable anything not implemented or not working properly.
|
// disable anything not implemented or not working properly.
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "patch_browser1")), FALSE);
|
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "patch_browser1")), FALSE);
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "patch_finder2")), FALSE);
|
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "patch_finder2")), FALSE);
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "GtkMenuItem_Memcards")), FALSE);
|
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "GtkMenuItem_EnterDebugger")), FALSE);
|
||||||
|
//gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "GtkMenuItem_Memcards")), FALSE);
|
||||||
#ifndef PCSX2_DEVBUILD
|
#ifndef PCSX2_DEVBUILD
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "GtkMenuItem_Logging")), FALSE);
|
gtk_widget_set_sensitive(GTK_WIDGET(lookup_widget(MainWindow, "GtkMenuItem_Logging")), FALSE);
|
||||||
#endif
|
#endif
|
||||||
|
@ -526,75 +526,6 @@ void OnDebug_Logging(GtkMenuItem *menuitem, gpointer user_data)
|
||||||
gtk_main();
|
gtk_main();
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnConf_Memcards(GtkMenuItem *menuitem, gpointer user_data)
|
|
||||||
{
|
|
||||||
char file[g_MaxPath], card[g_MaxPath];
|
|
||||||
DIR *dir;
|
|
||||||
struct dirent *entry;
|
|
||||||
struct stat statinfo;
|
|
||||||
GtkWidget *memcombo1, *memcombo2;
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
MemDlg = create_MemDlg();
|
|
||||||
memcombo1 = lookup_widget(MemDlg, "memcard1combo");
|
|
||||||
memcombo2 = lookup_widget(MemDlg, "memcard2combo");
|
|
||||||
|
|
||||||
getcwd(file, ARRAYSIZE(file)); /* store current dir */
|
|
||||||
sprintf( card, "%s/%s", file, MEMCARDS_DIR );
|
|
||||||
chdir(card); /* change dirs so that plugins can find their config file*/
|
|
||||||
|
|
||||||
if ((dir = opendir(card)) == NULL)
|
|
||||||
{
|
|
||||||
Console::Error("ERROR: Could not open directory %s\n", params card);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((entry = readdir(dir)) != NULL)
|
|
||||||
{
|
|
||||||
stat(entry->d_name, &statinfo);
|
|
||||||
|
|
||||||
if (S_ISREG(statinfo.st_mode))
|
|
||||||
{
|
|
||||||
char path[g_MaxPath];
|
|
||||||
|
|
||||||
sprintf( path, "%s/%s", MEMCARDS_DIR, entry->d_name);
|
|
||||||
gtk_combo_box_append_text(GTK_COMBO_BOX(memcombo1), entry->d_name);
|
|
||||||
gtk_combo_box_append_text(GTK_COMBO_BOX(memcombo2), entry->d_name);
|
|
||||||
|
|
||||||
if (strcmp(Config.Mcd1, path) == 0)
|
|
||||||
gtk_combo_box_set_active(GTK_COMBO_BOX(memcombo1), i);
|
|
||||||
if (strcmp(Config.Mcd2, path) == 0)
|
|
||||||
gtk_combo_box_set_active(GTK_COMBO_BOX(memcombo2), i);
|
|
||||||
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
closedir(dir);
|
|
||||||
|
|
||||||
chdir(file);
|
|
||||||
gtk_widget_show_all(MemDlg);
|
|
||||||
gtk_widget_set_sensitive(MainWindow, FALSE);
|
|
||||||
gtk_main();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void OnMemcards_Ok(GtkButton *button, gpointer user_data)
|
|
||||||
{
|
|
||||||
|
|
||||||
strcpy(Config.Mcd1, MEMCARDS_DIR "/");
|
|
||||||
strcpy(Config.Mcd2, MEMCARDS_DIR "/");
|
|
||||||
|
|
||||||
strcat(Config.Mcd1, gtk_combo_box_get_active_text(GTK_COMBO_BOX(lookup_widget(MemDlg, "memcard1combo"))));
|
|
||||||
strcat(Config.Mcd2, gtk_combo_box_get_active_text(GTK_COMBO_BOX(lookup_widget(MemDlg, "memcard2combo"))));
|
|
||||||
|
|
||||||
SaveConfig();
|
|
||||||
|
|
||||||
gtk_widget_destroy(MemDlg);
|
|
||||||
gtk_widget_set_sensitive(MainWindow, TRUE);
|
|
||||||
gtk_main_quit();
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_patch_browser1_activate(GtkMenuItem *menuitem, gpointer user_data) {}
|
void on_patch_browser1_activate(GtkMenuItem *menuitem, gpointer user_data) {}
|
||||||
|
|
||||||
void on_patch_finder2_activate(GtkMenuItem *menuitem, gpointer user_data) {}
|
void on_patch_finder2_activate(GtkMenuItem *menuitem, gpointer user_data) {}
|
||||||
|
|
|
@ -21,34 +21,43 @@
|
||||||
|
|
||||||
#include "Linux.h"
|
#include "Linux.h"
|
||||||
|
|
||||||
void SignalExit(int sig);
|
|
||||||
extern bool applychanges;
|
extern bool applychanges;
|
||||||
|
|
||||||
extern SafeArray<u8>* g_RecoveryState;
|
extern SafeArray<u8>* g_RecoveryState;
|
||||||
extern bool g_EmulationInProgress; // Set TRUE if a game is actively running (set to false on reset)
|
extern bool g_EmulationInProgress; // Set TRUE if a game is actively running (set to false on reset)
|
||||||
|
|
||||||
extern void RunExecute(const char* elf_file, bool use_bios = false);
|
extern void RunExecute(const char* elf_file, bool use_bios = false);
|
||||||
void OnLanguage(GtkMenuItem *menuitem, gpointer user_data);
|
|
||||||
extern void ExecuteCpu();
|
extern void ExecuteCpu();
|
||||||
extern void CheckSlots();
|
extern void CheckSlots();
|
||||||
extern bool isSlotUsed(int num);
|
extern bool isSlotUsed(int num);
|
||||||
extern bool ParseCommandLine(int argc, char *argv[], char *file);
|
extern bool ParseCommandLine(int argc, char *argv[], char *file);
|
||||||
extern void MemoryCard_Init();
|
extern void MemoryCard_Init();
|
||||||
|
|
||||||
|
extern void StatusBar_Notice( const std::string& text );
|
||||||
|
extern void StatusBar_SetMsg( const std::string& text );
|
||||||
|
|
||||||
|
void OnLanguage(GtkMenuItem *menuitem, gpointer user_data);
|
||||||
void InitLanguages();
|
void InitLanguages();
|
||||||
char *GetLanguageNext();
|
char *GetLanguageNext();
|
||||||
void CloseLanguages();
|
void CloseLanguages();
|
||||||
|
|
||||||
void StartGui();
|
void StartGui();
|
||||||
void pcsx2_exit();
|
void pcsx2_exit();
|
||||||
GtkWidget *MainWindow;
|
|
||||||
GtkWidget *pStatusBar = NULL, *Status_Box;
|
|
||||||
GtkWidget *CmdLine; //2002-09-28 (Florin)
|
|
||||||
GtkWidget *widgetCmdLine;
|
|
||||||
GtkWidget *LogDlg, *MemDlg;
|
|
||||||
|
|
||||||
|
GtkWidget *MainWindow, *Status_Box;
|
||||||
|
GtkWidget *pStatusBar = NULL;
|
||||||
|
GtkWidget *CmdLine, *widgetCmdLine;
|
||||||
|
GtkWidget *LogDlg, *MemDlg;
|
||||||
GtkAccelGroup *AccelGroup;
|
GtkAccelGroup *AccelGroup;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char lang[g_MaxPath];
|
||||||
|
} _langs;
|
||||||
|
|
||||||
|
_langs *langs;
|
||||||
|
unsigned int langsMax;
|
||||||
|
|
||||||
const char* phelpmsg =
|
const char* phelpmsg =
|
||||||
"\tpcsx2 [options] [file]\n\n"
|
"\tpcsx2 [options] [file]\n\n"
|
||||||
"-cfg [file] {configuration file}\n"
|
"-cfg [file] {configuration file}\n"
|
||||||
|
|
|
@ -30,6 +30,25 @@ bool g_EmulationInProgress = false; // Set TRUE if a game is actively running (s
|
||||||
static bool sinit = false;
|
static bool sinit = false;
|
||||||
GtkWidget *FileSel;
|
GtkWidget *FileSel;
|
||||||
|
|
||||||
|
// For issuing notices to both the status bar and the console at the same time.
|
||||||
|
// Single-line text only please! Mutli-line msgs should be directed to the
|
||||||
|
// console directly, thanks.
|
||||||
|
void StatusBar_Notice( const std::string& text )
|
||||||
|
{
|
||||||
|
// mirror output to the console!
|
||||||
|
Console::Status( text.c_str() );
|
||||||
|
|
||||||
|
// don't try this in Visual C++ folks!
|
||||||
|
gtk_statusbar_push(GTK_STATUSBAR(pStatusBar), 0, text.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets the status bar message without mirroring the output to the console.
|
||||||
|
void StatusBar_SetMsg( const std::string& text )
|
||||||
|
{
|
||||||
|
// don't try this in Visual C++ folks!
|
||||||
|
gtk_statusbar_push(GTK_STATUSBAR(pStatusBar), 0, text.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
bool ParseCommandLine(int argc, char *argv[], char *file)
|
bool ParseCommandLine(int argc, char *argv[], char *file)
|
||||||
{
|
{
|
||||||
int i = 1;
|
int i = 1;
|
||||||
|
@ -679,7 +698,6 @@ void KeyEvent(keyEvent* ev)
|
||||||
if (CAPS_LOCK_EVT(ev->key))
|
if (CAPS_LOCK_EVT(ev->key))
|
||||||
{
|
{
|
||||||
//Set up anything we want to happen while caps lock is down.
|
//Set up anything we want to happen while caps lock is down.
|
||||||
//Config_hacks_backup = Config.Hacks;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ev->key)
|
switch (ev->key)
|
||||||
|
@ -761,7 +779,6 @@ void KeyEvent(keyEvent* ev)
|
||||||
if (CAPS_LOCK_EVT(ev->key))
|
if (CAPS_LOCK_EVT(ev->key))
|
||||||
{
|
{
|
||||||
//Release caps lock
|
//Release caps lock
|
||||||
//Config_hacks_backup = Config.Hacks;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,9 +22,14 @@
|
||||||
#include "Linux.h"
|
#include "Linux.h"
|
||||||
#include "GS.h"
|
#include "GS.h"
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
#include "x86/iR5900.h"
|
||||||
|
|
||||||
extern void StartGui();
|
extern void StartGui();
|
||||||
extern void CheckSlots();
|
extern void CheckSlots();
|
||||||
|
|
||||||
|
extern void SignalExit(int sig);
|
||||||
extern const char* g_pRunGSState;
|
extern const char* g_pRunGSState;
|
||||||
extern int efile;
|
extern int efile;
|
||||||
|
extern GtkWidget *pStatusBar;
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -6,8 +6,8 @@ bin_PROGRAMS = pcsx2
|
||||||
# the application source, library search path, and link libraries
|
# the application source, library search path, and link libraries
|
||||||
pcsx2_SOURCES = \
|
pcsx2_SOURCES = \
|
||||||
interface.c support.c LnxMain.cpp LnxThreads.cpp LnxConsole.cpp LnxSysExec.cpp \
|
interface.c support.c LnxMain.cpp LnxThreads.cpp LnxConsole.cpp LnxSysExec.cpp \
|
||||||
AboutDlg.cpp ConfigDlg.cpp DebugDlg.cpp AdvancedDlg.cpp CpuDlg.cpp HacksDlg.cpp Pref.cpp \
|
AboutDlg.cpp ConfigDlg.cpp DebugDlg.cpp AdvancedDlg.cpp CpuDlg.cpp HacksDlg.cpp McdDlgs.cpp Pref.cpp \
|
||||||
GtkGui.h Linux.h LnxMain.h ConfigDlg.h DebugDlg.h interface.h callbacks.h memzero.h support.h
|
GtkGui.h Linux.h LnxMain.h ConfigDlg.h DebugDlg.h McdDlgs.h interface.h callbacks.h memzero.h support.h
|
||||||
|
|
||||||
pcsx2_LDFLAGS =
|
pcsx2_LDFLAGS =
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
/* Pcsx2 - Pc Ps2 Emulator
|
||||||
|
* Copyright (C) 2002-2008 Pcsx2 Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "McdDlgs.h"
|
||||||
|
|
||||||
|
void OnConf_Memcards(GtkMenuItem *menuitem, gpointer user_data)
|
||||||
|
{
|
||||||
|
char file[g_MaxPath], card[g_MaxPath];
|
||||||
|
DIR *dir;
|
||||||
|
struct dirent *entry;
|
||||||
|
struct stat statinfo;
|
||||||
|
GtkWidget *memcombo1, *memcombo2;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
MemDlg = create_MemDlg();
|
||||||
|
memcombo1 = lookup_widget(MemDlg, "memcard1combo");
|
||||||
|
memcombo2 = lookup_widget(MemDlg, "memcard2combo");
|
||||||
|
|
||||||
|
getcwd(file, ARRAYSIZE(file)); /* store current dir */
|
||||||
|
sprintf( card, "%s/%s", file, MEMCARDS_DIR );
|
||||||
|
chdir(card); /* change dirs so that plugins can find their config file*/
|
||||||
|
|
||||||
|
if ((dir = opendir(card)) == NULL)
|
||||||
|
{
|
||||||
|
Console::Error("ERROR: Could not open directory %s\n", params card);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((entry = readdir(dir)) != NULL)
|
||||||
|
{
|
||||||
|
stat(entry->d_name, &statinfo);
|
||||||
|
|
||||||
|
if (S_ISREG(statinfo.st_mode))
|
||||||
|
{
|
||||||
|
char path[g_MaxPath];
|
||||||
|
|
||||||
|
sprintf( path, "%s/%s", MEMCARDS_DIR, entry->d_name);
|
||||||
|
gtk_combo_box_append_text(GTK_COMBO_BOX(memcombo1), entry->d_name);
|
||||||
|
gtk_combo_box_append_text(GTK_COMBO_BOX(memcombo2), entry->d_name);
|
||||||
|
|
||||||
|
if (strcmp(Config.Mcd1, path) == 0)
|
||||||
|
gtk_combo_box_set_active(GTK_COMBO_BOX(memcombo1), i);
|
||||||
|
if (strcmp(Config.Mcd2, path) == 0)
|
||||||
|
gtk_combo_box_set_active(GTK_COMBO_BOX(memcombo2), i);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
closedir(dir);
|
||||||
|
|
||||||
|
chdir(file);
|
||||||
|
gtk_widget_show_all(MemDlg);
|
||||||
|
gtk_widget_set_sensitive(MainWindow, FALSE);
|
||||||
|
gtk_main();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnMemcards_Ok(GtkButton *button, gpointer user_data)
|
||||||
|
{
|
||||||
|
|
||||||
|
strcpy(Config.Mcd1, MEMCARDS_DIR "/");
|
||||||
|
strcpy(Config.Mcd2, MEMCARDS_DIR "/");
|
||||||
|
|
||||||
|
strcat(Config.Mcd1, gtk_combo_box_get_active_text(GTK_COMBO_BOX(lookup_widget(MemDlg, "memcard1combo"))));
|
||||||
|
strcat(Config.Mcd2, gtk_combo_box_get_active_text(GTK_COMBO_BOX(lookup_widget(MemDlg, "memcard2combo"))));
|
||||||
|
|
||||||
|
SaveConfig();
|
||||||
|
|
||||||
|
gtk_widget_destroy(MemDlg);
|
||||||
|
gtk_widget_set_sensitive(MainWindow, TRUE);
|
||||||
|
gtk_main_quit();
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
/* Pcsx2 - Pc Ps2 Emulator
|
||||||
|
* Copyright (C) 2002-2008 Pcsx2 Team
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program 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 this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __MCDDLGS_H__
|
||||||
|
#define __MCDDLGS_H__
|
||||||
|
|
||||||
|
#include "Linux.h"
|
||||||
|
|
||||||
|
GtkWidget *MemDlg;
|
||||||
|
|
||||||
|
#endif
|
|
@ -2691,7 +2691,6 @@ create_MainWindow (void)
|
||||||
GtkMenuItem_EnterDebugger = gtk_menu_item_new_with_mnemonic (_("Enter Debugger ..."));
|
GtkMenuItem_EnterDebugger = gtk_menu_item_new_with_mnemonic (_("Enter Debugger ..."));
|
||||||
gtk_widget_show (GtkMenuItem_EnterDebugger);
|
gtk_widget_show (GtkMenuItem_EnterDebugger);
|
||||||
gtk_container_add (GTK_CONTAINER (GtkMenuItem_Debug_menu), GtkMenuItem_EnterDebugger);
|
gtk_container_add (GTK_CONTAINER (GtkMenuItem_Debug_menu), GtkMenuItem_EnterDebugger);
|
||||||
gtk_widget_set_sensitive (GtkMenuItem_EnterDebugger, FALSE);
|
|
||||||
|
|
||||||
GtkMenuItem_Logging = gtk_menu_item_new_with_mnemonic (_("Logging"));
|
GtkMenuItem_Logging = gtk_menu_item_new_with_mnemonic (_("Logging"));
|
||||||
gtk_widget_show (GtkMenuItem_Logging);
|
gtk_widget_show (GtkMenuItem_Logging);
|
||||||
|
|
|
@ -5197,7 +5197,6 @@ Version x.x</property>
|
||||||
<child>
|
<child>
|
||||||
<widget class="GtkMenuItem" id="GtkMenuItem_EnterDebugger">
|
<widget class="GtkMenuItem" id="GtkMenuItem_EnterDebugger">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="sensitive">False</property>
|
|
||||||
<property name="label" translatable="yes">Enter Debugger ...</property>
|
<property name="label" translatable="yes">Enter Debugger ...</property>
|
||||||
<property name="use_underline">True</property>
|
<property name="use_underline">True</property>
|
||||||
<signal name="activate" handler="OnDebug_Debugger"/>
|
<signal name="activate" handler="OnDebug_Debugger"/>
|
||||||
|
|
Loading…
Reference in New Issue