summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author mooglyguy <therealmogminer@gmail.com>2018-08-01 04:45:25 +0200
committer mooglyguy <therealmogminer@gmail.com>2018-08-01 04:45:25 +0200
commitb5ff656e9a05db58c94299a7a322c33157e6b138 (patch)
tree8abc9ff683e4ba022fd914c807d7bc16b0ce0e3e
parentc3aa68905ed78e4bac19ff2e2a6542914b97e243 (diff)
-c1541, c1571, c2031, c1551, rastersp: Removed MCFG and MACHINE_CONFIG usage. [Ryan Holtz]
-model3: Some basic MACHINE_CONFIG cleanup, nw -pla: Added PLS100 device, nw
-rw-r--r--src/devices/bus/cbmiec/c1541.cpp123
-rw-r--r--src/devices/bus/cbmiec/c1541.h5
-rw-r--r--src/devices/bus/cbmiec/c1571.cpp229
-rw-r--r--src/devices/bus/cbmiec/c1571.h3
-rw-r--r--src/devices/bus/centronics/ctronics.cpp12
-rw-r--r--src/devices/bus/centronics/ctronics.h2
-rw-r--r--src/devices/bus/hp80_io/82937.cpp50
-rw-r--r--src/devices/bus/ieee488/c2031.cpp66
-rw-r--r--src/devices/bus/ieee488/c2031.h2
-rw-r--r--src/devices/bus/ieee488/ieee488.h10
-rw-r--r--src/devices/bus/plus4/c1551.cpp78
-rw-r--r--src/devices/bus/plus4/c1551.h2
-rw-r--r--src/devices/bus/plus4/exp.h5
-rw-r--r--src/devices/cpu/m6502/m6510.h2
-rw-r--r--src/devices/machine/1mb5.h20
-rw-r--r--src/devices/machine/53c7xx.h15
-rw-r--r--src/devices/machine/53c810.h28
-rw-r--r--src/devices/machine/64h156.h21
-rw-r--r--src/devices/machine/6525tpi.h10
-rw-r--r--src/devices/machine/82s129.h47
-rw-r--r--src/devices/machine/pla.cpp17
-rw-r--r--src/devices/machine/pla.h14
-rw-r--r--src/devices/sound/scsp.h3
-rw-r--r--src/emu/emupal.h10
-rw-r--r--src/mame/drivers/bebox.cpp8
-rw-r--r--src/mame/drivers/model3.cpp334
-rw-r--r--src/mame/drivers/rastersp.cpp168
-rw-r--r--src/mame/includes/bebox.h6
-rw-r--r--src/mame/includes/model3.h16
-rw-r--r--src/mame/machine/315-5881_crypt.h5
30 files changed, 595 insertions, 716 deletions
diff --git a/src/devices/bus/cbmiec/c1541.cpp b/src/devices/bus/cbmiec/c1541.cpp
index 13c866eac92..17f2ff59084 100644
--- a/src/devices/bus/cbmiec/c1541.cpp
+++ b/src/devices/bus/cbmiec/c1541.cpp
@@ -751,16 +751,6 @@ WRITE_LINE_MEMBER( c1541_device_base::byte_w )
//-------------------------------------------------
-// SLOT_INTERFACE( c1540_floppies )
-//-------------------------------------------------
-
-static void c1540_floppies(device_slot_interface &device)
-{
- device.option_add("525ssqd", ALPS_3255190X);
-}
-
-
-//-------------------------------------------------
// FLOPPY_FORMATS( floppy_formats )
//-------------------------------------------------
@@ -815,72 +805,79 @@ WRITE8_MEMBER( c1541_prologic_dos_classic_device::pia_pb_w )
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c1541_device_base::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(16'000'000)/16)
- MCFG_DEVICE_PROGRAM_MAP(c1541_mem)
- MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
-
- MCFG_DEVICE_ADD(M6522_0_TAG, VIA6522, XTAL(16'000'000)/16)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, c1541_device_base, via0_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1541_device_base, via0_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, c1541_device_base, via0_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1541_device_base, via0_pb_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(*this, c1541_device_base, via0_ca2_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1541_device_base, via0_irq_w))
-
- MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, XTAL(16'000'000)/16)
- MCFG_VIA6522_READPA_HANDLER(READ8(C64H156_TAG, c64h156_device, yb_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1541_device_base, via1_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(C64H156_TAG, c64h156_device, yb_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1541_device_base, via1_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, soe_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, oe_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1541_device_base, via1_irq_w))
-
- MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL(16'000'000))
- MCFG_64H156_ATN_CALLBACK(WRITELINE(*this, c1541_device_base, atn_w))
- MCFG_64H156_BYTE_CALLBACK(WRITELINE(*this, c1541_device_base, byte_w))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1540_floppies, "525ssqd", c1541_device_base::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(c1541c_device::device_add_mconfig)
- c1541_device_base::device_add_mconfig(config);
-MACHINE_CONFIG_END
+void c1541_device_base::device_add_mconfig(machine_config &config)
+{
+ M6502(config, m_maincpu, XTAL(16'000'000)/16);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c1541_device_base::c1541_mem);
+ config.m_perfect_cpu_quantum = subtag(M6502_TAG);
+
+ VIA6522(config, m_via0, XTAL(16'000'000)/16);
+ m_via0->readpa_handler().set(FUNC(c1541_device_base::via0_pa_r));
+ m_via0->readpb_handler().set(FUNC(c1541_device_base::via0_pb_r));
+ m_via0->writepa_handler().set(FUNC(c1541_device_base::via0_pa_w));
+ m_via0->writepb_handler().set(FUNC(c1541_device_base::via0_pb_w));
+ m_via0->cb2_handler().set(FUNC(c1541_device_base::via0_ca2_w));
+ m_via0->irq_handler().set(FUNC(c1541_device_base::via0_irq_w));
+
+ VIA6522(config, m_via1, XTAL(16'000'000)/16);
+ m_via1->readpa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_r));
+ m_via1->readpb_handler().set(FUNC(c1541_device_base::via1_pb_r));
+ m_via1->writepa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_w));
+ m_via1->writepb_handler().set(FUNC(c1541_device_base::via1_pb_w));
+ m_via1->ca2_handler().set(C64H156_TAG, FUNC(c64h156_device::soe_w));
+ m_via1->cb2_handler().set(C64H156_TAG, FUNC(c64h156_device::oe_w));
+ m_via1->irq_handler().set(FUNC(c1541_device_base::via1_irq_w));
+
+ C64H156(config, m_ga, XTAL(16'000'000));
+ m_ga->atn_callback().set(FUNC(c1541_device_base::atn_w));
+ m_ga->byte_callback().set(FUNC(c1541_device_base::byte_w));
+
+ floppy_connector &connector(FLOPPY_CONNECTOR(config, C64H156_TAG":0", 0));
+ connector.option_add("525ssqd", ALPS_3255190X);
+ connector.set_default_option("525ssqd");
+ connector.set_fixed(true);
+ connector.set_formats(c1541_device_base::floppy_formats);
+}
-MACHINE_CONFIG_START(c1541_dolphin_dos_device::device_add_mconfig)
+void c1541c_device::device_add_mconfig(machine_config &config)
+{
c1541_device_base::device_add_mconfig(config);
-
- MCFG_DEVICE_MODIFY(M6502_TAG)
- MCFG_DEVICE_PROGRAM_MAP(c1541dd_mem)
-MACHINE_CONFIG_END
+}
-MACHINE_CONFIG_START(c1541_professional_dos_v1_device::device_add_mconfig)
+void c1541_dolphin_dos_device::device_add_mconfig(machine_config &config)
+{
c1541_device_base::device_add_mconfig(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c1541_dolphin_dos_device::c1541dd_mem);
+}
- MCFG_DEVICE_MODIFY(M6502_TAG)
- MCFG_DEVICE_PROGRAM_MAP(c1541pd_mem)
-MACHINE_CONFIG_END
+
+void c1541_professional_dos_v1_device::device_add_mconfig(machine_config &config)
+{
+ c1541_device_base::device_add_mconfig(config);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c1541_professional_dos_v1_device::c1541pd_mem);
+}
-MACHINE_CONFIG_START(c1541_prologic_dos_classic_device::device_add_mconfig)
+void c1541_prologic_dos_classic_device::device_add_mconfig(machine_config &config)
+{
c1541_device_base::device_add_mconfig(config);
- MCFG_DEVICE_MODIFY(M6502_TAG)
- MCFG_DEVICE_PROGRAM_MAP(c1541pdc_mem)
+ m_maincpu->set_addrmap(AS_PROGRAM, &c1541_prologic_dos_classic_device::c1541pdc_mem);
- MCFG_DEVICE_ADD(MC6821_TAG, PIA6821, 0)
- MCFG_PIA_READPB_HANDLER(READ8(*this, c1541_prologic_dos_classic_device, pia_pb_r))
- MCFG_PIA_WRITEPA_HANDLER(WRITE8(*this, c1541_prologic_dos_classic_device, pia_pa_w))
- MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, c1541_prologic_dos_classic_device, pia_pb_w))
- MCFG_PIA_CA2_HANDLER(WRITELINE(CENTRONICS_TAG, centronics_device, write_strobe))
+ PIA6821(config, m_pia, 0);
+ m_pia->readpb_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pb_r));
+ m_pia->writepa_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pa_w));
+ m_pia->writepb_handler().set(FUNC(c1541_prologic_dos_classic_device::pia_pb_w));
+ m_pia->ca2_handler().set(CENTRONICS_TAG, FUNC(centronics_device::write_strobe));
- MCFG_DEVICE_ADD(CENTRONICS_TAG, CENTRONICS, centronics_devices, "printer")
- MCFG_CENTRONICS_ACK_HANDLER(WRITELINE(MC6821_TAG, pia6821_device, ca1_w))
- MCFG_CENTRONICS_OUTPUT_LATCH_ADD("cent_data_out", CENTRONICS_TAG)
-MACHINE_CONFIG_END
+ centronics_device &centronics(CENTRONICS(config, CENTRONICS_TAG, centronics_devices, "printer"));
+ centronics.ack_handler().set(MC6821_TAG, FUNC(pia6821_device::ca1_w));
+
+ output_latch_device &cent_data_out(OUTPUT_LATCH(config, "cent_data_out", 0));
+ centronics.set_output_latch(cent_data_out);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/cbmiec/c1541.h b/src/devices/bus/cbmiec/c1541.h
index 490d00614c9..473fda5d51b 100644
--- a/src/devices/bus/cbmiec/c1541.h
+++ b/src/devices/bus/cbmiec/c1541.h
@@ -65,6 +65,8 @@ protected:
void c1541dd_mem(address_map &map);
void c1541pd_mem(address_map &map);
+ required_device<m6502_device> m_maincpu;
+
private:
enum
{
@@ -88,7 +90,6 @@ private:
DECLARE_FLOPPY_FORMATS( floppy_formats );
- required_device<m6502_device> m_maincpu;
required_device<via6522_device> m_via0;
required_device<via6522_device> m_via1;
required_device<c64h156_device> m_ga;
@@ -226,7 +227,7 @@ protected:
// ======================> c1541_dolphin_dos_device
-class c1541_dolphin_dos_device : public c1541_device_base
+class c1541_dolphin_dos_device : public c1541_device_base
{
public:
// construction/destruction
diff --git a/src/devices/bus/cbmiec/c1571.cpp b/src/devices/bus/cbmiec/c1571.cpp
index 9b5ac3bb3ac..46b601f7c97 100644
--- a/src/devices/bus/cbmiec/c1571.cpp
+++ b/src/devices/bus/cbmiec/c1571.cpp
@@ -561,16 +561,6 @@ WRITE_LINE_MEMBER( c1571_device::byte_w )
//-------------------------------------------------
-// SLOT_INTERFACE( c1571_floppies )
-//-------------------------------------------------
-
-static void c1571_floppies(device_slot_interface &device)
-{
- device.option_add("525qd", FLOPPY_525_QD);
-}
-
-
-//-------------------------------------------------
// floppy_interface c1571_floppy_interface
//-------------------------------------------------
@@ -604,150 +594,87 @@ static void mini_chief_isa8_cards(device_slot_interface &device)
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c1570_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M6502, 16_MHz_XTAL / 16)
- MCFG_DEVICE_PROGRAM_MAP(c1571_mem)
- MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
-
- MCFG_DEVICE_ADD(M6522_0_TAG, VIA6522, 16_MHz_XTAL / 16)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, c1571_device, via0_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1571_device, via0_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, c1571_device, via0_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1571_device, via0_pb_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1571_device, via0_irq_w))
-
- MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, 16_MHz_XTAL / 16)
- MCFG_VIA6522_READPA_HANDLER(READ8(C64H156_TAG, c64h156_device, yb_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1571_device, via1_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(C64H156_TAG, c64h156_device, yb_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1571_device, via1_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, soe_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, oe_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1571_device, via1_irq_w))
-
- MCFG_DEVICE_ADD(M6526_TAG, MOS6526, 16_MHz_XTAL / 16)
- MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(*this, c1571_device, cia_irq_w))
- MCFG_MOS6526_CNT_CALLBACK(WRITELINE(*this, c1571_device, cia_cnt_w))
- MCFG_MOS6526_SP_CALLBACK(WRITELINE(*this, c1571_device, cia_sp_w))
- MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c1571_device, cia_pb_r))
- MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c1571_device, cia_pb_w))
- MCFG_MOS6526_PC_CALLBACK(WRITELINE(*this, c1571_device, cia_pc_w))
-
- MCFG_DEVICE_ADD(WD1770_TAG, WD1770, 16_MHz_XTAL / 2)
-
- MCFG_DEVICE_ADD(C64H156_TAG, C64H156, 16_MHz_XTAL)
- MCFG_64H156_BYTE_CALLBACK(WRITELINE(*this, c1571_device, byte_w))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(c1571_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M6502, 16_MHz_XTAL / 16)
- MCFG_DEVICE_PROGRAM_MAP(c1571_mem)
- MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
-
- MCFG_DEVICE_ADD(M6522_0_TAG, VIA6522, 16_MHz_XTAL / 16)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, c1571_device, via0_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1571_device, via0_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, c1571_device, via0_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1571_device, via0_pb_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1571_device, via0_irq_w))
-
- MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, 16_MHz_XTAL / 16)
- MCFG_VIA6522_READPA_HANDLER(READ8(C64H156_TAG, c64h156_device, yb_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1571_device, via1_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(C64H156_TAG, c64h156_device, yb_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1571_device, via1_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, soe_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, oe_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1571_device, via1_irq_w))
-
- MCFG_DEVICE_ADD(M6526_TAG, MOS6526, 16_MHz_XTAL / 16)
- MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(*this, c1571_device, cia_irq_w))
- MCFG_MOS6526_CNT_CALLBACK(WRITELINE(*this, c1571_device, cia_cnt_w))
- MCFG_MOS6526_SP_CALLBACK(WRITELINE(*this, c1571_device, cia_sp_w))
- MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c1571_device, cia_pb_r))
- MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c1571_device, cia_pb_w))
- MCFG_MOS6526_PC_CALLBACK(WRITELINE(*this, c1571_device, cia_pc_w))
-
- MCFG_DEVICE_ADD(WD1770_TAG, WD1770, 16_MHz_XTAL / 2)
-
- MCFG_DEVICE_ADD(C64H156_TAG, C64H156, 16_MHz_XTAL)
- MCFG_64H156_BYTE_CALLBACK(WRITELINE(*this, c1571_device, byte_w))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(c1571cr_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M6502, 16_MHz_XTAL / 16)
- MCFG_DEVICE_PROGRAM_MAP(c1571_mem)
- MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
-
- MCFG_DEVICE_ADD(M6522_0_TAG, VIA6522, 16_MHz_XTAL / 16)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, c1571_device, via0_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1571_device, via0_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, c1571cr_device, via0_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1571cr_device, via0_pb_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1571_device, via0_irq_w))
-
- MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, 16_MHz_XTAL / 16)
- MCFG_VIA6522_READPA_HANDLER(READ8(C64H156_TAG, c64h156_device, yb_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1571_device, via1_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(C64H156_TAG, c64h156_device, yb_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1571_device, via1_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, soe_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, oe_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1571_device, via1_irq_w))
+void c1571_device::add_base_mconfig(machine_config &config)
+{
+ M6502(config, m_maincpu, 16_MHz_XTAL / 16);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c1571_device::c1571_mem);
+ config.m_perfect_cpu_quantum = subtag(M6502_TAG);
+
+ VIA6522(config, m_via0, 16_MHz_XTAL / 16);
+ m_via0->readpa_handler().set(FUNC(c1571_device::via0_pa_r));
+ m_via0->readpb_handler().set(FUNC(c1571_device::via0_pb_r));
+ m_via0->writepa_handler().set(FUNC(c1571_device::via0_pa_w));
+ m_via0->writepb_handler().set(FUNC(c1571_device::via0_pb_w));
+ m_via0->irq_handler().set(FUNC(c1571_device::via0_irq_w));
+
+ VIA6522(config, m_via1, 16_MHz_XTAL / 16);
+ m_via1->readpa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_r));
+ m_via1->readpb_handler().set(FUNC(c1571_device::via1_pb_r));
+ m_via1->writepa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_w));
+ m_via1->writepb_handler().set(FUNC(c1571_device::via1_pb_w));
+ m_via1->ca2_handler().set(C64H156_TAG, FUNC(c64h156_device::soe_w));
+ m_via1->cb2_handler().set(C64H156_TAG, FUNC(c64h156_device::oe_w));
+ m_via1->irq_handler().set(FUNC(c1571_device::via1_irq_w));
+
+ WD1770(config, m_fdc, 16_MHz_XTAL / 2);
+
+ C64H156(config, m_ga, 16_MHz_XTAL);
+ m_ga->byte_callback().set(FUNC(c1571_device::byte_w));
+
+ floppy_connector &connector(FLOPPY_CONNECTOR(config, C64H156_TAG":0", 0));
+ connector.option_add("525qd", FLOPPY_525_QD);
+ connector.set_default_option("525qd");
+ connector.set_fixed(true);
+ connector.set_formats(c1571_device::floppy_formats);
+}
+
+void c1571_device::add_cia_mconfig(machine_config &config)
+{
+ MOS6526(config, m_cia, 16_MHz_XTAL / 16);
+ m_cia->irq_wr_callback().set(FUNC(c1571_device::cia_irq_w));
+ m_cia->cnt_wr_callback().set(FUNC(c1571_device::cia_cnt_w));
+ m_cia->sp_wr_callback().set(FUNC(c1571_device::cia_sp_w));
+ m_cia->pb_rd_callback().set(FUNC(c1571_device::cia_pb_r));
+ m_cia->pb_wr_callback().set(FUNC(c1571_device::cia_pb_w));
+ m_cia->pc_wr_callback().set(FUNC(c1571_device::cia_pc_w));
+}
+
+void c1570_device::device_add_mconfig(machine_config &config)
+{
+ add_base_mconfig(config);
+ add_cia_mconfig(config);
+}
+
+
+void c1571_device::device_add_mconfig(machine_config &config)
+{
+ add_base_mconfig(config);
+ add_cia_mconfig(config);
+}
+
+
+void c1571cr_device::device_add_mconfig(machine_config &config)
+{
+ add_base_mconfig(config);
+
+ m_via0->writepa_handler().set(FUNC(c1571cr_device::via0_pa_w));
+ m_via0->writepb_handler().set(FUNC(c1571cr_device::via0_pb_w));
//MCFG_MOS5710_ADD(M5710_TAG, 16_MHz_XTAL / 16, 0)
+}
+
- MCFG_DEVICE_ADD(WD1770_TAG, WD1770, 16_MHz_XTAL / 2)
-
- MCFG_DEVICE_ADD(C64H156_TAG, C64H156, 16_MHz_XTAL)
- MCFG_64H156_BYTE_CALLBACK(WRITELINE(*this, c1571_device, byte_w))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats)
-MACHINE_CONFIG_END
-
-
-MACHINE_CONFIG_START(mini_chief_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M6502, 16_MHz_XTAL / 16)
- MCFG_DEVICE_PROGRAM_MAP(mini_chief_mem)
- MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
-
- MCFG_DEVICE_ADD(M6522_0_TAG, VIA6522, 16_MHz_XTAL / 16)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, c1571_device, via0_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1571_device, via0_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, c1571_device, via0_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1571_device, via0_pb_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1571_device, via0_irq_w))
-
- MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, 16_MHz_XTAL / 16)
- MCFG_VIA6522_READPA_HANDLER(READ8(C64H156_TAG, c64h156_device, yb_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c1571_device, via1_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(C64H156_TAG, c64h156_device, yb_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c1571_device, via1_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, soe_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, oe_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c1571_device, via1_irq_w))
-
- MCFG_DEVICE_ADD(M6526_TAG, MOS6526, 16_MHz_XTAL / 16)
- MCFG_MOS6526_IRQ_CALLBACK(WRITELINE(*this, c1571_device, cia_irq_w))
- MCFG_MOS6526_CNT_CALLBACK(WRITELINE(*this, c1571_device, cia_cnt_w))
- MCFG_MOS6526_SP_CALLBACK(WRITELINE(*this, c1571_device, cia_sp_w))
- MCFG_MOS6526_PB_INPUT_CALLBACK(READ8(*this, c1571_device, cia_pb_r))
- MCFG_MOS6526_PB_OUTPUT_CALLBACK(WRITE8(*this, c1571_device, cia_pb_w))
- MCFG_MOS6526_PC_CALLBACK(WRITELINE(*this, c1571_device, cia_pc_w))
-
- MCFG_DEVICE_ADD(WD1770_TAG, WD1770, 16_MHz_XTAL / 2)
-
- MCFG_DEVICE_ADD(C64H156_TAG, C64H156, 16_MHz_XTAL)
- MCFG_64H156_BYTE_CALLBACK(WRITELINE(*this, c1571_device, byte_w))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1571_floppies, "525qd", c1571_device::floppy_formats)
-
- MCFG_DEVICE_ADD(ISA_BUS_TAG, ISA8, 0)
- MCFG_ISA8_CPU(M6502_TAG)
- MCFG_DEVICE_ADD("isa1", ISA8_SLOT, 0, ISA_BUS_TAG, mini_chief_isa8_cards, "wd1002a_wx1", false)
-MACHINE_CONFIG_END
+void mini_chief_device::device_add_mconfig(machine_config &config)
+{
+ add_base_mconfig(config);
+ add_cia_mconfig(config);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &mini_chief_device::mini_chief_mem);
+
+ isa8_device &isa8(ISA8(config, ISA_BUS_TAG, 0));
+ isa8.set_cputag(m_maincpu);
+ ISA8_SLOT(config, "isa1", 0, ISA_BUS_TAG, mini_chief_isa8_cards, "wd1002a_wx1", false);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/cbmiec/c1571.h b/src/devices/bus/cbmiec/c1571.h
index 679c5d6f5a3..467c959963e 100644
--- a/src/devices/bus/cbmiec/c1571.h
+++ b/src/devices/bus/cbmiec/c1571.h
@@ -91,6 +91,9 @@ protected:
virtual void parallel_data_w(uint8_t data) override;
virtual void parallel_strobe_w(int state) override;
+ void add_base_mconfig(machine_config &config);
+ void add_cia_mconfig(machine_config &config);
+
enum
{
LED_POWER = 0,
diff --git a/src/devices/bus/centronics/ctronics.cpp b/src/devices/bus/centronics/ctronics.cpp
index 2a63723ec9a..6a29a5b6a15 100644
--- a/src/devices/bus/centronics/ctronics.cpp
+++ b/src/devices/bus/centronics/ctronics.cpp
@@ -82,6 +82,18 @@ void centronics_device::device_start()
m_select_in_handler(1);
}
+void centronics_device::set_output_latch(output_latch_device &latch)
+{
+ latch.bit_handler<0>().set(*this, FUNC(centronics_device::write_data0));
+ latch.bit_handler<1>().set(*this, FUNC(centronics_device::write_data1));
+ latch.bit_handler<2>().set(*this, FUNC(centronics_device::write_data2));
+ latch.bit_handler<3>().set(*this, FUNC(centronics_device::write_data3));
+ latch.bit_handler<4>().set(*this, FUNC(centronics_device::write_data4));
+ latch.bit_handler<5>().set(*this, FUNC(centronics_device::write_data5));
+ latch.bit_handler<6>().set(*this, FUNC(centronics_device::write_data6));
+ latch.bit_handler<7>().set(*this, FUNC(centronics_device::write_data7));
+}
+
WRITE_LINE_MEMBER( centronics_device::write_strobe ) { if (m_dev) m_dev->input_strobe(state); }
WRITE_LINE_MEMBER( centronics_device::write_data0 ) { if (m_dev) m_dev->input_data0(state); }
WRITE_LINE_MEMBER( centronics_device::write_data1 ) { if (m_dev) m_dev->input_data1(state); }
diff --git a/src/devices/bus/centronics/ctronics.h b/src/devices/bus/centronics/ctronics.h
index dbbaa1ee5e1..c05d59a94c1 100644
--- a/src/devices/bus/centronics/ctronics.h
+++ b/src/devices/bus/centronics/ctronics.h
@@ -138,6 +138,8 @@ public:
m_data7_handler.bind().set(tag, FUNC(input_buffer_device::write_bit7));
}
+ void set_output_latch(output_latch_device &latch);
+
DECLARE_WRITE_LINE_MEMBER( write_strobe );
DECLARE_WRITE_LINE_MEMBER( write_data0 );
DECLARE_WRITE_LINE_MEMBER( write_data1 );
diff --git a/src/devices/bus/hp80_io/82937.cpp b/src/devices/bus/hp80_io/82937.cpp
index e5aff4fac43..6f36b5991fc 100644
--- a/src/devices/bus/hp80_io/82937.cpp
+++ b/src/devices/bus/hp80_io/82937.cpp
@@ -328,29 +328,33 @@ const tiny_rom_entry *hp82937_io_card_device::device_rom_region() const
return ROM_NAME(hp82937);
}
-MACHINE_CONFIG_START(hp82937_io_card_device::device_add_mconfig)
- MCFG_DEVICE_ADD("cpu" , I8049 , XTAL(11'000'000))
- MCFG_DEVICE_IO_MAP(cpu_io_map)
- MCFG_MCS48_PORT_T0_IN_CB(READLINE(*this, hp82937_io_card_device , t0_r))
- MCFG_MCS48_PORT_T1_IN_CB(READLINE("xlator" , hp_1mb5_device , int_r))
- MCFG_MCS48_PORT_P1_IN_CB(READ8(*this, hp82937_io_card_device , p1_r))
- MCFG_MCS48_PORT_P1_OUT_CB(WRITE8(*this, hp82937_io_card_device , p1_w))
- MCFG_MCS48_PORT_P2_IN_CB(READ8(*this, hp82937_io_card_device , dio_r))
- MCFG_MCS48_PORT_P2_OUT_CB(WRITE8(*this, hp82937_io_card_device , dio_w))
-
- MCFG_DEVICE_ADD("xlator" , HP_1MB5 , 0)
- MCFG_1MB5_IRL_HANDLER(WRITELINE(*this, hp82937_io_card_device , irl_w))
- MCFG_1MB5_HALT_HANDLER(WRITELINE(*this, hp82937_io_card_device , halt_w))
- MCFG_1MB5_RESET_HANDLER(WRITELINE(*this, hp82937_io_card_device , reset_w))
-
- MCFG_IEEE488_SLOT_ADD("ieee_dev" , 0 , hp_ieee488_devices , nullptr)
- MCFG_IEEE488_SLOT_ADD("ieee_rem" , 0 , remote488_devices , nullptr)
- MCFG_IEEE488_BUS_ADD()
- MCFG_IEEE488_IFC_CALLBACK(WRITELINE(*this, hp82937_io_card_device , ieee488_ctrl_w))
- MCFG_IEEE488_ATN_CALLBACK(WRITELINE(*this, hp82937_io_card_device , ieee488_ctrl_w))
- MCFG_IEEE488_REN_CALLBACK(WRITELINE(*this, hp82937_io_card_device , ieee488_ctrl_w))
- MCFG_IEEE488_EOI_CALLBACK(WRITELINE(*this, hp82937_io_card_device , ieee488_ctrl_w))
-MACHINE_CONFIG_END
+void hp82937_io_card_device::device_add_mconfig(machine_config &config)
+{
+ I8049(config, m_cpu, XTAL(11'000'000));
+ m_cpu->set_addrmap(AS_IO, &hp82937_io_card_device::cpu_io_map);
+ m_cpu->t0_in_cb().set(FUNC(hp82937_io_card_device::t0_r));
+ m_cpu->t1_in_cb().set("xlator", FUNC(hp_1mb5_device::int_r));
+ m_cpu->p1_in_cb().set(FUNC(hp82937_io_card_device::p1_r));
+ m_cpu->p1_out_cb().set(FUNC(hp82937_io_card_device::p1_w));
+ m_cpu->p2_in_cb().set(FUNC(hp82937_io_card_device::dio_r));
+ m_cpu->p2_out_cb().set(FUNC(hp82937_io_card_device::dio_w));
+
+ HP_1MB5(config, m_translator, 0);
+ m_translator->irl_handler().set(FUNC(hp82937_io_card_device::irl_w));
+ m_translator->halt_handler().set(FUNC(hp82937_io_card_device::halt_w));
+ m_translator->reset_handler().set(FUNC(hp82937_io_card_device::reset_w));
+
+ ieee488_slot_device &ieee_dev(IEEE488_SLOT(config, "ieee_dev", 0));
+ hp_ieee488_devices(ieee_dev);
+ ieee488_slot_device &ieee_rem(IEEE488_SLOT(config, "ieee_rem", 0));
+ remote488_devices(ieee_rem);
+
+ IEEE488(config, m_ieee488, 0);
+ m_ieee488->ifc_callback().set(FUNC(hp82937_io_card_device::ieee488_ctrl_w));
+ m_ieee488->atn_callback().set(FUNC(hp82937_io_card_device::ieee488_ctrl_w));
+ m_ieee488->ren_callback().set(FUNC(hp82937_io_card_device::ieee488_ctrl_w));
+ m_ieee488->eoi_callback().set(FUNC(hp82937_io_card_device::ieee488_ctrl_w));
+}
// device type definition
DEFINE_DEVICE_TYPE(HP82937_IO_CARD, hp82937_io_card_device, "hp82937", "HP82937 card")
diff --git a/src/devices/bus/ieee488/c2031.cpp b/src/devices/bus/ieee488/c2031.cpp
index b70b2c89e7f..e80c25ff1eb 100644
--- a/src/devices/bus/ieee488/c2031.cpp
+++ b/src/devices/bus/ieee488/c2031.cpp
@@ -281,16 +281,6 @@ WRITE_LINE_MEMBER( c2031_device::byte_w )
//-------------------------------------------------
-// SLOT_INTERFACE( c2031_floppies )
-//-------------------------------------------------
-
-static void c2031_floppies(device_slot_interface &device)
-{
- device.option_add("525ssqd", FLOPPY_525_SSQD);
-}
-
-
-//-------------------------------------------------
// FLOPPY_FORMATS( floppy_formats )
//-------------------------------------------------
@@ -304,31 +294,37 @@ FLOPPY_FORMATS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c2031_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6502_TAG, M6502, XTAL(16'000'000)/16)
- MCFG_DEVICE_PROGRAM_MAP(c2031_mem)
- MCFG_QUANTUM_PERFECT_CPU(M6502_TAG)
-
- MCFG_DEVICE_ADD(M6522_0_TAG, VIA6522, XTAL(16'000'000)/16)
- MCFG_VIA6522_READPA_HANDLER(READ8(*this, c2031_device, via0_pa_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c2031_device, via0_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(*this, c2031_device, via0_pa_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c2031_device, via0_pb_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c2031_device, via0_irq_w))
-
- MCFG_DEVICE_ADD(M6522_1_TAG, VIA6522, XTAL(16'000'000)/16)
- MCFG_VIA6522_READPA_HANDLER(READ8(C64H156_TAG, c64h156_device, yb_r))
- MCFG_VIA6522_READPB_HANDLER(READ8(*this, c2031_device, via1_pb_r))
- MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(C64H156_TAG, c64h156_device, yb_w))
- MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(*this, c2031_device, via1_pb_w))
- MCFG_VIA6522_CA2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, soe_w))
- MCFG_VIA6522_CB2_HANDLER(WRITELINE(C64H156_TAG, c64h156_device, oe_w))
- MCFG_VIA6522_IRQ_HANDLER(WRITELINE(*this, c2031_device, via1_irq_w))
-
- MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL(16'000'000))
- MCFG_64H156_BYTE_CALLBACK(WRITELINE(*this, c2031_device, byte_w))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c2031_floppies, "525ssqd", c2031_device::floppy_formats)
-MACHINE_CONFIG_END
+void c2031_device::device_add_mconfig(machine_config &config)
+{
+ M6502(config, m_maincpu, XTAL(16'000'000)/16);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c2031_device::c2031_mem);
+ config.m_perfect_cpu_quantum = subtag(M6502_TAG);
+
+ VIA6522(config, m_via0, XTAL(16'000'000)/16);
+ m_via0->readpa_handler().set(FUNC(c2031_device::via0_pa_r));
+ m_via0->readpb_handler().set(FUNC(c2031_device::via0_pb_r));
+ m_via0->writepa_handler().set(FUNC(c2031_device::via0_pa_w));
+ m_via0->writepb_handler().set(FUNC(c2031_device::via0_pb_w));
+ m_via0->irq_handler().set(FUNC(c2031_device::via0_irq_w));
+
+ VIA6522(config, m_via1, XTAL(16'000'000)/16);
+ m_via1->readpa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_r));
+ m_via1->readpb_handler().set(FUNC(c2031_device::via1_pb_r));
+ m_via1->writepa_handler().set(C64H156_TAG, FUNC(c64h156_device::yb_w));
+ m_via1->writepb_handler().set(FUNC(c2031_device::via1_pb_w));
+ m_via1->ca2_handler().set(C64H156_TAG, FUNC(c64h156_device::soe_w));
+ m_via1->cb2_handler().set(C64H156_TAG, FUNC(c64h156_device::oe_w));
+ m_via1->irq_handler().set(FUNC(c2031_device::via1_irq_w));
+
+ C64H156(config, m_ga, XTAL(16'000'000));
+ m_ga->byte_callback().set(FUNC(c2031_device::byte_w));
+
+ floppy_connector &connector(FLOPPY_CONNECTOR(config, C64H156_TAG":0", 0));
+ connector.option_add("525ssqd", FLOPPY_525_SSQD);
+ connector.set_default_option("525ssqd");
+ connector.set_fixed(true);
+ connector.set_formats(c2031_device::floppy_formats);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/ieee488/c2031.h b/src/devices/bus/ieee488/c2031.h
index e322267d5c0..99d97a0201a 100644
--- a/src/devices/bus/ieee488/c2031.h
+++ b/src/devices/bus/ieee488/c2031.h
@@ -62,7 +62,7 @@ private:
DECLARE_FLOPPY_FORMATS( floppy_formats );
- required_device<cpu_device> m_maincpu;
+ required_device<m6502_device> m_maincpu;
required_device<via6522_device> m_via0;
required_device<via6522_device> m_via1;
required_device<c64h156_device> m_ga;
diff --git a/src/devices/bus/ieee488/ieee488.h b/src/devices/bus/ieee488/ieee488.h
index 9dd05039e0a..74083975530 100644
--- a/src/devices/bus/ieee488/ieee488.h
+++ b/src/devices/bus/ieee488/ieee488.h
@@ -107,6 +107,16 @@ public:
template <class Object> devcb_base &set_ren_callback(Object &&cb) { return m_write_ren.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_dio_callback(Object &&cb) { return m_write_dio.set_callback(std::forward<Object>(cb)); }
+ auto eoi_callback() { return m_write_eoi.bind(); }
+ auto dav_callback() { return m_write_dav.bind(); }
+ auto nrfd_callback() { return m_write_nrfd.bind(); }
+ auto ndac_callback() { return m_write_ndac.bind(); }
+ auto ifc_callback() { return m_write_ifc.bind(); }
+ auto srq_callback() { return m_write_srq.bind(); }
+ auto atn_callback() { return m_write_atn.bind(); }
+ auto ren_callback() { return m_write_ren.bind(); }
+ auto dio_callback() { return m_write_dio.bind(); }
+
void add_device(ieee488_slot_device *slot, device_t *target);
// reads for both host and peripherals
diff --git a/src/devices/bus/plus4/c1551.cpp b/src/devices/bus/plus4/c1551.cpp
index 0190a0b922e..63cda307f2b 100644
--- a/src/devices/bus/plus4/c1551.cpp
+++ b/src/devices/bus/plus4/c1551.cpp
@@ -322,16 +322,6 @@ void c1551_device::c1551_mem(address_map &map)
//-------------------------------------------------
-// SLOT_INTERFACE( c1551_floppies )
-//-------------------------------------------------
-
-static void c1551_floppies(device_slot_interface &device)
-{
- device.option_add("525ssqd", FLOPPY_525_SSQD);
-}
-
-
-//-------------------------------------------------
// FLOPPY_FORMATS( floppy_formats )
//-------------------------------------------------
@@ -345,33 +335,47 @@ FLOPPY_FORMATS_END
// device_add_mconfig - add device configuration
//-------------------------------------------------
-MACHINE_CONFIG_START(c1551_device::device_add_mconfig)
- MCFG_DEVICE_ADD(M6510T_TAG, M6510T, XTAL(16'000'000)/8)
- MCFG_DEVICE_PROGRAM_MAP(c1551_mem)
- MCFG_M6510T_PORT_CALLBACKS(READ8(*this, c1551_device, port_r), WRITE8(*this, c1551_device, port_w))
- MCFG_QUANTUM_PERFECT_CPU(M6510T_TAG)
-
- MCFG_PLS100_ADD(PLA_TAG)
- MCFG_DEVICE_ADD(M6523_0_TAG, TPI6525, 0)
- MCFG_TPI6525_IN_PA_CB(READ8(*this, c1551_device, tcbm_data_r))
- MCFG_TPI6525_OUT_PA_CB(WRITE8(*this, c1551_device, tcbm_data_w))
- MCFG_TPI6525_IN_PB_CB(READ8(C64H156_TAG, c64h156_device, yb_r))
- MCFG_TPI6525_OUT_PB_CB(WRITE8(C64H156_TAG, c64h156_device, yb_w))
- MCFG_TPI6525_IN_PC_CB(READ8(*this, c1551_device, tpi0_pc_r))
- MCFG_TPI6525_OUT_PC_CB(WRITE8(*this, c1551_device, tpi0_pc_w))
- MCFG_DEVICE_ADD(M6523_1_TAG, TPI6525, 0)
- MCFG_TPI6525_IN_PA_CB(READ8(*this, c1551_device, tcbm_data_r))
- MCFG_TPI6525_OUT_PA_CB(WRITE8(*this, c1551_device, tcbm_data_w))
- MCFG_TPI6525_IN_PB_CB(READ8(*this, c1551_device, tpi1_pb_r))
- MCFG_TPI6525_IN_PC_CB(READ8(*this, c1551_device, tpi1_pc_r))
- MCFG_TPI6525_OUT_PC_CB(WRITE8(*this, c1551_device, tpi1_pc_w))
-
- MCFG_DEVICE_ADD(C64H156_TAG, C64H156, XTAL(16'000'000))
- MCFG_64H156_BYTE_CALLBACK(WRITELINE(C64H156_TAG, c64h156_device, atni_w))
- MCFG_FLOPPY_DRIVE_ADD_FIXED(C64H156_TAG":0", c1551_floppies, "525ssqd", c1551_device::floppy_formats)
-
- MCFG_PLUS4_PASSTHRU_EXPANSION_SLOT_ADD()
-MACHINE_CONFIG_END
+void c1551_device::device_add_mconfig(machine_config &config)
+{
+ M6510T(config, m_maincpu, XTAL(16'000'000)/8);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c1551_device::c1551_mem);
+ m_maincpu->read_callback().set(FUNC(c1551_device::port_r));
+ m_maincpu->write_callback().set(FUNC(c1551_device::port_w));
+ config.m_perfect_cpu_quantum = subtag(M6510T_TAG);
+
+ PLS100(config, m_pla);
+
+ TPI6525(config, m_tpi0, 0);
+ m_tpi0->in_pa_cb().set(FUNC(c1551_device::tcbm_data_r));
+ m_tpi0->out_pa_cb().set(FUNC(c1551_device::tcbm_data_w));
+ m_tpi0->in_pb_cb().set(C64H156_TAG, FUNC(c64h156_device::yb_r));
+ m_tpi0->out_pb_cb().set(C64H156_TAG, FUNC(c64h156_device::yb_w));
+ m_tpi0->in_pc_cb().set(FUNC(c1551_device::tpi0_pc_r));
+ m_tpi0->out_pc_cb().set(FUNC(c1551_device::tpi0_pc_w));
+
+ TPI6525(config, m_tpi1, 0);
+ m_tpi1->in_pa_cb().set(FUNC(c1551_device::tcbm_data_r));
+ m_tpi1->out_pa_cb().set(FUNC(c1551_device::tcbm_data_w));
+ m_tpi1->in_pb_cb().set(FUNC(c1551_device::tpi1_pb_r));
+ m_tpi1->in_pc_cb().set(FUNC(c1551_device::tpi1_pc_r));
+ m_tpi1->out_pc_cb().set(FUNC(c1551_device::tpi1_pc_w));
+
+ C64H156(config, m_ga, XTAL(16'000'000));
+ m_ga->byte_callback().set(C64H156_TAG, FUNC(c64h156_device::atni_w));
+
+ floppy_connector &connector(FLOPPY_CONNECTOR(config, C64H156_TAG":0", 0));
+ connector.option_add("525ssqd", FLOPPY_525_SSQD);
+ connector.set_default_option("525ssqd");
+ connector.set_fixed(true);
+ connector.set_formats(c1551_device::floppy_formats);
+
+ PLUS4_EXPANSION_SLOT(config, m_exp, 0);
+ m_exp->irq_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::irq_w));
+ m_exp->cd_rd_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::dma_cd_r));
+ m_exp->cd_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::dma_cd_w));
+ m_exp->aec_wr_callback().set(DEVICE_SELF_OWNER, FUNC(plus4_expansion_slot_device::aec_w));
+ plus4_expansion_cards(*m_exp);
+}
//-------------------------------------------------
diff --git a/src/devices/bus/plus4/c1551.h b/src/devices/bus/plus4/c1551.h
index 4d057ccb2bb..2cfc00786fb 100644
--- a/src/devices/bus/plus4/c1551.h
+++ b/src/devices/bus/plus4/c1551.h
@@ -78,7 +78,7 @@ private:
required_device<tpi6525_device> m_tpi0;
required_device<tpi6525_device> m_tpi1;
required_device<c64h156_device> m_ga;
- required_device<pla_device> m_pla;
+ required_device<pls100_device> m_pla;
required_device<floppy_image_device> m_floppy;
required_device<plus4_expansion_slot_device> m_exp;
required_ioport m_jp1;
diff --git a/src/devices/bus/plus4/exp.h b/src/devices/bus/plus4/exp.h
index 35dc291fa52..0fc56396ca9 100644
--- a/src/devices/bus/plus4/exp.h
+++ b/src/devices/bus/plus4/exp.h
@@ -101,6 +101,11 @@ public:
template <class Object> devcb_base &set_cd_wr_callback(Object &&cb) { return m_write_dma_cd.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_aec_wr_callback(Object &&cb) { return m_write_aec.set_callback(std::forward<Object>(cb)); }
+ auto irq_wr_callback() { return m_write_irq.bind(); }
+ auto cd_rd_callback() { return m_read_dma_cd.bind(); }
+ auto cd_wr_callback() { return m_write_dma_cd.bind(); }
+ auto aec_wr_callback() { return m_write_aec.bind(); }
+
// computer interface
uint8_t cd_r(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h);
void cd_w(address_space &space, offs_t offset, uint8_t data, int ba, int cs0, int c1l, int c2l, int cs1, int c1h, int c2h);
diff --git a/src/devices/cpu/m6502/m6510.h b/src/devices/cpu/m6502/m6510.h
index bedcb78a224..4e686560f5a 100644
--- a/src/devices/cpu/m6502/m6510.h
+++ b/src/devices/cpu/m6502/m6510.h
@@ -31,6 +31,8 @@ public:
read_port.set_callback(std::forward<Read>(rd));
write_port.set_callback(std::forward<Write>(wr));
}
+ auto read_callback() { return read_port.bind(); }
+ auto write_callback() { return write_port.bind(); }
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual void do_exec_full() override;
diff --git a/src/devices/machine/1mb5.h b/src/devices/machine/1mb5.h
index 09c05d2fd8c..18f8107896a 100644
--- a/src/devices/machine/1mb5.h
+++ b/src/devices/machine/1mb5.h
@@ -13,18 +13,6 @@
#pragma once
-#define MCFG_1MB5_IRL_HANDLER(_devcb) \
- downcast<hp_1mb5_device &>(*device).set_irl_handler(DEVCB_##_devcb);
-
-#define MCFG_1MB5_HALT_HANDLER(_devcb) \
- downcast<hp_1mb5_device &>(*device).set_halt_handler(DEVCB_##_devcb);
-
-#define MCFG_1MB5_RESET_HANDLER(_devcb) \
- downcast<hp_1mb5_device &>(*device).set_reset_handler(DEVCB_##_devcb);
-
-#define MCFG_1MB5_INT_HANDLER(_devcb) \
- downcast<hp_1mb5_device &>(*device).set_int_handler(DEVCB_##_devcb);
-
class hp_1mb5_device : public device_t
{
public:
@@ -32,10 +20,10 @@ public:
hp_1mb5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// static configuration helpers
- template <class Object> devcb_base &set_irl_handler(Object &&cb) { return m_irl_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_halt_handler(Object &&cb) { return m_halt_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_reset_handler(Object &&cb) { return m_reset_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_int_handler(Object &&cb) { return m_int_handler.set_callback(std::forward<Object>(cb)); }
+ auto irl_handler() { return m_irl_handler.bind(); }
+ auto halt_handler() { return m_halt_handler.bind(); }
+ auto reset_handler() { return m_reset_handler.bind(); }
+ auto int_handler() { return m_int_handler.bind(); }
// CPU access
DECLARE_READ8_MEMBER(cpu_r);
diff --git a/src/devices/machine/53c7xx.h b/src/devices/machine/53c7xx.h
index 8887a78a5ef..50d59c1d1b4 100644
--- a/src/devices/machine/53c7xx.h
+++ b/src/devices/machine/53c7xx.h
@@ -16,15 +16,6 @@
#include "machine/nscsi_bus.h"
-#define MCFG_NCR53C7XX_IRQ_HANDLER(_devcb) \
- downcast<ncr53c7xx_device &>(*device).set_irq_handler(DEVCB_##_devcb);
-
-#define MCFG_NCR53C7XX_HOST_WRITE(_devcb) \
- downcast<ncr53c7xx_device &>(*device).set_host_write(DEVCB_##_devcb);
-
-#define MCFG_NCR53C7XX_HOST_READ(_devcb) \
- downcast<ncr53c7xx_device &>(*device).set_host_read(DEVCB_##_devcb);
-
class ncr53c7xx_device : public nscsi_device, public device_execute_interface
{
public:
@@ -32,9 +23,9 @@ public:
ncr53c7xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// static configuration helpers
- template <class Object> devcb_base &set_irq_handler(Object &&cb) { return m_irq_handler.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_host_write(Object &&cb) { return m_host_write.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_host_read(Object &&cb) { return m_host_read.set_callback(std::forward<Object>(cb)); }
+ auto irq_handler() { return m_irq_handler.bind(); }
+ auto host_write() { return m_host_write.bind(); }
+ auto host_read() { return m_host_read.bind(); }
// our API
DECLARE_READ32_MEMBER(read);
diff --git a/src/devices/machine/53c810.h b/src/devices/machine/53c810.h
index 720e1039327..b80c0aa2c4a 100644
--- a/src/devices/machine/53c810.h
+++ b/src/devices/machine/53c810.h
@@ -7,11 +7,6 @@
#include "legscsi.h"
-#define LSI53C810_IRQ_CB(name) void name(int state)
-#define LSI53C810_DMA_CB(name) void name(uint32_t src, uint32_t dst, int length, int byteswap)
-#define LSI53C810_FETCH_CB(name) uint32_t name(uint32_t dsp)
-
-
class lsi53c810_device : public legacy_scsi_host_adapter
{
public:
@@ -22,27 +17,20 @@ public:
// construction/destruction
lsi53c810_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
- template <typename Object> void set_irq_callback(Object &&cb) { m_irq_cb = std::forward<Object>(cb); }
- template <typename Object> void set_dma_callback(Object &&cb) { m_dma_cb = std::forward<Object>(cb); }
- template <typename Object> void set_fetch_callback(Object &&cb) { m_fetch_cb = std::forward<Object>(cb); }
-
template <class FunctionClass> void set_irq_callback(void (FunctionClass::*callback)(int), const char *name)
{
- set_irq_callback(irq_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
+ m_irq_cb = irq_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr));
}
- void set_irq_callback(irq_delegate callback) { m_irq_cb = callback; }
template <class FunctionClass> void set_dma_callback(void (FunctionClass::*callback)(uint32_t, uint32_t, int, int), const char *name)
{
- set_dma_callback(dma_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
+ m_dma_cb = dma_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr));
}
- void set_dma_callback(dma_delegate callback) { m_dma_cb = callback; }
template <class FunctionClass> void set_fetch_callback(uint32_t (FunctionClass::*callback)(uint32_t), const char *name)
{
- set_fetch_callback(fetch_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
+ m_fetch_cb = fetch_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr));
}
- void set_fetch_callback(fetch_delegate callback) { m_fetch_cb = callback; }
uint8_t reg_r(int offset);
void reg_w(int offset, uint8_t data);
@@ -119,14 +107,4 @@ private:
// device type definition
DECLARE_DEVICE_TYPE(LSI53C810, lsi53c810_device)
-
-#define MCFG_LSI53C810_IRQ_CB(_class, _method) \
- downcast<lsi53c810_device &>(*device).set_irq_callback(lsi53c810_device::irq_delegate(&_class::_method, #_class "::" #_method, this));
-
-#define MCFG_LSI53C810_DMA_CB(_class, _method) \
- downcast<lsi53c810_device &>(*device).set_dma_callback(lsi53c810_device::dma_delegate(&_class::_method, #_class "::" #_method, this));
-
-#define MCFG_LSI53C810_FETCH_CB(_class, _method) \
- downcast<lsi53c810_device &>(*device).set_fetch_callback(lsi53c810_device::fetch_delegate(&_class::_method, #_class "::" #_method, this));
-
#endif // MAME_MACHINE_53C810_H
diff --git a/src/devices/machine/64h156.h b/src/devices/machine/64h156.h
index 24244e64517..0db1c0a2883 100644
--- a/src/devices/machine/64h156.h
+++ b/src/devices/machine/64h156.h
@@ -67,21 +67,6 @@
//**************************************************************************
-// INTERFACE CONFIGURATION MACROS
-//**************************************************************************
-
-#define MCFG_64H156_ATN_CALLBACK(_write) \
- downcast<c64h156_device &>(*device).set_atn_wr_callback(DEVCB_##_write);
-
-#define MCFG_64H156_SYNC_CALLBACK(_write) \
- downcast<c64h156_device &>(*device).set_sync_wr_callback(DEVCB_##_write);
-
-#define MCFG_64H156_BYTE_CALLBACK(_write) \
- downcast<c64h156_device &>(*device).set_byte_wr_callback(DEVCB_##_write);
-
-
-
-//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
@@ -93,9 +78,9 @@ public:
// construction/destruction
c64h156_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- template <class Object> devcb_base &set_atn_wr_callback(Object &&cb) { return m_write_atn.set_callback(std::forward<Object>(cb)); }
- 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_byte_wr_callback(Object &&cb) { return m_write_byte.set_callback(std::forward<Object>(cb)); }
+ auto atn_callback() { return m_write_atn.bind(); }
+ auto sync_callback() { return m_write_sync.bind(); }
+ auto byte_callback() { return m_write_byte.bind(); }
DECLARE_READ8_MEMBER( yb_r );
DECLARE_WRITE8_MEMBER( yb_w );
diff --git a/src/devices/machine/6525tpi.h b/src/devices/machine/6525tpi.h
index a17b0ebb01c..d1f3c66c7bb 100644
--- a/src/devices/machine/6525tpi.h
+++ b/src/devices/machine/6525tpi.h
@@ -53,6 +53,16 @@ public:
template <class Object> devcb_base &set_out_ca_callback(Object &&cb) { return m_out_ca_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_out_cb_callback(Object &&cb) { return m_out_cb_cb.set_callback(std::forward<Object>(cb)); }
+ auto out_irq_cb() { return m_out_irq_cb.bind(); }
+ auto in_pa_cb() { return m_in_pa_cb.bind(); }
+ auto out_pa_cb() { return m_out_pa_cb.bind(); }
+ auto in_pb_cb() { return m_in_pb_cb.bind(); }
+ auto out_pb_cb() { return m_out_pb_cb.bind(); }
+ auto in_pc_cb() { return m_in_pc_cb.bind(); }
+ auto out_pc_cb() { return m_out_pc_cb.bind(); }
+ auto out_ca_cb() { return m_out_ca_cb.bind(); }
+ auto out_cb_cb() { return m_out_cb_cb.bind(); }
+
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
diff --git a/src/devices/machine/82s129.h b/src/devices/machine/82s129.h
index 9b5ef9d3bf1..2c90fd6d896 100644
--- a/src/devices/machine/82s129.h
+++ b/src/devices/machine/82s129.h
@@ -46,51 +46,14 @@
#pragma once
-#define MCFG_82S126_OUTPUT_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_out_cb(DEVCB_##_devcb);
-
-#define MCFG_82S126_O1_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_o1_cb(DEVCB_##_devcb);
-
-#define MCFG_82S126_O2_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_o2_cb(DEVCB_##_devcb);
-
-#define MCFG_82S126_O3_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_o3_cb(DEVCB_##_devcb);
-
-#define MCFG_82S126_O4_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_o4_cb(DEVCB_##_devcb);
-
-#define MCFG_82S129_OUTPUT_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_out_cb(DEVCB_##_devcb);
-
-#define MCFG_82S129_O1_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_o1_cb(DEVCB_##_devcb);
-
-#define MCFG_82S129_O2_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_o2_cb(DEVCB_##_devcb);
-
-#define MCFG_82S129_O3_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_o3_cb(DEVCB_##_devcb);
-
-#define MCFG_82S129_O4_CB(_devcb) \
- downcast<prom82s129_base_device &>(*device).set_o4_cb(DEVCB_##_devcb);
-
-#define MCFG_82S129_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, PROM82S129, 0)
-
-#define MCFG_82S126_ADD(_tag) \
- MCFG_DEVICE_ADD(_tag, PROM82S126, 0)
-
class prom82s129_base_device : public device_t
{
public:
- // static configuration helpers
- template <class Object> devcb_base &set_out_cb(Object &&cb) { return m_out_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_o1_cb(Object &&cb) { return m_o1_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_o2_cb(Object &&cb) { return m_o2_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_o3_cb(Object &&cb) { return m_o3_func.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_o4_cb(Object &&cb) { return m_o4_func.set_callback(std::forward<Object>(cb)); }
+ auto out_callback() { return m_out_func.bind(); }
+ auto o1_callback() { return m_o1_func.bind(); }
+ auto o2_callback() { return m_o2_func.bind(); }
+ auto o3_callback() { return m_o3_func.bind(); }
+ auto o4_callback() { return m_o4_func.bind(); }
DECLARE_WRITE_LINE_MEMBER( ce1_w );
DECLARE_WRITE_LINE_MEMBER( ce2_w );
diff --git a/src/devices/machine/pla.cpp b/src/devices/machine/pla.cpp
index a17335628f5..2b73ba36a14 100644
--- a/src/devices/machine/pla.cpp
+++ b/src/devices/machine/pla.cpp
@@ -13,13 +13,14 @@
DEFINE_DEVICE_TYPE(PLA, pla_device, "pla", "PLA")
+DEFINE_DEVICE_TYPE(PLS100, pls100_device, "pls100", "82S100-series PLA")
//-------------------------------------------------
// pla_device - constructor
//-------------------------------------------------
-pla_device::pla_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, PLA, tag, owner, clock)
+pla_device::pla_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock)
, m_region(*this, DEVICE_SELF)
, m_format(FMT::JEDBIN)
, m_inputs(0)
@@ -31,6 +32,18 @@ pla_device::pla_device(const machine_config &mconfig, const char *tag, device_t
{
}
+pla_device::pla_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : pla_device(mconfig, PLA, tag, owner, clock)
+{
+}
+
+pls100_device::pls100_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : pla_device(mconfig, PLS100, tag, owner, clock)
+{
+ set_num_inputs(16);
+ set_num_outputs(8);
+ set_num_terms(48);
+}
//-------------------------------------------------
// device_start - device-specific startup
diff --git a/src/devices/machine/pla.h b/src/devices/machine/pla.h
index 94d7a178ea6..0d3fef80cc0 100644
--- a/src/devices/machine/pla.h
+++ b/src/devices/machine/pla.h
@@ -11,9 +11,6 @@
#pragma once
-
-
-
///*************************************************************************
// INTERFACE CONFIGURATION MACROS
///*************************************************************************
@@ -52,7 +49,7 @@
GND 14 |_____________| 15 F3
*/
#define MCFG_PLS100_ADD(tag) \
- MCFG_PLA_ADD((tag), 16, 8, 48)
+ MCFG_DEVICE_ADD((tag), PLS100)
// MOS 8721 PLA
// TODO: actual number of terms is unknown
@@ -78,6 +75,7 @@ public:
// construction/destruction
pla_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+ pla_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// configuration helpers
void set_num_inputs(uint32_t i) { m_inputs = i; }
@@ -125,7 +123,13 @@ private:
};
-// device type definition
+class pls100_device : public pla_device
+{
+public:
+ pls100_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
DECLARE_DEVICE_TYPE(PLA, pla_device)
+DECLARE_DEVICE_TYPE(PLS100, pls100_device)
#endif // MAME_MACHINE_PLA_H
diff --git a/src/devices/sound/scsp.h b/src/devices/sound/scsp.h
index 983e37c3a9f..ef2268f5101 100644
--- a/src/devices/sound/scsp.h
+++ b/src/devices/sound/scsp.h
@@ -38,6 +38,9 @@ public:
template <class Object> devcb_base &set_irq_callback(Object &&cb) { return m_irq_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_main_irq_callback(Object &&cb) { return m_main_irq_cb.set_callback(std::forward<Object>(cb)); }
template <class Object> devcb_base &set_exts_callback(Object &&cb) { return m_exts_cb.set_callback(std::forward<Object>(cb)); }
+ auto irq_cb() { return m_irq_cb.bind(); }
+ auto main_irq_cb() { return m_main_irq_cb.bind(); }
+ auto exts_cb() { return m_exts_cb.bind(); }
// SCSP register access
DECLARE_READ16_MEMBER( read );
diff --git a/src/emu/emupal.h b/src/emu/emupal.h
index 4169dabe858..a9ccdc99565 100644
--- a/src/emu/emupal.h
+++ b/src/emu/emupal.h
@@ -365,6 +365,16 @@ public:
// configuration
template <typename Object> void set_init(Object &&init) { m_init = std::forward<Object>(init); }
+ void set_init(palette_init_delegate callback) { m_init = callback; }
+ template <class FunctionClass> void set_init(const char *devname, void (FunctionClass::*callback)(palette_device &), const char *name)
+ {
+ set_init(palette_init_delegate(callback, name, devname, static_cast<FunctionClass *>(nullptr)));
+ }
+ template <class FunctionClass> void set_init(void (FunctionClass::*callback)(palette_device &), const char *name)
+ {
+ set_init(palette_init_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
+ }
+
void set_format(raw_to_rgb_converter raw_to_rgb) { m_raw_to_rgb = raw_to_rgb; }
void set_membits(int membits) { m_membits = membits; m_membits_supplied = true; }
void set_endianness(endianness_t endianness) { m_endianness = endianness; m_endianness_supplied = true; }
diff --git a/src/mame/drivers/bebox.cpp b/src/mame/drivers/bebox.cpp
index ecabece31f5..50fe68e9899 100644
--- a/src/mame/drivers/bebox.cpp
+++ b/src/mame/drivers/bebox.cpp
@@ -94,20 +94,20 @@ void bebox_state::slave_mem(address_map &map)
((x << 8) & 0xff0000) | \
((x << 24) & 0xff000000))
-LSI53C810_FETCH_CB(bebox_state::scsi_fetch)
+uint32_t bebox_state::scsi_fetch(uint32_t dsp)
{
- uint32_t result = m_ppc[0]->space(AS_PROGRAM).read_dword(dsp & 0x7FFFFFFF);
+ const uint32_t result = m_ppc[0]->space(AS_PROGRAM).read_dword(dsp & 0x7FFFFFFF);
return BYTE_REVERSE32(result);
}
-LSI53C810_IRQ_CB(bebox_state::scsi_irq_callback)
+void bebox_state::scsi_irq_callback(int state)
{
bebox_set_irq_bit(21, state);
}
-LSI53C810_DMA_CB(bebox_state::scsi_dma_callback)
+void bebox_state::scsi_dma_callback(uint32_t src, uint32_t dst, int length, int byteswap)
{
}
diff --git a/src/mame/drivers/model3.cpp b/src/mame/drivers/model3.cpp
index 1a2e67bff50..28bde9299fb 100644
--- a/src/mame/drivers/model3.cpp
+++ b/src/mame/drivers/model3.cpp
@@ -1129,14 +1129,13 @@ WRITE64_MEMBER(model3_state::scsi_w)
}
}
-LSI53C810_FETCH_CB(model3_state::scsi_fetch)
+uint32_t model3_state::scsi_fetch(uint32_t dsp)
{
- address_space &space = m_maincpu->space(AS_PROGRAM);
- uint32_t result = space.read_dword(dsp);
+ const uint32_t result = m_maincpu->space(AS_PROGRAM).read_dword(dsp);
return flipendian_int32(result);
}
-LSI53C810_IRQ_CB(model3_state::scsi_irq_callback)
+void model3_state::scsi_irq_callback(int state)
{
m_scsi_irq_state = state;
update_irq_state();
@@ -1229,7 +1228,7 @@ WRITE64_MEMBER(model3_state::real3d_dma_w)
logerror("real3d_dma_w: %08X, %08X%08X, %08X%08X", offset, (uint32_t)(data >> 32), (uint32_t)(data), (uint32_t)(mem_mask >> 32), (uint32_t)(mem_mask));
}
-LSI53C810_DMA_CB(model3_state::real3d_dma_callback)
+void model3_state::real3d_dma_callback(uint32_t src, uint32_t dst, int length, int byteswap)
{
switch(dst >> 24)
{
@@ -1283,12 +1282,45 @@ TIMER_CALLBACK_MEMBER(model3_state::real3d_dma_timer_callback)
m_dma_busy = 0;
}
+/* IRQs */
+/*
+ 0x80: Unknown (no clearing logic in scud)
+ 0x40: SCSP
+ 0x20: Unknown (no clearing logic in scud)
+ 0x10: Network
+ 0x08: Video (unknown -- has callback hook in scud)
+ 0x04: Video (unknown -- has callback hook in scud)
+ 0x02: Video (VBLANK start?)
+ 0x01: Video (unused?)
+
+ IRQ 0x08 and 0x04 directly affect the game speed in magtruck, once per scanline seems fast enough
+ Un-syncing the interrupts breaks the progress bar in magtruck
+*/
+
+TIMER_CALLBACK_MEMBER(model3_state::model3_scan_timer_tick)
+{
+ m_scan_timer->adjust(m_screen->time_until_pos(m_screen->vpos() + 1), m_screen->vpos() + 1);
+
+ int scanline = param;
+
+ if (scanline == 384)
+ {
+ set_irq_line(0x02, ASSERT_LINE);
+ }
+ else
+ {
+ //if ((scanline & 0x1) == 0)
+ set_irq_line(0x0c, ASSERT_LINE);
+ }
+}
+
MACHINE_START_MEMBER(model3_state,model3_10)
{
configure_fast_ram();
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
+ m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_scan_timer_tick),this));
}
MACHINE_START_MEMBER(model3_state,model3_15)
{
@@ -1296,6 +1328,7 @@ MACHINE_START_MEMBER(model3_state,model3_15)
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
+ m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_scan_timer_tick),this));
}
MACHINE_START_MEMBER(model3_state,model3_20)
{
@@ -1303,6 +1336,7 @@ MACHINE_START_MEMBER(model3_state,model3_20)
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
+ m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_scan_timer_tick),this));
}
MACHINE_START_MEMBER(model3_state,model3_21)
{
@@ -1310,6 +1344,7 @@ MACHINE_START_MEMBER(model3_state,model3_21)
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_sound_timer_tick),this));
m_real3d_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::real3d_dma_timer_callback),this));
+ m_scan_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(model3_state::model3_scan_timer_tick),this));
}
void model3_state::model3_init(int step)
@@ -1334,6 +1369,8 @@ void model3_state::model3_init(int step)
memcpy(m_soundram, memregion("audiocpu")->base()+0x80000, 16);
m_audiocpu->reset();
+ m_scan_timer->adjust(m_screen->time_until_pos(m_screen->vpos() + 1), m_screen->vpos() + 1);
+
m_m3_step = step; // step = BCD hardware rev. 0x10 for 1.0, 0x15 for 1.5, 0x20 for 2.0, etc.
tap_reset();
@@ -1365,6 +1402,7 @@ void model3_state::model3_init(int step)
}
}
+//void model3_state::reset_model3_10() { model3_init(0x10); }
MACHINE_RESET_MEMBER(model3_state,model3_10){ model3_init(0x10); }
MACHINE_RESET_MEMBER(model3_state,model3_15){ model3_init(0x15); }
MACHINE_RESET_MEMBER(model3_state,model3_20){ model3_init(0x20); }
@@ -5716,132 +5754,101 @@ WRITE8_MEMBER(model3_state::scsp_irq)
m_audiocpu->set_input_line(offset, data);
}
-/* IRQs */
-/*
- 0x80: Unknown (no clearing logic in scud)
- 0x40: SCSP
- 0x20: Unknown (no clearing logic in scud)
- 0x10: Network
- 0x08: Video (unknown -- has callback hook in scud)
- 0x04: Video (unknown -- has callback hook in scud)
- 0x02: Video (VBLANK start?)
- 0x01: Video (unused?)
-
- IRQ 0x08 and 0x04 directly affect the game speed in magtruck, once per scanline seems fast enough
- Un-syncing the interrupts breaks the progress bar in magtruck
-*/
-TIMER_DEVICE_CALLBACK_MEMBER(model3_state::model3_interrupt)
+void model3_state::add_cpu_66mhz(machine_config &config)
{
- int scanline = param;
-
- if (scanline == 384)
- {
- set_irq_line(0x02, ASSERT_LINE);
- }
- else
- {
- //if ((scanline & 0x1) == 0)
- set_irq_line(0x0c, ASSERT_LINE);
- }
+ PPC603E(config, m_maincpu, 66000000);
+ m_maincpu->set_bus_frequency(66000000); /* Multiplier 1, Bus = 66MHz, Core = 66MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &model3_state::model3_10_mem);
}
-MACHINE_CONFIG_START(model3_state::model3_10)
- MCFG_DEVICE_ADD("maincpu", PPC603E, 66000000)
- MCFG_PPC_BUS_FREQUENCY(66000000) /* Multiplier 1, Bus = 66MHz, Core = 66MHz */
- MCFG_DEVICE_PROGRAM_MAP(model3_10_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model3_state, model3_interrupt, "screen", 0, 1)
-
- MCFG_DEVICE_ADD("audiocpu", M68000, 12000000)
- MCFG_DEVICE_PROGRAM_MAP(model3_snd)
-
- MCFG_QUANTUM_TIME(attotime::from_hz(600))
+void model3_state::add_cpu_100mhz(machine_config &config)
+{
+ PPC603E(config, m_maincpu, 100000000);
+ m_maincpu->set_bus_frequency(66000000); /* Multiplier 1.5, Bus = 66MHz, Core = 100MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &model3_state::model3_mem);
+}
- MCFG_MACHINE_START_OVERRIDE(model3_state,model3_10)
- MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_10)
+void model3_state::add_cpu_166mhz(machine_config &config)
+{
+ PPC603R(config, m_maincpu, 166000000);
+ m_maincpu->set_bus_frequency(66000000); /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &model3_state::model3_mem);
+}
- MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
- MCFG_NVRAM_ADD_1FILL("backup")
- MCFG_DEVICE_ADD("rtc", RTC72421, XTAL(32'768)) // internal oscillator
+void model3_state::add_base_devices(machine_config &config)
+{
+ M68000(config, m_audiocpu, 12000000);
+ m_audiocpu->set_addrmap(AS_PROGRAM, model3_snd);
+ EEPROM_SERIAL_93C46_16BIT(config, m_eeprom);
+ NVRAM(config, "backup", nvram_device::DEFAULT_ALL_1);
+ RTC72421(config, m_rtc, XTAL(32'768)); // internal oscillator
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VISIBLE_AREA(0, 495, 0, 383)
- MCFG_SCREEN_SIZE(512, 400)
- MCFG_SCREEN_UPDATE_DRIVER(model3_state, screen_update_model3)
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_visarea(0, 495, 0, 383);
+ m_screen->set_size(512, 400);
+ m_screen->set_screen_update(FUNC(model3_state::screen_update_model3));
- MCFG_PALETTE_ADD_RRRRRGGGGGBBBBB("palette")
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
+ PALETTE(config, m_palette, 32768);
+ m_palette->set_init("palette", FUNC(palette_device::palette_init_RRRRRGGGGGBBBBB));
+ GFXDECODE(config, m_gfxdecode, m_palette, gfxdecode_device::empty);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("scsp1", SCSP)
- MCFG_SCSP_IRQ_CB(WRITE8(*this, model3_state, scsp_irq))
- MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
-
- MCFG_DEVICE_ADD("scsp2", SCSP)
- MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
-
- MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0)
-
- MCFG_DEVICE_ADD("lsi53c810", LSI53C810, 0)
- MCFG_LSI53C810_IRQ_CB(model3_state, scsi_irq_callback)
- MCFG_LSI53C810_DMA_CB(model3_state, real3d_dma_callback)
- MCFG_LSI53C810_FETCH_CB(model3_state, scsi_fetch)
- MCFG_LEGACY_SCSI_PORT("scsi")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(model3_state::model3_15)
- MCFG_DEVICE_ADD("maincpu", PPC603E, 100000000)
- MCFG_PPC_BUS_FREQUENCY(66000000) /* Multiplier 1.5, Bus = 66MHz, Core = 100MHz */
- MCFG_DEVICE_PROGRAM_MAP(model3_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model3_state, model3_interrupt, "screen", 0, 1)
-
- MCFG_DEVICE_ADD("audiocpu", M68000, 12000000)
- MCFG_DEVICE_PROGRAM_MAP(model3_snd)
-
- MCFG_MACHINE_START_OVERRIDE(model3_state,model3_15)
- MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_15)
+ SCSP(config, m_scsp1);
+ m_scsp1->irq_cb().set(FUNC(model3_state::scsp_irq));
+ m_scsp1->add_route(0, "lspeaker", 2.0);
+ m_scsp1->add_route(0, "rspeaker", 2.0);
+
+ scsp_device &scsp2(SCSP(config, "scsp2"));
+ scsp2.add_route(0, "lspeaker", 2.0);
+ scsp2.add_route(0, "rspeaker", 2.0);
+}
- MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
- MCFG_NVRAM_ADD_1FILL("backup")
- MCFG_DEVICE_ADD("rtc", RTC72421, XTAL(32'768)) // internal oscillator
+void model3_state::add_scsi_devices(machine_config &config)
+{
+ SCSI_PORT(config, "scsi", 0);
+ LSI53C810(config, m_lsi53c810, 0);
+ m_lsi53c810->set_irq_callback(FUNC(model3_state::scsi_irq_callback));
+ m_lsi53c810->set_dma_callback(FUNC(model3_state::real3d_dma_callback));
+ m_lsi53c810->set_fetch_callback(FUNC(model3_state::scsi_fetch));
+ m_lsi53c810->set_scsi_port("scsi");
+}
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VISIBLE_AREA(0, 495, 0, 383)
- MCFG_SCREEN_SIZE(496, 400)
- MCFG_SCREEN_UPDATE_DRIVER(model3_state, screen_update_model3)
+void model3_state::add_crypt_devices(machine_config &config)
+{
+ m_maincpu->set_addrmap(AS_PROGRAM, &model3_state::model3_5881_mem);
- MCFG_PALETTE_ADD_RRRRRGGGGGBBBBB("palette")
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
+ SEGA315_5881_CRYPT(config, m_cryptdevice, 0);
+ m_cryptdevice->set_read_cb(FUNC(model3_state::crypt_read_callback));
+}
+void model3_state::model3_10(machine_config &config)
+{
+ add_cpu_66mhz(config);
+ add_base_devices(config);
+ add_scsi_devices(config);
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("scsp1", SCSP)
- MCFG_SCSP_IRQ_CB(WRITE8(*this, model3_state, scsp_irq))
- MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
+ config.m_minimum_quantum = attotime::from_hz(600);
- MCFG_DEVICE_ADD("scsp2", SCSP)
- MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
+ MCFG_MACHINE_START_OVERRIDE(model3_state,model3_10)
+ MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_10)
+}
- MCFG_DEVICE_ADD("scsi", SCSI_PORT, 0)
+void model3_state::model3_15(machine_config &config)
+{
+ add_cpu_100mhz(config);
+ add_base_devices(config);
+ add_scsi_devices(config);
- MCFG_DEVICE_ADD("lsi53c810", LSI53C810, 0)
- MCFG_LSI53C810_IRQ_CB(model3_state, scsi_irq_callback)
- MCFG_LSI53C810_DMA_CB(model3_state, real3d_dma_callback)
- MCFG_LSI53C810_FETCH_CB(model3_state, scsi_fetch)
- MCFG_LEGACY_SCSI_PORT("scsi")
+ MCFG_MACHINE_START_OVERRIDE(model3_state,model3_15)
+ MCFG_MACHINE_RESET_OVERRIDE(model3_state,model3_15)
- MCFG_M3COMM_ADD("comm_board")
-MACHINE_CONFIG_END
+ M3COMM(config, "comm_board", 0);
+}
void model3_state::scud(machine_config &config)
{
@@ -5859,46 +5866,16 @@ void model3_state::scud(machine_config &config)
uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc));
}
-MACHINE_CONFIG_START(model3_state::model3_20)
- MCFG_DEVICE_ADD("maincpu", PPC603R, 166000000)
- MCFG_PPC_BUS_FREQUENCY(66000000) /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */
- MCFG_DEVICE_PROGRAM_MAP(model3_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model3_state, model3_interrupt, "screen", 0, 1)
-
- MCFG_DEVICE_ADD("audiocpu", M68000, 12000000)
- MCFG_DEVICE_PROGRAM_MAP(model3_snd)
+void model3_state::model3_20(machine_config &config)
+{
+ add_cpu_166mhz(config);
+ add_base_devices(config);
MCFG_MACHINE_START_OVERRIDE(model3_state, model3_20)
MCFG_MACHINE_RESET_OVERRIDE(model3_state, model3_20)
- MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
- MCFG_NVRAM_ADD_1FILL("backup")
- MCFG_DEVICE_ADD("rtc", RTC72421, XTAL(32'768)) // internal oscillator
-
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VISIBLE_AREA(0, 495, 0, 383)
- MCFG_SCREEN_SIZE(496, 400)
- MCFG_SCREEN_UPDATE_DRIVER(model3_state, screen_update_model3)
-
- MCFG_PALETTE_ADD_RRRRRGGGGGBBBBB("palette")
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
-
-
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("scsp1", SCSP)
- MCFG_SCSP_IRQ_CB(WRITE8(*this, model3_state, scsp_irq))
- MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
-
- MCFG_DEVICE_ADD("scsp2", SCSP)
- MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
-
- MCFG_M3COMM_ADD("comm_board")
-MACHINE_CONFIG_END
+ M3COMM(config, "comm_board", 0);
+}
uint16_t model3_state::crypt_read_callback(uint32_t addr)
{
@@ -5914,67 +5891,28 @@ uint16_t model3_state::crypt_read_callback(uint32_t addr)
return dat;
}
-MACHINE_CONFIG_START(model3_state::model3_20_5881)
+void model3_state::model3_20_5881(machine_config &config)
+{
model3_20(config);
+ add_crypt_devices(config);
+}
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(model3_5881_mem)
-
- MCFG_DEVICE_ADD("315_5881", SEGA315_5881_CRYPT, 0)
- MCFG_SET_READ_CALLBACK(model3_state, crypt_read_callback)
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(model3_state::model3_21)
- MCFG_DEVICE_ADD("maincpu", PPC603R, 166000000)
- MCFG_PPC_BUS_FREQUENCY(66000000) /* Multiplier 2.5, Bus = 66MHz, Core = 166MHz */
- MCFG_DEVICE_PROGRAM_MAP(model3_mem)
- MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model3_state, model3_interrupt, "screen", 0, 1)
-
- MCFG_DEVICE_ADD("audiocpu", M68000, 12000000)
- MCFG_DEVICE_PROGRAM_MAP(model3_snd)
+void model3_state::model3_21(machine_config &config)
+{
+ add_cpu_166mhz(config);
+ add_base_devices(config);
MCFG_MACHINE_START_OVERRIDE(model3_state, model3_21)
MCFG_MACHINE_RESET_OVERRIDE(model3_state, model3_21)
- MCFG_DEVICE_ADD("eeprom", EEPROM_SERIAL_93C46_16BIT)
- MCFG_NVRAM_ADD_1FILL("backup")
- MCFG_DEVICE_ADD("rtc", RTC72421, XTAL(32'768)) // internal oscillator
-
-
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_REFRESH_RATE(60)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MCFG_SCREEN_VISIBLE_AREA(0, 495, 0, 383)
- MCFG_SCREEN_SIZE(496, 400)
- MCFG_SCREEN_UPDATE_DRIVER(model3_state, screen_update_model3)
-
- MCFG_PALETTE_ADD_RRRRRGGGGGBBBBB("palette")
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
-
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("scsp1", SCSP)
- MCFG_SCSP_IRQ_CB(WRITE8(*this, model3_state, scsp_irq))
- MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
-
- MCFG_DEVICE_ADD("scsp2", SCSP)
- MCFG_SOUND_ROUTE(0, "lspeaker", 2.0)
- MCFG_SOUND_ROUTE(0, "rspeaker", 2.0)
-
- MCFG_M3COMM_ADD("comm_board")
-MACHINE_CONFIG_END
+ M3COMM(config, "comm_board", 0);
+}
-MACHINE_CONFIG_START(model3_state::model3_21_5881)
+void model3_state::model3_21_5881(machine_config &config)
+{
model3_21(config);
-
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(model3_5881_mem)
-
- MCFG_DEVICE_ADD("315_5881", SEGA315_5881_CRYPT, 0)
- MCFG_SET_READ_CALLBACK(model3_state, crypt_read_callback)
-MACHINE_CONFIG_END
-
+ add_crypt_devices(config);
+}
void model3_state::interleave_vroms()
{
diff --git a/src/mame/drivers/rastersp.cpp b/src/mame/drivers/rastersp.cpp
index e331d7f4a30..718a9f48fd4 100644
--- a/src/mame/drivers/rastersp.cpp
+++ b/src/mame/drivers/rastersp.cpp
@@ -52,16 +52,16 @@ class rastersp_state : public driver_device
{
public:
rastersp_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_dsp(*this, "dsp"),
- m_dram(*this, "dram"),
- m_ldac(*this, "ldac"),
- m_rdac(*this, "rdac"),
- m_tms_timer1(*this, "tms_timer1"),
- m_tms_tx_timer(*this, "tms_tx_timer"),
- m_palette(*this, "palette"),
- m_nvram(*this, "nvram")
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_dsp(*this, "dsp")
+ , m_dram(*this, "dram")
+ , m_ldac(*this, "ldac")
+ , m_rdac(*this, "rdac")
+ , m_palette(*this, "palette")
+ , m_nvram(*this, "nvram")
+ , m_tms_timer1(nullptr)
+ , m_tms_tx_timer(nullptr)
{}
void rastersp(machine_config &config);
@@ -103,15 +103,16 @@ private:
IRQ_SCSI = 7
};
- required_device<cpu_device> m_maincpu;
- required_device<cpu_device> m_dsp;
- required_shared_ptr<uint32_t> m_dram;
- required_device<dac_word_interface> m_ldac;
- required_device<dac_word_interface> m_rdac;
- required_device<timer_device> m_tms_timer1;
- required_device<timer_device> m_tms_tx_timer;
- required_device<palette_device> m_palette;
- required_device<nvram_device> m_nvram;
+ required_device<i486_device> m_maincpu;
+ required_device<tms3203x_device> m_dsp;
+ required_shared_ptr<uint32_t> m_dram;
+ required_device<dac_16bit_r2r_twos_complement_device> m_ldac;
+ required_device<dac_16bit_r2r_twos_complement_device> m_rdac;
+ required_device<palette_device> m_palette;
+ required_device<nvram_device> m_nvram;
+
+ emu_timer *m_tms_timer1;
+ emu_timer *m_tms_tx_timer;
DECLARE_WRITE32_MEMBER(cyrix_cache_w);
DECLARE_READ8_MEMBER(nvram_r);
@@ -131,8 +132,8 @@ private:
DECLARE_WRITE32_MEMBER(ncr53c700_write);
DECLARE_WRITE_LINE_MEMBER(scsi_irq);
- TIMER_DEVICE_CALLBACK_MEMBER(tms_timer1);
- TIMER_DEVICE_CALLBACK_MEMBER(tms_tx_timer);
+ TIMER_CALLBACK_MEMBER(tms_timer1);
+ TIMER_CALLBACK_MEMBER(tms_tx_timer);
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
std::unique_ptr<uint8_t[]> m_nvram8;
@@ -143,11 +144,12 @@ private:
uint32_t m_tms_io_regs[0x80];
bitmap_ind16 m_update_bitmap;
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void update_irq(uint32_t which, uint32_t state);
- void upload_palette(uint32_t word1, uint32_t word2);
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void update_irq(uint32_t which, uint32_t state);
+ void upload_palette(uint32_t word1, uint32_t word2);
IRQ_CALLBACK_MEMBER(irq_callback);
- void ncr53c700(device_t *device);
+ nscsi_connector &add_rastersp_scsi_slot(machine_config &config, const char *tag, const char *default_slot);
+ static void ncr53c700_config(device_t *device);
void cpu_map(address_map &map);
void dsp_map(address_map &map);
void io_map(address_map &map);
@@ -176,6 +178,12 @@ void rastersp_state::machine_start()
membank("bank2")->set_base(&m_dram[0x10000/4]);
membank("bank3")->set_base(&m_dram[0x300000/4]);
+ if (!m_tms_timer1)
+ m_tms_timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rastersp_state::tms_timer1), this));
+
+ if (!m_tms_tx_timer)
+ m_tms_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(rastersp_state::tms_tx_timer), this));
+
#if USE_SPEEDUP_HACK
m_dsp->space(AS_PROGRAM).install_read_handler(0x809923, 0x809923, read32_delegate(FUNC(rastersp_state::dsp_speedup_r), this));
m_dsp->space(AS_PROGRAM).install_write_handler(0x809923, 0x809923, write32_delegate(FUNC(rastersp_state::dsp_speedup_w), this));
@@ -197,6 +205,9 @@ void rastersp_state::machine_reset()
// Reset DSP internal registers
m_tms_io_regs[SPORT_GLOBAL_CTL] = 0;
+
+ m_tms_timer1->adjust(attotime::never);
+ m_tms_tx_timer->adjust(attotime::never);
}
@@ -514,7 +525,7 @@ WRITE32_MEMBER( rastersp_state::cyrix_cache_w )
*
*************************************/
-TIMER_DEVICE_CALLBACK_MEMBER( rastersp_state::tms_tx_timer )
+TIMER_CALLBACK_MEMBER(rastersp_state::tms_tx_timer)
{
// Is the transmit shifter full?
if (m_tms_io_regs[SPORT_GLOBAL_CTL] & (1 << 3))
@@ -540,7 +551,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( rastersp_state::tms_tx_timer )
}
-TIMER_DEVICE_CALLBACK_MEMBER( rastersp_state::tms_timer1 )
+TIMER_CALLBACK_MEMBER(rastersp_state::tms_timer1)
{
}
@@ -553,7 +564,7 @@ READ32_MEMBER( rastersp_state::tms32031_control_r )
{
case TIMER1_COUNTER:
{
- attotime elapsed = m_tms_timer1->time_elapsed();
+ attotime elapsed = m_tms_timer1->elapsed();
val = m_tms_io_regs[TIMER1_PERIOD] - (elapsed.as_ticks(m_dsp->clock() / 2 / 2));
break;
@@ -840,74 +851,81 @@ WRITE32_MEMBER(rastersp_state::ncr53c700_write)
m_maincpu->space(AS_PROGRAM).write_dword(offset, data, mem_mask);
}
-void rastersp_state::ncr53c700(device_t *device)
-{
- devcb_base *devcb;
- (void)devcb;
- MCFG_DEVICE_CLOCK(66000000)
- MCFG_NCR53C7XX_IRQ_HANDLER(WRITELINE(*this, rastersp_state, scsi_irq))
- MCFG_NCR53C7XX_HOST_READ(READ32(*this, rastersp_state, ncr53c700_read))
- MCFG_NCR53C7XX_HOST_WRITE(WRITE32(*this, rastersp_state, ncr53c700_write))
-}
-
-static void rastersp_scsi_devices(device_slot_interface &device)
+void rastersp_state::ncr53c700_config(device_t *device)
{
- device.option_add("harddisk", NSCSI_HARDDISK);
- device.option_add_internal("ncr53c700", NCR53C7XX);
+ auto *state = device->subdevice<rastersp_state>(":");
+ ncr53c7xx_device &scsictrl = downcast<ncr53c7xx_device &>(*device);
+ scsictrl.set_clock(66000000);
+ scsictrl.irq_handler().set(*state, FUNC(rastersp_state::scsi_irq));
+ scsictrl.host_read().set(*state, FUNC(rastersp_state::ncr53c700_read));
+ scsictrl.host_write().set(*state, FUNC(rastersp_state::ncr53c700_write));
}
-
/*************************************
*
* Machine driver
*
*************************************/
-MACHINE_CONFIG_START(rastersp_state::rastersp)
- MCFG_DEVICE_ADD("maincpu", I486, 33330000)
- MCFG_DEVICE_PROGRAM_MAP(cpu_map)
- MCFG_DEVICE_IO_MAP(io_map)
- MCFG_DEVICE_IRQ_ACKNOWLEDGE_DRIVER(rastersp_state,irq_callback)
+void rastersp_state::rastersp(machine_config &config)
+{
+ I486(config, m_maincpu, 33330000);
+ m_maincpu->set_addrmap(AS_PROGRAM, &rastersp_state::cpu_map);
+ m_maincpu->set_addrmap(AS_IO, &rastersp_state::io_map);
+ m_maincpu->set_irq_acknowledge_callback(FUNC(rastersp_state::irq_callback));
- MCFG_DEVICE_ADD("dsp", TMS32031, 33330000)
- MCFG_DEVICE_PROGRAM_MAP(dsp_map)
- MCFG_TMS3203X_MCBL(true) // Boot-loader mode
+ TMS32031(config, m_dsp, 33330000);
+ m_dsp->set_addrmap(AS_PROGRAM, &rastersp_state::dsp_map);
+ m_dsp->set_mcbl_mode(true); // Boot-loader mode
- /* Devices */
- MCFG_TIMER_DRIVER_ADD("tms_timer1", rastersp_state, tms_timer1)
- MCFG_TIMER_DRIVER_ADD("tms_tx_timer", rastersp_state, tms_tx_timer)
+ MC146818(config, "rtc", 32.768_kHz_XTAL);
- MCFG_DEVICE_ADD("rtc", MC146818, 32.768_kHz_XTAL)
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
- MCFG_NVRAM_ADD_0FILL("nvram")
+ NSCSI_BUS(config, "scsibus", 0);
- MCFG_NSCSI_BUS_ADD("scsibus")
- MCFG_NSCSI_ADD("scsibus:0", rastersp_scsi_devices, "harddisk", true)
- MCFG_NSCSI_ADD("scsibus:7", rastersp_scsi_devices, "ncr53c700", true)
- MCFG_SLOT_OPTION_MACHINE_CONFIG("ncr53c700", [this] (device_t *device) { ncr53c700(device); })
+ nscsi_connector &connector0(NSCSI_CONNECTOR(config, "scsibus:0", 0));
+ connector0.option_add("harddisk", NSCSI_HARDDISK);
+ connector0.option_add_internal("ncr53c700", NCR53C7XX);
+ connector0.set_default_option("harddisk");
+ connector0.set_fixed(true);
- /* Video */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_SIZE(320, 240)
- MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 240-1)
- MCFG_SCREEN_UPDATE_DRIVER(rastersp_state, screen_update)
- MCFG_SCREEN_REFRESH_RATE(50)
- MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
- MCFG_SCREEN_PALETTE("palette")
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, rastersp_state, vblank_irq))
+ nscsi_connector &connector7(NSCSI_CONNECTOR(config, "scsibus:7", 0));
+ connector7.option_add("harddisk", NSCSI_HARDDISK);
+ connector7.option_add_internal("ncr53c700", NCR53C7XX);
+ connector7.set_default_option("ncr53c700");
+ connector7.set_fixed(true);
+ connector7.set_option_machine_config("ncr53c700", ncr53c700_config);
- MCFG_PALETTE_ADD_RRRRRGGGGGGBBBBB("palette")
+ /* Video */
+ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
+ screen.set_size(320, 240);
+ screen.set_visarea(0, 320-1, 0, 240-1);
+ screen.set_screen_update(FUNC(rastersp_state::screen_update));
+ screen.set_refresh_hz(50);
+ screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
+ screen.set_palette("palette");
+ screen.screen_vblank().set(FUNC(rastersp_state::vblank_irq));
+
+ PALETTE(config, m_palette, 65536);
+ m_palette->set_init("palette", FUNC(palette_device::palette_init_RRRRRGGGGGGBBBBB));
/* Sound */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ldac", DAC_16BIT_R2R_TWOS_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("rdac", DAC_16BIT_R2R_TWOS_COMPLEMENT, 0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.5) // unknown DAC
- MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0)
- MCFG_SOUND_ROUTE(0, "ldac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "ldac", -1.0, DAC_VREF_NEG_INPUT)
- MCFG_SOUND_ROUTE(0, "rdac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "rdac", -1.0, DAC_VREF_NEG_INPUT)
-MACHINE_CONFIG_END
+ DAC_16BIT_R2R_TWOS_COMPLEMENT(config, m_ldac, 0);
+ DAC_16BIT_R2R_TWOS_COMPLEMENT(config, m_rdac, 0);
+ m_ldac->add_route(ALL_OUTPUTS, "lspeaker", 0.5); // unknown DAC
+ m_rdac->add_route(ALL_OUTPUTS, "rspeaker", 0.5); // unknown DAC
+
+ voltage_regulator_device &vreg(VOLTAGE_REGULATOR(config, "vref"));
+ vreg.set_output(5.0);
+ vreg.add_route(0, "ldac", 1.0, DAC_VREF_POS_INPUT);
+ vreg.add_route(0, "rdac", 1.0, DAC_VREF_POS_INPUT);
+ vreg.add_route(0, "ldac", -1.0, DAC_VREF_NEG_INPUT);
+ vreg.add_route(0, "rdac", -1.0, DAC_VREF_NEG_INPUT);
+}
diff --git a/src/mame/includes/bebox.h b/src/mame/includes/bebox.h
index 0c85e475dce..92cb69eafc3 100644
--- a/src/mame/includes/bebox.h
+++ b/src/mame/includes/bebox.h
@@ -110,9 +110,9 @@ public:
DECLARE_WRITE_LINE_MEMBER( fdc_interrupt );
DECLARE_FLOPPY_FORMATS( floppy_formats );
- LSI53C810_FETCH_CB(scsi_fetch);
- LSI53C810_IRQ_CB(scsi_irq_callback);
- LSI53C810_DMA_CB(scsi_dma_callback);
+ uint32_t scsi_fetch(uint32_t dsp);
+ void scsi_irq_callback(int state);
+ void scsi_dma_callback(uint32_t src, uint32_t dst, int length, int byteswap);
void bebox_set_irq_bit(unsigned int interrupt_bit, int val);
void bebox_update_interrupts();
diff --git a/src/mame/includes/model3.h b/src/mame/includes/model3.h
index 711dcfb6c24..0f78150264a 100644
--- a/src/mame/includes/model3.h
+++ b/src/mame/includes/model3.h
@@ -85,6 +85,14 @@ public:
m_step20_with_old_real3d = false;
}
+ void add_cpu_66mhz(machine_config &config);
+ void add_cpu_100mhz(machine_config &config);
+ void add_cpu_166mhz(machine_config &config);
+
+ void add_base_devices(machine_config &config);
+ void add_scsi_devices(machine_config &config);
+ void add_crypt_devices(machine_config &config);
+
void model3_21_5881(machine_config &config);
void model3_20_5881(machine_config &config);
void model3_15(machine_config &config);
@@ -153,6 +161,7 @@ private:
int m_sound_irq_enable;
emu_timer *m_sound_timer;
emu_timer *m_real3d_dma_timer;
+ emu_timer *m_scan_timer;
uint8_t m_irq_enable;
uint8_t m_irq_state;
uint8_t m_scsi_irq_state;
@@ -294,12 +303,13 @@ private:
DECLARE_MACHINE_RESET(model3_21);
TIMER_CALLBACK_MEMBER(model3_sound_timer_tick);
TIMER_CALLBACK_MEMBER(real3d_dma_timer_callback);
+ TIMER_CALLBACK_MEMBER(model3_scan_timer_tick);
TIMER_DEVICE_CALLBACK_MEMBER(model3_interrupt);
void model3_exit();
DECLARE_WRITE8_MEMBER(scsp_irq);
- LSI53C810_DMA_CB(real3d_dma_callback);
- LSI53C810_FETCH_CB(scsi_fetch);
- LSI53C810_IRQ_CB(scsi_irq_callback);
+ void real3d_dma_callback(uint32_t src, uint32_t dst, int length, int byteswap);
+ uint32_t scsi_fetch(uint32_t dsp);
+ void scsi_irq_callback(int state);
void update_irq_state();
void set_irq_line(uint8_t bit, int line);
void model3_init(int step);
diff --git a/src/mame/machine/315-5881_crypt.h b/src/mame/machine/315-5881_crypt.h
index 2f595435a89..4e61c38066a 100644
--- a/src/mame/machine/315-5881_crypt.h
+++ b/src/mame/machine/315-5881_crypt.h
@@ -39,6 +39,11 @@ public:
sega_m2_read_delegate m_read;
template <typename Object> void set_read_cb(Object &&readcb) { m_read = std::forward<Object>(readcb); }
+ void set_read_cb(sega_m2_read_delegate callback) { m_read = callback; }
+ template <class FunctionClass> void set_read_cb(uint16_t (FunctionClass::*callback)(uint32_t), const char *name)
+ {
+ set_read_cb(sega_m2_read_delegate(callback, name, nullptr, static_cast<FunctionClass *>(nullptr)));
+ }
protected:
virtual void device_start() override;