mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
52 lines
No EOL
1.4 KiB
C++
52 lines
No EOL
1.4 KiB
C++
#pragma once
|
|
#include "pch.h"
|
|
#include "Shared/BaseControlDevice.h"
|
|
#include "Shared/Emulator.h"
|
|
#include "Shared/EmuSettings.h"
|
|
|
|
class BandaiMicrophone : public BaseControlDevice
|
|
{
|
|
protected:
|
|
enum Buttons { A, B, Microphone };
|
|
|
|
string GetKeyNames() override
|
|
{
|
|
return "ABM";
|
|
}
|
|
|
|
void InternalSetStateFromInput() override
|
|
{
|
|
//Make sure the key bindings are properly updated (not ideal, but good enough)
|
|
_keyMappings = _emu->GetSettings()->GetNesConfig().MapperInput.Keys.GetKeyMappingArray();
|
|
|
|
for(KeyMapping& keyMapping : _keyMappings) {
|
|
SetPressedState(Buttons::A, keyMapping.CustomKeys[BandaiMicrophone::Buttons::A]);
|
|
SetPressedState(Buttons::B, keyMapping.CustomKeys[BandaiMicrophone::Buttons::B]);
|
|
if((_emu->GetFrameCount() % 2) == 0) {
|
|
//Alternate between 1 and 0s (not sure if the game does anything with this data?)
|
|
SetPressedState(Buttons::Microphone, keyMapping.CustomKeys[BandaiMicrophone::Buttons::Microphone]);
|
|
}
|
|
}
|
|
}
|
|
|
|
public:
|
|
BandaiMicrophone(Emulator* emu, KeyMappingSet keyMappings) : BaseControlDevice(emu, ControllerType::BandaiMicrophone, BaseControlDevice::MapperInputPort, keyMappings)
|
|
{
|
|
}
|
|
|
|
uint8_t ReadRam(uint16_t addr) override
|
|
{
|
|
if(addr >= 0x6000 && addr <= 0x7FFF) {
|
|
return
|
|
(IsPressed(Buttons::A) ? 0 : 0x01) |
|
|
(IsPressed(Buttons::B) ? 0 : 0x02) |
|
|
(IsPressed(Buttons::Microphone) ? 0x04 : 0);
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
void WriteRam(uint16_t addr, uint8_t value) override
|
|
{
|
|
}
|
|
}; |