summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/rz1.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/rz1.cpp')
-rw-r--r--src/mame/drivers/rz1.cpp410
1 files changed, 0 insertions, 410 deletions
diff --git a/src/mame/drivers/rz1.cpp b/src/mame/drivers/rz1.cpp
deleted file mode 100644
index 7dc22f683ba..00000000000
--- a/src/mame/drivers/rz1.cpp
+++ /dev/null
@@ -1,410 +0,0 @@
-// license: BSD-3-Clause
-// copyright-holders: Dirk Best
-/***************************************************************************
-
- Casio RZ-1
-
- Sampling drum machine
-
- Sound ROM info:
-
- Each ROM chip holds 1.49s of sounds and can be opened as raw
- PCM data: signed 8-bit, mono, 20,000 Hz.
-
- * Sound A: Toms 1~3, Kick, Snare, Rimshot, Closed Hi-Hat, Open Hi-Hat,
- and Metronome Click (in that order).
-
- * Sound B: Clap, Ride, Cowbell, and Crash (in that order).
-
- Note: Holding EDIT/RECORD, DELETE, INSERT/AUTO-COMPENSATE and
- CHAIN/BEAT at startup causes the system to go into a RAM test.
-
- TODO:
- - Metronome
- - MIDI
- - Cassette
- - Audio input
-
-***************************************************************************/
-
-#include "emu.h"
-#include "emupal.h"
-#include "screen.h"
-#include "cpu/upd7810/upd7811.h"
-#include "video/hd44780.h"
-#include "sound/upd934g.h"
-#include "speaker.h"
-
-#include "rz1.lh"
-
-
-//**************************************************************************
-// TYPE DEFINITIONS
-//**************************************************************************
-
-class rz1_state : public driver_device
-{
-public:
- rz1_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_hd44780(*this, "hd44780"),
- m_pg{ {*this, "upd934g_c"}, {*this, "upd934g_b"} },
- m_samples{ {*this, "samples_a"}, {*this, "samples_b"} },
- m_keys(*this, "kc%u", 0),
- m_led_song(*this, "led_song"),
- m_led_pattern(*this, "led_pattern"),
- m_led_startstop(*this, "led_startstop"),
- m_port_a(0),
- m_port_b(0xff)
- { }
-
- void rz1(machine_config &config);
-
- void rz1_palette(palette_device &palette) const;
- HD44780_PIXEL_UPDATE(lcd_pixel_update);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
-private:
- required_device<upd7811_device> m_maincpu;
- required_device<hd44780_device> m_hd44780;
- required_device<upd934g_device> m_pg[2];
- required_memory_region m_samples[2];
- required_ioport_array<8> m_keys;
-
- output_finder<> m_led_song;
- output_finder<> m_led_pattern;
- output_finder<> m_led_startstop;
-
- void map(address_map &map);
-
- DECLARE_READ8_MEMBER(port_a_r);
- DECLARE_WRITE8_MEMBER(port_a_w);
- DECLARE_WRITE8_MEMBER(port_b_w);
- DECLARE_READ8_MEMBER(port_c_r);
- DECLARE_WRITE8_MEMBER(port_c_w);
-
- DECLARE_READ8_MEMBER(upd934g_c_data_r);
- DECLARE_WRITE8_MEMBER(upd934g_c_w);
- DECLARE_READ8_MEMBER(upd934g_b_data_r);
- DECLARE_WRITE8_MEMBER(upd934g_b_w);
- DECLARE_READ8_MEMBER(key_r);
- DECLARE_WRITE8_MEMBER(leds_w);
-
- uint8_t m_port_a;
- uint8_t m_port_b;
-};
-
-
-//**************************************************************************
-// ADDRESS MAPS
-//**************************************************************************
-
-void rz1_state::map(address_map &map)
-{
-// map(0x0000, 0x0fff).rom().region("maincpu", 0);
- map(0x2000, 0x3fff).ram();
- map(0x4000, 0x7fff).rom().region("program", 0);
- map(0x8000, 0x8fff).w(FUNC(rz1_state::upd934g_c_w));
- map(0x9000, 0x9fff).rw(FUNC(rz1_state::key_r), FUNC(rz1_state::upd934g_b_w));
- map(0xa000, 0xbfff).ram(); // sample ram 1
- map(0xc000, 0xdfff).ram(); // sample ram 2
- map(0xe000, 0xe001).w(FUNC(rz1_state::leds_w));
-}
-
-
-//**************************************************************************
-// INPUT PORT DEFINITIONS
-//**************************************************************************
-
-static INPUT_PORTS_START( rz1 )
- PORT_START("kc0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TOM1") PORT_CODE(KEYCODE_F1)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TOM3") PORT_CODE(KEYCODE_F2)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RIM") PORT_CODE(KEYCODE_F3)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("OPEN HH") PORT_CODE(KEYCODE_F4)
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CLAPS") PORT_CODE(KEYCODE_F5)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("COWBELL") PORT_CODE(KEYCODE_F6)
- PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
-
- PORT_START("kc1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TOM2") PORT_CODE(KEYCODE_F7)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("B D") PORT_CODE(KEYCODE_F8)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("S D") PORT_CODE(KEYCODE_F9)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CLOSED HH") PORT_CODE(KEYCODE_F10)
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RIDE") PORT_CODE(KEYCODE_F11)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CRASH") PORT_CODE(KEYCODE_F12)
- PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
-
- PORT_START("kc2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SAMPLE 1") PORT_CODE(KEYCODE_1)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SAMPLE 2") PORT_CODE(KEYCODE_2)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SAMPLE 3") PORT_CODE(KEYCODE_3)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SAMPLE 4") PORT_CODE(KEYCODE_4)
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MUTE") PORT_CODE(KEYCODE_M)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("ACCENT") PORT_CODE(KEYCODE_A)
- PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
-
- PORT_START("kc3")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("START/STOP") PORT_CODE(KEYCODE_S)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CONTINUE START") PORT_CODE(KEYCODE_C)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SAMPLING") PORT_CODE(KEYCODE_L)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TEMPO \xe2\x96\xb3") PORT_CODE(KEYCODE_PLUS_PAD)
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("TEMPO \xe2\x96\xbd") PORT_CODE(KEYCODE_MINUS_PAD)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("RESET/COPY") PORT_CODE(KEYCODE_R)
- PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
-
- PORT_START("kc4")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PATTERN") PORT_CODE(KEYCODE_P)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SONG") PORT_CODE(KEYCODE_O)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("EDIT/RECORD") PORT_CODE(KEYCODE_E)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("DELETE") PORT_CODE(KEYCODE_DEL)
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("INSERT/AUTO-COMPENSATE") PORT_CODE(KEYCODE_INSERT)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("CHAIN/BEAT") PORT_CODE(KEYCODE_B)
- PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
-
- PORT_START("kc5")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MT SAVE") PORT_CODE(KEYCODE_5)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MT LOAD") PORT_CODE(KEYCODE_6)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MIDI CH") PORT_CODE(KEYCODE_7)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("MIDI CLOCK") PORT_CODE(KEYCODE_8)
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
-
- PORT_START("kc6")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("0 (1/2)") PORT_CODE(KEYCODE_0_PAD)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("1 (1/4)") PORT_CODE(KEYCODE_1_PAD)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("2 (1/6)") PORT_CODE(KEYCODE_2_PAD)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("3 (1/8)") PORT_CODE(KEYCODE_3_PAD)
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("4 (1/12)") PORT_CODE(KEYCODE_4_PAD)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("5 (1/16)") PORT_CODE(KEYCODE_5_PAD)
- PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
-
- PORT_START("kc7")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("6 (1/24)") PORT_CODE(KEYCODE_6_PAD)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("7 (1/32)") PORT_CODE(KEYCODE_7_PAD)
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("8 (1/48)") PORT_CODE(KEYCODE_8_PAD)
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("9 (1/96)") PORT_CODE(KEYCODE_9_PAD)
- PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\xe2\x96\xb3 (YES)") PORT_CODE(KEYCODE_UP)
- PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("\xe2\x96\xbd (NO)") PORT_CODE(KEYCODE_DOWN)
- PORT_BIT(0xc0, IP_ACTIVE_HIGH, IPT_UNUSED)
-INPUT_PORTS_END
-
-
-//**************************************************************************
-// MACHINE EMULATION
-//**************************************************************************
-
-HD44780_PIXEL_UPDATE( rz1_state::lcd_pixel_update )
-{
- // char size is 5x8
- if (x > 4 || y > 7)
- return;
-
- if (line < 1 && pos < 16)
- bitmap.pix16(1 + y, 1 + line*8*6 + pos*6 + x) = state ? 1 : 2;
-}
-
-READ8_MEMBER( rz1_state::upd934g_c_data_r )
-{
- if (offset < 0x8000)
- return m_samples[1]->base()[offset];
- else
- {
- if (offset < 0xc000)
- return m_maincpu->space(AS_PROGRAM).read_byte(offset + 0x2000);
- else
- return 0;
- }
-}
-
-READ8_MEMBER( rz1_state::upd934g_b_data_r )
-{
- if (offset < 0x8000)
- return m_samples[0]->base()[offset];
- else
- return 0;
-}
-
-WRITE8_MEMBER( rz1_state::upd934g_c_w )
-{
- m_pg[0]->write(space, offset >> 8, data);
-}
-
-WRITE8_MEMBER( rz1_state::upd934g_b_w )
-{
- m_pg[1]->write(space, offset >> 8, data);
-}
-
-READ8_MEMBER( rz1_state::port_a_r )
-{
- if ((BIT(m_port_b, 7) == 0) && (BIT(m_port_b, 6) == 1))
- {
- // Not clear why, but code expects to read busy flag from PA5 rather than PA7
- return bitswap<8>(m_hd44780->read(BIT(m_port_b, 5)), 5, 6, 7, 4, 3, 2, 1, 0);
- }
-
- logerror("port_a_r (PB = %02x)\n", m_port_b);
- return 0;
-}
-
-WRITE8_MEMBER( rz1_state::port_a_w )
-{
- m_port_a = data;
-
- if ((BIT(m_port_b, 7) == 0) && (BIT(m_port_b, 6) == 0))
- m_hd44780->write(BIT(m_port_b, 5), data);
-}
-
-// 7------- lcd e
-// -6------ lcd rw
-// --5----- lcd rs
-// ---4---- percussion generator reset
-// ----3--- metronome trigger
-// -----2-- power-on mute for line-out
-// ------1- change-over signal tom3/bd
-// -------0 change-over signal tom1/tom2
-
-WRITE8_MEMBER( rz1_state::port_b_w )
-{
- if (0)
- logerror("port_b_w: %02x\n", data);
-
- m_port_b = data;
-}
-
-// 7------- foot-sustain input
-// -6------ cassette data out
-// --5----- cassette remote control
-// ---4---- change-over signal for sampling ram
-// ----3--- cassette data in
-// -----2-- control signal for percussion generator c
-// ------1- midi in
-// -------0 midi out
-
-READ8_MEMBER( rz1_state::port_c_r )
-{
- return 0;
-}
-
-WRITE8_MEMBER( rz1_state::port_c_w )
-{
- logerror("port_c_w: %02x\n", data);
-}
-
-READ8_MEMBER( rz1_state::key_r )
-{
- uint8_t data = 0;
-
- if (BIT(m_port_a, 0) == 0) data |= m_keys[0]->read();
- if (BIT(m_port_a, 1) == 0) data |= m_keys[1]->read();
- if (BIT(m_port_a, 2) == 0) data |= m_keys[2]->read();
- if (BIT(m_port_a, 3) == 0) data |= m_keys[3]->read();
- if (BIT(m_port_a, 4) == 0) data |= m_keys[4]->read();
- if (BIT(m_port_a, 5) == 0) data |= m_keys[5]->read();
- if (BIT(m_port_a, 6) == 0) data |= m_keys[6]->read();
- if (BIT(m_port_a, 7) == 0) data |= m_keys[7]->read();
-
- return data;
-}
-
-WRITE8_MEMBER( rz1_state::leds_w )
-{
- m_led_song = BIT(data, 0) == 0 ? 1 : BIT(data, 1) == 0 ? 2 : 0;
- m_led_pattern = BIT(data, 2) == 0 ? 1 : BIT(data, 3) == 0 ? 2 : 0;
- m_led_startstop = BIT(data, 4) == 0 ? 1 : 0;
-}
-
-void rz1_state::machine_start()
-{
- // resolve output finders
- m_led_song.resolve();
- m_led_pattern.resolve();
- m_led_startstop.resolve();
-
- // register for save states
- save_item(NAME(m_port_a));
- save_item(NAME(m_port_b));
-}
-
-void rz1_state::machine_reset()
-{
-}
-
-void rz1_state::rz1_palette(palette_device &palette) const
-{
- palette.set_pen_color(0, rgb_t(138, 146, 148)); // background
- palette.set_pen_color(1, rgb_t(92, 83, 88)); // lcd pixel on
- palette.set_pen_color(2, rgb_t(131, 136, 139)); // lcd pixel off
-}
-
-//**************************************************************************
-// MACHINE DEFINTIONS
-//**************************************************************************
-
-void rz1_state::rz1(machine_config &config)
-{
- UPD7811(config, m_maincpu, 12_MHz_XTAL);
- m_maincpu->set_addrmap(AS_PROGRAM, &rz1_state::map);
- m_maincpu->pa_in_cb().set(FUNC(rz1_state::port_a_r));
- m_maincpu->pa_out_cb().set(FUNC(rz1_state::port_a_w));
- m_maincpu->pb_out_cb().set(FUNC(rz1_state::port_b_w));
- m_maincpu->pc_in_cb().set(FUNC(rz1_state::port_c_r));
- m_maincpu->pc_out_cb().set(FUNC(rz1_state::port_c_w));
-
- // video hardware
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
- screen.set_refresh_hz(50);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
- screen.set_size(6*16+1, 10);
- screen.set_visarea(0, 6*16, 0, 10-1);
- screen.set_screen_update("hd44780", FUNC(hd44780_device::screen_update));
- screen.set_palette("palette");
-
- PALETTE(config, "palette", FUNC(rz1_state::rz1_palette), 3);
-
- HD44780(config, m_hd44780, 0);
- m_hd44780->set_lcd_size(1, 16);
- m_hd44780->set_pixel_update_cb(FUNC(rz1_state::lcd_pixel_update));
-
- config.set_default_layout(layout_rz1);
-
- SPEAKER(config, "speaker").front_center();
- UPD934G(config, m_pg[0], 1333000);
- m_pg[0]->data_callback().set(FUNC(rz1_state::upd934g_c_data_r));
- m_pg[0]->add_route(ALL_OUTPUTS, "speaker", 1.0);
- UPD934G(config, m_pg[1], 1280000);
- m_pg[1]->data_callback().set(FUNC(rz1_state::upd934g_b_data_r));
- m_pg[1]->add_route(ALL_OUTPUTS, "speaker", 1.0);
-}
-
-
-//**************************************************************************
-// ROM DEFINITIONS
-//**************************************************************************
-
-ROM_START( rz1 )
- ROM_REGION(0x1000, "maincpu", 0)
- ROM_LOAD("upd7811.bin", 0x0000, 0x1000, CRC(597ac04a) SHA1(96451a764296eaa22aaad3cba121226dcba865f4))
-
- ROM_REGION(0x4000, "program", 0)
- ROM_LOAD("program.bin", 0x0000, 0x4000, CRC(b44b2652) SHA1(b77f8daece9adb177b6ce1ef518fc3238b8c0a9c))
-
- ROM_REGION(0x8000, "samples_a", 0)
- ROM_LOAD("sound_a.cm5", 0x0000, 0x8000, CRC(c643ff24) SHA1(e886314d22a9a5473bfa2cb237ecafcf0daedfc1)) // HN613256P
-
- ROM_REGION(0x8000, "samples_b", 0)
- ROM_LOAD("sound_b.cm6", 0x0000, 0x8000, CRC(ee5b703e) SHA1(cbf2e92c68901f236678d704e9e695a5c84ff49e)) // HN613256P
-ROM_END
-
-
-//**************************************************************************
-// SYSTEM DRIVERS
-//**************************************************************************
-
-// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-CONS( 1986, rz1, 0, 0, rz1, rz1, rz1_state, empty_init, "Casio", "RZ-1", MACHINE_SUPPORTS_SAVE )