From b2e2405c7c6e462f04cccf476e71e0f2757c1c9c Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 14 Mar 2020 23:30:00 -0400 Subject: New machines marked as NOT_WORKING ---------------------------------- Roland TR-707 Rhythm Composer [DBWBP] Roland TR-727 Rhythm Composer [DBWBP] --- scripts/target/mame/mess.lua | 1 + src/emu/xtal.cpp | 1 + src/mame/drivers/roland_tr707.cpp | 198 ++++++++++++++++++++++++++++++++++++++ src/mame/mame.lst | 4 + src/mame/mess.flt | 1 + 5 files changed, 205 insertions(+) create mode 100644 src/mame/drivers/roland_tr707.cpp diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index f79246aca45..4444af414f7 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3249,6 +3249,7 @@ files { MAME_DIR .. "src/mame/drivers/roland_sc55.cpp", MAME_DIR .. "src/mame/drivers/roland_tb303.cpp", MAME_DIR .. "src/mame/drivers/roland_tr606.cpp", + MAME_DIR .. "src/mame/drivers/roland_tr707.cpp", MAME_DIR .. "src/mame/machine/pg200.cpp", } diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index 120f832ea53..65c047d5f01 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -71,6 +71,7 @@ const double XTAL::known_xtals[] = { 1'008'000, /* 1.008_MHz_XTAL Acorn Microcomputer (System 1) */ 1'056'000, /* 1.056_MHz_XTAL Resonator - OKI M6295 on Trio The Punch h/w */ 1'294'400, /* 1.2944_MHz_XTAL BBN BitGraph PSG */ + 1'600'000, /* 1.6_MHz_XTAL Resonator - Roland TR-707 */ 1'689'600, /* 1.6896_MHz_XTAL Diablo 1355WP Printer */ 1'750'000, /* 1.75_MHz_XTAL RCA CDP1861 */ 1'797'100, /* 1.7971_MHz_XTAL SWTPC 6800 (with MIKBUG) */ diff --git a/src/mame/drivers/roland_tr707.cpp b/src/mame/drivers/roland_tr707.cpp new file mode 100644 index 00000000000..bc9f5b0d3d2 --- /dev/null +++ b/src/mame/drivers/roland_tr707.cpp @@ -0,0 +1,198 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/**************************************************************************** + + Skeleton driver for Roland TR-707/727 drum machines. + + From the Service Notes: “The differences between two models [TR-707 and + TR-727] are sound data, component values in several audio stages and a + couple of pin connections at IC30 of Voice board. Both models derive all + rhythm sounds from PCM-encoded samples of real sounds stored in ROM.” + +****************************************************************************/ + +#include "emu.h" +#include "bus/generic/carts.h" +#include "bus/generic/slot.h" +//#include "bus/midi/midi.h" +#include "cpu/m6800/m6801.h" +#include "machine/nvram.h" +//#include "video/hd61603.h" + +class roland_tr707_state : public driver_device +{ +public: + roland_tr707_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_key_switches(*this, "KEY%u", 0U) + , m_misc_select(0xff) + { + } + + void tr707(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + void misc_select_w(u8 data); + u8 key_scan_r(); + void leds_w(u8 data); + void accent_level_w(u8 data); + void ga_trigger_w(offs_t offset, u8 data); + void voice_select_w(u8 data); + + void mem_map(address_map &map); + + required_device m_maincpu; + required_ioport_array<4> m_key_switches; + + u8 m_misc_select; +}; + +void roland_tr707_state::machine_start() +{ + save_item(NAME(m_misc_select)); +} + + +void roland_tr707_state::misc_select_w(u8 data) +{ + m_misc_select = data; +} + +u8 roland_tr707_state::key_scan_r() +{ + u8 data = 0xff; + + for (int n = 0; n < 4; n++) + if (!BIT(m_misc_select, n)) + data &= m_key_switches[n]->read(); + + return data; +} + +void roland_tr707_state::leds_w(u8 data) +{ +} + +void roland_tr707_state::accent_level_w(u8 data) +{ +} + +void roland_tr707_state::ga_trigger_w(offs_t offset, u8 data) +{ +} + +void roland_tr707_state::voice_select_w(u8 data) +{ +} + +void roland_tr707_state::mem_map(address_map &map) +{ + map(0x0000, 0x001f).m(m_maincpu, FUNC(hd6303x_cpu_device::hd6301x_io)); + map(0x0040, 0x00ff).ram(); // internal RAM + map(0x0800, 0x0800).mirror(0x7ff).r(FUNC(roland_tr707_state::key_scan_r)); + //map(0x1000, 0x1000).mirror(0xfff).rw("lcdd", FUNC(hd61602_device::ready_r), FUNC(hd61602_device::write)); + map(0x2000, 0x27ff).ram().share("nvram1"); + map(0x2800, 0x2fff).ram().share("nvram2"); + map(0x3000, 0x3fff).rw("cartslot", FUNC(generic_slot_device::read_ram), FUNC(generic_slot_device::write_ram)); + map(0x4000, 0x4000).mirror(0xfff).w(FUNC(roland_tr707_state::leds_w)); + map(0x5000, 0x5000).mirror(0xfff).w(FUNC(roland_tr707_state::accent_level_w)); + map(0x6000, 0x6fff).w(FUNC(roland_tr707_state::ga_trigger_w)); + map(0x7000, 0x7000).mirror(0xfff).w(FUNC(roland_tr707_state::voice_select_w)); + map(0x8000, 0xbfff).mirror(0x4000).rom().region("program", 0); +} + + +static INPUT_PORTS_START(tr707) + PORT_START("KEY0") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("1") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("2") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("3") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("4") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("5") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("6") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("7") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("8") + + PORT_START("KEY1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("9") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("10") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("11") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("12") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("13") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("14") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("15") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("16") + + PORT_START("KEY2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Start") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Stop/Cont") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Enter") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Shift") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Pattern Clear") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Scale") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Last Step") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Inst Select") + + PORT_START("KEY3") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Tempo") + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Track") + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Pattern") + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Shuffle") + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Group A") + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Group B") + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Group C") + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Group D") +INPUT_PORTS_END + +void roland_tr707_state::tr707(machine_config &config) +{ + HD6303X(config, m_maincpu, 4_MHz_XTAL); // HD6303XF + m_maincpu->set_addrmap(AS_PROGRAM, &roland_tr707_state::mem_map); + m_maincpu->out_p6_cb().set(FUNC(roland_tr707_state::misc_select_w)); + + NVRAM(config, "nvram1", nvram_device::DEFAULT_ALL_0); // HM6116LP-4 + battery + NVRAM(config, "nvram2", nvram_device::DEFAULT_ALL_0); // HM6116LP-4 + battery + + //HD61602(config, "lcdd"); + + GENERIC_CARTSLOT(config, "cartslot", generic_plain_slot, nullptr, "tr707_cart"); + + //RD63H114(config, "muxsound", 1.6_MHz_XTAL); +} + +ROM_START(tr707) + ROM_REGION(0x4000, "program", 0) + ROM_LOAD("os_rom_firmware.ic13", 0x0000, 0x4000, CRC(3517ea00) SHA1(f5d57a79abf49131bd9832ae4e2dbced914ea523)) // 27128 + + ROM_REGION(0x10000, "voices", 0) // "BD-MT" (IC34) and "HT-TAMB" (IC35) + ROM_LOAD("hn61256p_c71_15179694.ic34", 0x0000, 0x8000, CRC(a196489b) SHA1(fd2bfe67d4d03d2b2134aa7feebe9167c44b1f8d)) + ROM_LOAD("hn61256p_c72_15179695.ic35", 0x8000, 0x8000, CRC(b05302e5) SHA1(5cc866f345906d817147ae2a61bc36d7be926511)) + + ROM_REGION(0x8000, "cymbal1", 0) // "Crash Cymbal" + ROM_LOAD("hn61256p_c73_15179696.ic19", 0x0000, 0x8000, CRC(b0bea07f) SHA1(965e23ad71e1f95d56307fa67272725dff46ba67)) + + ROM_REGION(0x8000, "cymbal2", 0) // "Ride Cymbal" + ROM_LOAD("hn61256p_c74_15179697.ic22", 0x0000, 0x8000, CRC(9411943a) SHA1(6c7c0f002ed66e4ccf182a4538d9bb239623ac43)) +ROM_END + +ROM_START(tr727) + ROM_REGION(0x4000, "program", 0) + ROM_LOAD("osv_1.0_hd4827128.ic13", 0x0000, 0x4000, CRC(49954161) SHA1(8eb033d9729aa84cc3c33b8ce30925ff3c35e70a)) + + ROM_REGION(0x10000, "voices", 0) // "BNG-HTB" (IC34) and "LTB-MC" (IC35) + ROM_LOAD("hn61256p_15179694.ic34", 0x0000, 0x8000, NO_DUMP) + ROM_LOAD("hn61256p_15179695.ic35", 0x8000, 0x8000, NO_DUMP) + + ROM_REGION(0x8000, "cymbal1", 0) // "Quijada" + ROM_LOAD("hn61256p_15179696.ic19", 0x0000, 0x8000, NO_DUMP) + + ROM_REGION(0x8000, "cymbal2", 0) // "Star Chime" + ROM_LOAD("hn61256p_15179697.ic22", 0x0000, 0x8000, NO_DUMP) +ROM_END + +SYST(1985, tr707, 0, 0, tr707, tr707, roland_tr707_state, empty_init, "Roland", "TR-707 Rhythm Composer", MACHINE_IS_SKELETON) +SYST(1985, tr727, 0, 0, tr707, tr707, roland_tr707_state, empty_init, "Roland", "TR-727 Rhythm Composer", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 71f4d924e4c..bc3c4f0487c 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -34605,6 +34605,10 @@ tb303 // Roland @source:roland_tr606.cpp tr606 // Roland +@source:roland_tr707.cpp +tr707 // +tr727 // + @source:rollerg.cpp rollerg // GX999 (c) 1991 (US) rollergj // GX999 (c) 1991 (Japan) diff --git a/src/mame/mess.flt b/src/mame/mess.flt index e53f2593d0d..70fcc7adc86 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -759,6 +759,7 @@ roland_r8.cpp roland_sc55.cpp roland_tb303.cpp roland_tr606.cpp +roland_tr707.cpp rt1715.cpp rvoice.cpp rx78.cpp -- cgit v1.2.3