From e3f58dd3bf8ba9af6c220b6c90328bbd8b0c8ddc Mon Sep 17 00:00:00 2001 From: arbee Date: Sat, 11 Aug 2018 16:00:24 -0400 Subject: New systems added as NOT_WORKING -------------------------------- Akai / Roger Linn MPC-3000 [R. Belmont, dump credits TBD] --- scripts/target/mame/mess.lua | 8 ++- src/mame/drivers/mpc3000.cpp | 145 +++++++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 3 + 3 files changed, 155 insertions(+), 1 deletion(-) create mode 100644 src/mame/drivers/mpc3000.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index aa8131c2d7a..8f7cfbff8df 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -963,7 +963,8 @@ function linkProjects_mame_mess(_target, _subtarget) "acorn", "act", "adc", - "agat", + "agat" + "akai", "alesis", "altos", "ami", @@ -1436,6 +1437,11 @@ files { MAME_DIR .. "src/mame/video/agat7.h", } +createMESSProjects(_target, _subtarget, "akai") +files { + MAME_DIR .. "src/mame/mpc3000.cpp", +} + createMESSProjects(_target, _subtarget, "alesis") files { MAME_DIR .. "src/mame/drivers/alesis.cpp", diff --git a/src/mame/drivers/mpc3000.cpp b/src/mame/drivers/mpc3000.cpp new file mode 100644 index 00000000000..b80c55d697d --- /dev/null +++ b/src/mame/drivers/mpc3000.cpp @@ -0,0 +1,145 @@ +// license:BSD-3-Clause +// copyright-holders:R. Belmont +/*************************************************************************** + + mpc3000.cpp - Akai / Roger Linn MPC-3000 music workstation + Skeleton by R. Belmont + + Hardware: + CPU: NEC V53 (33 MHz?) + 8086-compatible CPU + 8237-compatible DMA controller + 8254-compatible timer + 8259-compatible IRQ controller + Floppy: uPD72069 + SCSI: MB89352 + LCD: LC7981 + Quad-UART: TE7774 + Panel controller CPU: NEC uPD7810 @ 12 MHz + Sound DSP: L7A1045-L6048 + DSP's wavedata bus is 16 bits wide and has 24 address bits + + DMA channel 0 is SCSI, 1 is floppy, 2 is IC31 (some sort of direct-audio stream?), and 3 is the L7A1045 DSP + IRQ 3 is wire-OR of the 72069 FDC and 89352 SCSI + IRQ 4 is wire-OR of all 4 TXRDYs on the TE7774 + IRQ 5 is wire-OR of RXRDY1, 2, and 3 on the TE7774 + IRQ 6 is the SMPTE sync in + IRQ 7 is RXRDY4 on the TE7774 + + TE7774 hookups: RXD1 is MIDI IN 1, RXD2 is MIDI IN 2, RXD3 and 4 are wire-ORed to the uPD7810's TX line. + TXD1-4 are MIDI OUTs 1, 2, 3, and 4. + + MPC2000XL & MPC2000 Classic: same as 3000, except: + Dual UART: MB89371A (V53's i8251 is used for panel comms with the 78C10) + + MPC2000 Classic: + CPU: NEC V53 + Floppy: uPD72068 + SCSI: MB89352 + LCD: + Dual UART: MB89371A + (V53's 8251 is used for panel comms here) + Panel controller CPU: NEC uPD7810 @ 12 MHz + Sound DSP: L6048 + + MPC1000: + CPU, LCD, UART, panel controller, DSP: SH-3 7712 (HD6417712) + + MPC500: + CPU, LCD, UART, panel controller, DSP: SH-3 7727 (HD6417727) @ 100 MHz + + MPC2500: + CPU, LCD, UART, panel controller, DSP: SH-3 7727 (HD6417727) @ 160 MHz + +***************************************************************************/ + +#include "emu.h" +#include "cpu/nec/v53.h" +#include "sound/l7a1045_l6028_dsp_a.h" +#include "bus/midi/midi.h" +#include "speaker.h" +#include "screen.h" + +class mpc3000_state : public driver_device +{ +public: + mpc3000_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_mdout(*this, "mdout") + { } + + void mpc3000(machine_config &config); + + void init_mpc3000(); + +private: + required_device m_maincpu; + required_device m_dsp; + required_device m_mdout; + + virtual void machine_start() override; + virtual void machine_reset() override; + + void mpc3000_map(address_map &map); + void mpc3000_io_map(address_map &map); +}; + +void mpc3000_state::machine_start() +{ +} + +void mpc3000_state::machine_reset() +{ +} + +void mpc3000_state::mpc3000_map(address_map &map) +{ + map(0x00000, 0x8ffff).ram(); + map(0xa0000, 0xfffff).rom().region("maincpu", 0x20000); // first 0x20000 of the ROM is not used +} + +void mpc3000_state::mpc3000_io_map(address_map &map) +{ +} + +void mpc3000_state::mpc3000(machine_config &config) +{ + V53A(config, m_maincpu, 16_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &mpc3000_state::mpc3000_map); + m_maincpu->set_addrmap(AS_IO, &mpc3000_state::mpc3000_io_map); + + auto &mdin(MIDI_PORT(config, "mdin")); + midiin_slot(mdin); + //mdin.rxd_handler().set(m_maincpu, FUNC()); + + midiout_slot(MIDI_PORT(config, "mdout")); + + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + L7A1045(config, m_dsp, 16_MHz_XTAL); + m_dsp->add_route(0, "lspeaker", 1.0); + m_dsp->add_route(1, "rspeaker", 1.0); +} + +static INPUT_PORTS_START( mpc3000 ) +INPUT_PORTS_END + +ROM_START( mpc3000 ) + ROM_REGION(0x80000, "maincpu", 0) // V53 code + ROM_LOAD16_BYTE( "mpc312ls.bin", 0x000000, 0x040000, CRC(d4fb6439) SHA1(555d388ed25f8b85638c325e7d9012eaa271ffa0) ) + ROM_LOAD16_BYTE( "mpc312ms.bin", 0x000001, 0x040000, CRC(80ee0ab9) SHA1(b8855118d59b8f73a3af5ff2e824cdaa0a9f564a) ) + + ROM_REGION(0x80000, "subcpu", 0) // uPD78C10 panel controller code + ROM_LOAD( "mp3000__op_v1.0.am27c256__id0110.ic602.bin", 0x000000, 0x008000, CRC(b0b783d3) SHA1(a60016184fc07ba00dcc19ba4da60e78aceff63c) ) + + ROM_REGION( 0x2000000, "dsp", ROMREGION_ERASE00 ) // sample RAM +ROM_END + +void mpc3000_state::init_mpc3000() +{ +} + +CONS( 1994, mpc3000, 0, 0, mpc3000, mpc3000, mpc3000_state, init_mpc3000, "Akai / Roger Linn", "MPC-3000", MACHINE_IMPERFECT_SOUND ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 9c730cfba78..6c1dd1042ed 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -21664,6 +21664,9 @@ mosaica // (c) 1990 Space + Fuuki license mouser // UPL-83001 (c) 1983 mouserc // UPL-83001 (c) 1983 +@source:mpc3000.cpp +mpc3000 + @source:mpf1.cpp mpf1 // 1979 Multitech Micro Professor 1 mpf1b // 1979 Multitech Micro Professor 1B -- cgit v1.2.3