mirror of
https://github.com/holub/mame
synced 2025-05-29 17:13:05 +03:00
Fix regressions from recent comit, nw
This commit is contained in:
parent
88ec765af5
commit
bbc1fcfed3
@ -25,9 +25,13 @@ DEFINE_DEVICE_TYPE(MSM6253, msm6253_device, "msm6253", "OKI MSM6253 A/D Converte
|
||||
|
||||
msm6253_device::msm6253_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, MSM6253, tag, owner, clock)
|
||||
, m_analog_input_cb{{*this}, {*this}, {*this}, {*this}}
|
||||
, m_analog_ports(*this, {finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG, finder_base::DUMMY_TAG})
|
||||
, m_shift_register(0)
|
||||
{
|
||||
m_analog_input_cb[0] = port_read_delegate(FUNC(msm6253_device::port_read<0>), this);
|
||||
m_analog_input_cb[1] = port_read_delegate(FUNC(msm6253_device::port_read<1>), this);
|
||||
m_analog_input_cb[2] = port_read_delegate(FUNC(msm6253_device::port_read<2>), this);
|
||||
m_analog_input_cb[3] = port_read_delegate(FUNC(msm6253_device::port_read<3>), this);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -37,12 +41,37 @@ msm6253_device::msm6253_device(const machine_config &mconfig, const char *tag, d
|
||||
void msm6253_device::device_start()
|
||||
{
|
||||
for (int port = 0; port < 4; port++)
|
||||
m_analog_input_cb[port].resolve_safe(0);
|
||||
{
|
||||
// resolve each callback
|
||||
m_analog_input_cb[port].bind_relative_to(*owner());
|
||||
|
||||
// ensure that any configured ports truly are analog
|
||||
if (m_analog_ports[port].found())
|
||||
{
|
||||
for (ioport_field &field : m_analog_ports[port]->fields())
|
||||
if (!field.is_analog() && field.type() != IPT_UNKNOWN && field.type() != IPT_UNUSED)
|
||||
throw emu_fatalerror("Port %s is not an analog port\n", m_analog_ports[port]->tag());
|
||||
}
|
||||
}
|
||||
|
||||
// save our state
|
||||
save_item(NAME(m_shift_register));
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// port_read - helper to read configured ports
|
||||
//-------------------------------------------------
|
||||
|
||||
template<int port>
|
||||
ioport_value msm6253_device::port_read()
|
||||
{
|
||||
if (m_analog_ports[port].found())
|
||||
return m_analog_ports[port]->read();
|
||||
|
||||
logerror("%s: Read from unassigned IN%d\n", machine().describe_context(), port);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// address_w - write from address bus to select
|
||||
// one of four internal latches
|
||||
|
@ -32,11 +32,22 @@
|
||||
class msm6253_device : public device_t
|
||||
{
|
||||
public:
|
||||
typedef device_delegate<ioport_value ()> port_read_delegate;
|
||||
|
||||
// construction/destruction
|
||||
msm6253_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// configuration
|
||||
template <unsigned Port> auto input() { return m_analog_input_cb[Port].bind(); }
|
||||
template <unsigned P> void set_input_tag(const char *tag) { m_analog_ports[P].set_tag(tag); }
|
||||
template <unsigned P> void set_input_cb(port_read_delegate callback) { m_analog_input_cb[P] = callback; }
|
||||
template <unsigned P, class FunctionClass> void set_input_cb(const char *devname, ioport_value (FunctionClass::*callback)(), const char *name)
|
||||
{
|
||||
set_input_cb<P>(port_read_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
|
||||
}
|
||||
template <unsigned P, class FunctionClass> void set_input_cb(ioport_value (FunctionClass::*callback)(), const char *name)
|
||||
{
|
||||
set_input_cb<P>(port_read_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
|
||||
}
|
||||
|
||||
// write handlers
|
||||
WRITE8_MEMBER(address_w);
|
||||
@ -52,8 +63,12 @@ protected:
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
// helpers
|
||||
template<int port> ioport_value port_read();
|
||||
|
||||
// input configuration
|
||||
devcb_read8 m_analog_input_cb[4];
|
||||
optional_ioport_array<4> m_analog_ports;
|
||||
port_read_delegate m_analog_input_cb[4];
|
||||
|
||||
// private data
|
||||
u8 m_shift_register;
|
||||
|
@ -2016,10 +2016,10 @@ void segas24_state::system24_floppy_hotrod(machine_config &config)
|
||||
upd2.set_porty_tag("DIAL4");
|
||||
|
||||
msm6253_device &adc1(MSM6253(config, "adc1", 0)); // IC5 - 33k/33p R/C clock
|
||||
adc1.input<0>().set_ioport("PEDAL1");
|
||||
adc1.input<1>().set_ioport("PEDAL2");
|
||||
adc1.input<2>().set_ioport("PEDAL3");
|
||||
adc1.input<3>().set_ioport("PEDAL4");
|
||||
adc1.set_input_tag<0>("PEDAL1");
|
||||
adc1.set_input_tag<1>("PEDAL2");
|
||||
adc1.set_input_tag<2>("PEDAL3");
|
||||
adc1.set_input_tag<3>("PEDAL4");
|
||||
|
||||
MSM6253(config, "adc2", 0); // IC2 - 33k/33p R/C clock
|
||||
}
|
||||
|
@ -2393,10 +2393,10 @@ void segas32_analog_state::device_add_mconfig(machine_config &config)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_analog_state::system32_analog_map);
|
||||
|
||||
msm6253_device &adc(MSM6253(config, "adc", 0));
|
||||
adc.input<0>().set_ioport("ANALOG1");
|
||||
adc.input<1>().set_ioport("ANALOG2");
|
||||
adc.input<2>().set_ioport("ANALOG3");
|
||||
adc.input<3>().set_ioport("ANALOG4");
|
||||
adc.set_input_tag<0>("ANALOG1");
|
||||
adc.set_input_tag<1>("ANALOG2");
|
||||
adc.set_input_tag<2>("ANALOG3");
|
||||
adc.set_input_tag<3>("ANALOG4");
|
||||
}
|
||||
|
||||
DEFINE_DEVICE_TYPE(SEGA_S32_ANALOG_DEVICE, segas32_analog_state, "segas32_pcb_analog", "Sega System 32 analog PCB")
|
||||
@ -2726,18 +2726,18 @@ void sega_multi32_analog_state::device_add_mconfig(machine_config &config)
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_analog_state::multi32_analog_map);
|
||||
|
||||
msm6253_device &adc(MSM6253(config, "adc", 0));
|
||||
adc.input<0>().set_ioport("ANALOG1");
|
||||
adc.input<1>().set_ioport("ANALOG2");
|
||||
adc.input<2>().set(FUNC(sega_multi32_analog_state::in2_analog_read));
|
||||
adc.input<3>().set(FUNC(sega_multi32_analog_state::in3_analog_read));
|
||||
adc.set_input_tag<0>("ANALOG1");
|
||||
adc.set_input_tag<1>("ANALOG2");
|
||||
adc.set_input_cb<2>(FUNC(sega_multi32_analog_state::in2_analog_read));
|
||||
adc.set_input_cb<3>(FUNC(sega_multi32_analog_state::in3_analog_read));
|
||||
}
|
||||
|
||||
READ8_MEMBER(sega_multi32_analog_state::in2_analog_read)
|
||||
ioport_value sega_multi32_analog_state::in2_analog_read()
|
||||
{
|
||||
return m_analog_ports[m_analog_bank * 4 + 2].read_safe(0);
|
||||
}
|
||||
|
||||
READ8_MEMBER(sega_multi32_analog_state::in3_analog_read)
|
||||
ioport_value sega_multi32_analog_state::in3_analog_read()
|
||||
{
|
||||
return m_analog_ports[m_analog_bank * 4 + 3].read_safe(0);
|
||||
}
|
||||
|
@ -1304,10 +1304,10 @@ void segaybd_state::yboard(machine_config &config)
|
||||
// FMCS and CKOT connect to CS and OSC IN on MSM6253 below
|
||||
|
||||
msm6253_device &adc(MSM6253(config, "adc", 0));
|
||||
adc.input<0>().set_ioport("ADC.0");
|
||||
adc.input<1>().set_ioport("ADC.1");
|
||||
adc.input<2>().set_ioport("ADC.2");
|
||||
adc.input<3>().set(FUNC(segaybd_state::analog_mux));
|
||||
adc.set_input_tag<0>("ADC.0");
|
||||
adc.set_input_tag<1>("ADC.1");
|
||||
adc.set_input_tag<2>("ADC.2");
|
||||
adc.set_input_cb<3>(FUNC(segaybd_state::analog_mux));
|
||||
|
||||
SEGA_315_5248_MULTIPLIER(config, "multiplier_main", 0);
|
||||
SEGA_315_5248_MULTIPLIER(config, "multiplier_subx", 0);
|
||||
|
@ -371,8 +371,8 @@ class sega_multi32_analog_state : public sega_multi32_state
|
||||
public:
|
||||
sega_multi32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
DECLARE_READ8_MEMBER(in2_analog_read);
|
||||
DECLARE_READ8_MEMBER(in3_analog_read);
|
||||
ioport_value in2_analog_read();
|
||||
ioport_value in3_analog_read();
|
||||
DECLARE_WRITE8_MEMBER(analog_bank_w);
|
||||
|
||||
void multi32_analog_map(address_map &map);
|
||||
|
@ -148,10 +148,10 @@ void model1io_device::device_add_mconfig(machine_config &config)
|
||||
io.in_pg_callback().set(FUNC(model1io_device::io_pg_r));
|
||||
|
||||
msm6253_device &adc(MSM6253(config, "adc", 0));
|
||||
adc.input<0>().set(FUNC(model1io_device::analog0_r));
|
||||
adc.input<1>().set(FUNC(model1io_device::analog1_r));
|
||||
adc.input<2>().set(FUNC(model1io_device::analog2_r));
|
||||
adc.input<3>().set(FUNC(model1io_device::analog3_r));
|
||||
adc.set_input_cb<0>(FUNC(model1io_device::analog0_r));
|
||||
adc.set_input_cb<1>(FUNC(model1io_device::analog1_r));
|
||||
adc.set_input_cb<2>(FUNC(model1io_device::analog2_r));
|
||||
adc.set_input_cb<3>(FUNC(model1io_device::analog3_r));
|
||||
}
|
||||
|
||||
|
||||
|
@ -182,10 +182,10 @@ MACHINE_CONFIG_START( model1io2_device::device_add_mconfig )
|
||||
MB3773(config, m_watchdog, 0);
|
||||
|
||||
msm6253_device &adc(MSM6253(config, "adc", 32_MHz_XTAL / 16 / 4));
|
||||
adc.input<0>().set(FUNC(model1io2_device::analog0_r));
|
||||
adc.input<1>().set(FUNC(model1io2_device::analog1_r));
|
||||
adc.input<2>().set(FUNC(model1io2_device::analog2_r));
|
||||
adc.input<3>().set(FUNC(model1io2_device::analog3_r));
|
||||
adc.set_input_cb<0>(FUNC(model1io2_device::analog0_r));
|
||||
adc.set_input_cb<1>(FUNC(model1io2_device::analog1_r));
|
||||
adc.set_input_cb<2>(FUNC(model1io2_device::analog2_r));
|
||||
adc.set_input_cb<3>(FUNC(model1io2_device::analog3_r));
|
||||
|
||||
// diagnostic LCD display
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
|
||||
|
Loading…
Reference in New Issue
Block a user