summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/sound/gew.cpp8
-rw-r--r--src/devices/sound/gew.h1
-rw-r--r--src/devices/sound/gew7.cpp1
-rw-r--r--src/mame/layout/dd9.lay161
-rwxr-xr-xsrc/mame/mame.lst1
-rw-r--r--src/mame/yamaha/ympsr150.cpp89
6 files changed, 260 insertions, 1 deletions
diff --git a/src/devices/sound/gew.cpp b/src/devices/sound/gew.cpp
index 8517f40bc72..3aa7948c612 100644
--- a/src/devices/sound/gew.cpp
+++ b/src/devices/sound/gew.cpp
@@ -434,6 +434,7 @@ void gew_pcm_device::device_start()
save_pointer(STRUCT_MEMBER(m_slots, m_octave), m_voices);
save_pointer(STRUCT_MEMBER(m_slots, m_pitch), m_voices);
save_pointer(STRUCT_MEMBER(m_slots, m_step), m_voices);
+ save_pointer(STRUCT_MEMBER(m_slots, m_reverse), m_voices);
save_pointer(STRUCT_MEMBER(m_slots, m_pan), m_voices);
save_pointer(STRUCT_MEMBER(m_slots, m_total_level), m_voices);
save_pointer(STRUCT_MEMBER(m_slots, m_dest_total_level), m_voices);
@@ -559,6 +560,11 @@ void gew_pcm_device::sound_stream_update(sound_stream &stream, std::vector<read_
int32_t csample = 0;
int32_t fpart = slot.m_offset & ((1 << TL_SHIFT) - 1);
+ if (slot.m_reverse)
+ {
+ spos = slot.m_sample.m_end - spos - 1;
+ }
+
if (slot.m_sample.m_format & 4) // 12-bit linear
{
offs_t adr = slot.m_sample.m_start + (spos >> 1) * 3;
@@ -590,6 +596,8 @@ void gew_pcm_device::sound_stream_update(sound_stream &stream, std::vector<read_
if (slot.m_offset >= (slot.m_sample.m_end << TL_SHIFT))
{
slot.m_offset -= (slot.m_sample.m_end - slot.m_sample.m_loop) << TL_SHIFT;
+ // DD-9 expects the looped silence at the end of some samples to be the same whether reversed or not
+ slot.m_reverse = false;
}
if (spos ^ (slot.m_offset >> TL_SHIFT))
diff --git a/src/devices/sound/gew.h b/src/devices/sound/gew.h
index a162ec69650..75a3f57f51f 100644
--- a/src/devices/sound/gew.h
+++ b/src/devices/sound/gew.h
@@ -89,6 +89,7 @@ protected:
uint8_t m_octave = 0;
uint16_t m_pitch = 0;
uint32_t m_step = 0;
+ bool m_reverse = false;
uint32_t m_pan = 0;
uint32_t m_total_level = 0;
uint32_t m_dest_total_level = 0;
diff --git a/src/devices/sound/gew7.cpp b/src/devices/sound/gew7.cpp
index 38d97f169a4..52859f86ee4 100644
--- a/src/devices/sound/gew7.cpp
+++ b/src/devices/sound/gew7.cpp
@@ -198,6 +198,7 @@ void gew7_pcm_device::write_hi(offs_t offset, uint8_t data)
case 3:
slot.m_vibrato = data & 7;
slot.m_tremolo = (data >> 3) & 7;
+ slot.m_reverse = data >> 7;
lfo_compute_step(slot.m_pitch_lfo, slot.m_lfo_frequency, slot.m_vibrato, 0);
lfo_compute_step(slot.m_amplitude_lfo, slot.m_lfo_frequency, slot.m_tremolo, 1);
break;
diff --git a/src/mame/layout/dd9.lay b/src/mame/layout/dd9.lay
new file mode 100644
index 00000000000..7e8f0ccce86
--- /dev/null
+++ b/src/mame/layout/dd9.lay
@@ -0,0 +1,161 @@
+<?xml version="1.0"?>
+<!--
+license:CC0-1.0
+-->
+<mamelayout version="2">
+ <!-- general grey backdrop -->
+ <element name="greyback">
+ <rect>
+ <color red="0.1" green="0.1" blue="0.1" />
+ </rect>
+ </element>
+
+ <element name="border">
+ <rect>
+ <color red="0.05" green="0.05" blue="0.05" />
+ </rect>
+ </element>
+
+ <element name="black">
+ <rect>
+ <color red="0" green="0" blue="0" />
+ </rect>
+ </element>
+
+ <element name="white">
+ <rect />
+ </element>
+
+ <!-- text elements -->
+ <element name="volume"><text string="VOLUME" /></element>
+ <element name="minus"><text string="-" /></element>
+ <element name="plus"><text string="+" /></element>
+ <element name="style"><text string="STYLE" /></element>
+ <element name="perc"><text string="PERC." /></element>
+ <element name="set"><text string="SET" /></element>
+ <element name="tempo"><text string="TEMPO" /></element>
+ <element name="demo"><text string="DEMO" /></element>
+ <element name="tap"><text string="TAP" /></element>
+ <element name="tap_start"><text string="START" /></element>
+ <element name="pad_assign"><text string="PAD ASSIGN" /></element>
+ <element name="pointer_l"><text string="&#x25c4;" /></element>
+ <element name="pointer_r"><text string="&#x25ba;" /></element>
+ <element name="se"><text string="SE" /></element>
+ <element name="select"><text string="SELECT" /></element>
+ <element name="start"><text string="START/" /></element>
+ <element name="stop"><text string="STOP" /></element>
+ <element name="auto"><text string="AUTO" /></element>
+ <element name="auto_roll"><text string="ROLL" /></element>
+ <element name="off"><text string="OFF" align="1" /></element>
+ <element name="echo"><text string="ECHO" align="1" /></element>
+ <element name="flam"><text string="FLAM" align="1" /></element>
+ <element name="roll"><text string="ROLL" align="1" /></element>
+ <element name="se_pads"><text string="SOUND EFFECT PADS" /></element>
+
+ <!-- button primitives -->
+ <element name="button-circ" defstate="0">
+ <disk><bounds x="0" y="0" width="40" height="40" /><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="0"><bounds x="2" y="2" width="36" height="36" /><color red="0.5" green="0.5" blue="0.5" /></disk>
+ <disk state="1"><bounds x="2" y="2" width="36" height="36" /><color red="0.3" green="0.3" blue="0.3" /></disk>
+ </element>
+ <element name="button-demo" defstate="0">
+ <disk><bounds x="0" y="0" width="40" height="40" /><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="0"><bounds x="2" y="2" width="36" height="36" /><color red="1.0" green="0.82" blue="0.0" /></disk>
+ <disk state="1"><bounds x="2" y="2" width="36" height="36" /><color red="0.9" green="0.75" blue="0.0" /></disk>
+ </element>
+ <element name="button-start-stop" defstate="0">
+ <disk><bounds x="0" y="0" width="40" height="40" /><color red="0.0" green="0.0" blue="0.0" /></disk>
+ <disk state="0"><bounds x="2" y="2" width="36" height="36" /><color red="1.0" green="0.14" blue="0.14" /></disk>
+ <disk state="1"><bounds x="2" y="2" width="36" height="36" /><color red="0.8" green="0.11" blue="0.11" /></disk>
+ </element>
+ <element name="button-rect" defstate="0">
+ <rect><bounds x="0" y="0" width="40" height="40" /><color red="0.0" green="0.0" blue="0.0" /></rect>
+ <rect state="0"><bounds x="2" y="2" width="36" height="36" /><color red="0.5" green="0.5" blue="0.5" /></rect>
+ <rect state="1"><bounds x="2" y="2" width="36" height="36" /><color red="0.3" green="0.3" blue="0.3" /></rect>
+ </element>
+ <element name="button-drumpad" defstate="0">
+ <disk><bounds x="0" y="0" width="40" height="40" /><color red="0.2" green="0.2" blue="0.2" /></disk>
+ <disk state="0"><bounds x="2" y="2" width="36" height="36" /><color red="0.02" green="0.02" blue="0.02" /></disk>
+ <disk state="1"><bounds x="2" y="2" width="36" height="36" /><color red="0.0" green="0.0" blue="0.0" /></disk>
+ </element>
+
+ <!-- LED primitive -->
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.1" blue="0.1" /></led7seg>
+ </element>
+
+ <view name="Drum Kit">
+ <!-- overall background -->
+ <element ref="greyback"><bounds x="0" y="-40" width="1430" height="790" /></element>
+
+ <element ref="button-drumpad" inputtag="PF" inputmask="0x01"><bounds x="0" y="180" width="330" height="330" /></element>
+ <element ref="button-drumpad" inputtag="PF" inputmask="0x02"><bounds x="350" y="-40" width="330" height="330" /></element>
+ <element ref="button-drumpad" inputtag="PF" inputmask="0x04"><bounds x="750" y="-40" width="330" height="330" /></element>
+ <element ref="button-drumpad" inputtag="PF" inputmask="0x08"><bounds x="1100" y="180" width="330" height="330" /></element>
+
+ <element ref="volume"><bounds xc="375" yc="570" width="100" height="15" /></element>
+ <element ref="button-rect" inputtag="KEY2" inputmask="0x02"><bounds xc="350" yc="600" width="30" height="30" /></element>
+ <element ref="minus"><bounds xc="350" yc="630" width="100" height="20" /></element>
+ <element ref="button-rect" inputtag="KEY2" inputmask="0x01"><bounds xc="400" yc="600" width="30" height="30" /></element>
+ <element ref="plus"><bounds xc="400" yc="630" width="100" height="20" /></element>
+
+ <element ref="style"><bounds xc="640" yc="522" width="100" height="15" /></element>
+ <element ref="button-circ" inputtag="KEY0" inputmask="0x01"><bounds xc="640" yc="560" width="25" height="25" /></element>
+ <element ref="perc"><bounds xc="690" yc="522" width="100" height="15" /></element>
+ <element ref="set"><bounds xc="690" yc="537" width="100" height="15" /></element>
+ <element ref="button-circ" inputtag="KEY0" inputmask="0x02"><bounds xc="690" yc="560" width="25" height="25" /></element>
+ <element ref="tempo"><bounds xc="740" yc="522" width="100" height="15" /></element>
+ <element ref="button-circ" inputtag="KEY0" inputmask="0x04"><bounds xc="740" yc="560" width="25" height="25" /></element>
+ <element ref="demo"><bounds xc="790" yc="522" width="100" height="15" /></element>
+ <element ref="button-demo" inputtag="KEY1" inputmask="0x01"><bounds xc="790" yc="560" width="25" height="25" /></element>
+
+ <element ref="tap"><bounds xc="640" yc="582" width="100" height="15" /></element>
+ <element ref="tap_start"><bounds xc="640" yc="597" width="100" height="15" /></element>
+ <element ref="button-circ" inputtag="KEY1" inputmask="0x02"><bounds xc="640" yc="620" width="25" height="25" /></element>
+ <element ref="pad_assign"><bounds xc="715" yc="582" width="100" height="15" /></element>
+ <element ref="pointer_l"><bounds xc="690" yc="597" width="100" height="15" /></element>
+ <element ref="pointer_r"><bounds xc="740" yc="597" width="100" height="15" /></element>
+ <element ref="button-circ" inputtag="KEY2" inputmask="0x08"><bounds xc="690" yc="620" width="25" height="25" /></element>
+ <element ref="button-circ" inputtag="KEY2" inputmask="0x04"><bounds xc="740" yc="620" width="25" height="25" /></element>
+ <element ref="se"><bounds xc="790" yc="582" width="100" height="15" /></element>
+ <element ref="select"><bounds xc="790" yc="597" width="100" height="15" /></element>
+ <element ref="white"><bounds x="790" yc="620" width="35" height="3" /></element>
+ <element ref="white"><bounds x="825" yc="620" width="3" height="120" /></element>
+ <element ref="white"><bounds x="825" yc="560" width="15" height="3" /></element>
+ <element ref="white"><bounds x="825" yc="680" width="15" height="3" /></element>
+ <element ref="button-circ" inputtag="KEY1" inputmask="0x04"><bounds xc="790" yc="620" width="25" height="25" /></element>
+
+ <element ref="start"><bounds xc="640" yc="642" width="100" height="15" /></element>
+ <element ref="stop"><bounds xc="640" yc="657" width="100" height="15" /></element>
+ <element ref="button-start-stop" inputtag="KEY0" inputmask="0x08"><bounds xc="640" yc="680" width="25" height="25" /></element>
+ <element ref="auto"><bounds xc="690" yc="642" width="100" height="15" /></element>
+ <element ref="auto_roll"><bounds xc="690" yc="657" width="100" height="15" /></element>
+ <element ref="button-circ" inputtag="KEY1" inputmask="0x08"><bounds xc="690" yc="680" width="25" height="25" /></element>
+
+ <element ref="off"><bounds x="725" yc="650" width="200" height="15" /></element>
+ <element ref="echo"><bounds x="725" yc="665" width="200" height="15" /></element>
+ <element ref="flam"><bounds x="725" yc="680" width="200" height="15" /></element>
+ <element ref="roll"><bounds x="725" yc="695" width="200" height="15" /></element>
+ <element ref="white"><bounds x="712" y="650" width="1" height="45" /></element>
+ <element ref="white"><bounds x="712" y="650" width="8" height="1" /></element>
+ <element ref="white"><bounds x="712" y="665" width="8" height="1" /></element>
+ <element ref="white"><bounds x="712" y="680" width="8" height="1" /></element>
+ <element ref="white"><bounds x="712" y="695" width="8" height="1" /></element>
+
+ <element ref="se_pads"><bounds xc="970" yc="502" width="200" height="15" /></element>
+ <element ref="button-circ" inputtag="KEY3" inputmask="0x01"><bounds xc="880" yc="560" width="65" height="65" /></element>
+ <element ref="button-circ" inputtag="KEY3" inputmask="0x02"><bounds xc="940" yc="680" width="65" height="65" /></element>
+ <element ref="button-circ" inputtag="KEY3" inputmask="0x04"><bounds xc="1000" yc="560" width="65" height="65" /></element>
+ <element ref="button-circ" inputtag="KEY3" inputmask="0x08"><bounds xc="1060" yc="680" width="65" height="65" /></element>
+
+ <repeat count="10">
+ <param name="y" start="310" increment="18" />
+ <element ref="border"><bounds xc="715" y="~y~" width="680" height="8" /></element>
+ </repeat>
+ <element ref="greyback"><bounds xc="715" y="364" width="150" height="100" /></element>
+ <element ref="black"><bounds xc="715" y="370" width="120" height="90" /></element>
+
+ <element ref="digit" name="digit0"><bounds x="670" y="390" width="40" height="50" /><orientation rotate="180" /></element>
+ <element ref="digit" name="digit1"><bounds x="720" y="390" width="40" height="50" /><orientation rotate="180" /></element>
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index d201bebd255..114db9f7675 100755
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -45470,6 +45470,7 @@ psr60 // 1985 PSR-60
psr70 // 1985 PSR-70
@source:yamaha/ympsr150.cpp
+dd9 // 1994
psr110 // 1993
psr150 // 1992
psr180 // 1994
diff --git a/src/mame/yamaha/ympsr150.cpp b/src/mame/yamaha/ympsr150.cpp
index 1413424f733..386b197dc95 100644
--- a/src/mame/yamaha/ympsr150.cpp
+++ b/src/mame/yamaha/ympsr150.cpp
@@ -25,12 +25,13 @@
- PSS-12: 32 mini keys, mono, 2Mbit ROM
- PSS-6: 32 "ultra mini" keys, mono, 1Mbit ROM, some tone differences
+ - DD-9 Digital Percussion (1994), later released as DD-20 (2003)
+
- LCD with large icons, metronome, volume display (1996)
- PSR-190: 61 keys, stereo
- PSR-78: 49 keys, mono
Other known undumped models:
- - DD-9 Digital Percussion (1994, later released as DD-20)
- PSR-130 (1997, 61 keys, two dials for tone & rhythm selection)
*/
@@ -44,6 +45,7 @@
#include "screen.h"
#include "speaker.h"
+#include "dd9.lh"
#include "psr110.lh"
#include "psr150.lh"
#include "psr180.lh"
@@ -67,9 +69,11 @@ public:
, m_lcdc(*this, "lcdc")
, m_port(*this, "P%c", 'A')
, m_keys(*this, "KEY%u", 0U)
+ , m_dial(*this, "DIAL")
, m_outputs(*this, "%02x.%d.%d", 0U, 0U, 0U)
, m_switch(*this, "switch_pos")
, m_led(*this, "led%u", 0U)
+ , m_digit(*this, "digit%u", 0U)
{ }
void psr150(machine_config &config);
@@ -78,6 +82,7 @@ public:
void pss31(machine_config &config);
void psr75(machine_config &config);
void pss11(machine_config &config);
+ void dd9(machine_config &config);
void psr180_base(machine_config &config);
void psr180(machine_config &config);
void psr76(machine_config &config);
@@ -97,6 +102,8 @@ public:
template <unsigned StartBit>
DECLARE_CUSTOM_INPUT_MEMBER(keys_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(dial_r);
+
DECLARE_INPUT_CHANGED_MEMBER(switch_w);
DECLARE_CUSTOM_INPUT_MEMBER(switch_r) { return m_switch; }
@@ -110,6 +117,9 @@ public:
template <unsigned Bit>
void pwm_col_w(int state);
+ template <unsigned Num>
+ void digit_w(u8 state) { m_digit[Num] = state ^ 0xff; }
+
DECLARE_CUSTOM_INPUT_MEMBER(lcd_r) { return m_lcdc->db_r() >> 4; }
void lcd_w(int state) { m_lcdc->db_w(state << 4); }
@@ -124,9 +134,11 @@ private:
optional_ioport_array<6> m_port;
optional_ioport_array<19> m_keys;
+ optional_ioport m_dial;
output_finder<64, 8, 5> m_outputs;
output_finder<> m_switch;
output_finder<4> m_led;
+ output_finder<2> m_digit;
ioport_value m_key_sel{};
ioport_value m_pwm_col{};
@@ -160,6 +172,13 @@ CUSTOM_INPUT_MEMBER(psr150_state::keys_r)
return result >> StartBit;
}
+CUSTOM_INPUT_MEMBER(psr150_state::dial_r)
+{
+ // return the dial position as a 2-bit gray code
+ const u8 val = m_dial->read();
+ return (val >> 6) ^ (val >> 7);
+}
+
INPUT_CHANGED_MEMBER(psr150_state::switch_w)
{
if (!oldval && newval)
@@ -202,6 +221,7 @@ void psr150_state::driver_start()
{
m_outputs.resolve();
m_led.resolve();
+ m_digit.resolve();
m_switch.resolve();
m_switch = 0x2; // "Voice Play" mode
@@ -301,6 +321,23 @@ void psr150_state::pss11(machine_config &config)
config.set_default_layout(layout_pss11);
}
+void psr150_state::dd9(machine_config &config)
+{
+ GEW7(config, m_maincpu, 8'000'000);
+ m_maincpu->port_out_cb<0>().set_ioport("PA");
+ m_maincpu->port_out_cb<1>().set(FUNC(psr150_state::digit_w<0>));
+ m_maincpu->port_out_cb<2>().set(FUNC(psr150_state::digit_w<1>));
+ m_maincpu->port_in_cb<5>().set_ioport("PF");
+ m_maincpu->add_route(1, "speaker", 1.0);
+
+ // TODO: there is also a RLC lowpass with R=150, L=3.3mH, C=0.33uF
+ // (AC filter not really needed since this doesn't output a "dummy" DC offset sample, unlike the keyboards)
+
+ SPEAKER(config, "speaker").front_center();
+
+ config.set_default_layout(layout_dd9);
+}
+
void psr150_state::psr180_base(machine_config &config)
{
GEW7(config, m_maincpu, 8'000'000);
@@ -1007,6 +1044,50 @@ INPUT_PORTS_START(pss11)
PORT_BIT( 0x400, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
+INPUT_PORTS_START( dd9 )
+ PORT_START("PA")
+ PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(psr150_state, KEY_OUT_BITS(0, 5))
+ PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("PF")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Drum Pad 1")
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Drum Pad 2")
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Drum Pad 3")
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Drum Pad 4")
+ PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(psr150_state, keys_r<0>)
+
+ PORT_START("KEY0")
+ PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_1) PORT_NAME("Style")
+ PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_2) PORT_NAME("Perc. Set")
+ PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_3) PORT_NAME("Tempo")
+ PORT_BIT( 0x8, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_9) PORT_NAME("Start/Stop")
+
+ PORT_START("KEY1")
+ PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_4) PORT_NAME("Demo")
+ PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_5) PORT_NAME("Tap Start")
+ PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_8) PORT_NAME("SE Select")
+ PORT_BIT( 0x8, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_0) PORT_NAME("Auto Roll")
+
+ PORT_START("KEY2")
+ PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_UP) PORT_NAME("Volume Up")
+ PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Volume Down")
+ PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_7) PORT_NAME("Pad Assign +")
+ PORT_BIT( 0x8, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_CODE(KEYCODE_6) PORT_NAME("Pad Assign -")
+
+ PORT_START("KEY3")
+ PORT_BIT( 0x1, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("SE Pad 1")
+ PORT_BIT( 0x2, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("SE Pad 2")
+ PORT_BIT( 0x4, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("SE Pad 3")
+ PORT_BIT( 0x8, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("SE Pad 4")
+
+ PORT_START("KEY4")
+ PORT_BIT( 0x3, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(psr150_state, dial_r)
+ PORT_BIT( 0xc, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("DIAL")
+ PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(50) PORT_KEYDELTA(75)
+INPUT_PORTS_END
+
INPUT_PORTS_START( pss12 )
PORT_START("PA")
PORT_BIT( 0x3f, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(psr150_state, keys_r<0>)
@@ -1682,6 +1763,11 @@ ROM_END
#define rom_pss21 rom_psr75
#define rom_pss31 rom_psr75
+ROM_START( dd9 )
+ ROM_REGION( 0x40000, "maincpu", 0 )
+ ROM_LOAD( "xp170b00.ic2", 0x00000, 0x40000, CRC(66f09612) SHA1(7b106dc3717992c5b1a96bd5b27417bd98b38f7f))
+ROM_END
+
ROM_START( psr180 )
ROM_REGION( 0x80000, "maincpu", 0 )
ROM_LOAD( "xp687a00.ic6", 0x00000, 0x80000, CRC(df3a568d) SHA1(ddc260d55d874987950817817117df141668f1f2))
@@ -1727,6 +1813,7 @@ SYST( 1992, psr75, psr150, 0, psr75, psr75, psr150_state, empty_init,
SYST( 1992, pss11, psr150, 0, pss11, pss11, psr150_state, empty_init, "Yamaha", "PSS-11", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1992, pss21, psr150, 0, pss21, pss21, psr150_state, empty_init, "Yamaha", "PSS-21", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1992, pss31, psr150, 0, pss31, pss31, psr150_state, empty_init, "Yamaha", "PSS-31", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1994, dd9, 0, 0, dd9, dd9, psr150_state, empty_init, "Yamaha", "DD-9 Digital Percussion", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1994, psr180, 0, 0, psr180, psr180, psr150_state, empty_init, "Yamaha", "PSR-180", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1994, psr76, psr180, 0, psr76, psr76, psr150_state, empty_init, "Yamaha", "PSR-76", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1994, pss12, 0, 0, pss12, pss12, psr150_state, empty_init, "Yamaha", "PSS-12", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )