From da6ebc1ec4007f7d2470f8418f2bea9e4997bdd4 Mon Sep 17 00:00:00 2001 From: cam900 Date: Tue, 25 Dec 2018 13:54:28 +0900 Subject: aica.cpp : Minor correction, Add notes, Remove some unused/unnecessary values, Implement 18bit output, (nw) hikaru.cpp : Add notes --- src/devices/sound/aica.cpp | 94 ++++++++++++++++++++----------------------- src/devices/sound/aica.h | 9 ----- src/devices/sound/aicadsp.cpp | 2 +- src/mame/drivers/dccons.cpp | 1 - src/mame/drivers/hikaru.cpp | 10 ++--- src/mame/drivers/naomi.cpp | 5 +-- 6 files changed, 50 insertions(+), 71 deletions(-) diff --git a/src/devices/sound/aica.cpp b/src/devices/sound/aica.cpp index e304b5a6fc4..56e70d5bd65 100644 --- a/src/devices/sound/aica.cpp +++ b/src/devices/sound/aica.cpp @@ -14,13 +14,14 @@ - Some minor other tweeks (no EGHOLD, slighly more capable DSP) TODO: - - Where are EXTS Connected? + - Timebases are based on 44100KHz case? */ #include "emu.h" #include "aica.h" -#define ICLIP16(x) (x<-32768)?-32768:((x>32767)?32767:x) +static constexpr int32_t clip16(int x) { return std::min(32767, std::max(-32768, x)); } +static constexpr int32_t clip18(int x) { return std::min(131071, std::max(-131072, x)); } #define SHIFT 12 #define FIX(v) ((uint32_t) ((float) (1<> 29)) >> 3); #endif - *PrevSignal=ICLIP16(x); + *PrevSignal=clip16(x); *PrevQuant=(*PrevQuant*TableQuant[Delta&7])>>ADPCMSHIFT; *PrevQuant=(*PrevQuant<0x7f)?0x7f:((*PrevQuant>0x6000)?0x6000:*PrevQuant); return *PrevSignal; @@ -513,6 +514,24 @@ void aica_device::Init() m_ARTABLE[0]=m_DRTABLE[0]=0; //Infinite time m_ARTABLE[1]=m_DRTABLE[1]=0; //Infinite time + for(i=2;i<64;++i) + { + double t,step,scale; + t=ARTimes[i]; //In ms + if(t!=0.0) + { + step=(1023*1000.0)/(44100.0*t); + scale=(double) (1<>SHIFT; } } - - m_BUFPTR&=63; } // process the DSP @@ -1335,8 +1320,19 @@ void aica_device::DoMasterSamples(int nsamples) } } - *bufl++ = (ICLIP16(smpl>>3)*m_LPANTABLE[MVOL()<<0xd])>>SHIFT; - *bufr++ = (ICLIP16(smpr>>3)*m_LPANTABLE[MVOL()<<0xd])>>SHIFT; + if (DAC18B()) + { + smpl = clip18(smpl >> 1); + smpr = clip18(smpr >> 1); + } + else + { + smpl = clip16(smpl >> 3); + smpr = clip16(smpr >> 3); + } + + *bufl++ = (smpl*m_LPANTABLE[MVOL()<<0xd])>>SHIFT; + *bufr++ = (smpr*m_LPANTABLE[MVOL()<<0xd])>>SHIFT; } } @@ -1529,7 +1525,6 @@ DEFINE_DEVICE_TYPE(AICA, aica_device, "aica", "Yamaha AICA") aica_device::aica_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, AICA, tag, owner, clock), device_sound_interface(mconfig, *this), - m_master(false), m_rate(44100.0), m_roffset(0), m_irq_cb(*this), @@ -1537,7 +1532,6 @@ aica_device::aica_device(const machine_config &mconfig, const char *tag, device_ m_ram_region(*this, this->tag()), m_IRQL(0), m_IRQR(0), - m_BUFPTR(0), m_AICARAM(nullptr), m_AICARAM_LENGTH(0), m_RAM_MASK(0), @@ -1555,14 +1549,12 @@ aica_device::aica_device(const machine_config &mconfig, const char *tag, device_ m_bufferr(nullptr), m_exts0(nullptr), m_exts1(nullptr), - m_length(0), - m_RBUFDST(nullptr) + m_length(0) { memset(&m_udata.data, 0, sizeof(m_udata.data)); memset(m_EFSPAN, 0, sizeof(m_EFSPAN)); memset(m_Slots, 0, sizeof(m_Slots)); - memset(m_RINGBUF, 0, sizeof(m_RINGBUF)); memset(m_MidiStack, 0, sizeof(m_MidiStack)); memset(m_LPANTABLE, 0, sizeof(m_LPANTABLE)); @@ -1695,7 +1687,7 @@ signed int aica_device::AICAALFO_Step(AICA_LFO_t *LFO) void aica_device::AICALFO_ComputeStep(AICA_LFO_t *LFO,uint32_t LFOF,uint32_t LFOWS,uint32_t LFOS,int ALFO) { - float step=(float) LFOFreq[LFOF]*256.0f/(float)m_rate; + float step=(float) LFOFreq[LFOF]*256.0f/44100.0f; LFO->phase_step=(unsigned int) ((float) (1< m_buffertmpl; - std::vector m_buffertmpr; - uint32_t m_IrqTimA; uint32_t m_IrqTimBC; uint32_t m_IrqMidi; @@ -199,7 +191,6 @@ private: int m_length; - signed short *m_RBUFDST; //this points to where the sample will be stored in the RingBuf int32_t m_EG_TABLE[0x400]; int m_PLFO_TRI[256],m_PLFO_SQR[256],m_PLFO_SAW[256],m_PLFO_NOI[256]; int m_ALFO_TRI[256],m_ALFO_SQR[256],m_ALFO_SAW[256],m_ALFO_NOI[256]; diff --git a/src/devices/sound/aicadsp.cpp b/src/devices/sound/aicadsp.cpp index 4cf56872401..30881df4fb9 100644 --- a/src/devices/sound/aicadsp.cpp +++ b/src/devices/sound/aicadsp.cpp @@ -58,7 +58,7 @@ static int32_t UNPACK(uint16_t val) void AICADSP::init() { memset(this,0,sizeof(*this)); - RBL=0x8000; + RBL=(8 * 1024); // Initial RBL is 0 Stopped=1; } diff --git a/src/mame/drivers/dccons.cpp b/src/mame/drivers/dccons.cpp index e9e1be60cba..386fab2d6b6 100644 --- a/src/mame/drivers/dccons.cpp +++ b/src/mame/drivers/dccons.cpp @@ -657,7 +657,6 @@ MACHINE_CONFIG_START(dc_cons_state::dc) SPEAKER(config, "rspeaker").front_right(); AICA(config, m_aica, (XTAL(33'868'800)*2)/3); // 67.7376MHz(2*33.8688MHz), div 3 for audio block - m_aica->set_master(true); m_aica->irq().set(FUNC(dc_state::aica_irq)); m_aica->main_irq().set(FUNC(dc_state::sh4_aica_irq)); m_aica->add_route(0, "lspeaker", 1.0); diff --git a/src/mame/drivers/hikaru.cpp b/src/mame/drivers/hikaru.cpp index 22aebe99321..8627b16662a 100644 --- a/src/mame/drivers/hikaru.cpp +++ b/src/mame/drivers/hikaru.cpp @@ -534,13 +534,11 @@ void hikaru_state::hikaru(machine_config &config) // SPEAKER(config, "lspeaker").front_left(); // SPEAKER(config, "rspeaker").front_right(); -// MCFG_DEVICE_ADD("aica", AICA, (XTAL(33'868'800)*2)/3) // 67.7376MHz(2*33.8688MHz), div 3 for audio block // 33.8688MHz on Board -// MCFG_SOUND_ROUTE(0, "lspeaker", 2.0) -// MCFG_SOUND_ROUTE(1, "rspeaker", 2.0) +// 67.7376MHz(2*33.8688MHz), div 3 for audio block +// AICA(config, "aica", (XTAL(33'868'800)*2)/3).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0); -// MCFG_DEVICE_ADD("aica_pcb", AICA, (XTAL(33'868'800)*2)/3) // AICA PCB -// MCFG_SOUND_ROUTE(0, "lspeaker", 2.0) -// MCFG_SOUND_ROUTE(1, "rspeaker", 2.0) +// 33.8688MHz on Board +// AICA(config, "aica_pcb", (XTAL(33'868'800)*2)/3).add_route(0, "lspeaker", 1.0).add_route(1, "rspeaker", 1.0); // AICA PCB } diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index d8a464a6f8b..5135216444c 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -2931,11 +2931,10 @@ void dc_state::naomi_aw_base(machine_config &config) SPEAKER(config, "rspeaker").front_right(); AICA(config, m_aica, (XTAL(33'868'800)*2)/3); // 67.7376MHz(2*33.8688MHz), div 3 for audio block - m_aica->set_master(true); m_aica->irq().set(FUNC(dc_state::aica_irq)); m_aica->main_irq().set(FUNC(dc_state::sh4_aica_irq)); - m_aica->add_route(0, "lspeaker", 2.0); - m_aica->add_route(1, "rspeaker", 2.0); + m_aica->add_route(0, "lspeaker", 1.0); + m_aica->add_route(1, "rspeaker", 1.0); AICARTC(config, "aicartc", XTAL(32'768)); } -- cgit v1.2.3