k053260.cpp : Updates

Simplify handlers, Use std::s, Shorter type values, Fix spacings
This commit is contained in:
cam900 2019-04-13 11:13:48 +09:00
parent d80a70f1bb
commit c52cbce476
3 changed files with 50 additions and 54 deletions

View File

@ -55,9 +55,11 @@
#include "emu.h"
#include "k053260.h"
#include <algorithm>
#define LOG 0
#define CLOCKS_PER_SAMPLE 32
static constexpr int CLOCKS_PER_SAMPLE = 32;
@ -73,7 +75,7 @@ DEFINE_DEVICE_TYPE(K053260, k053260_device, "k053260", "K053260 KDSC")
// k053260_device - constructor
//-------------------------------------------------
k053260_device::k053260_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
k053260_device::k053260_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, K053260, tag, owner, clock)
, device_sound_interface(mconfig, *this)
, device_rom_interface(mconfig, *this, 21)
@ -82,7 +84,7 @@ k053260_device::k053260_device(const machine_config &mconfig, const char *tag, d
, m_mode(0)
, m_voice{ { *this }, { *this }, { *this }, { *this } }
{
memset(m_portdata, 0, sizeof(m_portdata));
std::fill(std::begin(m_portdata), std::end(m_portdata), 0);
}
@ -135,24 +137,24 @@ void k053260_device::rom_bank_updated()
}
READ8_MEMBER( k053260_device::main_read )
u8 k053260_device::main_read(offs_t offset)
{
// sub-to-main ports
return m_portdata[2 + (offset & 1)];
}
WRITE8_MEMBER( k053260_device::main_write )
void k053260_device::main_write(offs_t offset, u8 data)
{
// main-to-sub ports
m_portdata[offset & 1] = data;
}
READ8_MEMBER( k053260_device::read )
u8 k053260_device::read(offs_t offset)
{
offset &= 0x3f;
uint8_t ret = 0;
u8 ret = 0;
switch (offset)
{
@ -181,7 +183,7 @@ READ8_MEMBER( k053260_device::read )
}
WRITE8_MEMBER( k053260_device::write )
void k053260_device::write(offs_t offset, u8 data)
{
offset &= 0x3f;
@ -207,7 +209,7 @@ WRITE8_MEMBER( k053260_device::write )
case 0x28: // key on/off
{
uint8_t rising_edge = data & ~m_keyon;
u8 rising_edge = data & ~m_keyon;
for (int i = 0; i < 4; i++)
{
@ -261,19 +263,13 @@ WRITE8_MEMBER( k053260_device::write )
}
}
static inline int limit( int val, int max, int min )
static inline int limit(int val, int max, int min)
{
if ( val > max )
val = max;
else if ( val < min )
val = min;
return val;
return std::max(min, std::min(max, val));
}
#define MAXOUT 0x7fff
#define MINOUT -0x8000
static constexpr s32 MAXOUT = 0x7fff;
static constexpr s32 MINOUT = -0x8000;
//-------------------------------------------------
// sound_stream_update - handle a stream update
@ -299,8 +295,8 @@ void k053260_device::sound_stream_update(sound_stream &stream, stream_sample_t *
}
else
{
memset(outputs[0], 0, samples * sizeof(*outputs[0]));
memset(outputs[1], 0, samples * sizeof(*outputs[1]));
std::fill_n(&outputs[0][0], samples, 0);
std::fill_n(&outputs[1][0], samples, 0);
}
}
@ -343,7 +339,7 @@ void k053260_device::KDSC_Voice::voice_reset()
update_pan_volume();
}
void k053260_device::KDSC_Voice::set_register(offs_t offset, uint8_t data)
void k053260_device::KDSC_Voice::set_register(offs_t offset, u8 data)
{
switch (offset & 0x7)
{
@ -374,13 +370,13 @@ void k053260_device::KDSC_Voice::set_register(offs_t offset, uint8_t data)
}
}
void k053260_device::KDSC_Voice::set_loop_kadpcm(uint8_t data)
void k053260_device::KDSC_Voice::set_loop_kadpcm(u8 data)
{
m_loop = BIT(data, 0);
m_kadpcm = BIT(data, 4);
}
void k053260_device::KDSC_Voice::set_pan(uint8_t data)
void k053260_device::KDSC_Voice::set_pan(u8 data)
{
m_pan = data & 0x7;
update_pan_volume();
@ -417,7 +413,7 @@ void k053260_device::KDSC_Voice::play(stream_sample_t *outputs)
{
m_counter = m_counter - 0x1000 + m_pitch;
uint32_t bytepos = ++m_position >> ( m_kadpcm ? 1 : 0 );
u32 bytepos = ++m_position >> ( m_kadpcm ? 1 : 0 );
/*
Yes, _pre_increment. Playback must start 1 byte position after the
start address written to the register, or else ADPCM sounds will
@ -441,12 +437,12 @@ void k053260_device::KDSC_Voice::play(stream_sample_t *outputs)
}
}
uint8_t romdata = m_device.read_byte(m_start + bytepos);
u8 romdata = m_device.read_byte(m_start + bytepos);
if (m_kadpcm)
{
if (m_position & 1) romdata >>= 4; // decode low nybble, then high nybble
static const int8_t kadpcm_table[] = {0,1,2,4,8,16,32,64,-128,-64,-32,-16,-8,-4,-2,-1};
static const s8 kadpcm_table[] = {0,1,2,4,8,16,32,64,-128,-64,-32,-16,-8,-4,-2,-1};
m_output += kadpcm_table[romdata & 0xf];
}
else
@ -459,9 +455,9 @@ void k053260_device::KDSC_Voice::play(stream_sample_t *outputs)
outputs[1] += m_output * m_pan_volume[1];
}
uint8_t k053260_device::KDSC_Voice::read_rom()
u8 k053260_device::KDSC_Voice::read_rom()
{
uint32_t offs = m_start + m_position;
u32 offs = m_start + m_position;
m_position = (m_position + 1) & 0xffff;

View File

@ -22,12 +22,12 @@ class k053260_device : public device_t,
public device_rom_interface
{
public:
k053260_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
k053260_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
DECLARE_READ8_MEMBER( main_read );
DECLARE_WRITE8_MEMBER( main_write );
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
u8 main_read(offs_t offset);
void main_write(offs_t offset, u8 data);
u8 read(offs_t offset);
void write(offs_t offset, u8 data);
protected:
// device-level overrides
@ -46,9 +46,9 @@ private:
sound_stream * m_stream;
// live state
uint8_t m_portdata[4];
uint8_t m_keyon;
uint8_t m_mode;
u8 m_portdata[4];
u8 m_keyon;
u8 m_mode;
// per voice state
class KDSC_Voice
@ -58,37 +58,37 @@ private:
inline void voice_start(int index);
inline void voice_reset();
inline void set_register(offs_t offset, uint8_t data);
inline void set_loop_kadpcm(uint8_t data);
inline void set_pan(uint8_t data);
inline void set_register(offs_t offset, u8 data);
inline void set_loop_kadpcm(u8 data);
inline void set_pan(u8 data);
inline void update_pan_volume();
inline void key_on();
inline void key_off();
inline void play(stream_sample_t *outputs);
inline bool playing() { return m_playing; }
inline uint8_t read_rom();
inline u8 read_rom();
private:
// pointer to owning device
k053260_device &m_device;
// live state
uint32_t m_position = 0;
uint16_t m_pan_volume[2];
uint16_t m_counter = 0;
int8_t m_output = 0;
bool m_playing = false;
u32 m_position = 0;
u16 m_pan_volume[2];
u16 m_counter = 0;
s8 m_output = 0;
bool m_playing = false;
// per voice registers
uint32_t m_start = 0;
uint16_t m_length = 0;
uint16_t m_pitch = 0;
uint8_t m_volume = 0;
u32 m_start = 0;
u16 m_length = 0;
u16 m_pitch = 0;
u8 m_volume = 0;
// bit packed registers
uint8_t m_pan = 0;
bool m_loop = false;
bool m_kadpcm = false;
u8 m_pan = 0;
bool m_loop = false;
bool m_kadpcm = false;
} m_voice[4];
};

View File

@ -171,7 +171,7 @@ INTERRUPT_GEN_MEMBER(tmnt_state::lgtnfght_interrupt)
WRITE8_MEMBER(tmnt_state::glfgreat_sound_w)
{
m_k053260->main_write(space, offset, data);
m_k053260->main_write(offset, data);
if (offset)
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80