88 lines
1.8 KiB
C++
88 lines
1.8 KiB
C++
// license:BSD-3-Clause
|
|
// copyright-holders:Olivier Galibert,Aaron Giles
|
|
/*********************************************************/
|
|
/* ricoh RF5C68(or clone) PCM controller */
|
|
/*********************************************************/
|
|
|
|
#include <vector>
|
|
|
|
#ifndef MAME_SOUND_RF5C68_H
|
|
#define MAME_SOUND_RF5C68_H
|
|
|
|
#pragma once
|
|
|
|
namespace rf5c68
|
|
{
|
|
typedef unsigned char u8;
|
|
typedef signed char s8;
|
|
typedef unsigned short u16;
|
|
typedef signed short s16;
|
|
typedef unsigned int u32;
|
|
typedef signed int s32;
|
|
typedef signed int offs_t;
|
|
}
|
|
|
|
|
|
//**************************************************************************
|
|
// TYPE DEFINITIONS
|
|
//**************************************************************************
|
|
|
|
#define RF5C68_SAMPLE_END_CB_MEMBER(_name) void _name(int channel)
|
|
|
|
|
|
// ======================> rf5c68_device
|
|
|
|
using namespace rf5c68;
|
|
class rf5c68_device
|
|
{
|
|
public:
|
|
rf5c68_device();
|
|
|
|
u8 rf5c68_r(offs_t offset);
|
|
void rf5c68_w(offs_t offset, u8 data);
|
|
|
|
u8 rf5c68_mem_r(offs_t offset);
|
|
void rf5c68_mem_w(offs_t offset, u8 data);
|
|
|
|
void device_start(u8 *ext_mem);
|
|
void device_reset();
|
|
|
|
void sound_stream_update(s16 **outputs, s16 **channel_outputs, u32 samples);
|
|
|
|
protected:
|
|
rf5c68_device(int output_bits);
|
|
|
|
private:
|
|
static constexpr unsigned NUM_CHANNELS = 8;
|
|
|
|
struct pcm_channel
|
|
{
|
|
pcm_channel() { }
|
|
|
|
u8 enable;
|
|
u8 env;
|
|
u8 pan;
|
|
u8 start;
|
|
u32 addr;
|
|
u16 step;
|
|
u16 loopst;
|
|
};
|
|
|
|
pcm_channel m_chan[NUM_CHANNELS];
|
|
u8 m_cbank;
|
|
u16 m_wbank;
|
|
u8 m_enable;
|
|
int m_output_bits;
|
|
std::vector<s32> m_mixleft;
|
|
std::vector<s32> m_mixright;
|
|
u8 *m_ext_mem;
|
|
};
|
|
|
|
class rf5c164_device : public rf5c68_device
|
|
{
|
|
public:
|
|
rf5c164_device();
|
|
};
|
|
|
|
#endif // MAME_SOUND_RF5C68_H
|