mirror of https://github.com/PCSX2/pcsx2.git
wxGui branch: [linux] Added workspaces and projects for Code::Blocks IDE. Main workspace is currently located in pcsx2/linux/ (will move it to a top level later), and only Pcsx2/zlib projects are tested (and working!). Haven't gotten to any plugins yet.
The CodeBlocks project is tested for Debug builds only, and will generate the executable binary to /yoursvnroot/bin/ [same as the MSVC/Win32 build does]. * Note: The 'regular' build script is currently broken and I haven't a darnedest clue how to fix it, since my knowledge of Automake doesn't extend past the end of this sentence. git-svn-id: http://pcsx2.googlecode.com/svn/branches/wxgui@1079 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
d9f367f03f
commit
01c01e9c34
|
@ -0,0 +1,100 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||||
|
<CodeBlocks_project_file>
|
||||||
|
<FileVersion major="1" minor="6" />
|
||||||
|
<Project>
|
||||||
|
<Option title="zlib" />
|
||||||
|
<Option pch_mode="2" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Build>
|
||||||
|
<Target title="Debug">
|
||||||
|
<Option output="../../deps/zlib-dbg" prefix_auto="0" extension_auto="1" />
|
||||||
|
<Option working_dir="" />
|
||||||
|
<Option object_output="/home/pubuntu/Documents/pcsx2-newgui/3rdparty/zlib/.objs" />
|
||||||
|
<Option type="2" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Option createDefFile="1" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-W" />
|
||||||
|
<Add option="-g" />
|
||||||
|
<Add option="-O0" />
|
||||||
|
</Compiler>
|
||||||
|
</Target>
|
||||||
|
<Target title="Release">
|
||||||
|
<Option output="../../deps/zlib" prefix_auto="0" extension_auto="1" />
|
||||||
|
<Option working_dir="" />
|
||||||
|
<Option object_output="/home/pubuntu/Documents/pcsx2-newgui/3rdparty/zlib/.objs" />
|
||||||
|
<Option type="2" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Option createDefFile="1" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-W" />
|
||||||
|
<Add option="-O2" />
|
||||||
|
</Compiler>
|
||||||
|
</Target>
|
||||||
|
<Target title="Devel">
|
||||||
|
<Option output="../../deps/libzlib-dev" prefix_auto="1" extension_auto="1" />
|
||||||
|
<Option working_dir="" />
|
||||||
|
<Option object_output="/home/pubuntu/Documents/pcsx2-newgui/3rdparty/zlib/.objs" />
|
||||||
|
<Option type="2" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Option createDefFile="1" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-W" />
|
||||||
|
<Add option="-O2" />
|
||||||
|
</Compiler>
|
||||||
|
</Target>
|
||||||
|
</Build>
|
||||||
|
<Unit filename="adler32.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="compress.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="crc32.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="crc32.h" />
|
||||||
|
<Unit filename="deflate.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="deflate.h" />
|
||||||
|
<Unit filename="gzio.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="infback.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="inffast.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="inffast.h" />
|
||||||
|
<Unit filename="inffixed.h" />
|
||||||
|
<Unit filename="inflate.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="inflate.h" />
|
||||||
|
<Unit filename="inftrees.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="inftrees.h" />
|
||||||
|
<Unit filename="trees.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="trees.h" />
|
||||||
|
<Unit filename="uncompr.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="zconf.h" />
|
||||||
|
<Unit filename="zlib.h" />
|
||||||
|
<Unit filename="zutil.c">
|
||||||
|
<Option compilerVar="CC" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="zutil.h" />
|
||||||
|
<Extensions>
|
||||||
|
<envvars />
|
||||||
|
<code_completion />
|
||||||
|
<lib_finder disable_auto="1" />
|
||||||
|
<debugger />
|
||||||
|
</Extensions>
|
||||||
|
</Project>
|
||||||
|
</CodeBlocks_project_file>
|
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -39,11 +39,11 @@ struct ELF_HEADER {
|
||||||
u32 e_shoff; //Start of section headers (offset from file start)
|
u32 e_shoff; //Start of section headers (offset from file start)
|
||||||
u32 e_flags; //Processor specific flags = 0x20924001 noreorder, mips
|
u32 e_flags; //Processor specific flags = 0x20924001 noreorder, mips
|
||||||
u16 e_ehsize; //ELF header size (0x34 = 52 bytes)
|
u16 e_ehsize; //ELF header size (0x34 = 52 bytes)
|
||||||
u16 e_phentsize; //Program headers entry size
|
u16 e_phentsize; //Program headers entry size
|
||||||
u16 e_phnum; //Number of program headers
|
u16 e_phnum; //Number of program headers
|
||||||
u16 e_shentsize; //Section headers entry size
|
u16 e_shentsize; //Section headers entry size
|
||||||
u16 e_shnum; //Number of section headers
|
u16 e_shnum; //Number of section headers
|
||||||
u16 e_shstrndx; //Section header stringtable index
|
u16 e_shstrndx; //Section header stringtable index
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ELF_PHR {
|
struct ELF_PHR {
|
||||||
|
@ -94,7 +94,7 @@ Type:
|
||||||
5=HASH hash table
|
5=HASH hash table
|
||||||
6=DYNAMIC dynamic linking information
|
6=DYNAMIC dynamic linking information
|
||||||
7=NOTE
|
7=NOTE
|
||||||
8=NOBITS
|
8=NOBITS
|
||||||
9=REL relocation entries
|
9=REL relocation entries
|
||||||
10=SHLIB
|
10=SHLIB
|
||||||
0x70000000=LOPROC processor specifc
|
0x70000000=LOPROC processor specifc
|
||||||
|
@ -171,25 +171,25 @@ static uint parseCommandLine( const wxString& filename )
|
||||||
p++;
|
p++;
|
||||||
else
|
else
|
||||||
p = filename;
|
p = filename;
|
||||||
|
|
||||||
args_ptr -= strlen( p ) + 1;
|
args_ptr -= strlen( p ) + 1;
|
||||||
|
|
||||||
strcpy( (char*)&PS2MEM_BASE[ args_ptr ], p ); //fill param 0; i.e. name of the program
|
strcpy( (char*)&PS2MEM_BASE[ args_ptr ], p ); //fill param 0; i.e. name of the program
|
||||||
|
|
||||||
for ( i = strlen( p ) + 1 + 256, argc = 0; i > 0; i-- )
|
for ( i = strlen( p ) + 1 + 256, argc = 0; i > 0; i-- )
|
||||||
{
|
{
|
||||||
while (i && ((PS2MEM_BASE[ args_ptr + i ] == 0) || (PS2MEM_BASE[ args_ptr + i ] == 32)))
|
while (i && ((PS2MEM_BASE[ args_ptr + i ] == 0) || (PS2MEM_BASE[ args_ptr + i ] == 32)))
|
||||||
{ i--; }
|
{ i--; }
|
||||||
|
|
||||||
if ( PS2MEM_BASE[ args_ptr + i + 1 ] == ' ') PS2MEM_BASE[ args_ptr + i + 1 ] = 0;
|
if ( PS2MEM_BASE[ args_ptr + i + 1 ] == ' ') PS2MEM_BASE[ args_ptr + i + 1 ] = 0;
|
||||||
|
|
||||||
while (i && (PS2MEM_BASE[ args_ptr + i ] != 0) && (PS2MEM_BASE[ args_ptr + i] != 32))
|
while (i && (PS2MEM_BASE[ args_ptr + i ] != 0) && (PS2MEM_BASE[ args_ptr + i] != 32))
|
||||||
{ i--; }
|
{ i--; }
|
||||||
|
|
||||||
if ((PS2MEM_BASE[ args_ptr + i ] != 0) && (PS2MEM_BASE[ args_ptr + i ] != 32))
|
if ((PS2MEM_BASE[ args_ptr + i ] != 0) && (PS2MEM_BASE[ args_ptr + i ] != 32))
|
||||||
{ //i==0
|
{ //i==0
|
||||||
argc++;
|
argc++;
|
||||||
|
|
||||||
if ( args_ptr - 4 - 4 - argc * 4 < 0 ) // fixme - Should this be cast to a signed int?
|
if ( args_ptr - 4 - 4 - argc * 4 < 0 ) // fixme - Should this be cast to a signed int?
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -241,7 +241,7 @@ struct ElfObject
|
||||||
|
|
||||||
if( header.e_phnum > 0 )
|
if( header.e_phnum > 0 )
|
||||||
proghead = (ELF_PHR*)&data[header.e_phoff];
|
proghead = (ELF_PHR*)&data[header.e_phoff];
|
||||||
|
|
||||||
if( header.e_shnum > 0 )
|
if( header.e_shnum > 0 )
|
||||||
secthead = (ELF_SHR*)&data[header.e_shoff];
|
secthead = (ELF_SHR*)&data[header.e_shoff];
|
||||||
|
|
||||||
|
@ -252,9 +252,9 @@ struct ElfObject
|
||||||
Console::Error( "ElfLoader Warning > Size of program headers is not standard" );
|
Console::Error( "ElfLoader Warning > Size of program headers is not standard" );
|
||||||
|
|
||||||
ELF_LOG( "type: " );
|
ELF_LOG( "type: " );
|
||||||
switch( header.e_type )
|
switch( header.e_type )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
ELF_LOG( "unknown %x", header.e_type );
|
ELF_LOG( "unknown %x", header.e_type );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -266,14 +266,14 @@ struct ElfObject
|
||||||
ELF_LOG( "relocatable" );
|
ELF_LOG( "relocatable" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x2:
|
case 0x2:
|
||||||
ELF_LOG( "executable" );
|
ELF_LOG( "executable" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ELF_LOG( "\n" );
|
ELF_LOG( "\n" );
|
||||||
ELF_LOG( "machine: " );
|
ELF_LOG( "machine: " );
|
||||||
|
|
||||||
switch ( header.e_machine )
|
switch ( header.e_machine )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
ELF_LOG( "unknown" );
|
ELF_LOG( "unknown" );
|
||||||
|
@ -283,7 +283,7 @@ struct ElfObject
|
||||||
ELF_LOG( "mips_rs3000" );
|
ELF_LOG( "mips_rs3000" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ELF_LOG("\n");
|
ELF_LOG("\n");
|
||||||
ELF_LOG("version: %d",header.e_version);
|
ELF_LOG("version: %d",header.e_version);
|
||||||
ELF_LOG("entry: %08x",header.e_entry);
|
ELF_LOG("entry: %08x",header.e_entry);
|
||||||
|
@ -296,7 +296,7 @@ struct ElfObject
|
||||||
ELF_LOG("sh entsiz: %08x",header.e_shentsize);
|
ELF_LOG("sh entsiz: %08x",header.e_shentsize);
|
||||||
ELF_LOG("sh num: %08x",header.e_shnum);
|
ELF_LOG("sh num: %08x",header.e_shnum);
|
||||||
ELF_LOG("sh strndx: %08x",header.e_shstrndx);
|
ELF_LOG("sh strndx: %08x",header.e_shstrndx);
|
||||||
|
|
||||||
ELF_LOG("\n");
|
ELF_LOG("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -308,9 +308,9 @@ struct ElfObject
|
||||||
(strnicmp( work.data(), "cdrom1:", strlen("cdromN:")) == 0))
|
(strnicmp( work.data(), "cdrom1:", strlen("cdromN:")) == 0))
|
||||||
{
|
{
|
||||||
int fi = CDVDFS_open(work.data() + strlen("cdromN:"), 1);//RDONLY
|
int fi = CDVDFS_open(work.data() + strlen("cdromN:"), 1);//RDONLY
|
||||||
|
|
||||||
if (fi < 0) throw Exception::FileNotFound( filename );
|
if (fi < 0) throw Exception::FileNotFound( filename );
|
||||||
|
|
||||||
CDVDFS_lseek( fi, 0, SEEK_SET );
|
CDVDFS_lseek( fi, 0, SEEK_SET );
|
||||||
rsize = CDVDFS_read( fi, (char*)data.GetPtr(), data.GetSizeInBytes() );
|
rsize = CDVDFS_read( fi, (char*)data.GetPtr(), data.GetSizeInBytes() );
|
||||||
CDVDFS_close( fi );
|
CDVDFS_close( fi );
|
||||||
|
@ -321,7 +321,7 @@ struct ElfObject
|
||||||
|
|
||||||
f = fopen( work.data(), "rb" );
|
f = fopen( work.data(), "rb" );
|
||||||
if( f == NULL ) Exception::FileNotFound( filename );
|
if( f == NULL ) Exception::FileNotFound( filename );
|
||||||
|
|
||||||
fseek( f, 0, SEEK_SET );
|
fseek( f, 0, SEEK_SET );
|
||||||
rsize = fread( data.GetPtr(), 1, data.GetSizeInBytes(), f );
|
rsize = fread( data.GetPtr(), 1, data.GetSizeInBytes(), f );
|
||||||
fclose( f );
|
fclose( f );
|
||||||
|
@ -349,9 +349,9 @@ struct ElfObject
|
||||||
|
|
||||||
for( int i = 0 ; i < header.e_phnum ; i++ )
|
for( int i = 0 ; i < header.e_phnum ; i++ )
|
||||||
{
|
{
|
||||||
ELF_LOG( "Elf32 Program Header" );
|
ELF_LOG( "Elf32 Program Header" );
|
||||||
ELF_LOG( "type: " );
|
ELF_LOG( "type: " );
|
||||||
|
|
||||||
switch ( proghead[ i ].p_type ) {
|
switch ( proghead[ i ].p_type ) {
|
||||||
default:
|
default:
|
||||||
ELF_LOG( "unknown %x", (int)proghead[ i ].p_type );
|
ELF_LOG( "unknown %x", (int)proghead[ i ].p_type );
|
||||||
|
@ -385,7 +385,7 @@ struct ElfObject
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ELF_LOG("\n");
|
ELF_LOG("\n");
|
||||||
ELF_LOG("offset: %08x",(int)proghead[i].p_offset);
|
ELF_LOG("offset: %08x",(int)proghead[i].p_offset);
|
||||||
ELF_LOG("vaddr: %08x",(int)proghead[i].p_vaddr);
|
ELF_LOG("vaddr: %08x",(int)proghead[i].p_vaddr);
|
||||||
|
@ -398,13 +398,13 @@ struct ElfObject
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadSectionHeaders()
|
void loadSectionHeaders()
|
||||||
{
|
{
|
||||||
if( secthead == NULL || header.e_shoff > (u32)data.GetLength() )
|
if( secthead == NULL || header.e_shoff > (u32)data.GetLength() )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const u8* sections_names = data.GetPtr( secthead[ (header.e_shstrndx == 0xffff ? 0 : header.e_shstrndx) ].sh_offset );
|
const u8* sections_names = data.GetPtr( secthead[ (header.e_shstrndx == 0xffff ? 0 : header.e_shstrndx) ].sh_offset );
|
||||||
|
|
||||||
int i_st = -1;
|
int i_st = -1;
|
||||||
int i_dt = -1;
|
int i_dt = -1;
|
||||||
|
|
||||||
|
@ -415,11 +415,11 @@ struct ElfObject
|
||||||
// used by parseCommandLine
|
// used by parseCommandLine
|
||||||
//if ( secthead[i].sh_flags & 0x2 )
|
//if ( secthead[i].sh_flags & 0x2 )
|
||||||
// args_ptr = min( args_ptr, secthead[ i ].sh_addr & 0x1ffffff );
|
// args_ptr = min( args_ptr, secthead[ i ].sh_addr & 0x1ffffff );
|
||||||
|
|
||||||
#ifdef PCSX2_DEVBULD
|
#ifdef PCSX2_DEVBULD
|
||||||
ELF_LOG("\n");
|
ELF_LOG("\n");
|
||||||
ELF_LOG("type: ");
|
ELF_LOG("type: ");
|
||||||
|
|
||||||
switch ( secthead[ i ].sh_type )
|
switch ( secthead[ i ].sh_type )
|
||||||
{
|
{
|
||||||
case 0x0: ELF_LOG("null"); break;
|
case 0x0: ELF_LOG("null"); break;
|
||||||
|
@ -431,7 +431,7 @@ struct ElfObject
|
||||||
case 0x9: ELF_LOG("rel"); break;
|
case 0x9: ELF_LOG("rel"); break;
|
||||||
default: ELF_LOG("unknown %08x",secthead[i].sh_type); break;
|
default: ELF_LOG("unknown %08x",secthead[i].sh_type); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ELF_LOG("\n");
|
ELF_LOG("\n");
|
||||||
ELF_LOG("flags: %08x", secthead[i].sh_flags);
|
ELF_LOG("flags: %08x", secthead[i].sh_flags);
|
||||||
ELF_LOG("addr: %08x", secthead[i].sh_addr);
|
ELF_LOG("addr: %08x", secthead[i].sh_addr);
|
||||||
|
@ -442,11 +442,11 @@ struct ElfObject
|
||||||
ELF_LOG("addralign: %08x", secthead[i].sh_addralign);
|
ELF_LOG("addralign: %08x", secthead[i].sh_addralign);
|
||||||
ELF_LOG("entsize: %08x", secthead[i].sh_entsize);
|
ELF_LOG("entsize: %08x", secthead[i].sh_entsize);
|
||||||
// dump symbol table
|
// dump symbol table
|
||||||
|
|
||||||
if( secthead[ i ].sh_type == 0x02 )
|
if( secthead[ i ].sh_type == 0x02 )
|
||||||
{
|
{
|
||||||
i_st = i;
|
i_st = i;
|
||||||
i_dt = secthead[i].sh_link;
|
i_dt = secthead[i].sh_link;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -483,7 +483,7 @@ void ElfApplyPatches()
|
||||||
Console::WriteLn( "XML Loader returned an error. Trying to load a pnach..." );
|
Console::WriteLn( "XML Loader returned an error. Trying to load a pnach..." );
|
||||||
inifile_read( filename.ToAscii().data() );
|
inifile_read( filename.ToAscii().data() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Console::WriteLn( "XML Loading success. Will not load from pnach..." );
|
Console::WriteLn( "XML Loading success. Will not load from pnach..." );
|
||||||
|
|
||||||
applypatch( 0 );
|
applypatch( 0 );
|
||||||
|
@ -530,7 +530,7 @@ int loadElfFile(const wxString& filename)
|
||||||
if( !filename.StartsWith( L"cdrom0:" ) && !filename.StartsWith( L"cdrom1:" ) )
|
if( !filename.StartsWith( L"cdrom0:" ) && !filename.StartsWith( L"cdrom1:" ) )
|
||||||
{
|
{
|
||||||
// Loading from a file (or non-cd image)
|
// Loading from a file (or non-cd image)
|
||||||
|
|
||||||
elfsize = Path::GetFileSize( filename );
|
elfsize = Path::GetFileSize( filename );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -551,8 +551,8 @@ int loadElfFile(const wxString& filename)
|
||||||
if( elfobj.proghead == NULL )
|
if( elfobj.proghead == NULL )
|
||||||
{
|
{
|
||||||
throw Exception::CpuStateShutdown(
|
throw Exception::CpuStateShutdown(
|
||||||
wxsFormat( wxT("Invalid ELF header encountered in file:\n\t%s"), elfobj.filename ),
|
wxsFormat( wxT("Invalid ELF header encountered in file:\n\t%s"), elfobj.filename.c_str() ),
|
||||||
wxsFormat(_("Invalid ELF header, file: %s"), elfobj.filename )
|
wxsFormat(_("Invalid ELF header, file: %s"), elfobj.filename.c_str() )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -561,10 +561,10 @@ int loadElfFile(const wxString& filename)
|
||||||
|
|
||||||
elfobj.loadProgramHeaders();
|
elfobj.loadProgramHeaders();
|
||||||
elfobj.loadSectionHeaders();
|
elfobj.loadSectionHeaders();
|
||||||
|
|
||||||
cpuRegs.pc = elfobj.header.e_entry; //set pc to proper place
|
cpuRegs.pc = elfobj.header.e_entry; //set pc to proper place
|
||||||
ELF_LOG( "PC set to: %8.8lx", cpuRegs.pc );
|
ELF_LOG( "PC set to: %8.8lx", cpuRegs.pc );
|
||||||
|
|
||||||
cpuRegs.GPR.n.sp.UL[0] = 0x81f00000;
|
cpuRegs.GPR.n.sp.UL[0] = 0x81f00000;
|
||||||
cpuRegs.GPR.n.gp.UL[0] = 0x81f80000; // might not be 100% ok
|
cpuRegs.GPR.n.gp.UL[0] = 0x81f80000; // might not be 100% ok
|
||||||
//cpuRegs.GPR.n.a0.UL[0] = parseCommandLine( filename ); // see #ifdef'd out parseCommendLine for details.
|
//cpuRegs.GPR.n.a0.UL[0] = parseCommandLine( filename ); // see #ifdef'd out parseCommendLine for details.
|
||||||
|
@ -592,7 +592,7 @@ extern bool path3hack;
|
||||||
int g_VUGameFixes = 0;
|
int g_VUGameFixes = 0;
|
||||||
|
|
||||||
// fixme - this should be moved to patches or eliminated
|
// fixme - this should be moved to patches or eliminated
|
||||||
void LoadGameSpecificSettings()
|
void LoadGameSpecificSettings()
|
||||||
{
|
{
|
||||||
// default
|
// default
|
||||||
g_VUGameFixes = 0;
|
g_VUGameFixes = 0;
|
||||||
|
@ -604,6 +604,6 @@ void LoadGameSpecificSettings()
|
||||||
//case 0xa08c4057: //Sprint Cars (SLUS)
|
//case 0xa08c4057: //Sprint Cars (SLUS)
|
||||||
//case 0x8b0725d5: //Flinstones Bedrock Racing (SLES)
|
//case 0x8b0725d5: //Flinstones Bedrock Racing (SLES)
|
||||||
//path3hack = TRUE; // We can move this to patch files right now
|
//path3hack = TRUE; // We can move this to patch files right now
|
||||||
//break;
|
//break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -46,22 +46,23 @@ namespace Exception
|
||||||
{
|
{
|
||||||
// Major hack. After a couple of tries, I'm still not managing to get Linux to catch these exceptions, so that the user actually
|
// Major hack. After a couple of tries, I'm still not managing to get Linux to catch these exceptions, so that the user actually
|
||||||
// gets the messages. Since Console is unavailable at this level, I'm using a simple printf, which of course, means it doesn't get
|
// gets the messages. Since Console is unavailable at this level, I'm using a simple printf, which of course, means it doesn't get
|
||||||
// logged. But at least the user sees it.
|
// logged. But at least the user sees it.
|
||||||
//
|
//
|
||||||
// I'll rip this out once I get Linux to actually catch these exceptions. Say, in BeginExecution or StartGui, like I would expect.
|
// I'll rip this out once I get Linux to actually catch these exceptions. Say, in BeginExecution or StartGui, like I would expect.
|
||||||
// -- arcum42
|
// -- arcum42
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
printf(msg.c_str());
|
wxLogError( msg_eng.c_str() );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// given message is assumed to be a translation key, and will be stored in translated
|
// given message is assumed to be a translation key, and will be stored in translated
|
||||||
// and untranslated forms.
|
// and untranslated forms.
|
||||||
BaseException::BaseException( const char* msg_eng ) :
|
BaseException::BaseException( const char* msg_eng ) :
|
||||||
m_message_eng( GetEnglish( msg_eng ) ),
|
m_message_eng( GetEnglish( msg_eng ) ),
|
||||||
m_message( GetTranslation( msg_eng ) ),
|
m_message( GetTranslation( msg_eng ) ),
|
||||||
m_stacktrace( wxEmptyString ) // unsupported yet
|
m_stacktrace( wxEmptyString ) // unsupported yet
|
||||||
{
|
{
|
||||||
|
wxLogError( m_message_eng.c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString BaseException::LogMessage() const
|
wxString BaseException::LogMessage() const
|
||||||
|
@ -74,7 +75,7 @@ namespace Exception
|
||||||
{
|
{
|
||||||
return wxsFormat(
|
return wxsFormat(
|
||||||
wxT("Stream exception: %s\n\tObject name: %s"),
|
wxT("Stream exception: %s\n\tObject name: %s"),
|
||||||
m_message_eng, StreamName.c_str()
|
m_message_eng.c_str(), StreamName.c_str()
|
||||||
) + m_stacktrace;
|
) + m_stacktrace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +95,7 @@ namespace Exception
|
||||||
|
|
||||||
wxString PluginFailure::DisplayMessage() const
|
wxString PluginFailure::DisplayMessage() const
|
||||||
{
|
{
|
||||||
return wxsFormat( m_message, plugin_name );
|
return wxsFormat( m_message, plugin_name.c_str() );
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
|
@ -138,7 +139,7 @@ namespace Exception
|
||||||
Crc_Savestate, Crc_Cdvd
|
Crc_Savestate, Crc_Cdvd
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString StateCrcMismatch::DisplayMessage() const
|
wxString StateCrcMismatch::DisplayMessage() const
|
||||||
{
|
{
|
||||||
return wxsFormat(
|
return wxsFormat(
|
||||||
|
@ -149,11 +150,11 @@ namespace Exception
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------
|
// ------------------------------------------------------------------------
|
||||||
wxString IndexBoundsFault::LogMessage() const
|
wxString IndexBoundsFault::LogMessage() const
|
||||||
{
|
{
|
||||||
return wxT("Index out of bounds on SafeArray: ") + ArrayName +
|
return wxT("Index out of bounds on SafeArray: ") + ArrayName +
|
||||||
wxsFormat( wxT("(index=%d, size=%d)"), BadIndex, ArrayLength );
|
wxsFormat( wxT("(index=%d, size=%d)"), BadIndex, ArrayLength );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
96
pcsx2/GS.cpp
96
pcsx2/GS.cpp
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -52,61 +52,61 @@ int g_SaveGSStream = 0; // save GS stream; 1 - prepare, 2 - save
|
||||||
int g_nLeftGSFrames = 0; // when saving, number of frames left
|
int g_nLeftGSFrames = 0; // when saving, number of frames left
|
||||||
gzSavingState* g_fGSSave;
|
gzSavingState* g_fGSSave;
|
||||||
|
|
||||||
void GSGIFTRANSFER1(u32 *pMem, u32 addr) {
|
void GSGIFTRANSFER1(u32 *pMem, u32 addr) {
|
||||||
if( g_SaveGSStream == 2) {
|
if( g_SaveGSStream == 2) {
|
||||||
u32 type = GSRUN_TRANS1;
|
u32 type = GSRUN_TRANS1;
|
||||||
u32 size = (0x4000-(addr))/16;
|
u32 size = (0x4000-(addr))/16;
|
||||||
g_fGSSave->Freeze( type );
|
g_fGSSave->Freeze( type );
|
||||||
g_fGSSave->Freeze( size );
|
g_fGSSave->Freeze( size );
|
||||||
g_fGSSave->FreezeMem( ((u8*)pMem)+(addr), size*16 );
|
g_fGSSave->FreezeMem( ((u8*)pMem)+(addr), size*16 );
|
||||||
}
|
}
|
||||||
GSgifTransfer1(pMem, addr);
|
GSgifTransfer1(pMem, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSGIFTRANSFER2(u32 *pMem, u32 size) {
|
void GSGIFTRANSFER2(u32 *pMem, u32 size) {
|
||||||
if( g_SaveGSStream == 2) {
|
if( g_SaveGSStream == 2) {
|
||||||
u32 type = GSRUN_TRANS2;
|
u32 type = GSRUN_TRANS2;
|
||||||
u32 _size = size;
|
u32 _size = size;
|
||||||
g_fGSSave->Freeze( type );
|
g_fGSSave->Freeze( type );
|
||||||
g_fGSSave->Freeze( size );
|
g_fGSSave->Freeze( size );
|
||||||
g_fGSSave->FreezeMem( pMem, _size*16 );
|
g_fGSSave->FreezeMem( pMem, _size*16 );
|
||||||
}
|
}
|
||||||
GSgifTransfer2(pMem, size);
|
GSgifTransfer2(pMem, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GSGIFTRANSFER3(u32 *pMem, u32 size) {
|
void GSGIFTRANSFER3(u32 *pMem, u32 size) {
|
||||||
if( g_SaveGSStream == 2 ) {
|
if( g_SaveGSStream == 2 ) {
|
||||||
u32 type = GSRUN_TRANS3;
|
u32 type = GSRUN_TRANS3;
|
||||||
u32 _size = size;
|
u32 _size = size;
|
||||||
g_fGSSave->Freeze( type );
|
g_fGSSave->Freeze( type );
|
||||||
g_fGSSave->Freeze( size );
|
g_fGSSave->Freeze( size );
|
||||||
g_fGSSave->FreezeMem( pMem, _size*16 );
|
g_fGSSave->FreezeMem( pMem, _size*16 );
|
||||||
}
|
}
|
||||||
GSgifTransfer3(pMem, size);
|
GSgifTransfer3(pMem, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void GSVSYNC(void) {
|
__forceinline void GSVSYNC(void) {
|
||||||
if( g_SaveGSStream == 2 ) {
|
if( g_SaveGSStream == 2 ) {
|
||||||
u32 type = GSRUN_VSYNC;
|
u32 type = GSRUN_VSYNC;
|
||||||
g_fGSSave->Freeze( type );
|
g_fGSSave->Freeze( type );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
__forceinline void GSGIFTRANSFER1(u32 *pMem, u32 addr) {
|
__forceinline void GSGIFTRANSFER1(u32 *pMem, u32 addr) {
|
||||||
GSgifTransfer1(pMem, addr);
|
GSgifTransfer1(pMem, addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void GSGIFTRANSFER2(u32 *pMem, u32 size) {
|
__forceinline void GSGIFTRANSFER2(u32 *pMem, u32 size) {
|
||||||
GSgifTransfer2(pMem, size);
|
GSgifTransfer2(pMem, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void GSGIFTRANSFER3(u32 *pMem, u32 size) {
|
__forceinline void GSGIFTRANSFER3(u32 *pMem, u32 size) {
|
||||||
GSgifTransfer3(pMem, size);
|
GSgifTransfer3(pMem, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void GSVSYNC(void) {
|
__forceinline void GSVSYNC(void) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void _gs_ChangeTimings( u32 framerate, u32 iTicks )
|
void _gs_ChangeTimings( u32 framerate, u32 iTicks )
|
||||||
|
@ -196,7 +196,7 @@ s32 gsOpen()
|
||||||
GSsetBaseMem( PS2MEM_GS );
|
GSsetBaseMem( PS2MEM_GS );
|
||||||
GSirqCallback( gsIrq );
|
GSirqCallback( gsIrq );
|
||||||
|
|
||||||
m_gsOpened = !GSopen((void *)&pDsp, "PCSX2", 0);
|
m_gsOpened = !GSopen( &pDsp, "PCSX2", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*if( m_gsOpened )
|
/*if( m_gsOpened )
|
||||||
|
@ -244,7 +244,7 @@ void gsReset()
|
||||||
|
|
||||||
gsOnModeChanged(
|
gsOnModeChanged(
|
||||||
(Config.PsxType & 1) ? FRAMERATE_PAL : FRAMERATE_NTSC,
|
(Config.PsxType & 1) ? FRAMERATE_PAL : FRAMERATE_NTSC,
|
||||||
UpdateVSyncRate()
|
UpdateVSyncRate()
|
||||||
);
|
);
|
||||||
|
|
||||||
memzero_obj(g_RealGSMem);
|
memzero_obj(g_RealGSMem);
|
||||||
|
@ -391,7 +391,7 @@ __forceinline void gsWrite16(u32 mem, u16 value)
|
||||||
case GS_CSR+2:
|
case GS_CSR+2:
|
||||||
gsCSRwrite( (CSRw&0xffff) | ((u32)value<<16));
|
gsCSRwrite( (CSRw&0xffff) | ((u32)value<<16));
|
||||||
return; // do not write to MTGS memory
|
return; // do not write to MTGS memory
|
||||||
|
|
||||||
case GS_IMR:
|
case GS_IMR:
|
||||||
IMRwrite(value);
|
IMRwrite(value);
|
||||||
return; // do not write to MTGS memory
|
return; // do not write to MTGS memory
|
||||||
|
@ -451,7 +451,7 @@ void __fastcall gsWrite64_page_01( u32 mem, const mem64_t* value )
|
||||||
IMRwrite((u32)value[0]);
|
IMRwrite((u32)value[0]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gsWrite64_generic( mem, value );
|
gsWrite64_generic( mem, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -487,7 +487,7 @@ void __fastcall gsWrite128_page_01( u32 mem, const mem128_t* value )
|
||||||
IMRwrite((u32)value[0]);
|
IMRwrite((u32)value[0]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
gsWrite128_generic( mem, value );
|
gsWrite128_generic( mem, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -556,7 +556,7 @@ __forceinline u16 gsRead16(u32 mem)
|
||||||
return *(u16*)PS2GS_BASE(mem);
|
return *(u16*)PS2GS_BASE(mem);
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline u32 gsRead32(u32 mem)
|
__forceinline u32 gsRead32(u32 mem)
|
||||||
{
|
{
|
||||||
GIF_LOG("GS read 32 from %8.8lx value: %8.8lx", mem, *(u32*)PS2GS_BASE(mem));
|
GIF_LOG("GS read 32 from %8.8lx value: %8.8lx", mem, *(u32*)PS2GS_BASE(mem));
|
||||||
return *(u32*)PS2GS_BASE(mem);
|
return *(u32*)PS2GS_BASE(mem);
|
||||||
|
@ -604,7 +604,7 @@ void gsSyncLimiterLostTime( s32 deltaTime )
|
||||||
|
|
||||||
// This function does not regulate frame limiting, meaning it does no stalling.
|
// This function does not regulate frame limiting, meaning it does no stalling.
|
||||||
// Stalling functions are performed by the EE: If the MTGS were throtted and not
|
// Stalling functions are performed by the EE: If the MTGS were throtted and not
|
||||||
// the EE, the EE would fill the ringbuffer while the MTGS regulated frames --
|
// the EE, the EE would fill the ringbuffer while the MTGS regulated frames --
|
||||||
// fine for most situations but could result in literally dozens of frames queued
|
// fine for most situations but could result in literally dozens of frames queued
|
||||||
// up in the ringbuffer durimg some game menu screens; which in turn would result
|
// up in the ringbuffer durimg some game menu screens; which in turn would result
|
||||||
// in a half-second lag of keystroke actions becoming visible to the user (bad!).
|
// in a half-second lag of keystroke actions becoming visible to the user (bad!).
|
||||||
|
@ -619,7 +619,7 @@ __forceinline void gsFrameSkip( bool forceskip )
|
||||||
static u8 FramesToRender = 0;
|
static u8 FramesToRender = 0;
|
||||||
static u8 FramesToSkip = 0;
|
static u8 FramesToSkip = 0;
|
||||||
|
|
||||||
if( CHECK_FRAMELIMIT != PCSX2_FRAMELIMIT_SKIP &&
|
if( CHECK_FRAMELIMIT != PCSX2_FRAMELIMIT_SKIP &&
|
||||||
CHECK_FRAMELIMIT != PCSX2_FRAMELIMIT_VUSKIP ) return;
|
CHECK_FRAMELIMIT != PCSX2_FRAMELIMIT_VUSKIP ) return;
|
||||||
|
|
||||||
// FrameSkip and VU-Skip Magic!
|
// FrameSkip and VU-Skip Magic!
|
||||||
|
@ -627,7 +627,7 @@ __forceinline void gsFrameSkip( bool forceskip )
|
||||||
|
|
||||||
// This is the least number of consecutive frames we will render w/o skipping
|
// This is the least number of consecutive frames we will render w/o skipping
|
||||||
const int noSkipFrames = ((Config.CustomConsecutiveFrames>0) ? Config.CustomConsecutiveFrames : 1);
|
const int noSkipFrames = ((Config.CustomConsecutiveFrames>0) ? Config.CustomConsecutiveFrames : 1);
|
||||||
// This is the number of consecutive frames we will skip
|
// This is the number of consecutive frames we will skip
|
||||||
const int yesSkipFrames = ((Config.CustomConsecutiveSkip>0) ? Config.CustomConsecutiveSkip : 1);
|
const int yesSkipFrames = ((Config.CustomConsecutiveSkip>0) ? Config.CustomConsecutiveSkip : 1);
|
||||||
|
|
||||||
const u64 iEnd = GetCPUTicks();
|
const u64 iEnd = GetCPUTicks();
|
||||||
|
@ -651,7 +651,7 @@ __forceinline void gsFrameSkip( bool forceskip )
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if we've already given the EE a skipcount assignment then don't do anything more.
|
// if we've already given the EE a skipcount assignment then don't do anything more.
|
||||||
// Otherwise we could start compounding the issue and skips would be too long.
|
// Otherwise we could start compounding the issue and skips would be too long.
|
||||||
if( g_vu1SkipCount > 0 )
|
if( g_vu1SkipCount > 0 )
|
||||||
|
@ -665,23 +665,23 @@ __forceinline void gsFrameSkip( bool forceskip )
|
||||||
// -- Standard operation section --
|
// -- Standard operation section --
|
||||||
// Means neither skipping frames nor force-rendering consecutive frames.
|
// Means neither skipping frames nor force-rendering consecutive frames.
|
||||||
|
|
||||||
if( sSlowDeltaTime > 0 )
|
if( sSlowDeltaTime > 0 )
|
||||||
{
|
{
|
||||||
// The game is running below the minimum framerate.
|
// The game is running below the minimum framerate.
|
||||||
// But don't start skipping yet! That would be too sensitive.
|
// But don't start skipping yet! That would be too sensitive.
|
||||||
// So the skipping code is only engaged if the SlowDeltaTime falls behind by
|
// So the skipping code is only engaged if the SlowDeltaTime falls behind by
|
||||||
// a full frame, or if we're already skipping (in which case we don't care
|
// a full frame, or if we're already skipping (in which case we don't care
|
||||||
// to avoid errant skips).
|
// to avoid errant skips).
|
||||||
|
|
||||||
// Note: The MTGS can go out of phase from the EE, which means that the
|
// Note: The MTGS can go out of phase from the EE, which means that the
|
||||||
// variance for a "nominal" framerate can range from 0 to m_iSlowTicks.
|
// variance for a "nominal" framerate can range from 0 to m_iSlowTicks.
|
||||||
// We also check for that here.
|
// We also check for that here.
|
||||||
|
|
||||||
if( (m_justSkipped && (sSlowDeltaTime > m_iSlowTicks)) ||
|
if( (m_justSkipped && (sSlowDeltaTime > m_iSlowTicks)) ||
|
||||||
(sSlowDeltaTime > m_iSlowTicks*2) )
|
(sSlowDeltaTime > m_iSlowTicks*2) )
|
||||||
{
|
{
|
||||||
//Console::Status( "Frameskip Initiated! Lateness: %d", params (int)( (sSlowDeltaTime*100) / m_iSlowTicks ) );
|
//Console::Status( "Frameskip Initiated! Lateness: %d", params (int)( (sSlowDeltaTime*100) / m_iSlowTicks ) );
|
||||||
|
|
||||||
if( CHECK_FRAMELIMIT == PCSX2_FRAMELIMIT_VUSKIP )
|
if( CHECK_FRAMELIMIT == PCSX2_FRAMELIMIT_VUSKIP )
|
||||||
{
|
{
|
||||||
// For best results we have to wait for the EE to
|
// For best results we have to wait for the EE to
|
||||||
|
@ -755,7 +755,7 @@ void gsPostVsyncEnd( bool updategs )
|
||||||
{
|
{
|
||||||
*(u32*)(PS2MEM_GS+0x1000) ^= 0x2000; // swap the vsync field
|
*(u32*)(PS2MEM_GS+0x1000) ^= 0x2000; // swap the vsync field
|
||||||
|
|
||||||
if( mtgsThread != NULL )
|
if( mtgsThread != NULL )
|
||||||
mtgsThread->PostVsyncEnd( updategs );
|
mtgsThread->PostVsyncEnd( updategs );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -789,7 +789,7 @@ void gsDynamicSkipEnable()
|
||||||
if( !m_StrictSkipping ) return;
|
if( !m_StrictSkipping ) return;
|
||||||
|
|
||||||
mtgsWaitGS();
|
mtgsWaitGS();
|
||||||
m_iSlowStart = GetCPUTicks();
|
m_iSlowStart = GetCPUTicks();
|
||||||
frameLimitReset();
|
frameLimitReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,12 +25,12 @@
|
||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "IPU.h"
|
#include "IPU/IPU.h"
|
||||||
|
|
||||||
#define W1 2841 /* 2048*sqrt (2)*cos (1*pi/16) */
|
#define W1 2841 /* 2048*sqrt (2)*cos (1*pi/16) */
|
||||||
#define W2 2676 /* 2048*sqrt (2)*cos (2*pi/16) */
|
#define W2 2676 /* 2048*sqrt (2)*cos (2*pi/16) */
|
||||||
#define W3 2408 /* 2048*sqrt (2)*cos (3*pi/16) */
|
#define W3 2408 /* 2048*sqrt (2)*cos (3*pi/16) */
|
||||||
#define W5 1609 /* 2048*sqrt (2)*cos (5*pi/16) */
|
#define W5 1609 /* 2048*sqrt (2)*cos (5*pi/16) */
|
||||||
#define W6 1108 /* 2048*sqrt (2)*cos (6*pi/16) */
|
#define W6 1108 /* 2048*sqrt (2)*cos (6*pi/16) */
|
||||||
#define W7 565 /* 2048*sqrt (2)*cos (7*pi/16) */
|
#define W7 565 /* 2048*sqrt (2)*cos (7*pi/16) */
|
||||||
#define clp(val,res) res = (val < 0) ? 0 : ((val > 255) ? 255 : val);
|
#define clp(val,res) res = (val < 0) ? 0 : ((val > 255) ? 255 : val);
|
||||||
|
@ -265,7 +265,7 @@ void mpeg2_idct_mmx_init (void);
|
||||||
void mpeg2_idct_init()
|
void mpeg2_idct_init()
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
mpeg2_idct_copy = mpeg2_idct_copy_c;
|
mpeg2_idct_copy = mpeg2_idct_copy_c;
|
||||||
mpeg2_idct_add = mpeg2_idct_add_c;
|
mpeg2_idct_add = mpeg2_idct_add_c;
|
||||||
for (i = -384; i < 640; i++)
|
for (i = -384; i < 640; i++)
|
||||||
|
|
|
@ -29,10 +29,10 @@
|
||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
|
|
||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "IPU.h"
|
#include "IPU/IPU.h"
|
||||||
|
#include "IPU/coroutine.h"
|
||||||
#include "Mpeg.h"
|
#include "Mpeg.h"
|
||||||
#include "Vlc.h"
|
#include "Vlc.h"
|
||||||
#include "coroutine.h"
|
|
||||||
|
|
||||||
int non_linear_quantizer_scale [] = {
|
int non_linear_quantizer_scale [] = {
|
||||||
0, 1, 2, 3, 4, 5, 6, 7,
|
0, 1, 2, 3, 4, 5, 6, 7,
|
||||||
|
@ -211,8 +211,8 @@ static __forceinline int get_luma_dc_dct_diff (decoder_t * const decoder)
|
||||||
DUMPBITS (bit_buf, bits, 3);
|
DUMPBITS (bit_buf, bits, 3);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tab = DC_long + (UBITS (bit_buf, 9) - 0x1e0);//0x1e0);
|
tab = DC_long + (UBITS (bit_buf, 9) - 0x1e0);//0x1e0);
|
||||||
size = tab->size;
|
size = tab->size;
|
||||||
DUMPBITS (bit_buf, bits, tab->len);
|
DUMPBITS (bit_buf, bits, tab->len);
|
||||||
|
@ -250,7 +250,7 @@ static __forceinline int get_chroma_dc_dct_diff (decoder_t * const decoder)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tab = DC_long + (UBITS (bit_buf, 10) - 0x3e0);
|
tab = DC_long + (UBITS (bit_buf, 10) - 0x3e0);
|
||||||
size = tab->size;
|
size = tab->size;
|
||||||
DUMPBITS (bit_buf, bits, tab->len + 1);
|
DUMPBITS (bit_buf, bits, tab->len + 1);
|
||||||
|
@ -631,7 +631,7 @@ static __forceinline void get_mpeg1_intra_block (decoder_t * const decoder)
|
||||||
bit_buf = decoder->bitstream_buf;
|
bit_buf = decoder->bitstream_buf;
|
||||||
bits = decoder->bitstream_bits;
|
bits = decoder->bitstream_bits;
|
||||||
bit_ptr = decoder->bitstream_ptr;
|
bit_ptr = decoder->bitstream_ptr;
|
||||||
|
|
||||||
NEEDBITS (bit_buf, bits, bit_ptr);
|
NEEDBITS (bit_buf, bits, bit_ptr);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
@ -918,7 +918,7 @@ struct TGA_HEADER
|
||||||
s16 height; // image height in pixels
|
s16 height; // image height in pixels
|
||||||
u8 bits; // image bits per pixel 8,16,24,32
|
u8 bits; // image bits per pixel 8,16,24,32
|
||||||
u8 descriptor; // image descriptor bits (vh flip bits)
|
u8 descriptor; // image descriptor bits (vh flip bits)
|
||||||
|
|
||||||
// pixel data follows header
|
// pixel data follows header
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
};
|
};
|
||||||
|
@ -935,7 +935,7 @@ void SaveTGA(const char* filename, int width, int height, void* pdata)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
assert( sizeof(TGA_HEADER) == 18 && sizeof(hdr) == 18 );
|
assert( sizeof(TGA_HEADER) == 18 && sizeof(hdr) == 18 );
|
||||||
|
|
||||||
memzero_obj(hdr);
|
memzero_obj(hdr);
|
||||||
hdr.imagetype = 2;
|
hdr.imagetype = 2;
|
||||||
hdr.bits = 32;
|
hdr.bits = 32;
|
||||||
|
@ -963,7 +963,7 @@ void waitForSCD()
|
||||||
while(!getBits8((u8*)&bit8, 0))
|
while(!getBits8((u8*)&bit8, 0))
|
||||||
so_resume();
|
so_resume();
|
||||||
|
|
||||||
if (bit8==0)
|
if (bit8==0)
|
||||||
{
|
{
|
||||||
if (g_BP.BP & 7)
|
if (g_BP.BP & 7)
|
||||||
g_BP.BP += 8 - (g_BP.BP&7);
|
g_BP.BP += 8 - (g_BP.BP&7);
|
||||||
|
@ -1018,8 +1018,8 @@ void mpeg2sliceIDEC(void* pdone)
|
||||||
*(int*)pdone = 0;
|
*(int*)pdone = 0;
|
||||||
bitstream_init(decoder);
|
bitstream_init(decoder);
|
||||||
|
|
||||||
decoder->dc_dct_pred[0] =
|
decoder->dc_dct_pred[0] =
|
||||||
decoder->dc_dct_pred[1] =
|
decoder->dc_dct_pred[1] =
|
||||||
decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
|
decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
|
||||||
|
|
||||||
decoder->mbc=0;
|
decoder->mbc=0;
|
||||||
|
@ -1033,11 +1033,11 @@ void mpeg2sliceIDEC(void* pdone)
|
||||||
int DCT_offset, DCT_stride;
|
int DCT_offset, DCT_stride;
|
||||||
int mba_inc;
|
int mba_inc;
|
||||||
const MBAtab * mba;
|
const MBAtab * mba;
|
||||||
|
|
||||||
NEEDBITS (decoder->bitstream_buf, decoder->bitstream_bits, decoder->bitstream_ptr);
|
NEEDBITS (decoder->bitstream_buf, decoder->bitstream_bits, decoder->bitstream_ptr);
|
||||||
|
|
||||||
decoder->macroblock_modes = get_macroblock_modes (decoder);
|
decoder->macroblock_modes = get_macroblock_modes (decoder);
|
||||||
|
|
||||||
/* maybe integrate MACROBLOCK_QUANT test into get_macroblock_modes ? */
|
/* maybe integrate MACROBLOCK_QUANT test into get_macroblock_modes ? */
|
||||||
if (decoder->macroblock_modes & MACROBLOCK_QUANT)//only IDEC
|
if (decoder->macroblock_modes & MACROBLOCK_QUANT)//only IDEC
|
||||||
decoder->quantizer_scale = get_quantizer_scale (decoder);
|
decoder->quantizer_scale = get_quantizer_scale (decoder);
|
||||||
|
@ -1063,7 +1063,7 @@ void mpeg2sliceIDEC(void* pdone)
|
||||||
slice_intra_DCT (decoder, 0, (u8*)decoder->mb8->Y + DCT_offset + 8, DCT_stride);
|
slice_intra_DCT (decoder, 0, (u8*)decoder->mb8->Y + DCT_offset + 8, DCT_stride);
|
||||||
slice_intra_DCT (decoder, 1, (u8*)decoder->mb8->Cb, decoder->stride>>1);
|
slice_intra_DCT (decoder, 1, (u8*)decoder->mb8->Cb, decoder->stride>>1);
|
||||||
slice_intra_DCT (decoder, 2, (u8*)decoder->mb8->Cr, decoder->stride>>1);
|
slice_intra_DCT (decoder, 2, (u8*)decoder->mb8->Cr, decoder->stride>>1);
|
||||||
|
|
||||||
// Send The MacroBlock via DmaIpuFrom
|
// Send The MacroBlock via DmaIpuFrom
|
||||||
if (decoder->ofm==0){
|
if (decoder->ofm==0){
|
||||||
ipu_csc(decoder->mb8, decoder->rgb32, decoder->sgn);
|
ipu_csc(decoder->mb8, decoder->rgb32, decoder->sgn);
|
||||||
|
@ -1127,9 +1127,9 @@ void mpeg2sliceIDEC(void* pdone)
|
||||||
{
|
{
|
||||||
ipuRegs->ctrl.SCD = 0;
|
ipuRegs->ctrl.SCD = 0;
|
||||||
coded_block_pattern=decoder->coded_block_pattern;
|
coded_block_pattern=decoder->coded_block_pattern;
|
||||||
|
|
||||||
g_BP.BP+=decoder->bitstream_bits-16;
|
g_BP.BP+=decoder->bitstream_bits-16;
|
||||||
|
|
||||||
if((int)g_BP.BP < 0) {
|
if((int)g_BP.BP < 0) {
|
||||||
g_BP.BP = 128 + (int)g_BP.BP;
|
g_BP.BP = 128 + (int)g_BP.BP;
|
||||||
|
|
||||||
|
@ -1137,11 +1137,11 @@ void mpeg2sliceIDEC(void* pdone)
|
||||||
// so that reading may continue properly
|
// so that reading may continue properly
|
||||||
ReorderBitstream();
|
ReorderBitstream();
|
||||||
}
|
}
|
||||||
|
|
||||||
FillInternalBuffer(&g_BP.BP,1,0);
|
FillInternalBuffer(&g_BP.BP,1,0);
|
||||||
|
|
||||||
waitForSCD();
|
waitForSCD();
|
||||||
|
|
||||||
*(int*)pdone = 1;
|
*(int*)pdone = 1;
|
||||||
so_exit();
|
so_exit();
|
||||||
}
|
}
|
||||||
|
@ -1149,7 +1149,7 @@ void mpeg2sliceIDEC(void* pdone)
|
||||||
}
|
}
|
||||||
DUMPBITS (decoder->bitstream_buf, decoder->bitstream_bits, mba->len);
|
DUMPBITS (decoder->bitstream_buf, decoder->bitstream_bits, mba->len);
|
||||||
mba_inc += mba->mba;
|
mba_inc += mba->mba;
|
||||||
|
|
||||||
if (mba_inc) {
|
if (mba_inc) {
|
||||||
decoder->dc_dct_pred[0] = decoder->dc_dct_pred[1] =
|
decoder->dc_dct_pred[0] = decoder->dc_dct_pred[1] =
|
||||||
decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
|
decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
|
||||||
|
@ -1173,9 +1173,9 @@ void mpeg2sliceIDEC(void* pdone)
|
||||||
// so that reading may continue properly
|
// so that reading may continue properly
|
||||||
ReorderBitstream();
|
ReorderBitstream();
|
||||||
}
|
}
|
||||||
|
|
||||||
FillInternalBuffer(&g_BP.BP,1,0);
|
FillInternalBuffer(&g_BP.BP,1,0);
|
||||||
|
|
||||||
waitForSCD();
|
waitForSCD();
|
||||||
|
|
||||||
*(int*)pdone = 1;
|
*(int*)pdone = 1;
|
||||||
|
@ -1198,7 +1198,7 @@ void mpeg2_slice(void* pdone)
|
||||||
memzero_obj(*decoder->mb16);
|
memzero_obj(*decoder->mb16);
|
||||||
|
|
||||||
bitstream_init (decoder);
|
bitstream_init (decoder);
|
||||||
|
|
||||||
if (decoder->dcr)
|
if (decoder->dcr)
|
||||||
decoder->dc_dct_pred[0] = decoder->dc_dct_pred[1] =
|
decoder->dc_dct_pred[0] = decoder->dc_dct_pred[1] =
|
||||||
decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
|
decoder->dc_dct_pred[2] = 128 << decoder->intra_dc_precision;
|
||||||
|
@ -1229,7 +1229,7 @@ void mpeg2_slice(void* pdone)
|
||||||
if (decoder->coded_block_pattern & 0x04) slice_non_intra_DCT (decoder, (s16*)decoder->mb16->Y + DCT_offset + 8, DCT_stride);
|
if (decoder->coded_block_pattern & 0x04) slice_non_intra_DCT (decoder, (s16*)decoder->mb16->Y + DCT_offset + 8, DCT_stride);
|
||||||
if (decoder->coded_block_pattern & 0x2) slice_non_intra_DCT (decoder, (s16*)decoder->mb16->Cb, decoder->stride>>1);
|
if (decoder->coded_block_pattern & 0x2) slice_non_intra_DCT (decoder, (s16*)decoder->mb16->Cb, decoder->stride>>1);
|
||||||
if (decoder->coded_block_pattern & 0x1) slice_non_intra_DCT (decoder, (s16*)decoder->mb16->Cr, decoder->stride>>1);
|
if (decoder->coded_block_pattern & 0x1) slice_non_intra_DCT (decoder, (s16*)decoder->mb16->Cr, decoder->stride>>1);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#ifndef __VLC_H__
|
#ifndef __VLC_H__
|
||||||
#define __VLC_H__
|
#define __VLC_H__
|
||||||
|
|
||||||
#include "coroutine.h"
|
#include "IPU/coroutine.h"
|
||||||
|
|
||||||
static u8 data[2];
|
static u8 data[2];
|
||||||
static u8 dword[4];
|
static u8 dword[4];
|
||||||
|
@ -48,7 +48,7 @@ static __forceinline void bitstream_init (decoder_t * decoder){
|
||||||
while( !getBits32(dword, 1) )
|
while( !getBits32(dword, 1) )
|
||||||
so_resume();
|
so_resume();
|
||||||
|
|
||||||
decoder->bitstream_buf = (dword[0] << 24) | (dword[1] << 16) |
|
decoder->bitstream_buf = (dword[0] << 24) | (dword[1] << 16) |
|
||||||
(dword[2] << 8) |dword[3];
|
(dword[2] << 8) |dword[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
/* Pcsx2 - Pc Ps2 Emulator
|
||||||
|
* Copyright (C) 2002-2009 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 "PrecompiledHeader.h"
|
||||||
|
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <signal.h>
|
||||||
|
#include "Common.h"
|
||||||
|
//#include "x86/iR5900.h"
|
||||||
|
|
||||||
|
extern void SysPageFaultExceptionFilter( int signal, siginfo_t *info, void * );
|
||||||
|
extern void __fastcall InstallLinuxExceptionHandler();
|
||||||
|
extern void __fastcall ReleaseLinuxExceptionHandler();
|
||||||
|
|
||||||
|
#define PCSX2_MEM_PROTECT_BEGIN() InstallLinuxExceptionHandler()
|
||||||
|
#define PCSX2_MEM_PROTECT_END() ReleaseLinuxExceptionHandler()
|
||||||
|
|
||||||
|
extern void SignalExit(int sig);
|
||||||
|
|
||||||
|
static const uptr m_pagemask = getpagesize()-1;
|
||||||
|
|
||||||
|
void InstallLinuxExceptionHandler()
|
||||||
|
{
|
||||||
|
struct sigaction sa;
|
||||||
|
|
||||||
|
sigemptyset(&sa.sa_mask);
|
||||||
|
sa.sa_flags = SA_SIGINFO;
|
||||||
|
sa.sa_sigaction = &SysPageFaultExceptionFilter;
|
||||||
|
sigaction(SIGSEGV, &sa, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ReleaseLinuxExceptionHandler()
|
||||||
|
{
|
||||||
|
// Code this later.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Linux implementation of SIGSEGV handler. Bind it using sigaction().
|
||||||
|
void SysPageFaultExceptionFilter( int signal, siginfo_t *info, void * )
|
||||||
|
{
|
||||||
|
// get bad virtual address
|
||||||
|
uptr offset = (u8*)info->si_addr - psM;
|
||||||
|
|
||||||
|
DevCon::Status( "Protected memory cleanup. Offset 0x%x", params offset );
|
||||||
|
|
||||||
|
if (offset>=Ps2MemSize::Base)
|
||||||
|
{
|
||||||
|
// Bad mojo! Completely invalid address.
|
||||||
|
// Instigate a crash or abort emulation or something.
|
||||||
|
assert( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
mmap_ClearCpuBlock( offset & ~m_pagemask );
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace HostSys
|
||||||
|
{
|
||||||
|
void *Mmap(uptr base, u32 size)
|
||||||
|
{
|
||||||
|
u8 *Mem;
|
||||||
|
Mem = (u8*)mmap((uptr*)base, size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
|
||||||
|
if (Mem == MAP_FAILED) Console::Notice("Mmap Failed!");
|
||||||
|
|
||||||
|
return Mem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Munmap(uptr base, u32 size)
|
||||||
|
{
|
||||||
|
munmap((uptr*)base, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MemProtect( void* baseaddr, size_t size, PageProtectionMode mode, bool allowExecution )
|
||||||
|
{
|
||||||
|
int lnxmode = 0;
|
||||||
|
|
||||||
|
// make sure size is aligned to the system page size:
|
||||||
|
size = (size + m_pagemask) & ~m_pagemask;
|
||||||
|
|
||||||
|
switch( mode )
|
||||||
|
{
|
||||||
|
case Protect_NoAccess: break;
|
||||||
|
case Protect_ReadOnly: lnxmode = PROT_READ; break;
|
||||||
|
case Protect_ReadWrite: lnxmode = PROT_READ | PROT_WRITE; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( allowExecution ) lnxmode |= PROT_EXEC;
|
||||||
|
mprotect( baseaddr, size, lnxmode );
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,8 +16,8 @@
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "Linux.h"
|
#include "PrecompiledHeader.h"
|
||||||
#include "../x86/ix86/ix86.h"
|
#include "ix86/ix86.h"
|
||||||
|
|
||||||
// Note: assuming multicore is safer because it forces the interlocked routines to use
|
// Note: assuming multicore is safer because it forces the interlocked routines to use
|
||||||
// the LOCK prefix. The prefix works on single core CPUs fine (but is slow), but not
|
// the LOCK prefix. The prefix works on single core CPUs fine (but is slow), but not
|
||||||
|
@ -64,7 +64,7 @@ namespace Threading
|
||||||
// performance hint and isn't required).
|
// performance hint and isn't required).
|
||||||
__asm__ ( "pause" );
|
__asm__ ( "pause" );
|
||||||
}
|
}
|
||||||
|
|
||||||
void* Thread::_internal_callback( void* itsme )
|
void* Thread::_internal_callback( void* itsme )
|
||||||
{
|
{
|
||||||
jASSUME( itsme != NULL );
|
jASSUME( itsme != NULL );
|
||||||
|
@ -119,7 +119,7 @@ namespace Threading
|
||||||
:"=&a" (result)
|
:"=&a" (result)
|
||||||
:"m" (*Target), "r" (Value));
|
:"m" (*Target), "r" (Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ namespace Threading
|
||||||
:"=a" (result)
|
:"=a" (result)
|
||||||
:"m" (*dest), "r" (value), "a" (comp));
|
:"m" (*dest), "r" (value), "a" (comp));
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,7 +184,7 @@ namespace Threading
|
||||||
__forceinline s64 pcsx2_InterlockedCompareExchange64(volatile s64* dest, s64 exch, s64 comp)
|
__forceinline s64 pcsx2_InterlockedCompareExchange64(volatile s64* dest, s64 exch, s64 comp)
|
||||||
{
|
{
|
||||||
s64 old;
|
s64 old;
|
||||||
__asm__ __volatile__(
|
__asm__ __volatile__(
|
||||||
"lock; cmpxchgq %q2, %q1"
|
"lock; cmpxchgq %q2, %q1"
|
||||||
: "=a" (old)
|
: "=a" (old)
|
||||||
: "r" (exch), "m" (*dest), "a" (comp)
|
: "r" (exch), "m" (*dest), "a" (comp)
|
||||||
|
@ -192,5 +192,5 @@ namespace Threading
|
||||||
return old;
|
return old;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||||
|
<CodeBlocks_workspace_file>
|
||||||
|
<Workspace title="pcsx2_suite_2008 workspace">
|
||||||
|
<Project filename="../../plugins/zerogs/dx/Windows/zerogs_2008.cbp" />
|
||||||
|
<Project filename="../../plugins/CDVDiso/src/Windows/CDVDiso_vs2008.cbp" />
|
||||||
|
<Project filename="../../plugins/spu2-x/src/Windows/Spu2-X_vs2008.cbp" />
|
||||||
|
<Project filename="../../3rdparty/SoundTouch/SoundTouch.cbp" />
|
||||||
|
<Project filename="../../3rdparty/zlib/zlib.cbp" />
|
||||||
|
<Project filename="../../3rdparty/bzip2/bzip2.cbp" />
|
||||||
|
<Project filename="../../plugins/LilyPad/LilyPad_VC2008.cbp" />
|
||||||
|
<Project filename="../../plugins/zerospu2/Windows/ZeroSPU2_2008.cbp" />
|
||||||
|
<Project filename="../../plugins/xpad/xpad_vs2008.cbp" />
|
||||||
|
<Project filename="../../plugins/CDVDnull/Src/CDVDnull_vs2008.cbp" />
|
||||||
|
<Project filename="../../plugins/USBnull/Windows/USBnull_vc2008.cbp" />
|
||||||
|
<Project filename="../../plugins/FWnull/Windows/FWnull_vc2008.cbp" />
|
||||||
|
<Project filename="../../plugins/dev9null/src/DEV9null_vc2008.cbp" />
|
||||||
|
<Project filename="../../plugins/zeropad/Windows/ZeroPAD_2008.cbp" />
|
||||||
|
<Project filename="pcsx2.cbp" active="1">
|
||||||
|
<Depends filename="../../3rdparty/zlib/zlib.cbp" />
|
||||||
|
</Project>
|
||||||
|
</Workspace>
|
||||||
|
</CodeBlocks_workspace_file>
|
|
@ -0,0 +1,435 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||||
|
<CodeBlocks_project_file>
|
||||||
|
<FileVersion major="1" minor="6" />
|
||||||
|
<Project>
|
||||||
|
<Option title="pcsx2" />
|
||||||
|
<Option platforms="Windows;Unix;" />
|
||||||
|
<Option pch_mode="2" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Build>
|
||||||
|
<Target title="Debug">
|
||||||
|
<Option platforms="Windows;Unix;" />
|
||||||
|
<Option output="$(SvnRootDir)/bin/pcsx2-dbg" prefix_auto="1" extension_auto="1" />
|
||||||
|
<Option working_dir="$(SvnRootDir)/bin/" />
|
||||||
|
<Option object_output="./.objs/Debug" />
|
||||||
|
<Option type="0" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-g" />
|
||||||
|
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --cflags`" />
|
||||||
|
<Add option="-DPCSX2_DEVBUILD" />
|
||||||
|
</Compiler>
|
||||||
|
<ResourceCompiler>
|
||||||
|
<Add directory="$(ProjectRootDir)/NewGUI" />
|
||||||
|
</ResourceCompiler>
|
||||||
|
<Linker>
|
||||||
|
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --libs`" />
|
||||||
|
<Add library="$(SvnRootDir)/deps/zlib-dbg.a" />
|
||||||
|
</Linker>
|
||||||
|
</Target>
|
||||||
|
<Target title="Devel">
|
||||||
|
<Option platforms="Windows;Unix;" />
|
||||||
|
<Option output="$(SvnRootDir)/bin/pcsx2-dev" prefix_auto="1" extension_auto="1" />
|
||||||
|
<Option working_dir="$(SvnRootDir)/bin/" />
|
||||||
|
<Option object_output="./.objs/Devel" />
|
||||||
|
<Option type="0" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-O2" />
|
||||||
|
<Add option="-W" />
|
||||||
|
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --cflags`" />
|
||||||
|
<Add option="-DNDEBUG" />
|
||||||
|
<Add option="-DPCSX2_DEVBUILD" />
|
||||||
|
</Compiler>
|
||||||
|
<ResourceCompiler>
|
||||||
|
<Add directory="$(ProjectRootDir)/NewGUI" />
|
||||||
|
</ResourceCompiler>
|
||||||
|
<Linker>
|
||||||
|
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=yes --libs`" />
|
||||||
|
<Add library="$(SvnRootDir)/deps/zlib-dev.a" />
|
||||||
|
</Linker>
|
||||||
|
</Target>
|
||||||
|
<Target title="Release">
|
||||||
|
<Option platforms="Windows;Unix;" />
|
||||||
|
<Option output="$(SvnRootDir)/bin/pcsx2" prefix_auto="1" extension_auto="1" />
|
||||||
|
<Option working_dir="$(SvnRootDir)/bin/" />
|
||||||
|
<Option object_output="./.objs/Release" />
|
||||||
|
<Option type="0" />
|
||||||
|
<Option compiler="gcc" />
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-O2" />
|
||||||
|
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=no --cflags`" />
|
||||||
|
<Add option="-DNDEBUG" />
|
||||||
|
</Compiler>
|
||||||
|
<ResourceCompiler>
|
||||||
|
<Add directory="$(ProjectRootDir)/NewGUI" />
|
||||||
|
</ResourceCompiler>
|
||||||
|
<Linker>
|
||||||
|
<Add option="-s" />
|
||||||
|
<Add option="`wx-config --version=2.8 --static=no --unicode=yes --debug=no --libs`" />
|
||||||
|
<Add library="$(SvnRootDir)/deps/zlib.a" />
|
||||||
|
</Linker>
|
||||||
|
</Target>
|
||||||
|
<Environment>
|
||||||
|
<Variable name="SvnRootDir" value="../../" />
|
||||||
|
<Variable name="ProjectRootDir" value='"$(SvnRootDir)/pcsx2/"' />
|
||||||
|
<Variable name="CommonDir" value='"$(SvnRootDir)/common/"' />
|
||||||
|
</Environment>
|
||||||
|
</Build>
|
||||||
|
<Compiler>
|
||||||
|
<Add option="-march=athlon" />
|
||||||
|
<Add option="-march=pentium4" />
|
||||||
|
<Add option="-fno-guess-branch-probability" />
|
||||||
|
<Add option="-fno-dse -fno-tree-dse" />
|
||||||
|
<Add option="-DWX_PRECOMP" />
|
||||||
|
<Add option="-D_DEBUG" />
|
||||||
|
<Add directory="$(SvnRootDir)/common/include/" />
|
||||||
|
<Add directory="$(SvnRootDir)/3rdparty/" />
|
||||||
|
<Add directory="$(ProjectRootDir)" />
|
||||||
|
<Add directory="$(ProjectRootDir)/NewGUI" />
|
||||||
|
<Add directory="$(ProjectRootDir)/x86" />
|
||||||
|
</Compiler>
|
||||||
|
<Linker>
|
||||||
|
<Add option="-Xlinker -zmuldefs" />
|
||||||
|
</Linker>
|
||||||
|
<Unit filename="../../common/include/Pcsx2Config.h" />
|
||||||
|
<Unit filename="../../common/include/Pcsx2Defs.h" />
|
||||||
|
<Unit filename="../../common/include/Pcsx2Types.h" />
|
||||||
|
<Unit filename="../AlignedMalloc.cpp" />
|
||||||
|
<Unit filename="../CDVD.cpp" />
|
||||||
|
<Unit filename="../CDVD.h" />
|
||||||
|
<Unit filename="../CDVDiso.cpp" />
|
||||||
|
<Unit filename="../CDVDiso.h" />
|
||||||
|
<Unit filename="../CDVDisodrv.cpp" />
|
||||||
|
<Unit filename="../CDVDisodrv.h" />
|
||||||
|
<Unit filename="../COP0.cpp" />
|
||||||
|
<Unit filename="../COP2.cpp" />
|
||||||
|
<Unit filename="../Cache.cpp" />
|
||||||
|
<Unit filename="../Cache.h" />
|
||||||
|
<Unit filename="../CdRom.cpp" />
|
||||||
|
<Unit filename="../CdRom.h" />
|
||||||
|
<Unit filename="../Common.h" />
|
||||||
|
<Unit filename="../Config.h" />
|
||||||
|
<Unit filename="../Console.cpp" />
|
||||||
|
<Unit filename="../Counters.cpp" />
|
||||||
|
<Unit filename="../Counters.h" />
|
||||||
|
<Unit filename="../DebugTools/Debug.h" />
|
||||||
|
<Unit filename="../DebugTools/DisASM.h" />
|
||||||
|
<Unit filename="../DebugTools/DisR3000A.cpp" />
|
||||||
|
<Unit filename="../DebugTools/DisR3000asm.cpp" />
|
||||||
|
<Unit filename="../DebugTools/DisR5900.cpp" />
|
||||||
|
<Unit filename="../DebugTools/DisR5900asm.cpp" />
|
||||||
|
<Unit filename="../DebugTools/DisVU0Micro.cpp" />
|
||||||
|
<Unit filename="../DebugTools/DisVU1Micro.cpp" />
|
||||||
|
<Unit filename="../DebugTools/DisVUmicro.h" />
|
||||||
|
<Unit filename="../DebugTools/DisVUops.h" />
|
||||||
|
<Unit filename="../Docs/ChangeLog.txt" />
|
||||||
|
<Unit filename="../Docs/License.txt" />
|
||||||
|
<Unit filename="../Docs/PS2Edefs.txt" />
|
||||||
|
<Unit filename="../Docs/RemoteDebugging.txt" />
|
||||||
|
<Unit filename="../Docs/devblog.txt" />
|
||||||
|
<Unit filename="../Docs/readme 0.9.4.txt" />
|
||||||
|
<Unit filename="../Docs/readme Playground.txt" />
|
||||||
|
<Unit filename="../Dump.cpp" />
|
||||||
|
<Unit filename="../Dump.h" />
|
||||||
|
<Unit filename="../EEregs.h" />
|
||||||
|
<Unit filename="../Elfheader.cpp" />
|
||||||
|
<Unit filename="../Elfheader.h" />
|
||||||
|
<Unit filename="../Exceptions.cpp" />
|
||||||
|
<Unit filename="../Exceptions.h" />
|
||||||
|
<Unit filename="../FPU.cpp" />
|
||||||
|
<Unit filename="../FiFo.cpp" />
|
||||||
|
<Unit filename="../GS.cpp" />
|
||||||
|
<Unit filename="../GS.h" />
|
||||||
|
<Unit filename="../Gif.cpp" />
|
||||||
|
<Unit filename="../HashMap.h" />
|
||||||
|
<Unit filename="../HostGui.h" />
|
||||||
|
<Unit filename="../Hw.cpp" />
|
||||||
|
<Unit filename="../Hw.h" />
|
||||||
|
<Unit filename="../HwRead.cpp" />
|
||||||
|
<Unit filename="../HwWrite.cpp" />
|
||||||
|
<Unit filename="../IPU/IPU.cpp" />
|
||||||
|
<Unit filename="../IPU/IPU.h" />
|
||||||
|
<Unit filename="../IPU/acoroutine.S" />
|
||||||
|
<Unit filename="../IPU/coroutine.cpp" />
|
||||||
|
<Unit filename="../IPU/coroutine.h" />
|
||||||
|
<Unit filename="../IPU/mpeg2lib/Idct.cpp" />
|
||||||
|
<Unit filename="../IPU/mpeg2lib/Mpeg.cpp" />
|
||||||
|
<Unit filename="../IPU/mpeg2lib/Mpeg.h" />
|
||||||
|
<Unit filename="../IPU/mpeg2lib/Vlc.h" />
|
||||||
|
<Unit filename="../IPU/yuv2rgb.cpp" />
|
||||||
|
<Unit filename="../IPU/yuv2rgb.h" />
|
||||||
|
<Unit filename="../Interpreter.cpp" />
|
||||||
|
<Unit filename="../IopBios.cpp" />
|
||||||
|
<Unit filename="../IopBios.h" />
|
||||||
|
<Unit filename="../IopBios2.h" />
|
||||||
|
<Unit filename="../IopCommon.h" />
|
||||||
|
<Unit filename="../IopCounters.cpp" />
|
||||||
|
<Unit filename="../IopCounters.h" />
|
||||||
|
<Unit filename="../IopDma.cpp" />
|
||||||
|
<Unit filename="../IopDma.h" />
|
||||||
|
<Unit filename="../IopHw.cpp" />
|
||||||
|
<Unit filename="../IopHw.h" />
|
||||||
|
<Unit filename="../IopMem.cpp" />
|
||||||
|
<Unit filename="../IopMem.h" />
|
||||||
|
<Unit filename="../IopSio2.cpp" />
|
||||||
|
<Unit filename="../IopSio2.h" />
|
||||||
|
<Unit filename="../Linux/HostGui.cpp" />
|
||||||
|
<Unit filename="../Linux/LnxMisc.cpp" />
|
||||||
|
<Unit filename="../Linux/LnxThreads.cpp" />
|
||||||
|
<Unit filename="../Linux/memzero.h" />
|
||||||
|
<Unit filename="../MMI.cpp" />
|
||||||
|
<Unit filename="../MTGS.cpp" />
|
||||||
|
<Unit filename="../MemcpyFast.h" />
|
||||||
|
<Unit filename="../Memory.cpp" />
|
||||||
|
<Unit filename="../Memory.h" />
|
||||||
|
<Unit filename="../MemoryCard.cpp" />
|
||||||
|
<Unit filename="../MemoryCard.h" />
|
||||||
|
<Unit filename="../Misc.cpp" />
|
||||||
|
<Unit filename="../Misc.h" />
|
||||||
|
<Unit filename="../NakedAsm.h" />
|
||||||
|
<Unit filename="../NewGUI/AboutBoxDialog.cpp" />
|
||||||
|
<Unit filename="../NewGUI/AboutBoxDialog.h" />
|
||||||
|
<Unit filename="../NewGUI/App.h" />
|
||||||
|
<Unit filename="../NewGUI/AppConfig.cpp" />
|
||||||
|
<Unit filename="../NewGUI/CheckedStaticBox.cpp" />
|
||||||
|
<Unit filename="../NewGUI/CheckedStaticBox.h" />
|
||||||
|
<Unit filename="../NewGUI/ConsoleLogger.cpp" />
|
||||||
|
<Unit filename="../NewGUI/GameFixesDialog.cpp" />
|
||||||
|
<Unit filename="../NewGUI/GameFixesDialog.h" />
|
||||||
|
<Unit filename="../NewGUI/HostGui.cpp" />
|
||||||
|
<Unit filename="../NewGUI/IniInterface.cpp" />
|
||||||
|
<Unit filename="../NewGUI/IniInterface.h" />
|
||||||
|
<Unit filename="../NewGUI/LogOptionsDialog.cpp" />
|
||||||
|
<Unit filename="../NewGUI/LogOptionsDialog.h" />
|
||||||
|
<Unit filename="../NewGUI/MainFrame.cpp" />
|
||||||
|
<Unit filename="../NewGUI/MainFrame.h" />
|
||||||
|
<Unit filename="../NewGUI/main.cpp" />
|
||||||
|
<Unit filename="../NewGUI/wxHelpers.cpp" />
|
||||||
|
<Unit filename="../NewGUI/wxHelpers.h" />
|
||||||
|
<Unit filename="../Patch.cpp" />
|
||||||
|
<Unit filename="../Patch.h" />
|
||||||
|
<Unit filename="../PathUtils.cpp" />
|
||||||
|
<Unit filename="../Paths.h" />
|
||||||
|
<Unit filename="../Plugins.cpp" />
|
||||||
|
<Unit filename="../Plugins.h" />
|
||||||
|
<Unit filename="../PrecompiledHeader.cpp" />
|
||||||
|
<Unit filename="../PrecompiledHeader.h" />
|
||||||
|
<Unit filename="../R3000A.cpp" />
|
||||||
|
<Unit filename="../R3000A.h" />
|
||||||
|
<Unit filename="../R3000AInterpreter.cpp" />
|
||||||
|
<Unit filename="../R3000AOpcodeTables.cpp" />
|
||||||
|
<Unit filename="../R5900.cpp" />
|
||||||
|
<Unit filename="../R5900.h" />
|
||||||
|
<Unit filename="../R5900Exceptions.h" />
|
||||||
|
<Unit filename="../R5900OpcodeImpl.cpp" />
|
||||||
|
<Unit filename="../R5900OpcodeTables.cpp" />
|
||||||
|
<Unit filename="../R5900OpcodeTables.h" />
|
||||||
|
<Unit filename="../RecoverySystem.cpp" />
|
||||||
|
<Unit filename="../RedtapeWindows.h" />
|
||||||
|
<Unit filename="../Resources/AppIcon.h" />
|
||||||
|
<Unit filename="../Resources/BackgroundLogo.h" />
|
||||||
|
<Unit filename="../Resources/EmbeddedImage.h" />
|
||||||
|
<Unit filename="../Resources/ps2_silver.h" />
|
||||||
|
<Unit filename="../SPR.cpp" />
|
||||||
|
<Unit filename="../SPR.h" />
|
||||||
|
<Unit filename="../SafeArray.h" />
|
||||||
|
<Unit filename="../SamplProf.h" />
|
||||||
|
<Unit filename="../SaveState.cpp" />
|
||||||
|
<Unit filename="../SaveState.h" />
|
||||||
|
<Unit filename="../Saveslots.cpp" />
|
||||||
|
<Unit filename="../Sif.cpp" />
|
||||||
|
<Unit filename="../Sif.h" />
|
||||||
|
<Unit filename="../Sifcmd.h" />
|
||||||
|
<Unit filename="../Sio.cpp" />
|
||||||
|
<Unit filename="../Sio.h" />
|
||||||
|
<Unit filename="../SourceLog.cpp" />
|
||||||
|
<Unit filename="../Stats.cpp" />
|
||||||
|
<Unit filename="../Stats.h" />
|
||||||
|
<Unit filename="../StringUtils.cpp" />
|
||||||
|
<Unit filename="../StringUtils.h" />
|
||||||
|
<Unit filename="../System.cpp" />
|
||||||
|
<Unit filename="../System.h" />
|
||||||
|
<Unit filename="../ThreadTools.cpp" />
|
||||||
|
<Unit filename="../Threading.h" />
|
||||||
|
<Unit filename="../Utilities/AsciiFile.h" />
|
||||||
|
<Unit filename="../Utilities/FileUtils.cpp" />
|
||||||
|
<Unit filename="../Utilities/folderdesc.txt" />
|
||||||
|
<Unit filename="../VU.h" />
|
||||||
|
<Unit filename="../VU0.cpp" />
|
||||||
|
<Unit filename="../VU0micro.cpp" />
|
||||||
|
<Unit filename="../VU0microInterp.cpp" />
|
||||||
|
<Unit filename="../VU1micro.cpp" />
|
||||||
|
<Unit filename="../VU1microInterp.cpp" />
|
||||||
|
<Unit filename="../VUflags.cpp" />
|
||||||
|
<Unit filename="../VUflags.h" />
|
||||||
|
<Unit filename="../VUmicro.h" />
|
||||||
|
<Unit filename="../VUmicroMem.cpp" />
|
||||||
|
<Unit filename="../VUops.cpp" />
|
||||||
|
<Unit filename="../VUops.h" />
|
||||||
|
<Unit filename="../Vif.cpp" />
|
||||||
|
<Unit filename="../Vif.h" />
|
||||||
|
<Unit filename="../VifDma.cpp" />
|
||||||
|
<Unit filename="../VifDma.h" />
|
||||||
|
<Unit filename="../pcsxAbout.bmp" />
|
||||||
|
<Unit filename="../rdebug/deci2.cpp">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2.h">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_dbgp.cpp">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_dbgp.h">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_dcmp.cpp">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_dcmp.h">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_drfp.h">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_iloadp.cpp">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_iloadp.h">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_netmp.cpp">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_netmp.h">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_ttyp.cpp">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../rdebug/deci2_ttyp.h">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../tinyxml/tinystr.cpp" />
|
||||||
|
<Unit filename="../tinyxml/tinystr.h" />
|
||||||
|
<Unit filename="../tinyxml/tinyxml.cpp" />
|
||||||
|
<Unit filename="../tinyxml/tinyxml.h" />
|
||||||
|
<Unit filename="../tinyxml/tinyxmlerror.cpp" />
|
||||||
|
<Unit filename="../tinyxml/tinyxmlparser.cpp" />
|
||||||
|
<Unit filename="../vssprintf.cpp" />
|
||||||
|
<Unit filename="../vtlb.cpp" />
|
||||||
|
<Unit filename="../vtlb.h" />
|
||||||
|
<Unit filename="../x86/BaseblockEx.cpp" />
|
||||||
|
<Unit filename="../x86/BaseblockEx.h" />
|
||||||
|
<Unit filename="../x86/aMicroVU.S">
|
||||||
|
<Option target="<{~None~}>" />
|
||||||
|
</Unit>
|
||||||
|
<Unit filename="../x86/aR3000A.S" />
|
||||||
|
<Unit filename="../x86/aVUzerorec.S" />
|
||||||
|
<Unit filename="../x86/aVif.S" />
|
||||||
|
<Unit filename="../x86/fast_routines.S" />
|
||||||
|
<Unit filename="../x86/iCOP0.cpp" />
|
||||||
|
<Unit filename="../x86/iCOP0.h" />
|
||||||
|
<Unit filename="../x86/iCOP2.cpp" />
|
||||||
|
<Unit filename="../x86/iCore.cpp" />
|
||||||
|
<Unit filename="../x86/iCore.h" />
|
||||||
|
<Unit filename="../x86/iFPU.cpp" />
|
||||||
|
<Unit filename="../x86/iFPU.h" />
|
||||||
|
<Unit filename="../x86/iFPUd.cpp" />
|
||||||
|
<Unit filename="../x86/iMMI.cpp" />
|
||||||
|
<Unit filename="../x86/iMMI.h" />
|
||||||
|
<Unit filename="../x86/iR3000A.cpp" />
|
||||||
|
<Unit filename="../x86/iR3000A.h" />
|
||||||
|
<Unit filename="../x86/iR3000Atables.cpp" />
|
||||||
|
<Unit filename="../x86/iR5900.h" />
|
||||||
|
<Unit filename="../x86/iR5900Arit.h" />
|
||||||
|
<Unit filename="../x86/iR5900AritImm.h" />
|
||||||
|
<Unit filename="../x86/iR5900Branch.h" />
|
||||||
|
<Unit filename="../x86/iR5900Jump.h" />
|
||||||
|
<Unit filename="../x86/iR5900LoadStore.h" />
|
||||||
|
<Unit filename="../x86/iR5900Misc.cpp" />
|
||||||
|
<Unit filename="../x86/iR5900Move.h" />
|
||||||
|
<Unit filename="../x86/iR5900MultDiv.h" />
|
||||||
|
<Unit filename="../x86/iR5900Shift.h" />
|
||||||
|
<Unit filename="../x86/iVU0micro.cpp" />
|
||||||
|
<Unit filename="../x86/iVU1micro.cpp" />
|
||||||
|
<Unit filename="../x86/iVUmicro.cpp" />
|
||||||
|
<Unit filename="../x86/iVUmicro.h" />
|
||||||
|
<Unit filename="../x86/iVUmicroLower.cpp" />
|
||||||
|
<Unit filename="../x86/iVUmicroUpper.cpp" />
|
||||||
|
<Unit filename="../x86/iVUops.h" />
|
||||||
|
<Unit filename="../x86/iVUzerorec.cpp" />
|
||||||
|
<Unit filename="../x86/iVUzerorec.h" />
|
||||||
|
<Unit filename="../x86/iVif.cpp" />
|
||||||
|
<Unit filename="../x86/ir5900tables.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/aR5900-32.S" />
|
||||||
|
<Unit filename="../x86/ix86-32/iCore-32.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900-32.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900Arit.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900AritImm.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900Branch.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900Jump.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900LoadStore.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900Move.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900MultDiv.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900Shift.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/iR5900Templates.cpp" />
|
||||||
|
<Unit filename="../x86/ix86-32/recVTLB.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/implement/dwshift.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/group1.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/group2.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/group3.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/incdec.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/jmpcall.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/movs.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/test.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/xchg.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/xmm/arithmetic.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/xmm/basehelpers.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/xmm/comparisons.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/xmm/moremovs.h" />
|
||||||
|
<Unit filename="../x86/ix86/implement/xmm/shufflepack.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_3dnow.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_cpudetect.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_fpu.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_inlines.inl" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_instructions.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_internal.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_jmp.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_legacy.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_legacy_instructions.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_legacy_internal.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_legacy_sse.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_legacy_types.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_simd.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_sse_helpers.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_tools.cpp" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_types.h" />
|
||||||
|
<Unit filename="../x86/ix86/ix86_writers.inl" />
|
||||||
|
<Unit filename="../x86/microVU.cpp" />
|
||||||
|
<Unit filename="../x86/microVU.h" />
|
||||||
|
<Unit filename="../x86/microVU_Alloc.h" />
|
||||||
|
<Unit filename="../x86/microVU_Alloc.inl" />
|
||||||
|
<Unit filename="../x86/microVU_Analyze.inl" />
|
||||||
|
<Unit filename="../x86/microVU_Compile.inl" />
|
||||||
|
<Unit filename="../x86/microVU_Execute.inl" />
|
||||||
|
<Unit filename="../x86/microVU_Log.inl" />
|
||||||
|
<Unit filename="../x86/microVU_Lower.inl" />
|
||||||
|
<Unit filename="../x86/microVU_Misc.h" />
|
||||||
|
<Unit filename="../x86/microVU_Misc.inl" />
|
||||||
|
<Unit filename="../x86/microVU_Tables.inl" />
|
||||||
|
<Unit filename="../x86/microVU_Upper.inl" />
|
||||||
|
<Unit filename="../xmlpatchloader.cpp" />
|
||||||
|
<Extensions>
|
||||||
|
<envvars />
|
||||||
|
<code_completion>
|
||||||
|
<search_path add="/usr/include/wx-2.8" />
|
||||||
|
</code_completion>
|
||||||
|
<lib_finder disable_auto="1" />
|
||||||
|
<debugger />
|
||||||
|
</Extensions>
|
||||||
|
</Project>
|
||||||
|
</CodeBlocks_project_file>
|
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -21,10 +21,10 @@
|
||||||
RAM
|
RAM
|
||||||
---
|
---
|
||||||
0x00100000-0x01ffffff this is the physical address for the ram.its cached there
|
0x00100000-0x01ffffff this is the physical address for the ram.its cached there
|
||||||
0x20100000-0x21ffffff uncached
|
0x20100000-0x21ffffff uncached
|
||||||
0x30100000-0x31ffffff uncached & acceleretade
|
0x30100000-0x31ffffff uncached & acceleretade
|
||||||
0xa0000000-0xa1ffffff MIRROR might...???
|
0xa0000000-0xa1ffffff MIRROR might...???
|
||||||
0x80000000-0x81ffffff MIRROR might... ????
|
0x80000000-0x81ffffff MIRROR might... ????
|
||||||
|
|
||||||
scratch pad
|
scratch pad
|
||||||
----------
|
----------
|
||||||
|
@ -93,8 +93,8 @@ void loadBiosRom( const wxChar *ext, u8 *dest, long maxSize )
|
||||||
|
|
||||||
// Try first a basic extension concatenation (normally results in something like name.bin.rom1)
|
// Try first a basic extension concatenation (normally results in something like name.bin.rom1)
|
||||||
const wxString Bios( g_Conf.Files.Bios() );
|
const wxString Bios( g_Conf.Files.Bios() );
|
||||||
Bios1.Printf( wxS("%s.%s"), Bios.c_str(), ext);
|
Bios1.Printf( wxT("%s.%s"), Bios.c_str(), ext);
|
||||||
|
|
||||||
if( (filesize=Path::GetFileSize( Bios1 ) ) <= 0 )
|
if( (filesize=Path::GetFileSize( Bios1 ) ) <= 0 )
|
||||||
{
|
{
|
||||||
// Try the name properly extensioned next (name.rom1)
|
// Try the name properly extensioned next (name.rom1)
|
||||||
|
@ -136,7 +136,7 @@ void MyMemCheck(u32 mem)
|
||||||
}
|
}
|
||||||
|
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
// REGULAR MEM START
|
// REGULAR MEM START
|
||||||
/////////////////////////////
|
/////////////////////////////
|
||||||
vtlbHandler tlb_fallback_0;
|
vtlbHandler tlb_fallback_0;
|
||||||
vtlbHandler tlb_fallback_1;
|
vtlbHandler tlb_fallback_1;
|
||||||
|
@ -171,7 +171,7 @@ void memMapPhy()
|
||||||
{
|
{
|
||||||
//Main mem
|
//Main mem
|
||||||
vtlb_MapBlock(psM,0x00000000,Ps2MemSize::Base);//mirrored on first 256 mb ?
|
vtlb_MapBlock(psM,0x00000000,Ps2MemSize::Base);//mirrored on first 256 mb ?
|
||||||
|
|
||||||
//Rom
|
//Rom
|
||||||
vtlb_MapBlock(psR,0x1fc00000,Ps2MemSize::Rom);//Writable ?
|
vtlb_MapBlock(psR,0x1fc00000,Ps2MemSize::Rom);//Writable ?
|
||||||
//Rom 1
|
//Rom 1
|
||||||
|
@ -230,18 +230,18 @@ void memMapKernelMem()
|
||||||
}
|
}
|
||||||
|
|
||||||
//what do do with these ?
|
//what do do with these ?
|
||||||
void memMapSupervisorMem()
|
void memMapSupervisorMem()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void memMapUserMem()
|
void memMapUserMem()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
template<int p>
|
template<int p>
|
||||||
mem8_t __fastcall _ext_memRead8 (u32 mem)
|
mem8_t __fastcall _ext_memRead8 (u32 mem)
|
||||||
{
|
{
|
||||||
switch (p)
|
switch (p)
|
||||||
{
|
{
|
||||||
case 1: // hwm
|
case 1: // hwm
|
||||||
return hwRead8(mem);
|
return hwRead8(mem);
|
||||||
|
@ -297,7 +297,7 @@ mem16_t __fastcall _ext_memRead16(u32 mem)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<int p>
|
template<int p>
|
||||||
mem32_t __fastcall _ext_memRead32(u32 mem)
|
mem32_t __fastcall _ext_memRead32(u32 mem)
|
||||||
{
|
{
|
||||||
switch (p)
|
switch (p)
|
||||||
{
|
{
|
||||||
|
@ -586,7 +586,7 @@ void __fastcall vuMicroWrite128(u32 addr,const mem128_t* data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void memSetPageAddr(u32 vaddr, u32 paddr)
|
void memSetPageAddr(u32 vaddr, u32 paddr)
|
||||||
{
|
{
|
||||||
//Console::WriteLn("memSetPageAddr: %8.8x -> %8.8x", params vaddr, paddr);
|
//Console::WriteLn("memSetPageAddr: %8.8x -> %8.8x", params vaddr, paddr);
|
||||||
|
|
||||||
|
@ -594,7 +594,7 @@ void memSetPageAddr(u32 vaddr, u32 paddr)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void memClearPageAddr(u32 vaddr)
|
void memClearPageAddr(u32 vaddr)
|
||||||
{
|
{
|
||||||
//Console::WriteLn("memClearPageAddr: %8.8x", params vaddr);
|
//Console::WriteLn("memClearPageAddr: %8.8x", params vaddr);
|
||||||
|
|
||||||
|
@ -609,13 +609,13 @@ void memClearPageAddr(u32 vaddr)
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// PS2 Memory Init / Reset / Shutdown
|
// PS2 Memory Init / Reset / Shutdown
|
||||||
|
|
||||||
static const uint m_allMemSize =
|
static const uint m_allMemSize =
|
||||||
Ps2MemSize::Rom + Ps2MemSize::Rom1 + Ps2MemSize::Rom2 + Ps2MemSize::ERom +
|
Ps2MemSize::Rom + Ps2MemSize::Rom1 + Ps2MemSize::Rom2 + Ps2MemSize::ERom +
|
||||||
Ps2MemSize::Base + Ps2MemSize::Hardware + Ps2MemSize::Scratch;
|
Ps2MemSize::Base + Ps2MemSize::Hardware + Ps2MemSize::Scratch;
|
||||||
|
|
||||||
static u8* m_psAllMem = NULL;
|
static u8* m_psAllMem = NULL;
|
||||||
|
|
||||||
void memAlloc()
|
void memAlloc()
|
||||||
{
|
{
|
||||||
if( m_psAllMem == NULL )
|
if( m_psAllMem == NULL )
|
||||||
m_psAllMem = vtlb_malloc( m_allMemSize, 4096, 0x2400000 );
|
m_psAllMem = vtlb_malloc( m_allMemSize, 4096, 0x2400000 );
|
||||||
|
@ -625,7 +625,7 @@ void memAlloc()
|
||||||
|
|
||||||
u8* curpos = m_psAllMem;
|
u8* curpos = m_psAllMem;
|
||||||
psM = curpos; curpos += Ps2MemSize::Base;
|
psM = curpos; curpos += Ps2MemSize::Base;
|
||||||
psR = curpos; curpos += Ps2MemSize::Rom;
|
psR = curpos; curpos += Ps2MemSize::Rom;
|
||||||
psR1 = curpos; curpos += Ps2MemSize::Rom1;
|
psR1 = curpos; curpos += Ps2MemSize::Rom1;
|
||||||
psR2 = curpos; curpos += Ps2MemSize::Rom2;
|
psR2 = curpos; curpos += Ps2MemSize::Rom2;
|
||||||
psER = curpos; curpos += Ps2MemSize::ERom;
|
psER = curpos; curpos += Ps2MemSize::ERom;
|
||||||
|
@ -633,7 +633,7 @@ void memAlloc()
|
||||||
psS = curpos; //curpos += Ps2MemSize::Scratch;
|
psS = curpos; //curpos += Ps2MemSize::Scratch;
|
||||||
}
|
}
|
||||||
|
|
||||||
void memShutdown()
|
void memShutdown()
|
||||||
{
|
{
|
||||||
vtlb_free( m_psAllMem, m_allMemSize );
|
vtlb_free( m_psAllMem, m_allMemSize );
|
||||||
m_psAllMem = NULL;
|
m_psAllMem = NULL;
|
||||||
|
@ -843,7 +843,7 @@ void mmap_ResetBlockTracking()
|
||||||
void mmap_ClearCpuBlock( uint offset )
|
void mmap_ClearCpuBlock( uint offset )
|
||||||
{
|
{
|
||||||
HostSys::MemProtect( &psM[offset], 1, Protect_ReadWrite );
|
HostSys::MemProtect( &psM[offset], 1, Protect_ReadWrite );
|
||||||
|
|
||||||
offset>>=12;
|
offset>>=12;
|
||||||
psMPWC[(offset/32)]|=(1<<(offset&31));
|
psMPWC[(offset/32)]|=(1<<(offset&31));
|
||||||
|
|
||||||
|
@ -852,4 +852,4 @@ void mmap_ClearCpuBlock( uint offset )
|
||||||
Cpu->Clear(psMPWVA[offset][i],0x400);
|
Cpu->Clear(psMPWVA[offset][i],0x400);
|
||||||
}
|
}
|
||||||
psMPWVA[offset].clear();
|
psMPWVA[offset].clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -70,7 +70,7 @@ struct romdir
|
||||||
u16 extInfoSize;
|
u16 extInfoSize;
|
||||||
u32 fileSize;
|
u32 fileSize;
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
};
|
};
|
||||||
#pragma pack() //+22
|
#pragma pack() //+22
|
||||||
#else
|
#else
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
@ -146,12 +146,12 @@ bool IsBIOS(const wxString& filename, wxString& description)
|
||||||
if (strcmp(rd.fileName, "ROMVER") == 0) // found romver
|
if (strcmp(rd.fileName, "ROMVER") == 0) // found romver
|
||||||
{
|
{
|
||||||
char aROMVER[14+1]; // ascii version loaded from disk.
|
char aROMVER[14+1]; // ascii version loaded from disk.
|
||||||
|
|
||||||
uint filepos = fp.Tell();
|
uint filepos = fp.Tell();
|
||||||
fp.Seek( fileOffset );
|
fp.Seek( fileOffset );
|
||||||
if( fp.Read( &aROMVER, 14 ) == 0 ) break;
|
if( fp.Read( &aROMVER, 14 ) == 0 ) break;
|
||||||
fp.Seek( filepos ); //go back
|
fp.Seek( filepos ); //go back
|
||||||
|
|
||||||
const char zonefail[2] = { aROMVER[4], '\0' }; // the default "zone" (unknown code)
|
const char zonefail[2] = { aROMVER[4], '\0' }; // the default "zone" (unknown code)
|
||||||
const char* zone = zonefail;
|
const char* zone = zonefail;
|
||||||
|
|
||||||
|
@ -217,13 +217,13 @@ int GetPS2ElfName( wxString& name )
|
||||||
Console::Error("Boot Error > SYSTEM.CNF not found");
|
Console::Error("Boot Error > SYSTEM.CNF not found");
|
||||||
return 0;//could not find; not a PS/PS2 cdvd
|
return 0;//could not find; not a PS/PS2 cdvd
|
||||||
}
|
}
|
||||||
|
|
||||||
f=CDVDFS_open("SYSTEM.CNF;1", 1);
|
f=CDVDFS_open("SYSTEM.CNF;1", 1);
|
||||||
CDVDFS_read(f, buffer, g_MaxPath);
|
CDVDFS_read(f, buffer, g_MaxPath);
|
||||||
CDVDFS_close(f);
|
CDVDFS_close(f);
|
||||||
|
|
||||||
buffer[tocEntry.fileSize]='\0';
|
buffer[tocEntry.fileSize]='\0';
|
||||||
|
|
||||||
pos=strstr(buffer, "BOOT2");
|
pos=strstr(buffer, "BOOT2");
|
||||||
if (pos==NULL){
|
if (pos==NULL){
|
||||||
pos=strstr(buffer, "BOOT");
|
pos=strstr(buffer, "BOOT");
|
||||||
|
@ -234,7 +234,7 @@ int GetPS2ElfName( wxString& name )
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
pos+=strlen("BOOT2");
|
pos+=strlen("BOOT2");
|
||||||
while (pos && *pos && pos<&buffer[g_MaxPath]
|
while (pos && *pos && pos<&buffer[g_MaxPath]
|
||||||
&& (*pos<'A' || (*pos>'Z' && *pos<'a') || *pos>'z'))
|
&& (*pos<'A' || (*pos>'Z' && *pos<'a') || *pos>'z'))
|
||||||
pos++;
|
pos++;
|
||||||
if (!pos || *pos==0)
|
if (!pos || *pos==0)
|
||||||
|
@ -283,10 +283,10 @@ void SaveGSState(const wxString& file)
|
||||||
if( g_SaveGSStream ) return;
|
if( g_SaveGSStream ) return;
|
||||||
|
|
||||||
Console::WriteLn( "Saving GS State..." );
|
Console::WriteLn( "Saving GS State..." );
|
||||||
Console::WriteLn( "\t%s", params file.mb_str() );
|
Console::WriteLn( wxsFormat( L"\t%s", file.c_str() ) );
|
||||||
|
|
||||||
g_fGSSave = new gzSavingState( file );
|
g_fGSSave = new gzSavingState( file );
|
||||||
|
|
||||||
g_SaveGSStream = 1;
|
g_SaveGSStream = 1;
|
||||||
g_nLeftGSFrames = 2;
|
g_nLeftGSFrames = 2;
|
||||||
|
|
||||||
|
@ -419,7 +419,7 @@ 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
|
||||||
|
@ -450,7 +450,7 @@ void ProcessFKeys(int fkey, struct KeyModifiers *keymod)
|
||||||
GSchangeSaveState(StatesC, SaveState::GetFilename(StatesC).mb_str());
|
GSchangeSaveState(StatesC, SaveState::GetFilename(StatesC).mb_str());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
gzLoadingState joe( SaveState::GetFilename( StatesC ) ); // throws exception on version mismatch
|
gzLoadingState joe( SaveState::GetFilename( StatesC ) ); // throws exception on version mismatch
|
||||||
|
@ -477,7 +477,7 @@ void ProcessFKeys(int fkey, struct KeyModifiers *keymod)
|
||||||
throw Exception::CpuStateShutdown(
|
throw Exception::CpuStateShutdown(
|
||||||
// english log message:
|
// english log message:
|
||||||
wxsFormat( wxT("Error! Could not load from saveslot %d\n"), StatesC ) + ex.LogMessage(),
|
wxsFormat( wxT("Error! Could not load from saveslot %d\n"), StatesC ) + ex.LogMessage(),
|
||||||
|
|
||||||
// translated message:
|
// translated message:
|
||||||
wxsFormat( _("Error loading saveslot %d. Emulator reset."), StatesC )
|
wxsFormat( _("Error loading saveslot %d. Emulator reset."), StatesC )
|
||||||
);
|
);
|
||||||
|
@ -492,9 +492,9 @@ void ProcessFKeys(int fkey, struct KeyModifiers *keymod)
|
||||||
case 8:
|
case 8:
|
||||||
GSmakeSnapshot( g_Conf.Folders.Snapshots.ToAscii().data() );
|
GSmakeSnapshot( g_Conf.Folders.Snapshots.ToAscii().data() );
|
||||||
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;
|
||||||
|
@ -503,7 +503,7 @@ void ProcessFKeys(int fkey, struct KeyModifiers *keymod)
|
||||||
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;
|
||||||
|
@ -519,15 +519,15 @@ void ProcessFKeys(int fkey, struct KeyModifiers *keymod)
|
||||||
// I might add turning EE, VU0, and VU1 recs on and off by hotkey at some point, too.
|
// I might add turning EE, VU0, and VU1 recs on and off by hotkey at some point, too.
|
||||||
// --arcum42
|
// --arcum42
|
||||||
enableLogging = !enableLogging;
|
enableLogging = !enableLogging;
|
||||||
|
|
||||||
if (enableLogging)
|
if (enableLogging)
|
||||||
GSprintf(10, "Logging Enabled.");
|
GSprintf(10, "Logging Enabled.");
|
||||||
else
|
else
|
||||||
GSprintf(10,"Logging Disabled.");
|
GSprintf(10,"Logging Disabled.");
|
||||||
|
|
||||||
break;
|
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" );
|
||||||
}
|
}
|
||||||
|
@ -554,30 +554,30 @@ void ProcessFKeys(int fkey, struct KeyModifiers *keymod)
|
||||||
{
|
{
|
||||||
Text = GetGSStateFilename();
|
Text = GetGSStateFilename();
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveGSState(Text);
|
SaveGSState(Text);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case 12:
|
case 12:
|
||||||
if( keymod->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 if( GSsetupRecording != NULL )
|
||||||
GSsetupRecording(g_Pcsx2Recording, NULL);
|
GSsetupRecording(g_Pcsx2Recording, NULL);
|
||||||
|
|
||||||
if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL);
|
if( SPU2setupRecording != NULL ) SPU2setupRecording(g_Pcsx2Recording, NULL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,25 +5,25 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Externs for various routines that are defined in assembly files on Linux.
|
// Externs for various routines that are defined in assembly files on Linux.
|
||||||
#ifndef NAKED_ASM_H
|
#ifndef NAKED_ASM_H
|
||||||
#define NAKED_ASM_H
|
#define NAKED_ASM_H
|
||||||
|
|
||||||
#include "coroutine.h"
|
#include "IPU/coroutine.h"
|
||||||
|
|
||||||
// Common to Windows and Linux
|
// Common to Windows and Linux
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
// acoroutine.S
|
// acoroutine.S
|
||||||
void so_call(coroutine_t coro);
|
void so_call(coroutine_t coro);
|
||||||
|
@ -44,18 +44,18 @@ void iopRecRecompile(u32 startpc);
|
||||||
PCSX2_ALIGNED16( u8 _xmm_backup[16*2] );
|
PCSX2_ALIGNED16( u8 _xmm_backup[16*2] );
|
||||||
PCSX2_ALIGNED16( u8 _mmx_backup[8*4] );
|
PCSX2_ALIGNED16( u8 _mmx_backup[8*4] );
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
// aVUzerorec.S
|
// aVUzerorec.S
|
||||||
void* SuperVUGetProgram(u32 startpc, int vuindex);
|
void* SuperVUGetProgram(u32 startpc, int vuindex);
|
||||||
void SuperVUCleanupProgram(u32 startpc, int vuindex);
|
void SuperVUCleanupProgram(u32 startpc, int vuindex);
|
||||||
void svudispfn();
|
void svudispfn();
|
||||||
|
|
||||||
// aR3000A.S
|
// aR3000A.S
|
||||||
void iopJITCompile();
|
void iopJITCompile();
|
||||||
void iopJITCompileInBlock();
|
void iopJITCompileInBlock();
|
||||||
void iopDispatcherReg();
|
void iopDispatcherReg();
|
||||||
|
|
||||||
// aR5900-32.S
|
// aR5900-32.S
|
||||||
void JITCompile();
|
void JITCompile();
|
||||||
void JITCompileInBlock();
|
void JITCompileInBlock();
|
||||||
|
|
|
@ -7,7 +7,7 @@ bin_PROGRAMS = pcsx2
|
||||||
pcsx2_SOURCES = \
|
pcsx2_SOURCES = \
|
||||||
CheckedStaticBox.cpp ConsoleLogger.cpp MainFrame.cpp wxHelpers.cpp AppConfig.cpp main.cpp \
|
CheckedStaticBox.cpp ConsoleLogger.cpp MainFrame.cpp wxHelpers.cpp AppConfig.cpp main.cpp \
|
||||||
App.h CheckedStaticBox.h MainFrame.h wxHelpers.h \
|
App.h CheckedStaticBox.h MainFrame.h wxHelpers.h \
|
||||||
AboutBoxDialog.cpp GameFixesDialog.cpp LogOptionsDialog.cpp \
|
IniInterface.cpp AboutBoxDialog.cpp GameFixesDialog.cpp LogOptionsDialog.cpp \
|
||||||
AboutBoxDialog.h GameFixesDialog.h LogOptionsDialog.h
|
AboutBoxDialog.h GameFixesDialog.h LogOptionsDialog.h
|
||||||
|
|
||||||
pcsx2_LDFLAGS =
|
pcsx2_LDFLAGS =
|
||||||
|
@ -18,4 +18,4 @@ pcsx2_DEPENDENCIES += ../DebugTools/libDebugTools.a
|
||||||
|
|
||||||
pcsx2_LDADD = ../libpcsx2.a ../IPU/libIPU.a ../IPU/mpeg2lib/libmpeg2IPU.a ../RDebug/libRDebug.a ../tinyxml/libtinyxml.a
|
pcsx2_LDADD = ../libpcsx2.a ../IPU/libIPU.a ../IPU/mpeg2lib/libmpeg2IPU.a ../RDebug/libRDebug.a ../tinyxml/libtinyxml.a
|
||||||
pcsx2_LDADD += ../x86/libx86recomp.a ../x86/ix86/libix86.a
|
pcsx2_LDADD += ../x86/libx86recomp.a ../x86/ix86/libix86.a
|
||||||
pcsx2_LDADD += ../DebugTools/libDebugTools.a
|
pcsx2_LDADD += ../DebugTools/libDebugTools.a
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#ifndef _PCSX2_PRECOMPILED_HEADER_
|
|
||||||
#define _PCSX2_PRECOMPILED_HEADER_
|
|
||||||
#endif // pragma once
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Microsoft specific STL extensions for bounds checking and stuff: Enabled in devbuilds,
|
// Microsoft specific STL extensions for bounds checking and stuff: Enabled in devbuilds,
|
||||||
// disabled in release builds. :)
|
// disabled in release builds. :)
|
||||||
|
@ -172,7 +168,7 @@ static __forceinline u32 timeGetTime()
|
||||||
#else
|
#else
|
||||||
|
|
||||||
# define DevCon 0&&Console
|
# define DevCon 0&&Console
|
||||||
# define DevMsg
|
# define DevMsg
|
||||||
static const bool IsDevBuild = false;
|
static const bool IsDevBuild = false;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -31,7 +31,7 @@ static int Slots[5] = { -1, -1, -1, -1, -1 };
|
||||||
|
|
||||||
bool States_isSlotUsed(int num)
|
bool States_isSlotUsed(int num)
|
||||||
{
|
{
|
||||||
if (ElfCRC == 0)
|
if (ElfCRC == 0)
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
return wxFileExists( SaveState::GetFilename( num ) );
|
return wxFileExists( SaveState::GetFilename( num ) );
|
||||||
|
@ -105,7 +105,7 @@ void States_Load(int num)
|
||||||
}
|
}
|
||||||
catch( Exception::StateLoadError_Recoverable& ex)
|
catch( Exception::StateLoadError_Recoverable& ex)
|
||||||
{
|
{
|
||||||
Console::Notice( wxsFormat( L"Could not load savestate slot %d.\n\n%s", num, ex.LogMessage() ) );
|
Console::Notice( wxsFormat( L"Could not load savestate slot %d.\n\n%s", num, ex.LogMessage().c_str() ) );
|
||||||
|
|
||||||
// At this point the cpu hasn't been reset, so we can return
|
// At this point the cpu hasn't been reset, so we can return
|
||||||
// control to the user safely... (that's why we use a console notice instead of a popup)
|
// control to the user safely... (that's why we use a console notice instead of a popup)
|
||||||
|
|
|
@ -8,16 +8,16 @@
|
||||||
// Redistribution and use in source and binary forms, with or without
|
// Redistribution and use in source and binary forms, with or without
|
||||||
// modification, are permitted provided that the following conditions
|
// modification, are permitted provided that the following conditions
|
||||||
// are met:
|
// are met:
|
||||||
//
|
//
|
||||||
// 1. Redistributions of source code must retain the above copyright
|
// 1. Redistributions of source code must retain the above copyright
|
||||||
// notice, this list of conditions and the following disclaimer.
|
// notice, this list of conditions and the following disclaimer.
|
||||||
// 2. Redistributions in binary form must reproduce the above copyright
|
// 2. Redistributions in binary form must reproduce the above copyright
|
||||||
// notice, this list of conditions and the following disclaimer in the
|
// notice, this list of conditions and the following disclaimer in the
|
||||||
// documentation and/or other materials provided with the distribution.
|
// documentation and/or other materials provided with the distribution.
|
||||||
// 3. Neither the name of the project nor the names of its contributors
|
// 3. Neither the name of the project nor the names of its contributors
|
||||||
// may be used to endorse or promote products derived from this software
|
// may be used to endorse or promote products derived from this software
|
||||||
// without specific prior written permission.
|
// without specific prior written permission.
|
||||||
//
|
//
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
@ -27,9 +27,9 @@
|
||||||
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
// SUCH DAMAGE.
|
// SUCH DAMAGE.
|
||||||
//
|
//
|
||||||
|
|
||||||
// modified by gigahers and air to write formatted output directly into a std::string container.
|
// modified by gigahers and air to write formatted output directly into a std::string container.
|
||||||
|
|
||||||
|
@ -84,19 +84,19 @@ static void cvt(char (&buf)[_CVTBUFSIZE], double arg, int preci, int& decpt, int
|
||||||
arg = modf(arg, &fi);
|
arg = modf(arg, &fi);
|
||||||
p1 = &buf[_CVTBUFSIZE];
|
p1 = &buf[_CVTBUFSIZE];
|
||||||
|
|
||||||
if (fi != 0)
|
if (fi != 0)
|
||||||
{
|
{
|
||||||
while (fi != 0)
|
while (fi != 0)
|
||||||
{
|
{
|
||||||
fj = modf(fi / 10, &fi);
|
fj = modf(fi / 10, &fi);
|
||||||
*--p1 = (int)((fj + .03) * 10) + '0';
|
*--p1 = (int)((fj + .03) * 10) + '0';
|
||||||
r2++;
|
r2++;
|
||||||
}
|
}
|
||||||
while (p1 < &buf[_CVTBUFSIZE]) *p++ = *p1++;
|
while (p1 < &buf[_CVTBUFSIZE]) *p++ = *p1++;
|
||||||
}
|
}
|
||||||
else if (arg > 0)
|
else if (arg > 0)
|
||||||
{
|
{
|
||||||
while ((fj = arg * 10) < 1)
|
while ((fj = arg * 10) < 1)
|
||||||
{
|
{
|
||||||
arg = fj;
|
arg = fj;
|
||||||
r2--;
|
r2--;
|
||||||
|
@ -107,7 +107,7 @@ static void cvt(char (&buf)[_CVTBUFSIZE], double arg, int preci, int& decpt, int
|
||||||
|
|
||||||
if (eflag == 0) p1 += r2;
|
if (eflag == 0) p1 += r2;
|
||||||
decpt = r2;
|
decpt = r2;
|
||||||
if (p1 < &buf[0])
|
if (p1 < &buf[0])
|
||||||
{
|
{
|
||||||
buf[0] = '\0';
|
buf[0] = '\0';
|
||||||
return;
|
return;
|
||||||
|
@ -118,23 +118,23 @@ static void cvt(char (&buf)[_CVTBUFSIZE], double arg, int preci, int& decpt, int
|
||||||
arg = modf(arg, &fj);
|
arg = modf(arg, &fj);
|
||||||
*p++ = (int) fj + '0';
|
*p++ = (int) fj + '0';
|
||||||
}
|
}
|
||||||
if (p1 >= &buf[_CVTBUFSIZE])
|
if (p1 >= &buf[_CVTBUFSIZE])
|
||||||
{
|
{
|
||||||
buf[_CVTBUFSIZE - 1] = '\0';
|
buf[_CVTBUFSIZE - 1] = '\0';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
p = p1;
|
p = p1;
|
||||||
*p1 += 5;
|
*p1 += 5;
|
||||||
while (*p1 > '9')
|
while (*p1 > '9')
|
||||||
{
|
{
|
||||||
*p1 = '0';
|
*p1 = '0';
|
||||||
if (p1 > buf)
|
if (p1 > buf)
|
||||||
++*--p1;
|
++*--p1;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*p1 = '1';
|
*p1 = '1';
|
||||||
decpt++;
|
decpt++;
|
||||||
if (eflag == 0)
|
if (eflag == 0)
|
||||||
{
|
{
|
||||||
if (p > buf) *p = '0';
|
if (p > buf) *p = '0';
|
||||||
p++;
|
p++;
|
||||||
|
@ -285,19 +285,19 @@ static void iaddr( std::string& dest, unsigned char *addr, int size, int precisi
|
||||||
{
|
{
|
||||||
if (i != 0) tmp[len++] = '.';
|
if (i != 0) tmp[len++] = '.';
|
||||||
n = addr[i];
|
n = addr[i];
|
||||||
|
|
||||||
if (n == 0)
|
if (n == 0)
|
||||||
tmp[len++] = digits[0];
|
tmp[len++] = digits[0];
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (n >= 100)
|
if (n >= 100)
|
||||||
{
|
{
|
||||||
tmp[len++] = digits[n / 100];
|
tmp[len++] = digits[n / 100];
|
||||||
n = n % 100;
|
n = n % 100;
|
||||||
tmp[len++] = digits[n / 10];
|
tmp[len++] = digits[n / 10];
|
||||||
n = n % 10;
|
n = n % 10;
|
||||||
}
|
}
|
||||||
else if (n >= 10)
|
else if (n >= 10)
|
||||||
{
|
{
|
||||||
tmp[len++] = digits[n / 10];
|
tmp[len++] = digits[n / 10];
|
||||||
n = n % 10;
|
n = n % 10;
|
||||||
|
@ -434,7 +434,7 @@ static void forcdecpt(char *buffer)
|
||||||
if (*buffer)
|
if (*buffer)
|
||||||
{
|
{
|
||||||
int n = strlen(buffer);
|
int n = strlen(buffer);
|
||||||
while (n > 0)
|
while (n > 0)
|
||||||
{
|
{
|
||||||
buffer[n + 1] = buffer[n];
|
buffer[n + 1] = buffer[n];
|
||||||
n--;
|
n--;
|
||||||
|
@ -578,7 +578,7 @@ repeat:
|
||||||
precision = -1;
|
precision = -1;
|
||||||
if (*fmt == '.')
|
if (*fmt == '.')
|
||||||
{
|
{
|
||||||
++fmt;
|
++fmt;
|
||||||
if (is_digit(*fmt))
|
if (is_digit(*fmt))
|
||||||
precision = skip_atoi(&fmt);
|
precision = skip_atoi(&fmt);
|
||||||
else if (*fmt == '*')
|
else if (*fmt == '*')
|
||||||
|
@ -748,9 +748,11 @@ repeat:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s32 num;
|
s32 num;
|
||||||
if (qualifier == 'h')
|
// Modern 32 bit compilers pass parameters into va_arg by 32 bit scale always,
|
||||||
num = va_arg(args, s16);
|
// so no point in using or checking for the 'h' parameter.
|
||||||
else // 'l' qualifier or no qualifier means 32 bits on all our std target platforms.
|
/*if (qualifier == 'h')
|
||||||
|
num = va_arg(args, int);
|
||||||
|
else*/ // 'l' qualifier or no qualifier means 32 bits on all our std target platforms.
|
||||||
num = va_arg(args, s32);
|
num = va_arg(args, s32);
|
||||||
|
|
||||||
number(dest, num, base, field_width, precision, flags);
|
number(dest, num, base, field_width, precision, flags);
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -69,7 +69,7 @@ vtlbHandler UnmappedPhyHandler1;
|
||||||
shr ecx,12;
|
shr ecx,12;
|
||||||
mov ecx,[ecx*4+vmap]; //translate
|
mov ecx,[ecx*4+vmap]; //translate
|
||||||
add ecx,eax; //transform
|
add ecx,eax; //transform
|
||||||
|
|
||||||
js callfunction; //if <0 its invalid ptr :)
|
js callfunction; //if <0 its invalid ptr :)
|
||||||
|
|
||||||
mov eax,[ecx];
|
mov eax,[ecx];
|
||||||
|
@ -131,7 +131,7 @@ __forceinline void __fastcall MemOp_r1(u32 addr, DataType* data)
|
||||||
data[1]=*reinterpret_cast<DataType*>(ppf+8);
|
data[1]=*reinterpret_cast<DataType*>(ppf+8);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//has to: translate, find function, call function
|
//has to: translate, find function, call function
|
||||||
u32 hand=(u8)vmv;
|
u32 hand=(u8)vmv;
|
||||||
u32 paddr=ppf-hand+0x80000000;
|
u32 paddr=ppf-hand+0x80000000;
|
||||||
|
@ -158,7 +158,7 @@ __forceinline void __fastcall MemOp_w0(u32 addr, DataType data)
|
||||||
*reinterpret_cast<DataType*>(ppf)=data;
|
*reinterpret_cast<DataType*>(ppf)=data;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//has to: translate, find function, call function
|
//has to: translate, find function, call function
|
||||||
u32 hand=(u8)vmv;
|
u32 hand=(u8)vmv;
|
||||||
u32 paddr=ppf-hand+0x80000000;
|
u32 paddr=ppf-hand+0x80000000;
|
||||||
|
@ -187,7 +187,7 @@ __forceinline void __fastcall MemOp_w1(u32 addr,const DataType* data)
|
||||||
*reinterpret_cast<DataType*>(ppf+8)=data[1];
|
*reinterpret_cast<DataType*>(ppf+8)=data[1];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//has to: translate, find function, call function
|
//has to: translate, find function, call function
|
||||||
u32 hand=(u8)vmv;
|
u32 hand=(u8)vmv;
|
||||||
u32 paddr=ppf-hand+0x80000000;
|
u32 paddr=ppf-hand+0x80000000;
|
||||||
|
@ -246,7 +246,7 @@ void __fastcall vtlb_memWrite128(u32 mem, const mem128_t *value)
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// Error / TLB Miss Handlers
|
// Error / TLB Miss Handlers
|
||||||
//
|
//
|
||||||
|
|
||||||
static const char* _getModeStr( u32 mode )
|
static const char* _getModeStr( u32 mode )
|
||||||
{
|
{
|
||||||
|
@ -330,7 +330,7 @@ void __fastcall vtlbDefaultPhyWrite128(u32 addr,const mem128_t* data) { Console:
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// VTLB Public API -- Init/Term/RegisterHandler stuff
|
// VTLB Public API -- Init/Term/RegisterHandler stuff
|
||||||
//
|
//
|
||||||
|
|
||||||
// Registers a handler into the VTLB's internal handler array. The handler defines specific behavior
|
// Registers a handler into the VTLB's internal handler array. The handler defines specific behavior
|
||||||
// for how memory pages bound to the handler are read from / written to. If any of the handler pointers
|
// for how memory pages bound to the handler are read from / written to. If any of the handler pointers
|
||||||
|
@ -345,18 +345,18 @@ vtlbHandler vtlb_RegisterHandler( vtlbMemR8FP* r8,vtlbMemR16FP* r16,vtlbMemR32FP
|
||||||
{
|
{
|
||||||
//write the code :p
|
//write the code :p
|
||||||
vtlbHandler rv=vtlbHandlerCount++;
|
vtlbHandler rv=vtlbHandlerCount++;
|
||||||
|
|
||||||
vtlbdata.RWFT[0][0][rv] = (r8!=0) ? r8:vtlbDefaultPhyRead8;
|
|
||||||
vtlbdata.RWFT[1][0][rv] = (r16!=0) ? r16:vtlbDefaultPhyRead16;
|
|
||||||
vtlbdata.RWFT[2][0][rv] = (r32!=0) ? r32:vtlbDefaultPhyRead32;
|
|
||||||
vtlbdata.RWFT[3][0][rv] = (r64!=0) ? r64:vtlbDefaultPhyRead64;
|
|
||||||
vtlbdata.RWFT[4][0][rv] = (r128!=0) ? r128:vtlbDefaultPhyRead128;
|
|
||||||
|
|
||||||
vtlbdata.RWFT[0][1][rv] = (w8!=0) ? w8:vtlbDefaultPhyWrite8;
|
vtlbdata.RWFT[0][0][rv] = (r8!=0) ? (void*)r8:(void*)vtlbDefaultPhyRead8;
|
||||||
vtlbdata.RWFT[1][1][rv] = (w16!=0) ? w16:vtlbDefaultPhyWrite16;
|
vtlbdata.RWFT[1][0][rv] = (r16!=0) ? (void*)r16:(void*)vtlbDefaultPhyRead16;
|
||||||
vtlbdata.RWFT[2][1][rv] = (w32!=0) ? w32:vtlbDefaultPhyWrite32;
|
vtlbdata.RWFT[2][0][rv] = (r32!=0) ? (void*)r32:(void*)vtlbDefaultPhyRead32;
|
||||||
vtlbdata.RWFT[3][1][rv] = (w64!=0) ? w64:vtlbDefaultPhyWrite64;
|
vtlbdata.RWFT[3][0][rv] = (r64!=0) ? (void*)r64:(void*)vtlbDefaultPhyRead64;
|
||||||
vtlbdata.RWFT[4][1][rv] = (w128!=0) ? w128:vtlbDefaultPhyWrite128;
|
vtlbdata.RWFT[4][0][rv] = (r128!=0) ? (void*)r128:(void*)vtlbDefaultPhyRead128;
|
||||||
|
|
||||||
|
vtlbdata.RWFT[0][1][rv] = (void*)((w8!=0) ? w8:vtlbDefaultPhyWrite8);
|
||||||
|
vtlbdata.RWFT[1][1][rv] = (void*)((w16!=0) ? w16:vtlbDefaultPhyWrite16);
|
||||||
|
vtlbdata.RWFT[2][1][rv] = (void*)((w32!=0) ? w32:vtlbDefaultPhyWrite32);
|
||||||
|
vtlbdata.RWFT[3][1][rv] = (void*)((w64!=0) ? w64:vtlbDefaultPhyWrite64);
|
||||||
|
vtlbdata.RWFT[4][1][rv] = (void*)((w128!=0) ? w128:vtlbDefaultPhyWrite128);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
@ -380,7 +380,7 @@ void vtlb_MapHandler(vtlbHandler handler,u32 start,u32 size)
|
||||||
|
|
||||||
start+=VTLB_PAGE_SIZE;
|
start+=VTLB_PAGE_SIZE;
|
||||||
size-=VTLB_PAGE_SIZE;
|
size-=VTLB_PAGE_SIZE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void vtlb_MapBlock(void* base,u32 start,u32 size,u32 blocksize)
|
void vtlb_MapBlock(void* base,u32 start,u32 size,u32 blocksize)
|
||||||
|
@ -389,7 +389,7 @@ void vtlb_MapBlock(void* base,u32 start,u32 size,u32 blocksize)
|
||||||
|
|
||||||
verify(0==(start&VTLB_PAGE_MASK));
|
verify(0==(start&VTLB_PAGE_MASK));
|
||||||
verify(0==(size&VTLB_PAGE_MASK) && size>0);
|
verify(0==(size&VTLB_PAGE_MASK) && size>0);
|
||||||
if (blocksize==0)
|
if (blocksize==0)
|
||||||
blocksize=size;
|
blocksize=size;
|
||||||
verify(0==(blocksize&VTLB_PAGE_MASK) && blocksize>0);
|
verify(0==(blocksize&VTLB_PAGE_MASK) && blocksize>0);
|
||||||
verify(0==(size%blocksize));
|
verify(0==(size%blocksize));
|
||||||
|
@ -424,7 +424,7 @@ void vtlb_Mirror(u32 new_region,u32 start,u32 size)
|
||||||
start+=VTLB_PAGE_SIZE;
|
start+=VTLB_PAGE_SIZE;
|
||||||
new_region+=VTLB_PAGE_SIZE;
|
new_region+=VTLB_PAGE_SIZE;
|
||||||
size-=VTLB_PAGE_SIZE;
|
size-=VTLB_PAGE_SIZE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void* vtlb_GetPhyPtr(u32 paddr)
|
__forceinline void* vtlb_GetPhyPtr(u32 paddr)
|
||||||
|
@ -484,7 +484,7 @@ void vtlb_VMapUnmap(u32 vaddr,u32 sz)
|
||||||
{
|
{
|
||||||
verify(0==(vaddr&VTLB_PAGE_MASK));
|
verify(0==(vaddr&VTLB_PAGE_MASK));
|
||||||
verify(0==(sz&VTLB_PAGE_MASK) && sz>0);
|
verify(0==(sz&VTLB_PAGE_MASK) && sz>0);
|
||||||
|
|
||||||
while(sz>0)
|
while(sz>0)
|
||||||
{
|
{
|
||||||
u32 handl=UnmappedVirtHandler0;
|
u32 handl=UnmappedVirtHandler0;
|
||||||
|
@ -532,8 +532,8 @@ void vtlb_Init()
|
||||||
//done !
|
//done !
|
||||||
|
|
||||||
//Setup the initial mappings
|
//Setup the initial mappings
|
||||||
vtlb_MapHandler(DefaultPhyHandler,0,VTLB_PMAP_SZ);
|
vtlb_MapHandler(DefaultPhyHandler,0,VTLB_PMAP_SZ);
|
||||||
|
|
||||||
//Set the V space as unmapped
|
//Set the V space as unmapped
|
||||||
vtlb_VMapUnmap(0,(VTLB_VMAP_ITEMS-1)*VTLB_PAGE_SIZE);
|
vtlb_VMapUnmap(0,(VTLB_VMAP_ITEMS-1)*VTLB_PAGE_SIZE);
|
||||||
//yeah i know, its stupid .. but this code has to be here for now ;p
|
//yeah i know, its stupid .. but this code has to be here for now ;p
|
||||||
|
|
|
@ -119,10 +119,8 @@ static void iIopDumpBlock( int startpc, u8 * ptr )
|
||||||
Console::WriteLn( "dump1 %x:%x, %x", params startpc, psxpc, psxRegs.cycle );
|
Console::WriteLn( "dump1 %x:%x, %x", params startpc, psxpc, psxRegs.cycle );
|
||||||
Path::CreateDirectory( L"dumps" );
|
Path::CreateDirectory( L"dumps" );
|
||||||
|
|
||||||
AsciiFile f(
|
wxString filename( Path::Combine( g_Conf.Folders.Dumps, wxsFormat( L"psxdump%.8X.txt", startpc ) ) );
|
||||||
Path::Combine( g_Conf.Folders.Dumps, wxsFormat( L"psxdump%.8X.txt", startpc ) ),
|
AsciiFile f( filename, wxFile::write );
|
||||||
wxFile::write
|
|
||||||
);
|
|
||||||
|
|
||||||
for ( i = startpc; i < s_nEndBlock; i += 4 ) {
|
for ( i = startpc; i < s_nEndBlock; i += 4 ) {
|
||||||
f.Printf("%s\n", disR3000Fasm( iopMemRead32( i ), i ) );
|
f.Printf("%s\n", disR3000Fasm( iopMemRead32( i ), i ) );
|
||||||
|
@ -155,7 +153,7 @@ static void iIopDumpBlock( int startpc, u8 * ptr )
|
||||||
pcur = s_pInstCache+1;
|
pcur = s_pInstCache+1;
|
||||||
for( i = 0; i < (s_nEndBlock-startpc)/4; ++i, ++pcur) {
|
for( i = 0; i < (s_nEndBlock-startpc)/4; ++i, ++pcur) {
|
||||||
f.Printf("%2d: %2.2x ", i+1, pcur->info);
|
f.Printf("%2d: %2.2x ", i+1, pcur->info);
|
||||||
|
|
||||||
count = 1;
|
count = 1;
|
||||||
for(j = 0; j < ArraySize(s_pInstCache->regs); j++) {
|
for(j = 0; j < ArraySize(s_pInstCache->regs); j++) {
|
||||||
if( used[j] ) {
|
if( used[j] ) {
|
||||||
|
@ -168,15 +166,18 @@ static void iIopDumpBlock( int startpc, u8 * ptr )
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
char command[256];
|
char command[256];
|
||||||
// dump the asm
|
// dump the asm
|
||||||
f = fopen( "mydump1", "wb" );
|
{
|
||||||
fwrite( ptr, 1, (uptr)x86Ptr - (uptr)ptr, f );
|
AsciiFile f2( L"mydump1", wxFile::write );
|
||||||
fclose( f );
|
f2.Write( ptr, (uptr)x86Ptr - (uptr)ptr );
|
||||||
sprintf( command, "objdump -D --target=binary --architecture=i386 -M intel mydump1 | cat %s - > tempdump", filename );
|
}
|
||||||
|
wxCharBuffer buf( filename.ToAscii() );
|
||||||
|
const char* filenamea = buf.data();
|
||||||
|
sprintf( command, "objdump -D --target=binary --architecture=i386 -M intel mydump1 | cat %s - > tempdump", filenamea );
|
||||||
system( command );
|
system( command );
|
||||||
sprintf(command, "mv tempdump %s", filename);
|
sprintf( command, "mv tempdump %s", filenamea );
|
||||||
system(command);
|
system( command );
|
||||||
f = fopen( filename.c_str(), "a+" );
|
//f = fopen( filename.c_str(), "a+" );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -213,7 +214,7 @@ void _psxFlushAllUnused()
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if( i < 32 && PSX_IS_CONST1(i) ) _psxFlushConstReg(i);
|
if( i < 32 && PSX_IS_CONST1(i) ) _psxFlushConstReg(i);
|
||||||
else {
|
else {
|
||||||
_deleteX86reg(X86TYPE_PSX, i, 1);
|
_deleteX86reg(X86TYPE_PSX, i, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -258,7 +259,7 @@ void _psxFlushConstRegs()
|
||||||
// ignore r0
|
// ignore r0
|
||||||
for(i = 1; i < 32; ++i) {
|
for(i = 1; i < 32; ++i) {
|
||||||
if( g_psxHasConstReg & (1<<i) ) {
|
if( g_psxHasConstReg & (1<<i) ) {
|
||||||
|
|
||||||
if( !(g_psxFlushedConstReg&(1<<i)) ) {
|
if( !(g_psxFlushedConstReg&(1<<i)) ) {
|
||||||
MOV32ItoM((uptr)&psxRegs.GPR.r[i], g_psxConstRegs[i]);
|
MOV32ItoM((uptr)&psxRegs.GPR.r[i], g_psxConstRegs[i]);
|
||||||
g_psxFlushedConstReg |= 1<<i;
|
g_psxFlushedConstReg |= 1<<i;
|
||||||
|
@ -485,7 +486,7 @@ void psxRecompileCodeConst3(R3000AFNPTR constcode, R3000AFNPTR_INFO constscode,
|
||||||
|
|
||||||
static u8* m_recBlockAlloc = NULL;
|
static u8* m_recBlockAlloc = NULL;
|
||||||
|
|
||||||
static const uint m_recBlockAllocSize =
|
static const uint m_recBlockAllocSize =
|
||||||
(((Ps2MemSize::IopRam + Ps2MemSize::Rom + Ps2MemSize::Rom1) / 4) * sizeof(BASEBLOCK));
|
(((Ps2MemSize::IopRam + Ps2MemSize::Rom + Ps2MemSize::Rom1) / 4) * sizeof(BASEBLOCK));
|
||||||
|
|
||||||
static void recAlloc()
|
static void recAlloc()
|
||||||
|
@ -496,7 +497,7 @@ static void recAlloc()
|
||||||
|
|
||||||
if( recMem == NULL )
|
if( recMem == NULL )
|
||||||
recMem = (u8*)SysMmapEx( 0x28000000, RECMEM_SIZE, 0, "recAlloc(R3000a)" );
|
recMem = (u8*)SysMmapEx( 0x28000000, RECMEM_SIZE, 0, "recAlloc(R3000a)" );
|
||||||
|
|
||||||
if( recMem == NULL )
|
if( recMem == NULL )
|
||||||
throw Exception::OutOfMemory( "R3000a Init > failed to allocate memory for the recompiler." );
|
throw Exception::OutOfMemory( "R3000a Init > failed to allocate memory for the recompiler." );
|
||||||
|
|
||||||
|
@ -542,10 +543,10 @@ void recResetIOP()
|
||||||
for (int i = 0; i < 0x10000; i++)
|
for (int i = 0; i < 0x10000; i++)
|
||||||
recLUT_SetPage(psxRecLUT, 0, 0, 0, i, 0);
|
recLUT_SetPage(psxRecLUT, 0, 0, 0, i, 0);
|
||||||
// IOP knows 64k pages, hence for the 0x10000's
|
// IOP knows 64k pages, hence for the 0x10000's
|
||||||
|
|
||||||
// The bottom 2 bits of PC are always zero, so we <<14 to "compress"
|
// The bottom 2 bits of PC are always zero, so we <<14 to "compress"
|
||||||
// the pc indexer into it's lower common denominator.
|
// the pc indexer into it's lower common denominator.
|
||||||
|
|
||||||
// We're only mapping 20 pages here in 4 places.
|
// We're only mapping 20 pages here in 4 places.
|
||||||
// 0x80 comes from : (Ps2MemSize::IopRam / 0x10000) * 4
|
// 0x80 comes from : (Ps2MemSize::IopRam / 0x10000) * 4
|
||||||
for (int i=0; i<0x80; i++)
|
for (int i=0; i<0x80; i++)
|
||||||
|
@ -680,7 +681,7 @@ static __forceinline s32 recExecuteBlock( s32 eeCycles )
|
||||||
"push ebp\n"
|
"push ebp\n"
|
||||||
|
|
||||||
"call iopDispatcherReg\n"
|
"call iopDispatcherReg\n"
|
||||||
|
|
||||||
"pop ebp\n"
|
"pop ebp\n"
|
||||||
"pop edi\n"
|
"pop edi\n"
|
||||||
"pop esi\n"
|
"pop esi\n"
|
||||||
|
@ -717,7 +718,7 @@ static __forceinline u32 psxRecClearMem(u32 pc)
|
||||||
lowerextent = min(lowerextent, pexblock->startpc);
|
lowerextent = min(lowerextent, pexblock->startpc);
|
||||||
blockidx--;
|
blockidx--;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (pexblock = recBlocks[blockidx]) {
|
while (pexblock = recBlocks[blockidx]) {
|
||||||
if (pexblock->startpc >= upperextent)
|
if (pexblock->startpc >= upperextent)
|
||||||
break;
|
break;
|
||||||
|
@ -756,7 +757,7 @@ void psxSetBranchReg(u32 reg)
|
||||||
_psxMoveGPRtoR(ESI, reg);
|
_psxMoveGPRtoR(ESI, reg);
|
||||||
|
|
||||||
psxRecompileNextInstruction(1);
|
psxRecompileNextInstruction(1);
|
||||||
|
|
||||||
if( x86regs[ESI].inuse ) {
|
if( x86regs[ESI].inuse ) {
|
||||||
assert( x86regs[ESI].type == X86TYPE_PCWRITEBACK );
|
assert( x86regs[ESI].type == X86TYPE_PCWRITEBACK );
|
||||||
MOV32RtoM((uptr)&psxRegs.pc, ESI);
|
MOV32RtoM((uptr)&psxRegs.pc, ESI);
|
||||||
|
@ -767,7 +768,7 @@ void psxSetBranchReg(u32 reg)
|
||||||
MOV32RtoM((uptr)&psxRegs.pc, EAX);
|
MOV32RtoM((uptr)&psxRegs.pc, EAX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_psxFlushCall(FLUSH_EVERYTHING);
|
_psxFlushCall(FLUSH_EVERYTHING);
|
||||||
iPsxBranchTest(0xffffffff, 1);
|
iPsxBranchTest(0xffffffff, 1);
|
||||||
|
|
||||||
|
@ -972,13 +973,13 @@ void iopRecRecompile(u32 startpc)
|
||||||
// if recPtr reached the mem limit reset whole mem
|
// if recPtr reached the mem limit reset whole mem
|
||||||
if (((uptr)recPtr - (uptr)recMem) >= (RECMEM_SIZE - 0x10000))
|
if (((uptr)recPtr - (uptr)recMem) >= (RECMEM_SIZE - 0x10000))
|
||||||
recResetIOP();
|
recResetIOP();
|
||||||
|
|
||||||
x86SetPtr( recPtr );
|
x86SetPtr( recPtr );
|
||||||
x86Align(16);
|
x86Align(16);
|
||||||
recPtr = x86Ptr;
|
recPtr = x86Ptr;
|
||||||
|
|
||||||
s_pCurBlock = PSX_GETBLOCK(startpc);
|
s_pCurBlock = PSX_GETBLOCK(startpc);
|
||||||
|
|
||||||
assert(s_pCurBlock->GetFnptr() == (uptr)iopJITCompile
|
assert(s_pCurBlock->GetFnptr() == (uptr)iopJITCompile
|
||||||
|| s_pCurBlock->GetFnptr() == (uptr)iopJITCompileInBlock);
|
|| s_pCurBlock->GetFnptr() == (uptr)iopJITCompileInBlock);
|
||||||
|
|
||||||
|
@ -993,7 +994,7 @@ void iopRecRecompile(u32 startpc)
|
||||||
s_pCurBlockEx = recBlocks.New(HWADDR(startpc), (uptr)recPtr);
|
s_pCurBlockEx = recBlocks.New(HWADDR(startpc), (uptr)recPtr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
psxbranch = 0;
|
psxbranch = 0;
|
||||||
|
|
||||||
s_pCurBlock->SetFnptr( (uptr)x86Ptr );
|
s_pCurBlock->SetFnptr( (uptr)x86Ptr );
|
||||||
|
@ -1014,7 +1015,7 @@ void iopRecRecompile(u32 startpc)
|
||||||
// go until the next branch
|
// go until the next branch
|
||||||
i = startpc;
|
i = startpc;
|
||||||
s_nEndBlock = 0xffffffff;
|
s_nEndBlock = 0xffffffff;
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
BASEBLOCK* pblock = PSX_GETBLOCK(i);
|
BASEBLOCK* pblock = PSX_GETBLOCK(i);
|
||||||
if (i != startpc
|
if (i != startpc
|
||||||
|
@ -1038,9 +1039,9 @@ void iopRecRecompile(u32 startpc)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case 1: // regimm
|
case 1: // regimm
|
||||||
|
|
||||||
if( _Rt_ == 0 || _Rt_ == 1 || _Rt_ == 16 || _Rt_ == 17 ) {
|
if( _Rt_ == 0 || _Rt_ == 1 || _Rt_ == 16 || _Rt_ == 17 ) {
|
||||||
|
|
||||||
branchTo = _Imm_ * 4 + i + 4;
|
branchTo = _Imm_ * 4 + i + 4;
|
||||||
if( branchTo > startpc && branchTo < i ) s_nEndBlock = branchTo;
|
if( branchTo > startpc && branchTo < i ) s_nEndBlock = branchTo;
|
||||||
else s_nEndBlock = i+8;
|
else s_nEndBlock = i+8;
|
||||||
|
@ -1056,12 +1057,12 @@ void iopRecRecompile(u32 startpc)
|
||||||
goto StartRecomp;
|
goto StartRecomp;
|
||||||
|
|
||||||
// branches
|
// branches
|
||||||
case 4: case 5: case 6: case 7:
|
case 4: case 5: case 6: case 7:
|
||||||
|
|
||||||
branchTo = _Imm_ * 4 + i + 4;
|
branchTo = _Imm_ * 4 + i + 4;
|
||||||
if( branchTo > startpc && branchTo < i ) s_nEndBlock = branchTo;
|
if( branchTo > startpc && branchTo < i ) s_nEndBlock = branchTo;
|
||||||
else s_nEndBlock = i+8;
|
else s_nEndBlock = i+8;
|
||||||
|
|
||||||
goto StartRecomp;
|
goto StartRecomp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1104,7 +1105,7 @@ StartRecomp:
|
||||||
if( (psxdump & 1) )
|
if( (psxdump & 1) )
|
||||||
iIopDumpBlock(startpc, recPtr);
|
iIopDumpBlock(startpc, recPtr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
g_pCurInstInfo = s_pInstCache;
|
g_pCurInstInfo = s_pInstCache;
|
||||||
while (!psxbranch && psxpc < s_nEndBlock) {
|
while (!psxbranch && psxpc < s_nEndBlock) {
|
||||||
psxRecompileNextInstruction(0);
|
psxRecompileNextInstruction(0);
|
||||||
|
@ -1129,7 +1130,7 @@ StartRecomp:
|
||||||
if( psxbranch == 2 ) {
|
if( psxbranch == 2 ) {
|
||||||
_psxFlushCall(FLUSH_EVERYTHING);
|
_psxFlushCall(FLUSH_EVERYTHING);
|
||||||
|
|
||||||
iPsxBranchTest(0xffffffff, 1);
|
iPsxBranchTest(0xffffffff, 1);
|
||||||
|
|
||||||
JMP32((uptr)iopDispatcherReg - ( (uptr)x86Ptr + 5 ));
|
JMP32((uptr)iopDispatcherReg - ( (uptr)x86Ptr + 5 ));
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -63,12 +63,12 @@ public:
|
||||||
// All implementations of Unaligned Movs will, when possible, use aligned movs instead.
|
// All implementations of Unaligned Movs will, when possible, use aligned movs instead.
|
||||||
// This happens when using Mem,Reg or Reg,Mem forms where the address is simple displacement
|
// This happens when using Mem,Reg or Reg,Mem forms where the address is simple displacement
|
||||||
// which can be checked for alignment at runtime.
|
// which can be checked for alignment at runtime.
|
||||||
//
|
//
|
||||||
template< u8 Prefix, bool isAligned >
|
template< u8 Prefix, bool isAligned >
|
||||||
class SimdImpl_MoveSSE
|
class SimdImpl_MoveSSE
|
||||||
{
|
{
|
||||||
static const u16 OpcodeA = 0x28; // Aligned [aps] form
|
static const uint OpcodeA = 0x28; // Aligned [aps] form
|
||||||
static const u16 OpcodeU = 0x10; // unaligned [ups] form
|
static const uint OpcodeU = 0x10; // unaligned [ups] form
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SimdImpl_MoveSSE() {} //GCC.
|
SimdImpl_MoveSSE() {} //GCC.
|
||||||
|
@ -78,7 +78,7 @@ public:
|
||||||
if( to != from ) xOpWrite0F( Prefix, OpcodeA, to, from );
|
if( to != from ) xOpWrite0F( Prefix, OpcodeA, to, from );
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void operator()( const xRegisterSSE& to, const void* from ) const
|
__forceinline void operator()( const xRegisterSSE& to, const void* from ) const
|
||||||
{
|
{
|
||||||
xOpWrite0F( Prefix, (isAligned || ((uptr)from & 0x0f) == 0) ? OpcodeA : OpcodeU, to, from );
|
xOpWrite0F( Prefix, (isAligned || ((uptr)from & 0x0f) == 0) ? OpcodeA : OpcodeU, to, from );
|
||||||
}
|
}
|
||||||
|
@ -123,7 +123,7 @@ public:
|
||||||
if( to != from ) xOpWrite0F( PrefixA, Opcode, to, from );
|
if( to != from ) xOpWrite0F( PrefixA, Opcode, to, from );
|
||||||
}
|
}
|
||||||
|
|
||||||
__forceinline void operator()( const xRegisterSSE& to, const void* from ) const
|
__forceinline void operator()( const xRegisterSSE& to, const void* from ) const
|
||||||
{
|
{
|
||||||
xOpWrite0F( (isAligned || ((uptr)from & 0x0f) == 0) ? PrefixA : PrefixU, Opcode, to, from );
|
xOpWrite0F( (isAligned || ((uptr)from & 0x0f) == 0) ? PrefixA : PrefixU, Opcode, to, from );
|
||||||
}
|
}
|
||||||
|
@ -168,7 +168,7 @@ class SimdImpl_Blend
|
||||||
public:
|
public:
|
||||||
// [SSE-4.1] Conditionally copies dword values from src to dest, depending on the
|
// [SSE-4.1] Conditionally copies dword values from src to dest, depending on the
|
||||||
// mask bits in the immediate operand (bits [3:0]). Each mask bit corresponds to a
|
// mask bits in the immediate operand (bits [3:0]). Each mask bit corresponds to a
|
||||||
// dword element in a 128-bit operand.
|
// dword element in a 128-bit operand.
|
||||||
//
|
//
|
||||||
// If a mask bit is 1, then the corresponding dword in the source operand is copied
|
// If a mask bit is 1, then the corresponding dword in the source operand is copied
|
||||||
// to dest, else the dword element in dest is left unchanged.
|
// to dest, else the dword element in dest is left unchanged.
|
||||||
|
@ -177,25 +177,25 @@ public:
|
||||||
|
|
||||||
// [SSE-4.1] Conditionally copies quadword values from src to dest, depending on the
|
// [SSE-4.1] Conditionally copies quadword values from src to dest, depending on the
|
||||||
// mask bits in the immediate operand (bits [1:0]). Each mask bit corresponds to a
|
// mask bits in the immediate operand (bits [1:0]). Each mask bit corresponds to a
|
||||||
// quadword element in a 128-bit operand.
|
// quadword element in a 128-bit operand.
|
||||||
//
|
//
|
||||||
// If a mask bit is 1, then the corresponding dword in the source operand is copied
|
// If a mask bit is 1, then the corresponding dword in the source operand is copied
|
||||||
// to dest, else the dword element in dest is left unchanged.
|
// to dest, else the dword element in dest is left unchanged.
|
||||||
//
|
//
|
||||||
SimdImpl_DestRegImmSSE<0x66,0x0d3a> PD;
|
SimdImpl_DestRegImmSSE<0x66,0x0d3a> PD;
|
||||||
|
|
||||||
// [SSE-4.1] Conditionally copies dword values from src to dest, depending on the
|
// [SSE-4.1] Conditionally copies dword values from src to dest, depending on the
|
||||||
// mask (bits [3:0]) in XMM0 (yes, the fixed register). Each mask bit corresponds
|
// mask (bits [3:0]) in XMM0 (yes, the fixed register). Each mask bit corresponds
|
||||||
// to a dword element in the 128-bit operand.
|
// to a dword element in the 128-bit operand.
|
||||||
//
|
//
|
||||||
// If a mask bit is 1, then the corresponding dword in the source operand is copied
|
// If a mask bit is 1, then the corresponding dword in the source operand is copied
|
||||||
// to dest, else the dword element in dest is left unchanged.
|
// to dest, else the dword element in dest is left unchanged.
|
||||||
//
|
//
|
||||||
SimdImpl_DestRegSSE<0x66,0x1438> VPS;
|
SimdImpl_DestRegSSE<0x66,0x1438> VPS;
|
||||||
|
|
||||||
// [SSE-4.1] Conditionally copies quadword values from src to dest, depending on the
|
// [SSE-4.1] Conditionally copies quadword values from src to dest, depending on the
|
||||||
// mask (bits [1:0]) in XMM0 (yes, the fixed register). Each mask bit corresponds
|
// mask (bits [1:0]) in XMM0 (yes, the fixed register). Each mask bit corresponds
|
||||||
// to a quadword element in the 128-bit operand.
|
// to a quadword element in the 128-bit operand.
|
||||||
//
|
//
|
||||||
// If a mask bit is 1, then the corresponding dword in the source operand is copied
|
// If a mask bit is 1, then the corresponding dword in the source operand is copied
|
||||||
// to dest, else the dword element in dest is left unchanged.
|
// to dest, else the dword element in dest is left unchanged.
|
||||||
|
@ -223,7 +223,7 @@ public:
|
||||||
// [SSE-4.1] Zero/Sign-extend the low byte values in src into qword integers
|
// [SSE-4.1] Zero/Sign-extend the low byte values in src into qword integers
|
||||||
// and store them in dest.
|
// and store them in dest.
|
||||||
SimdImpl_DestRegStrict<0x66,OpcodeBase+0x200,xRegisterSSE,xRegisterSSE,u16> BQ;
|
SimdImpl_DestRegStrict<0x66,OpcodeBase+0x200,xRegisterSSE,xRegisterSSE,u16> BQ;
|
||||||
|
|
||||||
// [SSE-4.1] Zero/Sign-extend the low word values in src into dword integers
|
// [SSE-4.1] Zero/Sign-extend the low word values in src into dword integers
|
||||||
// and store them in dest.
|
// and store them in dest.
|
||||||
SimdImpl_DestRegStrict<0x66,OpcodeBase+0x300,xRegisterSSE,xRegisterSSE,u64> WD;
|
SimdImpl_DestRegStrict<0x66,OpcodeBase+0x300,xRegisterSSE,xRegisterSSE,u64> WD;
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -78,7 +78,7 @@ struct microProgram {
|
||||||
template<u32 pSize>
|
template<u32 pSize>
|
||||||
struct microProgManager {
|
struct microProgManager {
|
||||||
microProgram<pSize> prog[mMaxProg]; // Store MicroPrograms in memory
|
microProgram<pSize> prog[mMaxProg]; // Store MicroPrograms in memory
|
||||||
static const int max = mMaxProg - 1;
|
static const int max = mMaxProg - 1;
|
||||||
int cur; // Index to Current MicroProgram thats running (-1 = uncached)
|
int cur; // Index to Current MicroProgram thats running (-1 = uncached)
|
||||||
int total; // Total Number of valid MicroPrograms minus 1
|
int total; // Total Number of valid MicroPrograms minus 1
|
||||||
int cleared; // Micro Program is Indeterminate so must be searched for (and if no matches are found then recompile a new one)
|
int cleared; // Micro Program is Indeterminate so must be searched for (and if no matches are found then recompile a new one)
|
||||||
|
@ -93,7 +93,7 @@ struct microVU {
|
||||||
static const u32 cacheSize = 0x800000; // VU Cache Size
|
static const u32 cacheSize = 0x800000; // VU Cache Size
|
||||||
|
|
||||||
microProgManager<0x4000> prog; // Micro Program Data
|
microProgManager<0x4000> prog; // Micro Program Data
|
||||||
|
|
||||||
VURegs* regs; // VU Regs Struct
|
VURegs* regs; // VU Regs Struct
|
||||||
u8* cache; // Dynarec Cache Start (where we will start writing the recompiled code to)
|
u8* cache; // Dynarec Cache Start (where we will start writing the recompiled code to)
|
||||||
u8* startFunct; // Ptr Function to the Start code for recompiled programs
|
u8* startFunct; // Ptr Function to the Start code for recompiled programs
|
||||||
|
@ -136,11 +136,7 @@ microVUt(void) mVUcacheProg(microVU* mVU, int progIndex);
|
||||||
void* __fastcall mVUexecuteVU0(u32 startPC, u32 cycles);
|
void* __fastcall mVUexecuteVU0(u32 startPC, u32 cycles);
|
||||||
void* __fastcall mVUexecuteVU1(u32 startPC, u32 cycles);
|
void* __fastcall mVUexecuteVU1(u32 startPC, u32 cycles);
|
||||||
|
|
||||||
#ifndef __LINUX__
|
|
||||||
typedef void (__fastcall *mVUrecCall)(u32, u32);
|
typedef void (__fastcall *mVUrecCall)(u32, u32);
|
||||||
#else
|
|
||||||
typedef void (*mVUrecCall)(u32, u32) __attribute__((__fastcall)); // Not sure if this is correct syntax (should be close xD)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Include all the *.inl files (Needed because C++ sucks with templates and *.cpp files)
|
// Include all the *.inl files (Needed because C++ sucks with templates and *.cpp files)
|
||||||
#include "microVU_Misc.inl"
|
#include "microVU_Misc.inl"
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
* (at your option) any later version.
|
* (at your option) any later version.
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
@ -82,12 +82,12 @@ int LoadPatch( const wxString& crc )
|
||||||
{
|
{
|
||||||
//Console::Error("XML Patch Loader: Could not load file '%s'. Error='%s'.", pfile, doc.ErrorDesc() );
|
//Console::Error("XML Patch Loader: Could not load file '%s'. Error='%s'.", pfile, doc.ErrorDesc() );
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Console::WriteLn("XML Patch Loader: '%s' Found", params pfile);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Console::WriteLn("XML Patch Loader: '%s' Found", params pfile.c_str() );
|
||||||
|
}
|
||||||
|
|
||||||
TiXmlNode *root = doc.FirstChild("GAME");
|
TiXmlNode *root = doc.FirstChild("GAME");
|
||||||
if(!root)
|
if(!root)
|
||||||
{
|
{
|
||||||
|
@ -144,12 +144,12 @@ int LoadGroup(TiXmlNode *group,int gParent)
|
||||||
}
|
}
|
||||||
|
|
||||||
string t;
|
string t;
|
||||||
|
|
||||||
if(gtitle)
|
if(gtitle)
|
||||||
t.assign(gtitle);
|
t.assign(gtitle);
|
||||||
else
|
else
|
||||||
t.clear();
|
t.clear();
|
||||||
|
|
||||||
Group gp=Group(gParent,gEnabled,t);
|
Group gp=Group(gParent,gEnabled,t);
|
||||||
groups.push_back(gp);
|
groups.push_back(gp);
|
||||||
|
|
||||||
|
@ -165,10 +165,10 @@ int LoadGroup(TiXmlNode *group,int gParent)
|
||||||
{
|
{
|
||||||
TiXmlElement *rm=zerogs->ToElement();
|
TiXmlElement *rm=zerogs->ToElement();
|
||||||
const char* pid = rm->FirstAttribute()->Value();
|
const char* pid = rm->FirstAttribute()->Value();
|
||||||
|
|
||||||
if( pid != NULL )
|
if( pid != NULL )
|
||||||
sscanf(pid, "%x", &g_ZeroGSOptions);
|
sscanf(pid, "%x", &g_ZeroGSOptions);
|
||||||
else
|
else
|
||||||
Console::WriteLn("zerogs attribute wrong");
|
Console::WriteLn("zerogs attribute wrong");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -307,7 +307,7 @@ int LoadGroup(TiXmlNode *group,int gParent)
|
||||||
patchnumber=0;
|
patchnumber=0;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strcmp(place,"EE")==0)
|
if(strcmp(place,"EE")==0)
|
||||||
{
|
{
|
||||||
patch[patchnumber].cpu= CPU_EE;
|
patch[patchnumber].cpu= CPU_EE;
|
||||||
|
@ -355,7 +355,7 @@ int LoadGroup(TiXmlNode *group,int gParent)
|
||||||
pt.assign(ptitle);
|
pt.assign(ptitle);
|
||||||
else
|
else
|
||||||
pt.clear();
|
pt.clear();
|
||||||
|
|
||||||
Patch p=Patch(patchnumber,gIndex,penabled,pt);
|
Patch p=Patch(patchnumber,gIndex,penabled,pt);
|
||||||
patches.push_back(p);
|
patches.push_back(p);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue