diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5ab0f16a..466670ee 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,6 +64,11 @@ file(REMOVE target_link_libraries(gadolinium PUBLIC frontend frontend-imgui discord-rpc imgui nfd parallel-rdp backend fmt::fmt nlohmann_json::nlohmann_json core dynarec registers interpreter mmio rsp SDL2::SDL2main SDL2::SDL2) +if(${CMAKE_BUILD_TYPE} MATCHES Debug) + add_compile_options(-fsanitize=address -fsanitize=undefined) + add_link_options(-fsanitize=address -fsanitize=undefined) +endif() + if(WIN32) target_compile_definitions(gadolinium PUBLIC NOMINMAX _CRT_SECURE_NO_WARNINGS) if(MSVC) diff --git a/src/backend/Core.cpp b/src/backend/Core.cpp index 4aa4230c..f03e8b13 100644 --- a/src/backend/Core.cpp +++ b/src/backend/Core.cpp @@ -29,7 +29,7 @@ CartInfo Core::LoadROM(const std::string& rom_) { CartInfo cartInfo = mem.LoadROM(rom); isPAL = cartInfo.isPAL; - DoPIFHLE(mem, CpuGetRegs(), cartInfo); + ExecutePIF(mem, CpuGetRegs(), cartInfo); return cartInfo; } diff --git a/src/backend/MemoryRegions.hpp b/src/backend/MemoryRegions.hpp index 48337a12..208a8f10 100644 --- a/src/backend/MemoryRegions.hpp +++ b/src/backend/MemoryRegions.hpp @@ -20,6 +20,8 @@ #define DMEM_REGION_END (DMEM_REGION_START + DMEM_DSIZE) #define IMEM_REGION_START 0x4001000 #define IMEM_REGION_END (IMEM_REGION_START + IMEM_DSIZE) +#define PIF_RAM_REGION_START 0x1FC007C0 +#define PIF_RAM_REGION_END 0x1FC007FF #define CART_REGION_START 0x10000000 #define CART_REGION_END 0x1FBFFFFF @@ -38,7 +40,7 @@ #define SRAM_REGION 0x08000000 ... 0x0FFFFFFF #define CART_REGION 0x10000000 ... 0x1FBFFFFF #define PIF_ROM_REGION 0x1FC00000 ... 0x1FC007BF -#define PIF_RAM_REGION 0x1FC007C0 ... 0x1FC007FF +#define PIF_RAM_REGION PIF_RAM_REGION_START ... PIF_RAM_REGION_END constexpr size_t operator""_kb(unsigned long long int x) { return 1024ULL * x; diff --git a/src/backend/core/mmio/PIF.cpp b/src/backend/core/mmio/PIF.cpp index 2e4b1819..5378e90e 100644 --- a/src/backend/core/mmio/PIF.cpp +++ b/src/backend/core/mmio/PIF.cpp @@ -73,79 +73,117 @@ void ProcessPIFCommands(u8* pifRam, Controller& controller, Mem& mem) { void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) { u32 cicType = cartInfo.cicType; bool pal = cartInfo.isPAL; - mem.Write32(regs, 0x1FC007E4, cicSeeds[cicType]); + mem.Write32(regs, PIF_RAM_REGION_START + 0x24, cicSeeds[cicType]); switch(cicType) { + case UNKNOWN_CIC_TYPE: + Util::warn("Unknown CIC type!\n"); + break; case CIC_NUS_6101: - mem.Write32(regs, 0x318, RDRAM_SIZE); - regs.gpr[2] = (s64)0xFFFFFFFFDF6445CC; - regs.gpr[3] = (s64)0xFFFFFFFFDF6445CC; - regs.gpr[4] = 0x45CC; - regs.gpr[5] = 0x73EE317A; - regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C; - regs.gpr[7] = (s64)0xFFFFFFFFA4001F08; - regs.gpr[8] = 0xC0; - regs.gpr[10] = 0x40; - regs.gpr[11] = (s64)0xFFFFFFFFA4000040; - regs.gpr[12] = (s64)0xFFFFFFFFC7601FAC; - regs.gpr[13] = (s64)0xFFFFFFFFC7601FAC; - regs.gpr[14] = (s64)0xFFFFFFFFB48E2ED6; - regs.gpr[15] = (s64)0xFFFFFFFFBA1A7D4B; + regs.gpr[0] = 0x0000000000000000; + regs.gpr[1] = 0x0000000000000000; + regs.gpr[2] = 0xFFFFFFFFDF6445CC; + regs.gpr[3] = 0xFFFFFFFFDF6445CC; + regs.gpr[4] = 0x00000000000045CC; + regs.gpr[5] = 0x0000000073EE317A; + regs.gpr[6] = 0xFFFFFFFFA4001F0C; + regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[8] = 0x00000000000000C0; + regs.gpr[9] = 0x0000000000000000; + regs.gpr[10] = 0x0000000000000040; + regs.gpr[11] = 0xFFFFFFFFA4000040; + regs.gpr[12] = 0xFFFFFFFFC7601FAC; + regs.gpr[13] = 0xFFFFFFFFC7601FAC; + regs.gpr[14] = 0xFFFFFFFFB48E2ED6; + regs.gpr[15] = 0xFFFFFFFFBA1A7D4B; + regs.gpr[16] = 0x0000000000000000; + regs.gpr[17] = 0x0000000000000000; + regs.gpr[18] = 0x0000000000000000; + regs.gpr[19] = 0x0000000000000000; regs.gpr[20] = 0x0000000000000001; - regs.gpr[22] = 0x000000000000003F; + regs.gpr[21] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000001; regs.gpr[24] = 0x0000000000000002; - regs.gpr[25] = (s64)0xFFFFFFFF905F4718; - regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0; - regs.gpr[31] = (s64)0xFFFFFFFFA4001550; - regs.lo = (s64)0xFFFFFFFFBA1A7D4B; - regs.hi = (s64)0xFFFFFFFF997EC317; + regs.gpr[25] = 0xFFFFFFFF905F4718; + regs.gpr[26] = 0x0000000000000000; + regs.gpr[27] = 0x0000000000000000; + regs.gpr[28] = 0x0000000000000000; + regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[30] = 0x0000000000000000; + regs.gpr[31] = 0xFFFFFFFFA4001550; + + regs.lo = 0xFFFFFFFFBA1A7D4B; + regs.hi = 0xFFFFFFFF997EC317; break; case CIC_NUS_7102: - mem.Write32(regs, 0x318, RDRAM_SIZE); - regs.gpr[1] = 0x0000000000000001; - regs.gpr[2] = 0x000000001E324416; - regs.gpr[3] = 0x000000001E324416; - regs.gpr[4] = 0x0000000000004416; - regs.gpr[5] = 0x000000000EC5D9AF; - regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C; - regs.gpr[7] = (s64)0xFFFFFFFFA4001F08; - regs.gpr[8] = 0x00000000000000C0; + regs.gpr[0] = 0x0000000000000000; + regs.gpr[1] = 0x0000000000000001; + regs.gpr[2] = 0x000000001E324416; + regs.gpr[3] = 0x000000001E324416; + regs.gpr[4] = 0x0000000000004416; + regs.gpr[5] = 0x000000000EC5D9AF; + regs.gpr[6] = 0xFFFFFFFFA4001F0C; + regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[8] = 0x00000000000000C0; + regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = (s64)0xFFFFFFFFA4000040; + regs.gpr[11] = 0xFFFFFFFFA4000040; regs.gpr[12] = 0x00000000495D3D7B; - regs.gpr[13] = (s64)0xFFFFFFFF8B3DFA1E; + regs.gpr[13] = 0xFFFFFFFF8B3DFA1E; regs.gpr[14] = 0x000000004798E4D4; - regs.gpr[15] = (s64)0xFFFFFFFFF1D30682; + regs.gpr[15] = 0xFFFFFFFFF1D30682; + regs.gpr[16] = 0x0000000000000000; + regs.gpr[17] = 0x0000000000000000; + regs.gpr[18] = 0x0000000000000000; + regs.gpr[19] = 0x0000000000000000; + regs.gpr[20] = 0x0000000000000000; + regs.gpr[21] = 0x0000000000000000; regs.gpr[22] = 0x000000000000003F; regs.gpr[23] = 0x0000000000000007; + regs.gpr[24] = 0x0000000000000000; regs.gpr[25] = 0x0000000013D05CAB; - regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0; - regs.gpr[31] = (s64)0xFFFFFFFFA4001554; + regs.gpr[26] = 0x0000000000000000; + regs.gpr[27] = 0x0000000000000000; + regs.gpr[28] = 0x0000000000000000; + regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[30] = 0x0000000000000000; + regs.gpr[31] = 0xFFFFFFFFA4001554; - regs.lo = (s64)0xFFFFFFFFF1D30682; + regs.lo = 0xFFFFFFFFF1D30682; regs.hi = 0x0000000010054A98; break; case CIC_NUS_6102_7101: - mem.Write32(regs, 0x318, RDRAM_SIZE); - regs.gpr[1] = 0x0000000000000001; - regs.gpr[2] = 0x000000000EBDA536; - regs.gpr[3] = 0x000000000EBDA536; - regs.gpr[4] = 0x000000000000A536; - regs.gpr[5] = (s64)0xFFFFFFFFC0F1D859; - regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C; - regs.gpr[7] = (s64)0xFFFFFFFFA4001F08; - regs.gpr[8] = 0x00000000000000C0; + regs.gpr[0] = 0x0000000000000000; + regs.gpr[1] = 0x0000000000000001; + regs.gpr[2] = 0x000000000EBDA536; + regs.gpr[3] = 0x000000000EBDA536; + regs.gpr[4] = 0x000000000000A536; + regs.gpr[5] = 0xFFFFFFFFC0F1D859; + regs.gpr[6] = 0xFFFFFFFFA4001F0C; + regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[8] = 0x00000000000000C0; + regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = (s64)0xFFFFFFFFA4000040; - regs.gpr[12] = (s64)0xFFFFFFFFED10D0B3; + regs.gpr[11] = 0xFFFFFFFFA4000040; + regs.gpr[12] = 0xFFFFFFFFED10D0B3; regs.gpr[13] = 0x000000001402A4CC; regs.gpr[14] = 0x000000002DE108EA; regs.gpr[15] = 0x000000003103E121; + regs.gpr[16] = 0x0000000000000000; + regs.gpr[17] = 0x0000000000000000; + regs.gpr[18] = 0x0000000000000000; + regs.gpr[19] = 0x0000000000000000; regs.gpr[20] = 0x0000000000000001; - regs.gpr[25] = (s64)0xFFFFFFFF9DEBB54F; - regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0; - regs.gpr[31] = (s64)0xFFFFFFFFA4001550; + regs.gpr[21] = 0x0000000000000000; + regs.gpr[23] = 0x0000000000000000; + regs.gpr[24] = 0x0000000000000000; + regs.gpr[25] = 0xFFFFFFFF9DEBB54F; + regs.gpr[26] = 0x0000000000000000; + regs.gpr[27] = 0x0000000000000000; + regs.gpr[28] = 0x0000000000000000; + regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[30] = 0x0000000000000000; + regs.gpr[31] = 0xFFFFFFFFA4001550; regs.hi = 0x000000003FC18657; regs.lo = 0x000000003103E121; @@ -153,25 +191,24 @@ void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) { if (pal) { regs.gpr[20] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000006; - regs.gpr[31] = (s64)0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554; } break; case CIC_NUS_6103_7103: - mem.Write32(regs, 0x318, RDRAM_SIZE); - regs.gpr[0] = 0x0000000000000000; - regs.gpr[1] = 0x0000000000000001; - regs.gpr[2] = 0x0000000049A5EE96; - regs.gpr[3] = 0x0000000049A5EE96; - regs.gpr[4] = 0x000000000000EE96; - regs.gpr[5] = (s64)0xFFFFFFFFD4646273; - regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C; - regs.gpr[7] = (s64)0xFFFFFFFFA4001F08; - regs.gpr[8] = 0x00000000000000C0; - regs.gpr[9] = 0x0000000000000000; + regs.gpr[0] = 0x0000000000000000; + regs.gpr[1] = 0x0000000000000001; + regs.gpr[2] = 0x0000000049A5EE96; + regs.gpr[3] = 0x0000000049A5EE96; + regs.gpr[4] = 0x000000000000EE96; + regs.gpr[5] = 0xFFFFFFFFD4646273; + regs.gpr[6] = 0xFFFFFFFFA4001F0C; + regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[8] = 0x00000000000000C0; + regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = (s64)0xFFFFFFFFA4000040; - regs.gpr[12] = (s64)0xFFFFFFFFCE9DFBF7; - regs.gpr[13] = (s64)0xFFFFFFFFCE9DFBF7; + regs.gpr[11] = 0xFFFFFFFFA4000040; + regs.gpr[12] = 0xFFFFFFFFCE9DFBF7; + regs.gpr[13] = 0xFFFFFFFFCE9DFBF7; regs.gpr[14] = 0x000000001AF99984; regs.gpr[15] = 0x0000000018B63D28; regs.gpr[16] = 0x0000000000000000; @@ -182,13 +219,13 @@ void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) { regs.gpr[21] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000000; regs.gpr[24] = 0x0000000000000000; - regs.gpr[25] = (s64)0xFFFFFFFF825B21C9; + regs.gpr[25] = 0xFFFFFFFF825B21C9; regs.gpr[26] = 0x0000000000000000; regs.gpr[27] = 0x0000000000000000; regs.gpr[28] = 0x0000000000000000; - regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0; + regs.gpr[29] = 0xFFFFFFFFA4001FF0; regs.gpr[30] = 0x0000000000000000; - regs.gpr[31] = (s64)0xFFFFFFFFA4001550; + regs.gpr[31] = 0xFFFFFFFFA4001550; regs.lo = 0x0000000018B63D28; regs.hi = 0x00000000625C2BBE; @@ -196,29 +233,41 @@ void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) { if (pal) { regs.gpr[20] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000006; - regs.gpr[31] = (s64)0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554; } break; case CIC_NUS_6105_7105: - mem.Write32(regs, 0x3F0, RDRAM_SIZE); - regs.gpr[2] = (s64)0xFFFFFFFFF58B0FBF; - regs.gpr[3] = (s64)0xFFFFFFFFF58B0FBF; - regs.gpr[4] = 0x0000000000000FBF; - regs.gpr[5] = (s64)0xFFFFFFFFDECAAAD1; - regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C; - regs.gpr[7] = (s64)0xFFFFFFFFA4001F08; - regs.gpr[8] = 0x00000000000000C0; + regs.gpr[0] = 0x0000000000000000; + regs.gpr[1] = 0x0000000000000000; + regs.gpr[2] = 0xFFFFFFFFF58B0FBF; + regs.gpr[3] = 0xFFFFFFFFF58B0FBF; + regs.gpr[4] = 0x0000000000000FBF; + regs.gpr[5] = 0xFFFFFFFFDECAAAD1; + regs.gpr[6] = 0xFFFFFFFFA4001F0C; + regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[8] = 0x00000000000000C0; + regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = (s64)0xFFFFFFFFA4000040; - regs.gpr[12] = (s64)0xFFFFFFFF9651F81E; + regs.gpr[11] = 0xFFFFFFFFA4000040; + regs.gpr[12] = 0xFFFFFFFF9651F81E; regs.gpr[13] = 0x000000002D42AAC5; regs.gpr[14] = 0x00000000489B52CF; regs.gpr[15] = 0x0000000056584D60; + regs.gpr[16] = 0x0000000000000000; + regs.gpr[17] = 0x0000000000000000; + regs.gpr[18] = 0x0000000000000000; + regs.gpr[19] = 0x0000000000000000; regs.gpr[20] = 0x0000000000000001; + regs.gpr[21] = 0x0000000000000000; + regs.gpr[23] = 0x0000000000000000; regs.gpr[24] = 0x0000000000000002; - regs.gpr[25] = (s64)0xFFFFFFFFCDCE565F; - regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0; - regs.gpr[31] = (s64)0xFFFFFFFFA4001550; + regs.gpr[25] = 0xFFFFFFFFCDCE565F; + regs.gpr[26] = 0x0000000000000000; + regs.gpr[27] = 0x0000000000000000; + regs.gpr[28] = 0x0000000000000000; + regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[30] = 0x0000000000000000; + regs.gpr[31] = 0xFFFFFFFFA4001550; regs.lo = 0x0000000056584D60; regs.hi = 0x000000004BE35D1F; @@ -226,52 +275,84 @@ void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) { if (pal) { regs.gpr[20] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000006; - regs.gpr[31] = (s64)0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554; } - mem.Write32(regs, 0x04001000, 0x3C0DBFC0); - mem.Write32(regs, 0x04001004, 0x8DA807FC); - mem.Write32(regs, 0x04001008, 0x25AD07C0); - mem.Write32(regs, 0x0400100C, 0x31080080); - mem.Write32(regs, 0x04001000, 0x5500FFFC); - mem.Write32(regs, 0x04001004, 0x3C0DBFC0); - mem.Write32(regs, 0x04001008, 0x8DA80024); - mem.Write32(regs, 0x0400100C, 0x3C0BB000); + mem.Write32(regs, IMEM_REGION_START + 0x00, 0x3C0DBFC0); + mem.Write32(regs, IMEM_REGION_START + 0x04, 0x8DA807FC); + mem.Write32(regs, IMEM_REGION_START + 0x08, 0x25AD07C0); + mem.Write32(regs, IMEM_REGION_START + 0x0C, 0x31080080); + mem.Write32(regs, IMEM_REGION_START + 0x10, 0x5500FFFC); + mem.Write32(regs, IMEM_REGION_START + 0x14, 0x3C0DBFC0); + mem.Write32(regs, IMEM_REGION_START + 0x18, 0x8DA80024); + mem.Write32(regs, IMEM_REGION_START + 0x1C, 0x3C0BB000); break; case CIC_NUS_6106_7106: - regs.gpr[2] = (s64)0xFFFFFFFFA95930A4; - regs.gpr[3] = (s64)0xFFFFFFFFA95930A4; + regs.gpr[0] = 0x0000000000000000; + regs.gpr[1] = 0x0000000000000000; + regs.gpr[2] = 0xFFFFFFFFA95930A4; + regs.gpr[3] = 0xFFFFFFFFA95930A4; regs.gpr[4] = 0x00000000000030A4; - regs.gpr[5] = (s64)0xFFFFFFFFB04DC903; - regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C; - regs.gpr[7] = (s64)0xFFFFFFFFA4001F08; + regs.gpr[5] = 0xFFFFFFFFB04DC903; + regs.gpr[6] = 0xFFFFFFFFA4001F0C; + regs.gpr[7] = 0xFFFFFFFFA4001F08; regs.gpr[8] = 0x00000000000000C0; + regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = (s64)0xFFFFFFFFA4000040; - regs.gpr[12] = (s64)0xFFFFFFFFBCB59510; - regs.gpr[13] = (s64)0xFFFFFFFFBCB59510; + regs.gpr[11] = 0xFFFFFFFFA4000040; + regs.gpr[12] = 0xFFFFFFFFBCB59510; + regs.gpr[13] = 0xFFFFFFFFBCB59510; regs.gpr[14] = 0x000000000CF85C13; regs.gpr[15] = 0x000000007A3C07F4; + regs.gpr[16] = 0x0000000000000000; + regs.gpr[17] = 0x0000000000000000; + regs.gpr[18] = 0x0000000000000000; + regs.gpr[19] = 0x0000000000000000; regs.gpr[20] = 0x0000000000000001; + regs.gpr[21] = 0x0000000000000000; + regs.gpr[23] = 0x0000000000000000; regs.gpr[24] = 0x0000000000000002; regs.gpr[25] = 0x00000000465E3F72; - regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0; + regs.gpr[26] = 0x0000000000000000; + regs.gpr[27] = 0x0000000000000000; + regs.gpr[28] = 0x0000000000000000; + regs.gpr[29] = 0xFFFFFFFFA4001FF0; regs.gpr[30] = 0x0000000000000000; - regs.gpr[31] = (s64)0xFFFFFFFFA4001550; - + regs.gpr[31] = 0xFFFFFFFFA4001550; regs.lo = 0x000000007A3C07F4; regs.hi = 0x0000000023953898; if (pal) { regs.gpr[20] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000006; - regs.gpr[31] = (s64)0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554; } break; } regs.gpr[22] = (cicSeeds[cicType] >> 8) & 0xFF; regs.cop0.Reset(); + mem.Write32(regs, 0x04300004, 0x01010101); } +void ExecutePIF(Mem& mem, Registers& regs, CartInfo cartInfo) { + u32 cicType = cartInfo.cicType; + bool pal = cartInfo.isPAL; + mem.Write32(regs, PIF_RAM_REGION_START + 0x24, cicSeeds[cicType]); + switch(cicType) { + case UNKNOWN_CIC_TYPE: + Util::warn("Unknown CIC type!\n"); + break; + case CIC_NUS_6101 ... CIC_NUS_6103_7103: + mem.Write32(regs, 0x318, RDRAM_SIZE); + break; + case CIC_NUS_6105_7105: + mem.Write32(regs, 0x3F0, RDRAM_SIZE); + break; + case CIC_NUS_6106_7106: + break; + } + + DoPIFHLE(mem, regs, cartInfo); +} } \ No newline at end of file diff --git a/src/backend/core/mmio/PIF.hpp b/src/backend/core/mmio/PIF.hpp index 0f0e5617..11dd4eab 100644 --- a/src/backend/core/mmio/PIF.hpp +++ b/src/backend/core/mmio/PIF.hpp @@ -39,7 +39,7 @@ static_assert(sizeof(Controller) == 4); struct Mem; struct Registers; -const u32 cicSeeds[] = { +constexpr u32 cicSeeds[] = { 0x0, 0x00043F3F, // CIC_NUS_6101 0x00043F3F, // CIC_NUS_7102 @@ -62,5 +62,5 @@ enum CICType { struct CartInfo; void ProcessPIFCommands(u8*, Controller&, Mem&); -void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo); +void ExecutePIF(Mem& mem, Registers& regs, CartInfo cartInfo); } \ No newline at end of file diff --git a/src/frontend/imgui/Settings.cpp b/src/frontend/imgui/Settings.cpp index 37c8219b..3c9c797a 100644 --- a/src/frontend/imgui/Settings.cpp +++ b/src/frontend/imgui/Settings.cpp @@ -14,7 +14,7 @@ namespace fs = std::filesystem; name = value; \ } else { \ settingsFile.clear(); \ - settings[param1][param2] = defaultVal; \ + settings[param1][param2] = defaultVal; \ settingsFile << settings; \ name = defaultVal; \ } \ diff --git a/src/frontend/imgui/Window.cpp b/src/frontend/imgui/Window.cpp index 546a0b27..48730827 100644 --- a/src/frontend/imgui/Window.cpp +++ b/src/frontend/imgui/Window.cpp @@ -37,8 +37,6 @@ void Window::InitSDL() { SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI ); - windowID = SDL_GetWindowID(window); - if(volkInitialize() != VK_SUCCESS) { Util::panic("Failed to load Volk!"); } @@ -116,9 +114,6 @@ void Window::InitImgui() { initInfo.CheckVkResultFn = check_vk_result; ImGui_ImplVulkan_Init(&initInfo, GetVkRenderPass()); - uiFont = io.Fonts->AddFontFromFileTTF("resources/OpenSans.ttf", 15.f); - codeFont = io.Fonts->AddFontFromFileTTF("resources/Sweet16.ttf", 15.f); - int displayIndex = SDL_GetWindowDisplayIndex(window); float ddpi, hdpi, vdpi; SDL_GetDisplayDPI(displayIndex, &ddpi, &hdpi, &vdpi); @@ -126,7 +121,6 @@ void Window::InitImgui() { ddpi /= 96.f; uiFont = io.Fonts->AddFontFromFileTTF("resources/OpenSans.ttf", 16.f * ddpi); - codeFont = io.Fonts->AddFontFromFileTTF("resources/Sweet16.ttf", 16.f * ddpi); ImGui::GetStyle().ScaleAllSizes(ddpi); @@ -138,11 +132,12 @@ void Window::InitImgui() { } Window::~Window() { - VkResult err = vkDeviceWaitIdle(device); + auto err = vkDeviceWaitIdle(device); check_vk_result(err); ImGui_ImplVulkan_Shutdown(); ImGui_ImplSDL2_Shutdown(); ImGui::DestroyContext(); + SDL_DestroyWindow(window); SDL_DestroyWindow(g_Window); SDL_Quit(); diff --git a/src/frontend/imgui/Window.hpp b/src/frontend/imgui/Window.hpp index bf1551a8..2da49348 100644 --- a/src/frontend/imgui/Window.hpp +++ b/src/frontend/imgui/Window.hpp @@ -15,8 +15,7 @@ struct Window { ImDrawData* Present(n64::Core& core); [[nodiscard]] bool gotClosed(SDL_Event event); - ImFont *uiFont{}, *codeFont{}; - u32 windowID{}; + ImFont *uiFont{}; Settings settings; GameList gameList; void LoadROM(n64::Core& core, const std::string& path);