mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
bus/nes_ctrl: Updated Arkanoid paddle to return 9th bit. (#9514)
This commit is contained in:
parent
2b12a8c2df
commit
ce1c326183
@ -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)
|
||||
|
@ -27,22 +27,19 @@ public:
|
||||
// construction/destruction
|
||||
nes_vaus_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// optional information overrides
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
virtual u8 read_bit34() override;
|
||||
virtual void write(u8 data) override;
|
||||
|
||||
protected:
|
||||
nes_vaus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
virtual u8 read_bit34() override;
|
||||
virtual void write(u8 data) override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
required_ioport m_paddle;
|
||||
required_ioport m_button;
|
||||
u8 m_start_conv;
|
||||
u8 m_latch;
|
||||
u16 m_latch;
|
||||
};
|
||||
|
||||
|
||||
@ -54,14 +51,14 @@ public:
|
||||
// construction/destruction
|
||||
nes_vausfc_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
virtual u8 read_bit34() override { return 0; }
|
||||
virtual u8 read_exp(offs_t offset) override;
|
||||
virtual void write(u8 data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
private:
|
||||
required_device<nes_control_port_device> m_daisychain;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user