From f024901b480c3eb0005fc19531f78dd5e5674e1d Mon Sep 17 00:00:00 2001 From: no Date: Tue, 1 Dec 2015 19:38:12 -0500 Subject: [PATCH 1/4] ported MinGW build script for project64::Common to Unix shell --- Source/Script/Unix/common.sh | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100755 Source/Script/Unix/common.sh diff --git a/Source/Script/Unix/common.sh b/Source/Script/Unix/common.sh new file mode 100755 index 000000000..2f869e9ca --- /dev/null +++ b/Source/Script/Unix/common.sh @@ -0,0 +1,57 @@ +src=./../../Common +obj=./Common + +mkdir -p $obj + +FLAGS_x86="\ + -S \ + -masm=intel \ + -march=native \ + -Os" + +C_FLAGS=$FLAGS_x86 + +CC=g++ +AS=as + +echo Compiling common library sources for Project64... +$CC -o $obj/CriticalSection.asm $src/CriticalSection.cpp $C_FLAGS +$CC -o $obj/FileClass.asm "$src/File Class.cpp" $C_FLAGS +$CC -o $obj/IniFileClass.asm "$src/Ini File Class.cpp" $C_FLAGS +$CC -o $obj/LogClass.asm "$src/Log Class.cpp" $C_FLAGS +$CC -o $obj/md5.asm $src/md5.cpp $C_FLAGS +$CC -o $obj/MemTest.asm $src/MemTest.cpp $C_FLAGS +$CC -o $obj/path.asm $src/path.cpp $C_FLAGS +$CC -o $obj/stdstring.asm "$src/std string.cpp" $C_FLAGS +$CC -o $obj/SyncEvent.asm $src/SyncEvent.cpp $C_FLAGS +$CC -o $obj/Trace.asm $src/Trace.cpp $C_FLAGS +$CC -o $obj/Util.asm $src/Util.cpp $C_FLAGS + +echo Assembling common library sources... +$AS -o $obj/CriticalSection.o $obj/CriticalSection.asm +$AS -o $obj/FileClass.o $obj/FileClass.asm +$AS -o $obj/IniFileClass.o $obj/IniFileClass.asm +$AS -o $obj/LogClass.o $obj/LogClass.asm +$AS -o $obj/md5.o $obj/md5.asm +$AS -o $obj/MemTest.o $obj/MemTest.asm +$AS -o $obj/path.o $obj/path.asm +$AS -o $obj/stdstring.o $obj/stdstring.asm +$AS -o $obj/SyncEvent.o $obj/SyncEvent.asm +$AS -o $obj/Trace.o $obj/Trace.asm +$AS -o $obj/Util.o $obj/Util.asm + +set OBJ_LIST="\ + $obj/Util.o \ + $obj/Trace.o \ + $obj/SyncEvent.o \ + $obj/stdstring.o \ + $obj/path.o \ + $obj/MemTest.o \ + $obj/md5.o \ + $obj/LogClass.o \ + $obj/IniFileClass.o \ + $obj/FileClass.o \ + $obj/CriticalSection.o" + +echo Linking static library objects for Common... +ar rcs $obj/libcommon.a $OBJ_LIST From b2016a6c4e2558e299646eb9184ea5604459de43 Mon Sep 17 00:00:00 2001 From: watilin Date: Thu, 3 Dec 2015 00:17:33 +0100 Subject: [PATCH 2/4] Lowercase-ize some letters --- Lang/French.pj.Lang | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Lang/French.pj.Lang b/Lang/French.pj.Lang index d81e66561..7b247728d 100644 --- a/Lang/French.pj.Lang +++ b/Lang/French.pj.Lang @@ -88,7 +88,7 @@ #198# "Emplacement 8" #199# "Emplacement 9" #200# "Emplacement 10" -#201# "Sélection de l'Emplacement de Sauvegarde (%ws)" +#201# "Sélection de l’emplacement de sauvegarde (%ws)" //Pop up Menu #210# "Lancer le jeu" @@ -342,8 +342,8 @@ #688# "Aucun jeu lancé" #689# "Un jeu est lancé" #690# "Un jeu est lancé (Fenêtré)" -#691# "Un jeu est lancé (Plein Ecran)" -#692# "Détecter la Touche" +#691# "Un jeu est lancé (Plein écran)" +#692# "Détecter la touche" // Frame Rate Option #700# "Interruptions verticales par seconde" From c8b1f161d2bf6288fff93ce37101351dbb309f04 Mon Sep 17 00:00:00 2001 From: Samuel Yuan Date: Thu, 3 Dec 2015 14:54:04 -0500 Subject: [PATCH 3/4] Fix "Unable to load state" --- Source/Project64/N64 System/N64 Class.cpp | 2 +- Source/Project64/User Interface/Main Menu Class.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Project64/N64 System/N64 Class.cpp b/Source/Project64/N64 System/N64 Class.cpp index 161446283..eb34fd1a0 100644 --- a/Source/Project64/N64 System/N64 Class.cpp +++ b/Source/Project64/N64 System/N64 Class.cpp @@ -1546,7 +1546,7 @@ bool CN64System::LoadState(const char * FileName) OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_RANDOM_ACCESS, NULL); if (hSaveFile == INVALID_HANDLE_VALUE) { - g_Notify->DisplayMessage(5, stdstr_f("%s %s", GS(MSG_UNABLED_LOAD_STATE), FileNameStr).ToUTF16().c_str()); + g_Notify->DisplayMessage(5, stdwstr_f(L"%ws %ws", GS(MSG_UNABLED_LOAD_STATE), FileNameStr.ToUTF16().c_str()).c_str()); return false; } diff --git a/Source/Project64/User Interface/Main Menu Class.cpp b/Source/Project64/User Interface/Main Menu Class.cpp index d9e1d3c7b..536c46682 100644 --- a/Source/Project64/User Interface/Main Menu Class.cpp +++ b/Source/Project64/User Interface/Main Menu Class.cpp @@ -523,7 +523,7 @@ bool CMainMenu::ProcessMessage(HWND hWnd, DWORD /*FromAccelerator*/, DWORD MenuI case ID_DEBUGGER_INTERRUPT_PI: g_BaseSystem->ExternalEvent(SysEvent_Interrupt_PI); break; case ID_DEBUGGER_INTERRUPT_DP: g_BaseSystem->ExternalEvent(SysEvent_Interrupt_DP); break; case ID_CURRENT_SAVE_DEFAULT: - g_Notify->DisplayMessage(3, stdwstr_f(GS(MENU_SLOT_SAVE), GetSaveSlotString(MenuID - ID_CURRENT_SAVE_DEFAULT).c_str()).c_str()); + g_Notify->DisplayMessage(3, stdwstr_f(GS(MENU_SLOT_SAVE), GetSaveSlotString(MenuID - ID_CURRENT_SAVE_DEFAULT).c_str()).c_str()); g_Settings->SaveDword(Game_CurrentSaveState, (DWORD)(MenuID - ID_CURRENT_SAVE_DEFAULT)); break; case ID_CURRENT_SAVE_1: @@ -536,7 +536,7 @@ bool CMainMenu::ProcessMessage(HWND hWnd, DWORD /*FromAccelerator*/, DWORD MenuI case ID_CURRENT_SAVE_8: case ID_CURRENT_SAVE_9: case ID_CURRENT_SAVE_10: - g_Notify->DisplayMessage(3, stdwstr_f(GS(MENU_SLOT_SAVE), GetSaveSlotString((MenuID - ID_CURRENT_SAVE_1) + 1).c_str()).c_str()); + g_Notify->DisplayMessage(3, stdwstr_f(GS(MENU_SLOT_SAVE), GetSaveSlotString((MenuID - ID_CURRENT_SAVE_1) + 1).c_str()).c_str()); g_Settings->SaveDword(Game_CurrentSaveState, (DWORD)((MenuID - ID_CURRENT_SAVE_1) + 1)); break; case ID_HELP_SUPPORTFORUM: ShellExecute(NULL, "open", "http://forum.pj64-emu.com/", NULL, NULL, SW_SHOWMAXIMIZED); break; From 2c3c13862b271b74a3d20165632b2eabb5b55e6e Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 3 Dec 2015 20:10:26 -0500 Subject: [PATCH 4/4] re-ordered CPU interpreter main loop if/else branch predictor --- .../Interpreter/Interpreter CPU.cpp | 101 +++++++++--------- 1 file changed, 50 insertions(+), 51 deletions(-) diff --git a/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp b/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp index 0bcc3b9d5..524b76b94 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp +++ b/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp @@ -276,67 +276,66 @@ void CInterpreterCPU::ExecuteCPU() { while (!Done) { - if (g_MMU->LW_VAddr(PROGRAM_COUNTER, Opcode.Hex)) + if (!g_MMU->LW_VAddr(PROGRAM_COUNTER, Opcode.Hex)) { - /*if (PROGRAM_COUNTER > 0x80000300 && PROGRAM_COUNTER< 0x80380000) - { - WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER)); - //WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s t9: %08X v1: %08X",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER),_GPR[0x19].UW[0],_GPR[0x03].UW[0]); - //WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %d %d",*_PROGRAM_COUNTER,*g_NextTimer,g_SystemTimer->CurrentType()); - }*/ - m_R4300i_Opcode[Opcode.op](); - NextTimer -= CountPerOp; + g_Reg->DoTLBReadMiss(R4300iOp::m_NextInstruction == JUMP, PROGRAM_COUNTER); + R4300iOp::m_NextInstruction = NORMAL; + continue; + } - switch (R4300iOp::m_NextInstruction) - { - case NORMAL: - PROGRAM_COUNTER += 4; - break; - case DELAY_SLOT: - R4300iOp::m_NextInstruction = JUMP; - PROGRAM_COUNTER += 4; - break; - case PERMLOOP_DO_DELAY: - R4300iOp::m_NextInstruction = PERMLOOP_DELAY_DONE; - PROGRAM_COUNTER += 4; - break; - case JUMP: - { - bool CheckTimer = (JumpToLocation < PROGRAM_COUNTER || TestTimer); - PROGRAM_COUNTER = JumpToLocation; - R4300iOp::m_NextInstruction = NORMAL; - if (CheckTimer) - { - TestTimer = false; - if (NextTimer < 0) - { - g_SystemTimer->TimerDone(); - } - if (bDoSomething) - { - g_SystemEvents->ExecuteEvents(); - } - } - } + /* if (PROGRAM_COUNTER > 0x80000300 && PROGRAM_COUNTER < 0x80380000) + { + WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER)); + // WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %s t9: %08X v1: %08X",*_PROGRAM_COUNTER,R4300iOpcodeName(Opcode.Hex,*_PROGRAM_COUNTER),_GPR[0x19].UW[0],_GPR[0x03].UW[0]); + // WriteTraceF((TraceType)(TraceError | TraceNoHeader),"%X: %d %d",*_PROGRAM_COUNTER,*g_NextTimer,g_SystemTimer->CurrentType()); + } */ + m_R4300i_Opcode[Opcode.op](); + NextTimer -= CountPerOp; + + switch (R4300iOp::m_NextInstruction) + { + case NORMAL: + PROGRAM_COUNTER += 4; break; - case PERMLOOP_DELAY_DONE: - PROGRAM_COUNTER = JumpToLocation; - R4300iOp::m_NextInstruction = NORMAL; - CInterpreterCPU::InPermLoop(); - g_SystemTimer->TimerDone(); + case DELAY_SLOT: + R4300iOp::m_NextInstruction = JUMP; + PROGRAM_COUNTER += 4; + break; + case PERMLOOP_DO_DELAY: + R4300iOp::m_NextInstruction = PERMLOOP_DELAY_DONE; + PROGRAM_COUNTER += 4; + break; + case JUMP: + { + bool CheckTimer = (JumpToLocation < PROGRAM_COUNTER || TestTimer); + PROGRAM_COUNTER = JumpToLocation; + R4300iOp::m_NextInstruction = NORMAL; + if (CheckTimer) + { + TestTimer = false; + if (NextTimer < 0) + { + g_SystemTimer->TimerDone(); + } if (bDoSomething) { g_SystemEvents->ExecuteEvents(); } - break; - default: - g_Notify->BreakPoint(__FILEW__, __LINE__); } } - else - { - g_Reg->DoTLBReadMiss(R4300iOp::m_NextInstruction == JUMP, PROGRAM_COUNTER); + break; + case PERMLOOP_DELAY_DONE: + PROGRAM_COUNTER = JumpToLocation; R4300iOp::m_NextInstruction = NORMAL; + CInterpreterCPU::InPermLoop(); + g_SystemTimer->TimerDone(); + if (bDoSomething) + { + g_SystemEvents->ExecuteEvents(); + } + break; + default: + g_Notify->BreakPoint(__FILEW__, __LINE__); } } }