diff options
author | 2022-04-05 08:52:43 -0800 | |
---|---|---|
committer | 2022-04-06 02:52:43 +1000 | |
commit | ce1c326183bebe807f0ce2e22022a2186d74a8d4 (patch) | |
tree | 7020f48d2dc7b55bfeb292f09a829235e244be22 /src/devices/bus/nes_ctrl/arkpaddle.cpp | |
parent | 2b12a8c2df7b769e5f1a829723fca6e31c31114a (diff) |
bus/nes_ctrl: Updated Arkanoid paddle to return 9th bit. (#9514)
Diffstat (limited to 'src/devices/bus/nes_ctrl/arkpaddle.cpp')
-rw-r--r-- | src/devices/bus/nes_ctrl/arkpaddle.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/devices/bus/nes_ctrl/arkpaddle.cpp b/src/devices/bus/nes_ctrl/arkpaddle.cpp index c529070bc12..67d1d42de7f 100644 --- a/src/devices/bus/nes_ctrl/arkpaddle.cpp +++ b/src/devices/bus/nes_ctrl/arkpaddle.cpp @@ -6,17 +6,15 @@ Arkanoid Paddle input device TODO: Investigate the differences between the 3 paddles released with - Arkanoid (US), Arkanoid (JP), Arkanoid II (JP). It's not clear if and - how they differ and so for the moment we only emulate the NES and - daisy-chainable Famicom paddles. + Arkanoid (US), Arkanoid (JP), Arkanoid II (JP). At the moment we only + emulate the US and daisy-chainable Famicom (Ark2) paddles. Known differences: NES and Ark2 paddles have screws to adjust range of returned values, Ark2 paddle has an extra expansion port. - Claimed differences: NES and Ark1 paddles have 9-bit latch (and don't - return the MSB) while Ark2 has an 8-bit latch, Ark2 paddle ADC responds - to writes to $4016.b1 not b0 (the post-Ark2 paddle games, Arkanoid 2 - and Chase HQ, both dutifully strobe both bits one at a time). + All paddles return the ones' complement of a 9-bit value from their + potentiometers, MSB first. The three commercial releases, Arkanoids + and Chase HQ, only read 8-bits, ignoring the LSB. **********************************************************************/ @@ -33,7 +31,10 @@ DEFINE_DEVICE_TYPE(NES_ARKPADDLE_FC, nes_vausfc_device, "nes_vausfc", "FC Arkano static INPUT_PORTS_START( arkanoid_paddle ) PORT_START("PADDLE") - PORT_BIT( 0xff, 0x7f, IPT_PADDLE ) PORT_SENSITIVITY(25) PORT_KEYDELTA(25) PORT_CENTERDELTA(0) PORT_MINMAX(0x4e, 0xf2) // this minmax is from what Arkanoid 2 clamps values to, so an actual paddle's range may be greater + // MINMAX range large enough to encompass what Taito games expect, Ark1 will glitch if MIN is too low + // This may be too wide compared with real paddles, even accounting for those with adjustment screws + PORT_BIT( 0x1ff, 0x130, IPT_PADDLE ) PORT_SENSITIVITY(50) PORT_KEYDELTA(35) PORT_CENTERDELTA(0) PORT_MINMAX(0x78, 0x1f8) + PORT_START("BUTTON") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Paddle button") INPUT_PORTS_END @@ -80,7 +81,6 @@ nes_vaus_device::nes_vaus_device(const machine_config &mconfig, device_type type , device_nes_control_port_interface(mconfig, *this) , m_paddle(*this, "PADDLE") , m_button(*this, "BUTTON") - , m_start_conv(0) , m_latch(0) { } @@ -104,7 +104,7 @@ nes_vausfc_device::nes_vausfc_device(const machine_config &mconfig, const char * void nes_vaus_device::device_start() { save_item(NAME(m_latch)); - save_item(NAME(m_start_conv)); + save_item(NAME(m_strobe)); } @@ -115,7 +115,7 @@ void nes_vaus_device::device_start() u8 nes_vaus_device::read_bit34() { u8 ret = m_button->read() << 3; - ret |= (m_latch & 0x80) >> 3; + ret |= (m_latch & 0x100) >> 4; m_latch <<= 1; return ret; } @@ -127,7 +127,7 @@ u8 nes_vausfc_device::read_exp(offs_t offset) ret = m_button->read() << 1; else //$4017 { - ret = (m_latch & 0x80) >> 6; + ret = (m_latch & 0x100) >> 7; m_latch <<= 1; ret |= m_daisychain->read_exp(0) << 2; ret |= m_daisychain->read_exp(1) << 3; @@ -141,10 +141,8 @@ u8 nes_vausfc_device::read_exp(offs_t offset) void nes_vaus_device::write(u8 data) { - if (data == 0 && m_start_conv == 1) + if (write_strobe(data)) m_latch = ~m_paddle->read(); - - m_start_conv = data; } void nes_vausfc_device::write(u8 data) |