diff options
Diffstat (limited to 'src/mess/drivers/alesis.c')
-rw-r--r-- | src/mess/drivers/alesis.c | 132 |
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) |