Linux only: Preliminary fixups for supporting the new improved commandline and g_Startup implementation.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1686 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-08-27 08:48:00 +00:00
parent 62591d04d8
commit 670def4974
5 changed files with 112 additions and 46 deletions

View File

@ -38,7 +38,7 @@
// performed quite liberally by many games (perhaps intended to keep the PS2 DVD
// from spinning down due to idle activity?).
// Cache is set to -1 for init and when the disc is removed/changed, which invokes
// a new DiskTypeCheck. Al subsequent checks use the non-negative value here.
// a new DiskTypeCheck. All subsequent checks use the non-negative value here.
//
static int diskTypeCached = -1;
@ -47,9 +47,9 @@ int lastReadSize;
// Records last read block length for block dumping
static int plsn = 0;
static isoFile *blockDumpFile;
static isoFile *blockDumpFile = NULL;
// Assertion check for CDVD != NULL (in devel and debgu builds), because its handier than
// Assertion check for CDVD != NULL (in devel and debug builds), because its handier than
// relying on DEP exceptions -- and a little more reliable too.
static void CheckNullCDVD()
{
@ -103,8 +103,6 @@ int CheckDiskTypeFS(int baseType)
return CDVD_TYPE_ILLEGAL; // << Only for discs which aren't ps2 at all.
}
static char bleh[2352];
static int FindDiskType(int mType)
{
int dataTracks = 0;
@ -120,6 +118,7 @@ static int FindDiskType(int mType)
}
else if (mType < 0)
{
static char bleh[2352];
cdvdTD td;
CDVD->getTD(0,&td);

View File

@ -30,7 +30,6 @@ char elfname[g_MaxPath];
int main(int argc, char *argv[])
{
char *file = NULL;
char elfname[g_MaxPath];
efile = 0;
@ -62,7 +61,7 @@ int main(int argc, char *argv[])
memset(&g_Startup, 0, sizeof(g_Startup));
#endif
if (!ParseCommandLine(argc, argv, file)) return 0;
if (!ParseCommandLine(argc, argv)) return 0;
// make gtk thread safe if using MTGS
if (CHECK_MULTIGS)
@ -127,21 +126,18 @@ int main(int argc, char *argv[])
return 0;
}
#endif
if (!g_Startup.NoGui && (file == NULL))
if( !g_Startup.Enabled )
{
StartGui();
return 0;
}
if (OpenPlugins(file) == -1) return -1;
CDVDsys_ChangeSource( g_Startup.CdvdSource );
DoCDVDopen( g_Startup.ImageName );
if (OpenPlugins() == -1) return -1;
SysReset();
cpuExecuteBios();
if (file) strcpy(elfname, file);
if (!efile) efile = GetPS2ElfName(elfname);
loadElfFile(elfname);
SysPrepareExecution( (g_Startup.StartupMode == Startup_FromELF) ? g_Startup.ImageName : NULL, !g_Startup.SkipBios );
return 0;
}
@ -332,15 +328,16 @@ void OnLanguage(GtkMenuItem *menuitem, gpointer user_data)
void OnFile_RunCD(GtkMenuItem *menuitem, gpointer user_data)
{
CDVD = CDVD_plugin;
//SysReset();
SysReset();
CDVDsys_ChangeSource( CDVDsrc_Plugin );
DoCDVDopen( NULL );
SysPrepareExecution(NULL);
}
void OnFile_RunBIOS(GtkMenuItem *menuitem, gpointer user_data)
{
CDVD = NODISC;
SysReset();
CDVDsys_ChangeSource( CDVDsrc_NoDisc );
SysPrepareExecution(NULL, true);
}
@ -348,13 +345,13 @@ void OnRunIso_Ok(GtkButton* button, gpointer user_data)
{
gchar *File;
string curdir;
CDVD = ISO;
File = (gchar*)gtk_file_selection_get_filename(GTK_FILE_SELECTION(FileSel));
strcpy(isoFileName, File);
gtk_widget_destroy(FileSel);
//SysReset();
SysReset();
CDVDsys_ChangeSource( CDVDsrc_Iso );
DoCDVDopen( FileSel );
SysPrepareExecution( NULL );
}
@ -387,6 +384,9 @@ void OnFile_BlockDump(GtkMenuItem *menuitem, gpointer user_data)
SaveConfig();
}
// Currently this OnRunElf function uses the CDVDplugin source. It's also valid to use the
// Iso and NoDisc sources when running ELF files, although those need new menu commands and
// are outside the scope of my GTK capabilities. ;) -- air
void OnRunElf_Ok(GtkButton* button, gpointer user_data)
{
gchar *File;
@ -395,6 +395,9 @@ void OnRunElf_Ok(GtkButton* button, gpointer user_data)
strcpy(elfname, File);
gtk_widget_destroy(FileSel);
SysReset();
CDVDsys_ChangeSource( CDVDsrc_Plugin );
OpenCDVD( NULL );
SysPrepareExecution(elfname);
}
@ -407,7 +410,7 @@ void OnFile_LoadElf(GtkMenuItem *menuitem, gpointer user_data)
{
GtkWidget *Ok, *Cancel;
FileSel = gtk_file_selection_new("Select Psx Elf File");
FileSel = gtk_file_selection_new("Select PS2 Elf File");
Ok = GTK_FILE_SELECTION(FileSel)->ok_button;
gtk_signal_connect(GTK_OBJECT(Ok), "clicked", GTK_SIGNAL_FUNC(OnRunElf_Ok), NULL);

View File

@ -29,7 +29,7 @@
extern bool applychanges;
extern bool Slots[5];
extern bool ParseCommandLine(int argc, char *argv[], char *file);
extern bool ParseCommandLine(int argc, char *argv[], char **file);
extern void MemoryCard_Init();
void OnLanguage(GtkMenuItem *menuitem, gpointer user_data);

View File

@ -87,74 +87,137 @@ __noinline void SysPageFaultExceptionFilter( int signal, siginfo_t *info, void *
mmap_ClearCpuBlock( offset & ~m_pagemask );
}
bool ParseCommandLine(int argc, char *argv[], char *file)
#define CmdSwitchIs( text ) ( stricmp( token, text ) == 0 )
bool ParseCommandLine(int argc, const char *argv[])
{
int i = 1;
g_Startup.BootMode = BootMode_Bios;
g_Startup.Enabled = false;
g_Startup.NoGui = false;
g_Startup.ImageName = NULL;
g_Startup.ElfFile = NULL;
g_Startup.StartupMode = Startup_FromCDVD;
g_Startup.SkipBios = true;
g_Startup.CdvdSource = CDVDsrc_Plugin;
bool _legacy_ForceElfLoad = false;
while (i < argc)
{
char* token = argv[i++];
const char* token = argv[i++];
if (stricmp(token, "-help") == 0 || stricmp(token, "--help") == 0 || stricmp(token, "-h") == 0)
if (CmdSwitchIs("-help") || CmdSwitchIs("--help") || CmdSwitchIs("-h"))
{
//Msgbox::Alert( phelpmsg );
return false;
}
else if (stricmp(token, "-nogui") == 0)
else if (CmdSwitchIs("-nogui"))
{
g_Startup.NoGui = FALSE;
g_Startup.NoGui = true;
g_Startup.Enabled = true;
}
else if (stricmp(token, "-loadgs") == 0)
else if( CmdSwitchIs( "skipbios" ) ) {
g_Startup.SkipBios = true;
}
else if( CmdSwitchIs( "nodisc" ) ) {
g_Startup.CdvdSource = CDVDsrc_NoDisc;
g_Startup.Enabled = true;
}
else if( CmdSwitchIs( "usecd" ) ) {
g_Startup.CdvdSource = CDVDsrc_Plugin;
g_Startup.Enabled = true;
}
else if( CmdSwitchIs( "elf" ) ) {
g_Startup.StartupMode = Startup_FromELF;
token = argv[i++];
g_Startup.ElfFile = token;
g_Startup.Enabled = true;
}
// depreciated command switch
else if (CmdSwitchIs("-bootmode"))
{
token = argv[i++];
int mode = atoi( token );
g_Startup.Enabled = true;
g_Startup.SkipBios = !( mode & 0x10000 );
switch( mode & 0xf )
{
case 0:
g_Startup.CdvdSource = CDVDsrc_Plugin;
break;
case 1:
_legacy_ForceElfLoad = true;
break;
case 2:
g_Startup.CdvdSource = CDVDsrc_Iso;
break;
case 3:
g_Startup.CdvdSource = CDVDsrc_NoDisc;
break;
}
}
else if (CmdSwitchIs("-loadgs"))
{
g_pRunGSState = argv[i++];
}
else if( strcmp(token, "-bootmode" ) == 0)
{
token = argv[i++];
g_Startup.BootMode = (StartupMode)atoi( token);
g_Startup.Enabled = true;
}
else if (stricmp(token, "-gs") == 0)
else if (CmdSwitchIs("-gs"))
{
token = argv[i++];
g_Startup.gsdll = token;
}
else if (stricmp(token, "-cdvd") == 0)
else if (CmdSwitchIs("-cdvd"))
{
token = argv[i++];
g_Startup.cdvddll = token;
}
else if (stricmp(token, "-spu") == 0)
else if (CmdSwitchIs("-spu"))
{
token = argv[i++];
g_Startup.spudll = token;
}
else if (stricmp(token, "-pad") == 0)
else if (CmdSwitchIs("-pad"))
{
token = argv[i++];
g_Startup.pad1dll = token;
g_Startup.pad2dll = token;
}
else if (stricmp(token, "-pad1") == 0)
else if (CmdSwitchIs("-pad1"))
{
token = argv[i++];
g_Startup.pad1dll = token;
}
else if (stricmp(token, "-pad2") == 0)
else if (CmdSwitchIs("-pad2"))
{
token = argv[i++];
g_Startup.pad2dll = token;
}
else if (stricmp(token, "-loadgs") == 0)
else if (CmdSwitchIs("-loadgs"))
{
token = argv[i++];
g_pRunGSState = token;
}
else
{
file = token;
printf("opening file %s\n", file);
printf("opening file %s\n", token);
g_Startup.ImageName = token;
g_Startup.Enabled = true;
g_Startup.CdvdSource = CDVDsrc_Iso;
if( _legacy_ForceElfLoad )
{
// This retains compatibility with the older Bootmode switch.
g_Startup.ElfFile = file;
g_Startup.StartupMode = Startup_FromELF;
g_Startup.CdvdSource = CDVDsrc_Plugin;
}
}
}
return true;

View File

@ -140,6 +140,7 @@ int ParseCommandLine( int tokenCount, TCHAR *const *const tokens )
else if( CmdSwitchIs( "elf" ) ) {
g_Startup.StartupMode = Startup_FromELF;
g_Startup.ElfFile = param;
g_Startup.Enabled = true;
}
else if( CmdSwitchIs( "loadgs" ) ) {