From 7af583d188832fb5dbe05a567c5d86aa3db0588f Mon Sep 17 00:00:00 2001 From: AJR Date: Thu, 9 Nov 2017 10:48:02 -0500 Subject: [PATCH] genpc, isa8: Make maincpu tag more honestly configurable (nw) --- src/devices/bus/cbmiec/c1571.cpp | 2 +- src/devices/bus/isa/isa.cpp | 9 +++------ src/devices/bus/isa/isa.h | 3 +-- src/devices/machine/genpc.cpp | 7 ++++++- src/devices/machine/genpc.h | 15 +++++++++++---- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/devices/bus/cbmiec/c1571.cpp b/src/devices/bus/cbmiec/c1571.cpp index adf1f3ab043..686b2028b39 100644 --- a/src/devices/bus/cbmiec/c1571.cpp +++ b/src/devices/bus/cbmiec/c1571.cpp @@ -737,7 +737,7 @@ MACHINE_CONFIG_MEMBER( mini_chief_device::device_add_mconfig ) MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats) MCFG_DEVICE_ADD(ISA_BUS_TAG, ISA8, 0) - MCFG_ISA8_CPU(M6502_TAG) + MCFG_ISA8_CPU("^" M6502_TAG) MCFG_ISA8_SLOT_ADD(ISA_BUS_TAG, "isa1", mini_chief_isa8_cards, "wd1002a_wx1", false) MACHINE_CONFIG_END diff --git a/src/devices/bus/isa/isa.cpp b/src/devices/bus/isa/isa.cpp index bb7dc721d96..29acc810fd5 100644 --- a/src/devices/bus/isa/isa.cpp +++ b/src/devices/bus/isa/isa.cpp @@ -103,7 +103,7 @@ DEFINE_DEVICE_TYPE(ISA8, isa8_device, "isa8", "8-bit ISA bus") void isa8_device::static_set_cputag(device_t &device, const char *tag) { isa8_device &isa = downcast(device); - isa.m_cputag = tag; + isa.m_maincpu.set_tag(tag); } void isa8_device::static_set_custom_spaces(device_t &device) @@ -133,7 +133,7 @@ isa8_device::isa8_device(const machine_config &mconfig, device_type type, const m_io_config("ISA 8-bit I/O", ENDIANNESS_LITTLE, 8, 16, 0, nullptr), m_mem16_config("ISA 16-bit mem", ENDIANNESS_LITTLE, 16, 24, 0, nullptr), m_io16_config("ISA 16-bit I/O", ENDIANNESS_LITTLE, 16, 16, 0, nullptr), - m_maincpu(nullptr), + m_maincpu(*this, finder_base::DUMMY_TAG), m_iospace(nullptr), m_memspace(nullptr), m_out_irq2_cb(*this), @@ -144,7 +144,7 @@ isa8_device::isa8_device(const machine_config &mconfig, device_type type, const m_out_irq7_cb(*this), m_out_drq1_cb(*this), m_out_drq2_cb(*this), - m_out_drq3_cb(*this), m_cputag(nullptr), + m_out_drq3_cb(*this), m_write_iochck(*this) { for(int i=0;i<8;i++) @@ -222,8 +222,6 @@ void isa8_device::device_start() m_out_drq2_cb.resolve_safe(); m_out_drq3_cb.resolve_safe(); - m_maincpu = subdevice(m_cputag); - if (m_allocspaces) { m_iospace = &space(AS_ISA_IO); @@ -337,7 +335,6 @@ void isa8_device::unmap_rom(offs_t start, offs_t end) bool isa8_device::is_option_rom_space_available(offs_t start, int size) { - m_maincpu = machine().device(m_cputag); for(int i = 0; i < size; i += 4096) // 4KB granularity should be enough if(m_memspace->get_read_ptr(start + i)) return false; return true; diff --git a/src/devices/bus/isa/isa.h b/src/devices/bus/isa/isa.h index 32b344fdbb3..e41e5cf07ec 100644 --- a/src/devices/bus/isa/isa.h +++ b/src/devices/bus/isa/isa.h @@ -269,7 +269,7 @@ protected: virtual void device_reset() override; // internal state - cpu_device *m_maincpu; + required_device m_maincpu; // address spaces address_space *m_iospace, *m_memspace; @@ -288,7 +288,6 @@ protected: device_isa8_card_interface *m_dma_device[8]; bool m_dma_eop[8]; - const char *m_cputag; bool m_nmi_enabled; private: diff --git a/src/devices/machine/genpc.cpp b/src/devices/machine/genpc.cpp index 6aa7524d383..74180d23423 100644 --- a/src/devices/machine/genpc.cpp +++ b/src/devices/machine/genpc.cpp @@ -164,6 +164,11 @@ WRITE_LINE_MEMBER(ibm5160_mb_device::pc_speaker_set_spkrdata) m_speaker->level_w(m_pc_spkrdata & m_pit_out2); } +WRITE_LINE_MEMBER(ibm5160_mb_device::pic_int_w) +{ + m_maincpu->set_input_line(0, state); +} + /************************************************************* * @@ -427,7 +432,7 @@ MACHINE_CONFIG_MEMBER( ibm5160_mb_device::device_add_mconfig ) MCFG_I8237_OUT_DACK_3_CB(WRITELINE(ibm5160_mb_device, pc_dack3_w)) MCFG_DEVICE_ADD("pic8259", PIC8259, 0) - MCFG_PIC8259_OUT_INT_CB(INPUTLINE(":maincpu", 0)) + MCFG_PIC8259_OUT_INT_CB(WRITELINE(ibm5160_mb_device, pic_int_w)) MCFG_DEVICE_ADD("ppi8255", I8255A, 0) MCFG_I8255_IN_PORTA_CB(READ8(ibm5160_mb_device, pc_ppi_porta_r)) diff --git a/src/devices/machine/genpc.h b/src/devices/machine/genpc.h index ce5f393395e..22e53130bf1 100644 --- a/src/devices/machine/genpc.h +++ b/src/devices/machine/genpc.h @@ -25,7 +25,9 @@ #define MCFG_IBM5160_MOTHERBOARD_ADD(_tag, _cputag) \ MCFG_DEVICE_ADD(_tag, IBM5160_MOTHERBOARD, 0) \ - ibm5160_mb_device::static_set_cputag(*device, "^" _cputag); + ibm5160_mb_device::static_set_cputag(*device, "^" _cputag); \ + isa8_device::static_set_cputag(*device->subdevice("isa"), "^^" _cputag); + // ======================> ibm5160_mb_device class ibm5160_mb_device : public device_t { @@ -48,6 +50,8 @@ public: DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out1_changed ); DECLARE_WRITE_LINE_MEMBER( pc_pit8253_out2_changed ); + DECLARE_WRITE_LINE_MEMBER( pic_int_w ); + protected: ibm5160_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); @@ -126,7 +130,8 @@ DECLARE_DEVICE_TYPE(IBM5160_MOTHERBOARD, ibm5160_mb_device) #define MCFG_IBM5150_MOTHERBOARD_ADD(_tag, _cputag) \ MCFG_DEVICE_ADD(_tag, IBM5150_MOTHERBOARD, 0) \ - ibm5150_mb_device::static_set_cputag(*device, "^" _cputag); + ibm5150_mb_device::static_set_cputag(*device, "^" _cputag); \ + isa8_device::static_set_cputag(*device->subdevice("isa"), "^^" _cputag); // ======================> ibm5150_mb_device class ibm5150_mb_device : public ibm5160_mb_device @@ -158,7 +163,8 @@ DECLARE_DEVICE_TYPE(IBM5150_MOTHERBOARD, ibm5150_mb_device) #define MCFG_EC1841_MOTHERBOARD_ADD(_tag, _cputag) \ MCFG_DEVICE_ADD(_tag, EC1841_MOTHERBOARD, 0) \ - ec1841_mb_device::static_set_cputag(*device, "^" _cputag); + ec1841_mb_device::static_set_cputag(*device, "^" _cputag); \ + isa8_device::static_set_cputag(*device->subdevice("isa"), "^^" _cputag); class ec1841_mb_device : public ibm5160_mb_device { @@ -183,7 +189,8 @@ DECLARE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device) #define MCFG_PCNOPPI_MOTHERBOARD_ADD(_tag, _cputag) \ MCFG_DEVICE_ADD(_tag, PCNOPPI_MOTHERBOARD, 0) \ - pc_noppi_mb_device::static_set_cputag(*device, "^" _cputag); + pc_noppi_mb_device::static_set_cputag(*device, "^" _cputag); \ + isa8_device::static_set_cputag(*device->subdevice("isa"), "^^" _cputag); class pc_noppi_mb_device : public ibm5160_mb_device {