diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 6fcfeef2110..3a9506798d3 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -2629,6 +2629,7 @@ createMESSProjects(_target, _subtarget, "korg") files { MAME_DIR .. "src/mame/drivers/korgdss1.cpp", MAME_DIR .. "src/mame/drivers/korgm1.cpp", + MAME_DIR .. "src/mame/drivers/poly800.cpp", MAME_DIR .. "src/mame/drivers/polysix.cpp", } diff --git a/src/mame/drivers/poly800.cpp b/src/mame/drivers/poly800.cpp new file mode 100644 index 00000000000..98fc34b994f --- /dev/null +++ b/src/mame/drivers/poly800.cpp @@ -0,0 +1,148 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/**************************************************************************** + + Skeleton driver for Korg Poly-800 synthesizer. + +****************************************************************************/ + +#include "emu.h" +#include "bus/midi/midi.h" +#include "cpu/i8085/i8085.h" +#include "machine/6850acia.h" +#include "machine/i8155.h" +#include "machine/nvram.h" +//#include "sound/msm5232.h" + +class poly800_state : public driver_device +{ +public: + poly800_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + { + } + + void poly800(machine_config &config); + void poly800mdk(machine_config &config); + +protected: + void common_map(address_map &map); + +private: + void mem_map(address_map &map); + void mdk_map(address_map &map); + void io_map(address_map &map); + +protected: + required_device m_maincpu; +}; + +class poly800ii_state : public poly800_state +{ +public: + poly800ii_state(const machine_config &mconfig, device_type type, const char *tag) + : poly800_state(mconfig, type, tag) + { + } + + void poly800ii(machine_config &config); + +private: + void mem_map(address_map &map); +}; + +void poly800_state::common_map(address_map &map) +{ + map(0x4000, 0x40ff).mirror(0x1f00).rw("pio", FUNC(i8155_device::memory_r), FUNC(i8155_device::memory_w)); + map(0xe000, 0xe001).mirror(0x1f7e).w("acia", FUNC(acia6850_device::write)); + map(0xe080, 0xe081).mirror(0x1f7e).r("acia", FUNC(acia6850_device::read)); +} + +void poly800_state::mem_map(address_map &map) +{ + map(0x0000, 0x1fff).rom().region("klm596", 0); + map(0x2000, 0x27ff).mirror(0x1800).ram().share("nvram"); + common_map(map); +} + +void poly800_state::mdk_map(address_map &map) +{ + map(0x0000, 0x2fff).rom().region("klm596", 0); + map(0x3000, 0x37ff).mirror(0x0800).ram().share("nvram"); + common_map(map); +} + +void poly800ii_state::mem_map(address_map &map) +{ + map(0x0000, 0x27ff).rom().region("klm779", 0); + map(0x2800, 0x37ff).ram().share("nvram"); + common_map(map); +} + +void poly800_state::io_map(address_map &map) +{ + map(0x40, 0x47).mirror(0x18).rw("pio", FUNC(i8155_device::io_r), FUNC(i8155_device::io_w)); +} + +static INPUT_PORTS_START(poly800) +INPUT_PORTS_END + +void poly800_state::poly800(machine_config &config) +{ + I8085A(config, m_maincpu, 5_MHz_XTAL); // MSM80C85ARS + m_maincpu->set_addrmap(AS_PROGRAM, &poly800_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &poly800_state::io_map); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // HM6116LP-4 + battery + + i8155_device &pio(I8155(config, "pio", 5_MHz_XTAL / 2)); // MSM81C55RS + pio.out_to_callback().set("acia", FUNC(acia6850_device::write_rxc)); + pio.out_to_callback().append("acia", FUNC(acia6850_device::write_txc)); + + acia6850_device &acia(ACIA6850(config, "acia")); // HD63B50P + acia.txd_handler().set("midi_out", FUNC(midi_port_device::write_txd)); + acia.irq_handler().set_inputline(m_maincpu, I8085_RST65_LINE); + + //MSM5232(config, "msm"); // MSM-5232RS + + MIDI_PORT(config, "midi_in", midiin_slot, "midiin").rxd_handler().set("acia", FUNC(acia6850_device::write_rxd)); + MIDI_PORT(config, "midi_out", midiout_slot, "midiout"); +} + +void poly800_state::poly800mdk(machine_config &config) +{ + poly800(config); + m_maincpu->set_addrmap(AS_PROGRAM, &poly800_state::mdk_map); +} + +void poly800ii_state::poly800ii(machine_config &config) +{ + poly800(config); + m_maincpu->set_addrmap(AS_PROGRAM, &poly800ii_state::mem_map); + + // NVRAM is uPD4464C-15 + battery with A12 tied to GND +} + +ROM_START(poly800) + ROM_REGION(0x2002, "klm596", 0) + ROM_SYSTEM_BIOS(0, "v36", "Version 36") + ROM_SYSTEM_BIOS(1, "v30", "Version 30") + ROMX_LOAD("830236.ic22", 0x0000, 0x2000, CRC(16cd416d) SHA1(a1f6f5be4f70b47ea4d1dccd723179c9991f4a92), ROM_BIOS(0)) + ROMX_LOAD("830230.ic22", 0x0000, 0x2002, CRC(1ba81f55) SHA1(94a0d45680d107ab4d1b542e8378a599ded36f06), ROM_BIOS(1)) + // Where did the extra 2 bytes at the end come from? +ROM_END + +ROM_START(poly800mdk) + ROM_REGION(0x4000, "klm596", 0) + ROM_LOAD("mdk.ic22", 0x0000, 0x4000, CRC(a25ab16a) SHA1(a9294bf90a8fa81dd825bcbf9fcd3b5014045936)) // 27C128 +ROM_END + +ROM_START(poly800ii) + ROM_REGION(0x4000, "klm779", 0) + ROM_LOAD("851005.ic24", 0x0000, 0x4000, CRC(09ae4fc5) SHA1(1e8a418919ef61334fb55aefa8aaebcaefc28ebd)) // 27C128 (last 3/8ths not addressable) +ROM_END + +SYST(1984, poly800, 0, 0, poly800, poly800, poly800_state, empty_init, "Korg", "Poly-800 Programmable Polyphonic Synthesizer", MACHINE_IS_SKELETON) +SYST(1984, poly800mdk, 0, 0, poly800mdk, poly800, poly800_state, empty_init, "Korg", "Poly-800 Programmable Polyphonic Synthesizer with MIDI Dump Kit", MACHINE_IS_SKELETON) +SYST(1986, poly800ii, 0, 0, poly800ii, poly800, poly800ii_state, empty_init, "Korg", "Poly-800II Programmable Polyphonic Synthesizer", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 183db161d2c..7225cf01f2e 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -33711,6 +33711,11 @@ polydev // Poly Development poly88 // poly8813 // +@source:poly800.cpp +poly800 // +poly800ii // +poly800mdk // + @source:poly880.cpp poly880 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index b1b1fc1c7f5..51027a25322 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -688,6 +688,7 @@ poisk1.cpp pokemini.cpp poly.cpp poly88.cpp +poly800.cpp poly880.cpp polysix.cpp powerstack.cpp