mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
100 lines
2.4 KiB
C++
100 lines
2.4 KiB
C++
#ifndef _DIGITALKER_H_
|
|
#define _DIGITALKER_H_
|
|
|
|
|
|
//**************************************************************************
|
|
// INTERFACE CONFIGURATION MACROS
|
|
//**************************************************************************
|
|
|
|
#define MCFG_DIGITALKER_ADD(_tag, _clock) \
|
|
MCFG_DEVICE_ADD(_tag, DIGITALKER, _clock)
|
|
#define MCFG_DIGITALKER_REPLACE(_tag, _clock) \
|
|
MCFG_DEVICE_REPLACE(_tag, DIGITALKER, _clock)
|
|
|
|
|
|
//**************************************************************************
|
|
// TYPE DEFINITIONS
|
|
//**************************************************************************
|
|
|
|
// ======================> digitalker_device
|
|
|
|
class digitalker_device : public device_t,
|
|
public device_sound_interface
|
|
{
|
|
public:
|
|
digitalker_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
~digitalker_device() { }
|
|
|
|
void digitalker_0_cs_w(int line);
|
|
void digitalker_0_cms_w(int line);
|
|
void digitalker_0_wr_w(int line);
|
|
int digitalker_0_intr_r();
|
|
|
|
protected:
|
|
// device-level overrides
|
|
virtual void device_start();
|
|
|
|
// sound stream update overrides
|
|
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
|
|
|
|
public:
|
|
DECLARE_WRITE8_MEMBER(digitalker_data_w);
|
|
|
|
private:
|
|
void digitalker_write(UINT8 *adr, UINT8 vol, INT8 dac);
|
|
UINT8 digitalker_pitch_next(UINT8 val, UINT8 prev, int step);
|
|
void digitalker_set_intr(UINT8 intr);
|
|
void digitalker_start_command(UINT8 cmd);
|
|
void digitalker_step_mode_0();
|
|
void digitalker_step_mode_1();
|
|
void digitalker_step_mode_2();
|
|
void digitalker_step_mode_3();
|
|
void digitalker_step();
|
|
void digitalker_cs_w(int line);
|
|
void digitalker_cms_w(int line);
|
|
void digitalker_wr_w(int line);
|
|
int digitalker_intr_r();
|
|
void digitalker_register_for_save();
|
|
|
|
private:
|
|
const UINT8 *m_rom;
|
|
sound_stream *m_stream;
|
|
|
|
// Port/lines state
|
|
UINT8 m_data;
|
|
UINT8 m_cs;
|
|
UINT8 m_cms;
|
|
UINT8 m_wr;
|
|
UINT8 m_intr;
|
|
|
|
// Current decoding state
|
|
UINT16 m_bpos;
|
|
UINT16 m_apos;
|
|
|
|
UINT8 m_mode;
|
|
UINT8 m_cur_segment;
|
|
UINT8 m_cur_repeat;
|
|
UINT8 m_segments;
|
|
UINT8 m_repeats;
|
|
|
|
UINT8 m_prev_pitch;
|
|
UINT8 m_pitch;
|
|
UINT8 m_pitch_pos;
|
|
|
|
UINT8 m_stop_after;
|
|
UINT8 m_cur_dac;
|
|
UINT8 m_cur_bits;
|
|
|
|
// Zero-range size
|
|
UINT32 m_zero_count; // 0 for done
|
|
|
|
// Waveform and current index in it
|
|
UINT8 m_dac_index; // 128 for done
|
|
INT16 m_dac[128];
|
|
};
|
|
|
|
extern const device_type DIGITALKER;
|
|
|
|
|
|
#endif
|