Skip to content

Commit

Permalink
Preliminary implementation of the Triforce Baseboard
Browse files Browse the repository at this point in the history
  • Loading branch information
Zopolis4 committed Nov 8, 2021
1 parent 78009ba commit 6d429ea
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 5 deletions.
2 changes: 2 additions & 0 deletions Source/Core/Core/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ add_library(core
HW/EXI/EXI_DeviceAD16.h
HW/EXI/EXI_DeviceAGP.cpp
HW/EXI/EXI_DeviceAGP.h
HW/EXI/EXI_DeviceBaseboard.cpp
HW/EXI/EXI_DeviceBaseboard.h
HW/EXI/EXI_DeviceDummy.cpp
HW/EXI/EXI_DeviceDummy.h
HW/EXI/EXI_DeviceEthernet.cpp
Expand Down
2 changes: 2 additions & 0 deletions Source/Core/Core/ConfigManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,7 @@ void SConfig::LoadDefaults()
SelectedLanguage = 0;
bOverrideRegionSettings = false;
bWii = false;
bTri = false;

bLoopFifoReplay = true;

Expand Down Expand Up @@ -796,6 +797,7 @@ struct SetGameMetadata
{
*region = disc.volume->GetRegion();
config->bWii = disc.volume->GetVolumeType() == DiscIO::Platform::WiiDisc;
config->bTri = disc.volume->GetVolumeType() == DiscIO::Platform::Triforce;
config->m_disc_booted_from_game_list = true;
config->SetRunningGameMetadata(*disc.volume, disc.volume->GetGamePartition());
return true;
Expand Down
1 change: 1 addition & 0 deletions Source/Core/Core/ConfigManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,7 @@ struct SConfig
bool bOverrideRegionSettings = false;

bool bWii = false;
bool bTri = false;
bool m_is_mios = false;

// Interface settings
Expand Down
13 changes: 12 additions & 1 deletion Source/Core/Core/HW/EXI/EXI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,17 @@ void AddMemoryCards(int i)

g_Channels[i]->AddDevice(memorycard_device, 0);
}

void AddSP1Device()
{
TEXIDevices sp1_device = EXIDEVICE_BASEBOARD;
if (!SConfig::GetInstance().bTri)
{
sp1_device = SConfig::GetInstance().m_EXIDevice[2];
}

g_Channels[0]->AddDevice(sp1_device, 2);
}
} // namespace

void Init()
Expand Down Expand Up @@ -100,8 +111,8 @@ void Init()
for (int i = 0; i < MAX_MEMORYCARD_SLOTS; i++)
AddMemoryCards(i);

AddSP1Device();
g_Channels[0]->AddDevice(EXIDEVICE_MASKROM, 1);
g_Channels[0]->AddDevice(SConfig::GetInstance().m_EXIDevice[2], 2); // Serial Port 1
g_Channels[2]->AddDevice(EXIDEVICE_AD16, 0);

