summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2018-03-17 09:26:34 +0100
committer Dirk Best <mail@dirk-best.de>2018-03-17 09:26:34 +0100
commit97b3e3deebbb1e15aedffd6f77b06bcf33d68e50 (patch)
tree7c2b6d87688500d53a74c23cda7af9336c9d9f0d
parent3ffd6b839facbf554ffd1a8f52853f6cea518178 (diff)
rz1: Hook up uPD934G
-rw-r--r--src/mame/drivers/rz1.cpp47
1 files changed, 43 insertions, 4 deletions
diff --git a/src/mame/drivers/rz1.cpp b/src/mame/drivers/rz1.cpp
index 0b60bf84240..1e7934c2030 100644
--- a/src/mame/drivers/rz1.cpp
+++ b/src/mame/drivers/rz1.cpp
@@ -27,6 +27,8 @@
#include "screen.h"
#include "cpu/upd7810/upd7811.h"
#include "video/hd44780.h"
+#include "sound/upd934g.h"
+#include "speaker.h"
//**************************************************************************
@@ -40,6 +42,8 @@ public:
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_hd44780(*this, "hd44780"),
+ m_pg{ {*this, "upd934g_c"}, {*this, "upd934g_b"} },
+ m_samples{ {*this, "samples_a"}, {*this, "samples_b"}},
m_keys(*this, "kc%u", 0), m_key_select(0),
m_port_b(0xff)
{ }
@@ -55,6 +59,8 @@ protected:
private:
required_device<upd7811_device> m_maincpu;
required_device<hd44780_device> m_hd44780;
+ required_device<upd934g_device> m_pg[2];
+ required_memory_region m_samples[2];
required_ioport_array<8> m_keys;
void map(address_map &map);
@@ -64,7 +70,9 @@ private:
DECLARE_READ8_MEMBER(port_c_r);
DECLARE_WRITE8_MEMBER(port_c_w);
+ DECLARE_READ8_MEMBER(upd934g_c_data_r);
DECLARE_WRITE8_MEMBER(upd934g_c_w);
+ DECLARE_READ8_MEMBER(upd934g_b_data_r);
DECLARE_WRITE8_MEMBER(upd934g_b_w);
DECLARE_READ8_MEMBER(key_r);
DECLARE_WRITE8_MEMBER(leds_w);
@@ -173,14 +181,35 @@ INPUT_PORTS_END
// MACHINE EMULATION
//**************************************************************************
+READ8_MEMBER( rz1_state::upd934g_c_data_r )
+{
+ if (offset < 0x8000)
+ return m_samples[1]->base()[offset];
+ else
+ {
+ if (offset < 0xc000)
+ return m_maincpu->space(AS_PROGRAM).read_byte(offset + 0x2000);
+ else
+ return 0;
+ }
+}
+
+READ8_MEMBER( rz1_state::upd934g_b_data_r )
+{
+ if (offset < 0x8000)
+ return m_samples[0]->base()[offset];
+ else
+ return 0;
+}
+
WRITE8_MEMBER( rz1_state::upd934g_c_w )
{
- logerror("upd934g_c_w: %02x = %02x\n", offset >> 8, (data >> 2) & 0x0f);
+ m_pg[0]->write(space, offset >> 8, data);
}
WRITE8_MEMBER( rz1_state::upd934g_b_w )
{
- logerror("upd934g_b_w: %02x = %02x\n", offset >> 8, (data >> 2) & 0x0f);
+ m_pg[1]->write(space, offset >> 8, data);
}
WRITE8_MEMBER( rz1_state::port_a_w )
@@ -277,6 +306,14 @@ MACHINE_CONFIG_START( rz1_state::rz1 )
MCFG_HD44780_ADD("hd44780")
MCFG_HD44780_LCD_SIZE(1, 16)
+
+ MCFG_SPEAKER_STANDARD_MONO("speaker")
+ MCFG_SOUND_ADD("upd934g_c", UPD934G, 1333000)
+ MCFG_UPD934G_DATA_CB(READ8(rz1_state, upd934g_c_data_r))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
+ MCFG_SOUND_ADD("upd934g_b", UPD934G, 1280000)
+ MCFG_UPD934G_DATA_CB(READ8(rz1_state, upd934g_b_data_r))
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0)
MACHINE_CONFIG_END
@@ -291,9 +328,11 @@ ROM_START( rz1 )
ROM_REGION(0x4000, "program", 0)
ROM_LOAD("program.bin", 0x0000, 0x4000, CRC(b44b2652) SHA1(b77f8daece9adb177b6ce1ef518fc3238b8c0a9c))
- ROM_REGION(0x10000, "samples", 0)
+ ROM_REGION(0x8000, "samples_a", 0)
ROM_LOAD("sound_a.cm5", 0x0000, 0x8000, CRC(c643ff24) SHA1(e886314d22a9a5473bfa2cb237ecafcf0daedfc1)) // HN613256P
- ROM_LOAD("sound_b.cm6", 0x8000, 0x8000, CRC(ee5b703e) SHA1(cbf2e92c68901f236678d704e9e695a5c84ff49e)) // HN613256P
+
+ ROM_REGION(0x8000, "samples_b", 0)
+ ROM_LOAD("sound_b.cm6", 0x0000, 0x8000, CRC(ee5b703e) SHA1(cbf2e92c68901f236678d704e9e695a5c84ff49e)) // HN613256P
ROM_END