ctk-530: New working machine (#10445)

New working machine
--------------------
Casio CTK-530 [Devin Acker]
This commit is contained in:
Devin Acker 2022-10-19 07:08:24 -04:00 committed by GitHub
parent 0e4fe13abf
commit 9f4d3ddfe6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 592 additions and 15 deletions

View File

@ -50,6 +50,12 @@ void gt913_device::map(address_map &map)
map(0x0000, 0x7fff).rom(); map(0x0000, 0x7fff).rom();
map(0x8000, 0xbfff).rw(FUNC(gt913_device::data_r), FUNC(gt913_device::data_w)); map(0x8000, 0xbfff).rw(FUNC(gt913_device::data_r), FUNC(gt913_device::data_w));
map(0xc000, 0xf7ff).rom(); map(0xc000, 0xf7ff).rom();
/* ctk530 writes here to latch LED matrix data, which generates an active high strobe on pin 99 (PLE/P16)
there's otherwise no external address decoding (or the usual read/write strobes) used for the LED latches.
just treat as a 16-bit write-only port for now */
map(0xe000, 0xe001).lw16(NAME([this](uint16_t data) { io.write_word(h8_device::PORT_4, data); }));
map(0xfac0, 0xffbf).ram(); map(0xfac0, 0xffbf).ram();
/* ffc0-ffcb: sound */ /* ffc0-ffcb: sound */

View File

@ -37,6 +37,31 @@
is supposed to trigger a NMI which updates the RAM checksum, but the NMI handler is supposed to trigger a NMI which updates the RAM checksum, but the NMI handler
always proceeds to fully start up the system as if the power is being turned on always proceeds to fully start up the system as if the power is being turned on
-------------------------------------------------------------------------------
CTK-530/540 (1995)
Main board (JCM460-MA1M):
LSI101: CPU (Casio/NEC uPD912GF)
LSI102: 8Mbit ROM (Macronix MX23C8100PC-12)
IC103: stereo DAC (NEC uPD6379GR)
X301: 20MHz crystal
Service manual with schematics, pinouts, etc.:
https://revenant1.net/casio/manuals/upd91x/ctk530.pdf
To access the test mode (not mentioned in the service manual):
Hold the keypad 0 button while turning on the keyboard, then release the button.
"TST" will appear on the LCD. Afterwards, press one of these buttons:
- Keypad 0: switch test (press all front panel buttons in each column, top to bottom and left to right)
- Keypad 1: key test
- Keypad 2: ROM test
- Keypad 4/5/6: sound volume test
- Keypad 7/8: stereo test
- Keypad 9: MIDI loopback test
- Keypad +: LED/display test
- Mode: power off
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
General MIDI modules (1996) General MIDI modules (1996)
@ -123,6 +148,10 @@
Adds velocity-sensitive keys Adds velocity-sensitive keys
- CTK-551, CTK-558, Radio Shack MD-1160 (2000) - CTK-551, CTK-558, Radio Shack MD-1160 (2000)
Adds pitch wheel and different selection of demo songs Adds pitch wheel and different selection of demo songs
- CT-588 (2001)
Chinese localized version of CTK-541
- CT-688 (2001)
Chinese localized version of CTK-551
Main board (JCM453-MA1M / JCM456-MA1M): Main board (JCM453-MA1M / JCM456-MA1M):
LSI1: CPU (Casio GT913F) LSI1: CPU (Casio GT913F)
@ -160,11 +189,13 @@
#include "cpu/h8/gt913.h" #include "cpu/h8/gt913.h"
#include "machine/nvram.h" #include "machine/nvram.h"
#include "video/hd44780.h" #include "video/hd44780.h"
#include "video/pwm.h"
#include "emupal.h" #include "emupal.h"
#include "screen.h" #include "screen.h"
#include "speaker.h" #include "speaker.h"
#include "ap10.lh" #include "ap10.lh"
#include "ctk530.lh"
namespace { namespace {
@ -174,6 +205,7 @@ public:
ctk551_state(machine_config const &mconfig, device_type type, char const *tag) ctk551_state(machine_config const &mconfig, device_type type, char const *tag)
: driver_device(mconfig, type, tag) : driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu") , m_maincpu(*this, "maincpu")
, m_pwm(*this, "pwm")
, m_lcdc(*this, "lcdc") , m_lcdc(*this, "lcdc")
, m_inputs(*this, "IN%u", 0U) , m_inputs(*this, "IN%u", 0U)
, m_outputs(*this, "%02x.%d.%d", 0U, 0U, 0U) , m_outputs(*this, "%02x.%d.%d", 0U, 0U, 0U)
@ -184,13 +216,20 @@ public:
} }
void ap10(machine_config& config); void ap10(machine_config& config);
void ctk530(machine_config& config);
void gz70sp(machine_config& config); void gz70sp(machine_config& config);
void ctk601(machine_config& config); void ctk601(machine_config& config);
void ctk551(machine_config &config); void ctk551(machine_config &config);
void init_ap10(); void init_ap10();
void init_ctk530();
void init_gz70sp(); void init_gz70sp();
TIMER_CALLBACK_MEMBER(nmi_clear) { m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); }
DECLARE_WRITE_LINE_MEMBER(pwm_row_w) { m_pwm->write_my(state); }
DECLARE_WRITE_LINE_MEMBER(pwm_col_w) { m_pwm->write_mx(state ^ 0xff); }
DECLARE_CUSTOM_INPUT_MEMBER(lcd_r) { return m_lcdc->db_r() >> 4; } DECLARE_CUSTOM_INPUT_MEMBER(lcd_r) { return m_lcdc->db_r() >> 4; }
DECLARE_WRITE_LINE_MEMBER(lcd_w) DECLARE_WRITE_LINE_MEMBER(lcd_w)
{ {
@ -230,19 +269,23 @@ public:
private: private:
void ap10_map(address_map& map); void ap10_map(address_map& map);
void ctk530_map(address_map& map);
void gz70sp_map(address_map& map); void gz70sp_map(address_map& map);
void ctk601_map(address_map& map); void ctk601_map(address_map& map);
void ctk551_map(address_map& map);
void ap10_io_map(address_map& map); void ap10_io_map(address_map& map);
void ctk530_io_map(address_map& map);
void gz70sp_io_map(address_map& map); void gz70sp_io_map(address_map& map);
void ctk551_io_map(address_map &map); void ctk551_io_map(address_map &map);
virtual void driver_start() override; virtual void driver_start() override;
required_device<gt913_device> m_maincpu; required_device<gt913_device> m_maincpu;
optional_device<pwm_display_device> m_pwm;
optional_device<hd44780_device> m_lcdc; optional_device<hd44780_device> m_lcdc;
emu_timer* m_nmi_timer = nullptr;
optional_ioport_array<4> m_inputs; optional_ioport_array<4> m_inputs;
output_finder<64, 8, 5> m_outputs; output_finder<64, 8, 5> m_outputs;
@ -267,7 +310,17 @@ INPUT_CHANGED_MEMBER(ctk551_state::switch_w)
INPUT_CHANGED_MEMBER(ctk551_state::power_w) INPUT_CHANGED_MEMBER(ctk551_state::power_w)
{ {
m_maincpu->set_input_line(INPUT_LINE_NMI, newval ? ASSERT_LINE : CLEAR_LINE); if (newval)
{
m_maincpu->set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
m_nmi_timer->adjust(attotime::never);
}
else
{
// give the CPU enough time to switch NMI to active-high so it fires again
// otherwise, releasing the power button too quickly may be ignored
m_nmi_timer->adjust(attotime::from_msec(100));
}
} }
INPUT_CHANGED_MEMBER(ctk551_state::switch_power_w) INPUT_CHANGED_MEMBER(ctk551_state::switch_power_w)
@ -315,8 +368,13 @@ WRITE_LINE_MEMBER(ctk551_state::apo_w)
logerror("apo_w: %x\n", state); logerror("apo_w: %x\n", state);
/* auto power off - disable the LCD and speakers /* auto power off - disable the LCD and speakers
the CPU will go to sleep until the power switch triggers a NMI */ the CPU will go to sleep until the power switch triggers a NMI */
if (!state && m_lcdc.found()) if (!state)
{
if (m_pwm.found())
m_pwm->clear();
if (m_lcdc.found())
m_lcdc->reset(); m_lcdc->reset();
}
m_led_power = state; m_led_power = state;
m_maincpu->set_output_gain(ALL_OUTPUTS, state ? 1.0 : 0.0); m_maincpu->set_output_gain(ALL_OUTPUTS, state ? 1.0 : 0.0);
} }
@ -350,6 +408,11 @@ void ctk551_state::ap10_map(address_map& map)
map(0x380003, 0x380003).w(FUNC(ctk551_state::led_console_w)); map(0x380003, 0x380003).w(FUNC(ctk551_state::led_console_w));
} }
void ctk551_state::ctk530_map(address_map& map)
{
map(0x000000, 0x0fffff).rom().region("maincpu", 0).mirror(0x100000);
}
void ctk551_state::gz70sp_map(address_map& map) void ctk551_state::gz70sp_map(address_map& map)
{ {
map(0x000000, 0x1fffff).rom().region("maincpu", 0); map(0x000000, 0x1fffff).rom().region("maincpu", 0);
@ -368,15 +431,18 @@ void ctk551_state::ctk601_map(address_map& map)
map(0x380002, 0x380003).portr("PB").portw("PA").umask16(0x00ff); map(0x380002, 0x380003).portr("PB").portw("PA").umask16(0x00ff);
} }
void ctk551_state::ctk551_map(address_map& map)
{
map(0x000000, 0x0fffff).rom().region("maincpu", 0).mirror(0x100000);
}
void ctk551_state::ap10_io_map(address_map& map) void ctk551_state::ap10_io_map(address_map& map)
{
map(h8_device::PORT_1, h8_device::PORT_1).portrw("P1").umask16(0x00ff);
map(h8_device::PORT_2, h8_device::PORT_4).noprw();
map(h8_device::ADC_0, h8_device::ADC_1).nopr();
}
void ctk551_state::ctk530_io_map(address_map& map)
{ {
map(h8_device::PORT_1, h8_device::PORT_1).portrw("P1").umask16(0x00ff); map(h8_device::PORT_1, h8_device::PORT_1).portrw("P1").umask16(0x00ff);
map(h8_device::PORT_2, h8_device::PORT_3).noprw(); map(h8_device::PORT_2, h8_device::PORT_3).noprw();
map(h8_device::PORT_4, h8_device::PORT_4).portw("PLE");
map(h8_device::ADC_0, h8_device::ADC_1).nopr(); map(h8_device::ADC_0, h8_device::ADC_1).nopr();
} }
@ -384,7 +450,7 @@ void ctk551_state::gz70sp_io_map(address_map& map)
{ {
map(h8_device::PORT_1, h8_device::PORT_1).portrw("P1").umask16(0x00ff); map(h8_device::PORT_1, h8_device::PORT_1).portrw("P1").umask16(0x00ff);
map(h8_device::PORT_2, h8_device::PORT_2).portrw("P2").umask16(0x00ff); map(h8_device::PORT_2, h8_device::PORT_2).portrw("P2").umask16(0x00ff);
map(h8_device::PORT_3, h8_device::PORT_3).noprw(); map(h8_device::PORT_3, h8_device::PORT_4).noprw();
map(h8_device::ADC_0, h8_device::ADC_1).nopr(); map(h8_device::ADC_0, h8_device::ADC_1).nopr();
} }
@ -392,7 +458,7 @@ void ctk551_state::ctk551_io_map(address_map &map)
{ {
map(h8_device::PORT_1, h8_device::PORT_1).portr("P1_R").portw("P1_W").umask16(0x00ff); map(h8_device::PORT_1, h8_device::PORT_1).portr("P1_R").portw("P1_W").umask16(0x00ff);
map(h8_device::PORT_2, h8_device::PORT_2).portrw("P2").umask16(0x00ff); map(h8_device::PORT_2, h8_device::PORT_2).portrw("P2").umask16(0x00ff);
map(h8_device::PORT_3, h8_device::PORT_3).noprw(); // port 3 pins are shared w/ key matrix map(h8_device::PORT_3, h8_device::PORT_4).noprw(); // port 3 pins are shared w/ key matrix
map(h8_device::ADC_0, h8_device::ADC_0).portr("AN0"); map(h8_device::ADC_0, h8_device::ADC_0).portr("AN0");
map(h8_device::ADC_1, h8_device::ADC_1).portr("AN1"); map(h8_device::ADC_1, h8_device::ADC_1).portr("AN1");
} }
@ -404,6 +470,8 @@ void ctk551_state::driver_start()
m_led_power.resolve(); m_led_power.resolve();
m_outputs.resolve(); m_outputs.resolve();
m_nmi_timer = timer_alloc(FUNC(ctk551_state::nmi_clear), this);
m_input_sel = 0xf; m_input_sel = 0xf;
save_item(NAME(m_switch)); save_item(NAME(m_switch));
@ -441,6 +509,34 @@ void ctk551_state::ap10(machine_config& config)
config.set_default_layout(layout_ap10); config.set_default_layout(layout_ap10);
} }
void ctk551_state::ctk530(machine_config& config)
{
// CPU
GT913(config, m_maincpu, 20_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_DATA, &ctk551_state::ctk530_map);
m_maincpu->set_addrmap(AS_IO, &ctk551_state::ctk530_io_map);
m_maincpu->add_route(0, "lspeaker", 1.0);
m_maincpu->add_route(1, "rspeaker", 1.0);
// MIDI
auto& mdin(MIDI_PORT(config, "mdin"));
midiin_slot(mdin);
mdin.rxd_handler().set("maincpu:sci0", FUNC(h8_sci_device::rx_w));
auto& mdout(MIDI_PORT(config, "mdout"));
midiout_slot(mdout);
m_maincpu->subdevice<h8_sci_device>("sci0")->tx_handler().set(mdout, FUNC(midi_port_device::write_txd));
PWM_DISPLAY(config, m_pwm, 0);
m_pwm->set_size(4, 8);
m_pwm->set_segmask(0x7, 0xff);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
config.set_default_layout(layout_ctk530);
}
void ctk551_state::gz70sp(machine_config& config) void ctk551_state::gz70sp(machine_config& config)
{ {
// CPU // CPU
@ -499,7 +595,7 @@ void ctk551_state::ctk551(machine_config &config)
{ {
// CPU // CPU
GT913(config, m_maincpu, 30'000'000 / 2); GT913(config, m_maincpu, 30'000'000 / 2);
m_maincpu->set_addrmap(AS_DATA, &ctk551_state::ctk551_map); m_maincpu->set_addrmap(AS_DATA, &ctk551_state::ctk530_map);
m_maincpu->set_addrmap(AS_IO, &ctk551_state::ctk551_io_map); m_maincpu->set_addrmap(AS_IO, &ctk551_state::ctk551_io_map);
m_maincpu->add_route(0, "lspeaker", 1.0); m_maincpu->add_route(0, "lspeaker", 1.0);
m_maincpu->add_route(1, "rspeaker", 1.0); m_maincpu->add_route(1, "rspeaker", 1.0);
@ -787,6 +883,75 @@ INPUT_PORTS_START(base_61key)
PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0xe0, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
INPUT_PORTS_START(ctk530)
PORT_INCLUDE(base_61key)
PORT_START("maincpu:kbd:FI8")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("maincpu:kbd:FI9")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("maincpu:kbd:FI10")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad +") PORT_CODE(KEYCODE_PLUS_PAD)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad -") PORT_CODE(KEYCODE_MINUS_PAD)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Accomp Volume Up")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Main Volume Up")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Mode")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("maincpu:kbd:KI0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Demo")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Tempo Up")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Main Volume Down")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Intro / Fill In")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("maincpu:kbd:KI1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Transpose / Tune / MIDI")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Rhythm")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Accomp Volume Down")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Synchro / Ending")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("maincpu:kbd:KI2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Touch Response")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Tone")
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Tempo Down")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Start / Stop")
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("maincpu:kbd:VELOCITY")
PORT_BIT( 0x7f, 0x7f, IPT_POSITIONAL ) PORT_NAME("Key Velocity") PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_CENTERDELTA(0)
PORT_START("SWITCH")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_POWER_ON ) PORT_NAME("Power") PORT_CHANGED_MEMBER(DEVICE_SELF, ctk551_state, power_w, 0)
PORT_START("P1")
PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(ctk551_state, apo_w)
PORT_BIT( 0x78, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_CONFNAME( 0x80, 0x80, "Power Source" )
PORT_CONFSETTING( 0x80, "AC Adapter" )
PORT_CONFSETTING( 0x00, "Battery" )
PORT_START("PLE")
PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(ctk551_state, pwm_col_w)
PORT_BIT( 0x0f00, IP_ACTIVE_HIGH, IPT_OUTPUT ) PORT_WRITE_LINE_MEMBER(ctk551_state, pwm_row_w)
PORT_BIT( 0xf000, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START(ctk601) INPUT_PORTS_START(ctk601)
PORT_INCLUDE(base_61key) PORT_INCLUDE(base_61key)
@ -1004,6 +1169,13 @@ ROM_START(ap10)
ROM_LOAD16_WORD_SWAP("ap10.lsi303", 0x000000, 0x100000, CRC(39caa214) SHA1(3b484628c1e6f0ad7c11e2ec7eff664294f9ec83)) // MX23C8100MC-12CA27 ROM_LOAD16_WORD_SWAP("ap10.lsi303", 0x000000, 0x100000, CRC(39caa214) SHA1(3b484628c1e6f0ad7c11e2ec7eff664294f9ec83)) // MX23C8100MC-12CA27
ROM_END ROM_END
ROM_START(ctk530)
ROM_REGION(0x100000, "maincpu", ROMREGION_ERASE00)
ROM_REGION16_BE(0x100000, "lsi102", 0)
ROM_LOAD16_WORD_SWAP("ctk530.lsi102", 0x000000, 0x100000, CRC(961bff85) SHA1(adfd46ef96fb53981b1b66cb89e3d716b0792ef0)) // MX23C8100PC-12CA19
ROM_END
ROM_START(gz70sp) ROM_START(gz70sp)
ROM_REGION(0x200000, "maincpu", 0) ROM_REGION(0x200000, "maincpu", 0)
ROM_LOAD("romsxgm.bin", 0x000000, 0x200000, CRC(c392cf89) SHA1(93ebe213ea7a085c67d88974ed39ac3e9bf8059b)) // from the SW-10 softsynth ROM_LOAD("romsxgm.bin", 0x000000, 0x200000, CRC(c392cf89) SHA1(93ebe213ea7a085c67d88974ed39ac3e9bf8059b)) // from the SW-10 softsynth
@ -1033,6 +1205,17 @@ void ctk551_state::init_ap10()
rom[addr] = bitswap(rom[addr], 15, 14, 13, 10, 11, 12, 9, 8, 7, 6, 2, 3, 4, 5, 1, 0); rom[addr] = bitswap(rom[addr], 15, 14, 13, 10, 11, 12, 9, 8, 7, 6, 2, 3, 4, 5, 1, 0);
} }
void ctk551_state::init_ctk530()
{
uint16_t* dest = (uint16_t*)memregion("maincpu")->base();
const uint16_t* src = (uint16_t*)memregion("lsi102")->base();
for (uint32_t i = 0; i < 0x80000; i++)
{
const uint32_t addr = bitswap(i, 8, 9, 0, 2, 4, 6, 17, 16, 14, 12, 10, 11, 13, 15, 18, 7, 5, 3, 1);
dest[addr] = bitswap(src[i], 0, 2, 15, 13, 4, 6, 11, 9, 1, 3, 14, 12, 5, 7, 10, 8);
}
}
void ctk551_state::init_gz70sp() void ctk551_state::init_gz70sp()
{ {
/* /*
@ -1049,6 +1232,7 @@ void ctk551_state::init_gz70sp()
// models with MACHINE_IMPERFECT_SOUND are missing DSP emulation // models with MACHINE_IMPERFECT_SOUND are missing DSP emulation
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
SYST( 1995, ap10, 0, 0, ap10, ap10, ctk551_state, init_ap10, "Casio", "Celviano AP-10", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND ) SYST( 1995, ap10, 0, 0, ap10, ap10, ctk551_state, init_ap10, "Casio", "Celviano AP-10", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK | MACHINE_IMPERFECT_SOUND )
SYST( 1995, ctk530, 0, 0, ctk530, ctk530, ctk551_state, init_ctk530, "Casio", "CTK-530", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK )
SYST( 1996, gz70sp, 0, 0, gz70sp, gz70sp, ctk551_state, init_gz70sp, "Casio", "GZ-70SP", MACHINE_SUPPORTS_SAVE ) SYST( 1996, gz70sp, 0, 0, gz70sp, gz70sp, ctk551_state, init_gz70sp, "Casio", "GZ-70SP", MACHINE_SUPPORTS_SAVE )
SYST( 1997, ctk601, 0, 0, ctk601, ctk601, ctk551_state, empty_init, "Casio", "CTK-601", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) SYST( 1997, ctk601, 0, 0, ctk601, ctk601, ctk551_state, empty_init, "Casio", "CTK-601", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
SYST( 2000, ctk551, 0, 0, ctk551, ctk551, ctk551_state, empty_init, "Casio", "CTK-551", MACHINE_SUPPORTS_SAVE ) SYST( 2000, ctk551, 0, 0, ctk551, ctk551, ctk551_state, empty_init, "Casio", "CTK-551", MACHINE_SUPPORTS_SAVE )

386
src/mame/layout/ctk530.lay Normal file
View File

@ -0,0 +1,386 @@
<?xml version="1.0"?>
<!--
license:CC0
-->
<mamelayout version="2">
<!-- general grey backdrop -->
<element name="greyback">
<rect>
<bounds left="0" top="0" right="1" bottom="1" />
<color red="0.1" green="0.1" blue="0.1" />
</rect>
</element>
<element name="border">
<rect>
<bounds left="0" top="0" right="1" bottom="1" />
<color red="0.05" green="0.05" blue="0.05" />
</rect>
</element>
<!-- text elements -->
<element name="power"><text string="POWER" /></element>
<element name="mode"><text string="MODE" /></element>
<element name="casio_chord"><text string="CASIO CHORD" align="2" /></element>
<element name="fingered"><text string="FINGERED" align="2" /></element>
<element name="full_range"><text string="FULL RANGE" align="2" /></element>
<element name="chord_1"><text string="CHORD 1" align="2" /></element>
<element name="chord_2"><text string="CHORD 2" align="2" /></element>
<element name="main"><text string="MAIN" /></element>
<element name="accomp"><text string="ACCOMP" /></element>
<element name="volume"><text string="VOLUME" /></element>
<element name="tempo"><text string="TEMPO" /></element>
<element name="intro"><text string="INTRO/" /></element>
<element name="fill_in"><text string="FILL-IN" /></element>
<element name="synchro"><text string="SYNCHRO/" /></element>
<element name="ending"><text string="ENDING" /></element>
<element name="start"><text string="START/" /></element>
<element name="stop"><text string="STOP" /></element>
<element name="rhythm"><text string="RHYTHM" /></element>
<element name="tone"><text string="TONE" /></element>
<element name="touch_response"><text string="TOUCH RESPONSE" /></element>
<element name="transpose"><text string="TRANSPOSE/" /></element>
<element name="tune_midi"><text string="TUNE/MIDI" /></element>
<element name="demo"><text string="DEMO" /></element>
<element name="kp0"><text string="0" /></element>
<element name="kp1"><text string="1" /></element>
<element name="kp2"><text string="2" /></element>
<element name="kp3"><text string="3" /></element>
<element name="kp4"><text string="4" /></element>
<element name="kp5"><text string="5" /></element>
<element name="kp6"><text string="6" /></element>
<element name="kp7"><text string="7" /></element>
<element name="kp8"><text string="8" /></element>
<element name="kp9"><text string="9" /></element>
<element name="plus"><text string="+" /></element>
<element name="minus"><text string="-" /></element>
<element name="chord_keys"><text string="&#x25c0; CHORD" align="1" /></element>
<!-- button primitives -->
<element name="button-circ" defstate="0">
<disk><bounds x="0" y="0" width="40" height="40" /><color red="0.0" green="0.0" blue="0.0" /></disk>
<disk state="0"><bounds x="2" y="2" width="36" height="36" /><color red="0.5" green="0.5" blue="0.5" /></disk>
<disk state="1"><bounds x="2" y="2" width="36" height="36" /><color red="0.3" green="0.3" blue="0.3" /></disk>
</element>
<element name="button-circ-up" defstate="0">
<disk><bounds x="0" y="0" width="40" height="40" /><color red="0.0" green="0.0" blue="0.0" /></disk>
<disk state="0"><bounds x="2" y="2" width="36" height="36" /><color red="0.5" green="0.5" blue="0.5" /></disk>
<disk state="1"><bounds x="2" y="2" width="36" height="36" /><color red="0.3" green="0.3" blue="0.3" /></disk>
<text string="&#x25b2;" align="1"><bounds x="10" y="-2" width="30" height="36"/><color red="0.2" green="0.2" blue="0.2" /></text>
</element>
<element name="button-circ-down" defstate="0">
<disk><bounds x="0" y="0" width="40" height="40" /><color red="0.0" green="0.0" blue="0.0" /></disk>
<disk state="0"><bounds x="2" y="2" width="36" height="36" /><color red="0.5" green="0.5" blue="0.5" /></disk>
<disk state="1"><bounds x="2" y="2" width="36" height="36" /><color red="0.3" green="0.3" blue="0.3" /></disk>
<text string="&#x25bc;" align="1"><bounds x="10" y="2" width="30" height="36"/><color red="0.2" green="0.2" blue="0.2" /></text>
</element>
<element name="button-demo" defstate="0">
<disk><bounds x="0" y="0" width="50" height="50" /><color red="0.0" green="0.0" blue="0.0" /></disk>
<disk state="0"><bounds x="7" y="7" width="36" height="36" /><color red="1.0" green="0.2" blue="0.2" /></disk>
<disk state="1"><bounds x="7" y="7" width="36" height="36" /><color red="0.8" green="0.0" blue="0.0" /></disk>
</element>
<element name="button-rect" defstate="0">
<rect><bounds x="0" y="0" width="56" height="32" /><color red="0.0" green="0.0" blue="0.0" /></rect>
<rect state="0"><bounds x="2" y="2" width="52" height="28" /><color red="0.5" green="0.5" blue="0.5" /></rect>
<rect state="1"><bounds x="2" y="2" width="52" height="28" /><color red="0.3" green="0.3" blue="0.3" /></rect>
</element>
<element name="button-rect-tall" defstate="0">
<rect><bounds x="0" y="0" width="56" height="128" /><color red="0.0" green="0.0" blue="0.0" /></rect>
<rect state="0"><bounds x="2" y="2" width="52" height="124" /><color red="0.6" green="0.9" blue="1.0" /></rect>
<rect state="1"><bounds x="2" y="2" width="52" height="124" /><color red="0.5" green="0.7" blue="0.8" /></rect>
</element>
<element name="button-rect-num" defstate="0">
<rect><bounds x="0" y="0" width="32" height="32" /><color red="0.0" green="0.0" blue="0.0" /></rect>
<rect state="0"><bounds x="2" y="2" width="28" height="28" /><color red="0.5" green="0.5" blue="0.5" /></rect>
<rect state="1"><bounds x="2" y="2" width="28" height="28" /><color red="0.3" green="0.3" blue="0.3" /></rect>
</element>
<element name="button-rect-center" defstate="0"> <!-- these are supposed to be triangular -->
<rect><bounds x="0" y="0" width="56" height="32" /><color red="0.0" green="0.0" blue="0.0" /></rect>
<rect state="0"><bounds x="2" y="2" width="52" height="28" /><color red="1.0" green="0.8" blue="0.0" /></rect>
<rect state="1"><bounds x="2" y="2" width="52" height="28" /><color red="0.8" green="0.6" blue="0.0" /></rect>
</element>
<!-- LED primitive -->
<element name="led" defstate="0">
<disk state="0"><color red="0.4" green="0.3" blue="0.3" /></disk>
<disk state="1"><color red="1.0" green="0.1" blue="0.1" /></disk>
</element>
<element name="digit" defstate="0">
<led7seg><color red="1.0" green="0.1" blue="0.1" /></led7seg>
</element>
<!-- 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="45" height="504" /><color red="1.0" green="1.0" blue="1.0" /></rect>
<rect state="1"><bounds x="0" y="0" width="45" height="504" /><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="332" /><color red="1.0" green="1.0" blue="1.0" /></rect>
<rect state="0"><bounds x="0" y="332" 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="332" /><color red="0.9" green="0.9" blue="0.9" /></rect>
<rect state="1"><bounds x="0" y="332" 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="332" /><color red="1.0" green="1.0" blue="1.0" /></rect>
<rect state="0"><bounds x="0" y="332" 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="332" /><color red="0.9" green="0.9" blue="0.9" /></rect>
<rect state="1"><bounds x="0" y="332" 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="332" /><color red="1.0" green="1.0" blue="1.0" /></rect>
<rect state="0"><bounds x="0" y="332" 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="332" /><color red="0.9" green="0.9" blue="0.9" /></rect>
<rect state="1"><bounds x="0" y="332" 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="332" /><color red="1.0" green="1.0" blue="1.0" /></rect>
<rect state="0"><bounds x="0" y="332" 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="332" /><color red="0.9" green="0.9" blue="0.9" /></rect>
<rect state="1"><bounds x="0" y="332" 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="332" /><color red="1.0" green="1.0" blue="1.0" /></rect>
<rect state="0"><bounds x="0" y="332" 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="332" /><color red="0.9" green="0.9" blue="0.9" /></rect>
<rect state="1"><bounds x="0" y="332" 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="324" /><color red="0.0" green="0.0" blue="0.0" /></rect>
<rect state="0"><bounds x="4" y="0" width="36" height="320" /><color red="0.1" green="0.1" blue="0.1" /></rect>
<rect state="1"><bounds x="0" y="0" width="44" height="324" /><color red="0.1" green="0.1" blue="0.1" /></rect>
<rect state="1"><bounds x="4" y="0" width="36" height="320" /><color red="0.1" green="0.1" blue="0.1" /></rect>
</element>
<!-- button group -->
<group name="keypad">
<element ref="border"><bounds x="0" y="-0" width="280" height="338"/></element>
<element ref="greyback"><bounds x="8" y="8" width="264" height="322"/></element>
<element ref="kp7"><bounds x="20" y="30" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI2" inputmask="0x08"><bounds xc="60" y="30" width="32" height="32" /></element>
<element ref="kp8"><bounds x="100" y="30" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI2" inputmask="0x04"><bounds xc="140" y="30" width="32" height="32" /></element>
<element ref="kp9"><bounds x="180" y="30" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI2" inputmask="0x02"><bounds xc="220" y="30" width="32" height="32" /></element>
<element ref="kp4"><bounds x="20" y="112" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI1" inputmask="0x08"><bounds xc="60" y="112" width="32" height="32" /></element>
<element ref="kp5"><bounds x="100" y="112" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI1" inputmask="0x04"><bounds xc="140" y="112" width="32" height="32" /></element>
<element ref="kp6"><bounds x="180" y="112" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI1" inputmask="0x02"><bounds xc="220" y="112" width="32" height="32" /></element>
<element ref="kp1"><bounds x="20" y="194" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI0" inputmask="0x08"><bounds xc="60" y="194" width="32" height="32" /></element>
<element ref="kp2"><bounds x="100" y="194" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI0" inputmask="0x04"><bounds xc="140" y="194" width="32" height="32" /></element>
<element ref="kp3"><bounds x="180" y="194" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:KI0" inputmask="0x02"><bounds xc="220" y="194" width="32" height="32" /></element>
<element ref="kp0"><bounds x="20" y="276" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:FI10" inputmask="0x08"><bounds xc="60" y="276" width="32" height="32" /></element>
<element ref="minus"><bounds x="100" y="276" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:FI10" inputmask="0x04"><bounds xc="140" y="276" width="32" height="32" /></element>
<element ref="plus"><bounds x="180" y="276" width="24" height="24"/></element>
<element ref="button-rect-num" inputtag="maincpu:kbd:FI10" inputmask="0x02"><bounds xc="220" y="276" width="32" height="32" /></element>
</group>
<group name="buttons">
<bounds x="0" y="-120" width="3154" height="420" />
<element ref="led" name="led_power"><bounds xc="680" y="140" width="20" height="20" /></element>
<element ref="power"><bounds xc="680" y="170" width="100" height="24"/></element>
<element ref="button-rect" inputtag="SWITCH" inputmask="0x01"><bounds xc="680" y="200" width="56" height="28" /></element>
<element ref="full_range"><bounds xc="820" y="-15" width="140" height="24"/></element>
<element ref="chord_2"><bounds xc="820" y="5" width="140" height="24"/></element>
<element ref="led" name="3.3"><bounds xc="900" y="-3" width="20" height="20" /></element>
<element ref="full_range"><bounds xc="820" y="30" width="140" height="24"/></element>
<element ref="chord_1"><bounds xc="820" y="50" width="140" height="24"/></element>
<element ref="led" name="3.2"><bounds xc="900" y="42" width="20" height="20" /></element>
<element ref="fingered"><bounds xc="820" y="85" width="140" height="24"/></element>
<element ref="led" name="3.1"><bounds xc="900" y="87" width="20" height="20" /></element>
<element ref="casio_chord"><bounds xc="820" y="130" width="140" height="24"/></element>
<element ref="led" name="3.0"><bounds xc="900" y="132" width="20" height="20" /></element>
<element ref="mode"><bounds xc="840" y="170" width="80" height="24"/></element>
<element ref="button-rect" inputtag="maincpu:kbd:FI10" inputmask="0x40"><bounds xc="840" y="200" width="56" height="28" /></element>
<element ref="main"><bounds xc="1020" y="-110" width="140" height="24"/></element>
<element ref="volume"><bounds xc="1020" y="-90" width="140" height="24"/></element>
<element ref="button-circ-up" inputtag="maincpu:kbd:FI10" inputmask="0x20"><bounds xc="1020" y="-60" width="40" height="40" /></element>
<element ref="button-circ-down" inputtag="maincpu:kbd:KI0" inputmask="0x20"><bounds xc="1020" y="-10" width="40" height="40" /></element>
<element ref="intro"><bounds xc="1020" y="50" width="140" height="24"/></element>
<element ref="fill_in"><bounds xc="1020" y="70" width="140" height="24"/></element>
<element ref="button-rect-tall" inputtag="maincpu:kbd:KI0" inputmask="0x40"><bounds xc="1020" y="100" width="56" height="128" /></element>
<element ref="accomp"><bounds xc="1140" y="-110" width="140" height="24"/></element>
<element ref="volume"><bounds xc="1140" y="-90" width="140" height="24"/></element>
<element ref="button-circ-up" inputtag="maincpu:kbd:FI10" inputmask="0x10"><bounds xc="1140" y="-60" width="40" height="40" /></element>
<element ref="button-circ-down" inputtag="maincpu:kbd:KI1" inputmask="0x20"><bounds xc="1140" y="-10" width="40" height="40" /></element>
<element ref="synchro"><bounds xc="1140" y="50" width="140" height="24"/></element>
<element ref="ending"><bounds xc="1140" y="70" width="140" height="24"/></element>
<element ref="button-rect-tall" inputtag="maincpu:kbd:KI1" inputmask="0x40"><bounds xc="1140" y="100" width="56" height="128" /></element>
<element ref="tempo"><bounds xc="1260" y="-110" width="140" height="24"/></element>
<element ref="button-circ-up" inputtag="maincpu:kbd:KI0" inputmask="0x10"><bounds xc="1260" y="-60" width="40" height="40" /></element>
<element ref="button-circ-down" inputtag="maincpu:kbd:KI2" inputmask="0x20"><bounds xc="1260" y="-10" width="40" height="40" /></element>
<element ref="start"><bounds xc="1260" y="50" width="140" height="24"/></element>
<element ref="stop"><bounds xc="1260" y="70" width="140" height="24"/></element>
<element ref="button-rect-tall" inputtag="maincpu:kbd:KI2" inputmask="0x40"><bounds xc="1260" y="100" width="56" height="128" /></element>
<element ref="led" name="3.4"><bounds xc="1320" y="100" width="20" height="20" /></element>
<element ref="keyfill"><bounds x="1420" y="-80" width="280" height="140" /></element>
<element ref="digit" name="digit0"><bounds x="1440" y="-60" width="80" height="100" /></element>
<element ref="digit" name="digit1"><bounds x="1520" y="-60" width="80" height="100" /></element>
<element ref="digit" name="digit2"><bounds x="1600" y="-60" width="80" height="100" /></element>
<element ref="rhythm"><bounds xc="1480" y="170" width="140" height="24"/></element>
<element ref="button-rect-center" inputtag="maincpu:kbd:KI1" inputmask="0x10"><bounds xc="1480" y="200" width="56" height="28" /></element>
<element ref="tone"><bounds xc="1640" y="170" width="140" height="24"/></element>
<element ref="button-rect-center" inputtag="maincpu:kbd:KI2" inputmask="0x10"><bounds xc="1640" y="200" width="56" height="28" /></element>
<group ref="keypad"><bounds x="1800" y="-110" width="280" height="338"/></group>
<element ref="led" name="3.5"><bounds xc="2200" y="-110" width="20" height="20" /></element>
<element ref="touch_response"><bounds xc="2200" y="-85" width="240" height="24"/></element>
<element ref="button-circ" inputtag="maincpu:kbd:KI2" inputmask="0x01"><bounds xc="2200" y="-50" width="40" height="40" /></element>
<element ref="transpose"><bounds xc="2200" y="0" width="140" height="24"/></element>
<element ref="tune_midi"><bounds xc="2200" y="20" width="140" height="24"/></element>
<element ref="button-circ" inputtag="maincpu:kbd:KI1" inputmask="0x01"><bounds xc="2200" y="50" width="40" height="40" /></element>
<element ref="demo"><bounds xc="2200" y="148" width="240" height="24"/></element>
<element ref="button-demo" inputtag="maincpu:kbd:KI0" inputmask="0x01"><bounds xc="2200" y="178" width="50" height="50" /></element>
</group>
<!-- keyboard group -->
<group name="keyboard">
<element ref="keyfill"><bounds x="72" y="98" width="2970" height="524" /></element>
<element ref="chord_keys"><bounds x="960" y="50" width="140" height="35"/></element>
<!-- octave 2 -->
<element ref="blackkey" inputtag="maincpu:kbd:FI0" inputmask="0x02"><bounds x="130" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI0" inputmask="0x08"><bounds x="233" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI0" inputmask="0x40"><bounds x="373" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI1" inputmask="0x01"><bounds x="467" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI1" inputmask="0x04"><bounds x="561" y="108" width="44" height="324" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI0" inputmask="0x01"><bounds x="82" y="108" width="79" height="504" /></element>
<element ref="whitekey-m" inputtag="maincpu:kbd:FI0" inputmask="0x04"><bounds x="164" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI0" inputmask="0x10"><bounds x="246" y="108" width="79" height="504" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI0" inputmask="0x20"><bounds x="328" y="108" width="79" height="504" /></element>
<element ref="whitekey-lm" inputtag="maincpu:kbd:FI0" inputmask="0x80"><bounds x="410" y="108" width="79" height="504" /></element>
<element ref="whitekey-rm" inputtag="maincpu:kbd:FI1" inputmask="0x02"><bounds x="492" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI1" inputmask="0x08"><bounds x="574" y="108" width="79" height="504" /></element>
<!-- octave 3 -->
<element ref="blackkey" inputtag="maincpu:kbd:FI1" inputmask="0x20"><bounds x="704" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI1" inputmask="0x80"><bounds x="807" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI2" inputmask="0x04"><bounds x="947" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI2" inputmask="0x10"><bounds x="1041" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI2" inputmask="0x40"><bounds x="1135" y="108" width="44" height="324" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI1" inputmask="0x10"><bounds x="656" y="108" width="79" height="504" /></element>
<element ref="whitekey-m" inputtag="maincpu:kbd:FI1" inputmask="0x40"><bounds x="738" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI2" inputmask="0x01"><bounds x="820" y="108" width="79" height="504" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI2" inputmask="0x02"><bounds x="902" y="108" width="79" height="504" /></element>
<element ref="whitekey-lm" inputtag="maincpu:kbd:FI2" inputmask="0x08"><bounds x="984" y="108" width="79" height="504" /></element>
<element ref="whitekey-rm" inputtag="maincpu:kbd:FI2" inputmask="0x20"><bounds x="1066" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI2" inputmask="0x80"><bounds x="1148" y="108" width="79" height="504" /></element>
<!-- octave 4 -->
<element ref="blackkey" inputtag="maincpu:kbd:FI3" inputmask="0x02"><bounds x="1278" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI3" inputmask="0x08"><bounds x="1381" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI3" inputmask="0x40"><bounds x="1521" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI4" inputmask="0x01"><bounds x="1615" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI4" inputmask="0x04"><bounds x="1709" y="108" width="44" height="324" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI3" inputmask="0x01"><bounds x="1230" y="108" width="79" height="504" /></element>
<element ref="whitekey-m" inputtag="maincpu:kbd:FI3" inputmask="0x04"><bounds x="1312" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI3" inputmask="0x10"><bounds x="1394" y="108" width="79" height="504" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI3" inputmask="0x20"><bounds x="1476" y="108" width="79" height="504" /></element>
<element ref="whitekey-lm" inputtag="maincpu:kbd:FI3" inputmask="0x80"><bounds x="1558" y="108" width="79" height="504" /></element>
<element ref="whitekey-rm" inputtag="maincpu:kbd:FI4" inputmask="0x02"><bounds x="1640" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI4" inputmask="0x08"><bounds x="1722" y="108" width="79" height="504" /></element>
<!-- octave 5 -->
<element ref="blackkey" inputtag="maincpu:kbd:FI4" inputmask="0x20"><bounds x="1852" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI4" inputmask="0x80"><bounds x="1955" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI5" inputmask="0x04"><bounds x="2095" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI5" inputmask="0x10"><bounds x="2189" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI5" inputmask="0x40"><bounds x="2283" y="108" width="44" height="324" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI4" inputmask="0x10"><bounds x="1804" y="108" width="79" height="504" /></element>
<element ref="whitekey-m" inputtag="maincpu:kbd:FI4" inputmask="0x40"><bounds x="1886" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI5" inputmask="0x01"><bounds x="1968" y="108" width="79" height="504" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI5" inputmask="0x02"><bounds x="2050" y="108" width="79" height="504" /></element>
<element ref="whitekey-lm" inputtag="maincpu:kbd:FI5" inputmask="0x08"><bounds x="2132" y="108" width="79" height="504" /></element>
<element ref="whitekey-rm" inputtag="maincpu:kbd:FI5" inputmask="0x20"><bounds x="2214" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI5" inputmask="0x80"><bounds x="2296" y="108" width="79" height="504" /></element>
<!-- octave 6 -->
<element ref="blackkey" inputtag="maincpu:kbd:FI6" inputmask="0x02"><bounds x="2426" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI6" inputmask="0x08"><bounds x="2529" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI6" inputmask="0x40"><bounds x="2669" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI7" inputmask="0x04"><bounds x="2857" y="108" width="44" height="324" /></element>
<element ref="blackkey" inputtag="maincpu:kbd:FI7" inputmask="0x01"><bounds x="2763" y="108" width="44" height="324" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI6" inputmask="0x01"><bounds x="2378" y="108" width="79" height="504" /></element>
<element ref="whitekey-m" inputtag="maincpu:kbd:FI6" inputmask="0x04"><bounds x="2460" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI6" inputmask="0x10"><bounds x="2542" y="108" width="79" height="504" /></element>
<element ref="whitekey-l" inputtag="maincpu:kbd:FI6" inputmask="0x20"><bounds x="2624" y="108" width="79" height="504" /></element>
<element ref="whitekey-lm" inputtag="maincpu:kbd:FI6" inputmask="0x80"><bounds x="2706" y="108" width="79" height="504" /></element>
<element ref="whitekey-rm" inputtag="maincpu:kbd:FI7" inputmask="0x02"><bounds x="2788" y="108" width="79" height="504" /></element>
<element ref="whitekey-r" inputtag="maincpu:kbd:FI7" inputmask="0x08"><bounds x="2870" y="108" width="79" height="504" /></element>
<!-- final key -->
<element ref="whitekey" inputtag="maincpu:kbd:FI7" inputmask="0x10"><bounds x="2952" y="108" width="79" height="504" /></element>
</group>
<!-- speaker grill -->
<element name="speaker">
<rect><bounds x="0" y="0" width="630" height="555" /><color red="0.1" green="0.1" blue="0.1" /></rect>
<disk><bounds x="60" y="11" width="510" height="510" /><color red="0.0" green="0.0" blue="0.0" /></disk>
<rect><bounds x="2" y="2" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="25" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="48" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="71" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="94" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="117" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="140" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="163" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="186" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="209" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="232" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="255" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="278" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="301" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="324" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="347" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="370" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="393" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="416" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="439" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="462" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="485" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="508" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
<rect><bounds x="2" y="531" width="626" height="15" /><color red="0.05" green="0.05" blue="0.05" /></rect>
</element>
<view name="Keyboard">
<!-- overall background -->
<element ref="greyback"><bounds x="0" y="-240" width="3154" height="1104" /></element>
<!-- speakers -->
<element ref="speaker"><bounds x="0" y="-240" width="600" height="528"/></element>
<element ref="speaker"><bounds x="2554" y="-240" width="600" height="528"/></element>
<!-- buttons -->
<group ref="buttons"><bounds x="0" y="-120" width="3154" height="420" /></group>
<!-- keyboard -->
<group ref="keyboard"><bounds x="72" y="340" width="3010" height="524" /></group>
</view>
</mamelayout>

View File

@ -11680,6 +11680,7 @@ megatrix
@source:casio/ctk551.cpp @source:casio/ctk551.cpp
ap10 // ap10 //
ctk530 //
ctk551 // ctk551 //
ctk601 // ctk601 //
gz70sp // gz70sp //