diff --git a/Core/Console.cpp b/Core/Console.cpp index 67d57c5..f6131cb 100644 --- a/Core/Console.cpp +++ b/Core/Console.cpp @@ -15,6 +15,7 @@ #include "DebugHud.h" #include "FrameLimiter.h" #include "MessageManager.h" +#include "KeyManager.h" #include "../Utilities/Timer.h" #include "../Utilities/VirtualFile.h" #include "../Utilities/PlatformUtilities.h" @@ -57,13 +58,17 @@ void Console::Run() PlatformUtilities::EnableHighResolutionTimer(); + uint32_t keyCode = KeyManager::GetKeyCode("Tab"); + auto lock = _runLock.AcquireSafe(); while(!_stopFlag) { _cpu->Exec(); if(previousFrameCount != _ppu->GetFrameCount()) { - frameLimiter.ProcessFrame(); - frameLimiter.WaitForNextFrame(); + if(!KeyManager::IsKeyPressed(keyCode)) { + frameLimiter.ProcessFrame(); + frameLimiter.WaitForNextFrame(); + } previousFrameCount = _ppu->GetFrameCount(); } } @@ -90,6 +95,8 @@ void Console::Stop() _controlManager.reset(); _memoryManager.reset(); _dmaController.reset(); + + _soundMixer->StopAudio(); } void Console::LoadRom(VirtualFile romFile, VirtualFile patchFile) @@ -99,23 +106,34 @@ void Console::LoadRom(VirtualFile romFile, VirtualFile patchFile) shared_ptr cart = BaseCartridge::CreateCartridge(romFile, patchFile); if(cart) { MessageManager::ClearLog(); + + vector spcRomData; + VirtualFile spcBios("spc700.rom"); + if(spcBios.IsValid()) { + spcBios.ReadFile(spcRomData); + } else { + MessageManager::Log("[SPC] spc700.rom not found, cannot launch game."); + return; + } + _internalRegisters.reset(new InternalRegisters(shared_from_this())); _ppu.reset(new Ppu(shared_from_this())); - _spc.reset(new Spc(shared_from_this())); + _spc.reset(new Spc(shared_from_this(), spcRomData)); _cart = cart; _controlManager.reset(new ControlManager(shared_from_this())); _memoryManager.reset(new MemoryManager()); - _dmaController.reset(new DmaController(_memoryManager.get())); + _dmaController.reset(new DmaController(shared_from_this())); _memoryManager->Initialize(shared_from_this()); _cpu.reset(new Cpu(_memoryManager)); + _memoryManager->IncrementMasterClockValue<160>(); //if(_debugger) { //Reset debugger if it was running before - auto lock = _debuggerLock.AcquireSafe(); - _debugger.reset(); - GetDebugger(); + //auto lock = _debuggerLock.AcquireSafe(); + //_debugger.reset(); + //GetDebugger(); //} } } diff --git a/Core/Spc.cpp b/Core/Spc.cpp index 32a3ff5..027f342 100644 --- a/Core/Spc.cpp +++ b/Core/Spc.cpp @@ -4,16 +4,12 @@ #include "Console.h" #include "MemoryManager.h" #include "SoundMixer.h" -#include "../Utilities/VirtualFile.h" -Spc::Spc(shared_ptr console) +Spc::Spc(shared_ptr console, vector &spcRomData) { _console = console; - - vector fileData; - VirtualFile spcBios("spc700.rom"); - spcBios.ReadFile(fileData); - memcpy(_spcBios, fileData.data(), 64); + + memcpy(_spcBios, spcRomData.data(), 64); _soundBuffer = new int16_t[Spc::SampleBufferSize]; diff --git a/Core/Spc.h b/Core/Spc.h index 22d4267..dc91469 100644 --- a/Core/Spc.h +++ b/Core/Spc.h @@ -18,7 +18,7 @@ private: int GetSpcTime(); public: - Spc(shared_ptr console); + Spc(shared_ptr console, vector &spcRomData); ~Spc(); uint8_t Read(uint16_t addr); diff --git a/UI/UI.csproj b/UI/UI.csproj index 6667c07..4cc523b 100644 --- a/UI/UI.csproj +++ b/UI/UI.csproj @@ -640,14 +640,14 @@ if "x86" == "$(PlatformName)" copy "C:\Program Files (x86)\Microsoft Visual Stud if "x64" == "$(PlatformName)" copy "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\pgort140.dll" "pgort140.dll" if "PGO Optimize" == "$(ConfigurationName)" ( -copy "$(SolutionDir)bin\x86\PGO Profile\MesenCore.dll" "Dependencies\MesenCore.x86.dll" +copy "$(SolutionDir)bin\x86\PGO Profile\MesenSCore.dll" "Dependencies\MesenSCore.x86.dll" -copy "$(SolutionDir)bin\x64\PGO Profile\MesenCore.dll" "Dependencies\MesenCore.x64.dll" +copy "$(SolutionDir)bin\x64\PGO Profile\MesenSCore.dll" "Dependencies\MesenSCore.x64.dll" ) if NOT "PGO Optimize" == "$(ConfigurationName)" ( -copy "$(SolutionDir)bin\x86\$(ConfigurationName)\MesenCore.dll" "Dependencies\MesenCore.x86.dll" +copy "$(SolutionDir)bin\x86\$(ConfigurationName)\MesenSCore.dll" "Dependencies\MesenSCore.x86.dll" -copy "$(SolutionDir)bin\x64\$(ConfigurationName)\MesenCore.dll" "Dependencies\MesenCore.x64.dll" +copy "$(SolutionDir)bin\x64\$(ConfigurationName)\MesenSCore.dll" "Dependencies\MesenSCore.x64.dll" ) copy "MesenUpdater.exe" "Dependencies\MesenUpdater.exe" call DependencyPacker.exe diff --git a/Windows/SoundManager.cpp b/Windows/SoundManager.cpp index 878857f..7807281 100644 --- a/Windows/SoundManager.cpp +++ b/Windows/SoundManager.cpp @@ -23,6 +23,7 @@ SoundManager::SoundManager(shared_ptr console, HWND hwnd) SoundManager::~SoundManager() { + _console->GetSoundMixer()->RegisterAudioDevice(nullptr); Release(); }