diff --git a/src/backend/Core.hpp b/src/backend/Core.hpp index 79f424bb..469e9c5a 100644 --- a/src/backend/Core.hpp +++ b/src/backend/Core.hpp @@ -14,7 +14,7 @@ struct Core { void LoadROM(const std::string&); void Run(float volumeL, float volumeR); void TogglePause() { pause = !pause; } - VI& GetVI() { return cpu.mem.mmio.vi; } + [[nodiscard]] VI& GetVI() const { return cpu->mem.mmio.vi; } u32 breakpoint = 0; diff --git a/src/backend/core/Audio.cpp b/src/backend/core/Audio.cpp index 33269541..8cd1b55d 100644 --- a/src/backend/core/Audio.cpp +++ b/src/backend/core/Audio.cpp @@ -17,7 +17,7 @@ SDL_AudioDeviceID audioDev{}; #define LockAudioMutex() SDL_LockMutex(audioStreamMutex) #define UnlockAudioMutex() SDL_UnlockMutex(audioStreamMutex) -void audioCallback(void* userdata, Uint8* stream, int length) { +void audioCallback(void*, Uint8* stream, int length) { int gotten = 0; LockAudioMutex(); int available = SDL_AudioStreamAvailable(audioStream); diff --git a/src/backend/core/Mem.cpp b/src/backend/core/Mem.cpp index 87353e8a..39276047 100644 --- a/src/backend/core/Mem.cpp +++ b/src/backend/core/Mem.cpp @@ -1,5 +1,4 @@ #include -#include #include #include #include diff --git a/src/backend/core/Mem.hpp b/src/backend/core/Mem.hpp index db5c7fee..5c8339cb 100644 --- a/src/backend/core/Mem.hpp +++ b/src/backend/core/Mem.hpp @@ -46,7 +46,7 @@ struct Flash { Flash() = default; ~Flash() = default; void Reset(); - void Load(SaveType, std::string); + void Load(SaveType, const std::string&); FlashState state{}; u64 status{}; size_t eraseOffs{}; diff --git a/src/backend/core/RDP.cpp b/src/backend/core/RDP.cpp index 40318913..8cd56e4b 100644 --- a/src/backend/core/RDP.cpp +++ b/src/backend/core/RDP.cpp @@ -72,7 +72,7 @@ void RDP::WriteStatus(MI& mi, Registers& regs, RSP& rsp, u32 val) { RunCommand(mi, regs, rsp); } } - +/* FORCE_INLINE void logCommand(u8 cmd) { switch(cmd) { case 0x08: Util::debug("Fill triangle"); break; @@ -112,6 +112,7 @@ FORCE_INLINE void logCommand(u8 cmd) { case 0x3f: Util::debug("Set color image"); break; } } + */ void RDP::RunCommand(MI& mi, Registers& regs, RSP& rsp) { if (dpc.status.freeze) { diff --git a/src/backend/core/RDP.hpp b/src/backend/core/RDP.hpp index 281292f6..12b6681f 100644 --- a/src/backend/core/RDP.hpp +++ b/src/backend/core/RDP.hpp @@ -51,7 +51,7 @@ struct DPC { }; struct RDP { - DPC dpc; + DPC dpc{}; u32 cmd_buf[0xFFFFF]{}; RDP(); diff --git a/src/backend/core/RSP.hpp b/src/backend/core/RSP.hpp index 0049f1a6..d691e9c8 100644 --- a/src/backend/core/RSP.hpp +++ b/src/backend/core/RSP.hpp @@ -127,12 +127,12 @@ struct RSP { auto Read(u32 addr) -> u32; void Write(Mem& mem, Registers& regs, u32 addr, u32 value); void Exec(Registers& regs, Mem& mem, u32 instr); - SPStatus spStatus; + SPStatus spStatus{}; u16 oldPC{}, pc{}, nextPC{}; SPDMASPAddr spDMASPAddr{}; SPDMADRAMAddr spDMADRAMAddr{}; - SPDMASPAddr lastSuccessfulSPAddr; - SPDMADRAMAddr lastSuccessfulDRAMAddr; + SPDMASPAddr lastSuccessfulSPAddr{}; + SPDMADRAMAddr lastSuccessfulDRAMAddr{}; SPDMALen spDMALen{}; u8 dmem[DMEM_SIZE]{}, imem[IMEM_SIZE]{}; VPR vpr[32]{}; diff --git a/src/backend/core/mem/Flash.cpp b/src/backend/core/mem/Flash.cpp index bb12db46..60390ad9 100644 --- a/src/backend/core/mem/Flash.cpp +++ b/src/backend/core/mem/Flash.cpp @@ -12,7 +12,7 @@ void Flash::Reset() { } } -void Flash::Load(SaveType saveType, std::string path) { +void Flash::Load(SaveType saveType, const std::string& path) { if(saveType == SAVE_FLASH_1m) { flashPath = fs::path(path).replace_extension(".flash").string(); std::error_code error; diff --git a/src/backend/core/mmio/AI.cpp b/src/backend/core/mmio/AI.cpp index d0fb725d..321644c6 100644 --- a/src/backend/core/mmio/AI.cpp +++ b/src/backend/core/mmio/AI.cpp @@ -6,7 +6,7 @@ namespace n64 { void AI::Reset() { - dmaEnable = 0; + dmaEnable = false; dacRate = 0; bitrate = 0; dmaCount = 0; diff --git a/src/backend/core/mmio/PIF.cpp b/src/backend/core/mmio/PIF.cpp index 8e1f13c8..0c32e626 100644 --- a/src/backend/core/mmio/PIF.cpp +++ b/src/backend/core/mmio/PIF.cpp @@ -26,7 +26,7 @@ void PIF::Reset() { } } -void PIF::LoadMempak(std::string path) { +void PIF::LoadMempak(const std::string& path) { mempakPath = fs::path(path).replace_extension(".mempak").string(); std::error_code error; if (mempak.is_mapped()) { @@ -72,7 +72,7 @@ FORCE_INLINE size_t getSaveSize(SaveType saveType) { } } -void PIF::LoadEeprom(SaveType saveType, std::string path) { +void PIF::LoadEeprom(SaveType saveType, const std::string& path) { if(saveType == SAVE_EEPROM_16k || saveType == SAVE_EEPROM_4k) { eepromPath = fs::path(path).replace_extension(".eeprom").string(); std::error_code error; @@ -443,20 +443,20 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { case CIC_NUS_6101: regs.gpr[0] = 0x0000000000000000; regs.gpr[1] = 0x0000000000000000; - regs.gpr[2] = 0xFFFFFFFFDF6445CC; - regs.gpr[3] = 0xFFFFFFFFDF6445CC; + regs.gpr[2] = 0xFFFFFFFFDF6445CCll; + regs.gpr[3] = 0xFFFFFFFFDF6445CCll; regs.gpr[4] = 0x00000000000045CC; regs.gpr[5] = 0x0000000073EE317A; - regs.gpr[6] = 0xFFFFFFFFA4001F0C; - regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[6] = 0xFFFFFFFFA4001F0Cll; + regs.gpr[7] = 0xFFFFFFFFA4001F08ll; 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[11] = 0xFFFFFFFFA4000040ll; + regs.gpr[12] = 0xFFFFFFFFC7601FACll; + regs.gpr[13] = 0xFFFFFFFFC7601FACll; + regs.gpr[14] = 0xFFFFFFFFB48E2ED6ll; + regs.gpr[15] = 0xFFFFFFFFBA1A7D4Bll; regs.gpr[16] = 0x0000000000000000; regs.gpr[17] = 0x0000000000000000; regs.gpr[18] = 0x0000000000000000; @@ -465,16 +465,16 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { regs.gpr[21] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000001; regs.gpr[24] = 0x0000000000000002; - regs.gpr[25] = 0xFFFFFFFF905F4718; + regs.gpr[25] = 0xFFFFFFFF905F4718ll; regs.gpr[26] = 0x0000000000000000; regs.gpr[27] = 0x0000000000000000; regs.gpr[28] = 0x0000000000000000; - regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[29] = 0xFFFFFFFFA4001FF0ll; regs.gpr[30] = 0x0000000000000000; - regs.gpr[31] = 0xFFFFFFFFA4001550; + regs.gpr[31] = 0xFFFFFFFFA4001550ll; - regs.lo = 0xFFFFFFFFBA1A7D4B; - regs.hi = 0xFFFFFFFF997EC317; + regs.lo = 0xFFFFFFFFBA1A7D4Bll; + regs.hi = 0xFFFFFFFF997EC317ll; break; case CIC_NUS_7102: regs.gpr[0] = 0x0000000000000000; @@ -483,16 +483,16 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { regs.gpr[3] = 0x000000001E324416; regs.gpr[4] = 0x0000000000004416; regs.gpr[5] = 0x000000000EC5D9AF; - regs.gpr[6] = 0xFFFFFFFFA4001F0C; - regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[6] = 0xFFFFFFFFA4001F0Cll; + regs.gpr[7] = 0xFFFFFFFFA4001F08ll; regs.gpr[8] = 0x00000000000000C0; regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = 0xFFFFFFFFA4000040; + regs.gpr[11] = 0xFFFFFFFFA4000040ll; regs.gpr[12] = 0x00000000495D3D7B; - regs.gpr[13] = 0xFFFFFFFF8B3DFA1E; + regs.gpr[13] = 0xFFFFFFFF8B3DFA1Ell; regs.gpr[14] = 0x000000004798E4D4; - regs.gpr[15] = 0xFFFFFFFFF1D30682; + regs.gpr[15] = 0xFFFFFFFFF1D30682ll; regs.gpr[16] = 0x0000000000000000; regs.gpr[17] = 0x0000000000000000; regs.gpr[18] = 0x0000000000000000; @@ -506,11 +506,11 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { regs.gpr[26] = 0x0000000000000000; regs.gpr[27] = 0x0000000000000000; regs.gpr[28] = 0x0000000000000000; - regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[29] = 0xFFFFFFFFA4001FF0ll; regs.gpr[30] = 0x0000000000000000; - regs.gpr[31] = 0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554ll; - regs.lo = 0xFFFFFFFFF1D30682; + regs.lo = 0xFFFFFFFFF1D30682ll; regs.hi = 0x0000000010054A98; break; case CIC_NUS_6102_7101: @@ -519,14 +519,14 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { 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[5] = 0xFFFFFFFFC0F1D859ll; + regs.gpr[6] = 0xFFFFFFFFA4001F0Cll; + regs.gpr[7] = 0xFFFFFFFFA4001F08ll; regs.gpr[8] = 0x00000000000000C0; regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = 0xFFFFFFFFA4000040; - regs.gpr[12] = 0xFFFFFFFFED10D0B3; + regs.gpr[11] = 0xFFFFFFFFA4000040ll; + regs.gpr[12] = 0xFFFFFFFFED10D0B3ll; regs.gpr[13] = 0x000000001402A4CC; regs.gpr[14] = 0x000000002DE108EA; regs.gpr[15] = 0x000000003103E121; @@ -538,13 +538,13 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { regs.gpr[21] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000000; regs.gpr[24] = 0x0000000000000000; - regs.gpr[25] = 0xFFFFFFFF9DEBB54F; + regs.gpr[25] = 0xFFFFFFFF9DEBB54Fll; regs.gpr[26] = 0x0000000000000000; regs.gpr[27] = 0x0000000000000000; regs.gpr[28] = 0x0000000000000000; - regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[29] = 0xFFFFFFFFA4001FF0ll; regs.gpr[30] = 0x0000000000000000; - regs.gpr[31] = 0xFFFFFFFFA4001550; + regs.gpr[31] = 0xFFFFFFFFA4001550ll; regs.hi = 0x000000003FC18657; regs.lo = 0x000000003103E121; @@ -552,7 +552,7 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { if (pal) { regs.gpr[20] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000006; - regs.gpr[31] = 0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554ll; } break; case CIC_NUS_6103_7103: @@ -561,15 +561,15 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { 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[5] = 0xFFFFFFFFD4646273ll; + regs.gpr[6] = 0xFFFFFFFFA4001F0Cll; + regs.gpr[7] = 0xFFFFFFFFA4001F08ll; regs.gpr[8] = 0x00000000000000C0; regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = 0xFFFFFFFFA4000040; - regs.gpr[12] = 0xFFFFFFFFCE9DFBF7; - regs.gpr[13] = 0xFFFFFFFFCE9DFBF7; + regs.gpr[11] = 0xFFFFFFFFA4000040ll; + regs.gpr[12] = 0xFFFFFFFFCE9DFBF7ll; + regs.gpr[13] = 0xFFFFFFFFCE9DFBF7ll; regs.gpr[14] = 0x000000001AF99984; regs.gpr[15] = 0x0000000018B63D28; regs.gpr[16] = 0x0000000000000000; @@ -580,13 +580,13 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { regs.gpr[21] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000000; regs.gpr[24] = 0x0000000000000000; - regs.gpr[25] = 0xFFFFFFFF825B21C9; + regs.gpr[25] = 0xFFFFFFFF825B21C9ll; regs.gpr[26] = 0x0000000000000000; regs.gpr[27] = 0x0000000000000000; regs.gpr[28] = 0x0000000000000000; - regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[29] = 0xFFFFFFFFA4001FF0ll; regs.gpr[30] = 0x0000000000000000; - regs.gpr[31] = 0xFFFFFFFFA4001550; + regs.gpr[31] = 0xFFFFFFFFA4001550ll; regs.lo = 0x0000000018B63D28; regs.hi = 0x00000000625C2BBE; @@ -594,23 +594,23 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { if (pal) { regs.gpr[20] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000006; - regs.gpr[31] = 0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554ll; } break; case CIC_NUS_6105_7105: regs.gpr[0] = 0x0000000000000000; regs.gpr[1] = 0x0000000000000000; - regs.gpr[2] = 0xFFFFFFFFF58B0FBF; - regs.gpr[3] = 0xFFFFFFFFF58B0FBF; + regs.gpr[2] = 0xFFFFFFFFF58B0FBFll; + regs.gpr[3] = 0xFFFFFFFFF58B0FBFll; regs.gpr[4] = 0x0000000000000FBF; - regs.gpr[5] = 0xFFFFFFFFDECAAAD1; - regs.gpr[6] = 0xFFFFFFFFA4001F0C; - regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[5] = 0xFFFFFFFFDECAAAD1ll; + regs.gpr[6] = 0xFFFFFFFFA4001F0Cll; + regs.gpr[7] = 0xFFFFFFFFA4001F08ll; regs.gpr[8] = 0x00000000000000C0; regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = 0xFFFFFFFFA4000040; - regs.gpr[12] = 0xFFFFFFFF9651F81E; + regs.gpr[11] = 0xFFFFFFFFA4000040ll; + regs.gpr[12] = 0xFFFFFFFF9651F81Ell; regs.gpr[13] = 0x000000002D42AAC5; regs.gpr[14] = 0x00000000489B52CF; regs.gpr[15] = 0x0000000056584D60; @@ -622,13 +622,13 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { regs.gpr[21] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000000; regs.gpr[24] = 0x0000000000000002; - regs.gpr[25] = 0xFFFFFFFFCDCE565F; + regs.gpr[25] = 0xFFFFFFFFCDCE565Fll; regs.gpr[26] = 0x0000000000000000; regs.gpr[27] = 0x0000000000000000; regs.gpr[28] = 0x0000000000000000; - regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[29] = 0xFFFFFFFFA4001FF0ll; regs.gpr[30] = 0x0000000000000000; - regs.gpr[31] = 0xFFFFFFFFA4001550; + regs.gpr[31] = 0xFFFFFFFFA4001550ll; regs.lo = 0x0000000056584D60; regs.hi = 0x000000004BE35D1F; @@ -636,7 +636,7 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { if (pal) { regs.gpr[20] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000006; - regs.gpr[31] = 0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554ll; } mem.Write32(regs, IMEM_REGION_START + 0x00, 0x3C0DBFC0); @@ -651,18 +651,18 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { case CIC_NUS_6106_7106: regs.gpr[0] = 0x0000000000000000; regs.gpr[1] = 0x0000000000000000; - regs.gpr[2] = 0xFFFFFFFFA95930A4; - regs.gpr[3] = 0xFFFFFFFFA95930A4; + regs.gpr[2] = 0xFFFFFFFFA95930A4ll; + regs.gpr[3] = 0xFFFFFFFFA95930A4ll; regs.gpr[4] = 0x00000000000030A4; - regs.gpr[5] = 0xFFFFFFFFB04DC903; - regs.gpr[6] = 0xFFFFFFFFA4001F0C; - regs.gpr[7] = 0xFFFFFFFFA4001F08; + regs.gpr[5] = 0xFFFFFFFFB04DC903ll; + regs.gpr[6] = 0xFFFFFFFFA4001F0Cll; + regs.gpr[7] = 0xFFFFFFFFA4001F08ll; regs.gpr[8] = 0x00000000000000C0; regs.gpr[9] = 0x0000000000000000; regs.gpr[10] = 0x0000000000000040; - regs.gpr[11] = 0xFFFFFFFFA4000040; - regs.gpr[12] = 0xFFFFFFFFBCB59510; - regs.gpr[13] = 0xFFFFFFFFBCB59510; + regs.gpr[11] = 0xFFFFFFFFA4000040ll; + regs.gpr[12] = 0xFFFFFFFFBCB59510ll; + regs.gpr[13] = 0xFFFFFFFFBCB59510ll; regs.gpr[14] = 0x000000000CF85C13; regs.gpr[15] = 0x000000007A3C07F4; regs.gpr[16] = 0x0000000000000000; @@ -677,16 +677,16 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { regs.gpr[26] = 0x0000000000000000; regs.gpr[27] = 0x0000000000000000; regs.gpr[28] = 0x0000000000000000; - regs.gpr[29] = 0xFFFFFFFFA4001FF0; + regs.gpr[29] = 0xFFFFFFFFA4001FF0ll; regs.gpr[30] = 0x0000000000000000; - regs.gpr[31] = 0xFFFFFFFFA4001550; + regs.gpr[31] = 0xFFFFFFFFA4001550ll; regs.lo = 0x000000007A3C07F4; regs.hi = 0x0000000023953898; if (pal) { regs.gpr[20] = 0x0000000000000000; regs.gpr[23] = 0x0000000000000006; - regs.gpr[31] = 0xFFFFFFFFA4001554; + regs.gpr[31] = 0xFFFFFFFFA4001554ll; } break; } @@ -695,7 +695,7 @@ void PIF::DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType) { regs.cop0.Reset(); mem.Write32(regs, 0x04300004, 0x01010101); memcpy(mem.mmio.rsp.dmem, mem.rom.cart, 0x1000); - regs.SetPC32(0xA4000040); + regs.SetPC32(s32(0xA4000040)); } void PIF::ExecutePIF(Mem& mem, Registers& regs) { diff --git a/src/backend/core/mmio/PIF.hpp b/src/backend/core/mmio/PIF.hpp index 359c32c7..b1132d57 100644 --- a/src/backend/core/mmio/PIF.hpp +++ b/src/backend/core/mmio/PIF.hpp @@ -93,13 +93,13 @@ struct PIF { PIF() = default; ~PIF() = default; void Reset(); - void LoadMempak(std::string); - void LoadEeprom(SaveType, std::string); + void LoadMempak(const std::string&); + void LoadEeprom(SaveType, const std::string&); void ProcessCommands(Mem&); void InitDevices(SaveType); void CICChallenge(); - void ExecutePIF(Mem& mem, Registers& regs); - void DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType); + static void ExecutePIF(Mem& mem, Registers& regs); + static void DoPIFHLE(Mem& mem, Registers& regs, bool pal, CICType cicType); void UpdateController(); bool ReadButtons(u8*) const; void ControllerID(u8*) const; diff --git a/src/backend/core/mmio/SI.hpp b/src/backend/core/mmio/SI.hpp index 7d5ebd38..37732eb1 100644 --- a/src/backend/core/mmio/SI.hpp +++ b/src/backend/core/mmio/SI.hpp @@ -32,6 +32,7 @@ struct SI { PIF pif; }; -static void DMA(Mem& mem, Registers& regs); +// just to silence warning, it is used. +[[maybe_unused]] static void DMA(Mem& mem, Registers& regs); #define SI_DMA_DELAY (65536 * 2) } \ No newline at end of file diff --git a/src/backend/core/mmio/VI.hpp b/src/backend/core/mmio/VI.hpp index 95992c90..d7a71691 100644 --- a/src/backend/core/mmio/VI.hpp +++ b/src/backend/core/mmio/VI.hpp @@ -85,13 +85,13 @@ struct VI { VIStatus status{}; VIBurst burst{}; u32 vburst{}; - u32 origin, width, current; - u32 vsync, hsync, intr; + u32 origin{}, width{}, current{}; + u32 vsync{}, hsync{}, intr{}; AxisStart hstart{}, vstart{}; bool isPal = false; int swaps{}; - int numHalflines; - int numFields; - int cyclesPerHalfline; + int numHalflines{}; + int numFields{}; + int cyclesPerHalfline{}; }; } // backend diff --git a/src/backend/core/registers/Cop0.cpp b/src/backend/core/registers/Cop0.cpp index cfa19f00..4bbbfc3a 100644 --- a/src/backend/core/registers/Cop0.cpp +++ b/src/backend/core/registers/Cop0.cpp @@ -16,8 +16,8 @@ void Cop0::Reset() { status.fr = 1; PRId = 0x00000B22; Config = 0x7006E463; - EPC = 0xFFFFFFFFFFFFFFFF; - ErrorEPC = 0xFFFFFFFFFFFFFFFF; + EPC = 0xFFFFFFFFFFFFFFFFll; + ErrorEPC = 0xFFFFFFFFFFFFFFFFll; wired = 0; index = 63; badVaddr = 0xFFFFFFFFFFFFFFFF; @@ -58,7 +58,7 @@ u32 Cop0::GetReg32(u8 addr) { } } -u64 Cop0::GetReg64(u8 addr) { +u64 Cop0::GetReg64(u8 addr) const { switch(addr) { case COP0_REG_ENTRYLO0: return entryLo0.raw; case COP0_REG_ENTRYLO1: return entryLo1.raw; @@ -280,15 +280,15 @@ void FireException(Registers& regs, ExceptionCode code, int cop, bool useOldPC) case ExceptionCode::ReservedInstruction: case ExceptionCode::CoprocessorUnusable: case ExceptionCode::Overflow: case ExceptionCode::Trap: case ExceptionCode::FloatingPointError: case ExceptionCode::Watch: - regs.SetPC32(0x80000180); + regs.SetPC32(s32(0x80000180)); break; case ExceptionCode::TLBLoad: case ExceptionCode::TLBStore: if(old_exl || regs.cop0.tlbError == INVALID) { - regs.SetPC32(0x80000180); + regs.SetPC32(s32(0x80000180)); } else if(Is64BitAddressing(regs.cop0, regs.cop0.badVaddr)) { - regs.SetPC32(0x80000080); + regs.SetPC32(s32(0x80000080)); } else { - regs.SetPC32(0x80000000); + regs.SetPC32(s32(0x80000000)); } break; default: Util::panic("Unhandled exception! {}", static_cast(code)); diff --git a/src/backend/core/registers/Cop0.hpp b/src/backend/core/registers/Cop0.hpp index 78a7a772..b96072c0 100644 --- a/src/backend/core/registers/Cop0.hpp +++ b/src/backend/core/registers/Cop0.hpp @@ -203,34 +203,34 @@ struct Cop0 { Cop0(); u32 GetReg32(u8); - u64 GetReg64(u8); + u64 GetReg64(u8) const; void SetReg32(u8, u32); void SetReg64(u8, u64); void Reset(); - bool kernel_mode; - bool supervisor_mode; - bool user_mode; - bool is_64bit_addressing; - bool llbit; + bool kernel_mode{}; + bool supervisor_mode{}; + bool user_mode{}; + bool is_64bit_addressing{}; + bool llbit{}; PageMask pageMask{}; EntryHi entryHi{}; EntryLo entryLo0{}, entryLo1{}; - u32 index; + u32 index{}; Cop0Context context{}; - u32 wired, r7{}; + u32 wired{}, r7{}; u64 badVaddr{}, count{}; u32 compare{}; Cop0Status status{}; Cop0Cause cause{}; - s64 EPC; - u32 PRId, Config, LLAddr{}, WatchLo{}, WatchHi{}; + s64 EPC{}; + u32 PRId{}, Config{}, LLAddr{}, WatchLo{}, WatchHi{}; Cop0XContext xcontext{}; u32 r21{}, r22{}, r23{}, r24{}, r25{}, ParityError{}, CacheError{}, TagLo{}, TagHi{}; - s64 ErrorEPC; + s64 ErrorEPC{}; u32 r31{}; TLBEntry tlb[32]{}; TLBError tlbError = NONE; diff --git a/src/backend/core/registers/Cop1.cpp b/src/backend/core/registers/Cop1.cpp index 1bb03e53..2849d32c 100644 --- a/src/backend/core/registers/Cop1.cpp +++ b/src/backend/core/registers/Cop1.cpp @@ -150,10 +150,7 @@ void Cop1::decode(Registers& regs, Interpreter& cpu, u32 instr) { case 0x06: movl(regs, instr); break; case 0x20: cvtsl(regs, instr); break; case 0x21: cvtdl(regs, instr); break; - case 0x24: - FireException(regs, ExceptionCode::ReservedInstruction, 1, true); - break; - case 0x25: + case 0x24: case 0x25: FireException(regs, ExceptionCode::ReservedInstruction, 1, true); break; default: Util::panic("Unimplemented COP1 function L[{} {}] ({:08X}) ({:016X})", mask_fun >> 3, mask_fun & 7, instr, (u64)regs.oldPC); diff --git a/src/backend/core/registers/Registers.hpp b/src/backend/core/registers/Registers.hpp index a82769cf..71da4539 100644 --- a/src/backend/core/registers/Registers.hpp +++ b/src/backend/core/registers/Registers.hpp @@ -7,12 +7,12 @@ struct Registers { void Reset(); void SetPC64(s64); void SetPC32(s32); - s64 gpr[32]; + s64 gpr[32]{}; Cop0 cop0; Cop1 cop1; - s64 oldPC, pc, nextPC; - s64 hi, lo; - bool prevDelaySlot, delaySlot; + s64 oldPC{}, pc{}, nextPC{}; + s64 hi{}, lo{}; + bool prevDelaySlot{}, delaySlot{}; int steps = 0; }; } diff --git a/src/backend/core/rsp/decode.cpp b/src/backend/core/rsp/decode.cpp index dd129b6d..89f26dee 100644 --- a/src/backend/core/rsp/decode.cpp +++ b/src/backend/core/rsp/decode.cpp @@ -136,16 +136,10 @@ FORCE_INLINE void cop2(RSP& rsp, u32 instr) { case 0x13: rsp.vabs(instr); break; case 0x14: rsp.vaddc(instr); break; case 0x15: rsp.vsubc(instr); break; - case 0x16: rsp.vzero(instr); break; - case 0x17: rsp.vzero(instr); break; - case 0x18: rsp.vzero(instr); break; - case 0x19: rsp.vzero(instr); break; - case 0x1A: rsp.vzero(instr); break; - case 0x1B: rsp.vzero(instr); break; - case 0x1C: rsp.vzero(instr); break; + case 0x16 ... 0x1C: case 0x1E: case 0x1F: case 0x2E: case 0x2F: + rsp.vzero(instr); + break; case 0x1D: rsp.vsar(instr); break; - case 0x1E: rsp.vzero(instr); break; - case 0x1F: rsp.vzero(instr); break; case 0x20: rsp.vlt(instr); break; case 0x21: rsp.veq(instr); break; case 0x22: rsp.vne(instr); break; @@ -160,8 +154,6 @@ FORCE_INLINE void cop2(RSP& rsp, u32 instr) { case 0x2B: rsp.vnor(instr); break; case 0x2C: rsp.vxor(instr); break; case 0x2D: rsp.vnxor(instr); break; - case 0x2E: rsp.vzero(instr); break; - case 0x2F: rsp.vzero(instr); break; case 0x31: rsp.vrcpl(instr); break; case 0x35: rsp.vrsql(instr); break; case 0x32: case 0x36: @@ -196,7 +188,6 @@ FORCE_INLINE void cop0(Registers& regs, Mem& mem, u32 instr) { void RSP::Exec(Registers ®s, Mem& mem, u32 instr) { u8 mask = (instr >> 26) & 0x3F; MMIO& mmio = mem.mmio; - RDP& rdp = mmio.rdp; MI& mi = mmio.mi; //Util::print("RSP {:02X}", mask); switch(mask) { diff --git a/src/backend/core/rsp/instructions.cpp b/src/backend/core/rsp/instructions.cpp index 32f3bd25..d3059164 100644 --- a/src/backend/core/rsp/instructions.cpp +++ b/src/backend/core/rsp/instructions.cpp @@ -98,7 +98,7 @@ FORCE_INLINE VPR Broadcast(const VPR& vt, int l0, int l1, int l2, int l3, int l4 FORCE_INLINE VPR GetVTE(const VPR& vt, u8 e) { VPR vte{}; e &= 0xf; - switch(e) { + switch(e & 0xf) { case 0 ... 1: return vt; case 2: vte.single = _mm_shufflehi_epi16(_mm_shufflelo_epi16(vt.single, 0xF5), 0xF5); break; case 3: vte.single = _mm_shufflehi_epi16(_mm_shufflelo_epi16(vt.single, 0xA0), 0xA0); break; @@ -487,7 +487,7 @@ void RSP::lfv(u32 instr) { int end = std::min(start + 8, 16); // TODO: should be possible to do with one loop - VPR tmp; + VPR tmp{}; for (u32 offset = 0; offset < 4; offset++) { tmp.element[ELEMENT_INDEX(offset + 0)] = ReadByte(address + (base + offset * 4 + 0 & 15)) << 7; tmp.element[ELEMENT_INDEX(offset + 4)] = ReadByte(address + (base + offset * 4 + 8 & 15)) << 7; diff --git a/src/frontend/imgui/Settings.cpp b/src/frontend/imgui/Settings.cpp index 48051021..bb47d558 100644 --- a/src/frontend/imgui/Settings.cpp +++ b/src/frontend/imgui/Settings.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include @@ -12,17 +11,17 @@ namespace fs = std::filesystem; auto name##Entry = settings[param1][param2]; \ if(!name##Entry.empty()) { \ auto value = name##Entry.get(); \ - name = value; \ + (name) = value; \ } else { \ settingsFile.clear(); \ settings[param1][param2] = defaultVal; \ settingsFile << settings; \ - name = defaultVal; \ + (name) = defaultVal; \ } \ } while(0) -Settings::Settings(n64::Core& core) { +Settings::Settings() { auto fileExists = fs::exists("resources/settings.json"); std::fstream settingsFile; if(fileExists) { diff --git a/src/frontend/imgui/Settings.hpp b/src/frontend/imgui/Settings.hpp index 48822d8a..d3c55203 100644 --- a/src/frontend/imgui/Settings.hpp +++ b/src/frontend/imgui/Settings.hpp @@ -6,12 +6,12 @@ namespace n64 { struct Core; } using namespace nlohmann; struct Settings { - Settings(n64::Core&); + Settings(); ~Settings(); - FORCE_INLINE float GetVolumeL() const { return volumeL; }; - FORCE_INLINE float GetVolumeR() const { return volumeR; }; - FORCE_INLINE bool GetLockChannels() const { return lockChannels; } + [[nodiscard]] FORCE_INLINE float GetVolumeL() const { return volumeL; }; + [[nodiscard]] FORCE_INLINE float GetVolumeR() const { return volumeR; }; + [[nodiscard]] FORCE_INLINE bool GetLockChannels() const { return lockChannels; } void RenderWidget(bool& show); private: diff --git a/src/frontend/imgui/Window.cpp b/src/frontend/imgui/Window.cpp index 73c35cca..1a92c944 100644 --- a/src/frontend/imgui/Window.cpp +++ b/src/frontend/imgui/Window.cpp @@ -9,7 +9,7 @@ VkInstance instance{}; namespace fs = std::filesystem; -Window::Window(n64::Core& core) : settings(core) { +Window::Window(n64::Core& core) : settings() { InitSDL(); InitParallelRDP(core.cpu.mem.GetRDRAM(), window); InitImgui();