summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/cpu/dsp32/dsp32ops.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/cpu/dsp32/dsp32ops.c')
-rw-r--r--trunk/src/emu/cpu/dsp32/dsp32ops.c2859
1 files changed, 2859 insertions, 0 deletions
diff --git a/trunk/src/emu/cpu/dsp32/dsp32ops.c b/trunk/src/emu/cpu/dsp32/dsp32ops.c
new file mode 100644
index 00000000000..bf1fcf5213b
--- /dev/null
+++ b/trunk/src/emu/cpu/dsp32/dsp32ops.c
@@ -0,0 +1,2859 @@
+/***************************************************************************
+
+ dsp32ops.c
+ Core implementation for the portable DSP32 emulator.
+
+****************************************************************************
+
+ Copyright Aaron Giles
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name 'MAME' nor the names of its contributors may be
+ used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+****************************************************************************/
+
+
+
+//**************************************************************************
+// COMPILE-TIME OPTIONS
+//**************************************************************************
+
+// these defined latencies are a pain to implement, but are necessary
+#define EMULATE_MEMORY_LATENCY (1)
+#define EMULATE_MULTIPLIER_LATENCY (1)
+#define EMULATE_AFLAGS_LATENCY (1)
+
+// these optimizations should have some effect, but they don't really, so
+// leave them off
+#define IGNORE_DAU_UV_FLAGS (0)
+#define ASSUME_WRITEABLE (0)
+#define ASSUME_UNCONDITIONAL_CAU (0)
+
+
+
+//**************************************************************************
+// MACROS
+//**************************************************************************
+
+#define SET_V_16(a,b,r) m_vflags = (((a) ^ (b) ^ (r) ^ ((r) >> 1)) << 8)
+#define SET_NZC_16(r) m_nzcflags = ((r) << 8)
+#define SET_NZCV_16(a,b,r) SET_NZC_16(r); SET_V_16(a,b,r)
+#define SET_NZ00_16(r) m_nzcflags = (((r) << 8) & 0xffffff); m_vflags = 0
+
+#define SET_V_24(a,b,r) m_vflags = ((a) ^ (b) ^ (r) ^ ((r) >> 1))
+#define SET_NZC_24(r) m_nzcflags = (r)
+#define SET_NZCV_24(a,b,r) SET_NZC_24(r); SET_V_24(a,b,r)
+#define SET_NZ00_24(r) m_nzcflags = ((r) & 0xffffff); m_vflags = 0
+
+#define TRUNCATE24(a) ((a) & 0xffffff)
+#define EXTEND16_TO_24(a) TRUNCATE24((INT32)(INT16)(a))
+#define REG16(a) ((UINT16)m_r[a])
+#define REG24(a) (m_r[a])
+
+#define WRITEABLE_REGS (0x6f3efffe)
+#if ASSUME_WRITEABLE
+#define IS_WRITEABLE(r) (1)
+#else
+#define IS_WRITEABLE(r) (WRITEABLE_REGS & (1 << (r)))
+#endif
+
+#if ASSUME_UNCONDITIONAL_CAU
+#define CONDITION_IS_TRUE() (1)
+#else
+#define CONDITION_IS_TRUE() (!(op & 0x400) || (condition((op >> 12) & 15)))
+#endif
+
+#if EMULATE_MEMORY_LATENCY
+#define WWORD_DEFERRED(a,v) do { int bufidx = m_mbuf_index & 3; m_mbufaddr[bufidx] = -(a); m_mbufdata[bufidx] = (v); } while (0)
+#define WLONG_DEFERRED(a,v) do { int bufidx = m_mbuf_index & 3; m_mbufaddr[bufidx] = (a); m_mbufdata[bufidx] = (v); } while (0)
+#define PROCESS_DEFERRED_MEMORY() \
+ if (m_mbufaddr[++m_mbuf_index & 3] != 1) \
+ { \
+ int bufidx = m_mbuf_index & 3; \
+ if (m_mbufaddr[bufidx] >= 0) \
+ WLONG(m_mbufaddr[bufidx], m_mbufdata[bufidx]); \
+ else \
+ WWORD(-m_mbufaddr[bufidx], m_mbufdata[bufidx]); \
+ m_mbufaddr[bufidx] = 1; \
+ }
+#else
+#define WWORD_DEFERRED(a,v) WWORD(a,v)
+#define WLONG_DEFERRED(a,v) WLONG(a,v)
+#define PROCESS_DEFERRED_MEMORY()
+#endif
+
+#if EMULATE_MULTIPLIER_LATENCY
+#define DEFERRED_MULTIPLIER(x) dau_get_amult(x)
+#else
+#define DEFERRED_MULTIPLIER(x) m_a[x]
+#endif
+
+#if EMULATE_AFLAGS_LATENCY
+#define DEFERRED_NZFLAGS() dau_get_anzflags()
+#define DEFERRED_VUFLAGS() dau_get_avuflags()
+#else
+#define DEFERRED_NZFLAGS() m_NZflags
+#define DEFERRED_VUFLAGS() m_VUflags
+#endif
+
+
+
+//**************************************************************************
+// TYPEDEFS
+//**************************************************************************
+
+union int_double
+{
+ double d;
+ UINT32 i[2];
+};
+
+
+
+//**************************************************************************
+// IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::illegal(UINT32 op)
+{
+}
+
+
+void dsp32c_device::unimplemented(UINT32 op)
+{
+ fatalerror("Unimplemented op @ %06X: %08X (dis=%02X, tbl=%03X)", PC - 4, op, op >> 25, op >> 21);
+}
+
+
+inline void dsp32c_device::execute_one()
+{
+ UINT32 op;
+
+ PROCESS_DEFERRED_MEMORY();
+ debugger_instruction_hook(this, PC);
+ op = ROPCODE(PC);
+ m_icount -= 4; // 4 clocks per cycle
+ PC += 4;
+ if (op)
+ (this->*s_dsp32ops[op >> 21])(op);
+}
+
+
+
+//**************************************************************************
+// CAU HELPERS
+//**************************************************************************
+
+UINT32 dsp32c_device::cau_read_pi_special(UINT8 i)
+{
+ switch (i)
+ {
+ case 4: return m_ibuf;
+ case 5: return m_obuf;
+ case 6: update_pcr(m_pcr & ~PCR_PDFs); return m_pdr;
+ case 14: return m_piop;
+ case 20: return m_pdr2;
+ case 22: update_pcr(m_pcr & ~PCR_PIFs); return m_pir;
+ case 30: return m_pcw;
+ default: fprintf(stderr, "Unimplemented CAU PI read = %X\n", i);
+ }
+ return 0;
+}
+
+
+void dsp32c_device::cau_write_pi_special(UINT8 i, UINT32 val)
+{
+ switch (i)
+ {
+ case 4: m_ibuf = val; break;
+ case 5: m_obuf = val; break;
+ case 6: m_pdr = val; update_pcr(m_pcr | PCR_PDFs); break;
+ case 14: m_piop = val; break;
+ case 20: m_pdr2 = val; break;
+ case 22: m_pir = val; update_pcr(m_pcr | PCR_PIFs); break;
+ case 30: m_pcw = val; break;
+ default: fprintf(stderr, "Unimplemented CAU PI write = %X\n", i);
+ }
+}
+
+
+inline UINT8 dsp32c_device::cau_read_pi_1byte(int pi)
+{
+ int p = (pi >> 5) & 0x1f;
+ int i = (pi >> 0) & 0x1f;
+ if (p)
+ {
+ UINT32 result = RBYTE(m_r[p]);
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
+ return result;
+ }
+ else
+ return cau_read_pi_special(i);
+}
+
+
+inline UINT16 dsp32c_device::cau_read_pi_2byte(int pi)
+{
+ int p = (pi >> 5) & 0x1f;
+ int i = (pi >> 0) & 0x1f;
+ if (p)
+ {
+ UINT32 result = RWORD(m_r[p]);
+ if (i < 22 || i > 23)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i] * 2);
+ return result;
+ }
+ else
+ return cau_read_pi_special(i);
+}
+
+
+inline UINT32 dsp32c_device::cau_read_pi_4byte(int pi)
+{
+ int p = (pi >> 5) & 0x1f;
+ int i = (pi >> 0) & 0x1f;
+ if (p)
+ {
+ UINT32 result = RLONG(m_r[p]);
+ if (i < 22 || i > 23)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i] * 4);
+ return result;
+ }
+ else
+ return cau_read_pi_special(i);
+}
+
+
+inline void dsp32c_device::cau_write_pi_1byte(int pi, UINT8 val)
+{
+ int p = (pi >> 5) & 0x1f;
+ int i = (pi >> 0) & 0x1f;
+ if (p)
+ {
+ WBYTE(m_r[p], val);
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
+ }
+ else
+ cau_write_pi_special(i, val);
+}
+
+
+inline void dsp32c_device::cau_write_pi_2byte(int pi, UINT16 val)
+{
+ int p = (pi >> 5) & 0x1f;
+ int i = (pi >> 0) & 0x1f;
+ if (p)
+ {
+ WWORD(m_r[p], val);
+ if (i < 22 || i > 23)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i] * 2);
+ }
+ else
+ cau_write_pi_special(i, val);
+}
+
+
+inline void dsp32c_device::cau_write_pi_4byte(int pi, UINT32 val)
+{
+ int p = (pi >> 5) & 0x1f;
+ int i = (pi >> 0) & 0x1f;
+ if (p)
+ {
+ WLONG(m_r[p], (INT32)(val << 8) >> 8);
+ if (i < 22 || i > 23)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i] * 4);
+ }
+ else
+ cau_write_pi_special(i, val);
+}
+
+
+
+//**************************************************************************
+// DAU HELPERS
+//**************************************************************************
+
+inline double dsp32c_device::dau_get_amult(int aidx)
+{
+ int bufidx = (m_abuf_index - 1) & 3;
+ double val = m_a[aidx];
+ while (m_icount >= m_abufcycle[bufidx] - 2 * 4)
+ {
+ if (m_abufreg[bufidx] == aidx)
+ val = m_abuf[bufidx];
+ bufidx = (bufidx - 1) & 3;
+ }
+ return val;
+}
+
+
+inline double dsp32c_device::dau_get_anzflags()
+{
+ int bufidx = (m_abuf_index - 1) & 3;
+ double nzflags = m_NZflags;
+ while (m_icount >= m_abufcycle[bufidx] - 3 * 4)
+ {
+ nzflags = m_abufNZflags[bufidx];
+ bufidx = (bufidx - 1) & 3;
+ }
+ return nzflags;
+}
+
+
+inline UINT8 dsp32c_device::dau_get_avuflags()
+{
+#if (!IGNORE_DAU_UV_FLAGS)
+ int bufidx = (m_abuf_index - 1) & 3;
+ UINT8 vuflags = m_VUflags;
+ while (m_icount >= m_abufcycle[bufidx] - 3 * 4)
+ {
+ vuflags = m_abufVUflags[bufidx];
+ bufidx = (bufidx - 1) & 3;
+ }
+ return vuflags;
+#else
+ return 0;
+#endif
+}
+
+
+inline void dsp32c_device::remember_last_dau(int aidx)
+{
+#if (EMULATE_MULTIPLIER_LATENCY || EMULATE_AFLAGS_LATENCY)
+ int bufidx = m_abuf_index++ & 3;
+ m_abuf[bufidx] = m_a[aidx];
+ m_abufreg[bufidx] = aidx;
+ m_abufNZflags[bufidx] = m_NZflags;
+#if (!IGNORE_DAU_UV_FLAGS)
+ m_abufVUflags[bufidx] = m_VUflags;
+#endif
+ m_abufcycle[bufidx] = m_icount;
+#endif
+}
+
+
+inline void dsp32c_device::dau_set_val_noflags(int aidx, double res)
+{
+ remember_last_dau(aidx);
+ m_a[aidx] = res;
+}
+
+
+inline void dsp32c_device::dau_set_val_flags(int aidx, double res)
+{
+ remember_last_dau(aidx);
+#if (!IGNORE_DAU_UV_FLAGS)
+{
+ double absres = (res < 0) ? -res : res;
+ m_VUflags = 0;
+ if (absres < 5.87747e-39)
+ {
+ if (absres != 0)
+ m_VUflags = UFLAGBIT;
+ res = 0.0;
+ }
+ else if (absres > 3.40282e38)
+ {
+ m_VUflags = VFLAGBIT;
+// debugger_break(Machine);
+// fprintf(stderr, "Result = %g\n", absres);
+ res = (res < 0) ? -3.40282e38 : 3.40282e38;
+ }
+}
+#endif
+ m_NZflags = res;
+ m_a[aidx] = res;
+}
+
+
+inline double dsp32c_device::dsp_to_double(UINT32 val)
+{
+ int_double id;
+
+ if (val == 0)
+ return 0;
+ else if ((INT32)val > 0)
+ {
+ int exponent = ((val & 0xff) - 128 + 1023) << 20;
+ id.i[BYTE_XOR_BE(0)] = exponent + (val >> 11);
+ id.i[BYTE_XOR_BE(1)] = (val << 21) & 0xe0000000;
+ }
+ else
+ {
+ int exponent = ((val & 0xff) - 128 + 1023) << 20;
+ val = -(val & 0xffffff00);
+ id.i[BYTE_XOR_BE(0)] = 0x80000000 + exponent + ((val >> 11) & 0x001fffff);
+ id.i[BYTE_XOR_BE(1)] = (val << 21) & 0xe0000000;
+ }
+ return id.d;
+}
+
+
+inline UINT32 dsp32c_device::double_to_dsp(double val)
+{
+ int mantissa, exponent;
+ int_double id;
+ id.d = val;
+ mantissa = ((id.i[BYTE_XOR_BE(0)] & 0x000fffff) << 11) | ((id.i[BYTE_XOR_BE(1)] & 0xe0000000) >> 21);
+ exponent = ((id.i[BYTE_XOR_BE(0)] & 0x7ff00000) >> 20) - 1023 + 128;
+ if (exponent < 0)
+ return 0x00000000;
+ else if (exponent > 255)
+ {
+// debugger_break(Machine);
+// fprintf(stderr, "Exponent = %d\n", exponent);
+ return ((INT32)id.i[BYTE_XOR_BE(0)] >= 0) ? 0x7fffffff : 0x800000ff;
+ }
+ else if ((INT32)id.i[BYTE_XOR_BE(0)] >= 0)
+ return exponent | mantissa;
+ else
+ {
+ mantissa = -mantissa;
+ if (mantissa == 0) { mantissa = 0x80000000; exponent--; }
+ return 0x80000000 | exponent | (mantissa & 0xffffff00);
+ }
+}
+
+
+double dsp32c_device::dau_read_pi_special(int i)
+{
+ fatalerror("Unimplemented dau_read_pi_special(%d)", i);
+ return 0;
+}
+
+
+void dsp32c_device::dau_write_pi_special(int i, double val)
+{
+ fatalerror("Unimplemented dau_write_pi_special(%d)", i);
+}
+
+
+inline double dsp32c_device::dau_read_pi_double_1st(int pi, int multiplier)
+{
+ int p = (pi >> 3) & 15;
+ int i = (pi >> 0) & 7;
+
+ m_lastp = p;
+ if (p)
+ {
+ UINT32 result = RLONG(m_r[p]);
+ if (i < 6)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
+ return dsp_to_double(result);
+ }
+ else if (i < 4)
+ return multiplier ? DEFERRED_MULTIPLIER(i) : m_a[i];
+ else
+ return dau_read_pi_special(i);
+}
+
+
+inline double dsp32c_device::dau_read_pi_double_2nd(int pi, int multiplier, double xval)
+{
+ int p = (pi >> 3) & 15;
+ int i = (pi >> 0) & 7;
+
+ if (p == 15) p = m_lastp; // P=15 means Z inherits from Y, Y inherits from X
+ m_lastp = p;
+ if (p)
+ {
+ UINT32 result;
+ result = RLONG(m_r[p]);
+ if (i < 6)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
+ return dsp_to_double(result);
+ }
+ else if (i < 4)
+ return multiplier ? DEFERRED_MULTIPLIER(i) : m_a[i];
+ else
+ return dau_read_pi_special(i);
+}
+
+
+inline UINT32 dsp32c_device::dau_read_pi_4bytes(int pi)
+{
+ int p = (pi >> 3) & 15;
+ int i = (pi >> 0) & 7;
+
+ m_lastp = p;
+ if (p)
+ {
+ UINT32 result = RLONG(m_r[p]);
+ if (i < 6)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
+ return result;
+ }
+ else if (i < 4)
+ return double_to_dsp(m_a[i]);
+ else
+ return dau_read_pi_special(i);
+}
+
+
+inline UINT16 dsp32c_device::dau_read_pi_2bytes(int pi)
+{
+ int p = (pi >> 3) & 15;
+ int i = (pi >> 0) & 7;
+
+ m_lastp = p;
+ if (p)
+ {
+ UINT32 result = RWORD(m_r[p]);
+ if (i < 6)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 2);
+ return result;
+ }
+ else if (i < 4)
+ return double_to_dsp(m_a[i]);
+ else
+ return dau_read_pi_special(i);
+}
+
+
+inline void dsp32c_device::dau_write_pi_double(int pi, double val)
+{
+ int p = (pi >> 3) & 15;
+ int i = (pi >> 0) & 7;
+
+ if (p == 15) p = m_lastp; // P=15 means Z inherits from Y, Y inherits from X
+ if (p)
+ {
+ WLONG_DEFERRED(m_r[p], double_to_dsp(val));
+ if (i < 6)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
+ }
+ else if (i < 4)
+ dau_set_val_noflags(i, val);
+ else
+ dau_write_pi_special(i, val);
+}
+
+
+inline void dsp32c_device::dau_write_pi_4bytes(int pi, UINT32 val)
+{
+ int p = (pi >> 3) & 15;
+ int i = (pi >> 0) & 7;
+
+ if (p == 15) p = m_lastp; // P=15 means Z inherits from Y, Y inherits from X
+ if (p)
+ {
+ m_lastp = p;
+ WLONG_DEFERRED(m_r[p], val);
+ if (i < 6)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
+ }
+ else if (i < 4)
+ dau_set_val_noflags(i, dsp_to_double(val));
+ else
+ dau_write_pi_special(i, val);
+}
+
+
+inline void dsp32c_device::dau_write_pi_2bytes(int pi, UINT16 val)
+{
+ int p = (pi >> 3) & 15;
+ int i = (pi >> 0) & 7;
+
+ if (p == 15) p = m_lastp; // P=15 means Z inherits from Y, Y inherits from X
+ if (p)
+ {
+ m_lastp = p;
+ WWORD_DEFERRED(m_r[p], val);
+ if (i < 6)
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
+ else
+ m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 2);
+ }
+ else if (i < 4)
+ dau_set_val_noflags(i, dsp_to_double(val << 16));
+ else
+ dau_write_pi_special(i, val);
+}
+
+
+
+//**************************************************************************
+// COMMON CONDITION ROUTINE
+//**************************************************************************
+
+#if (!ASSUME_UNCONDITIONAL_CAU)
+int dsp32c_device::condition(int cond)
+{
+ switch (cond)
+ {
+ case 0:
+ return 0;
+ case 1:
+ return 1;
+ case 2:
+ return !nFLAG;
+ case 3:
+ return nFLAG;
+ case 4:
+ return !zFLAG;
+ case 5:
+ return zFLAG;
+ case 6:
+ return !vFLAG;
+ case 7:
+ return vFLAG;
+ case 8:
+ return !cFLAG;
+ case 9:
+ return cFLAG;
+ case 10:
+ return !(nFLAG ^ cFLAG);
+ case 11:
+ return (nFLAG ^ cFLAG);
+ case 12:
+ return !(zFLAG | (nFLAG ^ vFLAG));
+ case 13:
+ return (zFLAG | (nFLAG ^ vFLAG));
+ case 14:
+ return !(cFLAG | zFLAG);
+ case 15:
+ return (cFLAG | zFLAG);
+
+ case 16:
+ return !(DEFERRED_VUFLAGS() & UFLAGBIT);
+ case 17:
+ return (DEFERRED_VUFLAGS() & UFLAGBIT);
+ case 18:
+ return !(DEFERRED_NZFLAGS() < 0);
+ case 19:
+ return (DEFERRED_NZFLAGS() < 0);
+ case 20:
+ return !(DEFERRED_NZFLAGS() == 0);
+ case 21:
+ return (DEFERRED_NZFLAGS() == 0);
+ case 22:
+ return !(DEFERRED_VUFLAGS() & VFLAGBIT);
+ case 23:
+ return (DEFERRED_VUFLAGS() & VFLAGBIT);
+ case 24:
+ return !(DEFERRED_NZFLAGS() <= 0);
+ case 25:
+ return (DEFERRED_NZFLAGS() <= 0);
+
+ case 32: // !ibf
+ case 33: // ibf
+ case 34: // !obe
+ case 35: // obe
+ case 36: // !pdf
+ case 37: // pdf
+ case 38: // !pif
+ case 39: // pif
+ case 40: // !sy
+ case 41: // sy
+ case 42: // !fb
+ case 43: // fb
+ case 44: // !ireq1
+ case 45: // ireq1
+ case 46: // !ireq2
+ case 47: // ireq2
+ default:
+ fatalerror("Unimplemented condition: %X", cond);
+ }
+}
+#endif
+
+
+
+//**************************************************************************
+// CAU BRANCH INSTRUCTION IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::nop(UINT32 op)
+{
+ if (op == 0)
+ return;
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+}
+
+
+void dsp32c_device::goto_t(UINT32 op)
+{
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+}
+
+
+void dsp32c_device::goto_pl(UINT32 op)
+{
+ if (!nFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_mi(UINT32 op)
+{
+ if (nFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_ne(UINT32 op)
+{
+ if (!zFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_eq(UINT32 op)
+{
+ if (zFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_vc(UINT32 op)
+{
+ if (!vFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_vs(UINT32 op)
+{
+ if (vFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_cc(UINT32 op)
+{
+ if (!cFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_cs(UINT32 op)
+{
+ if (cFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_ge(UINT32 op)
+{
+ if (!(nFLAG ^ vFLAG))
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_lt(UINT32 op)
+{
+ if (nFLAG ^ vFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_gt(UINT32 op)
+{
+ if (!(zFLAG | (nFLAG ^ vFLAG)))
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_le(UINT32 op)
+{
+ if (zFLAG | (nFLAG ^ vFLAG))
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_hi(UINT32 op)
+{
+ if (!cFLAG && !zFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_ls(UINT32 op)
+{
+ if (cFLAG || zFLAG)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_auc(UINT32 op)
+{
+ if (!(DEFERRED_VUFLAGS() & UFLAGBIT))
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_aus(UINT32 op)
+{
+ if (DEFERRED_VUFLAGS() & UFLAGBIT)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_age(UINT32 op)
+{
+ if (DEFERRED_NZFLAGS() >= 0)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_alt(UINT32 op)
+{
+ if (DEFERRED_NZFLAGS() < 0)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_ane(UINT32 op)
+{
+ if (DEFERRED_NZFLAGS() != 0)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_aeq(UINT32 op)
+{
+ if (DEFERRED_NZFLAGS() == 0)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_avc(UINT32 op)
+{
+ if (!(DEFERRED_VUFLAGS() & VFLAGBIT))
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_avs(UINT32 op)
+{
+ if (DEFERRED_VUFLAGS() & VFLAGBIT)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_agt(UINT32 op)
+{
+ if (DEFERRED_NZFLAGS() > 0)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_ale(UINT32 op)
+{
+ if (DEFERRED_NZFLAGS() <= 0)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::goto_ibe(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_ibf(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_obf(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_obe(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_pde(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_pdf(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_pie(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_pif(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_syc(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_sys(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_fbc(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_fbs(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_irq1lo(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_irq1hi(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_irq2lo(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::goto_irq2hi(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::dec_goto(UINT32 op)
+{
+ int hr = (op >> 21) & 0x1f;
+ int old = (INT16)m_r[hr];
+ m_r[hr] = EXTEND16_TO_24(m_r[hr] - 1);
+ if (old >= 0)
+ {
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+ }
+}
+
+
+void dsp32c_device::call(UINT32 op)
+{
+ int mr = (op >> 21) & 0x1f;
+ if (IS_WRITEABLE(mr))
+ m_r[mr] = PC + 4;
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
+}
+
+
+void dsp32c_device::goto24(UINT32 op)
+{
+ execute_one();
+ PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (op & 0xffff) + ((op >> 5) & 0xff0000));
+}
+
+
+void dsp32c_device::call24(UINT32 op)
+{
+ int mr = (op >> 16) & 0x1f;
+ if (IS_WRITEABLE(mr))
+ m_r[mr] = PC + 4;
+ execute_one();
+ PC = (op & 0xffff) + ((op >> 5) & 0xff0000);
+}
+
+
+void dsp32c_device::do_i(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::do_r(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+
+//**************************************************************************
+// CAU 16-BIT ARITHMETIC IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::add_si(UINT32 op)
+{
+ int dr = (op >> 21) & 0x1f;
+ int hrval = REG16((op >> 16) & 0x1f);
+ int res = hrval + (UINT16)op;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(hrval, op, res);
+}
+
+
+void dsp32c_device::add_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
+ int res = s2rval + s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(s1rval, s2rval, res);
+ }
+}
+
+
+void dsp32c_device::mul2_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int res = s1rval * 2;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(s1rval, 0, res);
+ }
+}
+
+
+void dsp32c_device::subr_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
+ int res = s1rval - s2rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(s1rval, s2rval, res);
+ }
+}
+
+
+void dsp32c_device::addr_ss(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::sub_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
+ int res = s2rval - s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(s1rval, s2rval, res);
+ }
+}
+
+
+void dsp32c_device::neg_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int res = -s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(s1rval, 0, res);
+ }
+}
+
+
+void dsp32c_device::andc_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
+ int res = s2rval & ~s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZ00_16(res);
+ }
+}
+
+
+void dsp32c_device::cmp_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int drval = REG16((op >> 16) & 0x1f);
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int res = drval - s1rval;
+ SET_NZCV_16(drval, s1rval, res);
+ }
+}
+
+
+void dsp32c_device::xor_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
+ int res = s2rval ^ s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZ00_16(res);
+ }
+}
+
+
+void dsp32c_device::rcr_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int res = ((m_nzcflags >> 9) & 0x8000) | (s1rval >> 1);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ m_nzcflags = ((res & 0xffff) << 8) | ((s1rval & 1) << 24);
+ m_vflags = 0;
+ }
+}
+
+
+void dsp32c_device::or_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
+ int res = s2rval | s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZ00_16(res);
+ }
+}
+
+
+void dsp32c_device::rcl_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int res = ((m_nzcflags >> 24) & 0x0001) | (s1rval << 1);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ m_nzcflags = ((res & 0xffff) << 8) | ((s1rval & 0x8000) << 9);
+ m_vflags = 0;
+ }
+}
+
+
+void dsp32c_device::shr_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int res = s1rval >> 1;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ m_nzcflags = ((res & 0xffff) << 8) | ((s1rval & 1) << 24);
+ m_vflags = 0;
+ }
+}
+
+
+void dsp32c_device::div2_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int res = (s1rval & 0x8000) | (s1rval >> 1);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ m_nzcflags = ((res & 0xffff) << 8) | ((s1rval & 1) << 24);
+ m_vflags = 0;
+ }
+}
+
+
+void dsp32c_device::and_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
+ int res = s2rval & s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZ00_16(res);
+ }
+}
+
+
+void dsp32c_device::test_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int drval = REG16((op >> 16) & 0x1f);
+ int s1rval = REG16((op >> 5) & 0x1f);
+ int res = drval & s1rval;
+ SET_NZ00_16(res);
+ }
+}
+
+
+void dsp32c_device::add_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG16(dr);
+ int res = drval + (UINT16)op;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(drval, op, res);
+}
+
+
+void dsp32c_device::subr_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG16(dr);
+ int res = (UINT16)op - drval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(drval, op, res);
+}
+
+
+void dsp32c_device::addr_di(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::sub_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG16(dr);
+ int res = drval - (UINT16)op;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZCV_16(drval, op, res);
+}
+
+
+void dsp32c_device::andc_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG16(dr);
+ int res = drval & ~(UINT16)op;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZ00_16(res);
+}
+
+
+void dsp32c_device::cmp_di(UINT32 op)
+{
+ int drval = REG16((op >> 16) & 0x1f);
+ int res = drval - (UINT16)op;
+ SET_NZCV_16(drval, op, res);
+}
+
+
+void dsp32c_device::xor_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG16(dr);
+ int res = drval ^ (UINT16)op;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZ00_16(res);
+}
+
+
+void dsp32c_device::or_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG16(dr);
+ int res = drval | (UINT16)op;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZ00_16(res);
+}
+
+
+void dsp32c_device::and_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG16(dr);
+ int res = drval & (UINT16)op;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ SET_NZ00_16(res);
+}
+
+
+void dsp32c_device::test_di(UINT32 op)
+{
+ int drval = REG16((op >> 16) & 0x1f);
+ int res = drval & (UINT16)op;
+ SET_NZ00_16(res);
+}
+
+
+
+//**************************************************************************
+// CAU 24-BIT ARITHMETIC IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::adde_si(UINT32 op)
+{
+ int dr = (op >> 21) & 0x1f;
+ int hrval = REG24((op >> 16) & 0x1f);
+ int res = hrval + EXTEND16_TO_24(op);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(hrval, op << 8, res);
+}
+
+
+void dsp32c_device::adde_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
+ int res = s2rval + s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(s1rval, s2rval, res);
+ }
+}
+
+
+void dsp32c_device::mul2e_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int res = s1rval * 2;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(s1rval, 0, res);
+ }
+}
+
+
+void dsp32c_device::subre_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
+ int res = s1rval - s2rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(s1rval, s2rval, res);
+ }
+}
+
+
+void dsp32c_device::addre_ss(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::sube_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
+ int res = s2rval - s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(s1rval, s2rval, res);
+ }
+}
+
+
+void dsp32c_device::nege_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int res = -s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(s1rval, 0, res);
+ }
+}
+
+
+void dsp32c_device::andce_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
+ int res = s2rval & ~s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ SET_NZ00_24(res);
+ }
+}
+
+
+void dsp32c_device::cmpe_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int drval = REG24((op >> 16) & 0x1f);
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int res = drval - s1rval;
+ SET_NZCV_24(drval, s1rval, res);
+ }
+}
+
+
+void dsp32c_device::xore_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
+ int res = s2rval ^ s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ SET_NZ00_24(res);
+ }
+}
+
+
+void dsp32c_device::rcre_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int res = ((m_nzcflags >> 1) & 0x800000) | (s1rval >> 1);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ m_nzcflags = res | ((s1rval & 1) << 24);
+ m_vflags = 0;
+ }
+}
+
+
+void dsp32c_device::ore_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
+ int res = s2rval | s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ SET_NZ00_24(res);
+ }
+}
+
+
+void dsp32c_device::rcle_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int res = ((m_nzcflags >> 24) & 0x000001) | (s1rval << 1);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ m_nzcflags = res | ((s1rval & 0x800000) << 1);
+ m_vflags = 0;
+ }
+}
+
+
+void dsp32c_device::shre_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int res = s1rval >> 1;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ m_nzcflags = res | ((s1rval & 1) << 24);
+ m_vflags = 0;
+ }
+}
+
+
+void dsp32c_device::div2e_s(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int res = (s1rval & 0x800000) | (s1rval >> 1);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ m_nzcflags = res | ((s1rval & 1) << 24);
+ m_vflags = 0;
+ }
+}
+
+
+void dsp32c_device::ande_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int dr = (op >> 16) & 0x1f;
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
+ int res = s2rval & s1rval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ SET_NZ00_24(res);
+ }
+}
+
+
+void dsp32c_device::teste_ss(UINT32 op)
+{
+ if (CONDITION_IS_TRUE())
+ {
+ int drval = REG24((op >> 16) & 0x1f);
+ int s1rval = REG24((op >> 5) & 0x1f);
+ int res = drval & s1rval;
+ SET_NZ00_24(res);
+ }
+}
+
+
+void dsp32c_device::adde_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG24(dr);
+ int res = drval + EXTEND16_TO_24(op);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(drval, op << 8, res);
+}
+
+
+void dsp32c_device::subre_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG24(dr);
+ int res = EXTEND16_TO_24(op) - drval;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(drval, op << 8, res);
+}
+
+
+void dsp32c_device::addre_di(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::sube_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG24(dr);
+ int res = drval - EXTEND16_TO_24(op);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = TRUNCATE24(res);
+ SET_NZCV_24(drval, op << 8, res);
+}
+
+
+void dsp32c_device::andce_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG24(dr);
+ int res = drval & ~EXTEND16_TO_24(op);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ SET_NZ00_24(res);
+}
+
+
+void dsp32c_device::cmpe_di(UINT32 op)
+{
+ int drval = REG24((op >> 16) & 0x1f);
+ int res = drval - EXTEND16_TO_24(op);
+ SET_NZCV_24(drval, op << 8, res);
+}
+
+
+void dsp32c_device::xore_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG24(dr);
+ int res = drval ^ EXTEND16_TO_24(op);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ SET_NZ00_24(res);
+}
+
+
+void dsp32c_device::ore_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG24(dr);
+ int res = drval | EXTEND16_TO_24(op);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ SET_NZ00_24(res);
+}
+
+
+void dsp32c_device::ande_di(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ int drval = REG24(dr);
+ int res = drval & EXTEND16_TO_24(op);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ SET_NZ00_24(res);
+}
+
+
+void dsp32c_device::teste_di(UINT32 op)
+{
+ int drval = REG24((op >> 16) & 0x1f);
+ int res = drval & EXTEND16_TO_24(op);
+ SET_NZ00_24(res);
+}
+
+
+
+//**************************************************************************
+// CAU LOAD/STORE IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::load_hi(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ UINT32 res = RBYTE(EXTEND16_TO_24(op));
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ m_nzcflags = res << 8;
+ m_vflags = 0;
+}
+
+
+void dsp32c_device::load_li(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ UINT32 res = RBYTE(EXTEND16_TO_24(op));
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ m_nzcflags = res << 8;
+ m_vflags = 0;
+}
+
+
+void dsp32c_device::load_i(UINT32 op)
+{
+ UINT32 res = RWORD(EXTEND16_TO_24(op));
+ int dr = (op >> 16) & 0x1f;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ m_nzcflags = res << 8;
+ m_vflags = 0;
+}
+
+
+void dsp32c_device::load_ei(UINT32 op)
+{
+ UINT32 res = TRUNCATE24(RLONG(EXTEND16_TO_24(op)));
+ int dr = (op >> 16) & 0x1f;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ m_nzcflags = res;
+ m_vflags = 0;
+}
+
+
+void dsp32c_device::store_hi(UINT32 op)
+{
+ WBYTE(EXTEND16_TO_24(op), m_r[(op >> 16) & 0x1f] >> 8);
+}
+
+
+void dsp32c_device::store_li(UINT32 op)
+{
+ WBYTE(EXTEND16_TO_24(op), m_r[(op >> 16) & 0x1f]);
+}
+
+
+void dsp32c_device::store_i(UINT32 op)
+{
+ WWORD(EXTEND16_TO_24(op), REG16((op >> 16) & 0x1f));
+}
+
+
+void dsp32c_device::store_ei(UINT32 op)
+{
+ WLONG(EXTEND16_TO_24(op), (INT32)(REG24((op >> 16) & 0x1f) << 8) >> 8);
+}
+
+
+void dsp32c_device::load_hr(UINT32 op)
+{
+ if (!(op & 0x400))
+ {
+ int dr = (op >> 16) & 0x1f;
+ UINT32 res = cau_read_pi_1byte(op) << 8;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ m_nzcflags = res << 8;
+ m_vflags = 0;
+ }
+ else
+ unimplemented(op);
+}
+
+
+void dsp32c_device::load_lr(UINT32 op)
+{
+ if (!(op & 0x400))
+ {
+ int dr = (op >> 16) & 0x1f;
+ UINT32 res = cau_read_pi_1byte(op);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ m_nzcflags = res << 8;
+ m_vflags = 0;
+ }
+ else
+ unimplemented(op);
+}
+
+
+void dsp32c_device::load_r(UINT32 op)
+{
+ if (!(op & 0x400))
+ {
+ UINT32 res = cau_read_pi_2byte(op);
+ int dr = (op >> 16) & 0x1f;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = EXTEND16_TO_24(res);
+ m_nzcflags = res << 8;
+ m_vflags = 0;
+ }
+ else
+ unimplemented(op);
+}
+
+
+void dsp32c_device::load_er(UINT32 op)
+{
+ if (!(op & 0x400))
+ {
+ UINT32 res = TRUNCATE24(cau_read_pi_4byte(op));
+ int dr = (op >> 16) & 0x1f;
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+ m_nzcflags = res;
+ m_vflags = 0;
+ }
+ else
+ unimplemented(op);
+}
+
+
+void dsp32c_device::store_hr(UINT32 op)
+{
+ if (!(op & 0x400))
+ cau_write_pi_1byte(op, m_r[(op >> 16) & 0x1f] >> 8);
+ else
+ unimplemented(op);
+}
+
+
+void dsp32c_device::store_lr(UINT32 op)
+{
+ if (!(op & 0x400))
+ cau_write_pi_1byte(op, m_r[(op >> 16) & 0x1f]);
+ else
+ unimplemented(op);
+}
+
+
+void dsp32c_device::store_r(UINT32 op)
+{
+ if (!(op & 0x400))
+ cau_write_pi_2byte(op, REG16((op >> 16) & 0x1f));
+ else
+ unimplemented(op);
+}
+
+
+void dsp32c_device::store_er(UINT32 op)
+{
+ if (!(op & 0x400))
+ cau_write_pi_4byte(op, REG24((op >> 16) & 0x1f));
+ else
+ unimplemented(op);
+}
+
+
+void dsp32c_device::load24(UINT32 op)
+{
+ int dr = (op >> 16) & 0x1f;
+ UINT32 res = (op & 0xffff) + ((op >> 5) & 0xff0000);
+ if (IS_WRITEABLE(dr))
+ m_r[dr] = res;
+}
+
+
+
+//**************************************************************************
+// DAU FORM 1 IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::d1_aMpp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = yval + DEFERRED_MULTIPLIER((op >> 26) & 7) * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d1_aMpm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = yval - DEFERRED_MULTIPLIER((op >> 26) & 7) * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d1_aMmp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = -yval + DEFERRED_MULTIPLIER((op >> 26) & 7) * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d1_aMmm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = -yval - DEFERRED_MULTIPLIER((op >> 26) & 7) * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d1_0px(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = yval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+ (void)xval;
+}
+
+
+void dsp32c_device::d1_0mx(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = -yval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+ (void)xval;
+}
+
+
+void dsp32c_device::d1_1pp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = yval + xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d1_1pm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = yval - xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d1_1mp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = -yval + xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d1_1mm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = -yval - xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d1_aMppr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d1_aMpmr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d1_aMmpr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d1_aMmmr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+
+//**************************************************************************
+// DAU FORM 2 IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::d2_aMpp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
+ double res = m_a[(op >> 26) & 7] + yval * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, yval);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d2_aMpm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
+ double res = m_a[(op >> 26) & 7] - yval * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, yval);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d2_aMmp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
+ double res = -m_a[(op >> 26) & 7] + yval * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, yval);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d2_aMmm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
+ double res = -m_a[(op >> 26) & 7] - yval * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, yval);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d2_aMppr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d2_aMpmr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d2_aMmpr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d2_aMmmr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+
+//**************************************************************************
+// DAU FORM 3 IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::d3_aMpp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
+ double res = m_a[(op >> 26) & 7] + yval * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d3_aMpm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
+ double res = m_a[(op >> 26) & 7] - yval * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d3_aMmp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
+ double res = -m_a[(op >> 26) & 7] + yval * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d3_aMmm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
+ double res = -m_a[(op >> 26) & 7] - yval * xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d3_aMppr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d3_aMpmr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d3_aMmpr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d3_aMmmr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+
+//**************************************************************************
+// DAU FORM 4 IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::d4_pp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = yval + xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, yval);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d4_pm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = yval - xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, yval);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d4_mp(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = -yval + xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, yval);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d4_mm(UINT32 op)
+{
+ double xval = dau_read_pi_double_1st(op >> 14, 1);
+ double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
+ double res = -yval - xval;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, yval);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d4_ppr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d4_pmr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d4_mpr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d4_mmr(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+
+//**************************************************************************
+// DAU FORM 5 IMPLEMENTATION
+//**************************************************************************
+
+void dsp32c_device::d5_ic(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d5_oc(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d5_float(UINT32 op)
+{
+ double res = (double)(INT16)dau_read_pi_2bytes(op >> 7);
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d5_int(UINT32 op)
+{
+ double val = dau_read_pi_double_1st(op >> 7, 0);
+ int zpi = (op >> 0) & 0x7f;
+ INT16 res;
+ if (!(DAUC & 0x10)) val = floor(val + 0.5);
+ else val = ceil(val - 0.5);
+ res = (INT16)val;
+ if (zpi != 7)
+ dau_write_pi_2bytes(zpi, res);
+ dau_set_val_noflags((op >> 21) & 3, dsp_to_double(res << 16));
+}
+
+
+void dsp32c_device::d5_round(UINT32 op)
+{
+ double res = (double)(float)dau_read_pi_double_1st(op >> 7, 0);
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d5_ifalt(UINT32 op)
+{
+ int ar = (op >> 21) & 3;
+ double res = m_a[ar];
+ int zpi = (op >> 0) & 0x7f;
+ if (NFLAG)
+ res = dau_read_pi_double_1st(op >> 7, 0);
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_noflags(ar, res);
+}
+
+
+void dsp32c_device::d5_ifaeq(UINT32 op)
+{
+ int ar = (op >> 21) & 3;
+ double res = m_a[ar];
+ int zpi = (op >> 0) & 0x7f;
+ if (ZFLAG)
+ res = dau_read_pi_double_1st(op >> 7, 0);
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_noflags(ar, res);
+}
+
+
+void dsp32c_device::d5_ifagt(UINT32 op)
+{
+ int ar = (op >> 21) & 3;
+ double res = m_a[ar];
+ int zpi = (op >> 0) & 0x7f;
+ if (!NFLAG && !ZFLAG)
+ res = dau_read_pi_double_1st(op >> 7, 0);
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_noflags(ar, res);
+}
+
+
+void dsp32c_device::d5_float24(UINT32 op)
+{
+ double res = (double)((INT32)(dau_read_pi_4bytes(op >> 7) << 8) >> 8);
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_double(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, res);
+}
+
+
+void dsp32c_device::d5_int24(UINT32 op)
+{
+ double val = dau_read_pi_double_1st(op >> 7, 0);
+ int zpi = (op >> 0) & 0x7f;
+ INT32 res;
+ if (!(DAUC & 0x10)) val = floor(val + 0.5);
+ else val = ceil(val - 0.5);
+ res = (INT32)val;
+ if (res > 0x7fffff) res = 0x7fffff;
+ else if (res < -0x800000) res = -0x800000;
+ if (zpi != 7)
+ dau_write_pi_4bytes(zpi, (INT32)(res << 8) >> 8);
+ dau_set_val_noflags((op >> 21) & 3, dsp_to_double(res << 8));
+}
+
+
+void dsp32c_device::d5_ieee(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d5_dsp(UINT32 op)
+{
+ unimplemented(op);
+}
+
+
+void dsp32c_device::d5_seed(UINT32 op)
+{
+ UINT32 val = dau_read_pi_4bytes(op >> 7);
+ INT32 res = val ^ 0x7fffffff;
+ int zpi = (op >> 0) & 0x7f;
+ if (zpi != 7)
+ dau_write_pi_4bytes(zpi, res);
+ dau_set_val_flags((op >> 21) & 3, dsp_to_double((INT32)res));
+}
+
+
+
+//**************************************************************************
+// FUNCTION TABLE
+//**************************************************************************
+
+void (dsp32c_device::*const dsp32c_device::s_dsp32ops[])(UINT32 op) =
+{
+ &dsp32c_device::nop, &dsp32c_device::goto_t, &dsp32c_device::goto_pl, &dsp32c_device::goto_mi, &dsp32c_device::goto_ne, &dsp32c_device::goto_eq, &dsp32c_device::goto_vc, &dsp32c_device::goto_vs, // 00
+ &dsp32c_device::goto_cc, &dsp32c_device::goto_cs, &dsp32c_device::goto_ge, &dsp32c_device::goto_lt, &dsp32c_device::goto_gt, &dsp32c_device::goto_le, &dsp32c_device::goto_hi, &dsp32c_device::goto_ls,
+ &dsp32c_device::goto_auc, &dsp32c_device::goto_aus, &dsp32c_device::goto_age, &dsp32c_device::goto_alt, &dsp32c_device::goto_ane, &dsp32c_device::goto_aeq, &dsp32c_device::goto_avc, &dsp32c_device::goto_avs, // 01
+ &dsp32c_device::goto_agt, &dsp32c_device::goto_ale, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::goto_ibe, &dsp32c_device::goto_ibf, &dsp32c_device::goto_obf, &dsp32c_device::goto_obe, &dsp32c_device::goto_pde, &dsp32c_device::goto_pdf, &dsp32c_device::goto_pie, &dsp32c_device::goto_pif, // 02
+ &dsp32c_device::goto_syc, &dsp32c_device::goto_sys, &dsp32c_device::goto_fbc, &dsp32c_device::goto_fbs, &dsp32c_device::goto_irq1lo,&dsp32c_device::goto_irq1hi,&dsp32c_device::goto_irq2lo,&dsp32c_device::goto_irq2hi,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 03
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 04
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 05
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, // 06
+ &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto,
+ &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, // 07
+ &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto, &dsp32c_device::dec_goto,
+
+ &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, // 08
+ &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call,
+ &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, // 09
+ &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call, &dsp32c_device::call,
+ &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, // 0a
+ &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si,
+ &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, // 0b
+ &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si, &dsp32c_device::add_si,
+
+ &dsp32c_device::add_ss, &dsp32c_device::mul2_s, &dsp32c_device::subr_ss, &dsp32c_device::addr_ss, &dsp32c_device::sub_ss, &dsp32c_device::neg_s, &dsp32c_device::andc_ss, &dsp32c_device::cmp_ss, // 0c
+ &dsp32c_device::xor_ss, &dsp32c_device::rcr_s, &dsp32c_device::or_ss, &dsp32c_device::rcl_s, &dsp32c_device::shr_s, &dsp32c_device::div2_s, &dsp32c_device::and_ss, &dsp32c_device::test_ss,
+ &dsp32c_device::add_di, &dsp32c_device::illegal, &dsp32c_device::subr_di, &dsp32c_device::addr_di, &dsp32c_device::sub_di, &dsp32c_device::illegal, &dsp32c_device::andc_di, &dsp32c_device::cmp_di, // 0d
+ &dsp32c_device::xor_di, &dsp32c_device::illegal, &dsp32c_device::or_di, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::and_di, &dsp32c_device::test_di,
+ &dsp32c_device::load_hi, &dsp32c_device::load_hi, &dsp32c_device::load_li, &dsp32c_device::load_li, &dsp32c_device::load_i, &dsp32c_device::load_i, &dsp32c_device::load_ei, &dsp32c_device::load_ei, // 0e
+ &dsp32c_device::store_hi, &dsp32c_device::store_hi, &dsp32c_device::store_li, &dsp32c_device::store_li, &dsp32c_device::store_i, &dsp32c_device::store_i, &dsp32c_device::store_ei, &dsp32c_device::store_ei,
+ &dsp32c_device::load_hr, &dsp32c_device::load_hr, &dsp32c_device::load_lr, &dsp32c_device::load_lr, &dsp32c_device::load_r, &dsp32c_device::load_r, &dsp32c_device::load_er, &dsp32c_device::load_er, // 0f
+ &dsp32c_device::store_hr, &dsp32c_device::store_hr, &dsp32c_device::store_lr, &dsp32c_device::store_lr, &dsp32c_device::store_r, &dsp32c_device::store_r, &dsp32c_device::store_er, &dsp32c_device::store_er,
+
+ &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, // 10
+ &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm,
+ &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, // 11
+ &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr,
+ &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, // 12
+ &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm,
+ &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, // 13
+ &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr,
+
+ &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, // 14
+ &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm,
+ &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, // 15
+ &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr,
+ &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpp, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, &dsp32c_device::d1_aMpm, // 16
+ &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmp, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm, &dsp32c_device::d1_aMmm,
+ &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, // 17
+ &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr,
+
+ &dsp32c_device::d1_0px, &dsp32c_device::d1_0px, &dsp32c_device::d1_0px, &dsp32c_device::d1_0px, &dsp32c_device::d1_0px, &dsp32c_device::d1_0px, &dsp32c_device::d1_0px, &dsp32c_device::d1_0px, // 18
+ &dsp32c_device::d1_0mx, &dsp32c_device::d1_0mx, &dsp32c_device::d1_0mx, &dsp32c_device::d1_0mx, &dsp32c_device::d1_0mx, &dsp32c_device::d1_0mx, &dsp32c_device::d1_0mx, &dsp32c_device::d1_0mx,
+ &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, // 19
+ &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr,
+ &dsp32c_device::d1_1pp, &dsp32c_device::d1_1pp, &dsp32c_device::d1_1pp, &dsp32c_device::d1_1pp, &dsp32c_device::d1_1pm, &dsp32c_device::d1_1pm, &dsp32c_device::d1_1pm, &dsp32c_device::d1_1pm, // 1a
+ &dsp32c_device::d1_1mp, &dsp32c_device::d1_1mp, &dsp32c_device::d1_1mp, &dsp32c_device::d1_1mp, &dsp32c_device::d1_1mm, &dsp32c_device::d1_1mm, &dsp32c_device::d1_1mm, &dsp32c_device::d1_1mm,
+ &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMppr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, &dsp32c_device::d1_aMpmr, // 1b
+ &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmpr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr, &dsp32c_device::d1_aMmmr,
+
+ &dsp32c_device::d4_pp, &dsp32c_device::d4_pp, &dsp32c_device::d4_pp, &dsp32c_device::d4_pp, &dsp32c_device::d4_pm, &dsp32c_device::d4_pm, &dsp32c_device::d4_pm, &dsp32c_device::d4_pm, // 1c
+ &dsp32c_device::d4_mp, &dsp32c_device::d4_mp, &dsp32c_device::d4_mp, &dsp32c_device::d4_mp, &dsp32c_device::d4_mm, &dsp32c_device::d4_mm, &dsp32c_device::d4_mm, &dsp32c_device::d4_mm,
+ &dsp32c_device::d4_ppr, &dsp32c_device::d4_ppr, &dsp32c_device::d4_ppr, &dsp32c_device::d4_ppr, &dsp32c_device::d4_pmr, &dsp32c_device::d4_pmr, &dsp32c_device::d4_pmr, &dsp32c_device::d4_pmr, // 1d
+ &dsp32c_device::d4_mpr, &dsp32c_device::d4_mpr, &dsp32c_device::d4_mpr, &dsp32c_device::d4_mpr, &dsp32c_device::d4_mmr, &dsp32c_device::d4_mmr, &dsp32c_device::d4_mmr, &dsp32c_device::d4_mmr,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 1e
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 1f
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+
+ &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, // 20
+ &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm,
+ &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, // 21
+ &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr,
+ &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, // 22
+ &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm,
+ &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, // 23
+ &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr,
+
+ &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, // 24
+ &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm,
+ &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, // 25
+ &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr,
+ &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, // 26
+ &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm,
+ &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, // 27
+ &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr,
+
+ &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, // 28
+ &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm,
+ &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, // 29
+ &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr,
+ &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpp, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, &dsp32c_device::d2_aMpm, // 2a
+ &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmp, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm, &dsp32c_device::d2_aMmm,
+ &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMppr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, &dsp32c_device::d2_aMpmr, // 2b
+ &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmpr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr, &dsp32c_device::d2_aMmmr,
+
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 2c
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 2d
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 2e
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 2f
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+
+ &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, // 30
+ &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm,
+ &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, // 31
+ &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr,
+ &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, // 32
+ &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm,
+ &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, // 33
+ &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr,
+
+ &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, // 34
+ &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm,
+ &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, // 35
+ &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr,
+ &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, // 36
+ &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm,
+ &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, // 37
+ &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr,
+
+ &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, // 38
+ &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm,
+ &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, // 39
+ &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr,
+ &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpp, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, &dsp32c_device::d3_aMpm, // 3a
+ &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmp, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm, &dsp32c_device::d3_aMmm,
+ &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMppr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, &dsp32c_device::d3_aMpmr, // 3b
+ &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmpr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr, &dsp32c_device::d3_aMmmr,
+
+ &dsp32c_device::d5_ic, &dsp32c_device::d5_ic, &dsp32c_device::d5_ic, &dsp32c_device::d5_ic, &dsp32c_device::d5_oc, &dsp32c_device::d5_oc, &dsp32c_device::d5_oc, &dsp32c_device::d5_oc, // 3c
+ &dsp32c_device::d5_float, &dsp32c_device::d5_float, &dsp32c_device::d5_float, &dsp32c_device::d5_float, &dsp32c_device::d5_int, &dsp32c_device::d5_int, &dsp32c_device::d5_int, &dsp32c_device::d5_int,
+ &dsp32c_device::d5_round, &dsp32c_device::d5_round, &dsp32c_device::d5_round, &dsp32c_device::d5_round, &dsp32c_device::d5_ifalt, &dsp32c_device::d5_ifalt, &dsp32c_device::d5_ifalt, &dsp32c_device::d5_ifalt, // 3d
+ &dsp32c_device::d5_ifaeq, &dsp32c_device::d5_ifaeq, &dsp32c_device::d5_ifaeq, &dsp32c_device::d5_ifaeq, &dsp32c_device::d5_ifagt, &dsp32c_device::d5_ifagt, &dsp32c_device::d5_ifagt, &dsp32c_device::d5_ifagt,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 3e
+ &dsp32c_device::d5_float24, &dsp32c_device::d5_float24, &dsp32c_device::d5_float24, &dsp32c_device::d5_float24, &dsp32c_device::d5_int24, &dsp32c_device::d5_int24, &dsp32c_device::d5_int24, &dsp32c_device::d5_int24,
+ &dsp32c_device::d5_ieee, &dsp32c_device::d5_ieee, &dsp32c_device::d5_ieee, &dsp32c_device::d5_ieee, &dsp32c_device::d5_dsp, &dsp32c_device::d5_dsp, &dsp32c_device::d5_dsp, &dsp32c_device::d5_dsp, // 3f
+ &dsp32c_device::d5_seed, &dsp32c_device::d5_seed, &dsp32c_device::d5_seed, &dsp32c_device::d5_seed, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 40
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 41
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 42
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 43
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 44
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 45
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::do_i, &dsp32c_device::do_r, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 46
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 47
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 48
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 49
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, // 4a
+ &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si,
+ &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, // 4b
+ &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si, &dsp32c_device::adde_si,
+
+ &dsp32c_device::adde_ss, &dsp32c_device::mul2e_s, &dsp32c_device::subre_ss, &dsp32c_device::addre_ss, &dsp32c_device::sube_ss, &dsp32c_device::nege_s, &dsp32c_device::andce_ss, &dsp32c_device::cmpe_ss, // 4c
+ &dsp32c_device::xore_ss, &dsp32c_device::rcre_s, &dsp32c_device::ore_ss, &dsp32c_device::rcle_s, &dsp32c_device::shre_s, &dsp32c_device::div2e_s, &dsp32c_device::ande_ss, &dsp32c_device::teste_ss,
+ &dsp32c_device::adde_di, &dsp32c_device::illegal, &dsp32c_device::subre_di, &dsp32c_device::addre_di, &dsp32c_device::sube_di, &dsp32c_device::illegal, &dsp32c_device::andce_di, &dsp32c_device::cmpe_di, // 4d
+ &dsp32c_device::xore_di, &dsp32c_device::illegal, &dsp32c_device::ore_di, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::ande_di, &dsp32c_device::teste_di,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 4e
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, // 4f
+ &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal, &dsp32c_device::illegal,
+
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 50
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 51
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 52
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 53
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 54
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 55
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 56
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 57
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 58
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 59
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 5a
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 5b
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 5c
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 5d
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 5e
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, // 5f
+ &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24, &dsp32c_device::goto24,
+
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 60
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 61
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 62
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 63
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 64
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 65
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 66
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 67
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 68
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 69
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 6a
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 6b
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 6c
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 6d
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 6e
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, // 6f
+ &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24, &dsp32c_device::load24,
+
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 70
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 71
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 72
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 73
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 74
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 75
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 76
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 77
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 78
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 79
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 7a
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 7b
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 7c
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 7d
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 7e
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24,
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, // 7f
+ &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24, &dsp32c_device::call24
+};
+
+
+/*
+
+ Most common OPs in Race Drivin':
+
+301681217 - op 0 - nop
+164890391 - op 4A1 - adde_si
+99210113 - op 661 - load24
+86010010 - op F7 - load_er
+61148739 - op 4D4 - sube_di
+52693763 - op 180 - d1_0px
+41525754 - op FF - store_er
+35033321 - op 380 - d3_aMpp
+31621151 - op 4C0 - adde_ss
+28076244 - op 660 - load24
+19190505 - op 4C1 - mul2e_s
+13270852 - op F5 - load_r
+12535169 - op 1A4 - d1_1pm
+12265141 - op 4C4 - sube_ss
+10748211 - op 4CD - div2e_s
+10493660 - op FD - store_r
+ 9721263 - op 189
+ 9415685 - op 3C8
+ 9294148 - op 3D5
+ 8887846 - op 1A1
+ 8788648 - op 381
+ 8185239 - op 300
+ 7241256 - op 383
+ 6877349 - op 4A3
+ 6832295 - op 181
+ 6601270 - op 3E8
+ 6562483 - op 4A4
+ 6553514 - op 3C9
+ 6270430 - op 280
+ 6041485 - op 1A0
+ 5299529 - op 304
+ 5110926 - op 382
+ 4922253 - op 363
+ 4603670 - op 4D7
+ 4164327 - op 4AE
+ 3980085 - op 3EC
+ 3599198 - op 3CC
+ 3543878 - op 3D0
+ 3489158 - op 4
+ 3463235 - op 321
+ 3335995 - op 3F9
+ 3001546 - op 4CE
+ 2882940 - op 129
+ 2882940 - op 1A5
+ 2882940 - op 342
+ 2841981 - op 360
+ 2663417 - op FB
+ 2059640 - op 3ED
+ 1867166 - op 1A8
+ 1830789 - op 305
+ 1753312 - op 301
+ 1726866 - op 5
+ 1594991 - op 12
+ 1571286 - op 19
+ 1507644 - op A2
+ 1418846 - op 3CD
+ 1273134 - op F3
+ 1177914 - op 4C7
+ 1175720 - op 188
+ 1091848 - op 3E9
+ 1088206 - op 6FF
+ 1088204 - op 4CA
+ 1012639 - op 101
+ 939617 - op 4C5
+
+*/