From b65fa9b666df1f168997f7ea8f18524937bf6600 Mon Sep 17 00:00:00 2001 From: AJR Date: Wed, 14 Sep 2022 20:18:54 -0400 Subject: [PATCH] New machines marked as NOT_WORKING ---------------------------------- Yamaha PSR-500 [Phil Bennett] --- src/mame/mame.lst | 3 ++ src/mame/mess.flt | 1 + src/mame/yamaha/ympsr400.cpp | 97 ++++++++++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 src/mame/yamaha/ympsr400.cpp diff --git a/src/mame/mame.lst b/src/mame/mame.lst index ca81d74786e..090ccdbc090 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -44436,6 +44436,9 @@ psr70 // 1985 PSR-70 @source:yamaha/ympsr340.cpp psr340 // 1999 PSR-340 +@source:yamaha/ympsr400.cpp +psr500 // 1991 PSR-500 + @source:yamaha/ymqy70.cpp qy70 // 1997 QY-70 diff --git a/src/mame/mess.flt b/src/mame/mess.flt index f31e790b972..fd6f5e34a7b 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -1259,6 +1259,7 @@ yamaha/ymmu80.cpp yamaha/ympsr16.cpp yamaha/ympsr340.cpp yamaha/ympsr40.cpp +yamaha/ympsr400.cpp yamaha/ympsr60.cpp yamaha/ymqy70.cpp yamaha/ymrx15.cpp diff --git a/src/mame/yamaha/ympsr400.cpp b/src/mame/yamaha/ympsr400.cpp new file mode 100644 index 00000000000..b6b07c05c50 --- /dev/null +++ b/src/mame/yamaha/ympsr400.cpp @@ -0,0 +1,97 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/******************************************************************************* + + Skeleton driver for Yamaha PSR-400 & PSR-500 PortaTone keyboards. + +*******************************************************************************/ + +#include "emu.h" +#include "cpu/m6805/m6805.h" +#include "cpu/mn1880/mn1880.h" + +namespace { + +class psr400_state : public driver_device +{ +public: + psr400_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_mpscpu(*this, "mpscpu") + { + } + + void psr500(machine_config &config); + +protected: + virtual void driver_start() override; + +private: + void program_map(address_map &map); + void data_map(address_map &map); + + required_device m_maincpu; + required_device m_mpscpu; +}; + +void psr400_state::program_map(address_map &map) +{ + // TODO: 2 MB external program memory space using MMU + map(0x0000, 0xffff).rom().region("program", 0); +} + +void psr400_state::data_map(address_map &map) +{ + // TODO: 2 MB external data memory space using MMU + map(0x0100, 0x1fff).ram(); +} + +static INPUT_PORTS_START(psr500) +INPUT_PORTS_END + +void psr400_state::psr500(machine_config &config) +{ + MN1880(config, m_maincpu, 10_MHz_XTAL); // MN18801A (also has 500 kHz secondary resonator) + m_maincpu->set_addrmap(AS_PROGRAM, &psr400_state::program_map); + m_maincpu->set_addrmap(AS_DATA, &psr400_state::data_map); + + HD63705(config, m_mpscpu, 8_MHz_XTAL).set_disable(); // HD63B05V0D73P (mislabeled HD63B50 on schematic) + + //YMW258F(config, "gew8", 9.4_MHz_XTAL); + //YM3413(config, "ldsp"); +} + +ROM_START(psr500) + ROM_REGION(0x200000, "program", 0) + ROM_LOAD("xj920c0.ic4", 0x000000, 0x040000, CRC(bd45d962) SHA1(fe46ceae5584b56e36f31f27bedd9e7d578eb35b)) + ROM_RELOAD(0x040000, 0x040000) + ROM_RELOAD(0x080000, 0x040000) + ROM_RELOAD(0x0c0000, 0x040000) + ROM_LOAD("xj921b0.ic5", 0x100000, 0x100000, CRC(dd1a8afc) SHA1(5d5b47577faeed165f0bd73283f148d112e4d1e9)) + + ROM_REGION(0x100000, "waverom", 0) + ROM_LOAD("xj426b0.ic3", 0x000000, 0x100000, CRC(ef566734) SHA1(864f5689dbaa82bd8a1be4e53bdb21ec71be03cc)) + + ROM_REGION(0x1000, "mpscpu", 0) + ROM_LOAD("xj450a00.ic1", 0x0000, 0x1000, NO_DUMP) +ROM_END + +void psr400_state::driver_start() +{ + memory_region *region = memregion("program"); + u8 *program = static_cast(region->base()); + std::vector buf(0x20000); + + // A8-A14 & A16 are scrambled + for (u32 offset = 0; offset < region->bytes(); ) + { + std::copy(&program[offset], &program[offset + 0x20000], buf.begin()); + for (int blocks = 0x200; blocks-- > 0; offset += 0x100) + std::copy_n(&buf[bitswap<9>(offset, 9, 15, 10, 11, 8, 14, 16, 13, 12) << 8], 0x100, &program[offset]); + } +} + +} // anonymous namespace + +SYST(1991, psr500, 0, 0, psr500, psr500, psr400_state, empty_init, "Yamaha", "PSR-500", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)