Mesen2/Core/PCE/Input/PceTurboTap.cpp

42 lines
1 KiB
C++

#include "pch.h"
#include "PceTurboTap.h"
PceTurboTap::PceTurboTap(Emulator* emu, uint8_t port, ControllerConfig controllers[]) : ControllerHub(emu, ControllerType::PceTurboTap, port, controllers)
{
//Start with an out-of-range index that selects none of the ports
_selectedPort = PceTurboTap::MaxPort;
}
uint8_t PceTurboTap::ReadRam(uint16_t addr)
{
return _selectedPort < PceTurboTap::MaxPort && _ports[_selectedPort] ? ReadPort(_selectedPort) : 0x0F;
}
void PceTurboTap::WriteRam(uint16_t addr, uint8_t value)
{
bool sel = (value & 0x01) != 0;
bool prevSel = (_prevValue & 0x01) != 0;
bool clr = (value & 0x02) != 0;
bool prevClr = (_prevValue & 0x02) != 0;
if(!clr && !prevSel && sel && _selectedPort < PceTurboTap::MaxPort) {
_selectedPort++;
}
if(sel && !prevClr && clr) {
_selectedPort = 0;
}
_prevValue = value;
for(int i = 0; i < 5; i++) {
WritePort(i, i == _selectedPort ? value : 0x03);
}
}
void PceTurboTap::Serialize(Serializer& s)
{
BaseControlDevice::Serialize(s);
SV(_selectedPort);
SV(_prevValue);
}