summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/bus/a2bus/a2mockingboard.cpp502
-rw-r--r--src/devices/bus/a2bus/a2mockingboard.h32
-rw-r--r--src/devices/bus/bbc/tube/tube_zep100.cpp41
-rw-r--r--src/devices/bus/bbc/tube/tube_zep100.h2
-rw-r--r--src/devices/bus/cbmiec/fd2000.cpp48
-rw-r--r--src/devices/bus/cbmiec/fd2000.h2
-rw-r--r--src/devices/bus/electron/m2105.cpp56
-rw-r--r--src/devices/bus/ieee488/c2040.cpp172
-rw-r--r--src/devices/bus/ieee488/c2040.h1
-rw-r--r--src/devices/bus/ieee488/c2040fdc.h3
-rw-r--r--src/devices/bus/ieee488/c8050.cpp192
-rw-r--r--src/devices/bus/ieee488/c8050.h1
-rw-r--r--src/devices/bus/vic20/vic1112.cpp34
-rw-r--r--src/devices/imagedev/floppy.h4
-rw-r--r--src/devices/machine/6522via.h39
-rw-r--r--src/devices/video/ramdac.h6
16 files changed, 436 insertions, 699 deletions
diff --git a/src/devices/bus/a2bus/a2mockingboard.cpp b/src/devices/bus/a2bus/a2mockingboard.cpp
index d905fe13bfd..71a21fa00a8 100644
--- a/src/devices/bus/a2bus/a2mockingboard.cpp
+++ b/src/devices/bus/a2bus/a2mockingboard.cpp
@@ -38,72 +38,57 @@ DEFINE_DEVICE_TYPE(A2BUS_ECHOPLUS, a2bus_echoplus_device, "a2echop", "S
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(a2bus_ayboard_device::device_add_mconfig)
- MCFG_DEVICE_ADD(VIA1_TAG, VIA6522, 1022727)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, a2bus_ayboard_device, via1_out_a))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, a2bus_ayboard_device, via1_out_b))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, a2bus_ayboard_device, via1_irq_w))
+void a2bus_ayboard_device::add_common_devices(machine_config &config)
+{
+ VIA6522(config, m_via1, 1022727);
+ m_via1->writepa_handler().set(FUNC(a2bus_ayboard_device::via1_out_a));
+ m_via1->writepb_handler().set(FUNC(a2bus_ayboard_device::via1_out_b));
+ m_via1->irq_handler().set(FUNC(a2bus_ayboard_device::via1_irq_w));
- MCFG_DEVICE_ADD(VIA2_TAG, VIA6522, 1022727)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, a2bus_ayboard_device, via2_out_a))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, a2bus_ayboard_device, via2_out_b))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, a2bus_ayboard_device, via2_irq_w))
+ VIA6522(config, m_via2, 1022727);
+ m_via2->writepa_handler().set(FUNC(a2bus_ayboard_device::via2_out_a));
+ m_via2->writepb_handler().set(FUNC(a2bus_ayboard_device::via2_out_b));
+ m_via2->irq_handler().set(FUNC(a2bus_ayboard_device::via2_irq_w));
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD(AY1_TAG, AY8913, 1022727)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_DEVICE_ADD(AY2_TAG, AY8913, 1022727)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(a2bus_phasor_device::device_add_mconfig)
- MCFG_DEVICE_ADD(VIA1_TAG, VIA6522, 1022727)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, a2bus_ayboard_device, via1_out_a))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, a2bus_ayboard_device, via1_out_b))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, a2bus_ayboard_device, via1_irq_w))
-
- MCFG_DEVICE_ADD(VIA2_TAG, VIA6522, 1022727)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, a2bus_ayboard_device, via2_out_a))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, a2bus_ayboard_device, via2_out_b))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, a2bus_ayboard_device, via2_irq_w))
+ AY8913(config, m_ay1, 1022727);
+ m_ay1->add_route(ALL_OUTPUTS, "lspeaker", 1.0);
+}
+
+void a2bus_ayboard_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+
+ AY8913(config, m_ay2, 1022727);
+ m_ay2->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+}
+
+void a2bus_phasor_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+
+ m_via1->writepb_handler().set(FUNC(a2bus_phasor_device::via1_out_b));
+ m_via2->writepb_handler().set(FUNC(a2bus_phasor_device::via2_out_b));
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
SPEAKER(config, "lspeaker2").front_left();
SPEAKER(config, "rspeaker2").front_right();
- MCFG_DEVICE_ADD(AY1_TAG, AY8913, 1022727)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_DEVICE_ADD(AY2_TAG, AY8913, 1022727)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker2", 1.0)
- MCFG_DEVICE_ADD(AY3_TAG, AY8913, 1022727)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
- MCFG_DEVICE_ADD(AY4_TAG, AY8913, 1022727)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker2", 1.0)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(a2bus_echoplus_device::device_add_mconfig)
- MCFG_DEVICE_ADD(VIA1_TAG, VIA6522, 1022727)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, a2bus_ayboard_device, via1_out_a))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, a2bus_ayboard_device, via1_out_b))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, a2bus_ayboard_device, via1_irq_w))
-
- MCFG_DEVICE_ADD(VIA2_TAG, VIA6522, 1022727)
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, a2bus_ayboard_device, via2_out_a))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, a2bus_ayboard_device, via2_out_b))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, a2bus_ayboard_device, via2_irq_w))
+ AY8913(config, m_ay2, 1022727);
+ AY8913(config, m_ay3, 1022727);
+ AY8913(config, m_ay4, 1022727);
+ m_ay2->add_route(ALL_OUTPUTS, "lspeaker2", 1.0);
+ m_ay3->add_route(ALL_OUTPUTS, "rspeaker", 1.0);
+ m_ay4->add_route(ALL_OUTPUTS, "rspeaker2", 1.0);
+}
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD(AY1_TAG, AY8913, 1022727)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
- MCFG_DEVICE_ADD(AY2_TAG, AY8913, 1022727)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
+void a2bus_echoplus_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
SPEAKER(config, "echosp").front_center();
- MCFG_DEVICE_ADD(E2P_TMS_TAG, TMS5220, 640000)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "echosp", 1.0)
-MACHINE_CONFIG_END
+ TMS5220(config, m_tms, 640000);
+ m_tms->add_route(ALL_OUTPUTS, "echosp", 1.0);
+}
//**************************************************************************
// LIVE DEVICE
@@ -116,31 +101,28 @@ a2bus_ayboard_device::a2bus_ayboard_device(const machine_config &mconfig, device
m_via2(*this, VIA2_TAG),
m_ay1(*this, AY1_TAG),
m_ay2(*this, AY2_TAG),
- m_ay3(*this, AY3_TAG),
- m_ay4(*this, AY4_TAG), m_isPhasor(false), m_PhasorNative(false), m_porta1(0), m_porta2(0)
+ m_porta1(0),
+ m_porta2(0)
{
}
a2bus_mockingboard_device::a2bus_mockingboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
a2bus_ayboard_device(mconfig, A2BUS_MOCKINGBOARD, tag, owner, clock)
{
- m_isPhasor = false;
- m_PhasorNative = false;
}
a2bus_phasor_device::a2bus_phasor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- a2bus_ayboard_device(mconfig, A2BUS_PHASOR, tag, owner, clock)
+ a2bus_ayboard_device(mconfig, A2BUS_PHASOR, tag, owner, clock),
+ m_ay3(*this, AY3_TAG),
+ m_ay4(*this, AY4_TAG),
+ m_native(false)
{
- m_isPhasor = true;
- m_PhasorNative = false;
}
a2bus_echoplus_device::a2bus_echoplus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
a2bus_ayboard_device(mconfig, A2BUS_ECHOPLUS, tag, owner, clock),
m_tms(*this, E2P_TMS_TAG)
{
- m_isPhasor = false;
- m_PhasorNative = false;
}
//-------------------------------------------------
@@ -164,48 +146,34 @@ void a2bus_ayboard_device::device_reset()
uint8_t a2bus_ayboard_device::read_cnxx(uint8_t offset)
{
- if (m_isPhasor)
- {
- uint8_t retVal = 0;
- int viaSel;
+ if (offset <= 0x10)
+ return m_via1->read(offset & 0xf);
+ else if (offset >= 0x80 && offset <= 0x90)
+ return m_via2->read(offset & 0xf);
- if (m_PhasorNative)
- {
- viaSel = ((offset & 0x80)>> 6) | ((offset & 0x10)>> 4);
- }
- else
- {
- viaSel = (offset & 0x80) ? 2 : 1;
- }
+ return 0;
+}
- if ((offset <= 0x20) || (offset >= 0x80 && offset <= 0xa0))
- {
- if (viaSel & 1)
- {
- retVal |= m_via1->read(offset & 0xf);
- }
-
- if (viaSel & 2)
- {
- retVal |= m_via2->read(offset & 0xf);
- }
- }
+uint8_t a2bus_phasor_device::read_cnxx(uint8_t offset)
+{
+ uint8_t ret = 0;
+ int via_sel;
- return retVal;
- }
+ if (m_native)
+ via_sel = ((offset & 0x80) >> 6) | ((offset & 0x10) >> 4);
else
+ via_sel = (offset & 0x80) ? 2 : 1;
+
+ if ((offset <= 0x20) || (offset >= 0x80 && offset <= 0xa0))
{
- if (offset <= 0x10)
- {
- return m_via1->read(offset & 0xf);
- }
- else if (offset >= 0x80 && offset <= 0x90)
- {
- return m_via2->read(offset & 0xf);
- }
+ if (BIT(via_sel, 0))
+ ret |= m_via1->read(offset & 0xf);
+
+ if (BIT(via_sel, 1))
+ ret |= m_via2->read(offset & 0xf);
}
- return 0;
+ return ret;
}
/*-------------------------------------------------
@@ -214,71 +182,47 @@ uint8_t a2bus_ayboard_device::read_cnxx(uint8_t offset)
void a2bus_ayboard_device::write_cnxx(uint8_t offset, uint8_t data)
{
- if (m_isPhasor)
- {
- if ((offset <= 0x20) || (offset >= 0x80 && offset <= 0xa0))
- {
- int viaSel;
-
- if (m_PhasorNative)
- {
- viaSel = ((offset & 0x80)>> 6) | ((offset & 0x10)>> 4);
- }
- else
- {
- viaSel = (offset & 0x80) ? 2 : 1;
- }
-
- if (viaSel & 1)
- {
- m_via1->write(offset&0xf, data);
- }
- if (viaSel & 2)
- {
- m_via2->write(offset&0xf, data);
- }
- }
- }
+ if (offset <= 0x10)
+ m_via1->write(offset & 0xf, data);
+ else if (offset >= 0x80 && offset <= 0x90)
+ m_via2->write(offset & 0xf, data);
else
+ logerror("Mockingboard(%d): unk write %02x to Cn%02X (%s)\n", slotno(), data, offset, machine().describe_context());
+}
+
+void a2bus_phasor_device::write_cnxx(uint8_t offset, uint8_t data)
+{
+ if ((offset <= 0x20) || (offset >= 0x80 && offset <= 0xa0))
{
- if (offset <= 0x10)
- {
+ int via_sel;
+
+ if (m_native)
+ via_sel = ((offset & 0x80) >> 6) | ((offset & 0x10) >> 4);
+ else
+ via_sel = (offset & 0x80) ? 2 : 1;
+
+ if (BIT(via_sel, 0))
m_via1->write(offset & 0xf, data);
- }
- else if (offset >= 0x80 && offset <= 0x90)
- {
+
+ if (BIT(via_sel, 1))
m_via2->write(offset & 0xf, data);
- }
- else
- {
- logerror("Mockingboard(%d): unk write %02x to Cn%02X (%s)\n", slotno(), data, offset, machine().describe_context());
- }
}
}
-
WRITE_LINE_MEMBER( a2bus_ayboard_device::via1_irq_w )
{
if (state)
- {
raise_slot_irq();
- }
else
- {
lower_slot_irq();
- }
}
WRITE_LINE_MEMBER( a2bus_ayboard_device::via2_irq_w )
{
if (state)
- {
raise_slot_irq();
- }
else
- {
lower_slot_irq();
- }
}
WRITE8_MEMBER( a2bus_ayboard_device::via1_out_a )
@@ -288,88 +232,77 @@ WRITE8_MEMBER( a2bus_ayboard_device::via1_out_a )
WRITE8_MEMBER( a2bus_ayboard_device::via1_out_b )
{
+ if (!BIT(data, 2))
+ {
+ m_ay1->reset_w(space, 0, 0);
+ }
+ else
+ {
+ switch (data & 3)
+ {
+ case 0: // BDIR=0, BC1=0 (inactive)
+ break;
+
+ case 1: // BDIR=0, BC1=1 (read PSG)
+ m_porta1 = m_ay1->read_data();
+ break;
+
+ case 2: // BDIR=1, BC1=0 (write PSG)
+ m_ay1->write_data(m_porta1);
+ break;
+
+ case 3: // BDIR=1, BC1=1 (latch)
+ m_ay1->write_address(m_porta1);
+ break;
+ }
+ }
+}
+
+WRITE8_MEMBER( a2bus_phasor_device::via1_out_b )
+{
if (!(data & 4))
{
m_ay1->reset_w(space, 0, 0);
- if (m_isPhasor && m_PhasorNative)
+ if (m_native)
{
m_ay2->reset_w(space, 0, 0);
}
}
else
{
- if (!m_isPhasor)
+ int chip_sel;
+
+ if (m_native)
+ chip_sel = (~(data >> 3) & 3);
+ else
+ chip_sel = 1;
+
+// logerror("Phasor: %02x to AY1/2 CS %02x (BDIR/BC1 %02x, data %02x)\n", m_porta1, chipSel, data & 3, data);
+ switch (data & 3)
{
- switch (data & 3)
- {
- case 0: // BDIR=0, BC1=0 (inactive)
- break;
+ case 0: // BDIR=0, BC1=0 (inactive)
+ break;
- case 1: // BDIR=0, BC1=1 (read PSG)
+ case 1: // BDIR=0, BC1=1 (read PSG)
+ if (BIT(chip_sel, 0))
m_porta1 = m_ay1->read_data();
- break;
+ if (BIT(chip_sel, 1))
+ m_porta1 = m_ay2->read_data();
+ break;
- case 2: // BDIR=1, BC1=0 (write PSG)
+ case 2: // BDIR=1, BC1=0 (write PSG)
+ if (BIT(chip_sel, 0))
m_ay1->write_data(m_porta1);
- break;
+ if (BIT(chip_sel, 1))
+ m_ay2->write_data(m_porta1);
+ break;
- case 3: // BDIR=1, BC1=1 (latch)
+ case 3: // BDIR=1, BC1=1 (latch)
+ if (BIT(chip_sel, 0))
m_ay1->write_address(m_porta1);
- break;
- }
- }
- else
- {
- int chipSel;
-
- if (m_PhasorNative)
- {
- chipSel = (~(data >> 3) & 3);
- }
- else
- {
- chipSel = 1;
- }
-
-// logerror("Phasor: %02x to AY1/2 CS %02x (BDIR/BC1 %02x, data %02x)\n", m_porta1, chipSel, data & 3, data);
- switch (data & 3)
- {
- case 0: // BDIR=0, BC1=0 (inactive)
- break;
-
- case 1: // BDIR=0, BC1=1 (read PSG)
- if (chipSel & 1)
- {
- m_porta1 = m_ay1->read_data();
- }
- if (chipSel & 2)
- {
- m_porta1 = m_ay2->read_data();
- }
- break;
-
- case 2: // BDIR=1, BC1=0 (write PSG)
- if (chipSel & 1)
- {
- m_ay1->write_data(m_porta1);
- }
- if (chipSel & 2)
- {
- m_ay2->write_data(m_porta1);
- }
- break;
-
- case 3: // BDIR=1, BC1=1 (latch)
- if (chipSel & 1)
- {
- m_ay1->write_address(m_porta1);
- }
- if (chipSel & 2)
- {
- m_ay2->write_address(m_porta1);
- }
- break;
- }
+ if (BIT(chip_sel, 1))
+ m_ay2->write_address(m_porta1);
+ break;
}
}
}
@@ -381,9 +314,37 @@ WRITE8_MEMBER( a2bus_ayboard_device::via2_out_a )
WRITE8_MEMBER( a2bus_ayboard_device::via2_out_b )
{
- if (!(data & 4))
+ if (!BIT(data, 2))
+ {
+ m_ay2->reset_w(space, 0, 0);
+ }
+ else
{
- if (m_isPhasor && m_PhasorNative)
+ switch (data & 3)
+ {
+ case 0: // BDIR=0, BC1=0 (inactive)
+ break;
+
+ case 1: // BDIR=0, BC1=1 (read PSG)
+ m_porta2 = m_ay2->read_data();
+ break;
+
+ case 2: // BDIR=1, BC1=0 (write PSG)
+ m_ay2->write_data(m_porta2);
+ break;
+
+ case 3: // BDIR=1, BC1=1 (latch)
+ m_ay2->write_data(m_porta2);
+ break;
+ }
+ }
+}
+
+WRITE8_MEMBER( a2bus_phasor_device::via2_out_b )
+{
+ if (!BIT(data, 2))
+ {
+ if (m_native)
{
m_ay3->reset_w(space, 0, 0);
m_ay4->reset_w(space, 0, 0);
@@ -395,98 +356,53 @@ WRITE8_MEMBER( a2bus_ayboard_device::via2_out_b )
}
else
{
- if (!m_isPhasor)
- {
- switch (data & 3)
- {
- case 0: // BDIR=0, BC1=0 (inactive)
- break;
-
- case 1: // BDIR=0, BC1=1 (read PSG)
- m_porta2 = m_ay2->read_data();
- break;
-
- case 2: // BDIR=1, BC1=0 (write PSG)
- m_ay2->write_data(m_porta2);
- break;
-
- case 3: // BDIR=1, BC1=1 (latch)
- m_ay2->write_data(m_porta2);
- break;
- }
- }
+ int chip_sel;
+
+ if (m_native)
+ chip_sel = (~(data >> 3) & 3);
else
+ chip_sel = 1;
+
+// logerror("Phasor: %02x to AY3/4 CS %02x (BDIR/BC1 %02x, data %02x)\n", m_porta2, chipSel, data & 3, data);
+ switch (data & 3)
{
- int chipSel;
-
- if (m_PhasorNative)
- {
- chipSel = (~(data >> 3) & 3);
- }
- else
- {
- chipSel = 1;
- }
-
-// logerror("Phasor: %02x to AY3/4 CS %02x (BDIR/BC1 %02x, data %02x)\n", m_porta2, chipSel, data & 3, data);
- switch (data & 3)
- {
- case 0: // BDIR=0, BC1=0 (inactive)
- break;
-
- case 1: // BDIR=0, BC1=1 (read PSG)
- if (chipSel & 1)
- {
- m_porta2 = m_ay3->read_data();
- }
- if (chipSel & 2)
- {
- m_porta2 = m_ay4->read_data();
- }
- break;
-
- case 2: // BDIR=1, BC1=0 (write PSG)
- if (chipSel & 1)
- {
- m_ay3->write_data(m_porta2);
- }
- if (chipSel & 2)
- {
- m_ay4->write_data(m_porta2);
- }
- break;
-
- case 3: // BDIR=1, BC1=1 (latch)
- if (chipSel & 1)
- {
- m_ay3->write_address(m_porta2);
- }
- if (chipSel & 2)
- {
- m_ay4->write_address(m_porta2);
- }
- break;
- }
+ case 0: // BDIR=0, BC1=0 (inactive)
+ break;
+
+ case 1: // BDIR=0, BC1=1 (read PSG)
+ if (BIT(chip_sel, 0))
+ m_porta2 = m_ay3->read_data();
+ if (BIT(chip_sel, 1))
+ m_porta2 = m_ay4->read_data();
+ break;
+
+ case 2: // BDIR=1, BC1=0 (write PSG)
+ if (BIT(chip_sel, 0))
+ m_ay3->write_data(m_porta2);
+ if (BIT(chip_sel, 1))
+ m_ay4->write_data(m_porta2);
+ break;
+
+ case 3: // BDIR=1, BC1=1 (latch)
+ if (BIT(chip_sel, 0))
+ m_ay3->write_address(m_porta2);
+ if (BIT(chip_sel, 1))
+ m_ay4->write_address(m_porta2);
+ break;
}
}
}
-uint8_t a2bus_ayboard_device::read_c0nx(uint8_t offset)
-{
- if (m_isPhasor)
- {
- m_PhasorNative = (offset & 1) ? true : false;
- }
+uint8_t a2bus_phasor_device::read_c0nx(uint8_t offset)
+{
+ m_native = BIT(offset, 0);
return 0xff;
}
-void a2bus_ayboard_device::write_c0nx(uint8_t offset, uint8_t data)
+void a2bus_phasor_device::write_c0nx(uint8_t offset, uint8_t data)
{
- if (m_isPhasor)
- {
- m_PhasorNative = (offset & 1) ? true : false;
- }
+ m_native = BIT(offset, 0);
}
uint8_t a2bus_echoplus_device::read_c0nx(uint8_t offset)
diff --git a/src/devices/bus/a2bus/a2mockingboard.h b/src/devices/bus/a2bus/a2mockingboard.h
index f647f1fc7a4..b7d6b7f3b97 100644
--- a/src/devices/bus/a2bus/a2mockingboard.h
+++ b/src/devices/bus/a2bus/a2mockingboard.h
@@ -28,9 +28,9 @@ public:
DECLARE_WRITE_LINE_MEMBER( via1_irq_w );
DECLARE_WRITE_LINE_MEMBER( via2_irq_w );
DECLARE_WRITE8_MEMBER(via1_out_a);
- DECLARE_WRITE8_MEMBER(via1_out_b);
+ virtual DECLARE_WRITE8_MEMBER(via1_out_b);
DECLARE_WRITE8_MEMBER(via2_out_a);
- DECLARE_WRITE8_MEMBER(via2_out_b);
+ virtual DECLARE_WRITE8_MEMBER(via2_out_b);
protected:
// construction/destruction
@@ -41,22 +41,20 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
// overrides of standard a2bus slot functions
- virtual uint8_t read_c0nx(uint8_t offset) override;
- virtual void write_c0nx(uint8_t offset, uint8_t data) override;
+ virtual uint8_t read_c0nx(uint8_t offset) override { return 0xff; }
+ virtual void write_c0nx(uint8_t offset, uint8_t data) override { }
virtual uint8_t read_cnxx(uint8_t offset) override;
virtual void write_cnxx(uint8_t offset, uint8_t data) override;
+ void add_common_devices(machine_config &config);
+
required_device<via6522_device> m_via1;
required_device<via6522_device> m_via2;
required_device<ay8913_device> m_ay1;
required_device<ay8913_device> m_ay2;
- optional_device<ay8913_device> m_ay3;
- optional_device<ay8913_device> m_ay4;
-
- bool m_isPhasor, m_PhasorNative;
-private:
- uint8_t m_porta1, m_porta2;
+ uint8_t m_porta1;
+ uint8_t m_porta2;
};
class a2bus_mockingboard_device : public a2bus_ayboard_device
@@ -70,8 +68,22 @@ class a2bus_phasor_device : public a2bus_ayboard_device
public:
a2bus_phasor_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ DECLARE_WRITE8_MEMBER(via1_out_b) override;
+ DECLARE_WRITE8_MEMBER(via2_out_b) override;
+
protected:
virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual uint8_t read_c0nx(uint8_t offset) override;
+ virtual void write_c0nx(uint8_t offset, uint8_t data) override;
+ virtual uint8_t read_cnxx(uint8_t offset) override;
+ virtual void write_cnxx(uint8_t offset, uint8_t data) override;
+
+ required_device<ay8913_device> m_ay3;
+ required_device<ay8913_device> m_ay4;
+
+private:
+ bool m_native;
};
class a2bus_echoplus_device : public a2bus_ayboard_device
diff --git a/src/devices/bus/bbc/tube/tube_zep100.cpp b/src/devices/bus/bbc/tube/tube_zep100.cpp
index 000af70de85..2096019c671 100644
--- a/src/devices/bus/bbc/tube/tube_zep100.cpp
+++ b/src/devices/bus/bbc/tube/tube_zep100.cpp
@@ -57,30 +57,31 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(bbc_tube_zep100_device::device_add_mconfig)
- MCFG_DEVICE_ADD("z80", Z80, XTAL(4'000'000))
- MCFG_DEVICE_PROGRAM_MAP(tube_zep100_mem)
- MCFG_DEVICE_IO_MAP(tube_zep100_io)
-
- MCFG_DEVICE_ADD("via", VIA6522, XTAL(4'000'000) / 2)
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, bbc_tube_zep100_device, via_pb_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE("ppi", i8255_device, pc2_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE("ppi", i8255_device, pc6_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(DEVICE_SELF_OWNER, bbc_tube_slot_device, irq_w))
-
- MCFG_DEVICE_ADD("ppi", I8255A, 0)
- MCFG_I8255_OUT_PORTA_CB(WRITE8("via", via6522_device, write_pa))
- MCFG_I8255_IN_PORTB_CB(READ8(*this, bbc_tube_zep100_device, ppi_pb_r))
- MCFG_I8255_OUT_PORTC_CB(WRITE8(*this, bbc_tube_zep100_device, ppi_pc_w))
+void bbc_tube_zep100_device::device_add_mconfig(machine_config &config)
+{
+ Z80(config, m_z80, XTAL(4'000'000));
+ m_z80->set_addrmap(AS_PROGRAM, &bbc_tube_zep100_device::tube_zep100_mem);
+ m_z80->set_addrmap(AS_IO, &bbc_tube_zep100_device::tube_zep100_io);
+
+ VIA6522(config, m_via, XTAL(4'000'000) / 2);
+ m_via->writepb_handler().set(FUNC(bbc_tube_zep100_device::via_pb_w));
+ m_via->cb2_handler().set(m_ppi, FUNC(i8255_device::pc2_w));
+ m_via->ca2_handler().set(m_ppi, FUNC(i8255_device::pc6_w));
+ m_via->irq_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_tube_slot_device::irq_w));
+
+ I8255A(config, m_ppi, 0);
+ m_ppi->out_pa_callback().set(m_via, FUNC(via6522_device::write_pa));
+ m_ppi->in_pb_callback().set(FUNC(bbc_tube_zep100_device::ppi_pb_r));
+ m_ppi->out_pc_callback().set(FUNC(bbc_tube_zep100_device::ppi_pc_w));
/* internal ram */
- MCFG_RAM_ADD(RAM_TAG)
- MCFG_RAM_DEFAULT_SIZE("64K")
- MCFG_RAM_DEFAULT_VALUE(0x00)
+ RAM(config, m_ram);
+ m_ram->set_default_size("64K");
+ m_ram->set_default_value(0x00);
/* software lists */
- MCFG_SOFTWARE_LIST_ADD("flop_ls_torch", "bbc_flop_torch")
-MACHINE_CONFIG_END
+ SOFTWARE_LIST(config, "flop_ls_torch").set_type("bbc_flop_torch", SOFTWARE_LIST_ORIGINAL_SYSTEM);
+}
//-------------------------------------------------
// rom_region - device-specific ROM region
diff --git a/src/devices/bus/bbc/tube/tube_zep100.h b/src/devices/bus/bbc/tube/tube_zep100.h
index af6cae2d78d..5f6ddca8b09 100644
--- a/src/devices/bus/bbc/tube/tube_zep100.h
+++ b/src/devices/bus/bbc/tube/tube_zep100.h
@@ -45,7 +45,7 @@ protected:
virtual DECLARE_WRITE8_MEMBER( host_w ) override;
private:
- required_device<cpu_device> m_z80;
+ required_device<z80_device> m_z80;
required_device<via6522_device> m_via;
required_device<i8255_device> m_ppi;
required_device<ram_device> m_ram;
diff --git a/src/devices/bus/cbmiec/fd2000.cpp b/src/devices/bus/cbmiec/fd2000.cpp
index 94256ad02d1..2cecbec41e2 100644
--- a/src/devices/bus/cbmiec/fd2000.cpp
+++ b/src/devices/bus/cbmiec/fd2000.cpp
@@ -215,36 +215,32 @@ FLOPPY_FORMATS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(fd2000_device::device_add_mconfig)
- MCFG_DEVICE_ADD(G65SC02PI2_TAG, M65C02, XTAL(24'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(fd2000_mem)
-
- MCFG_DEVICE_ADD(G65SC22P2_TAG, VIA6522, XTAL(24'000'000)/12)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, fd2000_device, via_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, fd2000_device, via_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, fd2000_device, via_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, fd2000_device, via_pb_w))
-
- MCFG_DP8473_ADD(DP8473V_TAG)
-
- MCFG_FLOPPY_DRIVE_ADD_FIXED(DP8473V_TAG":0", fd2000_floppies, "35hd", floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats)
-MACHINE_CONFIG_END
-
+void fd2000_device::add_common_devices(machine_config &config)
+{
+ M65C02(config, m_maincpu, XTAL(24'000'000)/12);
-MACHINE_CONFIG_START(fd4000_device::device_add_mconfig)
- MCFG_DEVICE_ADD(R65C02P4_TAG, M65C02, XTAL(24'000'000)/6)
- MCFG_DEVICE_PROGRAM_MAP(fd4000_mem)
+ via6522_device &via(VIA6522(config, G65SC22P2_TAG, XTAL(24'000'000)/12));
+ via.readpa_handler().set(FUNC(fd2000_device::via_pa_r));
+ via.readpb_handler().set(FUNC(fd2000_device::via_pb_r));
+ via.writepa_handler().set(FUNC(fd2000_device::via_pa_w));
+ via.writepb_handler().set(FUNC(fd2000_device::via_pb_w));
- MCFG_DEVICE_ADD(G65SC22P2_TAG, VIA6522, XTAL(24'000'000)/12)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, fd2000_device, via_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, fd2000_device, via_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, fd2000_device, via_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, fd2000_device, via_pb_w))
+ DP8473(config, m_fdc, 0);
+}
- MCFG_PC8477A_ADD(PC8477AV1_TAG)
+void fd2000_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &fd2000_device::fd2000_mem);
+ FLOPPY_CONNECTOR(config, DP8473V_TAG":0", fd2000_floppies, "35hd", floppy_image_device::default_floppy_formats);//fd2000_device::floppy_formats);
+}
- MCFG_FLOPPY_DRIVE_ADD_FIXED(PC8477AV1_TAG":0", fd4000_floppies, "35ed", floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats)
-MACHINE_CONFIG_END
+void fd4000_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &fd4000_device::fd4000_mem);
+ FLOPPY_CONNECTOR(config, DP8473V_TAG":0", fd4000_floppies, "35hd", floppy_image_device::default_floppy_formats);//fd2000_device::floppy_formats);
+}
//**************************************************************************
diff --git a/src/devices/bus/cbmiec/fd2000.h b/src/devices/bus/cbmiec/fd2000.h
index 740c1ce6441..2b79a93dd70 100644
--- a/src/devices/bus/cbmiec/fd2000.h
+++ b/src/devices/bus/cbmiec/fd2000.h
@@ -64,6 +64,8 @@ protected:
void cbm_iec_data(int state) override;
void cbm_iec_reset(int state) override;
+ void add_common_devices(machine_config &config);
+
required_device<m65c02_device> m_maincpu;
required_device<upd765_family_device> m_fdc;
required_device<floppy_connector> m_floppy0;
diff --git a/src/devices/bus/electron/m2105.cpp b/src/devices/bus/electron/m2105.cpp
index 4a0dd4a762e..c4887527927 100644
--- a/src/devices/bus/electron/m2105.cpp
+++ b/src/devices/bus/electron/m2105.cpp
@@ -54,49 +54,51 @@ ROM_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(electron_m2105_device::device_add_mconfig)
+void electron_m2105_device::device_add_mconfig(machine_config &config)
+{
/* sound hardware */
SPEAKER(config, "mono").front_center();
- MCFG_INPUT_MERGER_ANY_HIGH("irqs")
- MCFG_INPUT_MERGER_OUTPUT_HANDLER(WRITELINE(*this, electron_m2105_device, intrq_w))
+ INPUT_MERGER_ANY_HIGH(config, m_irqs);
+ m_irqs->output_handler().set(FUNC(electron_m2105_device::intrq_w));
/* system via */
- MCFG_DEVICE_ADD("via6522_0", VIA6522, 1000000)
- /*MCFG_VIA6522_READPA_HANDLER(READ8(*this, electron_m2105_device, m2105_via_system_read_porta))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, electron_m2105_device, m2105_via_system_read_portb))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, electron_m2105_device, m2105_via_system_write_porta))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, electron_m2105_device, m2105_via_system_write_portb))*/
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE("irqs", input_merger_device, in_w<0>))
+ VIA6522(config, m_via6522_0, 1000000);
+ /*m_via6522_0->readpa_handler().set(FUNC(electron_m2105_device::m2105_via_system_read_porta));
+ m_via6522_0->readpb_handler().set(FUNC(electron_m2105_device::m2105_via_system_read_portb));
+ m_via6522_0->writepa_handler().set(FUNC(electron_m2105_device::m2105_via_system_write_porta));
+ m_via6522_0->writepb_handler().set(FUNC(electron_m2105_device::m2105_via_system_write_portb));*/
+ m_via6522_0->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<0>));
/* user via */
- MCFG_DEVICE_ADD("via6522_1", VIA6522, 1000000)
- //MCFG_VIA6522_READPB_HANDLER(READ8(*this, electron_m2105_device, m2105_via_user_read_portb))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8("cent_data_out", output_latch_device, bus_w))
- //MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, electron_m2105_device, m2105_via_user_write_portb))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_centronics, centronics_device, write_strobe))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE("irqs", input_merger_device, in_w<1>))
+ VIA6522(config, m_via6522_1, 1000000);
+ //m_via6522_1->readpb_handler().set(FUNC(electron_m2105_device::m2105_via_user_read_portb));
+ m_via6522_1->writepa_handler().set("cent_data_out", FUNC(output_latch_device::bus_w));
+ //m_via6522_1->writepb_handler().set(FUNC(electron_m2105_device::m2105_via_user_write_portb));
+ m_via6522_1->ca2_handler().set(m_centronics, FUNC(centronics_device::write_strobe));
+ m_via6522_1->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<1>));
/* duart */
- MCFG_DEVICE_ADD("duart", SCN2681, XTAL(3'686'400))
- MCFG_MC68681_IRQ_CALLBACK(WRITELINE("irqs", input_merger_device, in_w<2>))
- MCFG_MC68681_A_TX_CALLBACK(WRITELINE("rs232", rs232_port_device, write_txd))
- //MCFG_MC68681_OUTPORT_CALLBACK(WRITE8(*this, electron_m2105_device, sio_out_w))
+ SCN2681(config, m_duart, XTAL(3'686'400));
+ m_duart->irq_cb().set(m_irqs, FUNC(input_merger_device::in_w<2>));
+ m_duart->a_tx_cb().set("rs232", FUNC(rs232_port_device::write_txd));
+ //m_duart->outport_cb().set(FUNC(electron_m2105_device::sio_out_w));
- MCFG_DEVICE_ADD("rs232", RS232_PORT, default_rs232_devices, nullptr)
- MCFG_RS232_RXD_HANDLER(WRITELINE("duart", scn2681_device, rx_a_w))
+ rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, nullptr));
+ rs232.rxd_handler().set(m_duart, FUNC(scn2681_device::rx_a_w));
/* printer */
CENTRONICS(config, m_centronics, centronics_devices, "printer");
m_centronics->ack_handler().set(m_via6522_1, FUNC(via6522_device::write_ca1)).invert(); // ack seems to be inverted?
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", "centronics")
+ output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
+ m_centronics->set_output_latch(latch);
/* speech hardware */
- MCFG_DEVICE_ADD("vsm", SPEECHROM, 0)
- MCFG_DEVICE_ADD("tms5220", TMS5220, 640000)
- MCFG_TMS52XX_SPEECHROM("vsm")
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
-MACHINE_CONFIG_END
+ SPEECHROM(config, "vsm", 0);
+ TMS5220(config, m_tms, 640000);
+ m_tms->set_speechrom_tag("vsm");
+ m_tms->add_route(ALL_OUTPUTS, "mono", 1.0);
+}
const tiny_rom_entry *electron_m2105_device::device_rom_region() const
{
diff --git a/src/devices/bus/ieee488/c2040.cpp b/src/devices/bus/ieee488/c2040.cpp
index 0348912b9c2..383091e3d92 100644
--- a/src/devices/bus/ieee488/c2040.cpp
+++ b/src/devices/bus/ieee488/c2040.cpp
@@ -450,133 +450,67 @@ FLOPPY_FORMATS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c2040_device::device_add_mconfig)
- // DOS
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(16'000'000)/16)
- MCFG_DEVICE_PROGRAM_MAP(c2040_main_mem)
-
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c2040_device, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c2040_device, dio_w))
-
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c2040_device, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, c2040_device, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, c2040_device, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c2040_device, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
-
- // controller
- MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(16'000'000)/16)
- MCFG_DEVICE_PROGRAM_MAP(c2040_fdc_mem)
-
- MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL(16'000'000)/16)
- MCFG_VIA6522_READPA_HANDLER(READ8(FDC_TAG, c2040_fdc_device, read))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c2040_device, via_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(FDC_TAG, c2040_fdc_device, mode_sel_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(FDC_TAG, c2040_fdc_device, rw_sel_w))
-
- MCFG_DEVICE_ADD(M6530_TAG, MOS6530_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(FDC_TAG, c2040_fdc_device, write))
- MCFG_MOS6530n_OUT_PB0_CB(WRITELINE(FDC_TAG, c2040_fdc_device, drv_sel_w))
- MCFG_MOS6530n_OUT_PB1_CB(WRITELINE(FDC_TAG, c2040_fdc_device, ds0_w))
- MCFG_MOS6530n_OUT_PB2_CB(WRITELINE(FDC_TAG, c2040_fdc_device, ds1_w))
- MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
- MCFG_MOS6530n_IN_PB3_CB(READLINE(FDC_TAG, c2040_fdc_device, wps_r))
-
- MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL(16'000'000))
- MCFG_C2040_SYNC_CALLBACK(WRITELINE(M6530_TAG, mos6530_new_device, pb6_w))
- MCFG_C2040_READY_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_ca1))
- MCFG_C2040_ERROR_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_cb1))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":0", c2040_floppies, "525ssqd", c2040_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":1", c2040_floppies, "525ssqd", c2040_device::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(c3040_device::device_add_mconfig)
+void c2040_device::add_common_devices(machine_config &config)
+{
// DOS
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(16'000'000)/16)
- MCFG_DEVICE_PROGRAM_MAP(c2040_main_mem)
+ M6502(config, m_maincpu, XTAL(16'000'000)/16);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c2040_device::c2040_main_mem);
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c2040_device, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c2040_device, dio_w))
+ MOS6532_NEW(config, m_riot0, XTAL(16'000'000)/16);
+ m_riot0->pa_rd_callback().set(FUNC(c2040_device::dio_r));
+ m_riot0->pb_wr_callback().set(FUNC(c2040_device::dio_w));
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c2040_device, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, c2040_device, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, c2040_device, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c2040_device, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
+ MOS6532_NEW(config, m_riot1, XTAL(16'000'000)/16);
+ m_riot1->pa_rd_callback().set(FUNC(c2040_device::riot1_pa_r));
+ m_riot1->pa_wr_callback().set(FUNC(c2040_device::riot1_pa_w));
+ m_riot1->pb_rd_callback().set(FUNC(c2040_device::riot1_pb_r));
+ m_riot1->pb_wr_callback().set(FUNC(c2040_device::riot1_pb_w));
+ m_riot1->irq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
// controller
- MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(16'000'000)/16)
- MCFG_DEVICE_PROGRAM_MAP(c2040_fdc_mem)
-
- MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL(16'000'000)/16)
- MCFG_VIA6522_READPA_HANDLER(READ8(FDC_TAG, c2040_fdc_device, read))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c2040_device, via_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(FDC_TAG, c2040_fdc_device, mode_sel_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(FDC_TAG, c2040_fdc_device, rw_sel_w))
-
- MCFG_DEVICE_ADD(M6530_TAG, MOS6530_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(FDC_TAG, c2040_fdc_device, write))
- MCFG_MOS6530n_OUT_PB0_CB(WRITELINE(FDC_TAG, c2040_fdc_device, drv_sel_w))
- MCFG_MOS6530n_OUT_PB1_CB(WRITELINE(FDC_TAG, c2040_fdc_device, ds0_w))
- MCFG_MOS6530n_OUT_PB2_CB(WRITELINE(FDC_TAG, c2040_fdc_device, ds1_w))
- MCFG_MOS6530n_IN_PB3_CB(READLINE(FDC_TAG, c2040_fdc_device, wps_r))
- MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
-
- MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL(16'000'000))
- MCFG_C2040_SYNC_CALLBACK(WRITELINE(M6530_TAG, mos6530_new_device, pb6_w))
- MCFG_C2040_READY_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_ca1))
- MCFG_C2040_ERROR_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_cb1))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":0", c2040_floppies, "525ssqd", c3040_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":1", c2040_floppies, "525ssqd", c3040_device::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(c4040_device::device_add_mconfig)
- // DOS
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(16'000'000)/16)
- MCFG_DEVICE_PROGRAM_MAP(c2040_main_mem)
+ M6504(config, m_fdccpu, XTAL(16'000'000)/16);
+ m_fdccpu->set_addrmap(AS_PROGRAM, &c2040_device::c2040_fdc_mem);
+
+ VIA6522(config, m_via, XTAL(16'000'000)/16);
+ m_via->readpa_handler().set(m_fdc, FUNC(c2040_fdc_device::read));
+ m_via->writepb_handler().set(FUNC(c2040_device::via_pb_w));
+ m_via->ca2_handler().set(m_fdc, FUNC(c2040_fdc_device::mode_sel_w));
+ m_via->cb2_handler().set(m_fdc, FUNC(c2040_fdc_device::rw_sel_w));
+
+ MOS6530_NEW(config, m_miot, XTAL(16'000'000)/16);
+ m_miot->pa_wr_callback().set(m_fdc, FUNC(c2040_fdc_device::write));
+ m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c2040_fdc_device::drv_sel_w));
+ m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c2040_fdc_device::ds0_w));
+ m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c2040_fdc_device::ds1_w));
+ m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE);
+ m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c2040_fdc_device::wps_r));
+
+ C2040_FDC(config, m_fdc, XTAL(16'000'000));
+ m_fdc->sync_wr_callback().set(m_miot, FUNC(mos6530_new_device::pb6_w));
+ m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1));
+ m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1));
+}
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c2040_device, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c2040_device, dio_w))
+void c2040_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ FLOPPY_CONNECTOR(config, FDC_TAG":0", c2040_floppies, "525ssqd", c2040_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, FDC_TAG":1", c2040_floppies, "525ssqd", c2040_device::floppy_formats);
+}
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c2040_device, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, c2040_device, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, c2040_device, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c2040_device, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
+void c3040_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ FLOPPY_CONNECTOR(config, FDC_TAG":0", c2040_floppies, "525ssqd", c3040_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, FDC_TAG":1", c2040_floppies, "525ssqd", c3040_device::floppy_formats);
+}
- // controller
- MCFG_DEVICE_ADD(M6504_TAG, M6504, XTAL(16'000'000)/16)
- MCFG_DEVICE_PROGRAM_MAP(c2040_fdc_mem)
-
- MCFG_DEVICE_ADD(M6522_TAG, VIA6522, XTAL(16'000'000)/16)
- MCFG_VIA6522_READPA_HANDLER(READ8(FDC_TAG, c2040_fdc_device, read))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c2040_device, via_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(FDC_TAG, c2040_fdc_device, mode_sel_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(FDC_TAG, c2040_fdc_device, rw_sel_w))
-
- MCFG_DEVICE_ADD(M6530_TAG, MOS6530_NEW, XTAL(16'000'000)/16)
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(FDC_TAG, c2040_fdc_device, write))
- MCFG_MOS6530n_OUT_PB0_CB(WRITELINE(FDC_TAG, c2040_fdc_device, drv_sel_w))
- MCFG_MOS6530n_OUT_PB1_CB(WRITELINE(FDC_TAG, c2040_fdc_device, ds0_w))
- MCFG_MOS6530n_OUT_PB2_CB(WRITELINE(FDC_TAG, c2040_fdc_device, ds1_w))
- MCFG_MOS6530n_IN_PB3_CB(READLINE(FDC_TAG, c2040_fdc_device, wps_r))
- MCFG_MOS6530n_OUT_PB7_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
-
- MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL(16'000'000))
- MCFG_C2040_SYNC_CALLBACK(WRITELINE(M6530_TAG, mos6530_new_device, pb6_w))
- MCFG_C2040_READY_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_ca1))
- MCFG_C2040_ERROR_CALLBACK(WRITELINE(M6522_TAG, via6522_device, write_cb1))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":0", c2040_floppies, "525ssqd", c4040_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD_FIXED(FDC_TAG":1", c2040_floppies, "525ssqd", c4040_device::floppy_formats)
-MACHINE_CONFIG_END
+void c4040_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ FLOPPY_CONNECTOR(config, FDC_TAG":0", c2040_floppies, "525ssqd", c4040_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, FDC_TAG":1", c2040_floppies, "525ssqd", c4040_device::floppy_formats);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/ieee488/c2040.h b/src/devices/bus/ieee488/c2040.h
index dd72623c150..1b7c1c69618 100644
--- a/src/devices/bus/ieee488/c2040.h
+++ b/src/devices/bus/ieee488/c2040.h
@@ -66,6 +66,7 @@ protected:
LED_ERR
};
+ void add_common_devices(machine_config &config);
inline void update_ieee_signals();
DECLARE_FLOPPY_FORMATS( floppy_formats );
diff --git a/src/devices/bus/ieee488/c2040fdc.h b/src/devices/bus/ieee488/c2040fdc.h
index 7e27f1f1b81..c73e9826fbf 100644
--- a/src/devices/bus/ieee488/c2040fdc.h
+++ b/src/devices/bus/ieee488/c2040fdc.h
@@ -49,6 +49,9 @@ public:
template <class Object> devcb_base &set_sync_wr_callback(Object &&cb) { return m_write_sync.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_ready_wr_callback(Object &&cb) { return m_write_ready.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_error_wr_callback(Object &&cb) { return m_write_error.set_callback(std::forward<Object>(cb)); }
+ auto sync_wr_callback() { return m_write_sync.bind(); }
+ auto ready_wr_callback() { return m_write_ready.bind(); }
+ auto error_wr_callback() { return m_write_error.bind(); }
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
diff --git a/src/devices/bus/ieee488/c8050.cpp b/src/devices/bus/ieee488/c8050.cpp
index 94d8e9a89dc..9594b26cf7e 100644
--- a/src/devices/bus/ieee488/c8050.cpp
+++ b/src/devices/bus/ieee488/c8050.cpp
@@ -528,39 +528,34 @@ FLOPPY_FORMATS_MEMBER( sfd1001_device::floppy_formats )
FLOPPY_FORMATS_END
-//-------------------------------------------------
-// device_add_mconfig - add device configuration
-//-------------------------------------------------
-
-MACHINE_CONFIG_START(c8050_device::device_add_mconfig)
+void c8050_device::add_common_devices(machine_config &config)
+{
// DOS
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(12'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(c8050_main_mem)
+ M6502(config, m_maincpu, XTAL(12'000'000)/12);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c8050_device::c8050_main_mem);
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(12'000'000)/12)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8050_device, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8050_device, dio_w))
+ MOS6532_NEW(config, m_riot0, XTAL(12'000'000)/12);
+ m_riot0->pa_rd_callback().set(FUNC(c8050_device::dio_r));
+ m_riot0->pb_wr_callback().set(FUNC(c8050_device::dio_w));
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(12'000'000)/12)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8050_device, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, c8050_device, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, c8050_device, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8050_device, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
+ MOS6532_NEW(config, m_riot1, XTAL(12'000'000)/12);
+ m_riot1->pa_rd_callback().set(FUNC(c8050_device::riot1_pa_r));
+ m_riot1->pa_wr_callback().set(FUNC(c8050_device::riot1_pa_w));
+ m_riot1->pb_rd_callback().set(FUNC(c8050_device::riot1_pb_r));
+ m_riot1->pb_wr_callback().set(FUNC(c8050_device::riot1_pb_w));
+ m_riot1->irq_wr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
// controller
- MCFG_DEVICE_ADD(m_fdccpu, M6504, XTAL(12'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(c8050_fdc_mem)
+ M6504(config, m_fdccpu, XTAL(12'000'000)/12);
- MCFG_DEVICE_ADD(m_via, VIA6522, XTAL(12'000'000)/12)
- MCFG_VIA6522_READPA_HANDLER(READ8(m_fdc, c8050_fdc_device, read))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c8050_device, via_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, mode_sel_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, rw_sel_w))
+ VIA6522(config, m_via, XTAL(12'000'000)/12);
+ m_via->readpa_handler().set(m_fdc, FUNC(c8050_fdc_device::read));
+ m_via->writepb_handler().set(FUNC(c8050_device::via_pb_w));
+ m_via->ca2_handler().set(m_fdc, FUNC(c8050_fdc_device::mode_sel_w));
+ m_via->cb2_handler().set(m_fdc, FUNC(c8050_fdc_device::rw_sel_w));
MOS6530_NEW(config, m_miot, XTAL(12'000'000)/12);
m_miot->pa_wr_callback().set(m_fdc, FUNC(c8050_fdc_device::write));
- m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c8050_fdc_device::drv_sel_w));
m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c8050_fdc_device::ds0_w));
m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w));
m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r));
@@ -572,145 +567,56 @@ MACHINE_CONFIG_START(c8050_device::device_add_mconfig)
m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1));
m_fdc->brdy_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW).invert();
m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1));
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8050_floppies, "525ssqd", c8050_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8050_floppies, "525ssqd", c8050_device::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(c8250_device::device_add_mconfig)
- // DOS
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(12'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(c8050_main_mem)
+}
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(12'000'000)/12)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8050_device, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8050_device, dio_w))
+void c8050_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ m_fdccpu->set_addrmap(AS_PROGRAM, &c8050_device::c8050_fdc_mem);
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(12'000'000)/12)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8050_device, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, c8050_device, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, c8050_device, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8050_device, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
+ m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c8050_fdc_device::drv_sel_w));
+ m_miot->pb_rd_callback<6>().set_constant(1); // SINGLE SIDED
- // controller
- MCFG_DEVICE_ADD(m_fdccpu, M6504, XTAL(12'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(c8050_fdc_mem)
+ FLOPPY_CONNECTOR(config, FDC_TAG ":0", c8050_floppies, "525ssqd", c8050_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, FDC_TAG ":1", c8050_floppies, "525ssqd", c8050_device::floppy_formats);
+}
- MCFG_DEVICE_ADD(m_via, VIA6522, XTAL(12'000'000)/12)
- MCFG_VIA6522_READPA_HANDLER(READ8(m_fdc, c8050_fdc_device, read))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c8050_device, via_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, mode_sel_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, rw_sel_w))
+void c8250_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ m_fdccpu->set_addrmap(AS_PROGRAM, &c8250_device::c8050_fdc_mem);
- MOS6530_NEW(config, m_miot, XTAL(12'000'000)/12);
- m_miot->pa_wr_callback().set(m_fdc, FUNC(c8050_fdc_device::write));
m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c8050_fdc_device::drv_sel_w));
- m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c8050_fdc_device::ds0_w));
- m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w));
- m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r));
m_miot->pb_wr_callback<4>().set(m_fdc, FUNC(c8050_fdc_device::odd_hd_w));
m_miot->pb_rd_callback<6>().set_constant(0); // DOUBLE SIDED
- m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE);
- C8050_FDC(config, m_fdc, XTAL(12'000'000)/2);
- m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7));
- m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1));
- m_fdc->brdy_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW).invert();
- m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1));
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8250_floppies, "525qd", c8250_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8250_floppies, "525qd", c8250_device::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(c8250lp_device::device_add_mconfig)
- // DOS
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(12'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(c8050_main_mem)
-
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(12'000'000)/12)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8050_device, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8050_device, dio_w))
-
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(12'000'000)/12)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8050_device, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, c8050_device, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, c8050_device, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8050_device, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
-
- // controller
- MCFG_DEVICE_ADD(m_fdccpu, M6504, XTAL(12'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(c8250lp_fdc_mem)
+ FLOPPY_CONNECTOR(config, FDC_TAG ":0", c8250_floppies, "525qd", c8250_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, FDC_TAG ":1", c8250_floppies, "525qd", c8250_device::floppy_formats);
+}
- MCFG_DEVICE_ADD(m_via, VIA6522, XTAL(12'000'000)/12)
- MCFG_VIA6522_READPA_HANDLER(READ8(m_fdc, c8050_fdc_device, read))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c8050_device, via_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, mode_sel_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, rw_sel_w))
+void c8250lp_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ m_fdccpu->set_addrmap(AS_PROGRAM, &c8250lp_device::c8250lp_fdc_mem);
- MOS6530_NEW(config, m_miot, XTAL(12'000'000)/12);
- m_miot->pa_wr_callback().set(m_fdc, FUNC(c8050_fdc_device::write));
m_miot->pb_wr_callback<0>().set(m_fdc, FUNC(c8050_fdc_device::drv_sel_w));
- m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c8050_fdc_device::ds0_w));
- m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w));
- m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r));
m_miot->pb_wr_callback<4>().set(m_fdc, FUNC(c8050_fdc_device::odd_hd_w));
m_miot->pb_rd_callback<6>().set_constant(0); // DOUBLE SIDED
- m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE);
-
- C8050_FDC(config, m_fdc, XTAL(12'000'000)/2);
- m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7));
- m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1));
- m_fdc->brdy_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW).invert();
- m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1));
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", c8250_floppies, "525qd", c8250lp_device::floppy_formats)
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":1", c8250_floppies, "525qd", c8250lp_device::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(sfd1001_device::device_add_mconfig)
- // DOS
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(12'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(c8050_main_mem)
-
- MCFG_DEVICE_ADD(M6532_0_TAG, MOS6532_NEW, XTAL(12'000'000)/12)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8050_device, dio_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8050_device, dio_w))
- MCFG_DEVICE_ADD(M6532_1_TAG, MOS6532_NEW, XTAL(12'000'000)/12)
- MCFG_MOS6530n_IN_PA_CB(READ8(*this, c8050_device, riot1_pa_r))
- MCFG_MOS6530n_OUT_PA_CB(WRITE8(*this, c8050_device, riot1_pa_w))
- MCFG_MOS6530n_IN_PB_CB(READ8(*this, c8050_device, riot1_pb_r))
- MCFG_MOS6530n_OUT_PB_CB(WRITE8(*this, c8050_device, riot1_pb_w))
- MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6502_TAG, INPUT_LINE_IRQ0))
-
- // controller
- MCFG_DEVICE_ADD(m_fdccpu, M6504, XTAL(12'000'000)/12)
- MCFG_DEVICE_PROGRAM_MAP(sfd1001_fdc_mem)
+ FLOPPY_CONNECTOR(config, FDC_TAG ":0", c8250_floppies, "525qd", c8250lp_device::floppy_formats);
+ FLOPPY_CONNECTOR(config, FDC_TAG ":1", c8250_floppies, "525qd", c8250lp_device::floppy_formats);
+}
- MCFG_DEVICE_ADD(m_via, VIA6522, XTAL(12'000'000)/12)
- MCFG_VIA6522_READPA_HANDLER(READ8(m_fdc, c8050_fdc_device, read))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c8050_device, via_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, mode_sel_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(m_fdc, c8050_fdc_device, rw_sel_w))
+void sfd1001_device::device_add_mconfig(machine_config &config)
+{
+ add_common_devices(config);
+ m_fdccpu->set_addrmap(AS_PROGRAM, &sfd1001_device::sfd1001_fdc_mem);
- MOS6530_NEW(config, m_miot, XTAL(12'000'000)/12);
- m_miot->pa_wr_callback().set(m_fdc, FUNC(c8050_fdc_device::write));
- m_miot->pb_wr_callback<1>().set(m_fdc, FUNC(c8050_fdc_device::ds0_w));
- m_miot->pb_wr_callback<2>().set(m_fdc, FUNC(c8050_fdc_device::ds1_w));
- m_miot->pb_rd_callback<3>().set(m_fdc, FUNC(c8050_fdc_device::wps_r));
m_miot->pb_wr_callback<4>().set(m_fdc, FUNC(c8050_fdc_device::odd_hd_w));
m_miot->pb_rd_callback<6>().set_constant(0); // DOUBLE SIDED
- m_miot->pb_wr_callback<7>().set_inputline(m_fdccpu, M6502_IRQ_LINE);
- C8050_FDC(config, m_fdc, XTAL(12'000'000)/2);
- m_fdc->sync_wr_callback().set(m_via, FUNC(via6522_device::write_pb7));
- m_fdc->ready_wr_callback().set(m_via, FUNC(via6522_device::write_ca1));
- m_fdc->brdy_wr_callback().set_inputline(m_fdccpu, M6502_SET_OVERFLOW).invert();
- m_fdc->error_wr_callback().set(m_via, FUNC(via6522_device::write_cb1));
- MCFG_FLOPPY_DRIVE_ADD(FDC_TAG ":0", sfd1001_floppies, "525qd", sfd1001_device::floppy_formats)
-MACHINE_CONFIG_END
+ FLOPPY_CONNECTOR(config, FDC_TAG ":0", sfd1001_floppies, "525qd", sfd1001_device::floppy_formats);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/ieee488/c8050.h b/src/devices/bus/ieee488/c8050.h
index c4d236f1888..c8f96c4605f 100644
--- a/src/devices/bus/ieee488/c8050.h
+++ b/src/devices/bus/ieee488/c8050.h
@@ -60,6 +60,7 @@ protected:
virtual void ieee488_atn(int state) override;
virtual void ieee488_ifc(int state) override;
+ void add_common_devices(machine_config &config);
inline void update_ieee_signals();
required_device<m6502_device> m_maincpu;
diff --git a/src/devices/bus/vic20/vic1112.cpp b/src/devices/bus/vic20/vic1112.cpp
index e0711baf4e7..e8d55e1e89b 100644
--- a/src/devices/bus/vic20/vic1112.cpp
+++ b/src/devices/bus/vic20/vic1112.cpp
@@ -97,22 +97,24 @@ WRITE_LINE_MEMBER( vic1112_device::via1_irq_w )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(vic1112_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6522_0_TAG, VIA6522, DERIVED_CLOCK(1, 1))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, vic1112_device, via0_pb_r))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, vic1112_device, via0_pb_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, vic1112_device, via0_irq_w))
-
- MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, DERIVED_CLOCK(1, 1))
- MCFG_VIA6522_READPB_HANDLER(READ8(IEEE488_TAG, ieee488_device, dio_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(IEEE488_TAG, ieee488_device, host_dio_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(IEEE488_TAG, ieee488_device, host_atn_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(IEEE488_TAG, ieee488_device, host_eoi_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, vic1112_device, via1_irq_w))
-
- MCFG_CBM_IEEE488_ADD(nullptr)
- MCFG_IEEE488_SRQ_CALLBACK(WRITELINE(M6522_1_TAG, via6522_device, write_cb1))
-MACHINE_CONFIG_END
+void vic1112_device::device_add_mconfig(machine_config &config)
+{
+ VIA6522(config, m_via0, DERIVED_CLOCK(1, 1));
+ m_via0->readpb_handler().set(FUNC(vic1112_device::via0_pb_r));
+ m_via0->writepb_handler().set(FUNC(vic1112_device::via0_pb_w));
+ m_via0->irq_handler().set(FUNC(vic1112_device::via0_irq_w));
+
+ VIA6522(config, m_via1, DERIVED_CLOCK(1, 1));
+ m_via1->readpb_handler().set(IEEE488_TAG, FUNC(ieee488_device::dio_r));
+ m_via1->writepa_handler().set(IEEE488_TAG, FUNC(ieee488_device::host_dio_w));
+ m_via1->ca2_handler().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w));
+ m_via1->cb2_handler().set(IEEE488_TAG, FUNC(ieee488_device::host_eoi_w));
+ m_via1->irq_handler().set(FUNC(vic1112_device::via1_irq_w));
+
+ IEEE488(config, m_bus, 0);
+ ieee488_slot_device::add_cbm_defaults(config, nullptr);
+ m_bus->srq_callback().set(m_via1, FUNC(via6522_device::write_cb1));
+}
diff --git a/src/devices/imagedev/floppy.h b/src/devices/imagedev/floppy.h
index c486018defd..d06ce318e27 100644
--- a/src/devices/imagedev/floppy.h
+++ b/src/devices/imagedev/floppy.h
@@ -317,13 +317,13 @@ class floppy_connector: public device_t,
{
public:
template <typename T>
- floppy_connector(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt, const floppy_format_type *formats)
+ floppy_connector(const machine_config &mconfig, const char *tag, device_t *owner, T &&opts, const char *dflt, const floppy_format_type *formats, bool fixed = false)
: floppy_connector(mconfig, tag, owner, 0)
{
option_reset();
opts(*this);
set_default_option(dflt);
- set_fixed(false);
+ set_fixed(fixed);
set_formats(formats);
}
floppy_connector(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
diff --git a/src/devices/machine/6522via.h b/src/devices/machine/6522via.h
index a0a4ca06097..074f0581fd5 100644
--- a/src/devices/machine/6522via.h
+++ b/src/devices/machine/6522via.h
@@ -18,37 +18,6 @@
#pragma once
-//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-// TODO: REMOVE THESE
-#define MCFG_VIA6522_READPA_HANDLER(_devcb) \
- downcast<via6522_device &>(*device).set_readpa_handler(DEVCB_##_devcb);
-
-#define MCFG_VIA6522_READPB_HANDLER(_devcb) \
- downcast<via6522_device &>(*device).set_readpb_handler(DEVCB_##_devcb);
-
-// TODO: CONVERT THESE TO WRITE LINE
-#define MCFG_VIA6522_WRITEPA_HANDLER(_devcb) \
- downcast<via6522_device &>(*device).set_writepa_handler(DEVCB_##_devcb);
-
-#define MCFG_VIA6522_WRITEPB_HANDLER(_devcb) \
- downcast<via6522_device &>(*device).set_writepb_handler(DEVCB_##_devcb);
-
-#define MCFG_VIA6522_CA2_HANDLER(_devcb) \
- downcast<via6522_device &>(*device).set_ca2_handler(DEVCB_##_devcb);
-
-#define MCFG_VIA6522_CB1_HANDLER(_devcb) \
- downcast<via6522_device &>(*device).set_cb1_handler(DEVCB_##_devcb);
-
-#define MCFG_VIA6522_CB2_HANDLER(_devcb) \
- downcast<via6522_device &>(*device).set_cb2_handler(DEVCB_##_devcb);
-
-#define MCFG_VIA6522_IRQ_HANDLER(_devcb) \
- downcast<via6522_device &>(*device).set_irq_handler(DEVCB_##_devcb);
-
-
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
@@ -83,21 +52,13 @@ public:
via6522_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// TODO: REMOVE THESE
- template <class Object> devcb_base &set_readpa_handler(Object &&cb) { return m_in_a_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_readpb_handler(Object &&cb) { return m_in_b_handler.set_callback(std::forward<Object>(cb)); }
auto readpa_handler() { return m_in_a_handler.bind(); }
auto readpb_handler() { return m_in_b_handler.bind(); }
// TODO: CONVERT THESE TO WRITE LINE
- template <class Object> devcb_base &set_writepa_handler(Object &&cb) { return m_out_a_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_writepb_handler(Object &&cb) { return m_out_b_handler.set_callback(std::forward<Object>(cb)); }
auto writepa_handler() { return m_out_a_handler.bind(); }
auto writepb_handler() { return m_out_b_handler.bind(); }
- template <class Object> devcb_base &set_ca2_handler(Object &&cb) { return m_ca2_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_cb1_handler(Object &&cb) { return m_cb1_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_cb2_handler(Object &&cb) { return m_cb2_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
auto ca2_handler() { return m_ca2_handler.bind(); }
auto cb1_handler() { return m_cb1_handler.bind(); }
auto cb2_handler() { return m_cb2_handler.bind(); }
diff --git a/src/devices/video/ramdac.h b/src/devices/video/ramdac.h
index e090257023c..be8e885b54a 100644
--- a/src/devices/video/ramdac.h
+++ b/src/devices/video/ramdac.h
@@ -18,10 +18,10 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
-#define MCFG_RAMDAC_ADD(_tag, _map, _palette_tag) \
+#define MCFG_RAMDAC_ADD(_tag, _map, _palette) \
MCFG_DEVICE_ADD(_tag, RAMDAC, 0) \
MCFG_DEVICE_ADDRESS_MAP(0, _map) \
- downcast<ramdac_device &>(*device).set_palette_tag(_palette_tag);
+ downcast<ramdac_device &>(*device).set_palette(_palette);
#define MCFG_RAMDAC_COLOR_BASE(_color_base) \
downcast<ramdac_device &>(*device).set_color_base(_color_base);
@@ -44,7 +44,7 @@ public:
ramdac_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// configuration
- void set_palette_tag(const char *tag) { m_palette.set_tag(tag); }
+ template <typename T> void set_palette(T &&tag) { m_palette.set_tag(std::forward<T>(tag)); }
void set_color_base(uint32_t color_base) { m_color_base = color_base; }
void set_split_read(int split) { m_split_read_reg = split; }