1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-17 21:30:14 +00:00

Add has_msx_music flag.

This commit is contained in:
Thomas Harte 2023-05-12 22:09:15 -04:00
parent b89076cb72
commit a6ebfe2ce2
2 changed files with 15 additions and 5 deletions

View File

@ -18,6 +18,7 @@ namespace Analyser::Static::MSX {
struct Target: public ::Analyser::Static::Target, public Reflection::StructImpl<Target> {
bool has_disk_drive = false;
bool has_msx_music = false;
std::string loading_command;
ReflectableEnum(Model,
@ -36,6 +37,7 @@ struct Target: public ::Analyser::Static::Target, public Reflection::StructImpl<
Target(): Analyser::Static::Target(Machine::MSX) {
if(needs_declare()) {
DeclareField(has_disk_drive);
DeclareField(has_msx_music);
DeclareField(region);
AnnounceEnum(Region);
DeclareField(model);

View File

@ -131,7 +131,7 @@ class AYPortHandler: public GI::AY38910::PortHandler {
using Target = Analyser::Static::MSX::Target;
template <Target::Model model>
template <Target::Model model, bool has_opll>
class ConcreteMachine:
public Machine,
public CPU::Z80::BusHandler,
@ -978,10 +978,18 @@ using namespace MSX;
Machine *Machine::MSX(const Analyser::Static::Target *target, const ROMMachine::ROMFetcher &rom_fetcher) {
const auto msx_target = dynamic_cast<const Target *>(target);
switch(msx_target->model) {
default: return nullptr;
case Target::Model::MSX1: return new ConcreteMachine<Target::Model::MSX1>(*msx_target, rom_fetcher);
case Target::Model::MSX2: return new ConcreteMachine<Target::Model::MSX2>(*msx_target, rom_fetcher);
if(msx_target->has_msx_music) {
switch(msx_target->model) {
default: return nullptr;
case Target::Model::MSX1: return new ConcreteMachine<Target::Model::MSX1, true>(*msx_target, rom_fetcher);
case Target::Model::MSX2: return new ConcreteMachine<Target::Model::MSX2, true>(*msx_target, rom_fetcher);
}
} else {
switch(msx_target->model) {
default: return nullptr;
case Target::Model::MSX1: return new ConcreteMachine<Target::Model::MSX1, false>(*msx_target, rom_fetcher);
case Target::Model::MSX2: return new ConcreteMachine<Target::Model::MSX2, false>(*msx_target, rom_fetcher);
}
}
}