From 17f7ab06a4a75fd99821657474102d4003f6bd15 Mon Sep 17 00:00:00 2001 From: Simone Coco <91993281+CocoSimone@users.noreply.github.com> Date: Wed, 3 Aug 2022 18:25:59 +0200 Subject: [PATCH] Fix all linking errors, now figure out segfault on vkCreateInstance (Window.cpp:45) --- README.md | 2 +- external/parallel-rdp-standalone/CMakeLists.txt | 8 ++++++-- .../ParallelRDPWrapper.cpp | 0 .../ParallelRDPWrapper.hpp | 0 src/cores/n64/CMakeLists.txt | 2 -- src/cores/n64/Core.cpp | 2 +- src/cores/n64/core/Mem.cpp | 16 ++++++++++++++++ src/cores/n64/core/cpu/registers/Cop0.cpp | 10 ++++++++++ src/frontend/imgui/Window.cpp | 7 ++++--- 9 files changed, 38 insertions(+), 9 deletions(-) rename {src/cores/n64 => external/parallel-rdp-standalone}/ParallelRDPWrapper.cpp (100%) rename {src/cores/n64 => external/parallel-rdp-standalone}/ParallelRDPWrapper.hpp (100%) diff --git a/README.md b/README.md index 9f09d63c..6f42a6da 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,4 @@ [![CodeFactor](https://www.codefactor.io/repository/github/cocosimone/natsukashii/badge/master)](https://www.codefactor.io/repository/github/cocosimone/natsukashii/overview/master) [![build](https://github.com/CocoSimone/natsukashii/actions/workflows/build.yml/badge.svg)](https://github.com/CocoSimone/natsukashii/actions/workflows/build.yml) -Multi-system emulator in its infancy \ No newline at end of file +Multi-system emulator in its infancy diff --git a/external/parallel-rdp-standalone/CMakeLists.txt b/external/parallel-rdp-standalone/CMakeLists.txt index 36e7fd84..4e7061b7 100644 --- a/external/parallel-rdp-standalone/CMakeLists.txt +++ b/external/parallel-rdp-standalone/CMakeLists.txt @@ -1,10 +1,12 @@ cmake_minimum_required(VERSION 3.20) project(parallel-rdp) -file(GLOB_RECURSE parallel-rdp-cpp parallel-rdp-standalone/parallel-rdp/*.cpp) +file(GLOB_RECURSE parallel-rdp-cpp parallel-rdp/*.cpp) add_library(parallel-rdp ${parallel-rdp-cpp} + ParallelRDPWrapper.cpp + ParallelRDPWrapper.hpp vulkan/buffer.cpp vulkan/buffer_pool.cpp vulkan/command_buffer.cpp @@ -53,7 +55,9 @@ target_include_directories(parallel-rdp PUBLIC vulkan vulkan-headers/include util - ../src/core/n64 + ../../src/cores/ + . + .. ) if(WIN32) diff --git a/src/cores/n64/ParallelRDPWrapper.cpp b/external/parallel-rdp-standalone/ParallelRDPWrapper.cpp similarity index 100% rename from src/cores/n64/ParallelRDPWrapper.cpp rename to external/parallel-rdp-standalone/ParallelRDPWrapper.cpp diff --git a/src/cores/n64/ParallelRDPWrapper.hpp b/external/parallel-rdp-standalone/ParallelRDPWrapper.hpp similarity index 100% rename from src/cores/n64/ParallelRDPWrapper.hpp rename to external/parallel-rdp-standalone/ParallelRDPWrapper.hpp diff --git a/src/cores/n64/CMakeLists.txt b/src/cores/n64/CMakeLists.txt index a7669e71..16d9f8d1 100644 --- a/src/cores/n64/CMakeLists.txt +++ b/src/cores/n64/CMakeLists.txt @@ -4,8 +4,6 @@ project(n64) add_subdirectory(core) add_library(n64 - ParallelRDPWrapper.hpp - ParallelRDPWrapper.cpp Core.cpp Core.hpp memory_regions.hpp) diff --git a/src/cores/n64/Core.cpp b/src/cores/n64/Core.cpp index c5da4ef4..510a3f67 100644 --- a/src/cores/n64/Core.cpp +++ b/src/cores/n64/Core.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include "parallel-rdp-standalone/ParallelRDPWrapper.hpp" namespace n64 { Core::Core(const std::string& rom) { diff --git a/src/cores/n64/core/Mem.cpp b/src/cores/n64/core/Mem.cpp index 8cd49802..e1cc95d1 100644 --- a/src/cores/n64/core/Mem.cpp +++ b/src/cores/n64/core/Mem.cpp @@ -85,6 +85,14 @@ template u8 Mem::Read(Registers& regs, u32 vaddr, s64 pc); template u16 Mem::Read(Registers& regs, u32 vaddr, s64 pc); template u32 Mem::Read(Registers& regs, u32 vaddr, s64 pc); template u64 Mem::Read(Registers& regs, u32 vaddr, s64 pc); +template s8 Mem::Read(Registers& regs, u32 vaddr, s64 pc); +template s16 Mem::Read(Registers& regs, u32 vaddr, s64 pc); +template s32 Mem::Read(Registers& regs, u32 vaddr, s64 pc); +template s64 Mem::Read(Registers& regs, u32 vaddr, s64 pc); +template s8 Mem::Read(Registers& regs, u32 vaddr, s64 pc); +template s16 Mem::Read(Registers& regs, u32 vaddr, s64 pc); +template s32 Mem::Read(Registers& regs, u32 vaddr, s64 pc); +template s64 Mem::Read(Registers& regs, u32 vaddr, s64 pc); template void Mem::Write(Registers& regs, u32 vaddr, T val, s64 pc) { @@ -119,4 +127,12 @@ template void Mem::Write(Registers& regs, u32 vaddr, u8 val, s64 pc); template void Mem::Write(Registers& regs, u32 vaddr, u16 val, s64 pc); template void Mem::Write(Registers& regs, u32 vaddr, u32 val, s64 pc); template void Mem::Write(Registers& regs, u32 vaddr, u64 val, s64 pc); +template void Mem::Write(Registers& regs, u32 vaddr, s8 val, s64 pc); +template void Mem::Write(Registers& regs, u32 vaddr, s16 val, s64 pc); +template void Mem::Write(Registers& regs, u32 vaddr, s32 val, s64 pc); +template void Mem::Write(Registers& regs, u32 vaddr, s64 val, s64 pc); +template void Mem::Write(Registers& regs, u32 vaddr, s8 val, s64 pc); +template void Mem::Write(Registers& regs, u32 vaddr, s16 val, s64 pc); +template void Mem::Write(Registers& regs, u32 vaddr, s32 val, s64 pc); +template void Mem::Write(Registers& regs, u32 vaddr, s64 val, s64 pc); } \ No newline at end of file diff --git a/src/cores/n64/core/cpu/registers/Cop0.cpp b/src/cores/n64/core/cpu/registers/Cop0.cpp index 23c73da6..dd9290ae 100644 --- a/src/cores/n64/core/cpu/registers/Cop0.cpp +++ b/src/cores/n64/core/cpu/registers/Cop0.cpp @@ -56,6 +56,11 @@ T Cop0::GetReg(u8 addr) { } } +template u32 Cop0::GetReg(u8 addr); +template u64 Cop0::GetReg(u8 addr); +template s32 Cop0::GetReg(u8 addr); +template s64 Cop0::GetReg(u8 addr); + template void Cop0::SetReg(u8 addr, T value) { switch(addr) { @@ -102,6 +107,11 @@ void Cop0::SetReg(u8 addr, T value) { } } +template void Cop0::SetReg(u8 addr, u32 value); +template void Cop0::SetReg(u8 addr, u64 value); +template void Cop0::SetReg(u8 addr, s32 value); +template void Cop0::SetReg(u8 addr, s64 value); + #define vpn(addr, PageMask) (((((addr) & 0xFFFFFFFFFF) | (((addr) >> 22) & 0x30000000000)) & ~((PageMask) | 0x1FFF))) TLBEntry* TLBTryMatch(Registers& regs, u32 vaddr, int* match) { diff --git a/src/frontend/imgui/Window.cpp b/src/frontend/imgui/Window.cpp index 97e748b4..5d06be43 100644 --- a/src/frontend/imgui/Window.cpp +++ b/src/frontend/imgui/Window.cpp @@ -376,9 +376,10 @@ void Window::Update(std::unique_ptr& core) { } } if(ImGui::MenuItem("Game Boy")) { - ImGui::BeginPopup("##unimplemented_Core"); - ImGui::TextColored({1.0, 0.0, 0.0, 0.7}, "Unimplemented core 'Game Boy'!"); - ImGui::EndPopup(); + if(ImGui::BeginPopup("##unimplemented_Core")) { + ImGui::TextColored({1.0, 0.0, 0.0, 0.7}, "Unimplemented core 'Game Boy'!"); + ImGui::EndPopup(); + } } ImGui::EndMenu(); }