diff options
Diffstat (limited to 'src/devices')
-rw-r--r-- | src/devices/bus/a2bus/a2mockingboard.cpp | 502 | ||||
-rw-r--r-- | src/devices/bus/a2bus/a2mockingboard.h | 32 | ||||
-rw-r--r-- | src/devices/bus/bbc/tube/tube_zep100.cpp | 41 | ||||
-rw-r--r-- | src/devices/bus/bbc/tube/tube_zep100.h | 2 | ||||
-rw-r--r-- | src/devices/bus/cbmiec/fd2000.cpp | 48 | ||||
-rw-r--r-- | src/devices/bus/cbmiec/fd2000.h | 2 | ||||
-rw-r--r-- | src/devices/bus/electron/m2105.cpp | 56 | ||||
-rw-r--r-- | src/devices/bus/ieee488/c2040.cpp | 172 | ||||
-rw-r--r-- | src/devices/bus/ieee488/c2040.h | 1 | ||||
-rw-r--r-- | src/devices/bus/ieee488/c2040fdc.h | 3 | ||||
-rw-r--r-- | src/devices/bus/ieee488/c8050.cpp | 192 | ||||
-rw-r--r-- | src/devices/bus/ieee488/c8050.h | 1 | ||||
-rw-r--r-- | src/devices/bus/vic20/vic1112.cpp | 34 | ||||
-rw-r--r-- | src/devices/imagedev/floppy.h | 4 | ||||
-rw-r--r-- | src/devices/machine/6522via.h | 39 | ||||
-rw-r--r-- | src/devices/video/ramdac.h | 6 |
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; } |