mirror of https://github.com/bsnes-emu/bsnes.git
67 lines
2.0 KiB
C++
67 lines
2.0 KiB
C++
FightingPad::FightingPad(uint port) : Controller(port) {
|
|
create(Controller::Enter, 1'000'000);
|
|
}
|
|
|
|
auto FightingPad::main() -> void {
|
|
if(timeout) {
|
|
timeout--;
|
|
} else {
|
|
counter = 0;
|
|
}
|
|
step(1);
|
|
synchronize(cpu);
|
|
}
|
|
|
|
auto FightingPad::readData() -> uint8 {
|
|
uint6 data;
|
|
|
|
if(select == 0) {
|
|
if(counter == 0 || counter == 1 || counter == 4) {
|
|
data.bit(0) = platform->inputPoll(port, ID::Device::FightingPad, Up);
|
|
data.bit(1) = platform->inputPoll(port, ID::Device::FightingPad, Down);
|
|
data.bits(2,3) = ~0;
|
|
}
|
|
|
|
if(counter == 2) {
|
|
data.bits(0,3) = ~0; //controller type detection
|
|
}
|
|
|
|
if(counter == 3) {
|
|
data.bits(0,3) = 0;
|
|
}
|
|
|
|
data.bit(4) = platform->inputPoll(port, ID::Device::FightingPad, A);
|
|
data.bit(5) = platform->inputPoll(port, ID::Device::FightingPad, Start);
|
|
} else {
|
|
if(counter == 0 || counter == 1 || counter == 2 || counter == 4) {
|
|
data.bit(0) = platform->inputPoll(port, ID::Device::FightingPad, Up);
|
|
data.bit(1) = platform->inputPoll(port, ID::Device::FightingPad, Down);
|
|
data.bit(2) = platform->inputPoll(port, ID::Device::FightingPad, Left);
|
|
data.bit(3) = platform->inputPoll(port, ID::Device::FightingPad, Right);
|
|
data.bit(4) = platform->inputPoll(port, ID::Device::FightingPad, B);
|
|
data.bit(5) = platform->inputPoll(port, ID::Device::FightingPad, C);
|
|
}
|
|
|
|
if(counter == 3) {
|
|
data.bit(0) = platform->inputPoll(port, ID::Device::FightingPad, Z);
|
|
data.bit(1) = platform->inputPoll(port, ID::Device::FightingPad, Y);
|
|
data.bit(2) = platform->inputPoll(port, ID::Device::FightingPad, X);
|
|
data.bit(3) = platform->inputPoll(port, ID::Device::FightingPad, Mode);
|
|
data.bits(4,5) = 0;
|
|
}
|
|
}
|
|
|
|
data = ~data;
|
|
return latch << 7 | select << 6 | data;
|
|
}
|
|
|
|
auto FightingPad::writeData(uint8 data) -> void {
|
|
if(!select && data.bit(6)) { //0->1 transition
|
|
if(++counter == 5) counter = 0;
|
|
}
|
|
|
|
select = data.bit(6);
|
|
latch = data.bit(7);
|
|
timeout = 1600; //~1.6ms
|
|
}
|