summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/alesis.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/alesis.c')
-rw-r--r--src/mess/drivers/alesis.c132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/mess/drivers/alesis.c b/src/mess/drivers/alesis.c
index b13bc16708c..2859a19ae79 100644
--- a/src/mess/drivers/alesis.c
+++ b/src/mess/drivers/alesis.c
@@ -8,6 +8,7 @@
http://www.vintagesynth.com/misc/hr16.php
http://www.vintagesynth.com/misc/sr16.php
+ http://www.vintagesynth.com/misc/mmt8.php
****************************************************************************/
@@ -73,6 +74,49 @@ WRITE8_MEMBER( alesis_state::sr16_lcd_w )
m_lcdc->write(space, BIT(m_kb_matrix,7), data);
}
+WRITE8_MEMBER( alesis_state::mmt8_led_w )
+{
+ output_set_value("play_led", data & 0x01 ? 0 : 1);
+ output_set_value("record_led" , data & 0x02 ? 0 : 1);
+ output_set_value("part_led", data & 0x04 ? 0 : 1);
+ output_set_value("edit_led", data & 0x08 ? 0 : 1);
+ output_set_value("song_led", data & 0x10 ? 0 : 1);
+ output_set_value("echo_led", data & 0x20 ? 0 : 1);
+ output_set_value("loop_led", data & 0x40 ? 0 : 1);
+
+ m_leds = data;
+}
+
+READ8_MEMBER( alesis_state::mmt8_led_r )
+{
+ return m_leds;
+}
+
+WRITE8_MEMBER( alesis_state::track_led_w )
+{
+ for (int i=0; i<8; i++)
+ output_set_indexed_value("track_led", i + 1, BIT(data, i));
+}
+
+READ8_MEMBER( alesis_state::mmt8_p3_r )
+{
+ // ---- -x-- Tape in
+ // ---- x--- Start/Stop input
+ UINT8 data = 0xff;
+
+ data &= ~(m_cassette->input() > 0.01 ? 0x00 : 0x04);
+
+ return data;
+}
+
+WRITE8_MEMBER( alesis_state::mmt8_p3_w )
+{
+ // ---x ---- Tape out
+ // --x- ---- Click out
+
+ m_cassette->output(data & 0x10 ? -1.0 : +1.0);
+}
+
static ADDRESS_MAP_START(hr16_mem, AS_PROGRAM, 8, alesis_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000, 0x7fff) AM_MIRROR(0x8000) AM_ROM
@@ -108,6 +152,19 @@ static ADDRESS_MAP_START(sr16_io, AS_IO, 8, alesis_state)
AM_RANGE(0x8000, 0xffff) AM_RAM AM_SHARE("nvram") // 32Kx8 SRAM, (battery-backed)
ADDRESS_MAP_END
+static ADDRESS_MAP_START(mmt8_io, AS_IO, 8, alesis_state)
+ ADDRESS_MAP_UNMAP_HIGH
+ AM_RANGE(0xff02, 0xff02) AM_WRITE(track_led_w)
+ AM_RANGE(0xff04, 0xff04) AM_READWRITE(mmt8_led_r, mmt8_led_w)
+ AM_RANGE(0xff06, 0xff06) AM_WRITE(kb_matrix_w)
+ AM_RANGE(0xff08, 0xff09) AM_DEVREADWRITE("hd44780", hd44780_device, read, write)
+ AM_RANGE(0xff0e, 0xff0e) AM_READNOP
+ AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ(kb_r)
+ AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_WRITENOP
+ AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(mmt8_p3_r, mmt8_p3_w)
+ AM_RANGE(0x0000, 0xffff) AM_RAM AM_SHARE("nvram") // 2x32Kx8 SRAM, (battery-backed)
+ADDRESS_MAP_END
+
/* Input ports */
static INPUT_PORTS_START( hr16 )
PORT_START("COL1")
@@ -169,6 +226,61 @@ static INPUT_PORTS_START( hr16 )
PORT_BIT(0xff, 0x00, IPT_DIAL) PORT_NAME("SELECT Slider") PORT_SENSITIVITY(50) PORT_KEYDELTA(1) PORT_CODE_DEC(KEYCODE_DOWN) PORT_CODE_INC(KEYCODE_UP)
INPUT_PORTS_END
+static INPUT_PORTS_START( mmt8 )
+ PORT_START("COL1")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("<<") PORT_CODE(KEYCODE_LEFT)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME(">>") PORT_CODE(KEYCODE_RIGHT)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("ERASE") PORT_CODE(KEYCODE_DEL)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRANS") PORT_CODE(KEYCODE_R)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PLAY") PORT_CODE(KEYCODE_ENTER)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("STOP/CONTINUE") PORT_CODE(KEYCODE_END)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("COPY") PORT_CODE(KEYCODE_C)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("RECORD") PORT_CODE(KEYCODE_HOME)
+ PORT_START("COL2")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRACK 1") PORT_CODE(KEYCODE_F1)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRACK 2") PORT_CODE(KEYCODE_F2)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRACK 3") PORT_CODE(KEYCODE_F3)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRACK 4") PORT_CODE(KEYCODE_F4)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRACK 5") PORT_CODE(KEYCODE_F5)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRACK 6") PORT_CODE(KEYCODE_F6)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRACK 7") PORT_CODE(KEYCODE_F7)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TRACK 8") PORT_CODE(KEYCODE_F8)
+ PORT_START("COL3")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TEMPO") PORT_CODE(KEYCODE_T)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("+") PORT_CODE(KEYCODE_PLUS_PAD)
+ PORT_BIT(0x38, IP_ACTIVE_LOW, IPT_UNUSED)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PAGE DOWN") PORT_CODE(KEYCODE_DOWN)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PAGE UP") PORT_CODE(KEYCODE_UP)
+ PORT_START("COL4")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CLICK") PORT_CODE(KEYCODE_G)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("8") PORT_CODE(KEYCODE_8)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("9") PORT_CODE(KEYCODE_9)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("MIDI CHAN") PORT_CODE(KEYCODE_I)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("TAPE") PORT_CODE(KEYCODE_Y)
+ PORT_START("COL5")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("CLOCK") PORT_CODE(KEYCODE_K)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("SONG") PORT_CODE(KEYCODE_S)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("MERGE") PORT_CODE(KEYCODE_M)
+ PORT_START("COL6")
+ PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("MIDI FILTER") PORT_CODE(KEYCODE_F)
+ PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("MIDI ECHO") PORT_CODE(KEYCODE_H)
+ PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LOOP") PORT_CODE(KEYCODE_J)
+ PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("QUANT") PORT_CODE(KEYCODE_Q)
+ PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("LENGTH") PORT_CODE(KEYCODE_L)
+ PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PART") PORT_CODE(KEYCODE_P)
+ PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("EDIT") PORT_CODE(KEYCODE_E)
+ PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("NAME") PORT_CODE(KEYCODE_N)
+INPUT_PORTS_END
+
static INPUT_PORTS_START( sr16 )
PORT_START("COL1")
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("PRESET/USER") PORT_CODE(KEYCODE_U)
@@ -229,6 +341,7 @@ PALETTE_INIT_MEMBER(alesis_state, alesis)
void alesis_state::machine_reset()
{
m_kb_matrix = 0xff;
+ m_leds = 0;
memset(m_lcd_digits, 0, sizeof(m_lcd_digits));
}
@@ -292,6 +405,14 @@ static MACHINE_CONFIG_DERIVED( sr16, hr16 )
MCFG_HD44780_PIXEL_UPDATE_CB(sr16_pixel_update)
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( mmt8, hr16 )
+ /* basic machine hardware */
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_IO_MAP(mmt8_io)
+
+ MCFG_DEVICE_REMOVE("dm3ag")
+MACHINE_CONFIG_END
+
/* ROM definition */
ROM_START( hr16 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
@@ -324,6 +445,16 @@ ROM_START( hr16b )
ROM_LOAD( "2-27-0007.u15", 0x80000, 0x80000, CRC(319746db) SHA1(46b32a3ab2fbad67fb4566f607f578a2e9defd63))
ROM_END
+ROM_START( mmt8 )
+ ROM_REGION( 0x8000, "maincpu", ROMREGION_ERASEFF )
+ ROM_SYSTEM_BIOS(0, "v111", "ver 1.11")
+ ROMX_LOAD( "mt8v1-11.bin", 0x00000, 0x08000, CRC(c9951946) SHA1(149bc5ea46466537de4074820c66a2296ea43bc1), ROM_BIOS(1))
+ ROM_SYSTEM_BIOS(1, "v109", "ver 1.09")
+ ROMX_LOAD( "mt8v1-09.bin", 0x00000, 0x08000, CRC(0ec41dec) SHA1(2c283965e510b586a08f0290df4dd357e6b19b62), ROM_BIOS(2))
+ ROM_SYSTEM_BIOS(2, "v108", "ver 1.08")
+ ROMX_LOAD( "mt8v1-08.bin", 0x00000, 0x08000, CRC(a0615455) SHA1(77395c837b356b34d6b96f6f46eca8c89b57434e), ROM_BIOS(3))
+ROM_END
+
ROM_START( sr16 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS(0, "v104", "ver 1.04")
@@ -349,5 +480,6 @@ DRIVER_INIT_MEMBER(alesis_state,hr16)
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
SYST( 1987, hr16, 0, 0, hr16, hr16, alesis_state, hr16, "Alesis", "HR-16", GAME_NOT_WORKING | GAME_NO_SOUND)
+SYST( 1987, mmt8, 0, 0, mmt8, mmt8, driver_device, 0, "Alesis", "MMT-8", GAME_NOT_WORKING | GAME_NO_SOUND)
SYST( 1989, hr16b, hr16, 0, hr16, hr16, alesis_state, hr16, "Alesis", "HR-16B", GAME_NOT_WORKING | GAME_NO_SOUND)
SYST( 1990, sr16, 0, 0, sr16, sr16, driver_device, 0, "Alesis", "SR-16", GAME_NOT_WORKING | GAME_NO_SOUND)