mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
ym2203/ym2608/ym2610/ym2612/ymf262/ym3526/ym3812/y8950/ym2413/ymf271/ymf278b/ymz280b/ymz770/zsg2: update to new stream callbacks
This commit is contained in:
parent
ecd3333757
commit
f051f97e6c
@ -54,13 +54,12 @@ void ym2203_device::timer_handler(int c, int count, int clock)
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// stream_generate - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
|
||||
void ym2203_device::stream_generate(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ym2203_device::stream_generate(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
ym2203_update_one(m_chip, outputs[0], samples);
|
||||
ym2203_update_one(m_chip, outputs[0]);
|
||||
}
|
||||
|
||||
|
||||
@ -108,7 +107,7 @@ void ym2203_device::calculate_rates()
|
||||
if (m_stream != nullptr)
|
||||
m_stream->set_sample_rate(rate);
|
||||
else
|
||||
m_stream = machine().sound().stream_alloc_legacy(*this,0,1,rate, stream_update_legacy_delegate(&ym2203_device::stream_generate,this));
|
||||
m_stream = machine().sound().stream_alloc(*this,0,1,rate, stream_update_delegate(&ym2203_device::stream_generate,this), STREAM_DEFAULT_FLAGS);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -39,7 +39,7 @@ protected:
|
||||
virtual void device_clock_changed() override;
|
||||
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
void stream_generate(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples);
|
||||
void stream_generate(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs);
|
||||
|
||||
private:
|
||||
enum
|
||||
|
@ -63,12 +63,12 @@ void ym2608_device::timer_handler(int c,int count,int clock)
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// stream_generate - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ym2608_device::stream_generate(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ym2608_device::stream_generate(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
ym2608_update_one(m_chip, outputs, samples);
|
||||
ym2608_update_one(m_chip, outputs);
|
||||
}
|
||||
|
||||
void ym2608_device::device_post_load()
|
||||
@ -93,7 +93,7 @@ void ym2608_device::device_start()
|
||||
m_timer[1] = timer_alloc(1);
|
||||
|
||||
/* stream system initialize */
|
||||
m_stream = machine().sound().stream_alloc_legacy(*this,0,2,rate, stream_update_legacy_delegate(&ym2608_device::stream_generate,this));
|
||||
m_stream = machine().sound().stream_alloc(*this,0,2,rate, stream_update_delegate(&ym2608_device::stream_generate,this), STREAM_DEFAULT_FLAGS);
|
||||
|
||||
/* initialize YM2608 */
|
||||
m_chip = ym2608_init(this,clock(),rate,
|
||||
|
@ -39,7 +39,7 @@ protected:
|
||||
virtual void rom_bank_updated() override;
|
||||
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
void stream_generate(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples);
|
||||
void stream_generate(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs);
|
||||
|
||||
private:
|
||||
void irq_handler(int irq);
|
||||
|
@ -62,20 +62,20 @@ void ym2610_device::timer_handler(int c,int count,int clock)
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// stream_generate - handle a stream update
|
||||
//-------------------------------------------------
|
||||
void ym2610_device::stream_generate(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ym2610_device::stream_generate(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
ym2610_update_one(m_chip, outputs, samples);
|
||||
ym2610_update_one(m_chip, outputs);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// stream_generate - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ym2610b_device::stream_generate(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ym2610b_device::stream_generate(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
ym2610b_update_one(m_chip, outputs, samples);
|
||||
ym2610b_update_one(m_chip, outputs);
|
||||
}
|
||||
|
||||
|
||||
@ -102,7 +102,7 @@ void ym2610_device::device_start()
|
||||
m_timer[1] = timer_alloc(1);
|
||||
|
||||
/* stream system initialize */
|
||||
m_stream = machine().sound().stream_alloc_legacy(*this,0,2,rate, stream_update_legacy_delegate(&ym2610_device::stream_generate,this));
|
||||
m_stream = machine().sound().stream_alloc(*this,0,2,rate, stream_update_delegate(&ym2610_device::stream_generate,this), STREAM_DEFAULT_FLAGS);
|
||||
|
||||
if (!has_configured_map(0) && !has_configured_map(1))
|
||||
{
|
||||
|
@ -40,7 +40,7 @@ protected:
|
||||
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
virtual void stream_generate(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples);
|
||||
virtual void stream_generate(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs);
|
||||
|
||||
void * m_chip;
|
||||
|
||||
@ -75,7 +75,7 @@ public:
|
||||
ym2610b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
virtual void stream_generate(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void stream_generate(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
};
|
||||
|
||||
|
||||
|
@ -56,12 +56,12 @@ void ym2612_device::timer_handler(int c,int count,int clock)
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ym2612_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ym2612_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
ym2612_update_one(m_chip, outputs, samples, m_output_bits);
|
||||
ym2612_update_one(m_chip, outputs, m_output_bits);
|
||||
}
|
||||
|
||||
|
||||
@ -87,7 +87,7 @@ void ym2612_device::device_start()
|
||||
m_timer[1] = timer_alloc(1);
|
||||
|
||||
/* stream system initialize */
|
||||
m_stream = stream_alloc_legacy(0,2,rate);
|
||||
m_stream = stream_alloc(0,2,rate);
|
||||
|
||||
/**** initialize YM2612 ****/
|
||||
m_chip = ym2612_init(this,clock(),rate,&ym2612_device::static_timer_handler,&ym2612_device::static_irq_handler);
|
||||
@ -108,7 +108,7 @@ void ym2612_device::calculate_rates()
|
||||
if (m_stream != nullptr)
|
||||
m_stream->set_sample_rate(rate);
|
||||
else
|
||||
m_stream = stream_alloc_legacy(0,2,rate);
|
||||
m_stream = stream_alloc(0,2,rate);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -33,7 +33,7 @@ protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
u8 m_output_bits;
|
||||
private:
|
||||
|
@ -50,12 +50,12 @@ void ymf262_device::timer_handler(int c, const attotime &period)
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ymf262_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ymf262_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
ymf262_update_one(m_chip, outputs, samples);
|
||||
ymf262_update_one(m_chip, outputs);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -81,7 +81,7 @@ void ymf262_device::device_start()
|
||||
if (!m_chip)
|
||||
throw emu_fatalerror("ymf262_device(%s): Error creating YMF262 chip", tag());
|
||||
|
||||
m_stream = stream_alloc_legacy(0,4,rate);
|
||||
m_stream = stream_alloc(0,4,rate);
|
||||
|
||||
/* YMF262 setup */
|
||||
ymf262_set_timer_handler (m_chip, &ymf262_device::static_timer_handler, this);
|
||||
|
@ -27,7 +27,7 @@ protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
private:
|
||||
void irq_handler(int irq);
|
||||
|
@ -60,12 +60,12 @@ void ym3526_device::timer_handler(int c,const attotime &period)
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ym3526_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ym3526_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
ym3526_update_one(m_chip, outputs[0], samples);
|
||||
ym3526_update_one(m_chip, outputs[0]);
|
||||
}
|
||||
|
||||
|
||||
@ -109,7 +109,7 @@ void ym3526_device::calculate_rates()
|
||||
if (m_stream != nullptr)
|
||||
m_stream->set_sample_rate(rate);
|
||||
else
|
||||
m_stream = stream_alloc_legacy(0,1,rate);
|
||||
m_stream = stream_alloc(0,1,rate);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -32,7 +32,7 @@ protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
private:
|
||||
void irq_handler(int irq);
|
||||
|
@ -62,12 +62,12 @@ void ym3812_device::timer_handler(int c, const attotime &period)
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ym3812_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ym3812_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
ym3812_update_one(m_chip, outputs[0], samples);
|
||||
ym3812_update_one(m_chip, outputs[0]);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -110,7 +110,7 @@ void ym3812_device::calculate_rates()
|
||||
if (m_stream != nullptr)
|
||||
m_stream->set_sample_rate(rate);
|
||||
else
|
||||
m_stream = stream_alloc_legacy(0, 1, rate);
|
||||
m_stream = stream_alloc(0, 1, rate);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -30,7 +30,7 @@ protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
private:
|
||||
enum
|
||||
|
@ -56,12 +56,12 @@ void y8950_device::timer_handler(int c, const attotime &period)
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void y8950_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void y8950_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
y8950_update_one(m_chip, outputs[0], samples);
|
||||
y8950_update_one(m_chip, outputs[0]);
|
||||
}
|
||||
|
||||
|
||||
@ -87,7 +87,7 @@ void y8950_device::device_start()
|
||||
/* ADPCM ROM data */
|
||||
y8950_set_delta_t_memory(m_chip, &y8950_device::static_read_byte, &y8950_device::static_write_byte);
|
||||
|
||||
m_stream = stream_alloc_legacy(0,1,rate);
|
||||
m_stream = stream_alloc(0,1,rate);
|
||||
/* port and keyboard handler */
|
||||
y8950_set_port_handler(m_chip, &y8950_device::static_port_handler_w, &y8950_device::static_port_handler_r, this);
|
||||
y8950_set_keyboard_handler(m_chip, &y8950_device::static_keyboard_handler_w, &y8950_device::static_keyboard_handler_r, this);
|
||||
|
@ -41,7 +41,7 @@ protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
private:
|
||||
void irq_handler(int irq);
|
||||
|
@ -2111,12 +2111,12 @@ struct ym2203_state
|
||||
} // anonymous namespace
|
||||
|
||||
/* Generate samples for one of the YM2203s */
|
||||
void ym2203_update_one(void *chip, FMSAMPLE *buffer, int length)
|
||||
void ym2203_update_one(void *chip, write_stream_view &buffer)
|
||||
{
|
||||
ym2203_state *F2203 = (ym2203_state *)chip;
|
||||
FM_OPN *OPN = &F2203->OPN;
|
||||
int i;
|
||||
FMSAMPLE *buf = buffer;
|
||||
auto &buf = buffer;
|
||||
FM_CH *cch[3];
|
||||
|
||||
cch[0] = &F2203->CH[0];
|
||||
@ -2147,7 +2147,7 @@ void ym2203_update_one(void *chip, FMSAMPLE *buffer, int length)
|
||||
OPN->LFO_PM = 0;
|
||||
|
||||
/* buffering */
|
||||
for (i=0; i < length ; i++)
|
||||
for (i=0; i < buf.samples() ; i++)
|
||||
{
|
||||
/* clear outputs */
|
||||
OPN->out_fm[0] = 0;
|
||||
@ -2186,7 +2186,7 @@ void ym2203_update_one(void *chip, FMSAMPLE *buffer, int length)
|
||||
#endif
|
||||
|
||||
/* buffering */
|
||||
buf[i] = lt;
|
||||
buf.put_int(i, lt, 32768);
|
||||
}
|
||||
|
||||
/* timer A control */
|
||||
@ -2727,19 +2727,18 @@ static inline void YM2608IRQMaskWrite(FM_OPN *OPN, ym2608_state *F2608, int v)
|
||||
}
|
||||
|
||||
/* Generate samples for one of the YM2608s */
|
||||
void ym2608_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
void ym2608_update_one(void *chip, std::vector<write_stream_view> &buffer)
|
||||
{
|
||||
ym2608_state *F2608 = (ym2608_state *)chip;
|
||||
FM_OPN *OPN = &F2608->OPN;
|
||||
YM_DELTAT *DELTAT = &F2608->deltaT;
|
||||
int i,j;
|
||||
FMSAMPLE *bufL,*bufR;
|
||||
FM_CH *cch[6];
|
||||
int32_t *out_fm = OPN->out_fm;
|
||||
|
||||
/* set bufer */
|
||||
bufL = buffer[0];
|
||||
bufR = buffer[1];
|
||||
auto &bufL = buffer[0];
|
||||
auto &bufR = buffer[1];
|
||||
|
||||
cch[0] = &F2608->CH[0];
|
||||
cch[1] = &F2608->CH[1];
|
||||
@ -2770,7 +2769,7 @@ void ym2608_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
|
||||
|
||||
/* buffering */
|
||||
for(i=0; i < length ; i++)
|
||||
for(i=0; i < bufL.samples() ; i++)
|
||||
{
|
||||
advance_lfo(OPN);
|
||||
|
||||
@ -2840,14 +2839,9 @@ void ym2608_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
lt += ((out_fm[5]>>1) & OPN->pan[10]);
|
||||
rt += ((out_fm[5]>>1) & OPN->pan[11]);
|
||||
|
||||
lt >>= FINAL_SH;
|
||||
rt >>= FINAL_SH;
|
||||
|
||||
Limit( lt, MAXOUT, MINOUT );
|
||||
Limit( rt, MAXOUT, MINOUT );
|
||||
/* buffering */
|
||||
bufL[i] = lt;
|
||||
bufR[i] = rt;
|
||||
bufL.put_int_clamp(i, lt, 32768 << FINAL_SH);
|
||||
bufR.put_int_clamp(i, rt, 32768 << FINAL_SH);
|
||||
|
||||
#ifdef SAVE_SAMPLE
|
||||
SAVE_ALL_CHANNELS
|
||||
@ -3275,19 +3269,18 @@ int ym2608_timer_over(void *chip,int c)
|
||||
/* YM2610(OPNB) */
|
||||
|
||||
/* Generate samples for one of the YM2610s */
|
||||
void ym2610_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
void ym2610_update_one(void *chip, std::vector<write_stream_view> &buffer)
|
||||
{
|
||||
ym2610_state *F2610 = (ym2610_state *)chip;
|
||||
FM_OPN *OPN = &F2610->OPN;
|
||||
YM_DELTAT *DELTAT = &F2610->deltaT;
|
||||
int i,j;
|
||||
FMSAMPLE *bufL,*bufR;
|
||||
FM_CH *cch[4];
|
||||
int32_t *out_fm = OPN->out_fm;
|
||||
|
||||
/* buffer setup */
|
||||
bufL = buffer[0];
|
||||
bufR = buffer[1];
|
||||
auto &bufL = buffer[0];
|
||||
auto &bufR = buffer[1];
|
||||
|
||||
cch[0] = &F2610->CH[1];
|
||||
cch[1] = &F2610->CH[2];
|
||||
@ -3323,7 +3316,7 @@ void ym2610_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
refresh_fc_eg_chan( OPN, cch[3] );
|
||||
|
||||
/* buffering */
|
||||
for(i=0; i < length ; i++)
|
||||
for(i=0; i < bufL.samples() ; i++)
|
||||
{
|
||||
advance_lfo(OPN);
|
||||
|
||||
@ -3386,20 +3379,13 @@ void ym2610_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
lt += ((out_fm[5]>>1) & OPN->pan[10]);
|
||||
rt += ((out_fm[5]>>1) & OPN->pan[11]);
|
||||
|
||||
|
||||
lt >>= FINAL_SH;
|
||||
rt >>= FINAL_SH;
|
||||
|
||||
Limit( lt, MAXOUT, MINOUT );
|
||||
Limit( rt, MAXOUT, MINOUT );
|
||||
|
||||
#ifdef SAVE_SAMPLE
|
||||
SAVE_ALL_CHANNELS
|
||||
#endif
|
||||
|
||||
/* buffering */
|
||||
bufL[i] = lt;
|
||||
bufR[i] = rt;
|
||||
bufL.put_int_clamp(i, lt, 32768 << FINAL_SH);
|
||||
bufR.put_int_clamp(i, rt, 32768 << FINAL_SH);
|
||||
}
|
||||
|
||||
/* timer A control */
|
||||
@ -3411,19 +3397,18 @@ void ym2610_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
|
||||
#if BUILD_YM2610B
|
||||
/* Generate samples for one of the YM2610Bs */
|
||||
void ym2610b_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
void ym2610b_update_one(void *chip, std::vector<write_stream_view> &buffer)
|
||||
{
|
||||
ym2610_state *F2610 = (ym2610_state *)chip;
|
||||
FM_OPN *OPN = &F2610->OPN;
|
||||
YM_DELTAT *DELTAT = &F2610->deltaT;
|
||||
int i,j;
|
||||
FMSAMPLE *bufL,*bufR;
|
||||
FM_CH *cch[6];
|
||||
int32_t *out_fm = OPN->out_fm;
|
||||
|
||||
/* buffer setup */
|
||||
bufL = buffer[0];
|
||||
bufR = buffer[1];
|
||||
auto &bufL = buffer[0];
|
||||
auto &bufR = buffer[1];
|
||||
|
||||
cch[0] = &F2610->CH[0];
|
||||
cch[1] = &F2610->CH[1];
|
||||
@ -3453,7 +3438,7 @@ void ym2610b_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
refresh_fc_eg_chan( OPN, cch[5] );
|
||||
|
||||
/* buffering */
|
||||
for(i=0; i < length ; i++)
|
||||
for(i=0; i < bufL.samples() ; i++)
|
||||
{
|
||||
advance_lfo(OPN);
|
||||
|
||||
@ -3524,20 +3509,13 @@ void ym2610b_update_one(void *chip, FMSAMPLE * const *buffer, int length)
|
||||
lt += ((out_fm[5]>>1) & OPN->pan[10]);
|
||||
rt += ((out_fm[5]>>1) & OPN->pan[11]);
|
||||
|
||||
|
||||
lt >>= FINAL_SH;
|
||||
rt >>= FINAL_SH;
|
||||
|
||||
Limit( lt, MAXOUT, MINOUT );
|
||||
Limit( rt, MAXOUT, MINOUT );
|
||||
|
||||
#ifdef SAVE_SAMPLE
|
||||
SAVE_ALL_CHANNELS
|
||||
#endif
|
||||
|
||||
/* buffering */
|
||||
bufL[i] = lt;
|
||||
bufR[i] = rt;
|
||||
bufL.put_int_clamp(i, lt, 32768);
|
||||
bufR.put_int_clamp(i, rt, 32768);
|
||||
}
|
||||
|
||||
/* timer A control */
|
||||
|
@ -108,7 +108,7 @@ void ym2203_reset_chip(void *chip);
|
||||
/*
|
||||
** update one of chip
|
||||
*/
|
||||
void ym2203_update_one(void *chip, FMSAMPLE *buffer, int length);
|
||||
void ym2203_update_one(void *chip, write_stream_view &buffer);
|
||||
|
||||
/*
|
||||
** Write
|
||||
@ -142,7 +142,7 @@ void * ym2608_init(device_t *device, int baseclock, int rate,
|
||||
void ym2608_clock_changed(void *chip, int clock, int rate);
|
||||
void ym2608_shutdown(void *chip);
|
||||
void ym2608_reset_chip(void *chip);
|
||||
void ym2608_update_one(void *chip, FMSAMPLE * const *buffer, int length);
|
||||
void ym2608_update_one(void *chip, std::vector<write_stream_view> &buffer);
|
||||
|
||||
int ym2608_write(void *chip, int a,unsigned char v);
|
||||
unsigned char ym2608_read(void *chip,int a);
|
||||
@ -158,10 +158,10 @@ void * ym2610_init(device_t *device, int baseclock, int rate,
|
||||
void ym2610_clock_changed(void *chip, int clock, int rate);
|
||||
void ym2610_shutdown(void *chip);
|
||||
void ym2610_reset_chip(void *chip);
|
||||
void ym2610_update_one(void *chip, FMSAMPLE * const *buffer, int length);
|
||||
void ym2610_update_one(void *chip, std::vector<write_stream_view> &buffer);
|
||||
|
||||
#if BUILD_YM2610B
|
||||
void ym2610b_update_one(void *chip, FMSAMPLE * const *buffer, int length);
|
||||
void ym2610b_update_one(void *chip, std::vector<write_stream_view> &buffer);
|
||||
#endif /* BUILD_YM2610B */
|
||||
|
||||
int ym2610_write(void *chip, int a,unsigned char v);
|
||||
@ -176,7 +176,7 @@ void * ym2612_init(device_t *device, int baseclock, int rate,
|
||||
void ym2612_clock_changed(void *chip, int clock, int rate);
|
||||
void ym2612_shutdown(void *chip);
|
||||
void ym2612_reset_chip(void *chip);
|
||||
void ym2612_update_one(void *chip, FMSAMPLE * const *buffer, int length, u8 output_bits);
|
||||
void ym2612_update_one(void *chip, std::vector<write_stream_view> &buffer, u8 output_bits);
|
||||
|
||||
int ym2612_write(void *chip, int a,unsigned char v);
|
||||
unsigned char ym2612_read(void *chip,int a);
|
||||
|
@ -2174,7 +2174,7 @@ static void init_tables(void)
|
||||
/*******************************************************************************/
|
||||
|
||||
/* Generate samples for one of the YM2612s */
|
||||
void ym2612_update_one(void *chip, FMSAMPLE * const *buffer, int length, u8 output_bits)
|
||||
void ym2612_update_one(void *chip, std::vector<write_stream_view> &buffer, u8 output_bits)
|
||||
{
|
||||
// TODO : 'ladder' effects for Mega Drive/Genesis
|
||||
const u8 output_shift = (output_bits > 14) ? 0 : (14 - output_bits);
|
||||
@ -2183,13 +2183,12 @@ void ym2612_update_one(void *chip, FMSAMPLE * const *buffer, int length, u8 outp
|
||||
fm2612_FM_OPN *OPN = &F2612->OPN;
|
||||
int32_t *out_fm = OPN->out_fm;
|
||||
int i;
|
||||
FMSAMPLE *bufL,*bufR;
|
||||
fm2612_FM_CH *cch[6];
|
||||
int lt,rt;
|
||||
|
||||
/* set bufer */
|
||||
bufL = buffer[0];
|
||||
bufR = buffer[1];
|
||||
auto &bufL = buffer[0];
|
||||
auto &bufR = buffer[1];
|
||||
|
||||
cch[0] = &F2612->CH[0];
|
||||
cch[1] = &F2612->CH[1];
|
||||
@ -2220,7 +2219,7 @@ void ym2612_update_one(void *chip, FMSAMPLE * const *buffer, int length, u8 outp
|
||||
refresh_fc_eg_chan( OPN, cch[5] );
|
||||
|
||||
/* buffering */
|
||||
for(i=0; i < length ; i++)
|
||||
for(i=0; i < bufL.samples() ; i++)
|
||||
{
|
||||
/* clear outputs */
|
||||
out_fm[0] = 0;
|
||||
@ -2302,8 +2301,8 @@ void ym2612_update_one(void *chip, FMSAMPLE * const *buffer, int length, u8 outp
|
||||
#endif
|
||||
|
||||
/* buffering */
|
||||
bufL[i] = lt;
|
||||
bufR[i] = rt;
|
||||
bufL.put_int(i, lt, 32768);
|
||||
bufR.put_int(i, rt, 32768);
|
||||
|
||||
/* CSM mode: if CSM Key ON has occurred, CSM Key OFF need to be sent */
|
||||
/* only if Timer A does not overflow again (i.e CSM Key ON not set again) */
|
||||
|
@ -2206,14 +2206,14 @@ void ym3812_set_update_handler(void *chip,OPL_UPDATEHANDLER UpdateHandler,device
|
||||
** '*buffer' is the output buffer pointer
|
||||
** 'length' is the number of samples that should be generated
|
||||
*/
|
||||
void ym3812_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
void ym3812_update_one(void *chip, write_stream_view &buffer)
|
||||
{
|
||||
FM_OPL *OPL = (FM_OPL *)chip;
|
||||
uint8_t rhythm = OPL->rhythm&0x20;
|
||||
OPLSAMPLE *buf = buffer;
|
||||
auto &buf = buffer;
|
||||
int i;
|
||||
|
||||
for( i=0; i < length ; i++ )
|
||||
for( i=0; i < buf.samples(); i++ )
|
||||
{
|
||||
int lt;
|
||||
|
||||
@ -2242,11 +2242,6 @@ void ym3812_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
|
||||
lt = OPL->output[0];
|
||||
|
||||
lt >>= FINAL_SH;
|
||||
|
||||
/* limit check */
|
||||
lt = limit( lt , MAXOUT, MINOUT );
|
||||
|
||||
#ifdef SAVE_SAMPLE
|
||||
if (which==0)
|
||||
{
|
||||
@ -2255,7 +2250,7 @@ void ym3812_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
#endif
|
||||
|
||||
/* store to sound buffer */
|
||||
buf[i] = lt;
|
||||
buf.put_int_clamp(i, lt, 32768 << FINAL_SH);
|
||||
|
||||
OPL->advance();
|
||||
}
|
||||
@ -2335,14 +2330,14 @@ void ym3526_set_update_handler(void *chip,OPL_UPDATEHANDLER UpdateHandler,device
|
||||
** '*buffer' is the output buffer pointer
|
||||
** 'length' is the number of samples that should be generated
|
||||
*/
|
||||
void ym3526_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
void ym3526_update_one(void *chip, write_stream_view &buffer)
|
||||
{
|
||||
FM_OPL *OPL = (FM_OPL *)chip;
|
||||
uint8_t rhythm = OPL->rhythm&0x20;
|
||||
OPLSAMPLE *buf = buffer;
|
||||
auto &buf = buffer;
|
||||
int i;
|
||||
|
||||
for( i=0; i < length ; i++ )
|
||||
for( i=0; i < buf.samples() ; i++ )
|
||||
{
|
||||
int lt;
|
||||
|
||||
@ -2371,11 +2366,6 @@ void ym3526_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
|
||||
lt = OPL->output[0];
|
||||
|
||||
lt >>= FINAL_SH;
|
||||
|
||||
/* limit check */
|
||||
lt = limit( lt , MAXOUT, MINOUT );
|
||||
|
||||
#ifdef SAVE_SAMPLE
|
||||
if (which==0)
|
||||
{
|
||||
@ -2384,7 +2374,7 @@ void ym3526_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
#endif
|
||||
|
||||
/* store to sound buffer */
|
||||
buf[i] = lt;
|
||||
buf.put_int_clamp(i, lt, 32768 << FINAL_SH);
|
||||
|
||||
OPL->advance();
|
||||
}
|
||||
@ -2491,15 +2481,15 @@ void y8950_set_delta_t_memory(void *chip, FM_READBYTE read_byte, FM_WRITEBYTE wr
|
||||
** '*buffer' is the output buffer pointer
|
||||
** 'length' is the number of samples that should be generated
|
||||
*/
|
||||
void y8950_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
void y8950_update_one(void *chip, write_stream_view &buffer)
|
||||
{
|
||||
int i;
|
||||
FM_OPL *OPL = (FM_OPL *)chip;
|
||||
uint8_t rhythm = OPL->rhythm&0x20;
|
||||
YM_DELTAT &DELTAT = *OPL->deltat;
|
||||
OPLSAMPLE *buf = buffer;
|
||||
auto &buf = buffer;
|
||||
|
||||
for( i=0; i < length ; i++ )
|
||||
for( i=0; i < buf.samples() ; i++ )
|
||||
{
|
||||
int lt;
|
||||
|
||||
@ -2533,11 +2523,6 @@ void y8950_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
|
||||
lt = OPL->output[0] + (OPL->output_deltat[0]>>11);
|
||||
|
||||
lt >>= FINAL_SH;
|
||||
|
||||
/* limit check */
|
||||
lt = limit( lt , MAXOUT, MINOUT );
|
||||
|
||||
#ifdef SAVE_SAMPLE
|
||||
if (which==0)
|
||||
{
|
||||
@ -2546,7 +2531,7 @@ void y8950_update_one(void *chip, OPLSAMPLE *buffer, int length)
|
||||
#endif
|
||||
|
||||
/* store to sound buffer */
|
||||
buf[i] = lt;
|
||||
buf.put_int_clamp(i, lt, 32768 << FINAL_SH);
|
||||
|
||||
OPL->advance();
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ void ym3812_reset_chip(void *chip);
|
||||
int ym3812_write(void *chip, int a, int v);
|
||||
unsigned char ym3812_read(void *chip, int a);
|
||||
int ym3812_timer_over(void *chip, int c);
|
||||
void ym3812_update_one(void *chip, OPLSAMPLE *buffer, int length);
|
||||
void ym3812_update_one(void *chip, write_stream_view &buffer);
|
||||
|
||||
void ym3812_set_timer_handler(void *chip, OPL_TIMERHANDLER TimerHandler, device_t *device);
|
||||
void ym3812_set_irq_handler(void *chip, OPL_IRQHANDLER IRQHandler, device_t *device);
|
||||
@ -77,7 +77,7 @@ int ym3526_timer_over(void *chip, int c);
|
||||
** '*buffer' is the output buffer pointer
|
||||
** 'length' is the number of samples that should be generated
|
||||
*/
|
||||
void ym3526_update_one(void *chip, OPLSAMPLE *buffer, int length);
|
||||
void ym3526_update_one(void *chip, write_stream_view &buffer);
|
||||
|
||||
void ym3526_set_timer_handler(void *chip, OPL_TIMERHANDLER TimerHandler, device_t *device);
|
||||
void ym3526_set_irq_handler(void *chip, OPL_IRQHANDLER IRQHandler, device_t *device);
|
||||
@ -100,7 +100,7 @@ void y8950_reset_chip(void *chip);
|
||||
int y8950_write(void *chip, int a, int v);
|
||||
unsigned char y8950_read (void *chip, int a);
|
||||
int y8950_timer_over(void *chip, int c);
|
||||
void y8950_update_one(void *chip, OPLSAMPLE *buffer, int length);
|
||||
void y8950_update_one(void *chip, write_stream_view &buffer);
|
||||
|
||||
void y8950_set_timer_handler(void *chip, OPL_TIMERHANDLER TimerHandler, device_t *device);
|
||||
void y8950_set_irq_handler(void *chip, OPL_IRQHANDLER IRQHandler, device_t *device);
|
||||
|
@ -1470,12 +1470,12 @@ void ym2413_device::write_reg(int r, int v)
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ym2413_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ym2413_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
for(int i=0; i < samples ; i++ )
|
||||
for(int i=0; i < outputs[0].samples() ; i++ )
|
||||
{
|
||||
output[0] = 0;
|
||||
output[1] = 0;
|
||||
@ -1496,8 +1496,8 @@ void ym2413_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
|
||||
rhythm_calc(&P_CH[0], noise_rng & 1 );
|
||||
}
|
||||
|
||||
outputs[0][i] = limit( output[0] , 32767, -32768 );
|
||||
outputs[1][i] = limit( output[1] , 32767, -32768 );
|
||||
outputs[0].put_int_clamp(i, output[0], 32768);
|
||||
outputs[1].put_int_clamp(i, output[1], 32768);
|
||||
|
||||
advance();
|
||||
}
|
||||
@ -1511,7 +1511,7 @@ void ym2413_device::device_start()
|
||||
{
|
||||
int rate = clock()/72;
|
||||
|
||||
m_stream = stream_alloc_legacy(0,2,rate);
|
||||
m_stream = stream_alloc(0,2,rate);
|
||||
|
||||
for (int x=0; x<TL_RES_LEN; x++)
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ protected:
|
||||
virtual void device_reset() override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
uint8_t m_inst_table[19][8];
|
||||
|
||||
|
@ -2618,19 +2618,19 @@ void ymf262_set_update_handler(void *chip, OPL3_UPDATEHANDLER UpdateHandler, dev
|
||||
** '**buffers' is table of 4 pointers to the buffers: CH.A, CH.B, CH.C and CH.D
|
||||
** 'length' is the number of samples that should be generated
|
||||
*/
|
||||
void ymf262_update_one(void *_chip, OPL3SAMPLE * const *buffers, int length)
|
||||
void ymf262_update_one(void *_chip, std::vector<write_stream_view> &buffers)
|
||||
{
|
||||
int i;
|
||||
OPL3 *chip = (OPL3 *)_chip;
|
||||
signed int *chanout = chip->chanout;
|
||||
uint8_t rhythm = chip->rhythm&0x20;
|
||||
|
||||
OPL3SAMPLE *ch_a = buffers[0]; // DO2 (mixed) left output for OPL4
|
||||
OPL3SAMPLE *ch_b = buffers[1]; // DO2 (mixed) right output for OPL4
|
||||
OPL3SAMPLE *ch_c = buffers[2]; // DO0 (FM only) left output for OPL4
|
||||
OPL3SAMPLE *ch_d = buffers[3]; // DO0 (FM only) right output for OPL4
|
||||
auto &ch_a = buffers[0]; // DO2 (mixed) left output for OPL4
|
||||
auto &ch_b = buffers[1]; // DO2 (mixed) right output for OPL4
|
||||
auto &ch_c = buffers[2]; // DO0 (FM only) left output for OPL4
|
||||
auto &ch_d = buffers[3]; // DO0 (FM only) right output for OPL4
|
||||
|
||||
for( i=0; i < length ; i++ )
|
||||
for( i=0; i < ch_a.samples() ; i++ )
|
||||
{
|
||||
int a,b,c,d;
|
||||
|
||||
@ -2782,16 +2782,6 @@ void ymf262_update_one(void *_chip, OPL3SAMPLE * const *buffers, int length)
|
||||
c += chanout[17] & chip->pan[70];
|
||||
d += chanout[17] & chip->pan[71];
|
||||
#endif
|
||||
a >>= FINAL_SH;
|
||||
b >>= FINAL_SH;
|
||||
c >>= FINAL_SH;
|
||||
d >>= FINAL_SH;
|
||||
|
||||
/* limit check */
|
||||
a = limit( a , MAXOUT, MINOUT );
|
||||
b = limit( b , MAXOUT, MINOUT );
|
||||
c = limit( c , MAXOUT, MINOUT );
|
||||
d = limit( d , MAXOUT, MINOUT );
|
||||
|
||||
#ifdef SAVE_SAMPLE
|
||||
if (which==0)
|
||||
@ -2801,10 +2791,10 @@ void ymf262_update_one(void *_chip, OPL3SAMPLE * const *buffers, int length)
|
||||
#endif
|
||||
|
||||
/* store to sound buffer */
|
||||
ch_a[i] = a;
|
||||
ch_b[i] = b;
|
||||
ch_c[i] = c;
|
||||
ch_d[i] = d;
|
||||
ch_a.put_int_clamp(i, a, 32768 << FINAL_SH);
|
||||
ch_b.put_int_clamp(i, a, 32768 << FINAL_SH);
|
||||
ch_c.put_int_clamp(i, a, 32768 << FINAL_SH);
|
||||
ch_d.put_int_clamp(i, a, 32768 << FINAL_SH);
|
||||
|
||||
advance(chip);
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ void ymf262_reset_chip(void *chip);
|
||||
int ymf262_write(void *chip, int a, int v);
|
||||
unsigned char ymf262_read(void *chip, int a);
|
||||
int ymf262_timer_over(void *chip, int c);
|
||||
void ymf262_update_one(void *chip, OPL3SAMPLE * const *buffers, int length);
|
||||
void ymf262_update_one(void *chip, std::vector<write_stream_view> &buffers);
|
||||
|
||||
void ymf262_set_timer_handler(void *chip, OPL3_TIMERHANDLER TimerHandler, device_t *device);
|
||||
void ymf262_set_irq_handler(void *chip, OPL3_IRQHANDLER IRQHandler, device_t *device);
|
||||
|
@ -563,10 +563,10 @@ void ymf271_device::set_feedback(int slotnum, int64_t inp)
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ymf271_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ymf271_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
int i, j;
|
||||
int op;
|
||||
@ -599,7 +599,7 @@ void ymf271_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
|
||||
|
||||
if (m_slots[slot1].active)
|
||||
{
|
||||
for (i = 0; i < samples; i++)
|
||||
for (i = 0; i < outputs[0].samples(); i++)
|
||||
{
|
||||
int64_t output1 = 0, output2 = 0, output3 = 0, output4 = 0;
|
||||
int64_t phase_mod1, phase_mod2, phase_mod3;
|
||||
@ -833,7 +833,7 @@ void ymf271_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
|
||||
mixp = &m_mix_buffer[0];
|
||||
if (m_slots[slot1].active)
|
||||
{
|
||||
for (i = 0; i < samples; i++)
|
||||
for (i = 0; i < outputs[0].samples(); i++)
|
||||
{
|
||||
int64_t output1 = 0, output3 = 0;
|
||||
int64_t phase_mod1, phase_mod3;
|
||||
@ -900,7 +900,7 @@ void ymf271_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
|
||||
|
||||
if (m_slots[slot1].active)
|
||||
{
|
||||
for (i = 0; i < samples; i++)
|
||||
for (i = 0; i < outputs[0].samples(); i++)
|
||||
{
|
||||
int64_t output1 = 0, output2 = 0, output3 = 0;
|
||||
int64_t phase_mod1, phase_mod3;
|
||||
@ -1006,29 +1006,29 @@ void ymf271_device::sound_stream_update_legacy(sound_stream &stream, stream_samp
|
||||
}
|
||||
|
||||
mixp = &m_mix_buffer[0];
|
||||
update_pcm(j + (3*12), mixp, samples);
|
||||
update_pcm(j + (3*12), mixp, outputs[0].samples());
|
||||
break;
|
||||
}
|
||||
|
||||
// PCM
|
||||
case 3:
|
||||
{
|
||||
update_pcm(j + (0*12), mixp, samples);
|
||||
update_pcm(j + (1*12), mixp, samples);
|
||||
update_pcm(j + (2*12), mixp, samples);
|
||||
update_pcm(j + (3*12), mixp, samples);
|
||||
update_pcm(j + (0*12), mixp, outputs[0].samples());
|
||||
update_pcm(j + (1*12), mixp, outputs[0].samples());
|
||||
update_pcm(j + (2*12), mixp, outputs[0].samples());
|
||||
update_pcm(j + (3*12), mixp, outputs[0].samples());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mixp = &m_mix_buffer[0];
|
||||
for (i = 0; i < samples; i++)
|
||||
for (i = 0; i < outputs[0].samples(); i++)
|
||||
{
|
||||
outputs[0][i] = (*mixp++)>>2;
|
||||
outputs[1][i] = (*mixp++)>>2;
|
||||
outputs[2][i] = (*mixp++)>>2;
|
||||
outputs[3][i] = (*mixp++)>>2;
|
||||
outputs[0].put_int(i, *mixp++, 32768 << 2);
|
||||
outputs[1].put_int(i, *mixp++, 32768 << 2);
|
||||
outputs[2].put_int(i, *mixp++, 32768 << 2);
|
||||
outputs[3].put_int(i, *mixp++, 32768 << 2);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1748,7 +1748,7 @@ void ymf271_device::device_start()
|
||||
init_state();
|
||||
|
||||
m_mix_buffer.resize(m_master_clock/(384/4));
|
||||
m_stream = stream_alloc_legacy(0, 4, m_master_clock/384);
|
||||
m_stream = stream_alloc(0, 4, m_master_clock/384);
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -28,7 +28,7 @@ protected:
|
||||
virtual void device_clock_changed() override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
// device_rom_interface overrides
|
||||
virtual void rom_bank_updated() override;
|
||||
|
@ -212,10 +212,10 @@ void ymf278b_device::compute_envelope(YMF278BSlot *slot)
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ymf278b_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ymf278b_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
int i, j;
|
||||
YMF278BSlot *slot;
|
||||
@ -223,14 +223,14 @@ void ymf278b_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
|
||||
int32_t *mixp;
|
||||
int32_t vl, vr;
|
||||
|
||||
ymf262_update_one(m_ymf262, outputs, samples);
|
||||
vl = m_mix_level[m_fm_l];
|
||||
vr = m_mix_level[m_fm_r];
|
||||
for (i = 0; i < samples; i++)
|
||||
ymf262_update_one(m_ymf262, outputs);
|
||||
stream_buffer::sample_t fvl = stream_buffer::sample_t(m_mix_level[m_fm_l]) * (1.0 / 65536.0);
|
||||
stream_buffer::sample_t fvr = stream_buffer::sample_t(m_mix_level[m_fm_r]) * (1.0 / 65536.0);
|
||||
for (i = 0; i < outputs[0].samples(); i++)
|
||||
{
|
||||
// DO2 mixing
|
||||
outputs[0][i] = (outputs[0][i] * vl) >> 16;
|
||||
outputs[1][i] = (outputs[1][i] * vr) >> 16;
|
||||
outputs[0].put(i, outputs[0].get(i) * fvl);
|
||||
outputs[1].put(i, outputs[1].get(i) * fvr);
|
||||
}
|
||||
|
||||
std::fill(m_mix_buffer.begin(), m_mix_buffer.end(), 0);
|
||||
@ -243,7 +243,7 @@ void ymf278b_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
|
||||
{
|
||||
mixp = &m_mix_buffer[0];
|
||||
|
||||
for (j = 0; j < samples; j++)
|
||||
for (j = 0; j < outputs[0].samples(); j++)
|
||||
{
|
||||
if (slot->stepptr >= slot->endaddr)
|
||||
{
|
||||
@ -316,12 +316,12 @@ void ymf278b_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
|
||||
mixp = &m_mix_buffer[0];
|
||||
vl = m_mix_level[m_pcm_l];
|
||||
vr = m_mix_level[m_pcm_r];
|
||||
for (i = 0; i < samples; i++)
|
||||
for (i = 0; i < outputs[0].samples(); i++)
|
||||
{
|
||||
outputs[0][i] += (*mixp++ * vl) >> 16;
|
||||
outputs[1][i] += (*mixp++ * vr) >> 16;
|
||||
outputs[4][i] = *mixp++;
|
||||
outputs[5][i] = *mixp++;
|
||||
outputs[0].add_int(i, (*mixp++ * vl) >> 16, 32768);
|
||||
outputs[1].add_int(i, (*mixp++ * vr) >> 16, 32768);
|
||||
outputs[4].put_int(i, *mixp++, 32768);
|
||||
outputs[5].put_int(i, *mixp++, 32768);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1009,7 +1009,7 @@ void ymf278b_device::device_start()
|
||||
m_slots[i].num = i;
|
||||
}
|
||||
|
||||
m_stream = stream_alloc_legacy(0, 6, m_rate);
|
||||
m_stream = stream_alloc(0, 6, m_rate);
|
||||
m_mix_buffer.resize(m_rate*4,0);
|
||||
|
||||
// rate tables
|
||||
|
@ -29,7 +29,7 @@ protected:
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
// device_rom_interface overrides
|
||||
virtual void rom_bank_updated() override;
|
||||
|
@ -412,18 +412,18 @@ int ymz280b_device::generate_pcm16(struct YMZ280BVoice *voice, s16 *buffer, int
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void ymz280b_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ymz280b_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
stream_sample_t *lacc = outputs[0];
|
||||
stream_sample_t *racc = outputs[1];
|
||||
auto &lacc = outputs[0];
|
||||
auto &racc = outputs[1];
|
||||
int v;
|
||||
|
||||
/* clear out the accumulator */
|
||||
memset(lacc, 0, samples * sizeof(lacc[0]));
|
||||
memset(racc, 0, samples * sizeof(racc[0]));
|
||||
lacc.fill(0);
|
||||
racc.fill(0);
|
||||
|
||||
/* loop over voices */
|
||||
for (v = 0; v < 8; v++)
|
||||
@ -432,11 +432,10 @@ void ymz280b_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
|
||||
s16 prev = voice->last_sample;
|
||||
s16 curr = voice->curr_sample;
|
||||
s16 *curr_data = m_scratch.get();
|
||||
s32 *ldest = lacc;
|
||||
s32 *rdest = racc;
|
||||
s32 sampindex = 0;
|
||||
u32 new_samples, samples_left;
|
||||
u32 final_pos;
|
||||
int remaining = samples;
|
||||
int remaining = lacc.samples();
|
||||
int lvol = voice->output_left;
|
||||
int rvol = voice->output_right;
|
||||
|
||||
@ -453,8 +452,9 @@ void ymz280b_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
|
||||
while (remaining > 0 && voice->output_pos < FRAC_ONE)
|
||||
{
|
||||
int interp_sample = ((s32(prev) * (FRAC_ONE - voice->output_pos)) + (s32(curr) * voice->output_pos)) >> FRAC_BITS;
|
||||
*ldest++ += interp_sample * lvol;
|
||||
*rdest++ += interp_sample * rvol;
|
||||
lacc.add_int(sampindex, interp_sample * lvol, 32768 * 256);
|
||||
racc.add_int(sampindex, interp_sample * rvol, 32768 * 256);
|
||||
sampindex++;
|
||||
voice->output_pos += voice->output_step;
|
||||
remaining--;
|
||||
}
|
||||
@ -517,8 +517,9 @@ void ymz280b_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
|
||||
while (remaining > 0 && voice->output_pos < FRAC_ONE)
|
||||
{
|
||||
int interp_sample = ((s32(prev) * (FRAC_ONE - voice->output_pos)) + (s32(curr) * voice->output_pos)) >> FRAC_BITS;
|
||||
*ldest++ += interp_sample * lvol;
|
||||
*rdest++ += interp_sample * rvol;
|
||||
lacc.add_int(sampindex, interp_sample * lvol, 32768 * 256);
|
||||
racc.add_int(sampindex, interp_sample * rvol, 32768 * 256);
|
||||
sampindex++;
|
||||
voice->output_pos += voice->output_step;
|
||||
remaining--;
|
||||
}
|
||||
@ -536,12 +537,6 @@ void ymz280b_device::sound_stream_update_legacy(sound_stream &stream, stream_sam
|
||||
voice->last_sample = prev;
|
||||
voice->curr_sample = curr;
|
||||
}
|
||||
|
||||
for (v = 0; v < samples; v++)
|
||||
{
|
||||
outputs[0][v] /= 256;
|
||||
outputs[1][v] /= 256;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -565,7 +560,7 @@ void ymz280b_device::device_start()
|
||||
}
|
||||
|
||||
/* create the stream */
|
||||
m_stream = stream_alloc_legacy(0, 2, INTERNAL_SAMPLE_RATE);
|
||||
m_stream = stream_alloc(0, 2, INTERNAL_SAMPLE_RATE);
|
||||
|
||||
/* allocate memory */
|
||||
assert(MAX_SAMPLE_CHUNK < 0x10000);
|
||||
|
@ -36,7 +36,7 @@ protected:
|
||||
virtual void device_clock_changed() override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
// device_rom_interface overrides
|
||||
virtual void rom_bank_updated() override;
|
||||
|
@ -77,7 +77,7 @@ ymz770_device::ymz770_device(const machine_config &mconfig, device_type type, co
|
||||
void ymz770_device::device_start()
|
||||
{
|
||||
// create the stream
|
||||
m_stream = stream_alloc_legacy(0, 2, m_sclock);
|
||||
m_stream = stream_alloc(0, 2, m_sclock);
|
||||
|
||||
for (auto & channel : m_channels)
|
||||
{
|
||||
@ -178,18 +178,16 @@ void ymz770_device::device_reset()
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle update requests for
|
||||
// sound_stream_update - handle update requests for
|
||||
// our sound stream
|
||||
//-------------------------------------------------
|
||||
|
||||
void ymz770_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void ymz770_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
stream_sample_t *outL, *outR;
|
||||
auto &outL = outputs[0];
|
||||
auto &outR = outputs[1];
|
||||
|
||||
outL = outputs[0];
|
||||
outR = outputs[1];
|
||||
|
||||
for (int i = 0; i < samples; i++)
|
||||
for (int i = 0; i < outL.samples(); i++)
|
||||
{
|
||||
sequencer();
|
||||
|
||||
@ -282,8 +280,8 @@ retry:
|
||||
}
|
||||
if (m_mute)
|
||||
mixr = mixl = 0;
|
||||
outL[i] = mixl;
|
||||
outR[i] = mixr;
|
||||
outL.put_int(i, mixl, 32768);
|
||||
outR.put_int(i, mixr, 32768);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -33,7 +33,7 @@ protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
virtual void internal_reg_write(uint8_t reg, uint8_t data);
|
||||
virtual uint32_t get_phrase_offs(int phrase) { return m_rom[(4 * phrase) + 1] << 16 | m_rom[(4 * phrase) + 2] << 8 | m_rom[(4 * phrase) + 3]; };
|
||||
|
@ -134,7 +134,7 @@ void zsg2_device::device_start()
|
||||
|
||||
memset(&m_chan, 0, sizeof(m_chan));
|
||||
|
||||
m_stream = stream_alloc_legacy(0, 4, clock() / 768);
|
||||
m_stream = stream_alloc(0, 4, clock() / 768);
|
||||
|
||||
m_mem_blocks = m_mem_base.length();
|
||||
m_mem_copy = make_unique_clear<uint32_t[]>(m_mem_blocks);
|
||||
@ -280,12 +280,12 @@ void zsg2_device::filter_samples(zchan *ch)
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// sound_stream_update_legacy - handle a stream update
|
||||
// sound_stream_update - handle a stream update
|
||||
//-------------------------------------------------
|
||||
|
||||
void zsg2_device::sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples)
|
||||
void zsg2_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
for (int i = 0; i < samples; i++)
|
||||
for (int i = 0; i < outputs[0].samples(); i++)
|
||||
{
|
||||
int32_t mix[4] = {};
|
||||
|
||||
@ -355,8 +355,7 @@ void zsg2_device::sound_stream_update_legacy(sound_stream &stream, stream_sample
|
||||
}
|
||||
|
||||
for(int output=0; output<4; output++)
|
||||
outputs[output][i] = std::min<int32_t>(std::max<int32_t>(mix[output], -32768), 32767);
|
||||
|
||||
outputs[output].put_int_clamp(i, mix[output], 32768);
|
||||
}
|
||||
m_sample_count++;
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ protected:
|
||||
virtual void device_reset() override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
|
||||
private:
|
||||
const uint16_t STATUS_ACTIVE = 0x8000;
|
||||
|
Loading…
Reference in New Issue
Block a user