changeDevice = CoreTiming::RegisterEvent("ChangeEXIDevice", ChangeDeviceCallback);
Expand Down
6 changes: 5 additions & 1 deletion Source/Core/Core/HW/EXI/EXI_Device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#include "Common/CommonTypes.h"
#include "Core/HW/EXI/EXI_DeviceAD16.h"
#include "Core/HW/EXI/EXI_DeviceAGP.h"
#include "Core/HW/EXI/EXI_DeviceBaseboard.h"
#include "Core/HW/EXI/EXI_DeviceDummy.h"
#include "Core/HW/EXI/EXI_DeviceEthernet.h"
#include "Core/HW/EXI/EXI_DeviceGecko.h"
Expand Down Expand Up @@ -153,7 +154,10 @@ std::unique_ptr<IEXIDevice> EXIDevice_Create(const TEXIDevices device_type, cons
result = std::make_unique<CEXIAgp>(channel_num);
break;

case EXIDEVICE_AM_BASEBOARD:
case EXIDEVICE_BASEBOARD:
result = std::make_unique<CEXIBaseboard>();
break;

case EXIDEVICE_NONE:
default:
result = std::make_unique<IEXIDevice>();
Expand Down
4 changes: 1 addition & 3 deletions Source/Core/Core/HW/EXI/EXI_Device.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@ enum TEXIDevices : int
EXIDEVICE_AD16,
EXIDEVICE_MIC,
EXIDEVICE_ETH,
// Was used for Triforce in the past, but the implementation is no longer in Dolphin.
// It's kept here so that values below will stay constant.
EXIDEVICE_AM_BASEBOARD,
EXIDEVICE_BASEBOARD,
EXIDEVICE_GECKO,
// Only used when creating a device by EXIDevice_Create.
// Converted to EXIDEVICE_MEMORYCARD internally.
Expand Down
55 changes: 55 additions & 0 deletions Source/Core/Core/HW/EXI/EXI_DeviceBaseboard.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright 2013 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#include "Core/HW/EXI/EXI_DeviceBaseboard.h"

#include "Common/Assert.h"
#include "Common/ChunkFile.h"
#include "Common/CommonTypes.h"
#include "Common/Logging/Log.h"

namespace ExpansionInterface
{
CEXIBaseboard::CEXIBaseboard() = default;

void CEXIBaseboard::SetCS(int cs)
{
if (cs)
m_position = 0;
}

bool CEXIBaseboard::IsPresent() const
{
return true;
}

void CEXIBaseboard::TransferByte(u8& byte)
{
if (m_position == 0)
{
m_command = byte;
}
else
{
switch (m_command)
{
case 0x00:
{
static constexpr std::array<u8, 4> ID = {0x06, 0x04, 0x10, 0x00};
byte = ID[(m_position - 2) & 3];
break;
}
default:
ERROR_LOG_FMT(EXPANSIONINTERFACE, "EXI BASEBOARD: Unhandled command {:#x} {:#x}", m_command,
m_position);
}
}
m_position++;
}

void CEXIBaseboard::DoState(PointerWrap& p)
{
p.Do(m_position);
p.Do(m_command);
}
} // namespace ExpansionInterface
27 changes: 27 additions & 0 deletions Source/Core/Core/HW/EXI/EXI_DeviceBaseboard.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright 2013 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include "Core/HW/EXI/EXI_Device.h"

class PointerWrap;

namespace ExpansionInterface
{
class CEXIBaseboard : public IEXIDevice
{
public:
CEXIBaseboard();
void SetCS(int CS) override;
bool IsPresent() const override;
void DoState(PointerWrap& p) override;

private:
// STATE_TO_SAVE
u32 m_position = 0;
u32 m_command = 0;

void TransferByte(u8& byte) override;
};
} // namespace ExpansionInterface
2 changes: 2 additions & 0 deletions Source/Core/DolphinLib.props
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@
<ClInclude Include="Core\HW\EXI\EXI_Device.h" />
<ClInclude Include="Core\HW\EXI\EXI_DeviceAD16.h" />
<ClInclude Include="Core\HW\EXI\EXI_DeviceAGP.h" />
<ClInclude Include="Core\HW\EXI\EXI_DeviceBaseboard.h" />
<ClInclude Include="Core\HW\EXI\EXI_DeviceDummy.h" />
<ClInclude Include="Core\HW\EXI\EXI_DeviceEthernet.h" />
<ClInclude Include="Core\HW\EXI\EXI_DeviceGecko.h" />
Expand Down Expand Up @@ -853,6 +854,7 @@
<ClCompile Include="Core\HW\EXI\EXI_Device.cpp" />
<ClCompile Include="Core\HW\EXI\EXI_DeviceAD16.cpp" />
<ClCompile Include="Core\HW\EXI\EXI_DeviceAGP.cpp" />
<ClCompile Include="Core\HW\EXI\EXI_DeviceBaseboard.cpp" />
<ClCompile Include="Core\HW\EXI\EXI_DeviceDummy.cpp" />
<ClCompile Include="Core\HW\EXI\EXI_DeviceEthernet.cpp" />
<ClCompile Include="Core\HW\EXI\EXI_DeviceGecko.cpp" />
Expand Down

0 comments on commit 6d429ea

Please sign in to comment.