From e8c759d6aa0ed1ca9704814698661a15b0477d2c Mon Sep 17 00:00:00 2001 From: Andrew Gardner Date: Sat, 5 Jan 2013 20:45:14 +0000 Subject: [PATCH] dsp16: Simplification (nw) Thanks for fixing the U64 compile issues earlier, Kale! --- src/emu/cpu/dsp16/dsp16.h | 1 + src/emu/cpu/dsp16/dsp16ops.c | 47 ++++++++++++++++++++++-------------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/emu/cpu/dsp16/dsp16.h b/src/emu/cpu/dsp16/dsp16.h index 1375adca048..9ce0f773049 100644 --- a/src/emu/cpu/dsp16/dsp16.h +++ b/src/emu/cpu/dsp16/dsp16.h @@ -115,6 +115,7 @@ protected: // helpers void* addressYL(); //void writeYxRegister(const UINT16& value); + void writeRegister(void* reg, const UINT16& value); }; diff --git a/src/emu/cpu/dsp16/dsp16ops.c b/src/emu/cpu/dsp16/dsp16ops.c index cd88bab7feb..c0400cd13bd 100644 --- a/src/emu/cpu/dsp16/dsp16ops.c +++ b/src/emu/cpu/dsp16/dsp16ops.c @@ -4,9 +4,36 @@ // The YL register is the lower half of the 32 bit Y register void* dsp16_device::addressYL() { - return (((UINT8*)&m_y)+0x4); + return (((UINT8*)&m_y) + 2); } + +void dsp16_device::writeRegister(void* reg, const UINT16 &value) +{ + if (reg == &m_auc || reg == &m_c0 || reg == &m_c1 || reg == &m_c2) + { + *(UINT8*)reg = value & 0x00ff; // 8 bit registers + } + else if (reg == &m_i) + { + m_i = value & 0x0fff; // 12 bit register + } + else if (reg == &m_y) + { + //writeYxRegister(value); // TODO - check a flag to see if clearing yl is necessary + m_y = (value << 16) | (m_y & 0x0000ffff); // Temporary + } + else if (reg == addressYL()) + { + m_y = value | (m_y & 0xffff0000); // Temporary + } + else + { + *(UINT16*)reg = value; // The rest + } +} + + void* dsp16_device::registerFromRTable(const UINT8 &R) { switch (R) @@ -258,23 +285,7 @@ void dsp16_device::execute_one(const UINT16& op, UINT8& cycles, UINT8& pcAdvance const UINT8 R = (op & 0x03f0) >> 4; const UINT16 iVal = opcode_read(1); void* reg = registerFromRTable(R); - if (reg == &m_auc || reg == &m_c0 || reg == &m_c1 || reg == &m_c2) - { - *(UINT8*)reg = iVal & 0x00ff; // 8 bit registers - } - else if (reg == &m_i) - { - *(UINT16*)reg = iVal & 0x0fff; // 12 bit register - } - else if (reg == &m_y || reg == addressYL()) - { - *(UINT16*)reg = iVal; // Temporary - //writeYxRegister(iVal); // TODO - } - else - { - *(UINT16*)reg = iVal; // The rest - } + writeRegister(reg, iVal); cycles = 2; pcAdvance = 2;