diff options
author | AJR <ajrhacker@users.noreply.github.com> | 2020-02-28 07:50:37 -0500 |
---|---|---|
committer | AJR <ajrhacker@users.noreply.github.com> | 2020-02-28 07:51:39 -0500 |
commit | 7514b42c5415390789c3f2b612e59c008c240846 (patch) | |
tree | c3c159f9e5cc3915dbd2131074b1b2fa53a08eca | |
parent | 0e1c4039e19c765d05ef4fb689c737d5ed8e7c5b (diff) |
New machines marked as NOT_WORKING
----------------------------------
Polysix Programmable Polyphonic Synthesizer [DBWBP]
Poly-61 Programmable Polyphonic Synthesizer [DBWBP]
-rw-r--r-- | scripts/target/mame/mess.lua | 1 | ||||
-rw-r--r-- | src/mame/drivers/polysix.cpp | 190 | ||||
-rw-r--r-- | src/mame/mame.lst | 4 | ||||
-rw-r--r-- | src/mame/mess.flt | 1 |
4 files changed, 196 insertions, 0 deletions
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index c051f8bff9f..ba1bedf33ba 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -4278,6 +4278,7 @@ files { MAME_DIR .. "src/mame/drivers/plan80.cpp", MAME_DIR .. "src/mame/drivers/pm68k.cpp", MAME_DIR .. "src/mame/drivers/pockchal.cpp", + MAME_DIR .. "src/mame/drivers/polysix.cpp", MAME_DIR .. "src/mame/drivers/powerstack.cpp", MAME_DIR .. "src/mame/drivers/proteus3.cpp", MAME_DIR .. "src/mame/drivers/pt68k4.cpp", diff --git a/src/mame/drivers/polysix.cpp b/src/mame/drivers/polysix.cpp new file mode 100644 index 00000000000..0515a6cfa19 --- /dev/null +++ b/src/mame/drivers/polysix.cpp @@ -0,0 +1,190 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/**************************************************************************** + + Skeleton driver for Korg Polysix (PS-6) & Poly-61 synthesizers. + +****************************************************************************/ + +#include "emu.h" +#include "cpu/mcs48/mcs48.h" +#include "machine/i8255.h" +#include "machine/nvram.h" +#include "machine/pit8253.h" + +class ps6_base_state : public driver_device +{ +protected: + ps6_base_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_progmcu(*this, "progmcu") + , m_keymcu(*this, "keymcu") + { + } + + virtual void machine_start() override; + + required_device<mcs48_cpu_device> m_progmcu; + required_device<mcs48_cpu_device> m_keymcu; + std::unique_ptr<u8[]> m_nvram_ptr; +}; + +class polysix_state : public ps6_base_state +{ +public: + polysix_state(const machine_config &mconfig, device_type type, const char *tag) + : ps6_base_state(mconfig, type, tag) + { + } + + void polysix(machine_config &config); + +private: + u8 ext_r(offs_t offset); + void ext_w(offs_t offset, u8 data); + + void prog_ext_map(address_map &map); +}; + +class poly61_state : public ps6_base_state +{ +public: + poly61_state(const machine_config &mconfig, device_type type, const char *tag) + : ps6_base_state(mconfig, type, tag) + , m_ppi(*this, "ppi%u", 0U) + , m_pit(*this, "pit%u", 0U) + { + } + + void poly61(machine_config &config); + +private: + u8 ext_r(offs_t offset); + void ext_w(offs_t offset, u8 data); + + void prog_ext_map(address_map &map); + + required_device_array<i8255_device, 3> m_ppi; + required_device_array<pit8253_device, 4> m_pit; +}; + +void ps6_base_state::machine_start() +{ + m_nvram_ptr = make_unique_clear<u8[]>(0x400); + subdevice<nvram_device>("nvram")->set_base(&m_nvram_ptr[0], 0x400); +} + +u8 polysix_state::ext_r(offs_t offset) +{ + if (BIT(m_progmcu->p1_r(), 7)) + { + u8 p2 = m_progmcu->p2_r(); + return m_nvram_ptr[(p2 & 1) | (offset << 1) | (p2 & 2) << 8] | 0xf0; + } + + return 0xff; +} + +void polysix_state::ext_w(offs_t offset, u8 data) +{ + if (BIT(m_progmcu->p1_r(), 7)) + { + u8 p2 = m_progmcu->p2_r(); + m_nvram_ptr[(p2 & 1) | (offset << 1) | (p2 & 2) << 8] = data & 0x0f; + } +} + +u8 poly61_state::ext_r(offs_t offset) +{ + if (!BIT(m_progmcu->p2_r(), 5)) + { + u8 p1 = m_progmcu->p1_r(); + return m_nvram_ptr[(p1 & 1) | (offset << 1) | (p1 & 2) << 8] | 0xf0; + } + + return 0xff; +} + +void poly61_state::ext_w(offs_t offset, u8 data) +{ + u8 p2 = m_progmcu->p2_r(); + + if (!BIT(p2, 5)) + { + u8 p1 = m_progmcu->p1_r(); + m_nvram_ptr[(p1 & 1) | (offset << 1) | (p1 & 2) << 8] = data & 0x0f; + } + + if (!BIT(p2, 6)) + { + if (!BIT(offset, 5) && (offset & 0x0c) != 0x0c) + m_ppi[(offset & 0x0c) >> 2]->write(offset & 0x03, data); + if (!BIT(offset, 6)) + m_pit[(offset & 0x0c) >> 2]->write(offset & 0x03, data); + } +} + +void polysix_state::prog_ext_map(address_map &map) +{ + map(0x00, 0xff).rw(FUNC(polysix_state::ext_r), FUNC(polysix_state::ext_w)); +} + +void poly61_state::prog_ext_map(address_map &map) +{ + map(0x00, 0xff).rw(FUNC(poly61_state::ext_r), FUNC(poly61_state::ext_w)); +} + +static INPUT_PORTS_START(polysix) +INPUT_PORTS_END + +void polysix_state::polysix(machine_config &config) +{ + I8048(config, m_progmcu, 6_MHz_XTAL); + m_progmcu->set_addrmap(AS_IO, &polysix_state::prog_ext_map); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // TC5514APL-3 + battery + + I8049(config, m_keymcu, 6_MHz_XTAL); +} + +void poly61_state::poly61(machine_config &config) +{ + I8049(config, m_progmcu, 6_MHz_XTAL); + m_progmcu->set_addrmap(AS_IO, &poly61_state::prog_ext_map); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // M58981P-45 + battery + + I8255(config, m_ppi[0]); + I8255(config, m_ppi[1]); + I8255(config, m_ppi[2]); + + PIT8253(config, m_pit[0]); + PIT8253(config, m_pit[1]); + PIT8253(config, m_pit[2]); + PIT8253(config, m_pit[3]); + + I8049(config, m_keymcu, 6_MHz_XTAL); +} + +ROM_START(polysix) + ROM_REGION(0x400, "progmcu", 0) + ROM_LOAD("d8048c-345.bin", 0x000, 0x400, CRC(130fb945) SHA1(feaf59d7694de9c3f8009d883a250039f219d046)) + + ROM_REGION(0x800, "keymcu", 0) + ROM_LOAD("d8049c-217.bin", 0x000, 0x800, CRC(246d7767) SHA1(5b608c750e7fe7832070a53a74df416fd132ecb7)) +ROM_END + +ROM_START(poly61) + ROM_REGION(0x800, "progmcu", 0) + ROM_LOAD("d8049c-337.bin", 0x000, 0x800, CRC(51edf723) SHA1(9001687b25a841b7a5f78bbae03745f3e995fa83)) + + ROM_REGION(0x800, "keymcu", 0) + ROM_DEFAULT_BIOS("new") + ROM_SYSTEM_BIOS(0, "old", "Older MCU") + ROMX_LOAD("d8049c-217.bin", 0x000, 0x800, CRC(246d7767) SHA1(5b608c750e7fe7832070a53a74df416fd132ecb7), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "new", "Newer MCU") + ROMX_LOAD("d8049c-384.bin", 0x000, 0x800, CRC(bbc421b5) SHA1(be683cdce5cbf867c5b8a52802288c1296f5fbd1), ROM_BIOS(1)) +ROM_END + +SYST(1980, polysix, 0, 0, polysix, polysix, polysix_state, empty_init, "Korg", "Polysix Programmable Polyphonic Synthesizer", MACHINE_IS_SKELETON) +SYST(1982, poly61, 0, 0, poly61, polysix, poly61_state, empty_init, "Korg", "Poly-61 Programmable Polyphonic Synthesizer", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 6897a3ee134..b258cf4cd17 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -33707,6 +33707,10 @@ polyplay // polyplay2 // polyplay2c // +@source:polysix.cpp +polysix // +poly61 // + @source:pong.cpp breakout // (c) 1976 Atari pong // (c) 1972 Atari diff --git a/src/mame/mess.flt b/src/mame/mess.flt index bfcaf83c253..e52f9e0d30c 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -688,6 +688,7 @@ pokemini.cpp poly.cpp poly88.cpp poly880.cpp +polysix.cpp powerstack.cpp pp.cpp pp01.cpp |