From 69bd218e03f5e7aea74e77e1ed46e57e13df0cd4 Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 31 Oct 2019 19:43:00 -0400 Subject: genpc: Make INT and NMI line callbacks (nw) This is intended to facilitate future planned changes to CPU input lines. --- src/devices/machine/genpc.cpp | 22 +++++++++++++++++++--- src/devices/machine/genpc.h | 7 +++++++ src/mame/drivers/amstr_pc.cpp | 4 +++- src/mame/drivers/asst128.cpp | 2 ++ src/mame/drivers/compc.cpp | 4 +++- src/mame/drivers/ec184x.cpp | 15 ++++++++++++--- src/mame/drivers/europc.cpp | 4 +++- src/mame/drivers/genpc.cpp | 5 ++++- src/mame/drivers/ibmpc.cpp | 4 ++++ src/mame/drivers/iskr103x.cpp | 2 ++ src/mame/drivers/pasogo.cpp | 5 ++++- src/mame/drivers/pc.cpp | 16 ++++++++++++++++ src/mame/drivers/pcxt.cpp | 11 +++++++++-- src/mame/drivers/tandy1t.cpp | 2 ++ src/mame/drivers/tosh1000.cpp | 5 ++++- 15 files changed, 94 insertions(+), 14 deletions(-) diff --git a/src/devices/machine/genpc.cpp b/src/devices/machine/genpc.cpp index 50528d17aa7..ac818a930b5 100644 --- a/src/devices/machine/genpc.cpp +++ b/src/devices/machine/genpc.cpp @@ -168,7 +168,7 @@ WRITE_LINE_MEMBER(ibm5160_mb_device::pc_speaker_set_spkrdata) WRITE_LINE_MEMBER(ibm5160_mb_device::pic_int_w) { - m_maincpu->set_input_line(0, state); + m_int_callback(state); } @@ -396,13 +396,13 @@ WRITE8_MEMBER( ibm5160_mb_device::nmi_enable_w ) { m_nmi_enabled = BIT(data,7); if (!m_nmi_enabled) - m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); + m_nmi_callback(CLEAR_LINE); } WRITE_LINE_MEMBER( ibm5160_mb_device::iochck_w ) { if (m_nmi_enabled && !state) - m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE); + m_nmi_callback(ASSERT_LINE); } //************************************************************************** @@ -542,6 +542,8 @@ ibm5160_mb_device::ibm5160_mb_device( , m_isabus(*this, "isa") , m_pc_kbdc(*this, "pc_kbdc") , m_ram(*this, ":" RAM_TAG) + , m_int_callback(*this) + , m_nmi_callback(*this) { } @@ -555,6 +557,20 @@ void ibm5160_mb_device::map(address_map &map) map(0x00a0, 0x00a1).w(FUNC(ibm5160_mb_device::nmi_enable_w)); } + +//------------------------------------------------- +// device_resolve_objects - resolve objects that +// may be needed for other devices to set +// initial conditions at start time +//------------------------------------------------- + +void ibm5160_mb_device::device_resolve_objects() +{ + m_int_callback.resolve_safe(); + m_nmi_callback.resolve_safe(); +} + + //------------------------------------------------- // device_start - device-specific startup //------------------------------------------------- diff --git a/src/devices/machine/genpc.h b/src/devices/machine/genpc.h index 876005d0a26..e302df90513 100644 --- a/src/devices/machine/genpc.h +++ b/src/devices/machine/genpc.h @@ -38,6 +38,9 @@ public: subdevice("isa")->set_iospace(std::forward(tag), AS_IO); } + auto int_callback() { return m_int_callback.bind(); } + auto nmi_callback() { return m_nmi_callback.bind(); } + void map(address_map &map); uint8_t m_pit_out2; @@ -56,6 +59,7 @@ protected: ibm5160_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides + virtual void device_resolve_objects() override; virtual void device_start() override; virtual void device_reset() override; // optional information overrides @@ -75,6 +79,9 @@ protected: optional_device m_pc_kbdc; required_device m_ram; + devcb_write_line m_int_callback; + devcb_write_line m_nmi_callback; + /* U73 is an LS74 - dual flip flop */ /* Q2 is set by OUT1 from the 8253 and goes to DRQ1 on the 8237 */ uint8_t m_u73_q2; diff --git a/src/mame/drivers/amstr_pc.cpp b/src/mame/drivers/amstr_pc.cpp index 2ecd557bcca..3cff81a4ba7 100644 --- a/src/mame/drivers/amstr_pc.cpp +++ b/src/mame/drivers/amstr_pc.cpp @@ -511,7 +511,9 @@ void amstrad_pc_state::pc200(machine_config &config) m_maincpu->set_addrmap(AS_IO, &amstrad_pc_state::pc200_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - PCNOPPI_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + PCNOPPI_MOTHERBOARD(config, m_mb, 0).set_cputag(m_maincpu); + m_mb->int_callback().set_inputline(m_maincpu, 0); + m_mb->nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); // FIXME: determine ISA bus clock ISA8_SLOT(config, "aga", 0, "mb:isa", pc_isa8_cards, "aga_pc200", true); diff --git a/src/mame/drivers/asst128.cpp b/src/mame/drivers/asst128.cpp index 2de3a578e95..00aa18f5a76 100644 --- a/src/mame/drivers/asst128.cpp +++ b/src/mame/drivers/asst128.cpp @@ -111,6 +111,8 @@ void asst128_state::asst128(machine_config &config) asst128_mb_device &mb(ASST128_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(asst128)); subdevice("mb:cassette")->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); diff --git a/src/mame/drivers/compc.cpp b/src/mame/drivers/compc.cpp index 75c37c6e4a5..77563b5fb26 100644 --- a/src/mame/drivers/compc.cpp +++ b/src/mame/drivers/compc.cpp @@ -228,7 +228,9 @@ void compc_state::compc(machine_config &config) m_maincpu->set_addrmap(AS_IO, &compc_state::compc_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - PCNOPPI_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + PCNOPPI_MOTHERBOARD(config, m_mb, 0).set_cputag(m_maincpu); + m_mb->int_callback().set_inputline(m_maincpu, 0); + m_mb->nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); config.device_remove("mb:pit8253"); fe2010_pit_device &pit(FE2010_PIT(config, "mb:pit8253", 0)); pit.set_clk<0>(XTAL(14'318'181)/12.0); /* heartbeat IRQ */ diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp index 9befe291f09..f88b41d467b 100644 --- a/src/mame/drivers/ec184x.cpp +++ b/src/mame/drivers/ec184x.cpp @@ -241,7 +241,10 @@ void ec184x_state::ec1840(machine_config &config) m_maincpu->set_addrmap(AS_IO, &ec184x_state::ec1840_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - EC1840_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + ec1840_mb_device &mb(EC1840_MOTHERBOARD(config, "mb", 0)); + mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa1", 0, "mb:isa", ec184x_isa8_cards, "ec1840.0002", false); @@ -267,7 +270,10 @@ void ec184x_state::ec1841(machine_config &config) MCFG_MACHINE_RESET_OVERRIDE(ec184x_state, ec1841) - EC1841_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + ec1841_mb_device &mb(EC1841_MOTHERBOARD(config, "mb", 0)); + mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa1", 0, "mb:isa", ec184x_isa8_cards, "ec1841.0002", false); // cga @@ -292,7 +298,10 @@ void ec184x_state::ec1847(machine_config &config) m_maincpu->set_addrmap(AS_IO, &ec184x_state::ec1847_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - IBM5160_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "hercules", false); // cga, ega and vga(?) are options too diff --git a/src/mame/drivers/europc.cpp b/src/mame/drivers/europc.cpp index ae73b5331fc..61ff9718be5 100644 --- a/src/mame/drivers/europc.cpp +++ b/src/mame/drivers/europc.cpp @@ -560,7 +560,9 @@ void europc_pc_state::europc(machine_config &config) m_maincpu->set_addrmap(AS_IO, &europc_pc_state::europc_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - PCNOPPI_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + PCNOPPI_MOTHERBOARD(config, m_mb, 0).set_cputag(m_maincpu); + m_mb->int_callback().set_inputline(m_maincpu, 0); + m_mb->nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); M6805U2(config, "kbdctrl", 16_MHz_XTAL / 4); diff --git a/src/mame/drivers/genpc.cpp b/src/mame/drivers/genpc.cpp index 364db2abd2c..3a6a2618ce6 100644 --- a/src/mame/drivers/genpc.cpp +++ b/src/mame/drivers/genpc.cpp @@ -62,7 +62,10 @@ void genpc_state::pcmda(machine_config &config) m_maincpu->set_addrmap(AS_IO, &genpc_state::pc8_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - IBM5160_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "mda", false); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa2", 0, "mb:isa", pc_isa8_cards, "com", false); diff --git a/src/mame/drivers/ibmpc.cpp b/src/mame/drivers/ibmpc.cpp index 91a04c69439..10bd3d23896 100644 --- a/src/mame/drivers/ibmpc.cpp +++ b/src/mame/drivers/ibmpc.cpp @@ -305,6 +305,8 @@ void ibmpc_state::ibm5150(machine_config &config) ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(cga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga", false); // FIXME: determine ISA bus clock @@ -343,6 +345,8 @@ void ibmpc_state::ibm5160(machine_config &config) ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(cga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga", false); // FIXME: determine ISA bus clock diff --git a/src/mame/drivers/iskr103x.cpp b/src/mame/drivers/iskr103x.cpp index f40083d9ba7..285bc622f10 100644 --- a/src/mame/drivers/iskr103x.cpp +++ b/src/mame/drivers/iskr103x.cpp @@ -77,6 +77,8 @@ void iskr103x_state::iskr1030m(machine_config &config) ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(iskr1030m)); ISA8_SLOT(config, "isa1", 0, "mb:isa", iskr103x_isa8_cards, "cga_iskr1030m", false); // FIXME: determine IS bus clock diff --git a/src/mame/drivers/pasogo.cpp b/src/mame/drivers/pasogo.cpp index 72c0eb83d7f..dd08e9c4609 100644 --- a/src/mame/drivers/pasogo.cpp +++ b/src/mame/drivers/pasogo.cpp @@ -554,7 +554,10 @@ void pasogo_state::pasogo(machine_config &config) ADDRESS_MAP_BANK(config, "ems").set_map(&pasogo_state::emsbank_map).set_options(ENDIANNESS_LITTLE, 16, 32, 0x4000); - IBM5160_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); RAM(config, RAM_TAG).set_default_size("512K"); diff --git a/src/mame/drivers/pc.cpp b/src/mame/drivers/pc.cpp index 7c1094c2313..ae8edd110df 100644 --- a/src/mame/drivers/pc.cpp +++ b/src/mame/drivers/pc.cpp @@ -205,6 +205,8 @@ void pc_state::pccga(machine_config &config) ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); // FIXME: determine ISA bus clock @@ -580,6 +582,8 @@ void pc_state::ibm5550(machine_config &config) ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); // FIXME: determine ISA bus clock @@ -822,6 +826,8 @@ void pc_state::poisk2(machine_config &config) ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga_poisk2", false); // FIXME: determine ISA bus clock @@ -918,6 +924,8 @@ void pc_state::iskr3104(machine_config &config) ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(iskr3104)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "ega", false).set_option_default_bios("ega", "iskr3104"); // FIXME: determine ISA bus clock @@ -997,6 +1005,8 @@ void pc_state::siemens(machine_config &config) ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(siemens)); // FIXME: determine ISA bus clock @@ -1045,6 +1055,8 @@ void pc_state::laser_turbo_xt(machine_config &config) ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); // FIXME: determine ISA bus clock @@ -1129,6 +1141,8 @@ void pc_state::zenith(machine_config &config) ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga", false); // FIXME: determine ISA bus clock @@ -1196,6 +1210,8 @@ void pc_state::juko16(machine_config &config) ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga", false); // FIXME: determine ISA bus clock diff --git a/src/mame/drivers/pcxt.cpp b/src/mame/drivers/pcxt.cpp index 5a224b39f2b..c80cd3fecf0 100644 --- a/src/mame/drivers/pcxt.cpp +++ b/src/mame/drivers/pcxt.cpp @@ -502,7 +502,11 @@ void pcxt_state::filetto(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &pcxt_state::filetto_map); m_maincpu->set_addrmap(AS_IO, &pcxt_state::filetto_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - PCNOPPI_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + + PCNOPPI_MOTHERBOARD(config, m_mb, 0).set_cputag(m_maincpu); + m_mb->int_callback().set_inputline(m_maincpu, 0); + m_mb->nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + ISA8_SLOT(config, "isa1", 0, "mb:isa", filetto_isa8_cards, "filetto", true); // FIXME: determine ISA bus clock HC55516(config, "voice", 8000000/4).add_route(ALL_OUTPUTS, "mb:mono", 0.60); //8923S-UM5100 is a HC55536 with ROM hook-up @@ -518,7 +522,10 @@ void pcxt_state::tetriskr(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &pcxt_state::tetriskr_map); m_maincpu->set_addrmap(AS_IO, &pcxt_state::tetriskr_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - PCNOPPI_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + + PCNOPPI_MOTHERBOARD(config, m_mb, 0).set_cputag(m_maincpu); + m_mb->int_callback().set_inputline(m_maincpu, 0); + m_mb->nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); ISA8_SLOT(config, "isa1", 0, "mb:isa", filetto_isa8_cards, "tetriskr", true); // FIXME: determine ISA bus clock diff --git a/src/mame/drivers/tandy1t.cpp b/src/mame/drivers/tandy1t.cpp index 8af3a78fbdb..ad6000156ef 100644 --- a/src/mame/drivers/tandy1t.cpp +++ b/src/mame/drivers/tandy1t.cpp @@ -662,6 +662,8 @@ void tandy1000_state::tandy1000_common(machine_config &config) { T1000_MOTHERBOARD(config, m_mb, 0); m_mb->set_cputag("maincpu"); + m_mb->int_callback().set_inputline("maincpu", 0); + m_mb->nmi_callback().set_inputline("maincpu", INPUT_LINE_NMI); /* video hardware */ PCVIDEO_T1000(config, m_video, 0); diff --git a/src/mame/drivers/tosh1000.cpp b/src/mame/drivers/tosh1000.cpp index 643ddc26a00..f718b6e3bff 100644 --- a/src/mame/drivers/tosh1000.cpp +++ b/src/mame/drivers/tosh1000.cpp @@ -264,7 +264,10 @@ void tosh1000_state::tosh1000(machine_config &config) MCFG_MACHINE_RESET_OVERRIDE(tosh1000_state, tosh1000) - IBM5160_MOTHERBOARD(config, "mb", 0).set_cputag(m_maincpu); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + mb.set_cputag(m_maincpu); + mb.int_callback().set_inputline(m_maincpu, 0); + mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); TC8521(config, "rtc", XTAL(32'768)); -- cgit v1.2.3