BITCH I'M BACK OUT MY COMA
This commit is contained in:
@@ -64,6 +64,11 @@ file(REMOVE
|
|||||||
target_link_libraries(gadolinium PUBLIC frontend frontend-imgui
|
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)
|
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)
|
if(WIN32)
|
||||||
target_compile_definitions(gadolinium PUBLIC NOMINMAX _CRT_SECURE_NO_WARNINGS)
|
target_compile_definitions(gadolinium PUBLIC NOMINMAX _CRT_SECURE_NO_WARNINGS)
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ CartInfo Core::LoadROM(const std::string& rom_) {
|
|||||||
|
|
||||||
CartInfo cartInfo = mem.LoadROM(rom);
|
CartInfo cartInfo = mem.LoadROM(rom);
|
||||||
isPAL = cartInfo.isPAL;
|
isPAL = cartInfo.isPAL;
|
||||||
DoPIFHLE(mem, CpuGetRegs(), cartInfo);
|
ExecutePIF(mem, CpuGetRegs(), cartInfo);
|
||||||
|
|
||||||
return cartInfo;
|
return cartInfo;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
#define DMEM_REGION_END (DMEM_REGION_START + DMEM_DSIZE)
|
#define DMEM_REGION_END (DMEM_REGION_START + DMEM_DSIZE)
|
||||||
#define IMEM_REGION_START 0x4001000
|
#define IMEM_REGION_START 0x4001000
|
||||||
#define IMEM_REGION_END (IMEM_REGION_START + IMEM_DSIZE)
|
#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_START 0x10000000
|
||||||
#define CART_REGION_END 0x1FBFFFFF
|
#define CART_REGION_END 0x1FBFFFFF
|
||||||
|
|
||||||
@@ -38,7 +40,7 @@
|
|||||||
#define SRAM_REGION 0x08000000 ... 0x0FFFFFFF
|
#define SRAM_REGION 0x08000000 ... 0x0FFFFFFF
|
||||||
#define CART_REGION 0x10000000 ... 0x1FBFFFFF
|
#define CART_REGION 0x10000000 ... 0x1FBFFFFF
|
||||||
#define PIF_ROM_REGION 0x1FC00000 ... 0x1FC007BF
|
#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) {
|
constexpr size_t operator""_kb(unsigned long long int x) {
|
||||||
return 1024ULL * x;
|
return 1024ULL * x;
|
||||||
|
|||||||
@@ -73,79 +73,117 @@ void ProcessPIFCommands(u8* pifRam, Controller& controller, Mem& mem) {
|
|||||||
void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) {
|
void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) {
|
||||||
u32 cicType = cartInfo.cicType;
|
u32 cicType = cartInfo.cicType;
|
||||||
bool pal = cartInfo.isPAL;
|
bool pal = cartInfo.isPAL;
|
||||||
mem.Write32(regs, 0x1FC007E4, cicSeeds[cicType]);
|
mem.Write32(regs, PIF_RAM_REGION_START + 0x24, cicSeeds[cicType]);
|
||||||
|
|
||||||
switch(cicType) {
|
switch(cicType) {
|
||||||
|
case UNKNOWN_CIC_TYPE:
|
||||||
|
Util::warn("Unknown CIC type!\n");
|
||||||
|
break;
|
||||||
case CIC_NUS_6101:
|
case CIC_NUS_6101:
|
||||||
mem.Write32(regs, 0x318, RDRAM_SIZE);
|
regs.gpr[0] = 0x0000000000000000;
|
||||||
regs.gpr[2] = (s64)0xFFFFFFFFDF6445CC;
|
regs.gpr[1] = 0x0000000000000000;
|
||||||
regs.gpr[3] = (s64)0xFFFFFFFFDF6445CC;
|
regs.gpr[2] = 0xFFFFFFFFDF6445CC;
|
||||||
regs.gpr[4] = 0x45CC;
|
regs.gpr[3] = 0xFFFFFFFFDF6445CC;
|
||||||
regs.gpr[5] = 0x73EE317A;
|
regs.gpr[4] = 0x00000000000045CC;
|
||||||
regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C;
|
regs.gpr[5] = 0x0000000073EE317A;
|
||||||
regs.gpr[7] = (s64)0xFFFFFFFFA4001F08;
|
regs.gpr[6] = 0xFFFFFFFFA4001F0C;
|
||||||
regs.gpr[8] = 0xC0;
|
regs.gpr[7] = 0xFFFFFFFFA4001F08;
|
||||||
regs.gpr[10] = 0x40;
|
regs.gpr[8] = 0x00000000000000C0;
|
||||||
regs.gpr[11] = (s64)0xFFFFFFFFA4000040;
|
regs.gpr[9] = 0x0000000000000000;
|
||||||
regs.gpr[12] = (s64)0xFFFFFFFFC7601FAC;
|
regs.gpr[10] = 0x0000000000000040;
|
||||||
regs.gpr[13] = (s64)0xFFFFFFFFC7601FAC;
|
regs.gpr[11] = 0xFFFFFFFFA4000040;
|
||||||
regs.gpr[14] = (s64)0xFFFFFFFFB48E2ED6;
|
regs.gpr[12] = 0xFFFFFFFFC7601FAC;
|
||||||
regs.gpr[15] = (s64)0xFFFFFFFFBA1A7D4B;
|
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[20] = 0x0000000000000001;
|
||||||
regs.gpr[22] = 0x000000000000003F;
|
regs.gpr[21] = 0x0000000000000000;
|
||||||
regs.gpr[23] = 0x0000000000000001;
|
regs.gpr[23] = 0x0000000000000001;
|
||||||
regs.gpr[24] = 0x0000000000000002;
|
regs.gpr[24] = 0x0000000000000002;
|
||||||
regs.gpr[25] = (s64)0xFFFFFFFF905F4718;
|
regs.gpr[25] = 0xFFFFFFFF905F4718;
|
||||||
regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0;
|
regs.gpr[26] = 0x0000000000000000;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001550;
|
regs.gpr[27] = 0x0000000000000000;
|
||||||
regs.lo = (s64)0xFFFFFFFFBA1A7D4B;
|
regs.gpr[28] = 0x0000000000000000;
|
||||||
regs.hi = (s64)0xFFFFFFFF997EC317;
|
regs.gpr[29] = 0xFFFFFFFFA4001FF0;
|
||||||
|
regs.gpr[30] = 0x0000000000000000;
|
||||||
|
regs.gpr[31] = 0xFFFFFFFFA4001550;
|
||||||
|
|
||||||
|
regs.lo = 0xFFFFFFFFBA1A7D4B;
|
||||||
|
regs.hi = 0xFFFFFFFF997EC317;
|
||||||
break;
|
break;
|
||||||
case CIC_NUS_7102:
|
case CIC_NUS_7102:
|
||||||
mem.Write32(regs, 0x318, RDRAM_SIZE);
|
regs.gpr[0] = 0x0000000000000000;
|
||||||
regs.gpr[1] = 0x0000000000000001;
|
regs.gpr[1] = 0x0000000000000001;
|
||||||
regs.gpr[2] = 0x000000001E324416;
|
regs.gpr[2] = 0x000000001E324416;
|
||||||
regs.gpr[3] = 0x000000001E324416;
|
regs.gpr[3] = 0x000000001E324416;
|
||||||
regs.gpr[4] = 0x0000000000004416;
|
regs.gpr[4] = 0x0000000000004416;
|
||||||
regs.gpr[5] = 0x000000000EC5D9AF;
|
regs.gpr[5] = 0x000000000EC5D9AF;
|
||||||
regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C;
|
regs.gpr[6] = 0xFFFFFFFFA4001F0C;
|
||||||
regs.gpr[7] = (s64)0xFFFFFFFFA4001F08;
|
regs.gpr[7] = 0xFFFFFFFFA4001F08;
|
||||||
regs.gpr[8] = 0x00000000000000C0;
|
regs.gpr[8] = 0x00000000000000C0;
|
||||||
|
regs.gpr[9] = 0x0000000000000000;
|
||||||
regs.gpr[10] = 0x0000000000000040;
|
regs.gpr[10] = 0x0000000000000040;
|
||||||
regs.gpr[11] = (s64)0xFFFFFFFFA4000040;
|
regs.gpr[11] = 0xFFFFFFFFA4000040;
|
||||||
regs.gpr[12] = 0x00000000495D3D7B;
|
regs.gpr[12] = 0x00000000495D3D7B;
|
||||||
regs.gpr[13] = (s64)0xFFFFFFFF8B3DFA1E;
|
regs.gpr[13] = 0xFFFFFFFF8B3DFA1E;
|
||||||
regs.gpr[14] = 0x000000004798E4D4;
|
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[22] = 0x000000000000003F;
|
||||||
regs.gpr[23] = 0x0000000000000007;
|
regs.gpr[23] = 0x0000000000000007;
|
||||||
|
regs.gpr[24] = 0x0000000000000000;
|
||||||
regs.gpr[25] = 0x0000000013D05CAB;
|
regs.gpr[25] = 0x0000000013D05CAB;
|
||||||
regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0;
|
regs.gpr[26] = 0x0000000000000000;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001554;
|
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;
|
regs.hi = 0x0000000010054A98;
|
||||||
break;
|
break;
|
||||||
case CIC_NUS_6102_7101:
|
case CIC_NUS_6102_7101:
|
||||||
mem.Write32(regs, 0x318, RDRAM_SIZE);
|
regs.gpr[0] = 0x0000000000000000;
|
||||||
regs.gpr[1] = 0x0000000000000001;
|
regs.gpr[1] = 0x0000000000000001;
|
||||||
regs.gpr[2] = 0x000000000EBDA536;
|
regs.gpr[2] = 0x000000000EBDA536;
|
||||||
regs.gpr[3] = 0x000000000EBDA536;
|
regs.gpr[3] = 0x000000000EBDA536;
|
||||||
regs.gpr[4] = 0x000000000000A536;
|
regs.gpr[4] = 0x000000000000A536;
|
||||||
regs.gpr[5] = (s64)0xFFFFFFFFC0F1D859;
|
regs.gpr[5] = 0xFFFFFFFFC0F1D859;
|
||||||
regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C;
|
regs.gpr[6] = 0xFFFFFFFFA4001F0C;
|
||||||
regs.gpr[7] = (s64)0xFFFFFFFFA4001F08;
|
regs.gpr[7] = 0xFFFFFFFFA4001F08;
|
||||||
regs.gpr[8] = 0x00000000000000C0;
|
regs.gpr[8] = 0x00000000000000C0;
|
||||||
|
regs.gpr[9] = 0x0000000000000000;
|
||||||
regs.gpr[10] = 0x0000000000000040;
|
regs.gpr[10] = 0x0000000000000040;
|
||||||
regs.gpr[11] = (s64)0xFFFFFFFFA4000040;
|
regs.gpr[11] = 0xFFFFFFFFA4000040;
|
||||||
regs.gpr[12] = (s64)0xFFFFFFFFED10D0B3;
|
regs.gpr[12] = 0xFFFFFFFFED10D0B3;
|
||||||
regs.gpr[13] = 0x000000001402A4CC;
|
regs.gpr[13] = 0x000000001402A4CC;
|
||||||
regs.gpr[14] = 0x000000002DE108EA;
|
regs.gpr[14] = 0x000000002DE108EA;
|
||||||
regs.gpr[15] = 0x000000003103E121;
|
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[20] = 0x0000000000000001;
|
||||||
regs.gpr[25] = (s64)0xFFFFFFFF9DEBB54F;
|
regs.gpr[21] = 0x0000000000000000;
|
||||||
regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0;
|
regs.gpr[23] = 0x0000000000000000;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001550;
|
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.hi = 0x000000003FC18657;
|
||||||
regs.lo = 0x000000003103E121;
|
regs.lo = 0x000000003103E121;
|
||||||
@@ -153,25 +191,24 @@ void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) {
|
|||||||
if (pal) {
|
if (pal) {
|
||||||
regs.gpr[20] = 0x0000000000000000;
|
regs.gpr[20] = 0x0000000000000000;
|
||||||
regs.gpr[23] = 0x0000000000000006;
|
regs.gpr[23] = 0x0000000000000006;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001554;
|
regs.gpr[31] = 0xFFFFFFFFA4001554;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CIC_NUS_6103_7103:
|
case CIC_NUS_6103_7103:
|
||||||
mem.Write32(regs, 0x318, RDRAM_SIZE);
|
regs.gpr[0] = 0x0000000000000000;
|
||||||
regs.gpr[0] = 0x0000000000000000;
|
regs.gpr[1] = 0x0000000000000001;
|
||||||
regs.gpr[1] = 0x0000000000000001;
|
regs.gpr[2] = 0x0000000049A5EE96;
|
||||||
regs.gpr[2] = 0x0000000049A5EE96;
|
regs.gpr[3] = 0x0000000049A5EE96;
|
||||||
regs.gpr[3] = 0x0000000049A5EE96;
|
regs.gpr[4] = 0x000000000000EE96;
|
||||||
regs.gpr[4] = 0x000000000000EE96;
|
regs.gpr[5] = 0xFFFFFFFFD4646273;
|
||||||
regs.gpr[5] = (s64)0xFFFFFFFFD4646273;
|
regs.gpr[6] = 0xFFFFFFFFA4001F0C;
|
||||||
regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C;
|
regs.gpr[7] = 0xFFFFFFFFA4001F08;
|
||||||
regs.gpr[7] = (s64)0xFFFFFFFFA4001F08;
|
regs.gpr[8] = 0x00000000000000C0;
|
||||||
regs.gpr[8] = 0x00000000000000C0;
|
regs.gpr[9] = 0x0000000000000000;
|
||||||
regs.gpr[9] = 0x0000000000000000;
|
|
||||||
regs.gpr[10] = 0x0000000000000040;
|
regs.gpr[10] = 0x0000000000000040;
|
||||||
regs.gpr[11] = (s64)0xFFFFFFFFA4000040;
|
regs.gpr[11] = 0xFFFFFFFFA4000040;
|
||||||
regs.gpr[12] = (s64)0xFFFFFFFFCE9DFBF7;
|
regs.gpr[12] = 0xFFFFFFFFCE9DFBF7;
|
||||||
regs.gpr[13] = (s64)0xFFFFFFFFCE9DFBF7;
|
regs.gpr[13] = 0xFFFFFFFFCE9DFBF7;
|
||||||
regs.gpr[14] = 0x000000001AF99984;
|
regs.gpr[14] = 0x000000001AF99984;
|
||||||
regs.gpr[15] = 0x0000000018B63D28;
|
regs.gpr[15] = 0x0000000018B63D28;
|
||||||
regs.gpr[16] = 0x0000000000000000;
|
regs.gpr[16] = 0x0000000000000000;
|
||||||
@@ -182,13 +219,13 @@ void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) {
|
|||||||
regs.gpr[21] = 0x0000000000000000;
|
regs.gpr[21] = 0x0000000000000000;
|
||||||
regs.gpr[23] = 0x0000000000000000;
|
regs.gpr[23] = 0x0000000000000000;
|
||||||
regs.gpr[24] = 0x0000000000000000;
|
regs.gpr[24] = 0x0000000000000000;
|
||||||
regs.gpr[25] = (s64)0xFFFFFFFF825B21C9;
|
regs.gpr[25] = 0xFFFFFFFF825B21C9;
|
||||||
regs.gpr[26] = 0x0000000000000000;
|
regs.gpr[26] = 0x0000000000000000;
|
||||||
regs.gpr[27] = 0x0000000000000000;
|
regs.gpr[27] = 0x0000000000000000;
|
||||||
regs.gpr[28] = 0x0000000000000000;
|
regs.gpr[28] = 0x0000000000000000;
|
||||||
regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0;
|
regs.gpr[29] = 0xFFFFFFFFA4001FF0;
|
||||||
regs.gpr[30] = 0x0000000000000000;
|
regs.gpr[30] = 0x0000000000000000;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001550;
|
regs.gpr[31] = 0xFFFFFFFFA4001550;
|
||||||
|
|
||||||
regs.lo = 0x0000000018B63D28;
|
regs.lo = 0x0000000018B63D28;
|
||||||
regs.hi = 0x00000000625C2BBE;
|
regs.hi = 0x00000000625C2BBE;
|
||||||
@@ -196,29 +233,41 @@ void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) {
|
|||||||
if (pal) {
|
if (pal) {
|
||||||
regs.gpr[20] = 0x0000000000000000;
|
regs.gpr[20] = 0x0000000000000000;
|
||||||
regs.gpr[23] = 0x0000000000000006;
|
regs.gpr[23] = 0x0000000000000006;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001554;
|
regs.gpr[31] = 0xFFFFFFFFA4001554;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CIC_NUS_6105_7105:
|
case CIC_NUS_6105_7105:
|
||||||
mem.Write32(regs, 0x3F0, RDRAM_SIZE);
|
regs.gpr[0] = 0x0000000000000000;
|
||||||
regs.gpr[2] = (s64)0xFFFFFFFFF58B0FBF;
|
regs.gpr[1] = 0x0000000000000000;
|
||||||
regs.gpr[3] = (s64)0xFFFFFFFFF58B0FBF;
|
regs.gpr[2] = 0xFFFFFFFFF58B0FBF;
|
||||||
regs.gpr[4] = 0x0000000000000FBF;
|
regs.gpr[3] = 0xFFFFFFFFF58B0FBF;
|
||||||
regs.gpr[5] = (s64)0xFFFFFFFFDECAAAD1;
|
regs.gpr[4] = 0x0000000000000FBF;
|
||||||
regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C;
|
regs.gpr[5] = 0xFFFFFFFFDECAAAD1;
|
||||||
regs.gpr[7] = (s64)0xFFFFFFFFA4001F08;
|
regs.gpr[6] = 0xFFFFFFFFA4001F0C;
|
||||||
regs.gpr[8] = 0x00000000000000C0;
|
regs.gpr[7] = 0xFFFFFFFFA4001F08;
|
||||||
|
regs.gpr[8] = 0x00000000000000C0;
|
||||||
|
regs.gpr[9] = 0x0000000000000000;
|
||||||
regs.gpr[10] = 0x0000000000000040;
|
regs.gpr[10] = 0x0000000000000040;
|
||||||
regs.gpr[11] = (s64)0xFFFFFFFFA4000040;
|
regs.gpr[11] = 0xFFFFFFFFA4000040;
|
||||||
regs.gpr[12] = (s64)0xFFFFFFFF9651F81E;
|
regs.gpr[12] = 0xFFFFFFFF9651F81E;
|
||||||
regs.gpr[13] = 0x000000002D42AAC5;
|
regs.gpr[13] = 0x000000002D42AAC5;
|
||||||
regs.gpr[14] = 0x00000000489B52CF;
|
regs.gpr[14] = 0x00000000489B52CF;
|
||||||
regs.gpr[15] = 0x0000000056584D60;
|
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[20] = 0x0000000000000001;
|
||||||
|
regs.gpr[21] = 0x0000000000000000;
|
||||||
|
regs.gpr[23] = 0x0000000000000000;
|
||||||
regs.gpr[24] = 0x0000000000000002;
|
regs.gpr[24] = 0x0000000000000002;
|
||||||
regs.gpr[25] = (s64)0xFFFFFFFFCDCE565F;
|
regs.gpr[25] = 0xFFFFFFFFCDCE565F;
|
||||||
regs.gpr[29] = (s64)0xFFFFFFFFA4001FF0;
|
regs.gpr[26] = 0x0000000000000000;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001550;
|
regs.gpr[27] = 0x0000000000000000;
|
||||||
|
regs.gpr[28] = 0x0000000000000000;
|
||||||
|
regs.gpr[29] = 0xFFFFFFFFA4001FF0;
|
||||||
|
regs.gpr[30] = 0x0000000000000000;
|
||||||
|
regs.gpr[31] = 0xFFFFFFFFA4001550;
|
||||||
|
|
||||||
regs.lo = 0x0000000056584D60;
|
regs.lo = 0x0000000056584D60;
|
||||||
regs.hi = 0x000000004BE35D1F;
|
regs.hi = 0x000000004BE35D1F;
|
||||||
@@ -226,52 +275,84 @@ void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo) {
|
|||||||
if (pal) {
|
if (pal) {
|
||||||
regs.gpr[20] = 0x0000000000000000;
|
regs.gpr[20] = 0x0000000000000000;
|
||||||
regs.gpr[23] = 0x0000000000000006;
|
regs.gpr[23] = 0x0000000000000006;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001554;
|
regs.gpr[31] = 0xFFFFFFFFA4001554;
|
||||||
}
|
}
|
||||||
|
|
||||||
mem.Write32(regs, 0x04001000, 0x3C0DBFC0);
|
mem.Write32(regs, IMEM_REGION_START + 0x00, 0x3C0DBFC0);
|
||||||
mem.Write32(regs, 0x04001004, 0x8DA807FC);
|
mem.Write32(regs, IMEM_REGION_START + 0x04, 0x8DA807FC);
|
||||||
mem.Write32(regs, 0x04001008, 0x25AD07C0);
|
mem.Write32(regs, IMEM_REGION_START + 0x08, 0x25AD07C0);
|
||||||
mem.Write32(regs, 0x0400100C, 0x31080080);
|
mem.Write32(regs, IMEM_REGION_START + 0x0C, 0x31080080);
|
||||||
mem.Write32(regs, 0x04001000, 0x5500FFFC);
|
mem.Write32(regs, IMEM_REGION_START + 0x10, 0x5500FFFC);
|
||||||
mem.Write32(regs, 0x04001004, 0x3C0DBFC0);
|
mem.Write32(regs, IMEM_REGION_START + 0x14, 0x3C0DBFC0);
|
||||||
mem.Write32(regs, 0x04001008, 0x8DA80024);
|
mem.Write32(regs, IMEM_REGION_START + 0x18, 0x8DA80024);
|
||||||
mem.Write32(regs, 0x0400100C, 0x3C0BB000);
|
mem.Write32(regs, IMEM_REGION_START + 0x1C, 0x3C0BB000);
|
||||||
break;
|
break;
|
||||||
case CIC_NUS_6106_7106:
|
case CIC_NUS_6106_7106:
|
||||||
regs.gpr[2] = (s64)0xFFFFFFFFA95930A4;
|
regs.gpr[0] = 0x0000000000000000;
|
||||||
regs.gpr[3] = (s64)0xFFFFFFFFA95930A4;
|
regs.gpr[1] = 0x0000000000000000;
|
||||||
|
regs.gpr[2] = 0xFFFFFFFFA95930A4;
|
||||||
|
regs.gpr[3] = 0xFFFFFFFFA95930A4;
|
||||||
regs.gpr[4] = 0x00000000000030A4;
|
regs.gpr[4] = 0x00000000000030A4;
|
||||||
regs.gpr[5] = (s64)0xFFFFFFFFB04DC903;
|
regs.gpr[5] = 0xFFFFFFFFB04DC903;
|
||||||
regs.gpr[6] = (s64)0xFFFFFFFFA4001F0C;
|
regs.gpr[6] = 0xFFFFFFFFA4001F0C;
|
||||||
regs.gpr[7] = (s64)0xFFFFFFFFA4001F08;
|
regs.gpr[7] = 0xFFFFFFFFA4001F08;
|
||||||
regs.gpr[8] = 0x00000000000000C0;
|
regs.gpr[8] = 0x00000000000000C0;
|
||||||
|
regs.gpr[9] = 0x0000000000000000;
|
||||||
regs.gpr[10] = 0x0000000000000040;
|
regs.gpr[10] = 0x0000000000000040;
|
||||||
regs.gpr[11] = (s64)0xFFFFFFFFA4000040;
|
regs.gpr[11] = 0xFFFFFFFFA4000040;
|
||||||
regs.gpr[12] = (s64)0xFFFFFFFFBCB59510;
|
regs.gpr[12] = 0xFFFFFFFFBCB59510;
|
||||||
regs.gpr[13] = (s64)0xFFFFFFFFBCB59510;
|
regs.gpr[13] = 0xFFFFFFFFBCB59510;
|
||||||
regs.gpr[14] = 0x000000000CF85C13;
|
regs.gpr[14] = 0x000000000CF85C13;
|
||||||
regs.gpr[15] = 0x000000007A3C07F4;
|
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[20] = 0x0000000000000001;
|
||||||
|
regs.gpr[21] = 0x0000000000000000;
|
||||||
|
regs.gpr[23] = 0x0000000000000000;
|
||||||
regs.gpr[24] = 0x0000000000000002;
|
regs.gpr[24] = 0x0000000000000002;
|
||||||
regs.gpr[25] = 0x00000000465E3F72;
|
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[30] = 0x0000000000000000;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001550;
|
regs.gpr[31] = 0xFFFFFFFFA4001550;
|
||||||
|
|
||||||
regs.lo = 0x000000007A3C07F4;
|
regs.lo = 0x000000007A3C07F4;
|
||||||
regs.hi = 0x0000000023953898;
|
regs.hi = 0x0000000023953898;
|
||||||
|
|
||||||
if (pal) {
|
if (pal) {
|
||||||
regs.gpr[20] = 0x0000000000000000;
|
regs.gpr[20] = 0x0000000000000000;
|
||||||
regs.gpr[23] = 0x0000000000000006;
|
regs.gpr[23] = 0x0000000000000006;
|
||||||
regs.gpr[31] = (s64)0xFFFFFFFFA4001554;
|
regs.gpr[31] = 0xFFFFFFFFA4001554;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
regs.gpr[22] = (cicSeeds[cicType] >> 8) & 0xFF;
|
regs.gpr[22] = (cicSeeds[cicType] >> 8) & 0xFF;
|
||||||
regs.cop0.Reset();
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -39,7 +39,7 @@ static_assert(sizeof(Controller) == 4);
|
|||||||
struct Mem;
|
struct Mem;
|
||||||
struct Registers;
|
struct Registers;
|
||||||
|
|
||||||
const u32 cicSeeds[] = {
|
constexpr u32 cicSeeds[] = {
|
||||||
0x0,
|
0x0,
|
||||||
0x00043F3F, // CIC_NUS_6101
|
0x00043F3F, // CIC_NUS_6101
|
||||||
0x00043F3F, // CIC_NUS_7102
|
0x00043F3F, // CIC_NUS_7102
|
||||||
@@ -62,5 +62,5 @@ enum CICType {
|
|||||||
struct CartInfo;
|
struct CartInfo;
|
||||||
|
|
||||||
void ProcessPIFCommands(u8*, Controller&, Mem&);
|
void ProcessPIFCommands(u8*, Controller&, Mem&);
|
||||||
void DoPIFHLE(Mem& mem, Registers& regs, CartInfo cartInfo);
|
void ExecutePIF(Mem& mem, Registers& regs, CartInfo cartInfo);
|
||||||
}
|
}
|
||||||
@@ -14,7 +14,7 @@ namespace fs = std::filesystem;
|
|||||||
name = value; \
|
name = value; \
|
||||||
} else { \
|
} else { \
|
||||||
settingsFile.clear(); \
|
settingsFile.clear(); \
|
||||||
settings[param1][param2] = defaultVal; \
|
settings[param1][param2] = defaultVal; \
|
||||||
settingsFile << settings; \
|
settingsFile << settings; \
|
||||||
name = defaultVal; \
|
name = defaultVal; \
|
||||||
} \
|
} \
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ void Window::InitSDL() {
|
|||||||
SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI
|
SDL_WINDOW_VULKAN | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI
|
||||||
);
|
);
|
||||||
|
|
||||||
windowID = SDL_GetWindowID(window);
|
|
||||||
|
|
||||||
if(volkInitialize() != VK_SUCCESS) {
|
if(volkInitialize() != VK_SUCCESS) {
|
||||||
Util::panic("Failed to load Volk!");
|
Util::panic("Failed to load Volk!");
|
||||||
}
|
}
|
||||||
@@ -116,9 +114,6 @@ void Window::InitImgui() {
|
|||||||
initInfo.CheckVkResultFn = check_vk_result;
|
initInfo.CheckVkResultFn = check_vk_result;
|
||||||
ImGui_ImplVulkan_Init(&initInfo, GetVkRenderPass());
|
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);
|
int displayIndex = SDL_GetWindowDisplayIndex(window);
|
||||||
float ddpi, hdpi, vdpi;
|
float ddpi, hdpi, vdpi;
|
||||||
SDL_GetDisplayDPI(displayIndex, &ddpi, &hdpi, &vdpi);
|
SDL_GetDisplayDPI(displayIndex, &ddpi, &hdpi, &vdpi);
|
||||||
@@ -126,7 +121,6 @@ void Window::InitImgui() {
|
|||||||
ddpi /= 96.f;
|
ddpi /= 96.f;
|
||||||
|
|
||||||
uiFont = io.Fonts->AddFontFromFileTTF("resources/OpenSans.ttf", 16.f * ddpi);
|
uiFont = io.Fonts->AddFontFromFileTTF("resources/OpenSans.ttf", 16.f * ddpi);
|
||||||
codeFont = io.Fonts->AddFontFromFileTTF("resources/Sweet16.ttf", 16.f * ddpi);
|
|
||||||
|
|
||||||
ImGui::GetStyle().ScaleAllSizes(ddpi);
|
ImGui::GetStyle().ScaleAllSizes(ddpi);
|
||||||
|
|
||||||
@@ -138,11 +132,12 @@ void Window::InitImgui() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Window::~Window() {
|
Window::~Window() {
|
||||||
VkResult err = vkDeviceWaitIdle(device);
|
auto err = vkDeviceWaitIdle(device);
|
||||||
check_vk_result(err);
|
check_vk_result(err);
|
||||||
ImGui_ImplVulkan_Shutdown();
|
ImGui_ImplVulkan_Shutdown();
|
||||||
ImGui_ImplSDL2_Shutdown();
|
ImGui_ImplSDL2_Shutdown();
|
||||||
ImGui::DestroyContext();
|
ImGui::DestroyContext();
|
||||||
|
|
||||||
SDL_DestroyWindow(window);
|
SDL_DestroyWindow(window);
|
||||||
SDL_DestroyWindow(g_Window);
|
SDL_DestroyWindow(g_Window);
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
|
|||||||
@@ -15,8 +15,7 @@ struct Window {
|
|||||||
ImDrawData* Present(n64::Core& core);
|
ImDrawData* Present(n64::Core& core);
|
||||||
|
|
||||||
[[nodiscard]] bool gotClosed(SDL_Event event);
|
[[nodiscard]] bool gotClosed(SDL_Event event);
|
||||||
ImFont *uiFont{}, *codeFont{};
|
ImFont *uiFont{};
|
||||||
u32 windowID{};
|
|
||||||
Settings settings;
|
Settings settings;
|
||||||
GameList gameList;
|
GameList gameList;
|
||||||
void LoadROM(n64::Core& core, const std::string& path);
|
void LoadROM(n64::Core& core, const std::string& path);
|
||||||
|
|||||||
Reference in New Issue
Block a user