genpc, isa8: Make maincpu tag more honestly configurable (nw)

master
AJR 2017-11-09 10:48:02 -05:00
parent 220fedf8c0
commit 7af583d188
5 changed files with 22 additions and 14 deletions

View File

@ -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

View File

@ -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<isa8_device &>(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<cpu_device>(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<cpu_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;

View File

@ -269,7 +269,7 @@ protected:
virtual void device_reset() override;
// internal state
cpu_device *m_maincpu;
required_device<cpu_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:

View File

@ -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))

View File

@ -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
{