This commit is contained in:
shygoo 2018-12-06 23:52:29 -06:00
commit 4b87f25f5f
66 changed files with 822 additions and 590 deletions

View File

@ -1,2 +1,2 @@
[default] [Settings]
ConfigFile=..\..\Config\Project64.cfg ConfigFile=..\..\Config\Project64.cfg

View File

@ -1,2 +1,2 @@
[default] [Settings]
ConfigFile=..\..\Config\Project64.cfg ConfigFile=..\..\Config\Project64.cfg

View File

@ -1,2 +1,2 @@
[default] [Settings]
ConfigFile=..\..\Config\Project64.cfg ConfigFile=..\..\Config\Project64.cfg

View File

@ -1,2 +1,2 @@
[default] [Settings]
ConfigFile=..\..\Config\Project64.cfg ConfigFile=..\..\Config\Project64.cfg

View File

@ -1,4 +1,65 @@
// ============ Audio RDB for Project64 ==================================== // ============ Audio RDB for Project64 ====================================
[5326696F-FE9A99C3-C:45]
FPSBuffer=0
Fixed Audio=0
Good Name=Body Harvest (U)
[07861842-A12EBC9F-C:45]
Fixed Audio=0
Good Name=Excitebike 64 (U) (V1.0)
Sync Audio=0
[776646F6-06B9AC2B-C:50]
Fixed Audio=0
Good Name=F-ZERO X (E)
[4D3E622E-9B828B4E-C:4A]
Fixed Audio=0
Good Name=F-ZERO X (J)
[B30ED978-3003C9F9-C:45]
Fixed Audio=0
Good Name=F-ZERO X (U)
[BBFDEC37-D93B9EC0-C:4A]
Fixed Audio=0
Good Name=F-ZERO X + Expansion Kit (J) [CART HACK]
[C6E39C0A-D2726676-C:45]
Fixed Audio=0
Good Name=F-ZERO X + Expansion Kit (U) [CART HACK]
[AA18B1A5-07DB6AEB-C:45] [AA18B1A5-07DB6AEB-C:45]
Good Name=Resident Evil 2 (U) (V1.1) Good Name=Resident Evil 2 (U) (V1.1)
Sync Audio=0 Sync Audio=0
[9510D8D7-35100DD2-C:45]
Fixed Audio=0
Good Name=Stunt Racer 64 (U)
Sync Audio=0
[7F43E701-536328D1-C:50]
Good Name=Top Gear Rally (E)
Sync Audio=0
[62269B3D-FE11B1E8-C:45]
Good Name=Top Gear Rally (U)
Sync Audio=0
[AC062778-DFADFCB8-C:50]
Fixed Audio=0
Good Name=World Driver Championship (E) (M5)
Sync Audio=0
[308DFEC8-CE2EB5F6-C:45]
Fixed Audio=0
Good Name=World Driver Championship (U)
Sync Audio=0
[00000000-00000000-C:4A]
Fixed Audio=0
Good Name=64DD IPL (JPN)
[00000000-00000000-C:45]
Fixed Audio=0
Good Name=64DD IPL (USA)

View File

@ -1,15 +1,15 @@
[default] [Settings]
7zipCache=..\..\Config\Project64.zcache 7zipCache=..\..\Config\Project64.zcache
AudioRDB=..\..\Config\Audio.rdb
Auto Sleep=0 Auto Sleep=0
Basic Mode=0 Basic Mode=0
Cheats=..\..\Config\Project64.cht Cheats=..\..\Config\Project64.cht
ExtInfo=..\..\Config\Project64.rdx ExtInfo=..\..\Config\Project64.rdx
VideoRDB=..\..\Config\Video.rdb
AudioRDB=..\..\Config\Audio.rdb
Notes=..\..\Config\Project64.rdn Notes=..\..\Config\Project64.rdn
RomDatabase=..\..\Config\Project64.rdb RomDatabase=..\..\Config\Project64.rdb
RomListCache=..\..\Config\Project64.cache3 RomListCache=..\..\Config\Project64.cache3
ShortCuts=..\..\Config\Project64.sc3 ShortCuts=..\..\Config\Project64.sc3
VideoRDB=..\..\Config\Video.rdb
[Debugger] [Debugger]
Debugger=1 Debugger=1

View File

@ -1850,7 +1850,6 @@ Status=Compatible
Plugin Note=[Glide64] missing menu effects Plugin Note=[Glide64] missing menu effects
32bit=No 32bit=No
Culling=1 Culling=1
Fixed Audio=0
[B30ED978-3003C9F9-C:45] [B30ED978-3003C9F9-C:45]
Good Name=F-ZERO X (U) Good Name=F-ZERO X (U)
@ -5562,7 +5561,6 @@ Plugin Note=[video] HLE not supported [audio] needs audio plugin
32bit=No 32bit=No
AudioResetOnLoad=Yes AudioResetOnLoad=Yes
HLE GFX=No HLE GFX=No
Fixed Audio=0
RDRAM Size=8 RDRAM Size=8
RSP-Mfc0Count=10 RSP-Mfc0Count=10
@ -6871,7 +6869,6 @@ Status=Issues (plugin)
Plugin Note=[video] HLE not supported [audio] needs audio plugin Plugin Note=[video] HLE not supported [audio] needs audio plugin
32bit=No 32bit=No
AudioResetOnLoad=Yes AudioResetOnLoad=Yes
Fixed Audio=0
HLE GFX=No HLE GFX=No
RSP-Mfc0Count=10 RSP-Mfc0Count=10
@ -6882,7 +6879,6 @@ Status=Issues (plugin)
Plugin Note=[video] HLE not supported [audio] needs audio plugin Plugin Note=[video] HLE not supported [audio] needs audio plugin
32bit=No 32bit=No
AudioResetOnLoad=Yes AudioResetOnLoad=Yes
Fixed Audio=0
HLE GFX=No HLE GFX=No
RSP-Mfc0Count=10 RSP-Mfc0Count=10
@ -8207,14 +8203,12 @@ Status=Unsupported
[00000000-00000000-C:4A] [00000000-00000000-C:4A]
32bit=No 32bit=No
Fixed Audio=0
Good Name=64DD IPL (JPN) Good Name=64DD IPL (JPN)
RDRAM Size=8 RDRAM Size=8
Status=Compatible Status=Compatible
[00000000-00000000-C:45] [00000000-00000000-C:45]
32bit=No 32bit=No
Fixed Audio=0
Good Name=64DD IPL (USA) Good Name=64DD IPL (USA)
RDRAM Size=8 RDRAM Size=8
Status=Compatible Status=Compatible

View File

@ -200,6 +200,7 @@
#409# "Keyboard Shortcuts" #409# "Keyboard Shortcuts"
#410# "Status" #410# "Status"
#411# "Recompiler" #411# "Recompiler"
#412# "Defaults"
//Plugin Dialog //Plugin Dialog
#420# "About" #420# "About"

View File

@ -1,4 +1,7 @@
#include "stdafx.h" #include "stdafx.h"
#ifdef _WIN32
#include <Windows.h>
#endif
CriticalSection::CriticalSection() CriticalSection::CriticalSection()
{ {

View File

@ -1,6 +1,8 @@
#include "stdafx.h" #include "stdafx.h"
#include "HighResTimeStamp.h" #include "HighResTimeStamp.h"
#ifndef _WIN32 #ifdef _WIN32
#include <Windows.h>
#else
#include <math.h> #include <math.h>
#endif #endif

View File

@ -55,7 +55,7 @@ void CIniFileBase::fInsertSpaces(int Pos, int NoOfSpaces)
if (NoOfSpaces < 0) if (NoOfSpaces < 0)
{ {
int ReadPos = Pos + (NoOfSpaces * -1); int ReadPos = Pos + (NoOfSpaces * -1);
int WritePos = Pos; WritePos = Pos;
do do
{ {
@ -338,6 +338,18 @@ bool CIniFileBase::MoveToSectionNameData(const char * lpSectionName, bool Change
} while (result >= 0); } while (result >= 0);
} }
if (!bFoundSection && strcmp(lpSectionName, "default") == 0)
{
m_SectionsPos.insert(FILELOC::value_type(lpSectionName, 0));
if (ChangeCurrentSection)
{
m_CurrentSection = lpSectionName;
m_CurrentSectionFilePos = 0;
}
m_File.Seek(m_lastSectionSearch, CFileBase::begin);
bFoundSection = true;
}
if (bFoundSection && ChangeCurrentSection) if (bFoundSection && ChangeCurrentSection)
{ {
m_CurrentSectionData.clear(); m_CurrentSectionData.clear();
@ -482,7 +494,7 @@ bool CIniFileBase::DeleteSection(const char * lpSectionName)
{ {
return false; return false;
} }
uint32_t dwRet = m_File.Read(pData.get(), dwSize); uint32_t dwRet = m_File.Read(pData.get(), (uint32_t)dwSize);
if (dwRet == 0 || dwRet < dwSize) if (dwRet == 0 || dwRet < dwSize)
{ {
return false; return false;
@ -502,11 +514,11 @@ bool CIniFileBase::DeleteSection(const char * lpSectionName)
char *pEndSection = pSection + strlen(strSection.c_str()), *Data = pData.get(); char *pEndSection = pSection + strlen(strSection.c_str()), *Data = pData.get();
char *pNextSection = NULL; char *pNextSection = NULL;
int result, ReadPos = pEndSection - pData.get(); int result, ReadPos = (int)(pEndSection - pData.get());
do do
{ {
char * Input = NULL; char * Input = NULL;
int MaxDataSize = dwSize + 1; int MaxDataSize = (int)(dwSize + 1);
result = -1; result = -1;
for (int count = ReadPos; count < MaxDataSize; count++) for (int count = ReadPos; count < MaxDataSize; count++)
{ {

View File

@ -4,13 +4,15 @@
/* for POSIX method away from Win32 _stricmp--see "Platform.h" */ /* for POSIX method away from Win32 _stricmp--see "Platform.h" */
#include <strings.h> #include <strings.h>
#endif #endif
#include "Platform.h"
#include "FileClass.h" #include "FileClass.h"
#include "CriticalSection.h" #include "CriticalSection.h"
#include "StdString.h"
#include "SmartPointer.h" #include "SmartPointer.h"
#include "Platform.h"
#include <string>
#include <map> #include <map>
#include <vector>
#include <list>
class CIniFileBase class CIniFileBase
{ {
@ -29,6 +31,7 @@ class CIniFileBase
public: public:
typedef std::map<std::string, std::string> KeyValueData; typedef std::map<std::string, std::string> KeyValueData;
typedef std::vector<std::string> SectionList; typedef std::vector<std::string> SectionList;
typedef std::list<std::string> strlist;
protected: protected:
CFileBase & m_File; CFileBase & m_File;

View File

@ -82,7 +82,7 @@ void CLog::LogArgs(const char * Message, va_list & args )
void CLog::Log( const char * Message ) void CLog::Log( const char * Message )
{ {
if (!m_hLogFile.IsOpen()) { return; } if (!m_hLogFile.IsOpen()) { return; }
uint32_t message_len = strlen(Message); uint32_t message_len = (uint32_t)strlen(Message);
m_hLogFile.Write(Message, message_len); m_hLogFile.Write(Message, message_len);
if (m_FlushOnWrite) if (m_FlushOnWrite)
{ {
@ -113,8 +113,6 @@ void CLog::Log( const char * Message )
do do
{ {
uint8_t Data[300]; uint8_t Data[300];
uint32_t dwRead;
dwRead = m_hLogFile.Read(Data,sizeof(Data)); dwRead = m_hLogFile.Read(Data,sizeof(Data));
if (dwRead == 0) if (dwRead == 0)
{ {
@ -146,7 +144,6 @@ void CLog::Log( const char * Message )
m_hLogFile.Seek(ReadPos,CFile::begin); m_hLogFile.Seek(ReadPos,CFile::begin);
uint32_t dwRead;
dwRead = m_hLogFile.Read(Data,SizeToRead); dwRead = m_hLogFile.Read(Data,SizeToRead);
m_hLogFile.Seek(WritePos,CFile::begin); m_hLogFile.Seek(WritePos,CFile::begin);

View File

@ -1,33 +1,42 @@
#include "stdafx.h" #include "stdafx.h"
#if defined(_MSC_VER)
#include <crtdbg.h>
#else
#define _ASSERTE(expr) ((void)0)
#endif
#ifdef _DEBUG
#pragma warning(disable:4786) //Disable std library warning
#pragma warning(disable:4530) //Disable std library warning
#include <string>
#include <malloc.h>
#include "MemTest.h" #include "MemTest.h"
#ifdef MEM_LEAK_TEST
#include <shellapi.h> //Needed for ShellExecute #if defined(MEM_LEAK_TEST) && defined(_WIN32)
#pragma comment(lib, "shell32.lib") //Needed for ShellExecute
#undef new #undef new
#undef malloc
#undef realloc
#undef free
#undef VirtualAlloc
#undef VirtualFree
#ifndef MB_SERVICE_NOTIFICATION #include <Windows.h>
#define MB_SERVICE_NOTIFICATION 0x00200000L #include <shellapi.h>
#endif
static bool InInit = false;
class CMemList
{
typedef struct
{
char File[300];
int line;
int size;
int order;
} DEBUG_LOCATION;
typedef std::map<void *, DEBUG_LOCATION> MEMLIST;
typedef MEMLIST::const_iterator MEMLIST_ITER;
public:
CMemList();
~CMemList();
void removeItem(void * ptr);
void RecordAddItem(void * ptr, size_t size, const char * filename, int line);
void DumpItems(void);
private:
MEMLIST * m_MemList;
HMODULE m_hModule;
CRITICAL_SECTION m_cs;
uint32_t m_NextOrder;
};
CMemList *MemList(void) CMemList *MemList(void)
{ {
@ -36,15 +45,15 @@ CMemList *MemList(void)
return &m_MemList; return &m_MemList;
} }
CMemList::CMemList() CMemList::CMemList() :
m_MemList(NULL),
m_hModule(NULL),
m_cs({0}),
m_NextOrder(1)
{ {
MemList.clear(); InInit = true;
hSemaphone = CreateSemaphore(NULL, 1, 1, NULL); InitializeCriticalSection(&m_cs);
State = Initialized; m_MemList = new MEMLIST;
order = 0;
LogAllocate = false;
ThreadID = 0;
m_hModule = NULL;
for (UINT_PTR TestLoc = ((UINT_PTR)::MemList) & ~0xFFF; TestLoc != 0; TestLoc -= 0x1000) for (UINT_PTR TestLoc = ((UINT_PTR)::MemList) & ~0xFFF; TestLoc != 0; TestLoc -= 0x1000)
{ {
@ -56,40 +65,70 @@ CMemList::CMemList()
m_hModule = (HMODULE)TestLoc; m_hModule = (HMODULE)TestLoc;
break; break;
} }
InInit = false;
} }
CMemList::~CMemList() CMemList::~CMemList()
{ {
size_t ItemsLeft = MemList.size(); InInit = true;
size_t ItemsLeft = m_MemList->size();
if (ItemsLeft > 0) if (ItemsLeft > 0)
{ {
char path_buffer[_MAX_PATH], drive[_MAX_DRIVE], dir[_MAX_DIR]; DumpItems();
char fname[_MAX_FNAME], ext[_MAX_EXT], LogFileName[_MAX_PATH]; }
delete m_MemList;
m_MemList = NULL;
DeleteCriticalSection(&m_cs);
}
memset(path_buffer, 0, sizeof(path_buffer)); void CMemList::RecordAddItem(void * ptr, size_t size, const char * filename, int line)
memset(drive, 0, sizeof(drive)); {
memset(dir, 0, sizeof(dir)); EnterCriticalSection(&m_cs);
memset(fname, 0, sizeof(fname)); if (m_cs.RecursionCount > 1)
memset(ext, 0, sizeof(ext)); {
memset(LogFileName, 0, sizeof(LogFileName)); LeaveCriticalSection(&m_cs);
return;
}
DEBUG_LOCATION info;
strncpy(info.File, filename, sizeof(info.File));
info.line = line;
info.size = (int)size;
info.order = m_NextOrder++;
m_MemList->insert(MEMLIST::value_type(ptr, info));
LeaveCriticalSection(&m_cs);
}
void CMemList::removeItem(void * ptr)
{
EnterCriticalSection(&m_cs);
if (m_cs.RecursionCount > 1)
{
LeaveCriticalSection(&m_cs);
return;
}
MEMLIST_ITER item = m_MemList->find(ptr);
if (item != m_MemList->end())
{
m_MemList->erase(item);
}
LeaveCriticalSection(&m_cs);
}
void CMemList::DumpItems(void)
{
char path_buffer[_MAX_PATH] = { 0 }, drive[_MAX_DRIVE] = { 0 }, dir[_MAX_DIR] = { 0 };
char fname[_MAX_FNAME] = { 0 }, ext[_MAX_EXT] = { 0 }, LogFileName[_MAX_PATH] = { 0 };
GetModuleFileName(m_hModule, path_buffer, sizeof(path_buffer)); GetModuleFileName(m_hModule, path_buffer, sizeof(path_buffer));
_splitpath(path_buffer, drive, dir, fname, ext); _splitpath(path_buffer, drive, dir, fname, ext);
_makepath(LogFileName, drive, dir, fname, "leak.csv"); _makepath(LogFileName, drive, dir, fname, "leak.csv");
HANDLE hLogFile = INVALID_HANDLE_VALUE; HANDLE hLogFile = INVALID_HANDLE_VALUE;
do do
{ {
hLogFile = CreateFile( hLogFile = CreateFile( LogFileName, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL );
LogFileName,
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
NULL
);
if (hLogFile == INVALID_HANDLE_VALUE) if (hLogFile == INVALID_HANDLE_VALUE)
{ {
if (GetLastError() == ERROR_SHARING_VIOLATION) if (GetLastError() == ERROR_SHARING_VIOLATION)
@ -114,13 +153,9 @@ CMemList::~CMemList()
_snprintf(Msg, sizeof(Msg), "Order, Source File, Line Number, Mem Size\r\n"); _snprintf(Msg, sizeof(Msg), "Order, Source File, Line Number, Mem Size\r\n");
WriteFile(hLogFile, Msg, (DWORD)strlen(Msg), &dwWritten, NULL); WriteFile(hLogFile, Msg, (DWORD)strlen(Msg), &dwWritten, NULL);
for (MEMLIST_ITER item = MemList.begin(); item != MemList.end(); item++) for (MEMLIST_ITER item = m_MemList->begin(); item != m_MemList->end(); item++)
{ {
_snprintf(Msg, sizeof(Msg), "%d,%s, %d, %d\r\n", _snprintf(Msg, sizeof(Msg), "%d,%s, %d, %d\r\n", (*item).second.order, (*item).second.File, (*item).second.line, (*item).second.size);
(*item).second.order,
(*item).second.File,
(*item).second.line,
(*item).second.size);
WriteFile(hLogFile, Msg, (DWORD)strlen(Msg), &dwWritten, NULL); WriteFile(hLogFile, Msg, (DWORD)strlen(Msg), &dwWritten, NULL);
} }
CloseHandle(hLogFile); CloseHandle(hLogFile);
@ -132,183 +167,44 @@ CMemList::~CMemList()
{ {
ShellExecute(NULL, "open", LogFileName, NULL, NULL, SW_SHOW); ShellExecute(NULL, "open", LogFileName, NULL, NULL, SW_SHOW);
} }
}
CloseHandle(hSemaphone);
hSemaphone = NULL;
State = NotInitialized;
} }
void * CMemList::AddItem(size_t size, char * filename, int line) void* AllocateMemory(size_t size, const char* filename, unsigned int line)
{ {
void *res = malloc(size); void * res = malloc(size);
if (res == NULL) if (res == NULL)
{ {
return res; return res;
} }
RecordAddItem(res, size, filename, line); if (!InInit)
return res;
}
void CMemList::RecordAddItem(void * ptr, size_t size, const char * filename, int line)
{
__try
{ {
if (State == Initialized && hSemaphone != NULL) MemList()->RecordAddItem(res, size, filename, line);
{
DWORD CurrentThread = GetCurrentThreadId();
DWORD Result = WaitForSingleObject(hSemaphone, CurrentThread != ThreadID ? 30000 : 0);
if (Result != WAIT_TIMEOUT)
{
ThreadID = CurrentThread;
DEBUG_LOCATION info;
strncpy(info.File, filename, sizeof(info.File));
info.line = line;
info.size = (int)size;
info.order = order++;
Insert(ptr, info);
long dwSemCount = 0;
ThreadID = (DWORD)-1;
ReleaseSemaphore(hSemaphone, 1, &dwSemCount);
}
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
//_asm int 3
}
}
void CMemList::Insert(void *res, DEBUG_LOCATION &info)
{
MemList.insert(MEMLIST::value_type(res, info));
}
void * CMemList::ReAllocItem(void * ptr, size_t size, const char * filename, int line)
{
void *res = realloc(ptr, size);
if (res == NULL)
{
return res;
}
if (ptr != res)
{
__try
{
if (State == Initialized && hSemaphone != NULL)
{
DWORD CurrentThread = GetCurrentThreadId();
DWORD Result = WaitForSingleObject(hSemaphone, CurrentThread != ThreadID ? 30000 : 0);
if (Result != WAIT_TIMEOUT)
{
ThreadID = CurrentThread;
//Add new pointer
DEBUG_LOCATION info;
strncpy(info.File, filename, sizeof(info.File));
info.line = line;
info.size = (int)size;
info.order = order++;
Insert(res, info);
//remove old pointer
Remove(ptr);
long dwSemCount = 0;
ThreadID = (DWORD)-1;
ReleaseSemaphore(hSemaphone, 1, &dwSemCount);
}
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
//_asm int 3
}
} }
return res; return res;
} }
void CMemList::Remove(void *ptr) void* operator new (size_t size, const char* filename, unsigned int line)
{ {
//remove old pointer return AllocateMemory(size, filename, line);
MEMLIST_ITER item = MemList.find(ptr);
if (item != MemList.end())
{
MemList.erase(ptr);
}
} }
void CMemList::removeItem(void * ptr, bool bFree) void* operator new[] (size_t size, const char* filename, unsigned int line)
{ {
if (bFree) return AllocateMemory(size, filename, line);
{
free(ptr);
}
__try
{
if (State == Initialized && hSemaphone != NULL)
{
DWORD CurrentThread = GetCurrentThreadId();
DWORD Result = WaitForSingleObject(hSemaphone, CurrentThread != ThreadID ? 30000 : 0);
if (Result != WAIT_TIMEOUT)
{
ThreadID = CurrentThread;
Remove(ptr);
long dwSemCount = 0;
ThreadID = (DWORD)-1;
ReleaseSemaphore(hSemaphone, 1, &dwSemCount);
}
}
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
//_asm int 3
}
}
void MemTest_AddLeak(char* Comment)
{
MemList()->AddItem(1, Comment, -1);
}
void* MemTest_malloc(size_t size, char* filename, int line)
{
return MemList()->AddItem(size, filename, line);
}
void* MemTest_realloc(void* ptr, size_t size, char* filename, int line)
{
return MemList()->ReAllocItem(ptr, size, filename, line);
}
void* operator new (size_t size, char* filename, int line)
{
return MemList()->AddItem(size, filename, line);
} }
void* operator new (size_t size) void* operator new (size_t size)
{ {
return MemList()->AddItem(size, "Unknown", 0); return AllocateMemory(size, "Unknown", 0);
}
void* operator new [](size_t size, char* filename, int line)
{
return MemList()->AddItem(size, filename, line);
}
void* operator new [](size_t size)
{
return MemList()->AddItem(size, "Unknown", 0);
} }
void operator delete (void* ptr) void operator delete (void* ptr)
{ {
MemList()->removeItem(ptr, true); free(ptr);
if (!InInit)
{
MemList()->removeItem(ptr);
}
} }
void operator delete[](void* ptr) void operator delete[](void* ptr)
@ -316,31 +212,14 @@ void operator delete[](void* ptr)
delete ptr; delete ptr;
} }
LPVOID MemTest_VirtualAlloc( void operator delete (void* ptr, const char* /*filename*/, unsigned int /*line*/)
LPVOID lpAddress, // region to reserve or commit
SIZE_T dwSize, // size of region
DWORD flAllocationType, // type of allocation
DWORD flProtect, // type of access protection
LPCSTR filename,
int line)
{ {
LPVOID ptr = VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect); delete ptr;
if (ptr && lpAddress == NULL && (flAllocationType & MEM_RESERVE) != 0)
{
MemList()->RecordAddItem(ptr, dwSize, filename, line);
}
return ptr;
} }
BOOL MemTest_VirtualFree(LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType) void operator delete[](void* ptr, const char* /*filename*/, unsigned int /*line*/)
{ {
if ((dwFreeType & MEM_RELEASE) != 0) delete ptr;
{
MemList()->removeItem(lpAddress, false);
}
return VirtualFree(lpAddress, dwSize, dwFreeType);
} }
#endif #endif
#endif

View File

@ -1,102 +1,16 @@
#ifdef _DEBUG #pragma once
#if (defined(_MSC_VER) && (_MSC_VER < 1900)) #if (defined(_MSC_VER) && _DEBUG)
#define MEM_LEAK_TEST #define MEM_LEAK_TEST
#endif #endif
#ifdef MEM_LEAK_TEST #ifdef MEM_LEAK_TEST
#ifndef __MEM_TEST__H__ void* operator new (size_t size, const char* filename, unsigned int line);
#define __MEM_TEST__H__ void* operator new[](size_t size, const char* filename, unsigned int line);
#pragma warning(disable:4786) void operator delete (void* ptr, const char* filename, unsigned int line);
#pragma warning(disable:4291) void operator delete[](void* ptr, const char* filename, unsigned int line);
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif
#include <xdebug>
#include <xlocale>
#include <xiosbase>
#include <xtree>
#define new new(__FILE__, __LINE__) #define new new(__FILE__, __LINE__)
#include <map>
#include <windows.h>
#undef new
/*
#include <crtdbg.h>
#include <malloc.h>
#include <fstream>
#include <xlocnum>
#include <xlocmon>
#include <sstream>
#include <list>
*/
typedef struct {
char File[300];
int line;
int size;
int order;
} DEBUG_LOCATION;
typedef std::map<void *, DEBUG_LOCATION> MEMLIST;
typedef MEMLIST::iterator MEMLIST_ITER;
class CMemList {
MEMLIST MemList;
HANDLE hSemaphone;
DWORD ThreadID;
HMODULE m_hModule;
enum INIT { Initialized = 123, NotInitialized };
INIT State;
int order;
bool LogAllocate;
void Insert(void *res, DEBUG_LOCATION &info);
void Remove(void *ptr);
public:
CMemList();
~CMemList();
void * AddItem ( size_t size, char * filename, int line );
void * ReAllocItem ( void * ptr, size_t size, const char * filename, int line );
void removeItem ( void * ptr, bool bFree );
void RecordAddItem ( void * ptr, size_t size, const char * filename, int line );
};
void* operator new (size_t size );
void* operator new (size_t size, char* filename, int line);
void* operator new [] (size_t size );
void* operator new [] (size_t size, char* filename, int line);
void operator delete ( void* ptr);
void operator delete[](void* ptr);
void* MemTest_malloc(size_t size, char* filename, int line);
void* MemTest_realloc(void* ptr, size_t size, char* filename, int line);
void MemTest_AddLeak(char* Comment);
LPVOID MemTest_VirtualAlloc(LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect, LPCSTR filename, int line);
BOOL MemTest_VirtualFree( LPVOID lpAddress, SIZE_T dwSize, DWORD dwFreeType );
#endif
#undef new
#undef malloc
#undef free
#define new new(__FILE__, __LINE__)
#define malloc(x) (MemTest_malloc((x),__FILE__, __LINE__))
#define realloc(mem,x) (MemTest_realloc((mem),(x),__FILE__, __LINE__))
#define free(x) (delete (x))
#define VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect ) \
(MemTest_VirtualAlloc((lpAddress), (dwSize), (flAllocationType), (flProtect),__FILE__, __LINE__))
#define VirtualFree(lpAddress, dwSize, dwFreeType ) \
(MemTest_VirtualFree((lpAddress), (dwSize), (dwFreeType)))
#endif
#endif #endif

View File

@ -66,6 +66,7 @@ void* AllocateAddressSpace(size_t size, void * base_address)
bool FreeAddressSpace(void* addr, size_t size) bool FreeAddressSpace(void* addr, size_t size)
{ {
#ifdef _WIN32 #ifdef _WIN32
size = 0; //unused
return VirtualFree(addr, 0, MEM_RELEASE) != 0; return VirtualFree(addr, 0, MEM_RELEASE) != 0;
#else #else
msync(addr, size, MS_SYNC); msync(addr, size, MS_SYNC);

View File

@ -1,6 +1,8 @@
#include "stdafx.h" #include "stdafx.h"
#include "Thread.h" #include "Thread.h"
#ifndef _WIN32 #ifdef _WIN32
#include <Windows.h>
#else
#include <unistd.h> #include <unistd.h>
#include <pthread.h> #include <pthread.h>
#include <sys/syscall.h> #include <sys/syscall.h>
@ -64,7 +66,11 @@ void * CThread::ThreadWrapper (CThread * _this)
void * res = NULL; void * res = NULL;
try try
{ {
#if defined(__i386__) || defined(_M_IX86) || defined(__arm__) || defined(_M_ARM)
res = (void *)_this->m_StartAddress(_this->m_lpThreadParameter); res = (void *)_this->m_StartAddress(_this->m_lpThreadParameter);
#else
res = (void *)((uint64_t)_this->m_StartAddress(_this->m_lpThreadParameter));
#endif
} }
catch (...) catch (...)
{ {

View File

@ -1,4 +1,5 @@
#pragma once #pragma once
#include <Common\stdtypes.h>
class CThread class CThread
{ {

View File

@ -122,12 +122,18 @@ void CTraceLog::CloseTrace(void)
{ {
CGuard Guard(m_CS); CGuard Guard(m_CS);
m_Modules.clear(); m_Modules.clear();
if (g_ModuleLogLevel)
{
delete g_ModuleLogLevel;
g_ModuleLogLevel = NULL;
}
} }
void CTraceLog::FlushTrace(void) void CTraceLog::FlushTrace(void)
{ {
CGuard Guard(m_CS); CGuard Guard(m_CS);
for (uint32_t i = 0, n = m_Modules.size(); i < n; i++) for (size_t i = 0, n = m_Modules.size(); i < n; i++)
{ {
m_Modules[i]->FlushTrace(); m_Modules[i]->FlushTrace();
} }
@ -138,7 +144,7 @@ void CTraceLog::TraceMessage(uint32_t module, uint8_t severity, const char * fil
{ {
CGuard Guard(m_CS); CGuard Guard(m_CS);
for (uint32_t i = 0, n = m_Modules.size(); i < n; i++) for (size_t i = 0, n = m_Modules.size(); i < n; i++)
{ {
m_Modules[i]->Write(module, severity, file, line, function, Message); m_Modules[i]->Write(module, severity, file, line, function, Message);
} }
@ -200,7 +206,7 @@ CTraceFileLog::CTraceFileLog(const char * FileName, bool FlushFile, CLog::LOG_OP
{ /* Clamp file size to 5 MB if it exceeds 2047 or falls short of 3. */ { /* Clamp file size to 5 MB if it exceeds 2047 or falls short of 3. */
dwMaxFileSize = 5; dwMaxFileSize = 5;
} }
m_hLogFile.SetMaxFileSize(dwMaxFileSize * MB); m_hLogFile.SetMaxFileSize((uint32_t)(dwMaxFileSize * MB));
m_hLogFile.Open(FileName, eMode); m_hLogFile.Open(FileName, eMode);
} }

View File

@ -11,9 +11,7 @@ enum TraceSeverity
TraceVerbose = 0x00000006, TraceVerbose = 0x00000006,
}; };
#if defined(_WIN32) #ifndef _WIN32
#include <objbase.h>
#else
#define __interface struct #define __interface struct
#endif #endif

View File

@ -306,17 +306,47 @@ CPath::CPath(DIR_MODULE_FILE /*sdt*/)
#ifdef _WIN32 #ifdef _WIN32
void CPath::GetComponents(std::string* pDrive, std::string* pDirectory, std::string* pName, std::string* pExtension) const void CPath::GetComponents(std::string* pDrive, std::string* pDirectory, std::string* pName, std::string* pExtension) const
{ {
char buff_drive[_MAX_DRIVE + 1]; WriteTrace(TracePath, TraceDebug, "Start (m_strPath: \"%s\")", m_strPath.c_str());
char buff_dir[_MAX_DIR + 1];
char buff_name[_MAX_FNAME + 1];
char buff_ext[_MAX_EXT + 1];
ZeroMemory(buff_drive, sizeof(buff_drive)); char buff_drive[_MAX_DRIVE + 1] = { 0 };
ZeroMemory(buff_dir, sizeof(buff_dir)); char buff_dir[_MAX_DIR + 1] = { 0 };
ZeroMemory(buff_name, sizeof(buff_name)); char buff_name[_MAX_FNAME + 1] = { 0 };
ZeroMemory(buff_ext, sizeof(buff_ext)); char buff_ext[_MAX_EXT + 1] = { 0 };
_splitpath(m_strPath.c_str(), pDrive ? buff_drive : NULL, pDirectory ? buff_dir : NULL, pName ? buff_name : NULL, pExtension ? buff_ext : NULL); const char * BasePath = m_strPath.c_str();
const char * DriveDir = strrchr(BasePath, DRIVE_DELIMITER);
if (DriveDir != NULL)
{
int len = sizeof(buff_dir) < (DriveDir - BasePath) ? sizeof(buff_drive) : DriveDir - BasePath;
strncpy(buff_drive, BasePath, len);
BasePath += len + 1;
}
const char * last = strrchr(BasePath, DIRECTORY_DELIMITER);
if (last != NULL)
{
int len = sizeof(buff_dir) < (last - BasePath) ? sizeof(buff_dir) : last - BasePath;
if (len > 0)
{
strncpy(buff_dir, BasePath, len);
}
else
{
buff_dir[0] = DIRECTORY_DELIMITER;
buff_dir[1] = '\0';
}
strncpy(buff_name, last + 1, sizeof(buff_name));
}
else
{
strncpy(buff_dir, BasePath, sizeof(buff_dir));
}
char * ext = strrchr(buff_name, '.');
if (ext != NULL)
{
strncpy(buff_ext, ext + 1, sizeof(buff_ext));
*ext = '\0';
}
if (pDrive) if (pDrive)
{ {
@ -334,24 +364,7 @@ void CPath::GetComponents(std::string* pDrive, std::string* pDirectory, std::str
{ {
*pExtension = buff_ext; *pExtension = buff_ext;
} }
WriteTrace(TracePath, TraceDebug, "Done (dir: \"%s\" name: \"%s\" ext: \"%s\")", buff_dir, buff_name, buff_ext);
// DOS's _splitpath returns "d:", we return "d"
if (pDrive)
{
StripTrailingChar(*pDrive, DRIVE_DELIMITER);
}
// DOS's _splitpath returns "\dir\subdir\", we return "\dir\subdir"
if (pDirectory)
{
StripTrailingBackslash(*pDirectory);
}
// DOS's _splitpath returns ".ext", we return "ext"
if (pExtension)
{
StripLeadingChar(*pExtension, EXTENSION_DELIMITER);
}
} }
#else #else
void CPath::GetComponents(std::string* pDirectory, std::string* pName, std::string* pExtension) const void CPath::GetComponents(std::string* pDirectory, std::string* pName, std::string* pExtension) const
@ -423,8 +436,8 @@ void CPath::GetDriveDirectory(std::string& rDriveDirectory) const
if (!Drive.empty()) if (!Drive.empty())
{ {
rDriveDirectory += DRIVE_DELIMITER; rDriveDirectory += DRIVE_DELIMITER;
rDriveDirectory += Directory;
} }
rDriveDirectory += Directory;
} }
std::string CPath::GetDriveDirectory(void) const std::string CPath::GetDriveDirectory(void) const
@ -1438,6 +1451,53 @@ bool CPath::ChangeDirectory()
#endif #endif
} }
void CPath::NormalizePath(CPath BaseDir)
{
#ifdef _WIN32
stdstr Directory = BaseDir.GetDriveDirectory();
#else
stdstr Directory = BaseDir.GetDirectory();
#endif
bool Changed = false;
if (IsRelative())
{
EnsureTrailingBackslash(Directory);
Directory += GetDirectory();
Changed = true;
}
strvector Parts = Directory.Tokenize(DIRECTORY_DELIMITER);
strvector NormalizesParts;
for (strvector::const_iterator itr = Parts.begin(); itr != Parts.end(); itr++)
{
if (*itr == ".")
{
Changed = true;
}
else if (*itr == "..")
{
NormalizesParts.pop_back();
Changed = true;
}
else
{
NormalizesParts.push_back(*itr);
}
}
if (Changed)
{
Directory.clear();
for (strvector::const_iterator itr = NormalizesParts.begin(); itr != NormalizesParts.end(); itr++)
{
Directory += *itr + DIRECTORY_DELIMITER;
}
#ifdef _WIN32
SetDriveDirectory(Directory.c_str());
#else
SetDirectory(Directory.c_str());
#endif
}
}
//------------------------------------------------------------- //-------------------------------------------------------------
// Pre : If bCreateIntermediates is TRUE, create all eventually // Pre : If bCreateIntermediates is TRUE, create all eventually
// missing parent directories too // missing parent directories too

View File

@ -22,7 +22,6 @@ public:
//Attributes //Attributes
private: private:
std::string m_strPath; std::string m_strPath;
#ifdef _WIN32 #ifdef _WIN32
void * m_hFindFile; void * m_hFindFile;
@ -128,6 +127,7 @@ public:
//Directory operations //Directory operations
bool DirectoryCreate(bool bCreateIntermediates = true); bool DirectoryCreate(bool bCreateIntermediates = true);
bool ChangeDirectory(); bool ChangeDirectory();
void NormalizePath(CPath BaseDir);
//File operations //File operations
bool Delete(bool bEvenIfReadOnly = true) const; bool Delete(bool bEvenIfReadOnly = true) const;

View File

@ -29,6 +29,10 @@
#include "ConfigUI.h" #include "ConfigUI.h"
#include "SettingsID.h" #include "SettingsID.h"
#ifdef _WIN32
void SetTimerResolution ( void );
#endif
/* Read header for type definition */ /* Read header for type definition */
AUDIO_INFO g_AudioInfo; AUDIO_INFO g_AudioInfo;
@ -51,6 +55,9 @@ void PluginInit(void)
SetupTrace(); SetupTrace();
SetupAudioSettings(); SetupAudioSettings();
StartTrace(); StartTrace();
#ifdef _WIN32
SetTimerResolution();
#endif
g_PluginInit = true; g_PluginInit = true;
} }
@ -78,14 +85,16 @@ EXPORT void CALL AiDacrateChanged(int SystemType)
WriteTrace(TraceAudioInterface, TraceNotice, "Unknown/reserved bits in AI_DACRATE_REG set. 0x%08X", *g_AudioInfo.AI_DACRATE_REG); WriteTrace(TraceAudioInterface, TraceNotice, "Unknown/reserved bits in AI_DACRATE_REG set. 0x%08X", *g_AudioInfo.AI_DACRATE_REG);
} }
uint32_t video_clock = 0; uint32_t video_clock = 0; int32_t BufferSize = 0;
double audio_clock = 0; double framerate = (30 / 1.001);
switch (SystemType) switch (SystemType)
{ {
case SYSTEM_NTSC: video_clock = 48681812; break; case SYSTEM_NTSC: video_clock = 48681812; break;
case SYSTEM_PAL: video_clock = 49656530; break; case SYSTEM_PAL: video_clock = 49656530; framerate = 25; break;
case SYSTEM_MPAL: video_clock = 48628316; break; case SYSTEM_MPAL: video_clock = 48628316; break;
} }
uint32_t Frequency = video_clock / (g_Dacrate + 1); uint32_t Frequency = (video_clock / (g_Dacrate + 1));
if (Frequency < 4000) if (Frequency < 4000)
{ {
@ -94,28 +103,16 @@ EXPORT void CALL AiDacrateChanged(int SystemType)
} }
else else
{ {
int32_t BufferSize = 0; double audio_clock = 0; double framerate = 0; if (g_settings->FPSBuffer() == false && SystemType != SYSTEM_PAL)
if (g_settings->FPSBuffer() == true)
{ {
framerate = 59.94004; framerate = 30.475; // Needed for Body Harvest (U)
if (SystemType == SYSTEM_PAL) { framerate = 50; }
} }
else if (g_settings->TinyBuffer() == false)
{ {
framerate = 64; framerate = (framerate / 2);
if (SystemType == SYSTEM_PAL) { framerate = 53.33333; }
} }
if (g_settings->TinyBuffer() == true) audio_clock = (video_clock / framerate);
{ BufferSize = (int32_t)(audio_clock / (g_Dacrate + 1)) + 1 & ~0x1;
audio_clock = ((video_clock / framerate) * 2);
}
else
{
audio_clock = ((video_clock / framerate) * 4);
}
BufferSize = (int32_t)audio_clock / (g_Dacrate) + 1 & ~0x1;
g_SoundDriver->AI_SetFrequency(Frequency, BufferSize); g_SoundDriver->AI_SetFrequency(Frequency, BufferSize);
} }
} }
@ -165,7 +162,14 @@ EXPORT void CALL AiUpdate(int32_t Wait)
EXPORT void CALL CloseDLL(void) EXPORT void CALL CloseDLL(void)
{ {
WriteTrace(TraceAudioInterface, TraceDebug, "Called"); WriteTrace(TraceAudioInterface, TraceDebug, "Called");
if (g_SoundDriver != NULL)
{
g_SoundDriver->AI_Shutdown();
delete g_SoundDriver;
g_SoundDriver = NULL;
}
CleanupAudioSettings(); CleanupAudioSettings();
StopTrace();
} }
EXPORT void CALL DllAbout(void * /*hParent*/) EXPORT void CALL DllAbout(void * /*hParent*/)
@ -249,6 +253,10 @@ EXPORT void CALL ProcessAList(void)
WriteTrace(TraceAudioInterface, TraceDebug, "Called"); WriteTrace(TraceAudioInterface, TraceDebug, "Called");
} }
#ifdef _WIN32
#include <Windows.h>
#endif
extern "C" void UseUnregisteredSetting(int /*SettingID*/) extern "C" void UseUnregisteredSetting(int /*SettingID*/)
{ {
WriteTrace(TraceAudioInterface, TraceDebug, "Called"); WriteTrace(TraceAudioInterface, TraceDebug, "Called");
@ -256,3 +264,17 @@ extern "C" void UseUnregisteredSetting(int /*SettingID*/)
DebugBreak(); DebugBreak();
#endif #endif
} }
#ifdef _WIN32
void SetTimerResolution(void)
{
HMODULE hMod = GetModuleHandle("ntdll.dll");
if (hMod != NULL)
{
typedef LONG(NTAPI* tNtSetTimerResolution)(IN ULONG DesiredResolution, IN BOOLEAN SetResolution, OUT PULONG CurrentResolution);
tNtSetTimerResolution NtSetTimerResolution = (tNtSetTimerResolution)GetProcAddress(hMod, "NtSetTimerResolution");
ULONG CurrentResolution = 0;
NtSetTimerResolution(5000, TRUE, &CurrentResolution);
}
}
#endif

View File

@ -17,6 +17,7 @@ CSettings * g_settings = NULL;
CSettings::CSettings() : CSettings::CSettings() :
m_Set_EnableAudio(0), m_Set_EnableAudio(0),
m_Set_FixedAudio(0),
m_Set_SyncAudio(0), m_Set_SyncAudio(0),
m_Set_FullSpeed(0), m_Set_FullSpeed(0),
m_Set_LimitFPS(0), m_Set_LimitFPS(0),
@ -31,6 +32,7 @@ CSettings::CSettings() :
m_Volume(100), m_Volume(100),
m_TinyBuffer(true), m_TinyBuffer(true),
m_FPSBuffer(true), m_FPSBuffer(true),
m_FixedAudio(false),
m_SyncAudio(false), m_SyncAudio(false),
m_FullSpeed(true) m_FullSpeed(true)
{ {
@ -42,6 +44,7 @@ CSettings::CSettings() :
if (m_Set_basic_mode != 0) { SettingsRegisterChange(true, m_Set_basic_mode, this, stSettingsChanged); } if (m_Set_basic_mode != 0) { SettingsRegisterChange(true, m_Set_basic_mode, this, stSettingsChanged); }
if (m_Set_debugger != 0) { SettingsRegisterChange(true, m_Set_debugger, this, stSettingsChanged); } if (m_Set_debugger != 0) { SettingsRegisterChange(true, m_Set_debugger, this, stSettingsChanged); }
if (m_Set_log_flush != 0) { SettingsRegisterChange(true, m_Set_log_flush, this, stSettingsChanged); } if (m_Set_log_flush != 0) { SettingsRegisterChange(true, m_Set_log_flush, this, stSettingsChanged); }
if (m_Set_FixedAudio != 0) { SettingsRegisterChange(true, m_Set_FixedAudio, this, stSettingsChanged); }
if (m_Set_SyncAudio != 0) { SettingsRegisterChange(true, m_Set_SyncAudio, this, stSettingsChanged); } if (m_Set_SyncAudio != 0) { SettingsRegisterChange(true, m_Set_SyncAudio, this, stSettingsChanged); }
if (m_Set_FullSpeed != 0) { SettingsRegisterChange(true, m_Set_FullSpeed, this, stSettingsChanged); } if (m_Set_FullSpeed != 0) { SettingsRegisterChange(true, m_Set_FullSpeed, this, stSettingsChanged); }
if (m_Set_LimitFPS != 0) { SettingsRegisterChange(true, m_Set_LimitFPS, this, stSettingsChanged); } if (m_Set_LimitFPS != 0) { SettingsRegisterChange(true, m_Set_LimitFPS, this, stSettingsChanged); }
@ -61,6 +64,7 @@ CSettings::~CSettings()
if (m_Set_basic_mode != 0) { SettingsUnregisterChange(true, m_Set_basic_mode, this, stSettingsChanged); } if (m_Set_basic_mode != 0) { SettingsUnregisterChange(true, m_Set_basic_mode, this, stSettingsChanged); }
if (m_Set_debugger != 0) { SettingsUnregisterChange(true, m_Set_debugger, this, stSettingsChanged); } if (m_Set_debugger != 0) { SettingsUnregisterChange(true, m_Set_debugger, this, stSettingsChanged); }
if (m_Set_log_flush != 0) { SettingsUnregisterChange(true, m_Set_log_flush, this, stSettingsChanged); } if (m_Set_log_flush != 0) { SettingsUnregisterChange(true, m_Set_log_flush, this, stSettingsChanged); }
if (m_Set_FixedAudio != 0) { SettingsUnregisterChange(true, m_Set_FixedAudio, this, stSettingsChanged); }
if (m_Set_SyncAudio != 0) { SettingsUnregisterChange(true, m_Set_SyncAudio, this, stSettingsChanged); } if (m_Set_SyncAudio != 0) { SettingsUnregisterChange(true, m_Set_SyncAudio, this, stSettingsChanged); }
if (m_Set_FullSpeed != 0) { SettingsUnregisterChange(true, m_Set_FullSpeed, this, stSettingsChanged); } if (m_Set_FullSpeed != 0) { SettingsUnregisterChange(true, m_Set_FullSpeed, this, stSettingsChanged); }
if (m_Set_LimitFPS != 0) { SettingsUnregisterChange(true, m_Set_LimitFPS, this, stSettingsChanged); } if (m_Set_LimitFPS != 0) { SettingsUnregisterChange(true, m_Set_LimitFPS, this, stSettingsChanged); }
@ -78,6 +82,7 @@ void CSettings::RegisterSettings(void)
{ {
SetModuleName("default"); SetModuleName("default");
m_Set_EnableAudio = FindSystemSettingId("Enable Audio"); m_Set_EnableAudio = FindSystemSettingId("Enable Audio");
m_Set_FixedAudio = FindSystemSettingId("Fixed Audio");
m_Set_SyncAudio = FindSystemSettingId("Sync Audio"); m_Set_SyncAudio = FindSystemSettingId("Sync Audio");
m_Set_FullSpeed = FindSystemSettingId("Full Speed"); m_Set_FullSpeed = FindSystemSettingId("Full Speed");
m_Set_LimitFPS = FindSystemSettingId("Limit FPS"); m_Set_LimitFPS = FindSystemSettingId("Limit FPS");

View File

@ -46,6 +46,7 @@ private:
void LogLevelChanged(void); void LogLevelChanged(void);
short m_Set_EnableAudio; short m_Set_EnableAudio;
short m_Set_FixedAudio;
short m_Set_SyncAudio; short m_Set_SyncAudio;
short m_Set_FullSpeed; short m_Set_FullSpeed;
short m_Set_LimitFPS; short m_Set_LimitFPS;
@ -61,6 +62,7 @@ private:
uint32_t m_Volume; uint32_t m_Volume;
bool m_TinyBuffer; bool m_TinyBuffer;
bool m_FPSBuffer; bool m_FPSBuffer;
bool m_FixedAudio;
bool m_SyncAudio; bool m_SyncAudio;
bool m_FullSpeed; bool m_FullSpeed;
}; };

View File

@ -80,3 +80,13 @@ void StartTrace(void)
g_LogFile = new CTraceFileLog(LogFilePath, g_settings->FlushLogs(), CLog::Log_New, 500); g_LogFile = new CTraceFileLog(LogFilePath, g_settings->FlushLogs(), CLog::Log_New, 500);
TraceAddModule(g_LogFile); TraceAddModule(g_LogFile);
} }
void StopTrace(void)
{
if (g_LogFile)
{
TraceRemoveModule(g_LogFile);
delete g_LogFile;
g_LogFile = NULL;
}
}

View File

@ -22,3 +22,4 @@ enum TraceModuleAndroidAudio
void SetupTrace(void); void SetupTrace(void);
void StartTrace(void); void StartTrace(void);
void StopTrace(void);

View File

@ -229,7 +229,8 @@ enum LanguageStringID
TAB_ROMNOTES = 408, TAB_ROMNOTES = 408,
TAB_SHORTCUTS = 409, TAB_SHORTCUTS = 409,
TAB_ROMSTATUS = 410, TAB_ROMSTATUS = 410,
TAB_RECOMPILER = 411, //Added in 1.7.0.50 TAB_RECOMPILER = 411,
TAB_DEFAULTS = 412,
//Plugin Dialog //Plugin Dialog
PLUG_ABOUT = 420, PLUG_ABOUT = 420,
@ -385,6 +386,7 @@ enum LanguageStringID
STR_FR_DLS = 701, STR_FR_DLS = 701,
STR_FR_PERCENT = 702, STR_FR_PERCENT = 702,
STR_FR_DLS_VIS = 703, STR_FR_DLS_VIS = 703,
STR_FR_NONE = 704,
// Increase speed // Increase speed
STR_INSREASE_SPEED = 710, STR_INSREASE_SPEED = 710,

View File

@ -198,6 +198,7 @@ void CLanguage::LoadDefaultStrings(void)
DEF_STR(TAB_SHORTCUTS, "Keyboard Shortcuts"); DEF_STR(TAB_SHORTCUTS, "Keyboard Shortcuts");
DEF_STR(TAB_ROMSTATUS, "Status"); DEF_STR(TAB_ROMSTATUS, "Status");
DEF_STR(TAB_RECOMPILER, "Recompiler"); DEF_STR(TAB_RECOMPILER, "Recompiler");
DEF_STR(TAB_DEFAULTS, "Defaults");
//Plugin Dialog //Plugin Dialog
DEF_STR(PLUG_ABOUT, "About"); DEF_STR(PLUG_ABOUT, "About");
@ -353,6 +354,7 @@ void CLanguage::LoadDefaultStrings(void)
DEF_STR(STR_FR_DLS, "Display lists per second"); DEF_STR(STR_FR_DLS, "Display lists per second");
DEF_STR(STR_FR_PERCENT, "Percentage of full speed"); DEF_STR(STR_FR_PERCENT, "Percentage of full speed");
DEF_STR(STR_FR_DLS_VIS, "VI/s & DL/s"); DEF_STR(STR_FR_DLS_VIS, "VI/s & DL/s");
DEF_STR(STR_FR_NONE, "None");
// Increase speed // Increase speed
DEF_STR(STR_INSREASE_SPEED, "Increase Game Speed"); DEF_STR(STR_INSREASE_SPEED, "Increase Game Speed");

View File

@ -148,6 +148,9 @@ void CEeprom::LoadEeprom()
{ {
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str()); FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
} }
#ifdef _WIN32
FileName.NormalizePath(CPath(CPath::MODULE_DIRECTORY));
#endif
if (!FileName.DirectoryExists()) if (!FileName.DirectoryExists())
{ {

View File

@ -125,6 +125,9 @@ bool CFlashram::LoadFlashram()
{ {
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str()); FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
} }
#ifdef _WIN32
FileName.NormalizePath(CPath(CPath::MODULE_DIRECTORY));
#endif
if (!FileName.DirectoryExists()) if (!FileName.DirectoryExists())
{ {
@ -133,11 +136,7 @@ bool CFlashram::LoadFlashram()
if (!m_File.Open(FileName, (m_ReadOnly ? CFileBase::modeRead : CFileBase::modeReadWrite) | CFileBase::modeNoTruncate | CFileBase::modeCreate)) if (!m_File.Open(FileName, (m_ReadOnly ? CFileBase::modeRead : CFileBase::modeReadWrite) | CFileBase::modeNoTruncate | CFileBase::modeCreate))
{ {
#ifdef _WIN32
WriteTrace(TraceN64System, TraceError, "Failed to open (%s), ReadOnly = %d, LastError = %X", (const char *)FileName, m_ReadOnly, GetLastError());
#else
WriteTrace(TraceN64System, TraceError, "Failed to open (%s), ReadOnly = %d", (const char *)FileName, m_ReadOnly); WriteTrace(TraceN64System, TraceError, "Failed to open (%s), ReadOnly = %d", (const char *)FileName, m_ReadOnly);
#endif
g_Notify->DisplayError(GS(MSG_FAIL_OPEN_FLASH)); g_Notify->DisplayError(GS(MSG_FAIL_OPEN_FLASH));
return false; return false;
} }

View File

@ -34,6 +34,9 @@ void CMempak::LoadMempak(int32_t Control, bool Create)
{ {
MempakPath.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str()); MempakPath.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
} }
#ifdef _WIN32
MempakPath.NormalizePath(CPath(CPath::MODULE_DIRECTORY));
#endif
if (!Create && !MempakPath.Exists()) if (!Create && !MempakPath.Exists())
{ {

View File

@ -28,6 +28,9 @@ bool CSram::LoadSram()
{ {
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str()); FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
} }
#ifdef _WIN32
FileName.NormalizePath(CPath(CPath::MODULE_DIRECTORY));
#endif
if (!FileName.DirectoryExists()) if (!FileName.DirectoryExists())
{ {
@ -36,11 +39,7 @@ bool CSram::LoadSram()
if (!m_File.Open(FileName, (m_ReadOnly ? CFileBase::modeRead : CFileBase::modeReadWrite) | CFileBase::modeNoTruncate | CFileBase::modeCreate)) if (!m_File.Open(FileName, (m_ReadOnly ? CFileBase::modeRead : CFileBase::modeReadWrite) | CFileBase::modeNoTruncate | CFileBase::modeCreate))
{ {
#ifdef _WIN32
WriteTrace(TraceN64System, TraceError, "Failed to open (%s), ReadOnly = %d, LastError = %X", (const char *)FileName, m_ReadOnly, GetLastError());
#else
WriteTrace(TraceN64System, TraceError, "Failed to open (%s), ReadOnly = %d", (const char *)FileName, m_ReadOnly); WriteTrace(TraceN64System, TraceError, "Failed to open (%s), ReadOnly = %d", (const char *)FileName, m_ReadOnly);
#endif
return false; return false;
} }
m_File.SeekToBegin(); m_File.SeekToBegin();

View File

@ -1547,6 +1547,9 @@ bool CN64System::SaveState()
{ {
SaveFile.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str()); SaveFile.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
} }
#ifdef _WIN32
SaveFile.NormalizePath(CPath(CPath::MODULE_DIRECTORY));
#endif
SaveFile.SetName(g_Settings->LoadStringVal(Rdb_GoodName).c_str()); SaveFile.SetName(g_Settings->LoadStringVal(Rdb_GoodName).c_str());
g_Settings->SaveDword(Game_LastSaveSlot, g_Settings->LoadDword(Game_CurrentSaveState)); g_Settings->SaveDword(Game_LastSaveSlot, g_Settings->LoadDword(Game_CurrentSaveState));
} }
@ -1702,6 +1705,9 @@ bool CN64System::LoadState()
{ {
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str()); FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
} }
#ifdef _WIN32
FileName.NormalizePath(CPath(CPath::MODULE_DIRECTORY));
#endif
if (g_Settings->LoadDword(Game_CurrentSaveState) != 0) if (g_Settings->LoadDword(Game_CurrentSaveState) != 0)
{ {
FileName.SetNameExtension(stdstr_f("%s.pj%d", g_Settings->LoadStringVal(Rdb_GoodName).c_str(), g_Settings->LoadDword(Game_CurrentSaveState)).c_str()); FileName.SetNameExtension(stdstr_f("%s.pj%d", g_Settings->LoadStringVal(Rdb_GoodName).c_str(), g_Settings->LoadDword(Game_CurrentSaveState)).c_str());

View File

@ -45,7 +45,7 @@ enum CPU_TYPE
enum FRAMERATE_TYPE enum FRAMERATE_TYPE
{ {
FR_VIs = 0, FR_DLs = 1, FR_PERCENT = 2, FR_VIs_DLs = 3, FR_VIs = 0, FR_DLs = 1, FR_PERCENT = 2, FR_VIs_DLs = 3, FR_None = 4,
}; };
enum SAVE_CHIP_TYPE enum SAVE_CHIP_TYPE

View File

@ -230,10 +230,10 @@ void CPlugin::Close(RenderWindow * Render)
{ {
WriteTrace(PluginTraceType(), TraceDebug, "(%s): Start", PluginType()); WriteTrace(PluginTraceType(), TraceDebug, "(%s): Start", PluginType());
RomClose(Render); RomClose(Render);
if (m_Initialized) m_Initialized = false;
if (CloseDLL != NULL)
{ {
CloseDLL(); CloseDLL();
m_Initialized = false;
} }
WriteTrace(PluginTraceType(), TraceDebug, "(%s): Done", PluginType()); WriteTrace(PluginTraceType(), TraceDebug, "(%s): Done", PluginType());
} }

View File

@ -11,6 +11,7 @@
#pragma once #pragma once
#include <Common/path.h> #include <Common/path.h>
#include <Common/IniFileClass.h> #include <Common/IniFileClass.h>
#include <Common/StdString.h>
#include <Common/md5.h> #include <Common/md5.h>
#include <Common/Thread.h> #include <Common/Thread.h>
#include <Project64-core/N64System/N64Types.h> #include <Project64-core/N64System/N64Types.h>

View File

@ -90,44 +90,54 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Cmd_RomFile, new CSettingTypeTempString("")); AddHandler(Cmd_RomFile, new CSettingTypeTempString(""));
//Support Files //Support Files
AddHandler(SupportFile_Settings, new CSettingTypeApplicationPath("", "ConfigFile", SupportFile_SettingsDefault)); AddHandler(SupportFile_Settings, new CSettingTypeApplicationPath("Settings", "ConfigFile", SupportFile_SettingsDefault));
AddHandler(SupportFile_SettingsDefault, new CSettingTypeRelativePath("Config", "Project64.cfg")); AddHandler(SupportFile_SettingsDefault, new CSettingTypeRelativePath("Config", "Project64.cfg"));
AddHandler(SupportFile_RomDatabase, new CSettingTypeApplicationPath("", "RomDatabase", SupportFile_RomDatabaseDefault)); AddHandler(SupportFile_RomDatabase, new CSettingTypeApplicationPath("Settings", "RomDatabase", SupportFile_RomDatabaseDefault));
AddHandler(SupportFile_RomDatabaseDefault, new CSettingTypeRelativePath("Config", "Project64.rdb")); AddHandler(SupportFile_RomDatabaseDefault, new CSettingTypeRelativePath("Config", "Project64.rdb"));
AddHandler(SupportFile_VideoRDB, new CSettingTypeApplicationPath("", "VideoRDB", SupportFile_VideoRDBDefault)); AddHandler(SupportFile_VideoRDB, new CSettingTypeApplicationPath("Settings", "VideoRDB", SupportFile_VideoRDBDefault));
AddHandler(SupportFile_VideoRDBDefault, new CSettingTypeRelativePath("Config", "Video.rdb")); AddHandler(SupportFile_VideoRDBDefault, new CSettingTypeRelativePath("Config", "Video.rdb"));
AddHandler(SupportFile_AudioRDB, new CSettingTypeApplicationPath("", "AudioRDB", SupportFile_AudioRDBDefault)); AddHandler(SupportFile_AudioRDB, new CSettingTypeApplicationPath("Settings", "AudioRDB", SupportFile_AudioRDBDefault));
AddHandler(SupportFile_AudioRDBDefault, new CSettingTypeRelativePath("Config", "Audio.rdb")); AddHandler(SupportFile_AudioRDBDefault, new CSettingTypeRelativePath("Config", "Audio.rdb"));
AddHandler(SupportFile_Cheats, new CSettingTypeApplicationPath("", "Cheats", SupportFile_CheatsDefault)); AddHandler(SupportFile_Cheats, new CSettingTypeApplicationPath("Settings", "Cheats", SupportFile_CheatsDefault));
AddHandler(SupportFile_CheatsDefault, new CSettingTypeRelativePath("Config", "Project64.cht")); AddHandler(SupportFile_CheatsDefault, new CSettingTypeRelativePath("Config", "Project64.cht"));
AddHandler(SupportFile_Notes, new CSettingTypeApplicationPath("", "Notes", SupportFile_NotesDefault)); AddHandler(SupportFile_Notes, new CSettingTypeApplicationPath("Settings", "Notes", SupportFile_NotesDefault));
AddHandler(SupportFile_NotesDefault, new CSettingTypeRelativePath("Config", "Project64.rdn")); AddHandler(SupportFile_NotesDefault, new CSettingTypeRelativePath("Config", "Project64.rdn"));
AddHandler(SupportFile_ExtInfo, new CSettingTypeApplicationPath("", "ExtInfo", SupportFile_ExtInfoDefault)); AddHandler(SupportFile_ExtInfo, new CSettingTypeApplicationPath("Settings", "ExtInfo", SupportFile_ExtInfoDefault));
AddHandler(SupportFile_ExtInfoDefault, new CSettingTypeRelativePath("Config", "Project64.rdx")); AddHandler(SupportFile_ExtInfoDefault, new CSettingTypeRelativePath("Config", "Project64.rdx"));
//Settings location //Settings location
AddHandler(Setting_ApplicationName, new CSettingTypeTempString("")); AddHandler(Setting_ApplicationName, new CSettingTypeTempString(""));
AddHandler(Setting_UseFromRegistry, new CSettingTypeApplication("Settings", "Use Registry", (uint32_t)false)); AddHandler(Setting_UseFromRegistry, new CSettingTypeApplication("Settings", "Use Registry", (uint32_t)false));
AddHandler(Setting_RdbEditor, new CSettingTypeApplication("", "Rdb Editor", false)); AddHandler(Setting_RdbEditor, new CSettingTypeApplication("Settings", "Rdb Editor", false));
AddHandler(Setting_CN64TimeCritical, new CSettingTypeApplication("", "CN64TimeCritical", false)); AddHandler(Setting_CN64TimeCritical, new CSettingTypeApplication("Settings", "CN64TimeCritical", false));
AddHandler(Setting_AutoStart, new CSettingTypeApplication("", "Auto Start", (uint32_t)true)); AddHandler(Setting_AutoStart, new CSettingTypeApplication("Settings", "Auto Start", (uint32_t)true));
AddHandler(Setting_AutoZipInstantSave, new CSettingTypeApplication("", "Auto Zip Saves", (uint32_t)true)); AddHandler(Setting_AutoZipInstantSave, new CSettingTypeApplication("Settings", "Auto Zip Saves", (uint32_t)true));
AddHandler(Setting_EraseGameDefaults, new CSettingTypeApplication("", "Erase on default", (uint32_t)true)); AddHandler(Setting_EraseGameDefaults, new CSettingTypeApplication("Settings", "Erase on default", (uint32_t)true));
AddHandler(Setting_CheckEmuRunning, new CSettingTypeApplication("", "Check Running", (uint32_t)true)); AddHandler(Setting_CheckEmuRunning, new CSettingTypeApplication("Settings", "Check Running", (uint32_t)true));
AddHandler(Setting_ForceInterpreterCPU, new CSettingTypeApplication("", "Force Interpreter CPU", false)); AddHandler(Setting_ForceInterpreterCPU, new CSettingTypeApplication("Settings", "Force Interpreter CPU", false));
AddHandler(Setting_FixedRdramAddress, new CSettingTypeApplication("", "Fixed Rdram Address", (uint32_t)0)); AddHandler(Setting_FixedRdramAddress, new CSettingTypeApplication("Settings", "Fixed Rdram Address", (uint32_t)0));
AddHandler(Setting_RememberCheats, new CSettingTypeApplication("", "Remember Cheats", (uint32_t)false)); AddHandler(Setting_RememberCheats, new CSettingTypeApplication("Settings", "Remember Cheats", (uint32_t)false));
#ifdef ANDROID #ifdef ANDROID
AddHandler(Setting_UniqueSaveDir, new CSettingTypeTempBool(true)); AddHandler(Setting_UniqueSaveDir, new CSettingTypeTempBool(true));
#else #else
AddHandler(Setting_UniqueSaveDir, new CSettingTypeApplication("", "Unique Game Dir", (uint32_t)false)); AddHandler(Setting_UniqueSaveDir, new CSettingTypeApplication("Settings", "Unique Game Dir", (uint32_t)false));
#endif #endif
AddHandler(Setting_CurrentLanguage, new CSettingTypeApplication("", "Current Language", "")); AddHandler(Setting_CurrentLanguage, new CSettingTypeApplication("Settings", "Current Language", ""));
AddHandler(Setting_EnableDisk, new CSettingTypeTempBool(false)); AddHandler(Setting_EnableDisk, new CSettingTypeTempBool(false));
AddHandler(Setting_LanguageDirDefault, new CSettingTypeRelativePath("Lang", "")); AddHandler(Setting_LanguageDirDefault, new CSettingTypeRelativePath("Lang", ""));
AddHandler(Setting_LanguageDir, new CSettingTypeApplicationPath("Lang Directory", "Directory", Setting_LanguageDirDefault)); AddHandler(Setting_LanguageDir, new CSettingTypeApplicationPath("Lang Directory", "Directory", Setting_LanguageDirDefault));
AddHandler(Default_RDRamSize, new CSettingTypeApplication("Defaults", "RDRAM Size", 0x400000u));
AddHandler(Default_UseHleGfx, new CSettingTypeApplication("Defaults", "HLE GFX", true));
AddHandler(Default_UseTlb, new CSettingTypeApplication("Defaults", "Use TLB", true));
AddHandler(Default_ViRefreshRate, new CSettingTypeApplication("Defaults", "ViRefresh", 1500u));
AddHandler(Default_AiCountPerBytes, new CSettingTypeApplication("Defaults", "AiCountPerBytes", 0u));
AddHandler(Default_CounterFactor, new CSettingTypeApplication("Defaults", "Counter Factor", 2u));
AddHandler(Default_32Bit, new CSettingTypeApplication("Defaults", "32bit", true));
AddHandler(Default_SyncViaAudio, new CSettingTypeApplication("Defaults", "Audio-Sync Audio", true));
AddHandler(Default_FixedAudio, new CSettingTypeApplication("Defaults", "Audio-Fixed Audio", true));
AddHandler(Rdb_GoodName, new CSettingTypeRomDatabase("Good Name", Game_GameName)); AddHandler(Rdb_GoodName, new CSettingTypeRomDatabase("Good Name", Game_GameName));
AddHandler(Rdb_SaveChip, new CSettingTypeRDBSaveChip("Save Type", (uint32_t)SaveChip_Auto)); AddHandler(Rdb_SaveChip, new CSettingTypeRDBSaveChip("Save Type", (uint32_t)SaveChip_Auto));
#ifdef _DEBUG #ifdef _DEBUG
@ -135,15 +145,15 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
#else #else
AddHandler(Rdb_CpuType, new CSettingTypeRDBCpuType("CPU Type", CPU_Recompiler)); AddHandler(Rdb_CpuType, new CSettingTypeRDBCpuType("CPU Type", CPU_Recompiler));
#endif #endif
AddHandler(Rdb_RDRamSize, new CSettingTypeRDBRDRamSize("RDRAM Size", 0x400000)); AddHandler(Rdb_RDRamSize, new CSettingTypeRDBRDRamSize("RDRAM Size", Default_RDRamSize));
AddHandler(Rdb_CounterFactor, new CSettingTypeRomDatabase("Counter Factor", (uint32_t)2)); AddHandler(Rdb_CounterFactor, new CSettingTypeRomDatabase("Counter Factor", Default_CounterFactor));
AddHandler(Rdb_UseTlb, new CSettingTypeRDBYesNo("Use TLB", true)); AddHandler(Rdb_UseTlb, new CSettingTypeRDBYesNo("Use TLB", Default_UseTlb));
AddHandler(Rdb_DelayDP, new CSettingTypeRDBYesNo("Delay DP", true)); AddHandler(Rdb_DelayDP, new CSettingTypeRDBYesNo("Delay DP", true));
AddHandler(Rdb_DelaySi, new CSettingTypeRDBYesNo("Delay SI", false)); AddHandler(Rdb_DelaySi, new CSettingTypeRDBYesNo("Delay SI", false));
AddHandler(Rdb_32Bit, new CSettingTypeRDBYesNo("32bit", true)); AddHandler(Rdb_32Bit, new CSettingTypeRDBYesNo("32bit", Default_32Bit));
AddHandler(Rdb_FastSP, new CSettingTypeRDBYesNo("Fast SP", true)); AddHandler(Rdb_FastSP, new CSettingTypeRDBYesNo("Fast SP", true));
AddHandler(Rdb_FixedAudio, new CSettingTypeRomDatabase("Fixed Audio", true)); AddHandler(Rdb_FixedAudio, new CSettingTypeRomDatabase("Audio-Fixed Audio", Default_FixedAudio));
AddHandler(Rdb_SyncViaAudio, new CSettingTypeRomDatabase("Audio-Sync Audio", true)); AddHandler(Rdb_SyncViaAudio, new CSettingTypeRomDatabase("Audio-Sync Audio", Default_SyncViaAudio));
AddHandler(Rdb_RspAudioSignal, new CSettingTypeRDBYesNo("Audio Signal", false)); AddHandler(Rdb_RspAudioSignal, new CSettingTypeRDBYesNo("Audio Signal", false));
AddHandler(Rdb_TLB_VAddrStart, new CSettingTypeRomDatabase("TLB: Vaddr Start", (uint32_t)0)); AddHandler(Rdb_TLB_VAddrStart, new CSettingTypeRomDatabase("TLB: Vaddr Start", (uint32_t)0));
AddHandler(Rdb_TLB_VAddrLen, new CSettingTypeRomDatabase("TLB: Vaddr Len", (uint32_t)0)); AddHandler(Rdb_TLB_VAddrLen, new CSettingTypeRomDatabase("TLB: Vaddr Len", (uint32_t)0));
@ -163,8 +173,8 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Rdb_SMM_ValidFunc, new CSettingTypeRomDatabase("SMM-FUNC", true)); AddHandler(Rdb_SMM_ValidFunc, new CSettingTypeRomDatabase("SMM-FUNC", true));
AddHandler(Rdb_GameCheatFix, new CSettingTypeRomDatabaseIndex("Cheat", "", "")); AddHandler(Rdb_GameCheatFix, new CSettingTypeRomDatabaseIndex("Cheat", "", ""));
AddHandler(Rdb_GameCheatFixPlugin, new CSettingTypeRomDatabaseIndex("CheatPlugin", "", "")); AddHandler(Rdb_GameCheatFixPlugin, new CSettingTypeRomDatabaseIndex("CheatPlugin", "", ""));
AddHandler(Rdb_ViRefreshRate, new CSettingTypeRomDatabase("ViRefresh", (uint32_t)1500)); AddHandler(Rdb_ViRefreshRate, new CSettingTypeRomDatabase("ViRefresh", Default_ViRefreshRate));
AddHandler(Rdb_AiCountPerBytes, new CSettingTypeRomDatabase("AiCountPerBytes", (uint32_t)0)); AddHandler(Rdb_AiCountPerBytes, new CSettingTypeRomDatabase("AiCountPerBytes", Default_AiCountPerBytes));
AddHandler(Rdb_AudioResetOnLoad, new CSettingTypeRDBYesNo("AudioResetOnLoad", false)); AddHandler(Rdb_AudioResetOnLoad, new CSettingTypeRDBYesNo("AudioResetOnLoad", false));
AddHandler(Rdb_AllowROMWrites, new CSettingTypeRDBYesNo("AllowROMWrites", false)); AddHandler(Rdb_AllowROMWrites, new CSettingTypeRDBYesNo("AllowROMWrites", false));
AddHandler(Rdb_CRC_Recalc, new CSettingTypeRDBYesNo("CRC-Recalc", false)); AddHandler(Rdb_CRC_Recalc, new CSettingTypeRDBYesNo("CRC-Recalc", false));
@ -229,13 +239,13 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Game_FullSpeed, new CSettingTypeTempBool(true, "Full Speed")); AddHandler(Game_FullSpeed, new CSettingTypeTempBool(true, "Full Speed"));
//User Interface //User Interface
AddHandler(UserInterface_ShowCPUPer, new CSettingTypeApplication("", "Display CPU Usage", (uint32_t)false)); AddHandler(UserInterface_ShowCPUPer, new CSettingTypeApplication("Settings", "Display CPU Usage", (uint32_t)false));
#ifdef ANDROID #ifdef ANDROID
AddHandler(UserInterface_DisplayFrameRate, new CSettingTypeApplication("", "Display Frame Rate", (uint32_t)false)); AddHandler(UserInterface_DisplayFrameRate, new CSettingTypeApplication("Settings", "Display Frame Rate", (uint32_t)false));
#else #else
AddHandler(UserInterface_DisplayFrameRate, new CSettingTypeApplication("", "Display Frame Rate", (uint32_t)true)); AddHandler(UserInterface_DisplayFrameRate, new CSettingTypeApplication("Settings", "Display Frame Rate", (uint32_t)true));
#endif #endif
AddHandler(UserInterface_FrameDisplayType, new CSettingTypeApplication("", "Frame Rate Display Type", (uint32_t)FR_VIs)); AddHandler(UserInterface_FrameDisplayType, new CSettingTypeApplication("Settings", "Frame Rate Display Type", (uint32_t)FR_None));
AddHandler(Directory_Plugin, new CSettingTypeSelectedDirectory("Dir:Plugin", Directory_PluginInitial, Directory_PluginSelected, Directory_PluginUseSelected, Directory_Plugin)); AddHandler(Directory_Plugin, new CSettingTypeSelectedDirectory("Dir:Plugin", Directory_PluginInitial, Directory_PluginSelected, Directory_PluginUseSelected, Directory_Plugin));
#ifndef _M_X64 #ifndef _M_X64
AddHandler(Directory_PluginInitial, new CSettingTypeRelativePath("Plugin", "")); AddHandler(Directory_PluginInitial, new CSettingTypeRelativePath("Plugin", ""));
@ -285,13 +295,13 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Directory_LogUseSelected, new CSettingTypeApplication("Log Directory", "Use Selected", false)); AddHandler(Directory_LogUseSelected, new CSettingTypeApplication("Log Directory", "Use Selected", false));
AddHandler(RomList_RomListCacheDefault, new CSettingTypeRelativePath("Config", "Project64.cache3")); AddHandler(RomList_RomListCacheDefault, new CSettingTypeRelativePath("Config", "Project64.cache3"));
AddHandler(RomList_RomListCache, new CSettingTypeApplicationPath("", "RomListCache", RomList_RomListCacheDefault)); AddHandler(RomList_RomListCache, new CSettingTypeApplicationPath("Settings", "RomListCache", RomList_RomListCacheDefault));
AddHandler(RomList_GameDir, new CSettingTypeSelectedDirectory("Dir:Game", RomList_GameDirInitial, RomList_GameDirSelected, RomList_GameDirUseSelected, RomList_GameDir)); AddHandler(RomList_GameDir, new CSettingTypeSelectedDirectory("Dir:Game", RomList_GameDirInitial, RomList_GameDirSelected, RomList_GameDirUseSelected, RomList_GameDir));
AddHandler(RomList_GameDirInitial, new CSettingTypeRelativePath("Game Directory", "")); AddHandler(RomList_GameDirInitial, new CSettingTypeRelativePath("Game Directory", ""));
AddHandler(RomList_GameDirSelected, new CSettingTypeApplication("Game Directory", "Directory", RomList_GameDirInitial)); AddHandler(RomList_GameDirSelected, new CSettingTypeApplication("Game Directory", "Directory", RomList_GameDirInitial));
AddHandler(RomList_GameDirUseSelected, new CSettingTypeApplication("Game Directory", "Use Selected", false)); AddHandler(RomList_GameDirUseSelected, new CSettingTypeApplication("Game Directory", "Use Selected", false));
AddHandler(RomList_GameDirRecursive, new CSettingTypeApplication("Game Directory", "Recursive", false)); AddHandler(RomList_GameDirRecursive, new CSettingTypeApplication("Game Directory", "Recursive", false));
AddHandler(RomList_7zipCache, new CSettingTypeApplicationPath("", "7zipCache", RomList_7zipCacheDefault)); AddHandler(RomList_7zipCache, new CSettingTypeApplicationPath("Settings", "7zipCache", RomList_7zipCacheDefault));
AddHandler(RomList_7zipCacheDefault, new CSettingTypeRelativePath("Config", "Project64.zcache")); AddHandler(RomList_7zipCacheDefault, new CSettingTypeRelativePath("Config", "Project64.zcache"));
AddHandler(GameRunning_LoadingInProgress, new CSettingTypeTempBool(false)); AddHandler(GameRunning_LoadingInProgress, new CSettingTypeTempBool(false));
@ -303,8 +313,8 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(GameRunning_ScreenHertz, new CSettingTypeTempNumber(60)); AddHandler(GameRunning_ScreenHertz, new CSettingTypeTempNumber(60));
AddHandler(GameRunning_InReset, new CSettingTypeTempBool(false)); AddHandler(GameRunning_InReset, new CSettingTypeTempBool(false));
AddHandler(UserInterface_BasicMode, new CSettingTypeApplication("", "Basic Mode", (uint32_t)true)); AddHandler(UserInterface_BasicMode, new CSettingTypeApplication("Settings", "Basic Mode", (uint32_t)true));
AddHandler(File_DiskIPLPath, new CSettingTypeApplicationPath("", "Disk IPL ROM Path", Default_None)); AddHandler(File_DiskIPLPath, new CSettingTypeApplicationPath("Settings", "Disk IPL ROM Path", Default_None));
AddHandler(Debugger_Enabled, new CSettingTypeApplication("Debugger", "Debugger", false)); AddHandler(Debugger_Enabled, new CSettingTypeApplication("Debugger", "Debugger", false));
AddHandler(Debugger_ShowTLBMisses, new CSettingTypeApplication("Debugger", "Show TLB Misses", false)); AddHandler(Debugger_ShowTLBMisses, new CSettingTypeApplication("Debugger", "Show TLB Misses", false));
@ -352,10 +362,11 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
//Plugin //Plugin
#ifdef _WIN32 #ifdef _WIN32
AddHandler(Plugin_RSP_Current, new CSettingTypeApplication("Plugin", "RSP Dll", "RSP\\RSP 1.7.dll")); AddHandler(Plugin_RSP_Current, new CSettingTypeApplication("Plugin", "RSP Dll", "RSP\\RSP 1.7.dll"));
AddHandler(Plugin_GFX_Current, new CSettingTypeApplication("Plugin", "Graphics Dll", "GFX\\Jabo_Direct3D8.dll"));
#ifdef _DEBUG #ifdef _DEBUG
AddHandler(Plugin_GFX_Current, new CSettingTypeApplication("Plugin", "Graphics Dll", "GFX\\Project64-Video_d.dll"));
AddHandler(Plugin_AUDIO_Current, new CSettingTypeApplication("Plugin", "Audio Dll", "Audio\\Project64-Audio_d.dll")); AddHandler(Plugin_AUDIO_Current, new CSettingTypeApplication("Plugin", "Audio Dll", "Audio\\Project64-Audio_d.dll"));
#else #else
AddHandler(Plugin_GFX_Current, new CSettingTypeApplication("Plugin", "Graphics Dll", "GFX\\Project64-Video.dll"));
AddHandler(Plugin_AUDIO_Current, new CSettingTypeApplication("Plugin", "Audio Dll", "Audio\\Project64-Audio.dll")); AddHandler(Plugin_AUDIO_Current, new CSettingTypeApplication("Plugin", "Audio Dll", "Audio\\Project64-Audio.dll"));
#endif #endif
AddHandler(Plugin_CONT_Current, new CSettingTypeApplication("Plugin", "Controller Dll", "Input\\PJ64_NRage.dll")); AddHandler(Plugin_CONT_Current, new CSettingTypeApplication("Plugin", "Controller Dll", "Input\\PJ64_NRage.dll"));
@ -370,7 +381,7 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Plugin_AUDIO_CurVer, new CSettingTypeApplication("Plugin", "Audio Dll Ver", "")); AddHandler(Plugin_AUDIO_CurVer, new CSettingTypeApplication("Plugin", "Audio Dll Ver", ""));
AddHandler(Plugin_CONT_CurVer, new CSettingTypeApplication("Plugin", "Controller Dll Ver", "")); AddHandler(Plugin_CONT_CurVer, new CSettingTypeApplication("Plugin", "Controller Dll Ver", ""));
AddHandler(Plugin_UseHleGfx, new CSettingTypeApplication("RSP", "HLE GFX", true)); AddHandler(Plugin_UseHleGfx, new CSettingTypeApplication("RSP", "HLE GFX", Default_UseHleGfx));
AddHandler(Plugin_UseHleAudio, new CSettingTypeApplication("RSP", "HLE Audio", false)); AddHandler(Plugin_UseHleAudio, new CSettingTypeApplication("RSP", "HLE Audio", false));
AddHandler(Plugin_EnableAudio, new CSettingTypeApplication("Audio", "Enable Audio", true)); AddHandler(Plugin_EnableAudio, new CSettingTypeApplication("Audio", "Enable Audio", true));
@ -644,7 +655,7 @@ bool CSettings::Initialize(const char * BaseDirectory, const char * AppName)
{ {
WriteTrace(TraceAppInit, TraceDebug, "Start"); WriteTrace(TraceAppInit, TraceDebug, "Start");
AddHowToHandleSetting(BaseDirectory); AddHowToHandleSetting(BaseDirectory);
CSettingTypeApplication::Initialize(AppName); CSettingTypeApplication::Initialize();
CSettingTypeRomDatabase::Initialize(); CSettingTypeRomDatabase::Initialize();
CSettingTypeGame::Initialize(); CSettingTypeGame::Initialize();
CSettingTypeCheats::Initialize(); CSettingTypeCheats::Initialize();

View File

@ -25,32 +25,32 @@ CSettingTypeApplication::CSettingTypeApplication(const char * Section, const cha
} }
CSettingTypeApplication::CSettingTypeApplication(const char * Section, const char * Name, bool DefaultValue) : CSettingTypeApplication::CSettingTypeApplication(const char * Section, const char * Name, bool DefaultValue) :
m_DefaultStr(""), m_DefaultStr(""),
m_DefaultValue(DefaultValue), m_DefaultValue(DefaultValue),
m_DefaultSetting(Default_Constant), m_DefaultSetting(Default_Constant),
m_Section(FixSectionName(Section)), m_Section(FixSectionName(Section)),
m_KeyName(Name), m_KeyName(Name),
m_KeyNameIdex(m_KeyName) m_KeyNameIdex(m_KeyName)
{ {
} }
CSettingTypeApplication::CSettingTypeApplication(const char * Section, const char * Name, const char * DefaultValue) : CSettingTypeApplication::CSettingTypeApplication(const char * Section, const char * Name, const char * DefaultValue) :
m_DefaultStr(DefaultValue), m_DefaultStr(DefaultValue),
m_DefaultValue(0), m_DefaultValue(0),
m_DefaultSetting(Default_Constant), m_DefaultSetting(Default_Constant),
m_Section(FixSectionName(Section)), m_Section(FixSectionName(Section)),
m_KeyName(Name), m_KeyName(Name),
m_KeyNameIdex(m_KeyName) m_KeyNameIdex(m_KeyName)
{ {
} }
CSettingTypeApplication::CSettingTypeApplication(const char * Section, const char * Name, SettingID DefaultSetting) : CSettingTypeApplication::CSettingTypeApplication(const char * Section, const char * Name, SettingID DefaultSetting) :
m_DefaultStr(""), m_DefaultStr(""),
m_DefaultValue(0), m_DefaultValue(0),
m_DefaultSetting(DefaultSetting), m_DefaultSetting(DefaultSetting),
m_Section(FixSectionName(Section)), m_Section(FixSectionName(Section)),
m_KeyName(Name), m_KeyName(Name),
m_KeyNameIdex(m_KeyName) m_KeyNameIdex(m_KeyName)
{ {
} }
@ -63,7 +63,7 @@ bool CSettingTypeApplication::IsSettingSet(void) const
return m_SettingsIniFile ? m_SettingsIniFile->EntryExists(SectionName(), m_KeyNameIdex.c_str()) : false; return m_SettingsIniFile ? m_SettingsIniFile->EntryExists(SectionName(), m_KeyNameIdex.c_str()) : false;
} }
void CSettingTypeApplication::Initialize(const char * /*AppName*/) void CSettingTypeApplication::Initialize(void)
{ {
WriteTrace(TraceAppInit, TraceDebug, "Start"); WriteTrace(TraceAppInit, TraceDebug, "Start");
CPath BaseDir(g_Settings->LoadStringVal(Cmd_BaseDirectory).c_str(), ""); CPath BaseDir(g_Settings->LoadStringVal(Cmd_BaseDirectory).c_str(), "");
@ -91,17 +91,14 @@ void CSettingTypeApplication::Initialize(const char * /*AppName*/)
{ {
delete m_SettingsIniFile; delete m_SettingsIniFile;
} }
#ifdef _WIN32 CPath SettingPath(SettingsFile.c_str());
CPath SettingsDir(CPath(SettingsFile).GetDriveDirectory(), ""); SettingPath.NormalizePath(BaseDir);
#else if (!SettingPath.DirectoryExists())
CPath SettingsDir(CPath(SettingsFile).GetDirectory(), "");
#endif
if (!SettingsDir.DirectoryExists())
{ {
SettingsDir.DirectoryCreate(); SettingPath.DirectoryCreate();
} }
m_SettingsIniFile = new CIniFile(SettingsFile.c_str()); m_SettingsIniFile = new CIniFile(SettingPath);
} }
m_SettingsIniFile->SetAutoFlush(false); m_SettingsIniFile->SetAutoFlush(false);

View File

@ -47,7 +47,7 @@ public:
virtual void Delete(uint32_t Index); virtual void Delete(uint32_t Index);
// Initialize this class to use ini or registry // Initialize this class to use ini or registry
static void Initialize(const char * AppName); static void Initialize(void);
static void CleanUp(void); static void CleanUp(void);
static void Flush(void); static void Flush(void);
static void ResetAll(void); static void ResetAll(void);

View File

@ -45,7 +45,7 @@ bool CSettingTypeRDBRDRamSize::Load (uint32_t Index, uint32_t & Value ) const
LoadDefault(Index,ulValue); LoadDefault(Index,ulValue);
} }
Value = 0x400000; Value = 0x400000;
if (ulValue == 8 || !existsInRdb) //default to 8MB if ROM is not in the RDB if (ulValue == 8 || ulValue == 0x800000 || !existsInRdb) //default to 8MB if ROM is not in the RDB
{ {
Value = 0x800000; Value = 0x800000;
} }
@ -66,7 +66,7 @@ void CSettingTypeRDBRDRamSize::LoadDefault (uint32_t /*Index*/, bool & /*Value*/
void CSettingTypeRDBRDRamSize::LoadDefault (uint32_t /*Index*/, uint32_t & Value ) const void CSettingTypeRDBRDRamSize::LoadDefault (uint32_t /*Index*/, uint32_t & Value ) const
{ {
Value = m_DefaultValue; Value = m_DefaultSetting == Default_Constant ? m_DefaultValue : g_Settings->LoadDword(m_DefaultSetting);
} }
void CSettingTypeRDBRDRamSize::LoadDefault (uint32_t /*Index*/, std::string & /*Value*/ ) const void CSettingTypeRDBRDRamSize::LoadDefault (uint32_t /*Index*/, std::string & /*Value*/ ) const

View File

@ -135,15 +135,7 @@ void CSettingTypeRomDatabase::GameChanged(void * /*Data */)
} }
} }
bool CSettingTypeRomDatabase::Load(uint32_t Index, bool & Value) const bool CSettingTypeRomDatabase::Load(uint32_t & Value) const
{
uint32_t temp_value = Value;
bool bRes = Load(Index, temp_value);
Value = temp_value != 0;
return bRes;
}
bool CSettingTypeRomDatabase::Load(uint32_t Index, uint32_t & Value) const
{ {
bool bRes = false; bool bRes = false;
if (m_VideoSetting) if (m_VideoSetting)
@ -158,11 +150,29 @@ bool CSettingTypeRomDatabase::Load(uint32_t Index, uint32_t & Value) const
{ {
bRes = m_SettingsIniFile->GetNumber(Section(), m_KeyName.c_str(), Value, Value); bRes = m_SettingsIniFile->GetNumber(Section(), m_KeyName.c_str(), Value, Value);
} }
if (!bRes) return bRes;
}
bool CSettingTypeRomDatabase::Load(uint32_t Index, bool & Value) const
{
uint32_t temp_value = Value;
if (Load(temp_value))
{
Value = temp_value != 0;
return true;
}
LoadDefault(Index, Value);
return false;
}
bool CSettingTypeRomDatabase::Load(uint32_t Index, uint32_t & Value) const
{
if (!Load(Value))
{ {
LoadDefault(Index, Value); LoadDefault(Index, Value);
return false;
} }
return bRes; return true;
} }
bool CSettingTypeRomDatabase::Load(uint32_t Index, std::string & Value) const bool CSettingTypeRomDatabase::Load(uint32_t Index, std::string & Value) const
@ -211,13 +221,7 @@ void CSettingTypeRomDatabase::LoadDefault(uint32_t /*Index*/, uint32_t & Value)
{ {
if (m_DefaultSetting != Default_None) if (m_DefaultSetting != Default_None)
{ {
if (m_DefaultSetting == Default_Constant) Value = m_DefaultSetting == Default_Constant ? m_DefaultValue : g_Settings->LoadDword(m_DefaultSetting);
{
Value = m_DefaultValue;
}
else {
g_Settings->LoadDword(m_DefaultSetting, Value);
}
} }
} }

View File

@ -76,4 +76,6 @@ private:
CSettingTypeRomDatabase(); // Disable default constructor CSettingTypeRomDatabase(); // Disable default constructor
CSettingTypeRomDatabase(const CSettingTypeRomDatabase&); // Disable copy constructor CSettingTypeRomDatabase(const CSettingTypeRomDatabase&); // Disable copy constructor
CSettingTypeRomDatabase& operator=(const CSettingTypeRomDatabase&); // Disable assignment CSettingTypeRomDatabase& operator=(const CSettingTypeRomDatabase&); // Disable assignment
bool Load(uint32_t & Value) const;
}; };

View File

@ -61,6 +61,17 @@ enum SettingID
Setting_CurrentLanguage, Setting_CurrentLanguage,
Setting_EnableDisk, Setting_EnableDisk,
//Default Settings
Default_RDRamSize,
Default_UseHleGfx,
Default_UseTlb,
Default_ViRefreshRate,
Default_AiCountPerBytes,
Default_CounterFactor,
Default_32Bit,
Default_SyncViaAudio,
Default_FixedAudio,
//RDB Settings //RDB Settings
Rdb_GoodName, Rdb_GoodName,
Rdb_SaveChip, Rdb_SaveChip,

View File

@ -18,6 +18,9 @@ extern "C" {
#endif #endif
} }
#ifdef _WIN32
#include <Windows.h>
#endif
#include <math.h> #include <math.h>
#include "3dmath.h" #include "3dmath.h"
#include "trace.h" #include "trace.h"

View File

@ -37,6 +37,7 @@
#include "ScreenResolution.h" #include "ScreenResolution.h"
#ifdef _WIN32 #ifdef _WIN32
#include <Windows.h>
#include <commctrl.h> #include <commctrl.h>
#endif #endif
@ -674,6 +675,7 @@ void CALL CloseDLL(void)
voodoo.gamma_table_g = 0; voodoo.gamma_table_g = 0;
delete[] voodoo.gamma_table_b; delete[] voodoo.gamma_table_b;
voodoo.gamma_table_b = 0; voodoo.gamma_table_b = 0;
StopTrace();
} }
/****************************************************************** /******************************************************************

View File

@ -11,7 +11,9 @@
#include "ScreenResolution.h" #include "ScreenResolution.h"
#include "settings.h" #include "settings.h"
#include "trace.h" #include "trace.h"
#ifdef _WIN32
#include <Windows.h>
#endif
#ifdef ANDROID #ifdef ANDROID
#include <Common/StdString.h> #include <Common/StdString.h>
#include <vector> #include <vector>
@ -268,7 +270,7 @@ void FullScreenResolutions::init()
int current = 0; int current = 0;
char smode[256]; char smode[256];
memset(&enumMode, 0, sizeof(DEVMODE)); memset(&enumMode, 0, sizeof(DEVMODE));
memset(&prevInfo, 0, sizeof(ResolutionInfo)); prevInfo = ResolutionInfo();
while (EnumDisplaySettings(NULL, iModeNum++, &enumMode) != 0) while (EnumDisplaySettings(NULL, iModeNum++, &enumMode) != 0)
{ {
ResolutionInfo curInfo(NULL, enumMode.dmPelsWidth, enumMode.dmPelsHeight, enumMode.dmDisplayFrequency); ResolutionInfo curInfo(NULL, enumMode.dmPelsWidth, enumMode.dmPelsHeight, enumMode.dmDisplayFrequency);

View File

@ -97,3 +97,13 @@ void StartTrace(void)
g_LogFile = new CTraceFileLog(LogFilePath, g_settings->FlushLogs(), CLog::Log_New, 500); g_LogFile = new CTraceFileLog(LogFilePath, g_settings->FlushLogs(), CLog::Log_New, 500);
TraceAddModule(g_LogFile); TraceAddModule(g_LogFile);
} }
void StopTrace(void)
{
if (g_LogFile)
{
TraceRemoveModule(g_LogFile);
delete g_LogFile;
g_LogFile = NULL;
}
}

View File

@ -30,3 +30,4 @@ enum TraceModuleGlide64
void SetupTrace(void); void SetupTrace(void);
void StartTrace(void); void StartTrace(void);
void StopTrace(void);

View File

@ -41,6 +41,7 @@
<MinimumRequiredVersion Condition="'$(Platform)'=='x64'">5.02</MinimumRequiredVersion> <MinimumRequiredVersion Condition="'$(Platform)'=='x64'">5.02</MinimumRequiredVersion>
<StackReserveSize>1</StackReserveSize> <StackReserveSize>1</StackReserveSize>
<DataExecutionPrevention>false</DataExecutionPrevention> <DataExecutionPrevention>false</DataExecutionPrevention>
<LargeAddressAware>true</LargeAddressAware>
</Link> </Link>
<Manifest Condition="'$(PlatformToolset)'!='v90'"> <Manifest Condition="'$(PlatformToolset)'!='v90'">
<EnableDPIAwareness>true</EnableDPIAwareness> <EnableDPIAwareness>true</EnableDPIAwareness>
@ -110,6 +111,7 @@
<ClCompile Include="UserInterface\RomInformationClass.cpp" /> <ClCompile Include="UserInterface\RomInformationClass.cpp" />
<ClCompile Include="UserInterface\SettingsConfig.cpp" /> <ClCompile Include="UserInterface\SettingsConfig.cpp" />
<ClCompile Include="UserInterface\Settings\SettingsPage-AdvancedOptions.cpp" /> <ClCompile Include="UserInterface\Settings\SettingsPage-AdvancedOptions.cpp" />
<ClCompile Include="UserInterface\Settings\SettingsPage-Defaults.cpp" />
<ClCompile Include="UserInterface\Settings\SettingsPage-Directories.cpp" /> <ClCompile Include="UserInterface\Settings\SettingsPage-Directories.cpp" />
<ClCompile Include="UserInterface\Settings\SettingsPage-Game-General.cpp" /> <ClCompile Include="UserInterface\Settings\SettingsPage-Game-General.cpp" />
<ClCompile Include="UserInterface\Settings\SettingsPage-Game-Plugin.cpp" /> <ClCompile Include="UserInterface\Settings\SettingsPage-Game-Plugin.cpp" />
@ -173,6 +175,7 @@
<ClInclude Include="UserInterface\RomInformationClass.h" /> <ClInclude Include="UserInterface\RomInformationClass.h" />
<ClInclude Include="UserInterface\SettingsConfig.h" /> <ClInclude Include="UserInterface\SettingsConfig.h" />
<ClInclude Include="UserInterface\Settings\SettingsPage-AdvancedOptions.h" /> <ClInclude Include="UserInterface\Settings\SettingsPage-AdvancedOptions.h" />
<ClInclude Include="UserInterface\Settings\SettingsPage-Defaults.h" />
<ClInclude Include="UserInterface\Settings\SettingsPage-Directories.h" /> <ClInclude Include="UserInterface\Settings\SettingsPage-Directories.h" />
<ClInclude Include="UserInterface\Settings\SettingsPage-Game-General.h" /> <ClInclude Include="UserInterface\Settings\SettingsPage-Game-General.h" />
<ClInclude Include="UserInterface\Settings\SettingsPage-Game-Plugin.h" /> <ClInclude Include="UserInterface\Settings\SettingsPage-Game-Plugin.h" />

View File

@ -120,9 +120,6 @@
<ClCompile Include="UserInterface\MenuShortCuts.cpp"> <ClCompile Include="UserInterface\MenuShortCuts.cpp">
<Filter>Source Files\User Interface Source</Filter> <Filter>Source Files\User Interface Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="UserInterface\NotificationClass.cpp">
<Filter>Source Files\User Interface Source</Filter>
</ClCompile>
<ClCompile Include="UserInterface\RomBrowserClass.cpp"> <ClCompile Include="UserInterface\RomBrowserClass.cpp">
<Filter>Source Files\User Interface Source</Filter> <Filter>Source Files\User Interface Source</Filter>
</ClCompile> </ClCompile>
@ -216,6 +213,12 @@
<ClCompile Include="UserInterface\WTLControls\EditNumber32.cpp"> <ClCompile Include="UserInterface\WTLControls\EditNumber32.cpp">
<Filter>Source Files\User Interface Source\WTL Controls Source</Filter> <Filter>Source Files\User Interface Source\WTL Controls Source</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="UserInterface\Notification.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UserInterface\Settings\SettingsPage-Defaults.cpp">
<Filter>Source Files\User Interface Source\Settings Source</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="UserInterface\resource.h"> <ClInclude Include="UserInterface\resource.h">
@ -242,9 +245,6 @@
<ClInclude Include="UserInterface\MenuShortCuts.h"> <ClInclude Include="UserInterface\MenuShortCuts.h">
<Filter>Header Files\User Interface Headers</Filter> <Filter>Header Files\User Interface Headers</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="UserInterface\NotificationClass.h">
<Filter>Header Files\User Interface Headers</Filter>
</ClInclude>
<ClInclude Include="UserInterface\RomBrowser.h"> <ClInclude Include="UserInterface\RomBrowser.h">
<Filter>Header Files\User Interface Headers</Filter> <Filter>Header Files\User Interface Headers</Filter>
</ClInclude> </ClInclude>
@ -413,6 +413,12 @@
<ClInclude Include="UserInterface\WTLControls\EditNumber32.h"> <ClInclude Include="UserInterface\WTLControls\EditNumber32.h">
<Filter>Header Files\User Interface Headers\WTL Controls Headers</Filter> <Filter>Header Files\User Interface Headers\WTL Controls Headers</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="UserInterface\Notification.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="UserInterface\Settings\SettingsPage-Defaults.h">
<Filter>Header Files\User Interface Headers\Settings Header</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="res\divider.cur"> <None Include="res\divider.cur">

View File

@ -52,6 +52,7 @@ CPath CSymbols::GetSymFilePath()
{ {
symFilePath.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str()); symFilePath.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
} }
symFilePath.NormalizePath(CPath(CPath::MODULE_DIRECTORY));
if (!symFilePath.DirectoryExists()) if (!symFilePath.DirectoryExists())
{ {
symFilePath.DirectoryCreate(); symFilePath.DirectoryCreate();

View File

@ -632,6 +632,7 @@ std::wstring CMainMenu::GetSaveSlotString(int Slot)
{ {
FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str()); FileName.AppendDirectory(g_Settings->LoadStringVal(Game_UniqueSaveDir).c_str());
} }
FileName.NormalizePath(CPath(CPath::MODULE_DIRECTORY));
if (Slot != 0) if (Slot != 0)
{ {
FileName.SetNameExtension(stdstr_f("%s.pj%d", g_Settings->LoadStringVal(Rdb_GoodName).c_str(), Slot).c_str()); FileName.SetNameExtension(stdstr_f("%s.pj%d", g_Settings->LoadStringVal(Rdb_GoodName).c_str(), Slot).c_str());

View File

@ -46,6 +46,7 @@ CAdvancedOptionsPage::CAdvancedOptionsPage(HWND hParent, const RECT & rcDispay)
ComboBox->AddItemW(wGS(STR_FR_DLS).c_str(), FR_DLs); ComboBox->AddItemW(wGS(STR_FR_DLS).c_str(), FR_DLs);
ComboBox->AddItemW(wGS(STR_FR_PERCENT).c_str(), FR_PERCENT); ComboBox->AddItemW(wGS(STR_FR_PERCENT).c_str(), FR_PERCENT);
ComboBox->AddItemW(wGS(STR_FR_DLS_VIS).c_str(), FR_VIs_DLs); ComboBox->AddItemW(wGS(STR_FR_DLS_VIS).c_str(), FR_VIs_DLs);
ComboBox->AddItemW(wGS(STR_FR_NONE).c_str(), FR_None);
} }
m_IplDir.Attach(GetDlgItem(IDC_IPL_DIR)); m_IplDir.Attach(GetDlgItem(IDC_IPL_DIR));

View File

@ -27,7 +27,6 @@ class CAdvancedOptionsPage :
COMMAND_ID_HANDLER_EX(IDC_SELECT_IPL_DIR, SelectIplDir) COMMAND_ID_HANDLER_EX(IDC_SELECT_IPL_DIR, SelectIplDir)
COMMAND_HANDLER_EX(IDC_IPL_DIR, EN_UPDATE, IplDirChanged) COMMAND_HANDLER_EX(IDC_IPL_DIR, EN_UPDATE, IplDirChanged)
COMMAND_HANDLER_EX(IDC_FRAME_DISPLAY_TYPE,LBN_SELCHANGE,ComboBoxChanged) COMMAND_HANDLER_EX(IDC_FRAME_DISPLAY_TYPE,LBN_SELCHANGE,ComboBoxChanged)
END_MSG_MAP() END_MSG_MAP()
enum { IDD = IDD_Settings_Advanced }; enum { IDD = IDD_Settings_Advanced };

View File

@ -0,0 +1,98 @@
/****************************************************************************
* *
* Project64 - A Nintendo 64 emulator. *
* http://www.pj64-emu.com/ *
* Copyright (C) 2012 Project64. All rights reserved. *
* *
* License: *
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
* *
****************************************************************************/
#include "stdafx.h"
#include "SettingsPage.h"
CDefaultsOptionsPage::CDefaultsOptionsPage(HWND hParent, const RECT & rcDispay)
{
if (!Create(hParent, rcDispay))
{
return;
}
UpdatePageSettings();
SetDlgItemTextW(m_hWnd, IDC_MEMORY_SIZE_TEXT, wGS(ROM_MEM_SIZE).c_str());
SetDlgItemTextW(m_hWnd, IDC_HLE_GFX, wGS(PLUG_HLE_GFX).c_str());
SetDlgItemTextW(m_hWnd, IDC_USE_TLB, wGS(ROM_USE_TLB).c_str());
SetDlgItemTextW(m_hWnd, IDC_VIREFESH_TEXT, wGS(ROM_VIREFRESH).c_str());
SetDlgItemTextW(m_hWnd, IDC_COUNTPERBYTE_TEXT, wGS(ROM_COUNTPERBYTE).c_str());
SetDlgItemTextW(m_hWnd, IDC_COUNTFACT_TEXT, wGS(ROM_COUNTER_FACTOR).c_str());
SetDlgItemTextW(m_hWnd, IDC_ROM_32BIT, wGS(ROM_32BIT).c_str());
SetDlgItemTextW(m_hWnd, IDC_ROM_FIXEDAUDIO, wGS(ROM_FIXED_AUDIO).c_str());
SetDlgItemTextW(m_hWnd, IDC_SYNC_AUDIO, wGS(ROM_SYNC_AUDIO).c_str());
CModifiedComboBox * ComboBox;
ComboBox = AddModComboBox(GetDlgItem(IDC_RDRAM_SIZE), Default_RDRamSize);
if (ComboBox)
{
ComboBox->SetTextField(GetDlgItem(IDC_MEMORY_SIZE_TEXT));
ComboBox->AddItemW(wGS(RDRAM_4MB).c_str(), 0x400000);
ComboBox->AddItemW(wGS(RDRAM_8MB).c_str(), 0x800000);
}
ComboBox = AddModComboBox(GetDlgItem(IDC_COUNTFACT), Default_CounterFactor);
if (ComboBox)
{
ComboBox->SetTextField(GetDlgItem(IDC_COUNTFACT_TEXT));
ComboBox->AddItemW(wGS(NUMBER_1).c_str(), 1);
ComboBox->AddItemW(wGS(NUMBER_2).c_str(), 2);
ComboBox->AddItemW(wGS(NUMBER_3).c_str(), 3);
ComboBox->AddItemW(wGS(NUMBER_4).c_str(), 4);
ComboBox->AddItemW(wGS(NUMBER_5).c_str(), 5);
ComboBox->AddItemW(wGS(NUMBER_6).c_str(), 6);
}
CModifiedEditBox * TxtBox = AddModTextBox(GetDlgItem(IDC_VIREFRESH), Default_ViRefreshRate, false);
TxtBox->SetTextField(GetDlgItem(IDC_VIREFESH_TEXT));
TxtBox = AddModTextBox(GetDlgItem(IDC_COUNTPERBYTE), Default_AiCountPerBytes, false);
TxtBox->SetTextField(GetDlgItem(IDC_COUNTPERBYTE_TEXT));
AddModCheckBox(GetDlgItem(IDC_HLE_GFX), Default_UseHleGfx);
AddModCheckBox(GetDlgItem(IDC_USE_TLB), Default_UseTlb);
AddModCheckBox(GetDlgItem(IDC_ROM_32BIT), Default_32Bit);
AddModCheckBox(GetDlgItem(IDC_SYNC_AUDIO), Default_SyncViaAudio);
AddModCheckBox(GetDlgItem(IDC_ROM_FIXEDAUDIO), Default_FixedAudio);
UpdatePageSettings();
}
void CDefaultsOptionsPage::HidePage()
{
ShowWindow(SW_HIDE);
}
void CDefaultsOptionsPage::ShowPage()
{
ShowWindow(SW_SHOW);
}
void CDefaultsOptionsPage::ApplySettings(bool UpdateScreen)
{
CSettingsPageImpl<CDefaultsOptionsPage>::ApplySettings(UpdateScreen);
}
bool CDefaultsOptionsPage::EnableReset(void)
{
if (CSettingsPageImpl<CDefaultsOptionsPage>::EnableReset()) { return true; }
return false;
}
void CDefaultsOptionsPage::ResetPage()
{
CSettingsPageImpl<CDefaultsOptionsPage>::ResetPage();
}
void CDefaultsOptionsPage::UpdatePageSettings(void)
{
m_InUpdateSettings = true;
CSettingsPageImpl<CDefaultsOptionsPage>::UpdatePageSettings();
m_InUpdateSettings = false;
}

View File

@ -0,0 +1,46 @@
/****************************************************************************
* *
* Project64 - A Nintendo 64 emulator. *
* http://www.pj64-emu.com/ *
* Copyright (C) 2012 Project64. All rights reserved. *
* *
* License: *
* GNU/GPLv2 http://www.gnu.org/licenses/gpl-2.0.html *
* *
****************************************************************************/
#pragma once
class CDefaultsOptionsPage :
public CSettingsPageImpl<CDefaultsOptionsPage>,
public CSettingsPage
{
BEGIN_MSG_MAP_EX(CDefaultsOptionsPage)
COMMAND_ID_HANDLER_EX(IDC_HLE_GFX, CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_USE_TLB, CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_ROM_32BIT, CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_SYNC_AUDIO, CheckBoxChanged)
COMMAND_ID_HANDLER_EX(IDC_ROM_FIXEDAUDIO, CheckBoxChanged)
COMMAND_HANDLER_EX(IDC_RDRAM_SIZE, LBN_SELCHANGE, ComboBoxChanged)
COMMAND_HANDLER_EX(IDC_COUNTFACT, LBN_SELCHANGE, ComboBoxChanged)
COMMAND_HANDLER_EX(IDC_VIREFRESH, EN_UPDATE, EditBoxChanged)
COMMAND_HANDLER_EX(IDC_COUNTPERBYTE, EN_UPDATE, EditBoxChanged)
COMMAND_HANDLER_EX(IDC_RDRAM_SIZE, EN_UPDATE, EditBoxChanged)
END_MSG_MAP()
enum { IDD = IDD_Settings_Defaults };
public:
CDefaultsOptionsPage(HWND hParent, const RECT & rcDispay );
LanguageStringID PageTitle ( void ) { return TAB_DEFAULTS; }
void HidePage ( void );
void ShowPage ( void );
void ApplySettings ( bool UpdateScreen );
bool EnableReset ( void );
void ResetPage ( void );
private:
void UpdatePageSettings(void);
bool m_InUpdateSettings;
};

View File

@ -21,7 +21,7 @@ CGameStatusPage::CGameStatusPage(HWND hParent, const RECT & rcDispay)
} }
CIniFile RomIniFile(g_Settings->LoadStringVal(SupportFile_RomDatabase).c_str()); CIniFile RomIniFile(g_Settings->LoadStringVal(SupportFile_RomDatabase).c_str());
strlist Keys; CIniFile::strlist Keys;
RomIniFile.GetKeyList("Rom Status", Keys); RomIniFile.GetKeyList("Rom Status", Keys);
stdstr Status = UISettingsLoadStringVal(Rdb_Status); stdstr Status = UISettingsLoadStringVal(Rdb_Status);
@ -29,7 +29,7 @@ CGameStatusPage::CGameStatusPage(HWND hParent, const RECT & rcDispay)
ComboBox = AddModComboBoxTxt(GetDlgItem(IDC_STATUS_TYPE), Rdb_Status); ComboBox = AddModComboBoxTxt(GetDlgItem(IDC_STATUS_TYPE), Rdb_Status);
if (ComboBox) if (ComboBox)
{ {
for (strlist::iterator item = Keys.begin(); item != Keys.end(); item++) for (CIniFile::strlist::iterator item = Keys.begin(); item != Keys.end(); item++)
{ {
if (strstr(item->c_str(), ".Sel") != NULL) { continue; } if (strstr(item->c_str(), ".Sel") != NULL) { continue; }
if (strstr(item->c_str(), ".Auto") != NULL) { continue; } if (strstr(item->c_str(), ".Auto") != NULL) { continue; }

View File

@ -582,6 +582,7 @@ public:
}; };
#include "SettingsPage-AdvancedOptions.h" #include "SettingsPage-AdvancedOptions.h"
#include "SettingsPage-Defaults.h"
#include "SettingsPage-Directories.h" #include "SettingsPage-Directories.h"
#include "SettingsPage-Game-General.h" #include "SettingsPage-Game-General.h"
#include "SettingsPage-Game-Plugin.h" #include "SettingsPage-Game-Plugin.h"

View File

@ -8,6 +8,7 @@ CSettingConfig::CSettingConfig(bool bJustGameSetting /* = false */) :
m_CurrentPage(NULL), m_CurrentPage(NULL),
m_GeneralOptionsPage(NULL), m_GeneralOptionsPage(NULL),
m_AdvancedPage(NULL), m_AdvancedPage(NULL),
m_DefaultsPage(NULL),
m_GameConfig(bJustGameSetting) m_GameConfig(bJustGameSetting)
{ {
} }
@ -55,7 +56,7 @@ bool CSettingConfig::UpdateAdvanced(bool AdvancedMode, HTREEITEM hItem)
while (hItem) while (hItem)
{ {
CSettingsPage * Page = (CSettingsPage *)m_PagesTreeList.GetItemData(hItem); CSettingsPage * Page = (CSettingsPage *)m_PagesTreeList.GetItemData(hItem);
if (!AdvancedMode && Page == m_AdvancedPage) if (!AdvancedMode && (Page == m_AdvancedPage || Page == m_DefaultsPage))
{ {
m_PagesTreeList.DeleteItem(hItem); m_PagesTreeList.DeleteItem(hItem);
return true; return true;
@ -63,6 +64,7 @@ bool CSettingConfig::UpdateAdvanced(bool AdvancedMode, HTREEITEM hItem)
if (AdvancedMode && Page == m_GeneralOptionsPage) if (AdvancedMode && Page == m_GeneralOptionsPage)
{ {
m_PagesTreeList.InsertItemW(TVIF_TEXT | TVIF_PARAM, wGS(m_AdvancedPage->PageTitle()).c_str(), 0, 0, 0, 0, (ULONG)m_AdvancedPage, hItem, TVI_FIRST); m_PagesTreeList.InsertItemW(TVIF_TEXT | TVIF_PARAM, wGS(m_AdvancedPage->PageTitle()).c_str(), 0, 0, 0, 0, (ULONG)m_AdvancedPage, hItem, TVI_FIRST);
m_PagesTreeList.InsertItemW(TVIF_TEXT | TVIF_PARAM, wGS(m_DefaultsPage->PageTitle()).c_str(), 0, 0, 0, 0, (ULONG)m_DefaultsPage, hItem, TVI_FIRST);
return true; return true;
} }
if (UpdateAdvanced(AdvancedMode, m_PagesTreeList.GetChildItem(hItem))) if (UpdateAdvanced(AdvancedMode, m_PagesTreeList.GetChildItem(hItem)))
@ -127,10 +129,12 @@ LRESULT CSettingConfig::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*
m_GeneralOptionsPage = new CGeneralOptionsPage(this, this->m_hWnd, rcSettingInfo); m_GeneralOptionsPage = new CGeneralOptionsPage(this, this->m_hWnd, rcSettingInfo);
m_AdvancedPage = new CAdvancedOptionsPage(this->m_hWnd, rcSettingInfo); m_AdvancedPage = new CAdvancedOptionsPage(this->m_hWnd, rcSettingInfo);
m_DefaultsPage = new CDefaultsOptionsPage(this->m_hWnd, rcSettingInfo);
SettingsSection = new CConfigSettingSection(wGS(TAB_OPTIONS).c_str()); SettingsSection = new CConfigSettingSection(wGS(TAB_OPTIONS).c_str());
SettingsSection->AddPage(m_GeneralOptionsPage); SettingsSection->AddPage(m_GeneralOptionsPage);
SettingsSection->AddPage(m_AdvancedPage); SettingsSection->AddPage(m_AdvancedPage);
SettingsSection->AddPage(m_DefaultsPage);
SettingsSection->AddPage(new COptionsDirectoriesPage(this->m_hWnd, rcSettingInfo)); SettingsSection->AddPage(new COptionsDirectoriesPage(this->m_hWnd, rcSettingInfo));
m_Sections.push_back(SettingsSection); m_Sections.push_back(SettingsSection);
@ -177,7 +181,7 @@ LRESULT CSettingConfig::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*
for (size_t i = 0; i < Section->GetPageCount(); i++) for (size_t i = 0; i < Section->GetPageCount(); i++)
{ {
CSettingsPage * Page = Section->GetPage(i); CSettingsPage * Page = Section->GetPage(i);
if (HideAdvanced && Page == m_AdvancedPage) if (HideAdvanced && (Page == m_AdvancedPage || Page == m_DefaultsPage))
{ {
continue; continue;
} }

View File

@ -40,6 +40,6 @@ private:
CTreeViewCtrl m_PagesTreeList; CTreeViewCtrl m_PagesTreeList;
SETTING_SECTIONS m_Sections; SETTING_SECTIONS m_Sections;
CSettingsPage * m_CurrentPage, *m_GeneralOptionsPage, *m_AdvancedPage; CSettingsPage * m_CurrentPage, *m_GeneralOptionsPage, *m_AdvancedPage, *m_DefaultsPage;
bool m_GameConfig; bool m_GameConfig;
}; };

View File

@ -1256,6 +1256,26 @@ BEGIN
EDITTEXT IDC_DD48_EDIT,87,226,39,10,ES_UPPERCASE | ES_AUTOHSCROLL,WS_EX_RIGHT EDITTEXT IDC_DD48_EDIT,87,226,39,10,ES_UPPERCASE | ES_AUTOHSCROLL,WS_EX_RIGHT
END END
IDD_Settings_Defaults DIALOGEX 0, 0, 218, 169
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
LTEXT "Memory Size:",IDC_MEMORY_SIZE_TEXT,6,8,91,10
COMBOBOX IDC_RDRAM_SIZE,102,6,109,49,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Use High Level GFX",IDC_HLE_GFX,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,81,91,10
CONTROL "Use TLB",IDC_USE_TLB,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,58,91,10
LTEXT "Vi Refresh Rate:",IDC_VIREFESH_TEXT,6,32,91,10
EDITTEXT IDC_VIREFRESH,102,30,109,12,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "AI Count Per Byte:",IDC_COUNTPERBYTE_TEXT,6,45,91,10
EDITTEXT IDC_COUNTPERBYTE,102,44,109,12,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "Counter Factor:",IDC_COUNTFACT_TEXT,6,19,91,10
COMBOBOX IDC_COUNTFACT,102,18,109,49,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "32 Bit Engine",IDC_ROM_32BIT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,58,91,10
CONTROL "Fixed Audio Timing",IDC_ROM_FIXEDAUDIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,69,91,10
CONTROL "Sync using Audio",IDC_SYNC_AUDIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,102,69,91,10
END
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
@ -1669,6 +1689,14 @@ BEGIN
TOPMARGIN, 7 TOPMARGIN, 7
BOTTOMMARGIN, 219 BOTTOMMARGIN, 219
END END
IDD_Settings_Defaults, DIALOG
BEGIN
LEFTMARGIN, 4
RIGHTMARGIN, 216
TOPMARGIN, 4
BOTTOMMARGIN, 163
END
END END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
@ -1848,6 +1876,11 @@ BEGIN
0, 0, 0, 0 0, 0, 0, 0
END END
IDD_Settings_Defaults AFX_DIALOG_LAYOUT
BEGIN
0
END
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //

View File

@ -72,6 +72,7 @@
#define IDD_Debugger_RegRDRAM 198 #define IDD_Debugger_RegRDRAM 198
#define IDD_Debugger_RegVI 199 #define IDD_Debugger_RegVI 199
#define IDD_Debugger_RegDD 200 #define IDD_Debugger_RegDD 200
#define IDD_Settings_Defaults 201
#define IDC_MENU_ITEM_TEXT 1000 #define IDC_MENU_ITEM_TEXT 1000
#define IDC_CLOSE_BUTTON 1001 #define IDC_CLOSE_BUTTON 1001
#define IDC_LIST2 1003 #define IDC_LIST2 1003
@ -98,7 +99,6 @@
#define IDC_INFO_CIC 1011 #define IDC_INFO_CIC 1011
#define IDC_CTL 1011 #define IDC_CTL 1011
#define IDC_CACHE 1011 #define IDC_CACHE 1011
#define IDC_ROM_FIXEDAUDIO 1011
#define IDC_DEBUGGER 1011 #define IDC_DEBUGGER 1011
#define IDC_USE_ALT_PC 1011 #define IDC_USE_ALT_PC 1011
#define IDC_HLE_GFX 1011 #define IDC_HLE_GFX 1011
@ -602,6 +602,7 @@
#define IDC_DD40_EDIT 1442 #define IDC_DD40_EDIT 1442
#define IDC_DD44_EDIT 1443 #define IDC_DD44_EDIT 1443
#define IDC_DD48_EDIT 1444 #define IDC_DD48_EDIT 1444
#define IDC_ROM_FIXEDAUDIO 1445
#define ID_POPUP_SHOWINMEMORYVIEWER 40005 #define ID_POPUP_SHOWINMEMORYVIEWER 40005
#define ID_POPUPMENU_PLAYGAMEWITHDISK 40008 #define ID_POPUPMENU_PLAYGAMEWITHDISK 40008
#define ID_POPUPMENU_ADDSYMBOL 40013 #define ID_POPUPMENU_ADDSYMBOL 40013
@ -637,9 +638,9 @@
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 194 #define _APS_NEXT_RESOURCE_VALUE 195
#define _APS_NEXT_COMMAND_VALUE 40043 #define _APS_NEXT_COMMAND_VALUE 40043
#define _APS_NEXT_CONTROL_VALUE 1445 #define _APS_NEXT_CONTROL_VALUE 1446
#define _APS_NEXT_SYMED_VALUE 102 #define _APS_NEXT_SYMED_VALUE 102
#endif #endif
#endif #endif

View File

@ -9,3 +9,5 @@ Windows 2.4
- Fix bug in key assignment (#1309) - Fix bug in key assignment (#1309)
- Add Shygoo's debugger code - Add Shygoo's debugger code
- New audio plugin - New audio plugin
- large address aware
- Ability to change defaults