mirror of
https://github.com/pj64team/Project64-Legacy.git
synced 2026-05-03 11:53:39 +00:00
Add Clear Memory option to Advanced Settings
This will zero out the N64 Memory at Start Emulation and prevent data from lingering from previous runs Cpu.c also contains experimental code for better managing OpenGL plugins However, it still crashes some of the time I was holding off on a commit until that code was fixed but it was more important to keep track of the new advanced setting
This commit is contained in:
31
Cpu.c
31
Cpu.c
@ -161,14 +161,19 @@ void CloseCpu (void) {
|
||||
CPU_Action.Stepping = FALSE;
|
||||
CPU_Action.DoSomething = TRUE;
|
||||
PulseEvent( CPU_Action.hStepping );
|
||||
Sleep(100);
|
||||
GetExitCodeThread(hCPU,&ExitCode);
|
||||
Sleep(10);
|
||||
GetExitCodeThread(hCPU, &ExitCode);
|
||||
if (ExitCode != STILL_ACTIVE) {
|
||||
hCPU = NULL;
|
||||
count = 100;
|
||||
}
|
||||
}
|
||||
if (hCPU != NULL) { TerminateThread(hCPU,0); hCPU = NULL; }
|
||||
if (hCPU != NULL) {
|
||||
DisplayError("Force closing emulation thread");
|
||||
TerminateThread(hCPU, 0);
|
||||
hCPU = NULL;
|
||||
SetupPlugins(hMainWindow);
|
||||
}
|
||||
|
||||
CPURunning = FALSE;
|
||||
VirtualProtect(N64MEM,RdramSize,PAGE_READWRITE,&OldProtect);
|
||||
@ -178,10 +183,11 @@ void CloseCpu (void) {
|
||||
CloseEeprom();
|
||||
CloseMempak();
|
||||
CloseSram();
|
||||
FreeSyncMemory();
|
||||
if (GfxRomClosed != NULL) { GfxRomClosed(); }
|
||||
if (AiRomClosed != NULL) { AiRomClosed(); }
|
||||
if (ContRomClosed != NULL) { ContRomClosed(); }
|
||||
FreeSyncMemory();
|
||||
/*
|
||||
if (GfxRomClosed != NULL) { GfxRomClosed(); }
|
||||
if (ContRomClosed != NULL) { ContRomClosed(); }*/
|
||||
if (AiRomClosed != NULL) { AiRomClosed(); }
|
||||
if (RSPRomClosed) { RSPRomClosed(); }
|
||||
if (Profiling) { GenerateTimerResults(); }
|
||||
CloseHandle(CPU_Action.hStepping);
|
||||
@ -447,6 +453,10 @@ void ProcessMessages (void) {
|
||||
|
||||
void DoSomething ( void ) {
|
||||
if (CPU_Action.CloseCPU) {
|
||||
if (GfxRomClosed != NULL)
|
||||
GfxRomClosed();
|
||||
if (ContRomClosed != NULL)
|
||||
ContRomClosed();
|
||||
CoUninitialize();
|
||||
ExitThread(0);
|
||||
}
|
||||
@ -1179,12 +1189,17 @@ void StartEmulation ( void ) {
|
||||
//memcpy(RomHeader,ROM,sizeof(RomHeader));
|
||||
CPU_Action.hStepping = CreateEvent( NULL, FALSE, FALSE, NULL);
|
||||
WrittenToRom = FALSE;
|
||||
|
||||
// Previous versions of PJ64 did not clear memory upon start of emulation
|
||||
// This resulted in junk being left in memory and potentially affecting future games being loaded or checked
|
||||
if (Settings_ReadBool(APPS_NAME, STR_SETTINGS, STR_CLEAR_MEMORY, TRUE))
|
||||
memset(N64MEM, 0, RdramSize);
|
||||
|
||||
InitilizeTLB();
|
||||
InitalizeR4300iRegisters(LoadPifRom(*(ROM + 0x3D)),*(ROM + 0x3D),GetCicChipID(ROM));
|
||||
|
||||
BuildInterpreter();
|
||||
|
||||
|
||||
RecompPos = RecompCode;
|
||||
|
||||
#if (!defined(EXTERNAL_RELEASE))
|
||||
|
||||
@ -199,6 +199,7 @@ LANG_STR DefaultString[] = {
|
||||
{ ADVANCE_AUTO_START, "Start Emulation when rom is opened?"},
|
||||
{ ADVANCE_OVERWRITE, "Always overwrite default settings with ones from ini?"},
|
||||
{ ADVANCE_COMPRESS, "Automatically compress instant saves"},
|
||||
{ ADVANCE_CLEAR_MEMORY, "Clear Memory at Start of Emulation"},
|
||||
|
||||
//Rom Options
|
||||
{ ROM_CPU_STYLE, "CPU core style:"},
|
||||
|
||||
@ -246,6 +246,7 @@ char * GS ( int StringID );
|
||||
#define ADVANCE_AUTO_START 506
|
||||
#define ADVANCE_OVERWRITE 507
|
||||
#define ADVANCE_COMPRESS 508
|
||||
#define ADVANCE_CLEAR_MEMORY 509
|
||||
|
||||
//Rom Options
|
||||
#define ROM_CPU_STYLE 520
|
||||
|
||||
13
PJ64.rc
13
PJ64.rc
@ -263,10 +263,10 @@ STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP
|
||||
FONT 8, "MS Shell Dlg", 0, 0, 0x1
|
||||
BEGIN
|
||||
CTEXT "Most of these changes will not take effect till a new rom is opened or current rom is reset.",IDC_INFO,4,10,223,22
|
||||
GROUPBOX "",IDC_STATIC,2,119,227,63
|
||||
GROUPBOX "",IDC_STATIC,2,119,227,73
|
||||
CONTROL "Always overwrite default settings with ones from ini?",IDC_USEINI,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,145,218,11
|
||||
CONTROL "Automatically compress instant saves",IDC_ZIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,161,218,11
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,144,218,11
|
||||
CONTROL "Automatically compress instant saves",IDC_ZIP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,159,218,11
|
||||
GROUPBOX "Core Defaults",IDC_CORE_DEFAULTS,4,37,223,78
|
||||
LTEXT "CPU core style:",IDC_TEXT2,9,49,108,12
|
||||
COMBOBOX IDC_CPU_TYPE,118,48,105,49,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
@ -278,6 +278,8 @@ BEGIN
|
||||
COMBOBOX IDC_ABL,118,96,105,49,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
|
||||
CONTROL "Start Emulation when rom is opened?",IDC_START_ON_ROM_OPEN,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,129,218,11
|
||||
CONTROL "Clear Memory at Start of Emulation",IDC_CLEAR_MEMORY,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,6,174,218,11
|
||||
END
|
||||
|
||||
IDD_MANAGECHEATS DIALOGEX 0, 0, 412, 226
|
||||
@ -998,6 +1000,11 @@ BEGIN
|
||||
0
|
||||
END
|
||||
|
||||
IDD_Settings_Options AFX_DIALOG_LAYOUT
|
||||
BEGIN
|
||||
0
|
||||
END
|
||||
|
||||
#endif // English (Australia) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
@ -76,6 +76,7 @@
|
||||
#define STR_ALWAYSONTOP "Always On Top"
|
||||
#define STR_ROMSREMEMBER "Roms To Remember"
|
||||
#define STR_ROMDIRSREMEMBER "Rom Dirs To Remember"
|
||||
#define STR_CLEAR_MEMORY "Clear Memory"
|
||||
|
||||
#define STR_COREDEFAULTS "Core Defaults"
|
||||
#define STR_ABL "Advanced Block Linking"
|
||||
|
||||
@ -209,6 +209,7 @@ void AddDropDownItem(HWND hDlg, WORD CtrlID, int StringID, int ItemData, int* Va
|
||||
|
||||
BOOL CALLBACK DefaultOptionsProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
||||
int indx;
|
||||
BOOL clear_mem;
|
||||
|
||||
switch (uMsg) {
|
||||
case WM_INITDIALOG:
|
||||
@ -222,6 +223,9 @@ BOOL CALLBACK DefaultOptionsProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
||||
SetFlagControl(hDlg, &UseIni, IDC_USEINI, ADVANCE_OVERWRITE);
|
||||
SetFlagControl(hDlg, &AutoZip, IDC_ZIP, ADVANCE_COMPRESS);
|
||||
|
||||
clear_mem = Settings_ReadBool(APPS_NAME, STR_SETTINGS, STR_CLEAR_MEMORY, TRUE);
|
||||
SetFlagControl(hDlg, &clear_mem, IDC_CLEAR_MEMORY, ADVANCE_CLEAR_MEMORY);
|
||||
|
||||
AddDropDownItem(hDlg, IDC_CPU_TYPE, CORE_INTERPTER, CPU_Interpreter, &SystemCPU_Type);
|
||||
AddDropDownItem(hDlg, IDC_CPU_TYPE, CORE_RECOMPILER, CPU_Recompiler, &SystemCPU_Type);
|
||||
if (HaveDebugger) { AddDropDownItem(hDlg, IDC_CPU_TYPE, CORE_SYNC, CPU_SyncCores, &SystemCPU_Type); }
|
||||
@ -253,6 +257,9 @@ BOOL CALLBACK DefaultOptionsProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lPa
|
||||
AutoZip = SendMessage(GetDlgItem(hDlg, IDC_ZIP), BM_GETSTATE, 0, 0) == BST_CHECKED ? TRUE : FALSE;
|
||||
Settings_Write(APPS_NAME, STR_SETTINGS, STR_COMPRESS_STATES, AutoZip ? STR_TRUE : STR_FALSE);
|
||||
|
||||
clear_mem = SendMessage(GetDlgItem(hDlg, IDC_CLEAR_MEMORY), BM_GETSTATE, 0, 0) == BST_CHECKED ? TRUE : FALSE;
|
||||
Settings_Write(APPS_NAME, STR_SETTINGS, STR_CLEAR_MEMORY, clear_mem ? STR_TRUE : STR_FALSE);
|
||||
|
||||
// Core Defaults
|
||||
indx = SendMessage(GetDlgItem(hDlg, IDC_CPU_TYPE), CB_GETCURSEL, 0, 0);
|
||||
SystemCPU_Type = SendMessage(GetDlgItem(hDlg, IDC_CPU_TYPE), CB_GETITEMDATA, indx, 0);
|
||||
|
||||
@ -253,6 +253,8 @@
|
||||
#define IDC_VIS_TEXT 1254
|
||||
#define IDC_CHECK2 1256
|
||||
#define IDC_EDIT1 1257
|
||||
#define IDC_CLEARMEMORY 1258
|
||||
#define IDC_CLEAR_MEMORY 1258
|
||||
#define ID_FILE_OPEN_ROM 40001
|
||||
#define ID_FILE_ROM_INFO 40002
|
||||
#define ID_FILE_EXIT 40005
|
||||
@ -330,9 +332,9 @@
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 180
|
||||
#define _APS_NEXT_RESOURCE_VALUE 181
|
||||
#define _APS_NEXT_COMMAND_VALUE 40169
|
||||
#define _APS_NEXT_CONTROL_VALUE 1258
|
||||
#define _APS_NEXT_CONTROL_VALUE 1259
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user