Split MemoryCard and PadDevice (now Controller)

This commit is contained in:
Connor McLaughlin 2019-12-09 00:51:52 +10:00
parent c1710482df
commit da14b10e72
15 changed files with 71 additions and 71 deletions

View file

@ -6,6 +6,8 @@ add_library(core
bus.inl
cdrom.cpp
cdrom.h
controller.cpp
controller.h
cpu_code_cache.cpp
cpu_code_cache.h
cpu_core.cpp
@ -48,8 +50,6 @@ add_library(core
memory_card.h
pad.cpp
pad.h
pad_device.cpp
pad_device.h
save_state_version.h
settings.cpp
settings.h

38
src/core/controller.cpp Normal file
View file

@ -0,0 +1,38 @@
#include "controller.h"
#include "common/state_wrapper.h"
#include "digital_controller.h"
Controller::Controller() = default;
Controller::~Controller() = default;
void Controller::Reset() {}
bool Controller::DoState(StateWrapper& sw)
{
return !sw.HasError();
}
void Controller::ResetTransferState() {}
bool Controller::Transfer(const u8 data_in, u8* data_out)
{
*data_out = 0xFF;
return false;
}
std::shared_ptr<Controller> Controller::Create(std::string_view type_name)
{
if (type_name == "DigitalController")
return DigitalController::Create();
return {};
}
std::optional<s32> Controller::GetButtonCodeByName(std::string_view type_name, std::string_view button_name)
{
if (type_name == "DigitalController")
return DigitalController::GetButtonCodeByName(button_name);
return {};
}

View file

@ -5,11 +5,11 @@
class StateWrapper;
class PadDevice
class Controller
{
public:
PadDevice();
virtual ~PadDevice();
Controller();
virtual ~Controller();
virtual void Reset();
virtual bool DoState(StateWrapper& sw);
@ -21,7 +21,7 @@ public:
virtual bool Transfer(const u8 data_in, u8* data_out);
/// Creates a new controller of the specified type.
static std::shared_ptr<PadDevice> Create(std::string_view type_name);
static std::shared_ptr<Controller> Create(std::string_view type_name);
/// Gets the integer code for a button in the specified controller type.
static std::optional<s32> GetButtonCodeByName(std::string_view type_name, std::string_view button_name);

View file

@ -74,7 +74,7 @@
<ClCompile Include="mdec.cpp" />
<ClCompile Include="memory_card.cpp" />
<ClCompile Include="pad.cpp" />
<ClCompile Include="pad_device.cpp" />
<ClCompile Include="controller.cpp" />
<ClCompile Include="settings.cpp" />
<ClCompile Include="sio.cpp" />
<ClCompile Include="spu.cpp" />
@ -111,7 +111,7 @@
<ClInclude Include="mdec.h" />
<ClInclude Include="memory_card.h" />
<ClInclude Include="pad.h" />
<ClInclude Include="pad_device.h" />
<ClInclude Include="controller.h" />
<ClInclude Include="save_state_version.h" />
<ClInclude Include="settings.h" />
<ClInclude Include="sio.h" />

View file

@ -14,7 +14,6 @@
<ClCompile Include="cdrom.cpp" />
<ClCompile Include="gte.cpp" />
<ClCompile Include="pad.cpp" />
<ClCompile Include="pad_device.cpp" />
<ClCompile Include="digital_controller.cpp" />
<ClCompile Include="timers.cpp" />
<ClCompile Include="spu.cpp" />
@ -37,6 +36,7 @@
<ClCompile Include="cpu_recompiler_code_generator_aarch64.cpp" />
<ClCompile Include="gpu_hw_opengl_es.cpp" />
<ClCompile Include="sio.cpp" />
<ClCompile Include="controller.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="types.h" />
@ -56,7 +56,6 @@
<ClInclude Include="gte.h" />
<ClInclude Include="gte_types.h" />
<ClInclude Include="pad.h" />
<ClInclude Include="pad_device.h" />
<ClInclude Include="digital_controller.h" />
<ClInclude Include="timers.h" />
<ClInclude Include="spu.h" />
@ -76,6 +75,7 @@
<ClInclude Include="game_list.h" />
<ClInclude Include="gpu_hw_opengl_es.h" />
<ClInclude Include="sio.h" />
<ClInclude Include="controller.h" />
</ItemGroup>
<ItemGroup>
<None Include="cpu_core.inl" />

View file

@ -1,10 +1,10 @@
#pragma once
#include "pad_device.h"
#include "controller.h"
#include <memory>
#include <optional>
#include <string_view>
class DigitalController final : public PadDevice
class DigitalController final : public Controller
{
public:
enum class Button : u8

View file

@ -245,7 +245,7 @@ std::shared_ptr<MemoryCard> MemoryCard::Open(System* system, std::string_view fi
{
SmallString message;
message.AppendString("Memory card at '");
message.AppendString(filename.data(), filename.length());
message.AppendString(filename.data(), static_cast<u32>(filename.length()));
message.AppendString("' could not be read, formatting.");
Log_ErrorPrint(message);
mc->Format();

View file

@ -1,6 +1,6 @@
#pragma once
#include "common/bitfield.h"
#include "pad_device.h"
#include "controller.h"
#include <array>
#include <memory>
#include <string>
@ -8,7 +8,7 @@
class System;
class MemoryCard final : public PadDevice
class MemoryCard final
{
public:
enum : u32
@ -19,16 +19,16 @@ public:
};
MemoryCard(System* system);
~MemoryCard() override;
~MemoryCard();
static std::shared_ptr<MemoryCard> Create(System* system);
static std::shared_ptr<MemoryCard> Open(System* system, std::string_view filename);
void Reset() override;
bool DoState(StateWrapper& sw) override;
void Reset();
bool DoState(StateWrapper& sw);
void ResetTransferState() override;
bool Transfer(const u8 data_in, u8* data_out) override;
void ResetTransferState();
bool Transfer(const u8 data_in, u8* data_out);
void Format();

View file

@ -4,7 +4,7 @@
#include "host_interface.h"
#include "interrupt_controller.h"
#include "memory_card.h"
#include "pad_device.h"
#include "controller.h"
#include "system.h"
Log_SetChannel(Pad);
@ -289,8 +289,8 @@ void Pad::DoTransfer()
{
Log_DebugPrintf("Transferring slot %d", m_JOY_CTRL.SLOT.GetValue());
const std::shared_ptr<PadDevice>& controller = m_controllers[m_JOY_CTRL.SLOT];
const std::shared_ptr<PadDevice>& memory_card = m_memory_cards[m_JOY_CTRL.SLOT];
const std::shared_ptr<Controller>& controller = m_controllers[m_JOY_CTRL.SLOT];
const std::shared_ptr<MemoryCard>& memory_card = m_memory_cards[m_JOY_CTRL.SLOT];
// set rx?
m_JOY_CTRL.RXEN = true;

View file

@ -9,7 +9,7 @@ class StateWrapper;
class System;
class InterruptController;
class PadDevice;
class Controller;
class MemoryCard;
class Pad
@ -22,8 +22,8 @@ public:
void Reset();
bool DoState(StateWrapper& sw);
PadDevice* GetController(u32 slot) { return m_controllers[slot].get(); }
void SetController(u32 slot, std::shared_ptr<PadDevice> dev) { m_controllers[slot] = dev; }
Controller* GetController(u32 slot) { return m_controllers[slot].get(); }
void SetController(u32 slot, std::shared_ptr<Controller> dev) { m_controllers[slot] = dev; }
MemoryCard* GetMemoryCard(u32 slot) { return m_memory_cards[slot].get(); }
void SetMemoryCard(u32 slot, std::shared_ptr<MemoryCard> dev) { m_memory_cards[slot] = dev; }
@ -106,7 +106,7 @@ private:
System* m_system = nullptr;
InterruptController* m_interrupt_controller = nullptr;
std::array<std::shared_ptr<PadDevice>, NUM_SLOTS> m_controllers;
std::array<std::shared_ptr<Controller>, NUM_SLOTS> m_controllers;
std::array<std::shared_ptr<MemoryCard>, NUM_SLOTS> m_memory_cards;
State m_state = State::Idle;

View file

@ -1,38 +0,0 @@
#include "pad_device.h"
#include "common/state_wrapper.h"
#include "digital_controller.h"
PadDevice::PadDevice() = default;
PadDevice::~PadDevice() = default;
void PadDevice::Reset() {}
bool PadDevice::DoState(StateWrapper& sw)
{
return !sw.HasError();
}
void PadDevice::ResetTransferState() {}
bool PadDevice::Transfer(const u8 data_in, u8* data_out)
{
*data_out = 0xFF;
return false;
}
std::shared_ptr<PadDevice> PadDevice::Create(std::string_view type_name)
{
if (type_name == "DigitalController")
return DigitalController::Create();
return {};
}
std::optional<s32> PadDevice::GetButtonCodeByName(std::string_view type_name, std::string_view button_name)
{
if (type_name == "DigitalController")
return DigitalController::GetButtonCodeByName(button_name);
return {};
}

View file

@ -4,7 +4,7 @@
#include "host_interface.h"
#include "interrupt_controller.h"
#include "memory_card.h"
#include "pad_device.h"
#include "controller.h"
#include "system.h"
Log_SetChannel(SIO);

View file

@ -9,7 +9,7 @@ class StateWrapper;
class System;
class InterruptController;
class PadDevice;
class Controller;
class MemoryCard;
class SIO

View file

@ -5,6 +5,7 @@
#include "bus.h"
#include "cdrom.h"
#include "common/state_wrapper.h"
#include "controller.h"
#include "cpu_code_cache.h"
#include "cpu_core.h"
#include "dma.h"
@ -16,7 +17,6 @@
#include "mdec.h"
#include "memory_card.h"
#include "pad.h"
#include "pad_device.h"
#include "sio.h"
#include "spu.h"
#include "timers.h"
@ -448,7 +448,7 @@ void System::StallCPU(TickCount ticks)
m_cpu->AddPendingTicks(ticks);
}
void System::SetController(u32 slot, std::shared_ptr<PadDevice> dev)
void System::SetController(u32 slot, std::shared_ptr<Controller> dev)
{
m_pad->SetController(slot, std::move(dev));
}

View file

@ -19,7 +19,7 @@ class InterruptController;
class GPU;
class CDROM;
class Pad;
class PadDevice;
class Controller;
class Timers;
class SPU;
class MDEC;
@ -79,7 +79,7 @@ public:
// Adds ticks to the global tick counter, simulating the CPU being stalled.
void StallCPU(TickCount ticks);
void SetController(u32 slot, std::shared_ptr<PadDevice> dev);
void SetController(u32 slot, std::shared_ptr<Controller> dev);
void UpdateMemoryCards();
void UpdateCPUExecutionMode();