diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/devices/sound/gew.cpp | 8 | ||||
-rw-r--r-- | src/devices/sound/gew.h | 1 | ||||
-rw-r--r-- | src/devices/sound/gew7.cpp | 1 | ||||
-rw-r--r-- | src/mame/layout/dd9.lay | 161 | ||||
-rwxr-xr-x | src/mame/mame.lst | 1 | ||||
-rw-r--r-- | src/mame/yamaha/ympsr150.cpp | 89 |
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="◄" /></element> + <element name="pointer_r"><text string="►" /></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 ) |