diff options
Diffstat (limited to 'src/mame/drivers/ht6000.cpp')
-rw-r--r-- | src/mame/drivers/ht6000.cpp | 178 |
1 files changed, 174 insertions, 4 deletions
diff --git a/src/mame/drivers/ht6000.cpp b/src/mame/drivers/ht6000.cpp index 06750a09905..981af94de16 100644 --- a/src/mame/drivers/ht6000.cpp +++ b/src/mame/drivers/ht6000.cpp @@ -23,7 +23,10 @@ class ht6000_state : public driver_device { public: ht6000_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) + : driver_device(mconfig, type, tag), + m_rom2(*this, "rom2"), + m_switches(*this, "kc%u", 0), + m_port_a(0) { } void ht6000(machine_config &config); @@ -33,7 +36,18 @@ protected: virtual void machine_reset() override; private: + required_memory_region m_rom2; + required_ioport_array<16> m_switches; + void maincpu_map(address_map &map); + + DECLARE_WRITE8_MEMBER(port_a_w); + + DECLARE_WRITE8_MEMBER(music_w); + DECLARE_READ8_MEMBER(switches_r); + DECLARE_READ8_MEMBER(rom2_r); + + uint8_t m_port_a; }; @@ -44,6 +58,11 @@ private: void ht6000_state::maincpu_map(address_map &map) { map(0x0000, 0x7fff).rom().region("maincpu", 0); + map(0x8000, 0x9fff).ram(); + map(0xa000, 0xbfff).ram(); + map(0xc000, 0xcfff).w(this, FUNC(ht6000_state::music_w)); + map(0xd600, 0xd6ff).r(this, FUNC(ht6000_state::switches_r)); + map(0xe000, 0xefff).r(this, FUNC(ht6000_state::rom2_r)); } @@ -52,6 +71,130 @@ void ht6000_state::maincpu_map(address_map &map) //************************************************************************** static INPUT_PORTS_START( ht6000 ) + PORT_START("kc0") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER SYNTH. ENS.") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER COSMIC DANCE") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER STRING ENS.") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER BRASS ENS.") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER PIPE ORGAN") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LINE 1") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LINE 1") + + PORT_START("kc1") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER PIANO") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER HARPSICHORD") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER GUITAR") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER TRUMPET") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER VIBRAPHONE") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER TONE SELECT") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LINE 2") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LINE 2") + + PORT_START("kc2") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER SYNTH. ENS.") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER BRASS ENS.") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER SYNTH. BRASS") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER COSMIC DANCE") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER JAZZ ORGAN") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER BASS/OBBLI.") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LINE 3") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LINE 3") + + PORT_START("kc3") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER PIANO") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER HARPSICHORD") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER HARP") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER GUITAR") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER SYNTH. GUITAR") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ACCOMP. VARIATION") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("kc4") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ROCK") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 BEAT") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("16 BEAT") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DISCO") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("POPS") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RHYTHM VARIATION") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LINE 4") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LINE 4") + + PORT_START("kc5") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SWING") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SLOW ROCK") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SAMBA") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("BOSSA NOVA") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("WALTZ") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RHYTHM PRESET A") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DETUNE") + + PORT_START("kc6") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER PRESET") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER INTERNAL") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER CARD") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RHYTHM PRESET B") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("VELOCITY") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AMPLITUDE LEVEL") + + PORT_START("kc7") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER PRESET") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER INTERNAL") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER CARD") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("AUTO HARMONIZE") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("UPPER EDIT") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("LOWER EDIT") + + PORT_START("kc8") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RHYTHM INTERNAL") + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RHYTHM CARD") + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PATTERN/MIDI") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("WRITE") + + PORT_START("kc9") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("INTRO/ENDING") + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CHORD MEM. RECORD/DELETE") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("OP. MEM. RECORD") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CHORD/OP. MEM. SELECT") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SYNCHRO FILL-IN") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("START/STOP") + + PORT_START("kc10") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("NORMAL") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SPLIT") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("FING'D") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CASIO CHORD") + + PORT_START("kc11") + PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("kc12") + PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("kc13") + PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("kc14") + PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED) + + PORT_START("kc15") + PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED) INPUT_PORTS_END @@ -59,6 +202,30 @@ INPUT_PORTS_END // MACHINE EMULATION //************************************************************************** +WRITE8_MEMBER( ht6000_state::port_a_w ) +{ + logerror("port_a_w: %02x\n", data); + m_port_a = data; +} + +WRITE8_MEMBER( ht6000_state::music_w ) +{ + // a8-a11 selects the chip, a6-a7 selects command or data + logerror("music_w: offset = %02x, %02x = %02x\n", offset >> 8, (offset >> 6 & 0x03), data); +} + +READ8_MEMBER( ht6000_state::switches_r ) +{ + return m_switches[m_port_a & 0x0f]->read(); +} + +READ8_MEMBER( ht6000_state::rom2_r ) +{ + // a12-14 from port a + offs_t addr = ((m_port_a >> 4) & 0x07) << 12; + return m_rom2->base()[addr | offset]; +} + void ht6000_state::machine_start() { @@ -77,6 +244,7 @@ void ht6000_state::machine_reset() MACHINE_CONFIG_START( ht6000_state::ht6000 ) MCFG_CPU_ADD("maincpu", UPD7810, 12_MHz_XTAL) MCFG_CPU_PROGRAM_MAP(maincpu_map) + MCFG_UPD7810_PORTA_WRITE_CB(WRITE8(ht6000_state, port_a_w)) MCFG_CPU_ADD("keycpu", I8049, 10_MHz_XTAL) MACHINE_CONFIG_END @@ -87,9 +255,11 @@ MACHINE_CONFIG_END //************************************************************************** ROM_START( ht6000 ) - ROM_REGION(0x10000, "maincpu", 0) - ROM_LOAD("m245p_8720ex707.bin", 0x0000, 0x8000, CRC(c3063c07) SHA1(f012add068d7d765bcb701ad372c0bab3302a776)) - ROM_LOAD("m245d_8720ex703.bin", 0x8000, 0x8000, CRC(bc28b60d) SHA1(6f4be2861adea57352f0d52c61e004a5c022854a)) + ROM_REGION(0x8000, "maincpu", 0) + ROM_LOAD("eac-067.bin", 0x0000, 0x8000, CRC(c3063c07) SHA1(f012add068d7d765bcb701ad372c0bab3302a776)) + + ROM_REGION(0x8000, "rom2", 0) + ROM_LOAD("eac-068.bin", 0x0000, 0x8000, CRC(bc28b60d) SHA1(6f4be2861adea57352f0d52c61e004a5c022854a)) ROM_REGION(0x800, "keycpu", 0) ROM_LOAD("187_8734h7.bin", 0x000, 0x800, CRC(47b47af7) SHA1(8f0515f95dcc6e224a8a59e0c2cd7ddb4796e34e)) |