// license:BSD-3-Clause
// copyright-holders:Sandro Ronco
/***************************************************************************
Alesis HR-16 and SR-16 drum machines
****************************************************************************/
#ifndef MAME_INCLUDES_ALESIS_H
#define MAME_INCLUDES_ALESIS_H
#pragma once
#include "cpu/mcs51/mcs51.h"
#include "machine/nvram.h"
#include "sound/dac.h"
#include "video/hd44780.h"
#include "imagedev/cassette.h"
#include "rendlay.h"
#define MCFG_ALESIS_DM3AG_ADD(_tag,_clock) \
MCFG_DEVICE_ADD( _tag, ALESIS_DM3AG, _clock )
// ======================> alesis_dm3ag_device
class alesis_dm3ag_device : public device_t
{
public:
// construction/destruction
alesis_dm3ag_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// device interface
DECLARE_WRITE8_MEMBER(write);
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void device_add_mconfig(machine_config &config) override;
private:
static const device_timer_id TIMER_DAC_UPDATE = 1;
required_device<dac_word_interface> m_dac;
required_region_ptr<int8_t> m_samples;
emu_timer * m_dac_update_timer;
bool m_output_active;
int m_count;
int m_shift;
uint32_t m_cur_sample;
uint8_t m_cmd[5];
};
// ======================> alesis_state
class alesis_state : public driver_device
{
public:
alesis_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_lcdc(*this, "hd44780"),
m_cassette(*this, "cassette"),
m_maincpu(*this, "maincpu"),
m_col1(*this, "COL1"),
m_col2(*this, "COL2"),
m_col3(*this, "COL3"),
m_col4(*this, "COL4"),
m_col5(*this, "COL5"),
m_col6(*this, "COL6"),
m_select(*this, "SELECT"),
m_digit(*this, "digit%u", 0U),
m_track_led(*this, "track_led%u", 1U),
m_patt_led(*this, "patt_led"),
m_song_led(*this, "song_led"),
m_play_led(*this, "play_led"),
m_record_led(*this, "record_led"),
m_voice_led(*this, "voice_led"),
m_tune_led(*this, "tune_led"),
m_mix_led(*this, "mix_led"),
m_tempo_led(*this, "tempo_led"),
m_midi_led(*this, "midi_led"),
m_part_led(*this, "part_led"),
m_edit_led(*this, "edit_led"),
m_echo_led(*this, "echo_led"),
m_loop_led(*this, "loop_led"),
m_a_next(*this, "a_next"),
m_b_next(*this, "b_next"),
m_fill_next(*this, "fill_next"),
m_user_next(*this, "user_next"),
m_play(*this, "play"),
m_record(*this, "record"),
m_compose(*this, "compose"),
m_perform(*this, "perform"),
m_song(*this, "song"),
m_b(*this, "b"),
m_a(*this, "a"),
m_fill(*this, "fill"),
m_user(*this, "user"),
m_edited(*this, "edited"),
m_set(*this, "set"),
m_drum(*this, "drum"),
m_press_play(*this, "press_play"),
m_metronome(*this, "metronome"),
m_tempo(*this, "tempo"),
m_page(*this, "page"),
m_step_edit(*this, "step_edit"),
m_swing_off(*this, "swing_off"),
m_swing_62(*this, "swing_62"),
m_click_l1(*this, "click_l1"),
m_click_note(*this, "click_note"),
m_click_l2(*this, "click_l2"),
m_click_3(*this, "click_3"),
m_backup(*this, "backup"),
m_drum_set(*this, "drum_set"),
m_swing(*this, "swing"),
m_swing_58(*this, "swing_58"),
m_click_off(*this, "click_off"),
m_click(*this, "click"),
m_quantize_off(*this, "quantize_off"),
m_quantize_3(*this, "quantize_3"),
m_midi_setup(*this, "midi_setup"),
m_record_setup(*this, "record_setup"),
m_quantize(*this, "quantize"),
m_swing_54(*this, "swing_54"),
m_quantize_l1(*this, "quantize_l1"),
m_quantize_l2(*this, "quantize_l2"),
m_quantize_l3(*this, "quantize_l3"),
m_quantize_note(*this, "quantize_note"),
m_setup(*this, "setup")
{ }
void init_hr16();
void mmt8(machine_config &config);
void hr16(machine_config &config);
void sr16(machine_config &config);
protected:
DECLARE_PALETTE_INIT(alesis);
virtual void machine_start() override;
virtual void machine_reset() override;
void update_lcd_symbols(bitmap_ind16 &bitmap, uint8_t pos, uint8_t y, uint8_t x, int state);
DECLARE_WRITE8_MEMBER( led_w );
DECLARE_WRITE8_MEMBER( mmt8_led_w );
DECLARE_READ8_MEMBER( mmt8_led_r );
DECLARE_WRITE8_MEMBER( track_led_w );
DECLARE_WRITE8_MEMBER( kb_matrix_w );
DECLARE_READ8_MEMBER( kb_r );
DECLARE_READ8_MEMBER( p3_r );
DECLARE_WRITE8_MEMBER( p3_w );
DECLARE_READ8_MEMBER( mmt8_p3_r );
DECLARE_WRITE8_MEMBER( mmt8_p3_w );
DECLARE_WRITE8_MEMBER( sr16_lcd_w );
HD44780_PIXEL_UPDATE(sr16_pixel_update);
void hr16_io(address_map &map);
void hr16_mem(address_map &map);
void mmt8_io(address_map &map);
void sr16_io(address_map &map);
void sr16_mem(address_map &map);
private:
uint8_t m_kb_matrix;
uint8_t m_leds;
uint8_t m_lcd_digits[5];
required_device<hd44780_device> m_lcdc;
optional_device<cassette_image_device> m_cassette;
required_device<cpu_device> m_maincpu;
required_ioport m_col1;
required_ioport m_col2;
required_ioport m_col3;
required_ioport m_col4;
required_ioport m_col5;
required_ioport m_col6;
optional_ioport m_select;
output_finder<5> m_digit;
output_finder<8> m_track_led;
output_finder<> m_patt_led;
output_finder<> m_song_led;
output_finder<> m_play_led;
output_finder<> m_record_led;
output_finder<> m_voice_led;
output_finder<> m_tune_led;
output_finder<> m_mix_led;
output_finder<> m_tempo_led;
output_finder<> m_midi_led;
output_finder<> m_part_led;
output_finder<> m_edit_led;
output_finder<> m_echo_led;
output_finder<> m_loop_led;
output_finder<> m_a_next;
output_finder<> m_b_next;
output_finder<> m_fill_next;
output_finder<> m_user_next;
output_finder<> m_play;
output_finder<> m_record;
output_finder<> m_compose;
output_finder<> m_perform;
output_finder<> m_song;
output_finder<> m_b;
output_finder<> m_a;
output_finder<> m_fill;
output_finder<> m_user;
output_finder<> m_edited;
output_finder<> m_set;
output_finder<> m_drum;
output_finder<> m_press_play;
output_finder<> m_metronome;
output_finder<> m_tempo;
output_finder<> m_page;
output_finder<> m_step_edit;
output_finder<> m_swing_off;
output_finder<> m_swing_62;
output_finder<> m_click_l1;
output_finder<> m_click_note;
output_finder<> m_click_l2;
output_finder<> m_click_3;
output_finder<> m_backup;
output_finder<> m_drum_set;
output_finder<> m_swing;
output_finder<> m_swing_58;
output_finder<> m_click_off;
output_finder<> m_click;
output_finder<> m_quantize_off;
output_finder<> m_quantize_3;
output_finder<> m_midi_setup;
output_finder<> m_record_setup;
output_finder<> m_quantize;
output_finder<> m_swing_54;
output_finder<> m_quantize_l1;
output_finder<> m_quantize_l2;
output_finder<> m_quantize_l3;
output_finder<> m_quantize_note;
output_finder<> m_setup;
};
// device type definition
DECLARE_DEVICE_TYPE(ALESIS_DM3AG, alesis_dm3ag_device)
#endif // MAME_INCLUDES_ALESIS_H