You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.2 KiB
55 lines
1.2 KiB
/* PlipCore.h |
|
* |
|
* Defines an emulation core. |
|
*/ |
|
|
|
#pragma once |
|
|
|
#include <string> |
|
#include <tuple> |
|
#include <vector> |
|
|
|
#include "../PlipError.h" |
|
#include "../Audio/PlipAudio.h" |
|
#include "../Input/PlipInput.h" |
|
#include "../Video/PlipVideo.h" |
|
#include "../Memory/PlipMemoryMap.h" |
|
|
|
namespace Plip { |
|
enum class PlipValidCore { |
|
Chip8 |
|
}; |
|
|
|
struct PlipCoreDescription { |
|
const char *name; |
|
PlipValidCore descriptor; |
|
const char *description; |
|
}; |
|
|
|
class PlipCore { |
|
public: |
|
static std::vector<PlipCoreDescription> GetSupportedCores(); |
|
|
|
virtual void Delta(long ns) = 0; |
|
virtual PlipMemoryMap* GetMemoryMap() final { return m_memory; } |
|
virtual PlipError Load(const std::string &path) = 0; |
|
|
|
protected: |
|
explicit PlipCore(PlipAudio *audio, PlipInput *input, PlipVideo *video); |
|
|
|
PlipAudio *m_audio; |
|
PlipInput *m_input; |
|
PlipVideo *m_video; |
|
|
|
PlipMemoryMap *m_memory = new PlipMemoryMap(); |
|
|
|
private: |
|
static constexpr PlipCoreDescription m_supportedCores[] = { |
|
{ |
|
"chip8", |
|
PlipValidCore::Chip8, |
|
"CHIP-8" |
|
} |
|
}; |
|
}; |
|
}
|
|
|