diff options
author | mooglyguy <therealmogminer@gmail.com> | 2018-08-01 04:45:25 +0200 |
---|---|---|
committer | mooglyguy <therealmogminer@gmail.com> | 2018-08-01 04:45:25 +0200 |
commit | b5ff656e9a05db58c94299a7a322c33157e6b138 (patch) | |
tree | 8abc9ff683e4ba022fd914c807d7bc16b0ce0e3e | |
parent | c3aa68905ed78e4bac19ff2e2a6542914b97e243 (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
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 ¢ronics(CENTRONICS(config, CENTRONICS_TAG, centronics_devices, "printer")); + centronics.ack_handler().set(MC6821_TAG, FUNC(pia6821_device::ca1_w)); + + output_latch_device ¢_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; |