summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/roland/roland_mc50.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/roland/roland_mc50.cpp')
-rw-r--r--src/mame/roland/roland_mc50.cpp137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/mame/roland/roland_mc50.cpp b/src/mame/roland/roland_mc50.cpp
new file mode 100644
index 00000000000..bb000b73d28
--- /dev/null
+++ b/src/mame/roland/roland_mc50.cpp
@@ -0,0 +1,137 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/****************************************************************************
+
+ Skeleton driver for Roland MC-50 & similar MIDI sequencers.
+
+****************************************************************************/
+
+#include "emu.h"
+//#include "bus/midi/midi.h"
+#include "cpu/z180/z180.h"
+#include "imagedev/floppy.h"
+#include "machine/wd_fdc.h"
+
+
+namespace {
+
+class roland_mc50_state : public driver_device
+{
+public:
+ roland_mc50_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_mpu(*this, "mpu")
+ , m_wdfdc(*this, "wdfdc")
+ , m_wdfdd(*this, "wdfdc:0")
+ {
+ }
+
+ void mc300(machine_config &config);
+ void mc50(machine_config &config);
+ void mc50mk2(machine_config &config);
+
+private:
+ void mem_map_mc300(address_map &map) ATTR_COLD;
+ void mem_map_mc50(address_map &map) ATTR_COLD;
+ void io_map(address_map &map) ATTR_COLD;
+
+ required_device<z180_device> m_mpu;
+ optional_device<wd1772_device> m_wdfdc;
+ //optional_device<hd63266_device> m_hdfdc;
+ optional_device<floppy_connector> m_wdfdd;
+};
+
+void roland_mc50_state::mem_map_mc300(address_map &map)
+{
+ map(0x00000, 0x01fff).rom().region("mpurom", 0);
+ map(0x40000, 0xfffff).ram();
+}
+
+void roland_mc50_state::mem_map_mc50(address_map &map)
+{
+ map(0x00000, 0x3ffff).rom().region("mpurom", 0);
+ map(0x40000, 0x7ffff).ram();
+ map(0x80000, 0xfffff).rom().region("mpurom", 0);
+}
+
+void roland_mc50_state::io_map(address_map &map)
+{
+ map(0x0000, 0x003f).noprw(); // internal registers
+ map(0x00c0, 0x00c3).mirror(0xff00).rw(m_wdfdc, FUNC(wd1772_device::read), FUNC(wd1772_device::write));
+}
+
+static INPUT_PORTS_START(mc50)
+INPUT_PORTS_END
+
+static void mc50_floppies(device_slot_interface &device)
+{
+ device.option_add("35dd", FLOPPY_35_DD);
+}
+
+void roland_mc50_state::mc300(machine_config &config)
+{
+ Z80180(config, m_mpu, 10_MHz_XTAL);
+ m_mpu->set_addrmap(AS_PROGRAM, &roland_mc50_state::mem_map_mc300);
+ m_mpu->set_addrmap(AS_IO, &roland_mc50_state::io_map);
+
+ //bu3904s_device &fsk(BU3904S(config, "fsk", 10_MHz_XTAL / 2));
+ //fsk.xint_callback().set_inputline(m_mpu, Z180_INPUT_LINE_IRQ0);
+
+ WD1772(config, m_wdfdc, 8_MHz_XTAL);
+ m_wdfdc->intrq_wr_callback().set_inputline(m_mpu, Z180_INPUT_LINE_IRQ1);
+ m_wdfdc->drq_wr_callback().set_inputline(m_mpu, Z180_INPUT_LINE_DREQ0);
+
+ FLOPPY_CONNECTOR(config, m_wdfdd, mc50_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats);
+}
+
+void roland_mc50_state::mc50(machine_config &config)
+{
+ Z80180(config, m_mpu, 10_MHz_XTAL); // HD64180R1F6
+ m_mpu->set_addrmap(AS_PROGRAM, &roland_mc50_state::mem_map_mc50);
+ m_mpu->set_addrmap(AS_IO, &roland_mc50_state::io_map);
+
+ //mn53015_device &fsk(MN53015(config, "fsk", 10_MHz_XTAL / 2));
+ //fsk.int_callback().set_inputline(m_mpu, Z180_INPUT_LINE_IRQ0);
+
+ WD1772(config, m_wdfdc, 8_MHz_XTAL); // WD1772-02
+ m_wdfdc->intrq_wr_callback().set_inputline(m_mpu, Z180_INPUT_LINE_IRQ1);
+ m_wdfdc->drq_wr_callback().set_inputline(m_mpu, Z180_INPUT_LINE_DREQ0);
+ m_wdfdc->dden_w(0);
+
+ FLOPPY_CONNECTOR(config, m_wdfdd, mc50_floppies, "35dd", floppy_image_device::default_mfm_floppy_formats);
+
+ // TODO: LCD unit (EA-D20225PX-1)
+}
+
+void roland_mc50_state::mc50mk2(machine_config &config)
+{
+ mc50(config);
+
+ //config.device_remove("wdfdc");
+ //HD63266(config, m_hdfdc, 16_MHz_XTAL); // HD63266F
+}
+
+ROM_START(mc300)
+ ROM_REGION(0x2000, "mpurom", 0)
+ ROM_SYSTEM_BIOS(0, "v102", "Version 1.02")
+ ROMX_LOAD("osv1.02-27c64.bin", 0x0000, 0x2000, CRC(a509d5b2) SHA1(d5b23aa2514610d3a5b3f33bdf4479fdb8dc91bd), ROM_BIOS(0))
+ ROM_SYSTEM_BIOS(1, "v101", "Version 1.01")
+ ROMX_LOAD("osv1.01-27c64.bin", 0x0000, 0x2000, CRC(459fd2a1) SHA1(5cea936807c80945ac39d0e7ecc63d3a2b968664), ROM_BIOS(1))
+ROM_END
+
+ROM_START(mc50)
+ ROM_REGION(0x80000, "mpurom", 0)
+ ROM_LOAD("mc50_mk1.ic9", 0x00000, 0x80000, CRC(322b5f73) SHA1(f5cb5738f03c51d7019a661ac660ecea56b44350))
+ROM_END
+
+ROM_START(mc50mk2)
+ ROM_REGION(0x80000, "mpurom", 0)
+ ROM_LOAD("mc50_mkii-firmware-v.0060.ic7", 0x00000, 0x80000, CRC(a428e378) SHA1(ac411c33ef79cf9ae51c5d5dbb1ed9ea5839db3e))
+ROM_END
+
+} // anonymous namespace
+
+
+SYST(1988, mc300, 0, 0, mc300, mc50, roland_mc50_state, empty_init, "Roland", "MC-300 Micro Composer", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
+SYST(1990, mc50, 0, 0, mc50, mc50, roland_mc50_state, empty_init, "Roland", "MC-50 Micro Composer", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
+SYST(1992, mc50mk2, 0, 0, mc50mk2, mc50, roland_mc50_state, empty_init, "Roland", "MC-50mkII Micro Composer", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)