Fixed project issues (DLL was not included in .exe)

+ Prevent crash when SPC bios is not found
This commit is contained in:
Sour 2019-02-24 12:54:14 -05:00
parent 75dee8b8e4
commit 66cc7847fb
5 changed files with 34 additions and 19 deletions

View file

@ -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<BaseCartridge> cart = BaseCartridge::CreateCartridge(romFile, patchFile);
if(cart) {
MessageManager::ClearLog();
vector<uint8_t> 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();
//}
}
}

View file

@ -4,16 +4,12 @@
#include "Console.h"
#include "MemoryManager.h"
#include "SoundMixer.h"
#include "../Utilities/VirtualFile.h"
Spc::Spc(shared_ptr<Console> console)
Spc::Spc(shared_ptr<Console> console, vector<uint8_t> &spcRomData)
{
_console = console;
vector<uint8_t> fileData;
VirtualFile spcBios("spc700.rom");
spcBios.ReadFile(fileData);
memcpy(_spcBios, fileData.data(), 64);
memcpy(_spcBios, spcRomData.data(), 64);
_soundBuffer = new int16_t[Spc::SampleBufferSize];

View file

@ -18,7 +18,7 @@ private:
int GetSpcTime();
public:
Spc(shared_ptr<Console> console);
Spc(shared_ptr<Console> console, vector<uint8_t> &spcRomData);
~Spc();
uint8_t Read(uint16_t addr);

View file

@ -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

View file

@ -23,6 +23,7 @@ SoundManager::SoundManager(shared_ptr<Console> console, HWND hwnd)
SoundManager::~SoundManager()
{
_console->GetSoundMixer()->RegisterAudioDevice(nullptr);
Release();
}