diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index 02cd26fcb45..2b15464d324 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -4474,6 +4474,7 @@ files { MAME_DIR .. "src/mame/drivers/ympsr40.cpp", MAME_DIR .. "src/mame/drivers/ympsr60.cpp", MAME_DIR .. "src/mame/drivers/ympsr340.cpp", + MAME_DIR .. "src/mame/drivers/ymrx15.cpp", MAME_DIR .. "src/mame/drivers/ymsy35.cpp", MAME_DIR .. "src/mame/drivers/ymtx81z.cpp", MAME_DIR .. "src/mame/drivers/ymvl70.cpp", diff --git a/src/emu/xtal.cpp b/src/emu/xtal.cpp index f36d0fe8fc2..14ec72a2717 100644 --- a/src/emu/xtal.cpp +++ b/src/emu/xtal.cpp @@ -80,10 +80,12 @@ const double XTAL::known_xtals[] = { 2'000'000, /* 2_MHz_XTAL - */ 2'012'160, /* 2.01216_MHz_XTAL Cidelsa Draco sound board */ 2'097'152, /* 2.097152_MHz_XTAL Icatel 1995 - Brazilian public payphone */ + 2'250'000, /* 2.25_MHz_XTAL Resonator - YM2154 on Yamaha PSR-60 & PSR-70 */ 2'376'000, /* 2.376_MHz_XTAL CIT-101 keyboard */ 2'457'600, /* 2.4576_MHz_XTAL Atari ST MFP */ 2'500'000, /* 2.5_MHz_XTAL Janken Man units */ 2'600'000, /* 2.6_MHz_XTAL Sharp PC-1500 */ + 2'700'000, /* 2.7_MHz_XTAL Resonator - YM2154 on Yamaha RX15 */ 2'950'000, /* 2.95_MHz_XTAL Playmatic MPU-C, MPU-III & Sound-3 */ 3'000'000, /* 3_MHz_XTAL Probably only used to drive 68705 or similar MCUs on 80's Taito PCBs */ 3'072'000, /* 3.072_MHz_XTAL INS 8520 input clock rate */ diff --git a/src/mame/drivers/ympsr60.cpp b/src/mame/drivers/ympsr60.cpp index a5c1d010f38..1173d400a42 100644 --- a/src/mame/drivers/ympsr60.cpp +++ b/src/mame/drivers/ympsr60.cpp @@ -683,7 +683,7 @@ void psr60_state::psr_common(machine_config &config) m_ym3533->add_route(1, m_rmixer, 0.22); m_ym3533->add_route(1, m_ic204a, 1.0); // routed to BBD via filters - YM2154(config, m_ryp4, 2250000); + YM2154(config, m_ryp4, 2.25_MHz_XTAL); m_ryp4->irq_handler().set(FUNC(psr60_state::ryp4_irq_w)); m_ryp4->io_read_handler().set(FUNC(psr60_state::ryp4_an_r)); m_ryp4->io_write_handler().set(FUNC(psr60_state::ryp4_out_w)); diff --git a/src/mame/drivers/ymrx15.cpp b/src/mame/drivers/ymrx15.cpp new file mode 100644 index 00000000000..3c0afffad00 --- /dev/null +++ b/src/mame/drivers/ymrx15.cpp @@ -0,0 +1,111 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/**************************************************************************** + + Skeleton driver for Yamaha RX15 drum machine. + +****************************************************************************/ + +#include "emu.h" +#include "cpu/m6800/m6801.h" +#include "sound/ym2154.h" +#include "video/hd44780.h" +#include "emupal.h" +#include "screen.h" +#include "speaker.h" + +namespace { + +class rx15_state : public driver_device +{ +public: + rx15_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_ryp4(*this, "ryp4") + { + } + + void rx15(machine_config &config); + +private: + HD44780_PIXEL_UPDATE(pixel_update); + + void mem_map(address_map &map); + + required_device m_maincpu; + required_device m_ryp4; +}; + + +HD44780_PIXEL_UPDATE(rx15_state::pixel_update) +{ + if (x < 5 && y < 8 && line < 2 && pos < 8) + bitmap.pix(y, (line * 8 + pos) * 6 + x) = state; +} + +void rx15_state::mem_map(address_map &map) +{ + map(0x0000, 0x001f).m(m_maincpu, FUNC(hd6301x_cpu_device::hd6301x_io)); // TODO: internalize + map(0x0040, 0x00ff).ram(); // TODO: internalize + map(0x1000, 0x1000).nopr(); + map(0x2000, 0x207f).rw(m_ryp4, FUNC(ym2154_device::read), FUNC(ym2154_device::write)); + map(0x3000, 0x3001).rw("lcdc", FUNC(hd44780_device::read), FUNC(hd44780_device::write)); + map(0x7800, 0x7fff).ram(); // NVRAM #1? + map(0x8000, 0x87ff).ram(); // NVRAM #2? + map(0xc000, 0xffff).rom().region("firmware", 0); +} + + +static INPUT_PORTS_START(rx15) +INPUT_PORTS_END + +void rx15_state::rx15(machine_config &config) +{ + HD6303X(config, m_maincpu, 4_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &rx15_state::mem_map); + + //NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // M5M5118P-15L (one or both battery-backed?) + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD)); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_screen_update("lcdc", FUNC(hd44780_device::screen_update)); + screen.set_size(6*16, 8*1); + screen.set_visarea_full(); + screen.set_palette("palette"); + + PALETTE(config, "palette", palette_device::MONOCHROME_INVERTED); + + hd44780_device &lcdc(HD44780(config, "lcdc", 0)); + lcdc.set_lcd_size(2, 8); + lcdc.set_pixel_update_cb(FUNC(rx15_state::pixel_update)); + + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + + YM2154(config, m_ryp4, 2.7_MHz_XTAL); + m_ryp4->add_route(0, "lspeaker", 0.50); + m_ryp4->add_route(1, "rspeaker", 0.50); +} + +ROM_START(rx15) + ROM_REGION(0x4000, "firmware", 0) + ROM_LOAD("yamaharx15_v1-0_hn27128ag.bin", 0x0000, 0x4000, CRC(0ca8e3d4) SHA1(d09cdb3686b15603660abec49848ef451005be62)) + + ROM_REGION(0x8000, "ryp4:group0", 0) + ROM_LOAD("ym21901.bin", 0x0000, 0x8000, NO_DUMP) + + ROM_REGION(0x8000, "ryp4:group1", 0) + ROM_LOAD("ym21902.bin", 0x0000, 0x8000, NO_DUMP) + + ROM_REGION(0x8000, "ryp4:group2", 0) + ROM_LOAD("ym21903.bin", 0x0000, 0x8000, NO_DUMP) + + ROM_REGION(0x8000, "ryp4:group3", 0) + ROM_LOAD("ym21907.bin", 0x0000, 0x8000, NO_DUMP) +ROM_END + +} // anonymous namespace + +SYST(1984, rx15, 0, 0, rx15, rx15, rx15_state, empty_init, "Yamaha", "RX15 Digital Rhythm Programmer", MACHINE_IS_SKELETON) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 853b9d7cb67..8dab36b88f8 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -43709,6 +43709,9 @@ psr70 // 1985 PSR-70 @source:ympsr340.cpp psr340 // 1999 PSR-340 +@source:ymrx15.cpp +rx15 // + @source:ymsy35.cpp sy35 // diff --git a/src/mame/mess.flt b/src/mame/mess.flt index 7c83c64ce25..01c500ba257 100644 --- a/src/mame/mess.flt +++ b/src/mame/mess.flt @@ -1212,6 +1212,7 @@ ympsr16.cpp ympsr40.cpp ympsr60.cpp ympsr340.cpp +ymrx15.cpp ymsy35.cpp ymtx81z.cpp ymvl70.cpp