summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/video.lua12
-rw-r--r--src/devices/cpu/upd7810/upd7810.cpp7
-rw-r--r--src/devices/cpu/upd7810/upd7810.h1
-rw-r--r--src/devices/cpu/upd7810/upd7810_opcodes.cpp5
-rw-r--r--src/devices/sound/upd934g.cpp40
-rw-r--r--src/devices/sound/upd934g.h1
-rw-r--r--src/devices/video/mn1252.cpp103
-rw-r--r--src/devices/video/mn1252.h42
-rw-r--r--src/mame/casio/cz230s.cpp694
-rw-r--r--src/mame/casio/ra3.cpp7
-rw-r--r--src/mame/casio/ra3.h7
-rw-r--r--src/mame/layout/cz230s.lay601
-rw-r--r--src/mame/layout/sz1.lay230
-rw-r--r--src/mame/mame.lst4
14 files changed, 1729 insertions, 25 deletions
diff --git a/scripts/src/video.lua b/scripts/src/video.lua
index 299ba9ba502..3e59d10ba06 100644
--- a/scripts/src/video.lua
+++ b/scripts/src/video.lua
@@ -811,6 +811,18 @@ end
--------------------------------------------------
--
+--@src/devices/video/mn1252.h,VIDEOS["MN1252"] = true
+--------------------------------------------------
+
+if (VIDEOS["MN1252"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/video/mn1252.cpp",
+ MAME_DIR .. "src/devices/video/mn1252.h",
+ }
+end
+
+--------------------------------------------------
+--
--@src/devices/video/pc_vga.h,VIDEOS["PC_VGA"] = true
--------------------------------------------------
diff --git a/src/devices/cpu/upd7810/upd7810.cpp b/src/devices/cpu/upd7810/upd7810.cpp
index fd43adb2294..d63264d7e30 100644
--- a/src/devices/cpu/upd7810/upd7810.cpp
+++ b/src/devices/cpu/upd7810/upd7810.cpp
@@ -389,7 +389,8 @@ void upd7810_device::upd_internal_128_ram_map(address_map &map)
void upd7810_device::upd_internal_256_ram_map(address_map &map)
{
- map(0xff00, 0xffff).ram();
+ map(0xff00, 0xffff).view(m_ram_view);
+ m_ram_view[0](0xff00, 0xffff).ram();
}
void upd7810_device::upd_internal_4096_rom_128_ram_map(address_map &map)
@@ -401,7 +402,8 @@ void upd7810_device::upd_internal_4096_rom_128_ram_map(address_map &map)
void upd7810_device::upd_internal_4096_rom_256_ram_map(address_map &map)
{
map(0x0000, 0x0fff).rom();
- map(0xff00, 0xffff).ram();
+ map(0xff00, 0xffff).view(m_ram_view);
+ m_ram_view[0](0xff00, 0xffff).ram();
}
upd7810_device::upd7810_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor internal_map)
@@ -424,6 +426,7 @@ upd7810_device::upd7810_device(const machine_config &mconfig, device_type type,
, m_pf_out_cb(*this)
, m_pt_in_cb(*this, 0) // TODO: uPD7807 only
, m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0, internal_map)
+ , m_ram_view(*this, "ram_view")
, m_pa_pullups(0xff)
, m_pb_pullups(0xff)
, m_pc_pullups(0xff)
diff --git a/src/devices/cpu/upd7810/upd7810.h b/src/devices/cpu/upd7810/upd7810.h
index 4b6315c1fd7..d5344db0a60 100644
--- a/src/devices/cpu/upd7810/upd7810.h
+++ b/src/devices/cpu/upd7810/upd7810.h
@@ -236,6 +236,7 @@ protected:
static const struct opcode_s s_opXX_78c06[256];
address_space_config m_program_config;
+ memory_view m_ram_view;
PAIR m_ppc; /* previous program counter */
PAIR m_pc; /* program counter */
diff --git a/src/devices/cpu/upd7810/upd7810_opcodes.cpp b/src/devices/cpu/upd7810/upd7810_opcodes.cpp
index 7df4a498fdc..32df608e867 100644
--- a/src/devices/cpu/upd7810/upd7810_opcodes.cpp
+++ b/src/devices/cpu/upd7810/upd7810_opcodes.cpp
@@ -1042,6 +1042,11 @@ void upd7810_device::MOV_TMM_A()
void upd7810_device::MOV_MM_A()
{
MM = A;
+
+ if (BIT(A, 3))
+ m_ram_view.select(0);
+ else
+ m_ram_view.disable();
}
/* 4d d1: 0100 1101 1101 0001 */
diff --git a/src/devices/sound/upd934g.cpp b/src/devices/sound/upd934g.cpp
index f3321c70d3d..1178ef0a930 100644
--- a/src/devices/sound/upd934g.cpp
+++ b/src/devices/sound/upd934g.cpp
@@ -9,13 +9,14 @@
TODO:
- Correct MUTED and ACCENTED (currently just changes volume)
- T1 input
- - 8 channels?
***************************************************************************/
#include "emu.h"
#include "upd934g.h"
+#define VERBOSE (0)
+#include "logmacro.h"
//**************************************************************************
// DEVICE DEFINITIONS
@@ -54,13 +55,9 @@ void upd934g_device::device_start()
// register for save states
save_pointer(NAME(m_addr), 16);
- for (unsigned i = 0; i < 4; i++)
- {
- save_item(NAME(m_channel[i].pos), i);
- save_item(NAME(m_channel[i].playing), i);
- save_item(NAME(m_channel[i].volume), i);
- save_item(NAME(m_channel[i].effect), i);
- }
+ save_item(STRUCT_MEMBER(m_channel, pos));
+ save_item(STRUCT_MEMBER(m_channel, playing));
+ save_item(STRUCT_MEMBER(m_channel, effect));
save_item(NAME(m_sample));
save_item(NAME(m_ready));
@@ -93,13 +90,13 @@ void upd934g_device::sound_stream_update(sound_stream &stream, std::vector<read_
for (unsigned i = 0; i < outputs[ch].samples(); i++)
{
- int8_t raw = static_cast<int8_t>(read_byte(m_channel[ch].pos));
+ int16_t raw = static_cast<int8_t>(read_byte(m_channel[ch].pos)) * 4;
// normal, muted, accented
const double adjust[] = { 0, 0.7, 0.4, 1.0 };
raw *= adjust[m_channel[ch].effect];
- outputs[ch].put_int(i, raw * (m_channel[ch].volume + 1), 32768 / 64);
+ outputs[ch].put_int(i, raw, 32768 / 64);
if (++m_channel[ch].pos >= end)
{
@@ -127,24 +124,23 @@ void upd934g_device::write(offs_t offset, uint8_t data)
// format of data written here is:
// 76------ command
// --5432-- sample number
- // ------10 volume?
+ // ------10 output channel
m_sample = (data >> 2) & 0x0f;
switch (data >> 6)
{
case 0:
- logerror("CMD STORE ADDRESS sample %x\n", m_sample);
+ LOG("CMD STORE ADDRESS sample %x\n", m_sample);
break;
- case 1:
- case 2:
- case 3:
- logerror("CMD PLAY sample %x (channel %d, effect %d)\n", m_sample, m_sample >> 1, data >> 6);
- if (m_sample < 8)
+ case 1: // normal
+ case 2: // muted
+ case 3: // accented
{
- m_channel[m_sample >> 1].pos = m_addr[m_sample];
- m_channel[m_sample >> 1].playing = m_sample;
- m_channel[m_sample >> 1].volume = data & 0x03;
- m_channel[m_sample >> 1].effect = data >> 6;
+ const u8 ch = (data & 3) ^ 2; // effective order seems to be "2, 3, 0, 1"
+ LOG("CMD PLAY sample %x (channel %d, effect %d)\n", m_sample, ch, data >> 6);
+ m_channel[ch].pos = m_addr[m_sample];
+ m_channel[ch].playing = m_sample;
+ m_channel[ch].effect = data >> 6;
}
break;
}
@@ -154,7 +150,7 @@ void upd934g_device::write(offs_t offset, uint8_t data)
break;
case 2:
m_addr[m_sample] = (m_addr[m_sample] & 0x00ff) | (data << 8);
- logerror(" sample %x address = %04x\n", m_sample, m_addr[m_sample]);
+ LOG(" sample %x address = %04x\n", m_sample, m_addr[m_sample]);
break;
case 3:
m_ready = true;
diff --git a/src/devices/sound/upd934g.h b/src/devices/sound/upd934g.h
index 793fa71b162..2799c4d0984 100644
--- a/src/devices/sound/upd934g.h
+++ b/src/devices/sound/upd934g.h
@@ -45,7 +45,6 @@ private:
{
uint16_t pos;
int playing;
- int volume;
int effect;
}
m_channel[4];
diff --git a/src/devices/video/mn1252.cpp b/src/devices/video/mn1252.cpp
new file mode 100644
index 00000000000..c11b4e5378e
--- /dev/null
+++ b/src/devices/video/mn1252.cpp
@@ -0,0 +1,103 @@
+// license:BSD-3-Clause
+// copyright-holders:Devin Acker
+/***************************************************************************
+
+Panasonic MN1252 LCD controller
+
+***************************************************************************/
+
+#include "emu.h"
+#include "mn1252.h"
+
+#include <cassert>
+
+
+DEFINE_DEVICE_TYPE(MN1252, mn1252_device, "mn1252", "Panasonic MN1252 LCD controller")
+
+const u8 mn1252_device::OUTPUT_DIGITS[0x40] =
+{
+ // bit 0..7 = segment a..h (from datasheet)
+ 0x00, 0x77, 0x7f, 0x39, 0x3f, 0x79, 0x71, 0x3d,
+ 0x76, 0x06, 0x1e, 0xf0, 0x38, 0xb7, 0xb6, 0xbf,
+ 0x73, 0xbf, 0xf3, 0x6d, 0x07, 0x3e, 0xa6, 0xbe,
+ 0xf2, 0x6e, 0x5b, 0x48, 0x0f, 0x46, 0x49, 0x44,
+ 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, 0x30, 0x38,
+ 0x7c, 0x58, 0x5e, 0x54, 0x5c, 0x40, 0x21, 0x0c,
+ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
+ 0x7f, 0x6f, 0x01, 0x36, 0x5f, 0x7b, 0x74, 0x62
+};
+
+mn1252_device::mn1252_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, MN1252, tag, owner, clock)
+{
+}
+
+/**************************************************************************/
+void mn1252_device::device_start()
+{
+ save_item(NAME(m_data));
+ save_item(NAME(m_first_nibble));
+ save_item(NAME(m_nibble_count));
+ save_item(NAME(m_ce));
+ save_item(NAME(m_std));
+ save_item(NAME(m_output));
+}
+
+/**************************************************************************/
+void mn1252_device::device_reset()
+{
+ m_data = m_first_nibble = 0;
+ m_nibble_count = 0;
+ m_ce = m_std = 0;
+
+ std::fill(std::begin(m_output), std::end(m_output), 0);
+}
+
+/**************************************************************************/
+u16 mn1252_device::output(offs_t digit) const
+{
+ assert(digit < 6);
+ return m_output[digit];
+}
+
+/**************************************************************************/
+void mn1252_device::data_w(u8 data)
+{
+ m_data = data & 0xf;
+}
+
+/**************************************************************************/
+void mn1252_device::ce_w(int state)
+{
+ if (!m_ce && state)
+ {
+ m_nibble_count = 0;
+ }
+
+ m_ce = state;
+}
+
+/**************************************************************************/
+void mn1252_device::std_w(int state)
+{
+ if (m_ce && m_std && !state && m_nibble_count < 12)
+ {
+ if (!(m_nibble_count % 2))
+ {
+ m_first_nibble = m_data;
+ }
+ else
+ {
+ const u8 data = (m_first_nibble << 4) | m_data;
+ u16 output = OUTPUT_DIGITS[data & 0x3f];
+ if (BIT(data, 6)) output |= 0x80; // segment h
+ if (BIT(data, 7)) output |= 0x100; // segment p
+
+ m_output[m_nibble_count / 2] = output;
+ }
+
+ m_nibble_count++;
+ }
+
+ m_std = state;
+}
diff --git a/src/devices/video/mn1252.h b/src/devices/video/mn1252.h
new file mode 100644
index 00000000000..f79371adfc0
--- /dev/null
+++ b/src/devices/video/mn1252.h
@@ -0,0 +1,42 @@
+// license:BSD-3-Clause
+// copyright-holders:Devin Acker
+/***************************************************************************
+
+ Panasonic MN1252 LCD controller
+
+***************************************************************************/
+
+#ifndef MAME_VIDEO_MN1252_H
+#define MAME_VIDEO_MN1252_H
+
+#pragma once
+
+class mn1252_device : public device_t
+{
+public:
+ mn1252_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ u16 output(offs_t digit) const;
+
+ void data_w(u8 data);
+ void ce_w(int state);
+ void std_w(int state);
+
+protected:
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ static const u8 OUTPUT_DIGITS[0x40];
+
+ u8 m_data;
+ u8 m_first_nibble;
+ u8 m_nibble_count;
+ u8 m_ce, m_std;
+
+ u16 m_output[6];
+};
+
+DECLARE_DEVICE_TYPE(MN1252, mn1252_device)
+
+#endif // MAME_VIDEO_MN1252_H
diff --git a/src/mame/casio/cz230s.cpp b/src/mame/casio/cz230s.cpp
new file mode 100644
index 00000000000..c5c83b1331e
--- /dev/null
+++ b/src/mame/casio/cz230s.cpp
@@ -0,0 +1,694 @@
+// license: BSD-3-Clause
+// copyright-holders: Devin Acker
+/***************************************************************************
+ Casio CZ-230S digital synthesizer and SZ-1 MIDI sequencer
+
+ Misc. stuff:
+ Both of these devices have a way of loading and running external code.
+ - CZ-230S:
+ Hold "portamento speed", "value up", and "value down" together on boot. This will cause the
+ LCD to display "L-", as when loading from tape. At this point, the unit will try to load
+ $700 bytes over MIDI/serial to address $3800 and then jump to it.
+ - SZ-1:
+ While not recording or playing, pressing the Rest + Dot + Triplet buttons at the same time will
+ cause the firmware to check for a JMP instruction (54) at the first byte of cartridge memory
+ ($e000), and execute it if there is one.
+
+ TODO: auto power off. Even after activating this, both units still continue executing as normal
+ (and the power switch itself is not connected to the CPU, unlike on the CZ-101/1000)
+
+***************************************************************************/
+
+#include "emu.h"
+
+#include "ra3.h"
+
+#include "bus/midi/midiinport.h"
+#include "bus/midi/midioutport.h"
+#include "cpu/upd7810/upd7811.h"
+#include "imagedev/cassette.h"
+#include "machine/clock.h"
+#include "machine/nvram.h"
+#include "sound/beep.h"
+#include "sound/upd933.h"
+#include "sound/upd934g.h"
+#include "video/mn1252.h"
+
+#include "screen.h"
+#include "speaker.h"
+
+#include "cz230s.lh"
+#include "sz1.lh"
+
+namespace {
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+class cz230s_state : public driver_device
+{
+public:
+ cz230s_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_lcdc(*this, "lcdc"),
+ m_cassette(*this, "cassette"),
+ m_pd(*this, "pd"),
+ m_pcm(*this, "pcm"),
+ m_keys(*this, "KC%u", 0U),
+ m_lcd_seg(*this, "%u.%u", 0U, 0U),
+ m_led(*this, "led%u.%u", 0U, 0U),
+ m_rhythm(*this, "rhythm_pos"),
+ m_mode(*this, "mode_pos")
+ { }
+
+ void config_base(machine_config &config, u16 screen_w, u16 screen_h, bool midi_thru = true);
+ void cz230s(machine_config &config);
+ void sz1(machine_config &config);
+
+ void keys_w(int state) { m_key_sel = state; }
+ void keys_mux_w(int state) { m_key_mux = state; }
+ template <int Row> DECLARE_CUSTOM_INPUT_MEMBER(keys_row_r);
+ template <int Row> u8 keys_analog_r();
+
+ DECLARE_INPUT_CHANGED_MEMBER(rhythm_w);
+ template <int Bit> DECLARE_CUSTOM_INPUT_MEMBER(rhythm_r) { return m_rhythm >> Bit; }
+ DECLARE_INPUT_CHANGED_MEMBER(mode_w);
+ DECLARE_CUSTOM_INPUT_MEMBER(mode_r) { return m_mode; }
+
+ void cassette_w(int state);
+ void cassette_motor_w(int state);
+ DECLARE_CUSTOM_INPUT_MEMBER(cassette_r);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+ void cz230s_map(address_map &map);
+ void cz230s_pcm_map(address_map &map);
+ void sz1_map(address_map &map);
+
+ void pcm_w(offs_t offset, u8 data);
+ template <int Num> void led_w(u8 data);
+ void port_a_w(u8 data);
+ u8 keys_r();
+
+ void render_w(int state);
+
+ required_device<upd7811_device> m_maincpu;
+ required_device<mn1252_device> m_lcdc;
+ required_device<cassette_image_device> m_cassette;
+ optional_device<upd933_device> m_pd;
+ optional_device<upd934g_device> m_pcm;
+
+ optional_ioport_array<12> m_keys;
+
+ output_finder<6, 9> m_lcd_seg;
+ output_finder<2, 8> m_led;
+ output_finder<> m_rhythm;
+ output_finder<> m_mode;
+
+ u8 m_port_a;
+ u8 m_key_sel;
+ u8 m_key_mux;
+ u8 m_midi_rx;
+};
+
+
+//**************************************************************************
+// ADDRESS MAPS
+//**************************************************************************
+
+void cz230s_state::cz230s_map(address_map &map)
+{
+ map.unmap_value_high();
+
+// map(0x0000, 0x0fff).rom(); - internal
+ map(0x1000, 0x1fff).w(FUNC(cz230s_state::pcm_w));
+ map(0x2000, 0x3fff).ram().share("nvram");
+ map(0x4000, 0x7fff).rw(m_pd, FUNC(upd933_device::read), FUNC(upd933_device::write));
+ map(0x8000, 0xffff).rom().region("program", 0);
+}
+
+/**************************************************************************/
+void cz230s_state::cz230s_pcm_map(address_map &map)
+{
+ map(0x0000, 0x7fff).rom();
+}
+
+/**************************************************************************/
+void cz230s_state::sz1_map(address_map &map)
+{
+ map.unmap_value_high();
+
+// map(0x0000, 0x0fff).rom(); - internal
+ map(0x4000, 0x7fff).rom().region("program", 0);
+ map(0x8000, 0x9fff).mirror(0x2000).ram().share("nvram");
+ map(0xc000, 0xcfff).w(FUNC(cz230s_state::led_w<0>));
+ map(0xd000, 0xdfff).w(FUNC(cz230s_state::led_w<1>));
+ map(0xe000, 0xffff).rw("cart", FUNC(casio_ram_cart_device::read), FUNC(casio_ram_cart_device::write));
+}
+
+
+//**************************************************************************
+// INPUT PORT DEFINITIONS
+//**************************************************************************
+
+static INPUT_PORTS_START( cz230s )
+ PORT_START("KC0")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C2")
+ PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C#2")
+ PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("D2")
+ PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("D#2")
+ PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("E2")
+ PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F2")
+ PORT_BIT(0x1c0, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Solo / Insert")
+ PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Portamento On/Off")
+ PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("Bend Range / Check")
+
+ PORT_START("KC1")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F#2")
+ PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("G2")
+ PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("G#2")
+ PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("A2")
+ PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("A#2")
+ PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("B2")
+ PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Rhythm 1")
+ PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Rhythm 2")
+ PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Rhythm 3")
+ PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Rhythm 4")
+ PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Rhythm 5")
+ PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("Preset 1")
+
+ PORT_START("KC2")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C3")
+ PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C#3")
+ PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("D3")
+ PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("D#3")
+ PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("E3")
+ PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F3")
+ PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Rhythm 6")
+ PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Rhythm 7")
+ PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Rhythm 8")
+ PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_9) PORT_NAME("Rhythm 9")
+ PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_0) PORT_NAME("Rhythm 10")
+ PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("Preset 2")
+
+ PORT_START("KC3")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F#3")
+ PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("G3")
+ PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("G#3")
+ PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("A3")
+ PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("A#3")
+ PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("B3")
+ PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_J) PORT_NAME("Program")
+ PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Intro / Fill In")
+ PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Tempo Down")
+ PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Tempo Up")
+ PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Start / Stop / Record")
+ PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("Synchro / Clear")
+
+ PORT_START("KC4")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C4")
+ PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C#4")
+ PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("D4")
+ PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("D#4")
+ PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("E4")
+ PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F4")
+ PORT_BIT(0xfc0, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(cz230s_state, rhythm_r<0>)
+
+ PORT_START("KC5")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F#4")
+ PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("G4")
+ PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("G#4")
+ PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("A4")
+ PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("A#4")
+ PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("B4")
+ PORT_BIT(0xfc0, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(cz230s_state, rhythm_r<6>)
+
+ PORT_START("KC6")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C5")
+ PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C#5")
+ PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("D5")
+ PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("D#5")
+ PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("E5")
+ PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F5")
+ PORT_BIT(0x3c0, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(cz230s_state, rhythm_r<12>)
+ PORT_BIT(0xc00, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KC7")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("F#5")
+ PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("G5")
+ PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("G#5")
+ PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("A5")
+ PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("A#5")
+ PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("B5")
+ PORT_BIT(0x7c0, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_CUSTOM_MEMBER(cz230s_state, mode_r)
+ PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KC8")
+ PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("C6")
+ PORT_BIT(0x03e, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("MT")
+ PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("MIDI Channel")
+ PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Portamento Speed")
+ PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Transpose")
+ PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Value Down / Save")
+ PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("Value Up / Load")
+
+ PORT_START("KC9")
+ PORT_BIT(0x03f, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Tone 4")
+ PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Tone 5")
+ PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Tone 6")
+ PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Tone 7")
+ PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Tone 8")
+ PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Tone 9")
+
+ PORT_START("KC10")
+ PORT_BIT(0x03f, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Tone 0")
+ PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Tone 1")
+ PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Tone 2")
+ PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Tone 3")
+ PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("Cancel")
+ PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KC11")
+ PORT_BIT(0x03f, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Tune Down")
+ PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Tune Up")
+ PORT_BIT(0x100, 0x000, IPT_OTHER ) PORT_TOGGLE PORT_NAME("MIDI Clock")
+ PORT_DIPSETTING(0x100, "External")
+ PORT_DIPSETTING(0x000, "Internal")
+ PORT_BIT(0x200, 0x000, IPT_OTHER ) PORT_TOGGLE PORT_NAME("MIDI")
+ PORT_DIPSETTING(0x200, DEF_STR(Off)) // this should be on by default
+ PORT_DIPSETTING(0x000, DEF_STR(On))
+ PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x800, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_TOGGLE PORT_NAME("Auto Power Off")
+
+ PORT_START("RHYTHM")
+ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (BD)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0001)
+ PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (SD)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0002)
+ PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (LT)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0004)
+ PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (HT)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0008)
+ PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (LB)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0010)
+ PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (HB)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0020)
+ PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (CH)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0040)
+ PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (Rim)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0080)
+ PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (OH)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0100)
+ PORT_BIT(0x0200, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (CB)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0200)
+ PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (Ride)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0400)
+ PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (Claps)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x0800)
+ PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (PD 1)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x1000)
+ PORT_BIT(0x2000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (PD 2)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x2000)
+ PORT_BIT(0x4000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (PD 3)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x4000)
+ PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Rhythm Sound (PD 4)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, rhythm_w, 0x8000)
+
+ PORT_START("MODE")
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Mode (Pattern Play)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, mode_w, 0x01)
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Mode (Pattern Memory 4/4)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, mode_w, 0x02)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Mode (Pattern Memory 3/4)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, mode_w, 0x04)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Mode (Song Play)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, mode_w, 0x08)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Mode (Song Memory)") PORT_CHANGED_MEMBER(DEVICE_SELF, cz230s_state, mode_w, 0x10)
+
+ PORT_START("PB")
+ PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_MEMBER(cz230s_state, keys_w)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("pd", upd933_device, rq_r)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("pd", upd933_device, cs_w)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OUTPUT) // TODO: auto power off
+
+ PORT_START("PC")
+ PORT_BIT(0x07, IP_ACTIVE_HIGH, IPT_UNUSED) // MIDI in/out/clock
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(cz230s_state, cassette_r)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_MEMBER(cz230s_state, cassette_w)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_MEMBER(cz230s_state, cassette_motor_w)
+ PORT_BIT(0xc0, IP_ACTIVE_LOW, IPT_OUTPUT) PORT_WRITE_LINE_MEMBER(cz230s_state, keys_mux_w)
+
+ PORT_START("AN1")
+ PORT_BIT(0xff, 0x7f, IPT_PADDLE) PORT_NAME("Pitch Wheel") PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CODE_DEC(JOYCODE_Y_DOWN_SWITCH) PORT_CODE_INC(JOYCODE_Y_UP_SWITCH)
+
+ PORT_START("AN2")
+ PORT_CONFNAME(0xff, 0xff, "Battery Level")
+ PORT_CONFSETTING( 0x00, "Low")
+ PORT_CONFSETTING( 0xff, "Normal")
+
+ PORT_START("AN3")
+ PORT_BIT(0xff, 0xff, IPT_POSITIONAL_H) PORT_NAME("PD Rhythm Volume") PORT_REVERSE PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0) PORT_CODE_DEC(JOYCODE_X_LEFT_SWITCH) PORT_CODE_INC(JOYCODE_X_RIGHT_SWITCH)
+
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( sz1 )
+ PORT_START("KC0")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Rest")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Dot")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Triplet")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Tie")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Reverse / Save")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Forward / Load")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Z) PORT_NAME("Play / Check")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_X) PORT_NAME("Stop")
+
+ PORT_START("KC1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("8th Note")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("16th Note")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("32nd Note")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_DOWN ) PORT_NAME("Tempo Down")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("Real Time")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("Manual")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("Record")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("Reset")
+
+ PORT_START("KC2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Quarter Note")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Half Note")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Whole Note")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_UP) PORT_NAME("Tempo Up")
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Track 1")
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Track 2")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Track 3")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Track 4")
+
+ PORT_START("KC3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Copy")
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_INSERT) PORT_NAME("Insert")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_DEL) PORT_NAME("Delete")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Metronome / Enter")
+ PORT_BIT(0xf0, IP_ACTIVE_LOW, IPT_UNUSED)
+
+ PORT_START("KC4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("Repeat")
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("MIDI")
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_TOGGLE PORT_NAME("Auto Power Off")
+ PORT_BIT(0x20, 0x00, IPT_OTHER ) PORT_TOGGLE PORT_NAME("MIDI Clock")
+ PORT_DIPSETTING(0x20, "External")
+ PORT_DIPSETTING(0x00, "Internal")
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_TOGGLE PORT_NAME("Touch Data")
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("Cartridge / MT")
+
+ PORT_START("PA")
+ PORT_BIT(0x0f, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("lcdc", mn1252_device, data_w)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("lcdc", mn1252_device, ce_w)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("lcdc", mn1252_device, std_w)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(cz230s_state, keys_row_r<7>)
+
+ PORT_START("PB")
+ PORT_BIT(0x1f, IP_ACTIVE_LOW, IPT_OUTPUT) PORT_WRITE_LINE_MEMBER(cz230s_state, keys_w)
+ PORT_BIT(0x60, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_OUTPUT) // TODO: auto power off
+
+ PORT_START("PC")
+ PORT_BIT(0x07, IP_ACTIVE_HIGH, IPT_UNUSED) // MIDI in/out/clock
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(cz230s_state, cassette_r)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OUTPUT) PORT_WRITE_LINE_DEVICE_MEMBER("beep", beep_device, set_state)
+ PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_MEMBER(cz230s_state, cassette_motor_w)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_WRITE_LINE_MEMBER(cz230s_state, cassette_w)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Foot Switch")
+INPUT_PORTS_END
+
+
+//**************************************************************************
+// MACHINE EMULATION
+//**************************************************************************
+
+void cz230s_state::machine_start()
+{
+ m_lcd_seg.resolve();
+ m_led.resolve();
+ m_rhythm.resolve();
+ m_mode.resolve();
+
+ m_rhythm = 1;
+ m_mode = 1;
+
+ m_port_a = 0;
+
+ save_item(NAME(m_port_a));
+ save_item(NAME(m_key_sel));
+ save_item(NAME(m_key_mux));
+ save_item(NAME(m_midi_rx));
+}
+
+/**************************************************************************/
+void cz230s_state::machine_reset()
+{
+ m_key_sel = m_key_mux = 0;
+ m_midi_rx = 1;
+}
+
+
+/**************************************************************************/
+void cz230s_state::pcm_w(offs_t offset, u8 data)
+{
+ data = (BIT(offset, 0, 6) << 2) | BIT(offset, 8, 2);
+ m_pcm->write(offset >> 10, data);
+}
+
+/**************************************************************************/
+template <int Num>
+void cz230s_state::led_w(u8 data)
+{
+ for (int i = 0; i < 8; i++)
+ m_led[Num][i] = BIT(data, i);
+}
+
+/**************************************************************************/
+void cz230s_state::port_a_w(u8 data)
+{
+ m_lcdc->data_w(data & 0xf);
+ m_lcdc->std_w(BIT(data, 5));
+ m_lcdc->ce_w(BIT(data, 6));
+
+ if (BIT(data, 7) && !BIT(m_port_a, 7))
+ led_w<0>(~data & 0x3f);
+
+ m_port_a = data;
+}
+
+/**************************************************************************/
+u8 cz230s_state::keys_r()
+{
+ u8 data = 0x3f;
+
+ if (m_key_sel < m_keys.size())
+ {
+ const u16 input = m_keys[m_key_sel].read_safe(0xfff);
+ if (BIT(m_key_mux, 0))
+ data &= (input & 0x3f);
+ if (BIT(m_key_mux, 1))
+ data &= (input >> 6);
+ }
+
+ return data;
+}
+
+/**************************************************************************/
+template <int Row>
+CUSTOM_INPUT_MEMBER(cz230s_state::keys_row_r)
+{
+ u8 data = 0xff;
+
+ for (int i = 0; i < 5; i++)
+ if (BIT(m_key_sel, i))
+ data &= m_keys[i].read_safe(0xff);
+
+ return BIT(data, Row);
+}
+
+/**************************************************************************/
+template <int Row>
+u8 cz230s_state::keys_analog_r()
+{
+ return keys_row_r<Row>() ? 0xff : 0x00;
+}
+
+/**************************************************************************/
+INPUT_CHANGED_MEMBER(cz230s_state::rhythm_w)
+{
+ if (!oldval && newval)
+ m_rhythm = param;
+}
+
+/**************************************************************************/
+INPUT_CHANGED_MEMBER(cz230s_state::mode_w)
+{
+ if (!oldval && newval)
+ m_mode = param;
+}
+
+/**************************************************************************/
+void cz230s_state::cassette_w(int state)
+{
+ m_cassette->output(state ? -1.0 : 1.0);
+}
+
+/**************************************************************************/
+void cz230s_state::cassette_motor_w(int state)
+{
+ m_cassette->change_state(state ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
+}
+
+/**************************************************************************/
+CUSTOM_INPUT_MEMBER(cz230s_state::cassette_r)
+{
+ return m_cassette->input() > 0 ? 0 : 1;
+}
+
+/**************************************************************************/
+void cz230s_state::render_w(int state)
+{
+ if (!state)
+ return;
+
+ for (int digit = 0; digit < 6; digit++)
+ {
+ const u16 data = m_lcdc->output(digit);
+ for (int seg = 0; seg < 9; seg++)
+ m_lcd_seg[digit][seg] = BIT(data, seg);
+ }
+}
+
+
+//**************************************************************************
+// MACHINE DEFINTIONS
+//**************************************************************************
+
+void cz230s_state::config_base(machine_config &config, u16 screen_w, u16 screen_h, bool midi_thru)
+{
+ UPD7811(config, m_maincpu, 10_MHz_XTAL);
+
+ CLOCK(config, "midi_clock", 2_MHz_XTAL).signal_handler().set(m_maincpu, FUNC(upd7810_device::sck_w));
+
+ midi_port_device &mdin(MIDI_PORT(config, "mdin", midiin_slot, "midiin"));
+ mdin.rxd_handler().set([this](int state) { m_midi_rx = state; });
+ m_maincpu->rxd_func().set([this]() { return m_midi_rx; });
+
+ MIDI_PORT(config, "mdout", midiout_slot, "midiout");
+ m_maincpu->txd_func().set("mdout", FUNC(midi_port_device::write_txd));
+
+ if (midi_thru)
+ {
+ MIDI_PORT(config, "mdthru", midiout_slot, "midiout");
+ mdin.rxd_handler().append("mdthru", FUNC(midi_port_device::write_txd));
+ }
+
+ NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
+
+ MN1252(config, m_lcdc);
+
+ auto &screen = SCREEN(config, "screen", SCREEN_TYPE_SVG);
+ screen.set_refresh_hz(60);
+ screen.set_size(screen_w, screen_h);
+ screen.set_visarea_full();
+ screen.screen_vblank().set(FUNC(cz230s_state::render_w));
+
+ SPEAKER(config, "speaker").front_center();
+
+ CASSETTE(config, m_cassette);
+ m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
+ m_cassette->add_route(ALL_OUTPUTS, "speaker", 0.05);
+}
+
+/**************************************************************************/
+void cz230s_state::cz230s(machine_config &config)
+{
+ config_base(config, 975, 205);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &cz230s_state::cz230s_map);
+ m_maincpu->pa_in_cb().set(FUNC(cz230s_state::keys_r));
+ m_maincpu->pa_out_cb().set(FUNC(cz230s_state::port_a_w));
+ m_maincpu->pb_in_cb().set_ioport("PB");
+ m_maincpu->pb_out_cb().set_ioport("PB");
+ m_maincpu->pc_in_cb().set_ioport("PC");
+ m_maincpu->pc_out_cb().set_ioport("PC");
+ m_maincpu->an1_func().set_ioport("AN1");
+ m_maincpu->an2_func().set_ioport("AN2");
+ m_maincpu->an3_func().set_ioport("AN3");
+
+ UPD933(config, m_pd, 8.96_MHz_XTAL / 2);
+ m_pd->irq_cb().set_inputline(m_maincpu, UPD7810_INTF1);
+ m_pd->add_route(0, "speaker", 1.0);
+
+ UPD934G(config, m_pcm, 1'280'000);
+ m_pcm->set_addrmap(0, &cz230s_state::cz230s_pcm_map);
+ m_pcm->add_route(ALL_OUTPUTS, "speaker", 0.5);
+
+ config.set_default_layout(layout_cz230s);
+}
+
+/**************************************************************************/
+void cz230s_state::sz1(machine_config &config)
+{
+ config_base(config, 938, 205, false);
+
+ m_maincpu->set_addrmap(AS_PROGRAM, &cz230s_state::sz1_map);
+ m_maincpu->pa_in_cb().set_ioport("PA");
+ m_maincpu->pa_out_cb().set_ioport("PA");
+ m_maincpu->pb_out_cb().set_ioport("PB");
+ m_maincpu->pc_in_cb().set_ioport("PC");
+ m_maincpu->pc_out_cb().set_ioport("PC");
+ m_maincpu->an0_func().set(FUNC(cz230s_state::keys_analog_r<0>));
+ m_maincpu->an1_func().set(FUNC(cz230s_state::keys_analog_r<1>));
+ m_maincpu->an2_func().set(FUNC(cz230s_state::keys_analog_r<2>));
+ m_maincpu->an3_func().set(FUNC(cz230s_state::keys_analog_r<3>));
+ m_maincpu->an4_func().set(FUNC(cz230s_state::keys_analog_r<4>));
+ m_maincpu->an5_func().set(FUNC(cz230s_state::keys_analog_r<5>));
+ m_maincpu->an6_func().set(FUNC(cz230s_state::keys_analog_r<6>));
+
+ CASIO_RA5(config, "cart");
+
+ BEEP(config, "beep", 2000).add_route(ALL_OUTPUTS, "speaker", 0.5); // TODO: verify freq
+
+ config.set_default_layout(layout_sz1);
+}
+
+
+//**************************************************************************
+// ROM DEFINITIONS
+//**************************************************************************
+
+ROM_START( cz230s )
+ ROM_REGION(0x1000, "maincpu", 0)
+ ROM_LOAD("upd7811g-301.bin", 0x0000, 0x1000, CRC(506b008c) SHA1(2d91d817bd0fa4688591160e53cbc6e14acd7014))
+
+ ROM_REGION(0x8000, "program", 0)
+ ROM_LOAD("hn613256pda4.bin", 0x0000, 0x8000, CRC(f58758ec) SHA1(11e5c95e51e1c77c89682ea3db85b9457f8b6cf6))
+
+ ROM_REGION(0x8000, "pcm", 0)
+ ROM_LOAD("hn613256pct1.bin", 0x0000, 0x8000, CRC(97b9805b) SHA1(f3502a26b6a9bccb60bea11ae940619ab9960e05))
+
+ ROM_REGION(0x2000, "nvram", 0)
+ ROM_LOAD("init_ram.bin", 0x0000, 0x2000, CRC(eb756425) SHA1(3a21b45269a00d27d5943de50825edc329062c60))
+
+ ROM_REGION(0x7bb5, "screen", 0)
+ ROM_LOAD("cz230s.svg", 0x0000, 0x7bb5, CRC(e35cc3d3) SHA1(36cb369414f1e65843cd0ea318ad27f536b582be))
+ROM_END
+
+ROM_START( sz1 )
+ ROM_REGION(0x1000, "maincpu", 0)
+ ROM_LOAD("upd7811g-120.bin", 0x0000, 0x1000, CRC(597ac04a) SHA1(96451a764296eaa22aaad3cba121226dcba865f4))
+
+ ROM_REGION(0x4000, "program", 0)
+ ROM_LOAD("program.bin", 0x0000, 0x4000, CRC(15f83fa5) SHA1(cb0d8d8390266f247dc7718b95bc658d1719d105))
+
+ ROM_REGION(0x6437, "screen", 0)
+ ROM_LOAD("sz1.svg", 0x0000, 0x6437, CRC(fd14625b) SHA1(069790868b382725d309fcab0148147f76ff82cc))
+ROM_END
+
+} // anonymous namespace
+
+
+//**************************************************************************
+// SYSTEM DRIVERS
+//**************************************************************************
+
+// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
+SYST( 1985, cz230s, 0, 0, cz230s, cz230s, cz230s_state, empty_init, "Casio", "CZ-230S", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
+SYST( 1985, sz1, 0, 0, sz1, sz1, cz230s_state, empty_init, "Casio", "SZ-1", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
diff --git a/src/mame/casio/ra3.cpp b/src/mame/casio/ra3.cpp
index a56da78426b..6d5a95b22e8 100644
--- a/src/mame/casio/ra3.cpp
+++ b/src/mame/casio/ra3.cpp
@@ -13,6 +13,7 @@
// device type definition
DEFINE_DEVICE_TYPE(CASIO_RA3, casio_ra3_device, "casio_ra3", "Casio RA-3 RAM cartridge")
+DEFINE_DEVICE_TYPE(CASIO_RA5, casio_ra5_device, "casio_ra5", "Casio RA-5 RAM cartridge")
DEFINE_DEVICE_TYPE(CASIO_RA6, casio_ra6_device, "casio_ra6", "Casio RA-6 RAM cartridge")
/**************************************************************************/
@@ -35,6 +36,12 @@ casio_ra3_device::casio_ra3_device(const machine_config &mconfig, const char *ta
}
/**************************************************************************/
+casio_ra5_device::casio_ra5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : casio_ram_cart_device(mconfig, CASIO_RA5, tag, owner, clock, 0x2000)
+{
+}
+
+/**************************************************************************/
casio_ra6_device::casio_ra6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: casio_ram_cart_device(mconfig, CASIO_RA6, tag, owner, clock, 0x4000)
{
diff --git a/src/mame/casio/ra3.h b/src/mame/casio/ra3.h
index e2eb6269dd3..b9ba87e8363 100644
--- a/src/mame/casio/ra3.h
+++ b/src/mame/casio/ra3.h
@@ -47,6 +47,12 @@ public:
casio_ra3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
};
+class casio_ra5_device : public casio_ram_cart_device
+{
+public:
+ casio_ra5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
class casio_ra6_device : public casio_ram_cart_device
{
public:
@@ -55,6 +61,7 @@ public:
// device type definition
DECLARE_DEVICE_TYPE(CASIO_RA3, casio_ra3_device)
+DECLARE_DEVICE_TYPE(CASIO_RA5, casio_ra5_device)
DECLARE_DEVICE_TYPE(CASIO_RA6, casio_ra6_device)
#endif // MAME_CASIO_RA3_H
diff --git a/src/mame/layout/cz230s.lay b/src/mame/layout/cz230s.lay
new file mode 100644
index 00000000000..dcb71e735e1
--- /dev/null
+++ b/src/mame/layout/cz230s.lay
@@ -0,0 +1,601 @@
+<?xml version="1.0"?>
+<!--
+license:CC0-1.0
+-->
+
+<mamelayout version="2">
+ <element name="bg"><rect><color red="0.06" green="0.06" blue="0.06" /></rect></element>
+ <element name="black"><rect><color red="0" green="0" blue="0" /></rect></element>
+ <element name="grey"><rect><color red="0.04" green="0.04" blue="0.04" /></rect></element>
+ <element name="white"><rect><color red="1" green="1" blue="1" /></rect></element>
+
+ <!-- text elements -->
+ <element name="num1"><text string="1" /></element>
+ <element name="num2"><text string="2" /></element>
+ <element name="num3"><text string="3" /></element>
+ <element name="num4"><text string="4" /></element>
+
+ <element name="solo">
+ <text string="SOLO"><color red="1" green="0.9" blue="0.4" /></text>
+ </element>
+ <element name="insert"><text string="(INSERT)" /></element>
+ <element name="portamento1">
+ <text string="PORTAMENTO"><color red="1" green="0.9" blue="0.4" /></text>
+ </element>
+ <element name="on_off"><text string="ON/OFF" /></element>
+
+ <element name="rhythm">
+ <text string="RHYTHM"><color red="1" green="0.9" blue="0.4" /></text>
+ </element>
+ <element name="tempo"><text string="TEMPO" /></element>
+ <element name="arrow_up"><text string="&#x25b2;" /></element>
+ <element name="arrow_down"><text string="&#x25bc;" /></element>
+ <element name="start"><text string="START" /></element>
+ <element name="stop"><text string="/STOP" /></element>
+ <element name="record"><text string="(RECORD)" /></element>
+ <element name="synchro"><text string="SYNCHRO" /></element>
+ <element name="clear"><text string="(CLEAR)" /></element>
+ <element name="intro"><text string="INTRO./FILL-IN" /></element>
+ <element name="bar"><text string="(1/2/FILL-IN BAR)" /></element>
+ <element name="preset"><text string="PRESET" /></element>
+ <element name="program"><text string="PROGRAM" /></element>
+
+ <element name="rhythm_sound">
+ <text string="RHYTHM SOUND SOURCE"><color red="1" green="0.9" blue="0.4" /></text>
+ </element>
+ <element name="bd"><text string="BD" /></element>
+ <element name="sd"><text string="SD" /></element>
+ <element name="lt"><text string="LT" /></element>
+ <element name="ht"><text string="HT" /></element>
+ <element name="lb"><text string="LB" /></element>
+ <element name="hb"><text string="HB" /></element>
+ <element name="ch"><text string="CH" /></element>
+ <element name="rim"><text string="RIM" /></element>
+ <element name="oh"><text string="OH" /></element>
+ <element name="cb"><text string="CB" /></element>
+ <element name="ride"><text string="RIDE" /></element>
+ <element name="claps"><text string="CLAPS" /></element>
+ <element name="pd"><text string="PD" /></element>
+
+ <element name="rhythm_mode">
+ <text string="RHYTHM MODE"><color red="1" green="0.9" blue="0.4" /></text>
+ </element>
+ <element name="pattern"><text string="PATTERN" /></element>
+ <element name="song"><text string="SONG" /></element>
+ <element name="play1">
+ <rect><color red="1" green="1" blue="1" /></rect>
+ <text string="PLAY" align="1"><color red="0.04" green="0.04" blue="0.04" /></text>
+ </element>
+ <element name="play2">
+ <rect><color red="0.04" green="0.04" blue="0.04" /></rect>
+ <text string="PLAY" align="2" />
+ </element>
+ <element name="memory1">
+ <rect><color red="0.04" green="0.04" blue="0.04" /></rect>
+ <text string="MEMORY" align="1" />
+ </element>
+ <element name="memory2">
+ <rect><color red="0.04" green="0.04" blue="0.04" /></rect>
+ <text string="MEMORY" align="2" />
+ </element>
+ <element name="mem34"><text string="3/4" /></element>
+ <element name="mem44"><text string="4/4" /></element>
+
+ <element name="data_entry">
+ <text string="DATA ENTRY"><color red="1" green="0.9" blue="0.4" /></text>
+ </element>
+ <element name="value"><text string="VALUE" /></element>
+ <element name="save"><text string="(SAVE)" /></element>
+ <element name="load"><text string="(LOAD)" /></element>
+ <element name="midi"><text string="MIDI CH" /></element>
+ <element name="transpose"><text string="TRANSPOSE" /></element>
+ <element name="portamento2"><text string="PORTAMENTO" /></element>
+ <element name="speed"><text string="SPEED" /></element>
+ <element name="bend"><text string="BEND" /></element>
+ <element name="range"><text string="RANGE" /></element>
+ <element name="check"><text string="(CHECK)" /></element>
+ <element name="mt"><text string="MT" /></element>
+
+ <element name="pd_sound">
+ <text string="PD SOUND SELECTOR"><color red="1" green="0.9" blue="0.4" /></text>
+ </element>
+ <element name="tune"><text string="TUNE"><color red="1" green="0.9" blue="0.4" /></text></element>
+ <element name="power"><text string="POWER"><color red="1" green="0.9" blue="0.4" /></text></element>
+
+ <element name="arrow_left"><text string="&#x25c0;" /></element>
+ <element name="accent"><text string="ACCENT"></text></element>
+
+ <!-- LED primitives -->
+ <element name="led" defstate="0">
+ <rect state="0"><color red="0.2" green="0" blue="0" /></rect>
+ <rect state="1"><color red="1" green="0.1" blue="0" /></rect>
+ </element>
+
+ <element name="led_g" defstate="0">
+ <rect state="1"><color red="0" green="1" blue="0.1" /></rect>
+ </element>
+
+ <!-- button primitives -->
+ <element name="button" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="5" /></rect>
+ <rect state="0"><color red="0.9" green="0.9" blue="0.8" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ <rect state="1"><color red="0.5" green="0.5" blue="0.42" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ </element>
+
+ <element name="button_grey" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="5" /></rect>
+ <rect state="0"><color red="0.1" green="0.1" blue="0.1" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ <rect state="1"><color red="0.07" green="0.07" blue="0.07" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ </element>
+
+ <element name="button_blue" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="5" /></rect>
+ <rect state="0"><color red="0.35" green="0.45" blue="0.92" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ <rect state="1"><color red="0.2" green="0.3" blue="0.75" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ </element>
+
+ <element name="button_yellow" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="5" /></rect>
+ <rect state="0"><color red="1" green="0.9" blue="0.4" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ <rect state="1"><color red="0.8" green="0.7" blue="0.25" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ </element>
+
+ <element name="button_down" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="10" /></rect>
+ <rect state="0"><color red="0.9" green="0.9" blue="0.8" /><bounds xc="7.5" yc="5" width="13.5" height="8.5" /></rect>
+ <rect state="1"><color red="0.5" green="0.5" blue="0.42" /><bounds xc="7.5" yc="5" width="13.5" height="8.5" /></rect>
+ <image>
+ <bounds xc="7.5" yc="5" width="10" height="10" />
+ <data><![CDATA[
+ <?xml version="1.0" standalone="no"?>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" version="1.1">
+ <polygon points="2,2 5,8 8,2" fill="none" stroke="black" stroke-width="0.4" />
+ </svg>
+ ]]></data>
+ </image>
+ </element>
+
+ <element name="button_up" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="10" /></rect>
+ <rect state="0"><color red="0.9" green="0.9" blue="0.8" /><bounds xc="7.5" yc="5" width="13.5" height="8.5" /></rect>
+ <rect state="1"><color red="0.5" green="0.5" blue="0.42" /><bounds xc="7.5" yc="5" width="13.5" height="8.5" /></rect>
+ <image>
+ <bounds xc="7.5" yc="5" width="10" height="10" />
+ <data><![CDATA[
+ <?xml version="1.0" standalone="no"?>
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" version="1.1">
+ <polygon points="2,8 5,2 8,8" fill="none" stroke="black" stroke-width="0.4" />
+ </svg>
+ ]]></data>
+ </image>
+ </element>
+
+ <repeat count="11">
+ <param name="num" start="0" increment="1" />
+
+ <element name="button_num_~num~" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="5" /></rect>
+ <rect state="0"><color red="0.9" green="0.9" blue="0.8" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ <rect state="1"><color red="0.5" green="0.5" blue="0.42" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ <text string="~num~"><bounds xc="7.5" yc="2.5" width="15" height="4" /><color red="0" green="0" blue="0" /></text>
+ </element>
+ </repeat>
+
+ <element name="button_clear" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="5" /></rect>
+ <rect state="0"><color red="0.8" green="0.2" blue="0.1" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ <rect state="1"><color red="0.6" green="0.1" blue="0" /><bounds xc="7.5" yc="2.5" width="13.5" height="4.5" /></rect>
+ <text string="C"><bounds xc="7.5" yc="2.5" width="15" height="4" /><color red="0" green="0" blue="0" /></text>
+ </element>
+
+ <!-- note chart -->
+ <element name="note_chart">
+ <rect><color red="1" green="1" blue="1"/><bounds x="0" y="0" width="135" height="12" /></rect>
+ <rect><color red="0.04" green="0.04" blue="0.04" /><bounds x="0.5" y="0.5" width="134" height="11" /></rect>
+
+ <rect><color red="1" green="0.9" blue="0.4" /><bounds x="5" y="1" width="94" height="0.5" /></rect>
+ <rect><color red="1" green="0.9" blue="0.4" /><bounds x="5" y="1" width="0.5" height="8" /></rect>
+ <disk><color red="1" green="0.9" blue="0.4" /><bounds x="3" y="8" width="2.5" height="1.5" /></disk>
+ <rect><color red="1" green="0.9" blue="0.4" /><bounds x="52" y="1" width="0.5" height="8" /></rect>
+ <disk><color red="1" green="0.9" blue="0.4" /><bounds x="50" y="8" width="2.5" height="1.5" /></disk>
+ <rect><color red="1" green="0.9" blue="0.4" /><bounds x="98.5" y="1" width="0.5" height="8" /></rect>
+ <disk><color red="1" green="0.9" blue="0.4" /><bounds x="96.5" y="8" width="2.5" height="1.5" /></disk>
+
+ <rect><color red="0.2" green="0.8" blue="0.6" /><bounds x="8" y="2" width="102" height="0.5" /></rect>
+ <rect><color red="0.2" green="0.8" blue="0.6" /><bounds x="8" y="3" width="102" height="0.5" /></rect>
+ <rect><color red="0.2" green="0.8" blue="0.6" /><bounds x="8" y="2" width="0.5" height="7" /></rect>
+ <disk><color red="0.2" green="0.8" blue="0.6" /><bounds x="6" y="8" width="2.5" height="1.5" /></disk>
+ <rect><color red="0.2" green="0.8" blue="0.6" /><bounds x="40" y="2" width="0.5" height="7" /></rect>
+ <disk><color red="0.2" green="0.8" blue="0.6" /><bounds x="38" y="8" width="2.5" height="1.5" /></disk>
+ <rect><color red="0.2" green="0.8" blue="0.6" /><bounds x="75" y="2" width="0.5" height="7" /></rect>
+ <disk><color red="0.2" green="0.8" blue="0.6" /><bounds x="73" y="8" width="2.5" height="1.5" /></disk>
+ <rect><color red="0.2" green="0.8" blue="0.6" /><bounds x="109.5" y="2" width="0.5" height="7" /></rect>
+ <disk><color red="0.2" green="0.8" blue="0.6" /><bounds x="107.5" y="8" width="2.5" height="1.5" /></disk>
+ </element>
+
+ <!-- rhythm sound slider -->
+ <element name="rhythm_sw">
+ <rect><color red="0.06" green="0.06" blue="0.06" /><bounds x="0" y="0" width="104" height="8" /></rect>
+ <rect><color red="0" green="0" blue="0" /><bounds x="4" yc="4" width="96" height="4" /></rect>
+ <rect>
+ <color red="0.12" green="0.12" blue="0.12" />
+ <bounds state="0x0001" xc="6" y="0" width="12" height="8" />
+ <bounds state="0x0002" xc="12" y="0" width="12" height="8" />
+ <bounds state="0x0004" xc="18" y="0" width="12" height="8" />
+ <bounds state="0x0008" xc="24" y="0" width="12" height="8" />
+ <bounds state="0x0010" xc="30" y="0" width="12" height="8" />
+ <bounds state="0x0020" xc="36" y="0" width="12" height="8" />
+ <bounds state="0x0040" xc="42" y="0" width="12" height="8" />
+ <bounds state="0x0080" xc="48" y="0" width="12" height="8" />
+ <bounds state="0x0100" xc="54" y="0" width="12" height="8" />
+ <bounds state="0x0200" xc="60" y="0" width="12" height="8" />
+ <bounds state="0x0400" xc="66" y="0" width="12" height="8" />
+ <bounds state="0x0800" xc="72" y="0" width="12" height="8" />
+ <bounds state="0x1000" xc="80" y="0" width="12" height="8" />
+ <bounds state="0x2000" xc="86" y="0" width="12" height="8" />
+ <bounds state="0x4000" xc="92" y="0" width="12" height="8" />
+ <bounds state="0x8000" xc="98" y="0" width="12" height="8" />
+ </rect>
+ <rect>
+ <color red="1" green="1" blue="1" />
+ <bounds state="0x0001" xc="6" y="0" width="1" height="8" />
+ <bounds state="0x0002" xc="12" y="0" width="1" height="8" />
+ <bounds state="0x0004" xc="18" y="0" width="1" height="8" />
+ <bounds state="0x0008" xc="24" y="0" width="1" height="8" />
+ <bounds state="0x0010" xc="30" y="0" width="1" height="8" />
+ <bounds state="0x0020" xc="36" y="0" width="1" height="8" />
+ <bounds state="0x0040" xc="42" y="0" width="1" height="8" />
+ <bounds state="0x0080" xc="48" y="0" width="1" height="8" />
+ <bounds state="0x0100" xc="54" y="0" width="1" height="8" />
+ <bounds state="0x0200" xc="60" y="0" width="1" height="8" />
+ <bounds state="0x0400" xc="66" y="0" width="1" height="8" />
+ <bounds state="0x0800" xc="72" y="0" width="1" height="8" />
+ <bounds state="0x1000" xc="80" y="0" width="1" height="8" />
+ <bounds state="0x2000" xc="86" y="0" width="1" height="8" />
+ <bounds state="0x4000" xc="92" y="0" width="1" height="8" />
+ <bounds state="0x8000" xc="98" y="0" width="1" height="8" />
+ </rect>
+ </element>
+
+ <group name="rhythm_slider">
+ <repeat count="16">
+ <param name="x" start="6" increment="6" />
+ <param name="mask" start="1" lshift="1" />
+ <element ref="grey" inputtag="RHYTHM" inputmask="~mask~"><bounds xc="~x~" y="5" width="4" height="8" /></element>
+ </repeat>
+ <element ref="bd"><bounds xc="6" y="0" width="10" height="5" /></element>
+ <element ref="sd"><bounds xc="12" y="13" width="10" height="5" /></element>
+ <element ref="lt"><bounds xc="18" y="0" width="10" height="5" /></element>
+ <element ref="ht"><bounds xc="24" y="13" width="10" height="5" /></element>
+ <element ref="lb"><bounds xc="30" y="0" width="10" height="5" /></element>
+ <element ref="hb"><bounds xc="36" y="13" width="10" height="5" /></element>
+ <element ref="ch"><bounds xc="42" y="0" width="10" height="5" /></element>
+ <element ref="rim"><bounds xc="48" y="13" width="10" height="5" /></element>
+ <element ref="oh"><bounds xc="54" y="0" width="10" height="5" /></element>
+ <element ref="cb"><bounds xc="60" y="13" width="10" height="5" /></element>
+ <element ref="ride"><bounds xc="66" y="0" width="10" height="5" /></element>
+ <element ref="claps"><bounds xc="72" y="13" width="15" height="5" /></element>
+ <element ref="num1"><bounds xc="80" y="0" width="10" height="5" /></element>
+ <element ref="num2"><bounds xc="86" y="13" width="10" height="5" /></element>
+ <element ref="num3"><bounds xc="92" y="0" width="10" height="5" /></element>
+ <element ref="num4"><bounds xc="98" y="13" width="10" height="5" /></element>
+ <element ref="rhythm_sw" name="rhythm_pos"><bounds x="0" y="5" width="104" height="8" /></element>
+ </group>
+
+ <!-- rhythm mode slider -->
+ <element name="mode_sw">
+ <rect><color red="0.06" green="0.06" blue="0.06" /><bounds x="0" y="0" width="36" height="8" /></rect>
+ <rect><color red="0" green="0" blue="0" /><bounds x="4" yc="4" width="28" height="4" /></rect>
+ <rect>
+ <color red="0.12" green="0.12" blue="0.12" />
+ <bounds state="0x0001" xc="6" y="0" width="12" height="8" />
+ <bounds state="0x0002" xc="12" y="0" width="12" height="8" />
+ <bounds state="0x0004" xc="18" y="0" width="12" height="8" />
+ <bounds state="0x0008" xc="24" y="0" width="12" height="8" />
+ <bounds state="0x0010" xc="30" y="0" width="12" height="8" />
+ </rect>
+ <rect>
+ <color red="1" green="1" blue="1" />
+ <bounds state="0x0001" xc="6" y="0" width="1" height="8" />
+ <bounds state="0x0002" xc="12" y="0" width="1" height="8" />
+ <bounds state="0x0004" xc="18" y="0" width="1" height="8" />
+ <bounds state="0x0008" xc="24" y="0" width="1" height="8" />
+ <bounds state="0x0010" xc="30" y="0" width="1" height="8" />
+ </rect>
+ </element>
+
+ <group name="mode_slider">
+ <repeat count="5">
+ <param name="x" start="11" increment="6" />
+ <param name="mask" start="1" lshift="1" />
+ <element ref="grey" inputtag="MODE" inputmask="~mask~"><bounds xc="~x~" y="10" width="4" height="8" /></element>
+ </repeat>
+ <element ref="white"><bounds x="0" yc="2.5" width="23" height="0.5" /></element>
+ <element ref="memory1"><bounds x="0" y="0" width="15" height="5" /></element>
+ <element ref="white"><bounds x="0" yc="7.5" width="12" height="0.5" /></element>
+ <element ref="play1"><bounds x="0" y="5" width="8" height="5" /></element>
+ <element ref="mem44"><bounds xc="17" y="5" width="10" height="5" /></element>
+ <element ref="mem34"><bounds xc="23" y="5" width="10" height="5" /></element>
+
+ <element ref="white"><bounds x="29" yc="2.5" width="10" height="0.5" /></element>
+ <element ref="white"><bounds x="29" y="2.5" width="0.5" height="5" /></element>
+ <element ref="memory2"><bounds x="31" y="0" width="15" height="5" /></element>
+ <element ref="white"><bounds x="35" yc="7.5" width="10" height="0.5" /></element>
+ <element ref="play2"><bounds x="37" y="5" width="9" height="5" /></element>
+ <element ref="mode_sw" name="mode_pos"><bounds x="5" y="10" width="36" height="8" /></element>
+ <element ref="pattern"><bounds xc="12" y="18" width="20" height="5" /></element>
+ <element ref="song"><bounds xc="35" y="18" width="10" height="5" /></element>
+ </group>
+
+ <!-- effect group -->
+ <group name="effect">
+ <element ref="grey"><bounds x="0" y="0" width="32" height="78" /></element>
+ <element ref="white"><bounds x="1" y="1" width="0.75" height="74" /></element>
+ <element ref="white"><bounds xc="17" y="50" width="30" height="0.75" /></element>
+
+ <element ref="led" name="led0.4"><bounds xc="17" y="26" width="6" height="3" /></element>
+ <element ref="insert"><bounds xc="17" y="32" width="15" height="3" /></element>
+ <element ref="button" inputtag="KC0" inputmask="0x200"><bounds xc="17" y="37" width="15" height="5" /></element>
+ <element ref="solo"><bounds xc="17" y="44" width="28" height="5" /></element>
+
+ <element ref="led" name="led0.2"><bounds xc="17" y="52" width="6" height="3" /></element>
+ <element ref="on_off"><bounds xc="17" y="58" width="15" height="3" /></element>
+ <element ref="button" inputtag="KC0" inputmask="0x400"><bounds xc="17" y="63" width="15" height="5" /></element>
+ <element ref="portamento1"><bounds xc="17" y="70" width="28" height="5" /></element>
+ </group>
+
+ <!-- rhythm group -->
+ <group name="rhythm">
+ <element ref="grey"><bounds x="0" y="0" width="206" height="78" /></element>
+ <element ref="white"><bounds x="1" y="1" width="0.75" height="74" /></element>
+
+ <group ref="rhythm_slider"><bounds xc="100" y="6" width="75" height="13" /></group>
+ <element ref="rhythm_sound"><bounds xc="100" y="20" width="75" height="5" /></element>
+ <element ref="led" name="led0.3"><bounds xc="144" y="11" width="6" height="3" /></element>
+ <element ref="pd"><bounds xc="144" y="15" width="15" height="4" /></element>
+
+ <group ref="mode_slider"><bounds xc="180" y="1" width="44" height="18" /></group>
+ <element ref="rhythm_mode"><bounds xc="180" y="20" width="40" height="5" /></element>
+
+ <element ref="arrow_down"><bounds xc="12.5" y="31" width="15" height="5" /></element>
+ <element ref="button" inputtag="KC3" inputmask="0x100"><bounds x="5" y="37" width="15" height="5" /></element>
+ <element ref="arrow_up"><bounds xc="29.5" y="31" width="15" height="5" /></element>
+ <element ref="button" inputtag="KC3" inputmask="0x200"><bounds x="22" y="37" width="15" height="5" /></element>
+ <element ref="tempo"><bounds xc="21" y="44" width="15" height="4" /></element>
+
+ <element ref="button_num_1" inputtag="KC1" inputmask="0x40"><bounds x="45" y="37" width="15" height="5" /></element>
+ <element ref="button_num_2" inputtag="KC1" inputmask="0x80"><bounds x="61" y="37" width="15" height="5" /></element>
+ <element ref="button_num_3" inputtag="KC1" inputmask="0x100"><bounds x="77" y="37" width="15" height="5" /></element>
+ <element ref="button_num_4" inputtag="KC1" inputmask="0x200"><bounds x="93" y="37" width="15" height="5" /></element>
+ <element ref="button_num_5" inputtag="KC1" inputmask="0x400"><bounds x="109" y="37" width="15" height="5" /></element>
+ <element ref="button_num_6" inputtag="KC2" inputmask="0x40"><bounds x="125" y="37" width="15" height="5" /></element>
+ <element ref="button_num_7" inputtag="KC2" inputmask="0x80"><bounds x="141" y="37" width="15" height="5" /></element>
+ <element ref="button_num_8" inputtag="KC2" inputmask="0x100"><bounds x="157" y="37" width="15" height="5" /></element>
+ <element ref="button_num_9" inputtag="KC2" inputmask="0x200"><bounds x="173" y="37" width="15" height="5" /></element>
+ <element ref="button_num_10" inputtag="KC2" inputmask="0x400"><bounds x="189" y="37" width="15" height="5" /></element>
+
+ <element ref="led" name="led0.1"><bounds xc="21" y="52" width="6" height="3" /></element>
+ <element ref="led_g" name="led0.0"><bounds xc="21" y="52" width="6" height="3" /></element>
+ <element ref="start"><bounds xc="12.5" y="55" width="15" height="4" /></element>
+ <element ref="stop"><bounds xc="12.5" y="59" width="15" height="4" /></element>
+ <element ref="button_yellow" inputtag="KC3" inputmask="0x400"><bounds x="5" y="63" width="15" height="5" /></element>
+ <element ref="record"><bounds xc="12.5" y="69" width="15" height="3" /></element>
+ <element ref="synchro"><bounds xc="29.5" y="57" width="15" height="4" /></element>
+ <element ref="button_yellow" inputtag="KC3" inputmask="0x800"><bounds x="22" y="63" width="15" height="5" /></element>
+ <element ref="clear"><bounds xc="29.5" y="69" width="15" height="3" /></element>
+
+ <element ref="intro"><bounds xc="72.5" y="57" width="45" height="4" /></element>
+ <element ref="button_blue" inputtag="KC3" inputmask="0x80"><bounds x="50" y="63" width="45" height="5" /></element>
+ <element ref="bar"><bounds xc="72.5" y="69" width="45" height="3" /></element>
+
+ <element ref="preset"><bounds xc="143.5" y="55" width="15" height="4" /></element>
+ <element ref="num1"><bounds xc="143.5" y="59" width="15" height="4" /></element>
+ <element ref="button" inputtag="KC1" inputmask="0x800"><bounds x="136" y="63" width="15" height="5" /></element>
+ <element ref="preset"><bounds xc="160.5" y="55" width="15" height="4" /></element>
+ <element ref="num2"><bounds xc="160.5" y="59" width="15" height="4" /></element>
+ <element ref="button" inputtag="KC2" inputmask="0x800"><bounds x="153" y="63" width="15" height="5" /></element>
+ <element ref="program"><bounds xc="178.5" y="55" width="15" height="4" /></element>
+ <element ref="button" inputtag="KC3" inputmask="0x40"><bounds x="171" y="63" width="15" height="5" /></element>
+
+ <element ref="rhythm"><bounds xc="103" y="70" width="64" height="5" /></element>
+ </group>
+
+ <!-- data entry group -->
+ <group name="data">
+ <element ref="black"><bounds x="0" y="0" width="106" height="48" /></element>
+ <element ref="white"><bounds xc="53" y="2" width="96" height="23" /></element>
+ <element ref="black"><bounds xc="53" y="3" width="94.5" height="21.5" /></element>
+ <screen index="0"><bounds xc="53" yc="13.5" width="85.5" height="17.975" /></screen>
+
+ <element ref="midi"><bounds xc="12.5" y="33" width="15" height="4" /></element>
+ <element ref="button_grey" inputtag="KC8" inputmask="0x80"><bounds x="5" y="37" width="15" height="5" /></element>
+ <element ref="transpose"><bounds xc="29.5" y="33" width="18" height="4" /></element>
+ <element ref="button_grey" inputtag="KC8" inputmask="0x200"><bounds x="22" y="37" width="15" height="5" /></element>
+ <element ref="portamento2"><bounds xc="46.5" y="29" width="20" height="4" /></element>
+ <element ref="speed"><bounds xc="46.5" y="33" width="15" height="4" /></element>
+ <element ref="button_grey" inputtag="KC8" inputmask="0x100"><bounds x="39" y="37" width="15" height="5" /></element>
+ <element ref="bend"><bounds xc="63.5" y="29" width="15" height="4" /></element>
+ <element ref="range"><bounds xc="63.5" y="33" width="15" height="4" /></element>
+ <element ref="check"><bounds xc="63.5" y="43" width="15" height="3" /></element>
+ <element ref="button_grey" inputtag="KC0" inputmask="0x800"><bounds x="56" y="37" width="15" height="5" /></element>
+ <element ref="mt"><bounds xc="92.5" y="33" width="15" height="4" /></element>
+ <element ref="button_blue" inputtag="KC8" inputmask="0x40"><bounds x="85" y="37" width="15" height="5" /></element>
+
+ <element ref="grey"><bounds x="0" y="50" width="106" height="28" /></element>
+
+ <element ref="value"><bounds xc="53" y="51" width="64" height="4" /></element>
+ <element ref="save"><bounds xc="43" y="55" width="15" height="3" /></element>
+ <element ref="button_down" inputtag="KC8" inputmask="0x400"><bounds xc="43" y="58" width="15" height="10" /></element>
+ <element ref="load"><bounds xc="63" y="55" width="15" height="3" /></element>
+ <element ref="button_up" inputtag="KC8" inputmask="0x800"><bounds xc="63" y="58" width="15" height="10" /></element>
+ <element ref="data_entry"><bounds xc="53" y="70" width="64" height="5" /></element>
+ </group>
+
+ <!-- PD sound group -->
+ <group name="pd">
+ <element ref="black"><bounds x="0" y="0" width="244" height="48" /></element>
+ <element ref="grey"><bounds x="2" y="50" width="252" height="28" /></element>
+
+ <element ref="button_num_5" inputtag="KC9" inputmask="0x80"><bounds x="45" y="53" width="15" height="5" /></element>
+ <element ref="button_num_6" inputtag="KC9" inputmask="0x100"><bounds x="65" y="53" width="15" height="5" /></element>
+ <element ref="button_num_7" inputtag="KC9" inputmask="0x200"><bounds x="85" y="53" width="15" height="5" /></element>
+ <element ref="button_num_8" inputtag="KC9" inputmask="0x400"><bounds x="105" y="53" width="15" height="5" /></element>
+ <element ref="button_num_9" inputtag="KC9" inputmask="0x800"><bounds x="125" y="53" width="15" height="5" /></element>
+
+ <element ref="button_clear" inputtag="KC10" inputmask="0x400"><bounds x="145" y="58" width="15" height="5" /></element>
+
+ <element ref="button_num_0" inputtag="KC10" inputmask="0x40"><bounds x="45" y="63" width="15" height="5" /></element>
+ <element ref="button_num_1" inputtag="KC10" inputmask="0x80"><bounds x="65" y="63" width="15" height="5" /></element>
+ <element ref="button_num_2" inputtag="KC10" inputmask="0x100"><bounds x="85" y="63" width="15" height="5" /></element>
+ <element ref="button_num_3" inputtag="KC10" inputmask="0x200"><bounds x="105" y="63" width="15" height="5" /></element>
+ <element ref="button_num_4" inputtag="KC9" inputmask="0x40"><bounds x="125" y="63" width="15" height="5" /></element>
+
+ <element ref="pd_sound"><bounds xc="92.5" y="70" width="64" height="5" /></element>
+
+ <element ref="arrow_down"><bounds xc="220" y="53" width="15" height="5" /></element>
+ <element ref="button_grey" inputtag="KC11" inputmask="0x40"><bounds xc="220" y="60" width="15" height="8" /></element>
+ <element ref="arrow_up"><bounds xc="240" y="53" width="15" height="5" /></element>
+ <element ref="button_grey" inputtag="KC11" inputmask="0x80"><bounds xc="240" y="60" width="15" height="8" /></element>
+ <element ref="tune"><bounds xc="230" y="70" width="64" height="5" /></element>
+ </group>
+
+ <!-- keyboard primitives -->
+ <element name="keyfill"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="whitekey" defstate="0">
+ <rect state="0"><bounds x="0" y="0" width="79" height="252" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="1"><bounds x="0" y="0" width="79" height="252" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ </element>
+ <element name="whitekey-l" defstate="0">
+ <rect state="0"><bounds x="0" y="0" width="45" height="252" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="0"><bounds x="0" y="252" width="79" height="172" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="1"><bounds x="0" y="0" width="45" height="252" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ <rect state="1"><bounds x="0" y="252" width="79" height="172" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ </element>
+ <element name="whitekey-m" defstate="0">
+ <rect state="0"><bounds x="13" y="0" width="53" height="252" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="0"><bounds x="0" y="252" width="79" height="172" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="1"><bounds x="13" y="0" width="53" height="252" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ <rect state="1"><bounds x="0" y="252" width="79" height="172" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ </element>
+ <element name="whitekey-lm" defstate="0">
+ <rect state="0"><bounds x="10" y="0" width="44" height="252" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="0"><bounds x="0" y="252" width="79" height="172" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="1"><bounds x="10" y="0" width="44" height="252" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ <rect state="1"><bounds x="0" y="252" width="79" height="172" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ </element>
+ <element name="whitekey-rm" defstate="0">
+ <rect state="0"><bounds x="22" y="0" width="44" height="252" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="0"><bounds x="0" y="252" width="79" height="172" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="1"><bounds x="22" y="0" width="44" height="252" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ <rect state="1"><bounds x="0" y="252" width="79" height="172" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ </element>
+ <element name="whitekey-r" defstate="0">
+ <rect state="0"><bounds x="34" y="0" width="45" height="252" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="0"><bounds x="0" y="252" width="79" height="172" /><color red="1.0" green="1.0" blue="1.0" /></rect>
+ <rect state="1"><bounds x="34" y="0" width="45" height="252" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ <rect state="1"><bounds x="0" y="252" width="79" height="172" /><color red="0.9" green="0.9" blue="0.9" /></rect>
+ </element>
+ <element name="blackkey" defstate="0">
+ <rect state="0"><bounds x="0" y="0" width="44" height="252" /><color red="0.0" green="0.0" blue="0.0" /></rect>
+ <rect state="0"><bounds x="4" y="0" width="36" height="248" /><color red="0.1" green="0.1" blue="0.1" /></rect>
+ <rect state="1"><bounds x="0" y="0" width="44" height="252" /><color red="0.1" green="0.1" blue="0.1" /></rect>
+ <rect state="1"><bounds x="4" y="0" width="36" height="248" /><color red="0.1" green="0.1" blue="0.1" /></rect>
+ </element>
+
+ <!-- keyboard group -->
+ <group name="keyboard">
+ <element ref="keyfill"><bounds x="72" y="98" width="2396" height="444" /></element>
+
+ <!-- octave 1 -->
+ <element ref="blackkey" inputtag="KC0" inputmask="0x02"><bounds x="130" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC0" inputmask="0x08"><bounds x="233" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC1" inputmask="0x01"><bounds x="373" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC1" inputmask="0x04"><bounds x="467" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC1" inputmask="0x10"><bounds x="561" y="108" width="44" height="252" /></element>
+ <element ref="whitekey-l" inputtag="KC0" inputmask="0x01"><bounds x="82" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-m" inputtag="KC0" inputmask="0x04"><bounds x="164" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-r" inputtag="KC0" inputmask="0x10"><bounds x="246" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-l" inputtag="KC0" inputmask="0x20"><bounds x="328" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-lm" inputtag="KC1" inputmask="0x02"><bounds x="410" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-rm" inputtag="KC1" inputmask="0x08"><bounds x="492" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-r" inputtag="KC1" inputmask="0x20"><bounds x="574" y="108" width="79" height="424" /></element>
+
+ <!-- octave 2 -->
+ <element ref="blackkey" inputtag="KC2" inputmask="0x02"><bounds x="704" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC2" inputmask="0x08"><bounds x="807" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC3" inputmask="0x01"><bounds x="947" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC3" inputmask="0x04"><bounds x="1041" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC3" inputmask="0x10"><bounds x="1135" y="108" width="44" height="252" /></element>
+ <element ref="whitekey-l" inputtag="KC2" inputmask="0x01"><bounds x="656" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-m" inputtag="KC2" inputmask="0x04"><bounds x="738" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-r" inputtag="KC2" inputmask="0x10"><bounds x="820" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-l" inputtag="KC2" inputmask="0x20"><bounds x="902" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-lm" inputtag="KC3" inputmask="0x02"><bounds x="984" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-rm" inputtag="KC3" inputmask="0x08"><bounds x="1066" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-r" inputtag="KC3" inputmask="0x20"><bounds x="1148" y="108" width="79" height="424" /></element>
+
+ <!-- octave 3 -->
+ <element ref="blackkey" inputtag="KC4" inputmask="0x02"><bounds x="1278" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC4" inputmask="0x08"><bounds x="1381" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC5" inputmask="0x01"><bounds x="1521" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC5" inputmask="0x04"><bounds x="1615" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC5" inputmask="0x10"><bounds x="1709" y="108" width="44" height="252" /></element>
+ <element ref="whitekey-l" inputtag="KC4" inputmask="0x01"><bounds x="1230" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-m" inputtag="KC4" inputmask="0x04"><bounds x="1312" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-r" inputtag="KC4" inputmask="0x10"><bounds x="1394" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-l" inputtag="KC4" inputmask="0x20"><bounds x="1476" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-lm" inputtag="KC5" inputmask="0x02"><bounds x="1558" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-rm" inputtag="KC5" inputmask="0x08"><bounds x="1640" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-r" inputtag="KC5" inputmask="0x20"><bounds x="1722" y="108" width="79" height="424" /></element>
+
+ <!-- octave 4 -->
+ <element ref="blackkey" inputtag="KC6" inputmask="0x02"><bounds x="1852" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC6" inputmask="0x08"><bounds x="1955" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC7" inputmask="0x01"><bounds x="2095" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC7" inputmask="0x04"><bounds x="2189" y="108" width="44" height="252" /></element>
+ <element ref="blackkey" inputtag="KC7" inputmask="0x10"><bounds x="2283" y="108" width="44" height="252" /></element>
+ <element ref="whitekey-l" inputtag="KC6" inputmask="0x01"><bounds x="1804" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-m" inputtag="KC6" inputmask="0x04"><bounds x="1886" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-r" inputtag="KC6" inputmask="0x10"><bounds x="1968" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-l" inputtag="KC6" inputmask="0x20"><bounds x="2050" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-lm" inputtag="KC7" inputmask="0x02"><bounds x="2132" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-rm" inputtag="KC7" inputmask="0x08"><bounds x="2214" y="108" width="79" height="424" /></element>
+ <element ref="whitekey-r" inputtag="KC7" inputmask="0x20"><bounds x="2296" y="108" width="79" height="424" /></element>
+
+ <!-- final key -->
+ <element ref="whitekey" inputtag="KC8" inputmask="0x01"><bounds x="2378" y="108" width="79" height="424" /></element>
+ </group>
+
+ <group name="panel">
+ <group ref="effect"><bounds x="0" y="0" width="32" height="78" /></group>
+ <group ref="rhythm"><bounds x="32" y="0" width="206" height="78" /></group>
+ <group ref="data"><bounds x="240" y="0" width="106" height="78" /></group>
+ <group ref="pd"><bounds x="346" y="0" width="254" height="78" /></group>
+ </group>
+
+ <view name="Keyboard">
+ <bounds x="0" y="0" width="640" height="202" />
+ <element ref="bg"><bounds x="0" y="16" width="640" height="186" /></element>
+
+ <element ref="grey"><bounds x="0" y="18" width="36" height="184" /></element>
+ <element ref="grey"><bounds x="620" y="18" width="36" height="184" /></element>
+
+ <group ref="panel"><bounds x="36" y="18" width="600" height="78" /></group>
+
+ <element ref="led" name="led0.5"><bounds xc="630" y="40" width="6" height="3" /></element>
+ <element ref="power"><bounds xc="630" y="50" width="64" height="5" /></element>
+
+ <element ref="grey"><bounds xc="328" y="98" width="580" height="40" /></element>
+ <element ref="note_chart"><bounds x="40" y="99" width="135" height="12" /></element>
+ <element ref="note_chart"><bounds x="180" y="99" width="135" height="12" /></element>
+ <element ref="note_chart"><bounds x="320" y="99" width="135" height="12" /></element>
+ <element ref="mem34"><bounds x="442" y="105" width="15" height="4" /></element>
+ <element ref="note_chart"><bounds x="460" y="99" width="135" height="12" /></element>
+ <element ref="mem44"><bounds x="582" y="105" width="15" height="4" /></element>
+ <element ref="accent"><bounds xc="608" y="105" width="15" height="4" /></element>
+ <element ref="arrow_left"><bounds xc="245" y="110" width="15" height="6" /></element>
+
+ <group ref="keyboard"><bounds xc="328" y="116" width="584" height="86" /></group>
+ </view>
+
+</mamelayout>
diff --git a/src/mame/layout/sz1.lay b/src/mame/layout/sz1.lay
new file mode 100644
index 00000000000..fbb7d9f2c3e
--- /dev/null
+++ b/src/mame/layout/sz1.lay
@@ -0,0 +1,230 @@
+<?xml version="1.0"?>
+<!--
+license:CC0-1.0
+-->
+
+<mamelayout version="2">
+ <element name="bg"><rect><color red="0.06" green="0.06" blue="0.06" /></rect></element>
+ <element name="grey"><rect><color red="0.04" green="0.04" blue="0.04" /></rect></element>
+ <element name="yellow"><rect><color red="0.9" green="0.85" blue="0.45" /></rect></element>
+
+ <element name="led" defstate="0">
+ <rect state="0"><color red="0.2" green="0" blue="0" /></rect>
+ <rect state="1"><color red="1" green="0.1" blue="0" /></rect>
+ </element>
+
+ <!-- text elements -->
+ <element name="copy"><text string="COPY" /></element>
+ <element name="edit"><text string="EDIT" /></element>
+ <element name="insert"><text string="INSERT" /></element>
+ <element name="delete"><text string="DELETE" /></element>
+
+ <element name="midi"><text string="MIDI" /></element>
+ <element name="repeat"><text string="REPEAT" /></element>
+ <element name="track"><text string="TRACK" /></element>
+ <element name="track1"><text string="1" /></element>
+ <element name="track2"><text string="2" /></element>
+ <element name="track3"><text string="3" /></element>
+ <element name="track4"><text string="4" /></element>
+ <element name="cartridge"><text string="CARTRIDGE" /></element>
+ <element name="mt"><text string="/MT" /></element>
+
+ <element name="note4"><text string="1/4" /></element>
+ <element name="note2"><text string="1/2" /></element>
+ <element name="note1"><text string="1/1" /></element>
+ <element name="note8"><text string="1/8" /></element>
+ <element name="note16"><text string="1/16" /></element>
+ <element name="note32"><text string="1/32" /></element>
+ <element name="rest"><text string="REST" /></element>
+ <element name="dot"><text string="DOT" /></element>
+ <element name="triplet"><text string="TRIPLET" /></element>
+ <element name="tie"><text string="TIE" /></element>
+ <element name="manual_data"><text string="MANUAL DATA" /></element>
+
+ <element name="metronome"><text string="METRONOME" /></element>
+ <element name="enter"><text string="/ENTER" /></element>
+ <element name="tempo"><text string="TEMPO" /></element>
+ <element name="down"><text string="DOWN" /></element>
+ <element name="up"><text string="UP" /></element>
+
+ <element name="record_track"><text string="RECORD TRACK" /></element>
+ <element name="realtime"><text string="REAL TIME" /></element>
+ <element name="manual"><text string="MANUAL" /></element>
+ <element name="record"><text string="RECORD" /></element>
+ <element name="reset"><text string="RESET" /></element>
+
+ <element name="rev"><text string="REV" /></element>
+ <element name="fwd"><text string="FWD" /></element>
+ <element name="play"><text string="PLAY" /></element>
+ <element name="stop"><text string="STOP" /></element>
+ <element name="save"><text string="SAVE" /></element>
+ <element name="load"><text string="LOAD" /></element>
+ <element name="check"><text string="CHECK" /></element>
+
+ <!-- button primitives -->
+ <element name="button_black" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="15" /></rect>
+ <rect state="0"><color red="0.14" green="0.14" blue="0.14" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ <rect state="1"><color red="0.08" green="0.08" blue="0.08" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ </element>
+ <element name="button_black_small" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="10" height="15" /></rect>
+ <rect state="0"><color red="0.14" green="0.14" blue="0.14" /><bounds xc="5" yc="7.5" width="8.5" height="13.5" /></rect>
+ <rect state="1"><color red="0.08" green="0.08" blue="0.08" /><bounds xc="5" yc="7.5" width="8.5" height="13.5" /></rect>
+ </element>
+
+ <element name="button_tempo" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="15" /></rect>
+ <rect state="0"><color red="0.11" green="0.1" blue="0.1" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ <rect state="1"><color red="0.075" green="0.07" blue="0.07" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ </element>
+
+ <element name="button_track" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="15" /></rect>
+ <rect state="0"><color red="0.45" green="0.45" blue="0.45" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ <rect state="1"><color red="0.3" green="0.3" blue="0.3" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ </element>
+ <element name="button_track_small" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="10" height="15" /></rect>
+ <rect state="0"><color red="0.45" green="0.45" blue="0.45" /><bounds xc="5" yc="7.5" width="8.5" height="13.5" /></rect>
+ <rect state="1"><color red="0.3" green="0.3" blue="0.3" /><bounds xc="5" yc="7.5" width="8.5" height="13.5" /></rect>
+ </element>
+
+ <element name="button_blue" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="15" /></rect>
+ <rect state="0"><color red="0.35" green="0.45" blue="0.92" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ <rect state="1"><color red="0.2" green="0.3" blue="0.75" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ </element>
+
+ <element name="button_record" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="15" height="15" /></rect>
+ <rect state="0"><color red="0.55" green="0.6" blue="0.8" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ <rect state="1"><color red="0.42" green="0.45" blue="0.6" /><bounds xc="7.5" yc="7.5" width="13.5" height="13.5" /></rect>
+ </element>
+ <element name="button_copy" defstate="0">
+ <rect><color red="0.05" green="0.05" blue="0.05" /><bounds x="0" y="0" width="10" height="15" /></rect>
+ <rect state="0"><color red="0.55" green="0.6" blue="0.8" /><bounds xc="5" yc="7.5" width="8.5" height="13.5" /></rect>
+ <rect state="1"><color red="0.42" green="0.45" blue="0.6" /><bounds xc="5" yc="7.5" width="8.5" height="13.5" /></rect>
+ </element>
+
+ <view name="Normal">
+ <element ref="bg"><bounds x="-15" y="30" width="215" height="110" /></element>
+ <element ref="grey"><bounds x="-15" y="30" width="215" height="2" /></element>
+ <element ref="grey"><bounds x="-15" y="45" width="215" height="2" /></element>
+
+ <screen index="0"><bounds x="15" y="33" width="50" height="10.93" /></screen>
+
+ <!-- copy/insert/delete -->
+ <element ref="button_copy" inputtag="KC3" inputmask="0x01"><bounds xc="22.5" y="60" width="10" height="15" /></element>
+ <element ref="copy"><bounds xc="22.5" yc="67.5" width="8" height="3" /></element>
+ <element ref="edit"><bounds xc="45" yc="52" width="20" height="3" /></element>
+ <element ref="yellow"><bounds xc="45" y="54" width="24" height="0.5" /></element>
+ <element ref="button_black_small" inputtag="KC3" inputmask="0x02"><bounds xc="37.5" y="60" width="10" height="15" /></element>
+ <element ref="insert"><bounds xc="37.5" yc="67.5" width="8" height="3" /></element>
+ <element ref="button_black_small" inputtag="KC3" inputmask="0x04"><bounds xc="52.5" y="60" width="10" height="15" /></element>
+ <element ref="delete"><bounds xc="52.5" yc="67.5" width="8" height="3" /></element>
+
+ <!-- manual data -->
+ <element ref="yellow"><bounds xc="30" y="84" width="58" height="1" /></element>
+ <element ref="yellow"><bounds xc="30" y="138" width="58" height="1" /></element>
+
+ <element ref="button_black" inputtag="KC2" inputmask="0x01"><bounds x="15" y="90" width="15" height="15" /></element>
+ <element ref="note4"><bounds xc="22.5" yc="97.5" width="13" height="4" /></element>
+ <element ref="button_black" inputtag="KC2" inputmask="0x02"><bounds x="30" y="90" width="15" height="15" /></element>
+ <element ref="note2"><bounds xc="37.5" yc="97.5" width="10" height="4" /></element>
+ <element ref="button_black" inputtag="KC2" inputmask="0x04"><bounds x="45" y="90" width="15" height="15" /></element>
+ <element ref="note1"><bounds xc="52.5" yc="97.5" width="10" height="4" /></element>
+
+ <element ref="button_black" inputtag="KC1" inputmask="0x01"><bounds x="15" y="105" width="15" height="15" /></element>
+ <element ref="note8"><bounds xc="22.5" yc="112.5" width="13" height="4" /></element>
+ <element ref="button_black" inputtag="KC1" inputmask="0x02"><bounds x="30" y="105" width="15" height="15" /></element>
+ <element ref="note16"><bounds xc="37.5" yc="112.5" width="13" height="4" /></element>
+ <element ref="button_black" inputtag="KC1" inputmask="0x04"><bounds x="45" y="105" width="15" height="15" /></element>
+ <element ref="note32"><bounds xc="52.5" yc="112.5" width="13" height="4" /></element>
+
+ <element ref="button_black" inputtag="KC0" inputmask="0x01"><bounds x="0" y="120" width="15" height="15" /></element>
+ <element ref="rest"><bounds xc="7.5" yc="127.5" width="13" height="3" /></element>
+ <element ref="button_black" inputtag="KC0" inputmask="0x02"><bounds x="15" y="120" width="15" height="15" /></element>
+ <element ref="dot"><bounds xc="22.5" yc="127.5" width="13" height="3" /></element>
+ <element ref="button_black" inputtag="KC0" inputmask="0x04"><bounds x="30" y="120" width="15" height="15" /></element>
+ <element ref="triplet"><bounds xc="37.5" yc="127.5" width="13" height="3" /></element>
+ <element ref="button_black" inputtag="KC0" inputmask="0x08"><bounds x="45" y="120" width="15" height="15" /></element>
+ <element ref="tie"><bounds xc="52.5" yc="127.5" width="13" height="3" /></element>
+ <element ref="manual_data"><bounds xc="30" y="135" width="30" height="3" /></element>
+
+ <!-- midi / repeat -->
+ <element ref="led" name="led1.3"><bounds xc="82.5" yc="57" width="4" height="2" /></element>
+ <element ref="led" name="led1.4"><bounds xc="102.5" yc="57" width="4" height="2" /></element>
+ <element ref="button_track" inputtag="KC4" inputmask="0x04"><bounds x="75" y="60" width="15" height="15" /></element>
+ <element ref="midi"><bounds xc="82.5" yc="67.5" width="13" height="3" /></element>
+ <element ref="button_track" inputtag="KC4" inputmask="0x02"><bounds x="95" y="60" width="15" height="15" /></element>
+ <element ref="repeat"><bounds xc="102.5" yc="67.5" width="13" height="3" /></element>
+
+ <!-- metronome -->
+ <element ref="led" name="led1.5"><bounds xc="92.5" yc="87" width="4" height="2" /></element>
+ <element ref="button_tempo" inputtag="KC3" inputmask="0x08"><bounds xc="92.5" y="90" width="15" height="15" /></element>
+ <element ref="metronome"><bounds xc="92.5" yc="96" width="13" height="3" /></element>
+ <element ref="enter"><bounds xc="92.5" yc="99" width="13" height="3" /></element>
+
+ <!-- tempo -->
+ <element ref="button_tempo" inputtag="KC1" inputmask="0x08"><bounds x="75" y="120" width="15" height="15" /></element>
+ <element ref="down"><bounds xc="82.5" yc="127.5" width="13" height="4" /></element>
+ <element ref="button_tempo" inputtag="KC2" inputmask="0x08"><bounds x="95" y="120" width="15" height="15" /></element>
+ <element ref="up"><bounds xc="102.5" yc="127.5" width="13" height="4" /></element>
+
+ <!-- tracks, cartridge/mt -->
+ <element ref="led" name="led0.7"><bounds xc="130" yc="57" width="4" height="2" /></element>
+ <element ref="led" name="led1.0"><bounds xc="140" yc="57" width="4" height="2" /></element>
+ <element ref="led" name="led1.1"><bounds xc="150" yc="57" width="4" height="2" /></element>
+ <element ref="led" name="led1.2"><bounds xc="160" yc="57" width="4" height="2" /></element>
+ <element ref="track"><bounds xc="145" yc="52" width="20" height="3" /></element>
+ <element ref="yellow"><bounds xc="145" y="54" width="38" height="0.5" /></element>
+ <element ref="button_track_small" inputtag="KC2" inputmask="0x10"><bounds x="125" y="60" width="10" height="15" /></element>
+ <element ref="track1"><bounds xc="130" yc="67.5" width="8" height="4" /></element>
+ <element ref="button_track_small" inputtag="KC2" inputmask="0x20"><bounds x="135" y="60" width="10" height="15" /></element>
+ <element ref="track2"><bounds xc="140" yc="67.5" width="8" height="4" /></element>
+ <element ref="button_track_small" inputtag="KC2" inputmask="0x40"><bounds x="145" y="60" width="10" height="15" /></element>
+ <element ref="track3"><bounds xc="150" yc="67.5" width="8" height="4" /></element>
+ <element ref="button_track_small" inputtag="KC2" inputmask="0x80"><bounds x="155" y="60" width="10" height="15" /></element>
+ <element ref="track4"><bounds xc="160" yc="67.5" width="8" height="4" /></element>
+
+ <element ref="led" name="led1.6"><bounds xc="177.5" yc="57" width="4" height="2" /></element>
+ <element ref="button_track" inputtag="KC4" inputmask="0x80"><bounds x="170" y="60" width="15" height="15" /></element>
+ <element ref="cartridge"><bounds xc="177.5" yc="66" width="13" height="3" /></element>
+ <element ref="mt"><bounds xc="177.5" yc="69" width="13" height="3" /></element>
+
+ <element ref="yellow"><bounds xc="155" y="84" width="58" height="1" /></element>
+ <element ref="yellow"><bounds xc="155" y="138" width="58" height="1" /></element>
+ <!-- real time/manual/record/reset -->
+ <element ref="led" name="led0.4"><bounds xc="132.5" yc="87" width="4" height="2" /></element>
+ <element ref="led" name="led0.5"><bounds xc="147.5" yc="87" width="4" height="2" /></element>
+ <element ref="led" name="led0.6"><bounds xc="162.5" yc="87" width="4" height="2" /></element>
+ <element ref="button_blue" inputtag="KC1" inputmask="0x10"><bounds x="125" y="90" width="15" height="15" /></element>
+ <element ref="realtime"><bounds xc="132.5" yc="97.5" width="13" height="3" /></element>
+ <element ref="button_blue" inputtag="KC1" inputmask="0x20"><bounds x="140" y="90" width="15" height="15" /></element>
+ <element ref="manual"><bounds xc="147.5" yc="97.5" width="13" height="3" /></element>
+ <element ref="button_record" inputtag="KC1" inputmask="0x40"><bounds x="155" y="90" width="15" height="15" /></element>
+ <element ref="record"><bounds xc="162.5" yc="97.5" width="13" height="3" /></element>
+ <element ref="button_blue" inputtag="KC1" inputmask="0x80"><bounds x="170" y="90" width="15" height="15" /></element>
+ <element ref="reset"><bounds xc="177.5" yc="97.5" width="13" height="3" /></element>
+ <element ref="yellow"><bounds xc="140" y="106" width="28" height="0.5" /></element>
+ <element ref="record_track"><bounds xc="140" yc="109" width="20" height="3" /></element>
+
+ <!-- rev/fwd/play/stop -->
+ <element ref="led" name="led0.0"><bounds xc="132.5" yc="117" width="4" height="2" /></element>
+ <element ref="led" name="led0.1"><bounds xc="147.5" yc="117" width="4" height="2" /></element>
+ <element ref="led" name="led0.2"><bounds xc="162.5" yc="117" width="4" height="2" /></element>
+ <element ref="led" name="led0.3"><bounds xc="177.5" yc="117" width="4" height="2" /></element>
+ <element ref="button_blue" inputtag="KC0" inputmask="0x10"><bounds x="125" y="120" width="15" height="15" /></element>
+ <element ref="rev"><bounds xc="132.5" yc="127.5" width="13" height="3" /></element>
+ <element ref="save"><bounds xc="132.5" y="135" width="13" height="3" /></element>
+ <element ref="button_blue" inputtag="KC0" inputmask="0x20"><bounds x="140" y="120" width="15" height="15" /></element>
+ <element ref="fwd"><bounds xc="147.5" yc="127.5" width="13" height="3" /></element>
+ <element ref="load"><bounds xc="147.5" y="135" width="13" height="3" /></element>
+ <element ref="button_blue" inputtag="KC0" inputmask="0x40"><bounds x="155" y="120" width="15" height="15" /></element>
+ <element ref="play"><bounds xc="162.5" yc="127.5" width="13" height="3" /></element>
+ <element ref="check"><bounds xc="162.5" y="135" width="13" height="3" /></element>
+ <element ref="button_blue" inputtag="KC0" inputmask="0x80"><bounds x="170" y="120" width="15" height="15" /></element>
+ <element ref="stop"><bounds xc="177.5" yc="127.5" width="13" height="3" /></element>
+ </view>
+</mamelayout>
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 6ad39eb9e30..710fc28a0a1 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -15916,6 +15916,10 @@ mz1 // 1986 Casio (unreleased)
@source:casio/cz101.cpp
cz101 // 1984 Casio
+@source:casio/cz230s.cpp
+cz230s // 1985 Casio
+sz1 // 1985 Casio
+
@source:casio/fp200.cpp
fp200 //