diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index 5d90c9bd4d..be8dcb7a96 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -1,6 +1,7 @@ cmake_minimum_required(VERSION 2.8.12) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake_modules") +set(RES_FILES "") include(cotire) project(rpcs3) @@ -15,9 +16,11 @@ add_custom_command(OUTPUT something_that_never_exists # Check for a sufficient compiler and set build options include(ConfigureCompiler) + if(WIN32) add_definitions(-DUNICODE) add_definitions(-D_WIN32_WINNT=0x0601) + set(RES_FILES "rpcs3_.rc") endif() if(NOT MSVC) @@ -193,7 +196,7 @@ if(NOT WIN32) endforeach(TMP_PATH) endif() -add_executable(rpcs3 ${RPCS3_SRC}) +add_executable(rpcs3 ${RPCS3_SRC} ${RES_FILES}) if(MSVC) diff --git a/rpcs3/Emu/Cell/PPUAnalyser.cpp b/rpcs3/Emu/Cell/PPUAnalyser.cpp index ffcbae87cc..41698db8ab 100644 --- a/rpcs3/Emu/Cell/PPUAnalyser.cpp +++ b/rpcs3/Emu/Cell/PPUAnalyser.cpp @@ -107,7 +107,7 @@ void ppu_validate(const std::string& fname, const std::vector& fun } } -static u32 ppu_test(const vm::cptr ptr, vm::cptr fend, std::initializer_list pat) +static u32 ppu_test(const vm::cptr ptr, vm::cptr fend, ppu_pattern_array pat) { vm::cptr cur = ptr; @@ -139,7 +139,7 @@ static u32 ppu_test(const vm::cptr ptr, vm::cptr fend, std::initializ return cur.addr() - ptr.addr(); } -static u32 ppu_test(vm::cptr ptr, vm::cptr fend, std::initializer_list> pats) +static u32 ppu_test(vm::cptr ptr, vm::cptr fend, ppu_pattern_matrix pats) { for (auto pat : pats) { @@ -156,7 +156,7 @@ namespace ppu_patterns { using namespace ppu_instructions; - const std::initializer_list abort1 + const ppu_pattern abort1[] { { STDU(r1, r1, -0xc0) }, { MFLR(r0) }, @@ -240,7 +240,7 @@ namespace ppu_patterns { B(0, false, true), 0x3fffffc }, // .exit }; - const std::initializer_list abort2 + const ppu_pattern abort2[] { { STDU(r1, r1, -0xc0) }, { MFLR(r0) }, @@ -319,7 +319,7 @@ namespace ppu_patterns { B(0, false, true), 0x3fffffc }, // .exit }; - const std::initializer_list> abort + const ppu_pattern_array abort[] { abort1, abort2, @@ -385,7 +385,7 @@ std::vector ppu_analyse(const std::vector>& se if (ptr[0] >= start && ptr[0] < end && ptr[0] % 4 == 0 && ptr[1] == toc) { // New function - LOG_NOTICE(PPU, "OPD*: [0x%x] 0x%x (TOC=0x%x)", ptr, ptr[0], ptr[1]); + LOG_TRACE(PPU, "OPD*: [0x%x] 0x%x (TOC=0x%x)", ptr, ptr[0], ptr[1]); add_func(*ptr, toc, ptr.addr()); ptr++; } @@ -459,7 +459,7 @@ std::vector ppu_analyse(const std::vector>& se // Add function and TOC const u32 addr = ptr[0]; const u32 toc = ptr[1]; - LOG_NOTICE(PPU, "OPD: [0x%x] 0x%x (TOC=0x%x)", ptr, addr, toc); + LOG_TRACE(PPU, "OPD: [0x%x] 0x%x (TOC=0x%x)", ptr, addr, toc); TOCs.emplace(toc); auto& func = add_func(addr, toc, ptr.addr()); @@ -529,7 +529,7 @@ std::vector ppu_analyse(const std::vector>& se if (ptr[1] == 0) { // CIE - LOG_NOTICE(PPU, ".eh_frame: [0x%x] CIE 0x%x", ptr, ptr[0]); + LOG_TRACE(PPU, ".eh_frame: [0x%x] CIE 0x%x", ptr, ptr[0]); } else { @@ -566,7 +566,7 @@ std::vector ppu_analyse(const std::vector>& se addr += ptr.addr() + 8; } - LOG_NOTICE(PPU, ".eh_frame: [0x%x] FDE 0x%x (cie=*0x%x, addr=0x%x, size=0x%x)", ptr, ptr[0], cie, addr, size); + LOG_TRACE(PPU, ".eh_frame: [0x%x] FDE 0x%x (cie=*0x%x, addr=0x%x, size=0x%x)", ptr, ptr[0], cie, addr, size); // TODO: invalid offsets, zero offsets (removed functions?) if (addr % 4 || size % 4 || size > (end - start) || addr < start || addr + size > end) diff --git a/rpcs3/Emu/Cell/PPUAnalyser.h b/rpcs3/Emu/Cell/PPUAnalyser.h index 98e71e5a7e..2a3516c33b 100644 --- a/rpcs3/Emu/Cell/PPUAnalyser.h +++ b/rpcs3/Emu/Cell/PPUAnalyser.h @@ -56,6 +56,52 @@ struct ppu_pattern } }; +struct ppu_pattern_array +{ + const ppu_pattern* ptr; + std::size_t count; + + template + constexpr ppu_pattern_array(const ppu_pattern(&array)[N]) + : ptr(array) + , count(N) + { + } + + constexpr const ppu_pattern* begin() const + { + return ptr; + } + + constexpr const ppu_pattern* end() const + { + return ptr + count; + } +}; + +struct ppu_pattern_matrix +{ + const ppu_pattern_array* ptr; + std::size_t count; + + template + constexpr ppu_pattern_matrix(const ppu_pattern_array(&array)[N]) + : ptr(array) + , count(N) + { + } + + constexpr const ppu_pattern_array* begin() const + { + return ptr; + } + + constexpr const ppu_pattern_array* end() const + { + return ptr + count; + } +}; + extern void ppu_validate(const std::string& fname, const std::vector& funcs, u32 reloc); extern std::vector ppu_analyse(const std::vector>& segs, const std::vector>& secs, u32 lib_toc); diff --git a/rpcs3/Gui/OskDialog.cpp b/rpcs3/Gui/OskDialog.cpp index f3149ed436..987c4459ba 100644 --- a/rpcs3/Gui/OskDialog.cpp +++ b/rpcs3/Gui/OskDialog.cpp @@ -40,7 +40,7 @@ void MsgDialogFrame::CreateOsk(const std::string& msg, char16_t* osk_text) m_dialog->Bind(wxEVT_BUTTON, [&](wxCommandEvent& event) { wxUString wx_osk_string = osk_text_input->GetValue(); - std::memcpy(osk_text_return, wx_osk_string.utf16_str(), sizeof(wx_osk_string)); + std::memcpy(osk_text_return, wx_osk_string.utf16_str(), wx_osk_string.size() * 2); on_close(CELL_MSGDIALOG_BUTTON_OK); });