mirror of
https://github.com/holub/mame
synced 2025-06-02 02:49:44 +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)
|
msm6253_device::msm6253_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||||
: device_t(mconfig, MSM6253, tag, owner, 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_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()
|
void msm6253_device::device_start()
|
||||||
{
|
{
|
||||||
for (int port = 0; port < 4; port++)
|
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 our state
|
||||||
save_item(NAME(m_shift_register));
|
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
|
// address_w - write from address bus to select
|
||||||
// one of four internal latches
|
// one of four internal latches
|
||||||
|
@ -32,11 +32,22 @@
|
|||||||
class msm6253_device : public device_t
|
class msm6253_device : public device_t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
typedef device_delegate<ioport_value ()> port_read_delegate;
|
||||||
|
|
||||||
// construction/destruction
|
// construction/destruction
|
||||||
msm6253_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
msm6253_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||||
|
|
||||||
// configuration
|
// 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
|
// write handlers
|
||||||
WRITE8_MEMBER(address_w);
|
WRITE8_MEMBER(address_w);
|
||||||
@ -52,8 +63,12 @@ protected:
|
|||||||
virtual void device_start() override;
|
virtual void device_start() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// helpers
|
||||||
|
template<int port> ioport_value port_read();
|
||||||
|
|
||||||
// input configuration
|
// 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
|
// private data
|
||||||
u8 m_shift_register;
|
u8 m_shift_register;
|
||||||
|
@ -2016,10 +2016,10 @@ void segas24_state::system24_floppy_hotrod(machine_config &config)
|
|||||||
upd2.set_porty_tag("DIAL4");
|
upd2.set_porty_tag("DIAL4");
|
||||||
|
|
||||||
msm6253_device &adc1(MSM6253(config, "adc1", 0)); // IC5 - 33k/33p R/C clock
|
msm6253_device &adc1(MSM6253(config, "adc1", 0)); // IC5 - 33k/33p R/C clock
|
||||||
adc1.input<0>().set_ioport("PEDAL1");
|
adc1.set_input_tag<0>("PEDAL1");
|
||||||
adc1.input<1>().set_ioport("PEDAL2");
|
adc1.set_input_tag<1>("PEDAL2");
|
||||||
adc1.input<2>().set_ioport("PEDAL3");
|
adc1.set_input_tag<2>("PEDAL3");
|
||||||
adc1.input<3>().set_ioport("PEDAL4");
|
adc1.set_input_tag<3>("PEDAL4");
|
||||||
|
|
||||||
MSM6253(config, "adc2", 0); // IC2 - 33k/33p R/C clock
|
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);
|
m_maincpu->set_addrmap(AS_PROGRAM, &segas32_analog_state::system32_analog_map);
|
||||||
|
|
||||||
msm6253_device &adc(MSM6253(config, "adc", 0));
|
msm6253_device &adc(MSM6253(config, "adc", 0));
|
||||||
adc.input<0>().set_ioport("ANALOG1");
|
adc.set_input_tag<0>("ANALOG1");
|
||||||
adc.input<1>().set_ioport("ANALOG2");
|
adc.set_input_tag<1>("ANALOG2");
|
||||||
adc.input<2>().set_ioport("ANALOG3");
|
adc.set_input_tag<2>("ANALOG3");
|
||||||
adc.input<3>().set_ioport("ANALOG4");
|
adc.set_input_tag<3>("ANALOG4");
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_DEVICE_TYPE(SEGA_S32_ANALOG_DEVICE, segas32_analog_state, "segas32_pcb_analog", "Sega System 32 analog PCB")
|
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);
|
m_maincpu->set_addrmap(AS_PROGRAM, &sega_multi32_analog_state::multi32_analog_map);
|
||||||
|
|
||||||
msm6253_device &adc(MSM6253(config, "adc", 0));
|
msm6253_device &adc(MSM6253(config, "adc", 0));
|
||||||
adc.input<0>().set_ioport("ANALOG1");
|
adc.set_input_tag<0>("ANALOG1");
|
||||||
adc.input<1>().set_ioport("ANALOG2");
|
adc.set_input_tag<1>("ANALOG2");
|
||||||
adc.input<2>().set(FUNC(sega_multi32_analog_state::in2_analog_read));
|
adc.set_input_cb<2>(FUNC(sega_multi32_analog_state::in2_analog_read));
|
||||||
adc.input<3>().set(FUNC(sega_multi32_analog_state::in3_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);
|
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);
|
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
|
// FMCS and CKOT connect to CS and OSC IN on MSM6253 below
|
||||||
|
|
||||||
msm6253_device &adc(MSM6253(config, "adc", 0));
|
msm6253_device &adc(MSM6253(config, "adc", 0));
|
||||||
adc.input<0>().set_ioport("ADC.0");
|
adc.set_input_tag<0>("ADC.0");
|
||||||
adc.input<1>().set_ioport("ADC.1");
|
adc.set_input_tag<1>("ADC.1");
|
||||||
adc.input<2>().set_ioport("ADC.2");
|
adc.set_input_tag<2>("ADC.2");
|
||||||
adc.input<3>().set(FUNC(segaybd_state::analog_mux));
|
adc.set_input_cb<3>(FUNC(segaybd_state::analog_mux));
|
||||||
|
|
||||||
SEGA_315_5248_MULTIPLIER(config, "multiplier_main", 0);
|
SEGA_315_5248_MULTIPLIER(config, "multiplier_main", 0);
|
||||||
SEGA_315_5248_MULTIPLIER(config, "multiplier_subx", 0);
|
SEGA_315_5248_MULTIPLIER(config, "multiplier_subx", 0);
|
||||||
|
@ -371,8 +371,8 @@ class sega_multi32_analog_state : public sega_multi32_state
|
|||||||
public:
|
public:
|
||||||
sega_multi32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
sega_multi32_analog_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER(in2_analog_read);
|
ioport_value in2_analog_read();
|
||||||
DECLARE_READ8_MEMBER(in3_analog_read);
|
ioport_value in3_analog_read();
|
||||||
DECLARE_WRITE8_MEMBER(analog_bank_w);
|
DECLARE_WRITE8_MEMBER(analog_bank_w);
|
||||||
|
|
||||||
void multi32_analog_map(address_map &map);
|
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));
|
io.in_pg_callback().set(FUNC(model1io_device::io_pg_r));
|
||||||
|
|
||||||
msm6253_device &adc(MSM6253(config, "adc", 0));
|
msm6253_device &adc(MSM6253(config, "adc", 0));
|
||||||
adc.input<0>().set(FUNC(model1io_device::analog0_r));
|
adc.set_input_cb<0>(FUNC(model1io_device::analog0_r));
|
||||||
adc.input<1>().set(FUNC(model1io_device::analog1_r));
|
adc.set_input_cb<1>(FUNC(model1io_device::analog1_r));
|
||||||
adc.input<2>().set(FUNC(model1io_device::analog2_r));
|
adc.set_input_cb<2>(FUNC(model1io_device::analog2_r));
|
||||||
adc.input<3>().set(FUNC(model1io_device::analog3_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);
|
MB3773(config, m_watchdog, 0);
|
||||||
|
|
||||||
msm6253_device &adc(MSM6253(config, "adc", 32_MHz_XTAL / 16 / 4));
|
msm6253_device &adc(MSM6253(config, "adc", 32_MHz_XTAL / 16 / 4));
|
||||||
adc.input<0>().set(FUNC(model1io2_device::analog0_r));
|
adc.set_input_cb<0>(FUNC(model1io2_device::analog0_r));
|
||||||
adc.input<1>().set(FUNC(model1io2_device::analog1_r));
|
adc.set_input_cb<1>(FUNC(model1io2_device::analog1_r));
|
||||||
adc.input<2>().set(FUNC(model1io2_device::analog2_r));
|
adc.set_input_cb<2>(FUNC(model1io2_device::analog2_r));
|
||||||
adc.input<3>().set(FUNC(model1io2_device::analog3_r));
|
adc.set_input_cb<3>(FUNC(model1io2_device::analog3_r));
|
||||||
|
|
||||||
// diagnostic LCD display
|
// diagnostic LCD display
|
||||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
|
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
|
||||||
|
Loading…
Reference in New Issue
Block a user