Multitap: Add option to enable only on port 2

This commit is contained in:
Albert Liu
2021-03-01 14:59:59 -08:00
parent 7cb1bd5ac0
commit 3482313e2f
9 changed files with 64 additions and 66 deletions

View File

@ -7,9 +7,8 @@
#include "pad.h"
Log_SetChannel(Multitap);
Multitap::Multitap(u32 index) : m_index(index)
Multitap::Multitap()
{
m_index = index;
Reset();
}
@ -24,6 +23,16 @@ void Multitap::Reset()
m_transfer_buffer.fill(0xFF);
}
void Multitap::SetEnable(bool enable, u32 base_index)
{
if (m_enabled != enable || m_base_index != base_index)
{
m_enabled = enable;
m_base_index = base_index;
Reset();
}
}
bool Multitap::DoState(StateWrapper& sw)
{
sw.Do(&m_transfer_state);
@ -48,19 +57,9 @@ void Multitap::ResetTransferState()
// Controller and memory card transfer resets are handled in the Pad class
}
Controller* Multitap::GetControllerForSlot(u32 slot) const
{
return g_pad.GetController(m_index * 4 + slot);
}
MemoryCard* Multitap::GetMemoryCardForSlot(u32 slot) const
{
return g_pad.GetMemoryCard(m_index * 4 + slot);
}
bool Multitap::TransferController(u32 slot, const u8 data_in, u8* data_out) const
{
Controller* const selected_controller = GetControllerForSlot(slot);
Controller* const selected_controller = g_pad.GetController(m_base_index + slot);
if (!selected_controller)
{
*data_out = 0xFF;
@ -72,7 +71,7 @@ bool Multitap::TransferController(u32 slot, const u8 data_in, u8* data_out) cons
bool Multitap::TransferMemoryCard(u32 slot, const u8 data_in, u8* data_out) const
{
MemoryCard* const selected_memcard = GetMemoryCardForSlot(slot);
MemoryCard* const selected_memcard = g_pad.GetMemoryCard(m_base_index + slot);
if (!selected_memcard)
{
*data_out = 0xFF;
@ -198,7 +197,7 @@ bool Multitap::Transfer(const u8 data_in, u8* data_out)
case TransferState::SingleController:
{
// TODO: Check if the transfer buffer get wiped when transitioning to/from this mode
// TODO: Check if the transfer buffer gets wiped when transitioning to/from this mode
ack = TransferController(m_selected_slot, data_in, data_out);