diff options
Diffstat (limited to 'trunk/src/emu/cpu/dsp32/dsp32ops.c')
-rw-r--r-- | trunk/src/emu/cpu/dsp32/dsp32ops.c | 2859 |
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 + +*/ |