mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
42 lines
1 KiB
C++
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);
|
|
}
|