summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-11-06 07:01:14 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-11-06 07:01:14 +0000
commit2e8af3ea7ea8ef7867c10bfbfdedb65109b565b3 (patch)
treed1dacd45fabff02453bb8931be0cf57467307ad6 /src
parent28d48b383ce534831b6f30aa6aaa51d84e611084 (diff)
"Pointer"-ified the ADSP-21xx core.
Diffstat (limited to 'src')
-rw-r--r--src/emu/cpu/adsp2100/2100dasm.c2
-rw-r--r--src/emu/cpu/adsp2100/2100ops.c1346
-rw-r--r--src/emu/cpu/adsp2100/adsp2100.c2179
3 files changed, 1700 insertions, 1827 deletions
diff --git a/src/emu/cpu/adsp2100/2100dasm.c b/src/emu/cpu/adsp2100/2100dasm.c
index 07e22a31a95..8baeecdf6c7 100644
--- a/src/emu/cpu/adsp2100/2100dasm.c
+++ b/src/emu/cpu/adsp2100/2100dasm.c
@@ -230,7 +230,7 @@ static int aluconst(char *buffer, int dest, int op)
/* execute instructions on this CPU until icount expires */
-offs_t adsp2100_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram)
+offs_t adsp21xx_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram)
{
unsigned int op = oprom[0] | (oprom[1] << 8) | (oprom[2] << 16);
unsigned dasmflags = 0;
diff --git a/src/emu/cpu/adsp2100/2100ops.c b/src/emu/cpu/adsp2100/2100ops.c
index c088103bbe5..363b869ac98 100644
--- a/src/emu/cpu/adsp2100/2100ops.c
+++ b/src/emu/cpu/adsp2100/2100ops.c
@@ -13,44 +13,44 @@
#define ZFLAG 0x01
/* extracts flags */
-#define GET_SS (adsp2100.astat & SSFLAG)
-#define GET_MV (adsp2100.astat & MVFLAG)
-#define GET_Q (adsp2100.astat & QFLAG)
-#define GET_S (adsp2100.astat & SFLAG)
-#define GET_C (adsp2100.astat & CFLAG)
-#define GET_V (adsp2100.astat & VFLAG)
-#define GET_N (adsp2100.astat & NFLAG)
-#define GET_Z (adsp2100.astat & ZFLAG)
+#define GET_SS (adsp->astat & SSFLAG)
+#define GET_MV (adsp->astat & MVFLAG)
+#define GET_Q (adsp->astat & QFLAG)
+#define GET_S (adsp->astat & SFLAG)
+#define GET_C (adsp->astat & CFLAG)
+#define GET_V (adsp->astat & VFLAG)
+#define GET_N (adsp->astat & NFLAG)
+#define GET_Z (adsp->astat & ZFLAG)
/* clears flags */
-#define CLR_SS (adsp2100.astat &= ~SSFLAG)
-#define CLR_MV (adsp2100.astat &= ~MVFLAG)
-#define CLR_Q (adsp2100.astat &= ~QFLAG)
-#define CLR_S (adsp2100.astat &= ~SFLAG)
-#define CLR_C (adsp2100.astat &= ~CFLAG)
-#define CLR_V (adsp2100.astat &= ~VFLAG)
-#define CLR_N (adsp2100.astat &= ~NFLAG)
-#define CLR_Z (adsp2100.astat &= ~ZFLAG)
+#define CLR_SS (adsp->astat &= ~SSFLAG)
+#define CLR_MV (adsp->astat &= ~MVFLAG)
+#define CLR_Q (adsp->astat &= ~QFLAG)
+#define CLR_S (adsp->astat &= ~SFLAG)
+#define CLR_C (adsp->astat &= ~CFLAG)
+#define CLR_V (adsp->astat &= ~VFLAG)
+#define CLR_N (adsp->astat &= ~NFLAG)
+#define CLR_Z (adsp->astat &= ~ZFLAG)
/* sets flags */
-#define SET_SS (adsp2100.astat |= SSFLAG)
-#define SET_MV (adsp2100.astat |= MVFLAG)
-#define SET_Q (adsp2100.astat |= QFLAG)
-#define SET_S (adsp2100.astat |= SFLAG)
-#define SET_C (adsp2100.astat |= CFLAG)
-#define SET_V (adsp2100.astat |= VFLAG)
-#define SET_Z (adsp2100.astat |= ZFLAG)
-#define SET_N (adsp2100.astat |= NFLAG)
+#define SET_SS (adsp->astat |= SSFLAG)
+#define SET_MV (adsp->astat |= MVFLAG)
+#define SET_Q (adsp->astat |= QFLAG)
+#define SET_S (adsp->astat |= SFLAG)
+#define SET_C (adsp->astat |= CFLAG)
+#define SET_V (adsp->astat |= VFLAG)
+#define SET_Z (adsp->astat |= ZFLAG)
+#define SET_N (adsp->astat |= NFLAG)
/* flag clearing; must be done before setting */
-#define CLR_FLAGS (adsp2100.astat &= adsp2100.astat_clear)
+#define CLR_FLAGS (adsp->astat &= adsp->astat_clear)
/* compute flags */
-#define CALC_Z(r) (adsp2100.astat |= ((r & 0xffff) == 0))
-#define CALC_N(r) (adsp2100.astat |= (r >> 14) & 0x02)
-#define CALC_V(s,d,r) (adsp2100.astat |= ((s ^ d ^ r ^ (r >> 1)) >> 13) & 0x04)
-#define CALC_C(r) (adsp2100.astat |= (r >> 13) & 0x08)
-#define CALC_C_SUB(r) (adsp2100.astat |= (~r >> 13) & 0x08)
+#define CALC_Z(r) (adsp->astat |= ((r & 0xffff) == 0))
+#define CALC_N(r) (adsp->astat |= (r >> 14) & 0x02)
+#define CALC_V(s,d,r) (adsp->astat |= ((s ^ d ^ r ^ (r >> 1)) >> 13) & 0x04)
+#define CALC_C(r) (adsp->astat |= (r >> 13) & 0x08)
+#define CALC_C_SUB(r) (adsp->astat |= (~r >> 13) & 0x08)
#define CALC_NZ(r) CLR_FLAGS; CALC_N(r); CALC_Z(r)
#define CALC_NZV(s,d,r) CLR_FLAGS; CALC_N(r); CALC_Z(r); CALC_V(s,d,r)
#define CALC_NZVC(s,d,r) CLR_FLAGS; CALC_N(r); CALC_Z(r); CALC_V(s,d,r); CALC_C(r)
@@ -81,22 +81,22 @@ static const INT32 constants[] =
#define MSTAT_GOMODE 0x40 /* go mode enable */
/* you must call this in order to change MSTAT */
-INLINE void set_mstat(int new_value)
+INLINE void set_mstat(adsp2100_state *adsp, int new_value)
{
- if ((new_value ^ adsp2100.mstat) & MSTAT_BANK)
+ if ((new_value ^ adsp->mstat) & MSTAT_BANK)
{
- ADSPCORE temp = adsp2100.core;
- adsp2100.core = adsp2100.alt;
- adsp2100.alt = temp;
+ ADSPCORE temp = adsp->core;
+ adsp->core = adsp->alt;
+ adsp->alt = temp;
}
- if ((new_value ^ adsp2100.mstat) & MSTAT_TIMER)
- if (adsp2100.timer_fired_func)
- (*adsp2100.timer_fired_func)((new_value & MSTAT_TIMER) != 0);
+ if ((new_value ^ adsp->mstat) & MSTAT_TIMER)
+ if (adsp->timer_fired_func)
+ (*adsp->timer_fired_func)((new_value & MSTAT_TIMER) != 0);
if (new_value & MSTAT_STICKYV)
- adsp2100.astat_clear = ~(CFLAG | NFLAG | ZFLAG);
+ adsp->astat_clear = ~(CFLAG | NFLAG | ZFLAG);
else
- adsp2100.astat_clear = ~(CFLAG | VFLAG | NFLAG | ZFLAG);
- adsp2100.mstat = new_value;
+ adsp->astat_clear = ~(CFLAG | VFLAG | NFLAG | ZFLAG);
+ adsp->mstat = new_value;
}
@@ -120,67 +120,67 @@ INLINE void set_mstat(int new_value)
PC stack handlers
===========================================================================*/
-INLINE UINT32 pc_stack_top(void)
+INLINE UINT32 pc_stack_top(adsp2100_state *adsp)
{
- if (adsp2100.pc_sp > 0)
- return adsp2100.pc_stack[adsp2100.pc_sp - 1];
+ if (adsp->pc_sp > 0)
+ return adsp->pc_stack[adsp->pc_sp - 1];
else
- return adsp2100.pc_stack[0];
+ return adsp->pc_stack[0];
}
-INLINE void set_pc_stack_top(UINT32 top)
+INLINE void set_pc_stack_top(adsp2100_state *adsp, UINT32 top)
{
- if (adsp2100.pc_sp > 0)
- adsp2100.pc_stack[adsp2100.pc_sp - 1] = top;
+ if (adsp->pc_sp > 0)
+ adsp->pc_stack[adsp->pc_sp - 1] = top;
else
- adsp2100.pc_stack[0] = top;
+ adsp->pc_stack[0] = top;
}
-INLINE void pc_stack_push(void)
+INLINE void pc_stack_push(adsp2100_state *adsp)
{
- if (adsp2100.pc_sp < PC_STACK_DEPTH)
+ if (adsp->pc_sp < PC_STACK_DEPTH)
{
- adsp2100.pc_stack[adsp2100.pc_sp] = adsp2100.pc;
- adsp2100.pc_sp++;
- adsp2100.sstat &= ~PC_EMPTY;
+ adsp->pc_stack[adsp->pc_sp] = adsp->pc;
+ adsp->pc_sp++;
+ adsp->sstat &= ~PC_EMPTY;
}
else
- adsp2100.sstat |= PC_OVER;
+ adsp->sstat |= PC_OVER;
}
-INLINE void pc_stack_push_val(UINT32 val)
+INLINE void pc_stack_push_val(adsp2100_state *adsp, UINT32 val)
{
- if (adsp2100.pc_sp < PC_STACK_DEPTH)
+ if (adsp->pc_sp < PC_STACK_DEPTH)
{
- adsp2100.pc_stack[adsp2100.pc_sp] = val;
- adsp2100.pc_sp++;
- adsp2100.sstat &= ~PC_EMPTY;
+ adsp->pc_stack[adsp->pc_sp] = val;
+ adsp->pc_sp++;
+ adsp->sstat &= ~PC_EMPTY;
}
else
- adsp2100.sstat |= PC_OVER;
+ adsp->sstat |= PC_OVER;
}
-INLINE void pc_stack_pop(void)
+INLINE void pc_stack_pop(adsp2100_state *adsp)
{
- if (adsp2100.pc_sp > 0)
+ if (adsp->pc_sp > 0)
{
- adsp2100.pc_sp--;
- if (adsp2100.pc_sp == 0)
- adsp2100.sstat |= PC_EMPTY;
+ adsp->pc_sp--;
+ if (adsp->pc_sp == 0)
+ adsp->sstat |= PC_EMPTY;
}
- adsp2100.pc = adsp2100.pc_stack[adsp2100.pc_sp];
- CHANGEPC();
+ adsp->pc = adsp->pc_stack[adsp->pc_sp];
+ CHANGEPC(adsp);
}
-INLINE UINT32 pc_stack_pop_val(void)
+INLINE UINT32 pc_stack_pop_val(adsp2100_state *adsp)
{
- if (adsp2100.pc_sp > 0)
+ if (adsp->pc_sp > 0)
{
- adsp2100.pc_sp--;
- if (adsp2100.pc_sp == 0)
- adsp2100.sstat |= PC_EMPTY;
+ adsp->pc_sp--;
+ if (adsp->pc_sp == 0)
+ adsp->sstat |= PC_EMPTY;
}
- return adsp2100.pc_stack[adsp2100.pc_sp];
+ return adsp->pc_stack[adsp->pc_sp];
}
@@ -188,35 +188,35 @@ INLINE UINT32 pc_stack_pop_val(void)
CNTR stack handlers
===========================================================================*/
-INLINE UINT32 cntr_stack_top(void)
+INLINE UINT32 cntr_stack_top(adsp2100_state *adsp)
{
- if (adsp2100.cntr_sp > 0)
- return adsp2100.cntr_stack[adsp2100.cntr_sp - 1];
+ if (adsp->cntr_sp > 0)
+ return adsp->cntr_stack[adsp->cntr_sp - 1];
else
- return adsp2100.cntr_stack[0];
+ return adsp->cntr_stack[0];
}
-INLINE void cntr_stack_push(void)
+INLINE void cntr_stack_push(adsp2100_state *adsp)
{
- if (adsp2100.cntr_sp < CNTR_STACK_DEPTH)
+ if (adsp->cntr_sp < CNTR_STACK_DEPTH)
{
- adsp2100.cntr_stack[adsp2100.cntr_sp] = adsp2100.cntr;
- adsp2100.cntr_sp++;
- adsp2100.sstat &= ~COUNT_EMPTY;
+ adsp->cntr_stack[adsp->cntr_sp] = adsp->cntr;
+ adsp->cntr_sp++;
+ adsp->sstat &= ~COUNT_EMPTY;
}
else
- adsp2100.sstat |= COUNT_OVER;
+ adsp->sstat |= COUNT_OVER;
}
-INLINE void cntr_stack_pop(void)
+INLINE void cntr_stack_pop(adsp2100_state *adsp)
{
- if (adsp2100.cntr_sp > 0)
+ if (adsp->cntr_sp > 0)
{
- adsp2100.cntr_sp--;
- if (adsp2100.cntr_sp == 0)
- adsp2100.sstat |= COUNT_EMPTY;
+ adsp->cntr_sp--;
+ if (adsp->cntr_sp == 0)
+ adsp->sstat |= COUNT_EMPTY;
}
- adsp2100.cntr = adsp2100.cntr_stack[adsp2100.cntr_sp];
+ adsp->cntr = adsp->cntr_stack[adsp->cntr_sp];
}
@@ -224,43 +224,43 @@ INLINE void cntr_stack_pop(void)
LOOP stack handlers
===========================================================================*/
-INLINE UINT32 loop_stack_top(void)
+INLINE UINT32 loop_stack_top(adsp2100_state *adsp)
{
- if (adsp2100.loop_sp > 0)
- return adsp2100.loop_stack[adsp2100.loop_sp - 1];
+ if (adsp->loop_sp > 0)
+ return adsp->loop_stack[adsp->loop_sp - 1];
else
- return adsp2100.loop_stack[0];
+ return adsp->loop_stack[0];
}
-INLINE void loop_stack_push(UINT32 value)
+INLINE void loop_stack_push(adsp2100_state *adsp, UINT32 value)
{
- if (adsp2100.loop_sp < LOOP_STACK_DEPTH)
+ if (adsp->loop_sp < LOOP_STACK_DEPTH)
{
- adsp2100.loop_stack[adsp2100.loop_sp] = value;
- adsp2100.loop_sp++;
- adsp2100.loop = value >> 4;
- adsp2100.loop_condition = value & 15;
- adsp2100.sstat &= ~LOOP_EMPTY;
+ adsp->loop_stack[adsp->loop_sp] = value;
+ adsp->loop_sp++;
+ adsp->loop = value >> 4;
+ adsp->loop_condition = value & 15;
+ adsp->sstat &= ~LOOP_EMPTY;
}
else
- adsp2100.sstat |= LOOP_OVER;
+ adsp->sstat |= LOOP_OVER;
}
-INLINE void loop_stack_pop(void)
+INLINE void loop_stack_pop(adsp2100_state *adsp)
{
- if (adsp2100.loop_sp > 0)
+ if (adsp->loop_sp > 0)
{
- adsp2100.loop_sp--;
- if (adsp2100.loop_sp == 0)
+ adsp->loop_sp--;
+ if (adsp->loop_sp == 0)
{
- adsp2100.loop = 0xffff;
- adsp2100.loop_condition = 0;
- adsp2100.sstat |= LOOP_EMPTY;
+ adsp->loop = 0xffff;
+ adsp->loop_condition = 0;
+ adsp->sstat |= LOOP_EMPTY;
}
else
{
- adsp2100.loop = adsp2100.loop_stack[adsp2100.loop_sp -1] >> 4;
- adsp2100.loop_condition = adsp2100.loop_stack[adsp2100.loop_sp - 1] & 15;
+ adsp->loop = adsp->loop_stack[adsp->loop_sp -1] >> 4;
+ adsp->loop_condition = adsp->loop_stack[adsp->loop_sp - 1] & 15;
}
}
}
@@ -270,32 +270,32 @@ INLINE void loop_stack_pop(void)
STAT stack handlers
===========================================================================*/
-INLINE void stat_stack_push(void)
+INLINE void stat_stack_push(adsp2100_state *adsp)
{
- if (adsp2100.stat_sp < STAT_STACK_DEPTH)
+ if (adsp->stat_sp < STAT_STACK_DEPTH)
{
- adsp2100.stat_stack[adsp2100.stat_sp][0] = adsp2100.mstat;
- adsp2100.stat_stack[adsp2100.stat_sp][1] = adsp2100.imask;
- adsp2100.stat_stack[adsp2100.stat_sp][2] = adsp2100.astat;
- adsp2100.stat_sp++;
- adsp2100.sstat &= ~STATUS_EMPTY;
+ adsp->stat_stack[adsp->stat_sp][0] = adsp->mstat;
+ adsp->stat_stack[adsp->stat_sp][1] = adsp->imask;
+ adsp->stat_stack[adsp->stat_sp][2] = adsp->astat;
+ adsp->stat_sp++;
+ adsp->sstat &= ~STATUS_EMPTY;
}
else
- adsp2100.sstat |= STATUS_OVER;
+ adsp->sstat |= STATUS_OVER;
}
-INLINE void stat_stack_pop(void)
+INLINE void stat_stack_pop(adsp2100_state *adsp)
{
- if (adsp2100.stat_sp > 0)
+ if (adsp->stat_sp > 0)
{
- adsp2100.stat_sp--;
- if (adsp2100.stat_sp == 0)
- adsp2100.sstat |= STATUS_EMPTY;
+ adsp->stat_sp--;
+ if (adsp->stat_sp == 0)
+ adsp->sstat |= STATUS_EMPTY;
}
- set_mstat(adsp2100.stat_stack[adsp2100.stat_sp][0]);
- adsp2100.imask = adsp2100.stat_stack[adsp2100.stat_sp][1];
- adsp2100.astat = adsp2100.stat_stack[adsp2100.stat_sp][2];
- check_irqs();
+ set_mstat(adsp, adsp->stat_stack[adsp->stat_sp][0]);
+ adsp->imask = adsp->stat_stack[adsp->stat_sp][1];
+ adsp->astat = adsp->stat_stack[adsp->stat_sp][2];
+ check_irqs(adsp);
}
@@ -304,15 +304,15 @@ INLINE void stat_stack_pop(void)
condition code checking
===========================================================================*/
-INLINE int CONDITION(int c)
+INLINE int CONDITION(adsp2100_state *adsp, int c)
{
if (c != 14)
- return condition_table[((c) << 8) | adsp2100.astat];
- else if ((INT32)--adsp2100.cntr > 0)
+ return condition_table[((c) << 8) | adsp->astat];
+ else if ((INT32)--adsp->cntr > 0)
return 1;
else
{
- cntr_stack_pop();
+ cntr_stack_pop(adsp);
return 0;
}
}
@@ -323,104 +323,104 @@ INLINE int CONDITION(int c)
register writing
===========================================================================*/
-static void wr_inval(INT32 val) { logerror( "ADSP %04x: Writing to an invalid register!\n", adsp2100.ppc ); }
-static void wr_ax0(INT32 val) { adsp2100.core.ax0.s = val; }
-static void wr_ax1(INT32 val) { adsp2100.core.ax1.s = val; }
-static void wr_mx0(INT32 val) { adsp2100.core.mx0.s = val; }
-static void wr_mx1(INT32 val) { adsp2100.core.mx1.s = val; }
-static void wr_ay0(INT32 val) { adsp2100.core.ay0.s = val; }
-static void wr_ay1(INT32 val) { adsp2100.core.ay1.s = val; }
-static void wr_my0(INT32 val) { adsp2100.core.my0.s = val; }
-static void wr_my1(INT32 val) { adsp2100.core.my1.s = val; }
-static void wr_si(INT32 val) { adsp2100.core.si.s = val; }
-static void wr_se(INT32 val) { adsp2100.core.se.s = (INT8)val; }
-static void wr_ar(INT32 val) { adsp2100.core.ar.s = val; }
-static void wr_mr0(INT32 val) { adsp2100.core.mr.mrx.mr0.s = val; }
-static void wr_mr1(INT32 val) { adsp2100.core.mr.mrx.mr1.s = val; adsp2100.core.mr.mrx.mr2.s = (INT16)val >> 15; }
-static void wr_mr2(INT32 val) { adsp2100.core.mr.mrx.mr2.s = (INT8)val; }
-static void wr_sr0(INT32 val) { adsp2100.core.sr.srx.sr0.s = val; }
-static void wr_sr1(INT32 val) { adsp2100.core.sr.srx.sr1.s = val; }
-static void wr_i0(INT32 val) { adsp2100.i[0] = val & 0x3fff; adsp2100.base[0] = val & adsp2100.lmask[0]; }
-static void wr_i1(INT32 val) { adsp2100.i[1] = val & 0x3fff; adsp2100.base[1] = val & adsp2100.lmask[1]; }
-static void wr_i2(INT32 val) { adsp2100.i[2] = val & 0x3fff; adsp2100.base[2] = val & adsp2100.lmask[2]; }
-static void wr_i3(INT32 val) { adsp2100.i[3] = val & 0x3fff; adsp2100.base[3] = val & adsp2100.lmask[3]; }
-static void wr_i4(INT32 val) { adsp2100.i[4] = val & 0x3fff; adsp2100.base[4] = val & adsp2100.lmask[4]; }
-static void wr_i5(INT32 val) { adsp2100.i[5] = val & 0x3fff; adsp2100.base[5] = val & adsp2100.lmask[5]; }
-static void wr_i6(INT32 val) { adsp2100.i[6] = val & 0x3fff; adsp2100.base[6] = val & adsp2100.lmask[6]; }
-static void wr_i7(INT32 val) { adsp2100.i[7] = val & 0x3fff; adsp2100.base[7] = val & adsp2100.lmask[7]; }
-static void wr_m0(INT32 val) { adsp2100.m[0] = (INT32)(val << 18) >> 18; }
-static void wr_m1(INT32 val) { adsp2100.m[1] = (INT32)(val << 18) >> 18; }
-static void wr_m2(INT32 val) { adsp2100.m[2] = (INT32)(val << 18) >> 18; }
-static void wr_m3(INT32 val) { adsp2100.m[3] = (INT32)(val << 18) >> 18; }
-static void wr_m4(INT32 val) { adsp2100.m[4] = (INT32)(val << 18) >> 18; }
-static void wr_m5(INT32 val) { adsp2100.m[5] = (INT32)(val << 18) >> 18; }
-static void wr_m6(INT32 val) { adsp2100.m[6] = (INT32)(val << 18) >> 18; }
-static void wr_m7(INT32 val) { adsp2100.m[7] = (INT32)(val << 18) >> 18; }
-static void wr_l0(INT32 val) { adsp2100.l[0] = val & 0x3fff; adsp2100.lmask[0] = mask_table[val & 0x3fff]; adsp2100.base[0] = adsp2100.i[0] & adsp2100.lmask[0]; }
-static void wr_l1(INT32 val) { adsp2100.l[1] = val & 0x3fff; adsp2100.lmask[1] = mask_table[val & 0x3fff]; adsp2100.base[1] = adsp2100.i[1] & adsp2100.lmask[1]; }
-static void wr_l2(INT32 val) { adsp2100.l[2] = val & 0x3fff; adsp2100.lmask[2] = mask_table[val & 0x3fff]; adsp2100.base[2] = adsp2100.i[2] & adsp2100.lmask[2]; }
-static void wr_l3(INT32 val) { adsp2100.l[3] = val & 0x3fff; adsp2100.lmask[3] = mask_table[val & 0x3fff]; adsp2100.base[3] = adsp2100.i[3] & adsp2100.lmask[3]; }
-static void wr_l4(INT32 val) { adsp2100.l[4] = val & 0x3fff; adsp2100.lmask[4] = mask_table[val & 0x3fff]; adsp2100.base[4] = adsp2100.i[4] & adsp2100.lmask[4]; }
-static void wr_l5(INT32 val) { adsp2100.l[5] = val & 0x3fff; adsp2100.lmask[5] = mask_table[val & 0x3fff]; adsp2100.base[5] = adsp2100.i[5] & adsp2100.lmask[5]; }
-static void wr_l6(INT32 val) { adsp2100.l[6] = val & 0x3fff; adsp2100.lmask[6] = mask_table[val & 0x3fff]; adsp2100.base[6] = adsp2100.i[6] & adsp2100.lmask[6]; }
-static void wr_l7(INT32 val) { adsp2100.l[7] = val & 0x3fff; adsp2100.lmask[7] = mask_table[val & 0x3fff]; adsp2100.base[7] = adsp2100.i[7] & adsp2100.lmask[7]; }
-static void wr_astat(INT32 val) { adsp2100.astat = val & 0x00ff; }
-static void wr_mstat(INT32 val) { set_mstat(val & mstat_mask); }
-static void wr_sstat(INT32 val) { adsp2100.sstat = val & 0x00ff; }
-static void wr_imask(INT32 val) { adsp2100.imask = val & imask_mask; check_irqs(); }
-static void wr_icntl(INT32 val) { adsp2100.icntl = val & 0x001f; check_irqs(); }
-static void wr_cntr(INT32 val) { cntr_stack_push(); adsp2100.cntr = val & 0x3fff; }
-static void wr_sb(INT32 val) { adsp2100.core.sb.s = (INT32)(val << 27) >> 27; }
-static void wr_px(INT32 val) { adsp2100.px = val; }
-static void wr_ifc(INT32 val)
+static void wr_inval(adsp2100_state *adsp, INT32 val) { logerror( "ADSP %04x: Writing to an invalid register!\n", adsp->ppc ); }
+static void wr_ax0(adsp2100_state *adsp, INT32 val) { adsp->core.ax0.s = val; }
+static void wr_ax1(adsp2100_state *adsp, INT32 val) { adsp->core.ax1.s = val; }
+static void wr_mx0(adsp2100_state *adsp, INT32 val) { adsp->core.mx0.s = val; }
+static void wr_mx1(adsp2100_state *adsp, INT32 val) { adsp->core.mx1.s = val; }
+static void wr_ay0(adsp2100_state *adsp, INT32 val) { adsp->core.ay0.s = val; }
+static void wr_ay1(adsp2100_state *adsp, INT32 val) { adsp->core.ay1.s = val; }
+static void wr_my0(adsp2100_state *adsp, INT32 val) { adsp->core.my0.s = val; }
+static void wr_my1(adsp2100_state *adsp, INT32 val) { adsp->core.my1.s = val; }
+static void wr_si(adsp2100_state *adsp, INT32 val) { adsp->core.si.s = val; }
+static void wr_se(adsp2100_state *adsp, INT32 val) { adsp->core.se.s = (INT8)val; }
+static void wr_ar(adsp2100_state *adsp, INT32 val) { adsp->core.ar.s = val; }
+static void wr_mr0(adsp2100_state *adsp, INT32 val) { adsp->core.mr.mrx.mr0.s = val; }
+static void wr_mr1(adsp2100_state *adsp, INT32 val) { adsp->core.mr.mrx.mr1.s = val; adsp->core.mr.mrx.mr2.s = (INT16)val >> 15; }
+static void wr_mr2(adsp2100_state *adsp, INT32 val) { adsp->core.mr.mrx.mr2.s = (INT8)val; }
+static void wr_sr0(adsp2100_state *adsp, INT32 val) { adsp->core.sr.srx.sr0.s = val; }
+static void wr_sr1(adsp2100_state *adsp, INT32 val) { adsp->core.sr.srx.sr1.s = val; }
+static void wr_i0(adsp2100_state *adsp, INT32 val) { adsp->i[0] = val & 0x3fff; adsp->base[0] = val & adsp->lmask[0]; }
+static void wr_i1(adsp2100_state *adsp, INT32 val) { adsp->i[1] = val & 0x3fff; adsp->base[1] = val & adsp->lmask[1]; }
+static void wr_i2(adsp2100_state *adsp, INT32 val) { adsp->i[2] = val & 0x3fff; adsp->base[2] = val & adsp->lmask[2]; }
+static void wr_i3(adsp2100_state *adsp, INT32 val) { adsp->i[3] = val & 0x3fff; adsp->base[3] = val & adsp->lmask[3]; }
+static void wr_i4(adsp2100_state *adsp, INT32 val) { adsp->i[4] = val & 0x3fff; adsp->base[4] = val & adsp->lmask[4]; }
+static void wr_i5(adsp2100_state *adsp, INT32 val) { adsp->i[5] = val & 0x3fff; adsp->base[5] = val & adsp->lmask[5]; }
+static void wr_i6(adsp2100_state *adsp, INT32 val) { adsp->i[6] = val & 0x3fff; adsp->base[6] = val & adsp->lmask[6]; }
+static void wr_i7(adsp2100_state *adsp, INT32 val) { adsp->i[7] = val & 0x3fff; adsp->base[7] = val & adsp->lmask[7]; }
+static void wr_m0(adsp2100_state *adsp, INT32 val) { adsp->m[0] = (INT32)(val << 18) >> 18; }
+static void wr_m1(adsp2100_state *adsp, INT32 val) { adsp->m[1] = (INT32)(val << 18) >> 18; }
+static void wr_m2(adsp2100_state *adsp, INT32 val) { adsp->m[2] = (INT32)(val << 18) >> 18; }
+static void wr_m3(adsp2100_state *adsp, INT32 val) { adsp->m[3] = (INT32)(val << 18) >> 18; }
+static void wr_m4(adsp2100_state *adsp, INT32 val) { adsp->m[4] = (INT32)(val << 18) >> 18; }
+static void wr_m5(adsp2100_state *adsp, INT32 val) { adsp->m[5] = (INT32)(val << 18) >> 18; }
+static void wr_m6(adsp2100_state *adsp, INT32 val) { adsp->m[6] = (INT32)(val << 18) >> 18; }
+static void wr_m7(adsp2100_state *adsp, INT32 val) { adsp->m[7] = (INT32)(val << 18) >> 18; }
+static void wr_l0(adsp2100_state *adsp, INT32 val) { adsp->l[0] = val & 0x3fff; adsp->lmask[0] = mask_table[val & 0x3fff]; adsp->base[0] = adsp->i[0] & adsp->lmask[0]; }
+static void wr_l1(adsp2100_state *adsp, INT32 val) { adsp->l[1] = val & 0x3fff; adsp->lmask[1] = mask_table[val & 0x3fff]; adsp->base[1] = adsp->i[1] & adsp->lmask[1]; }
+static void wr_l2(adsp2100_state *adsp, INT32 val) { adsp->l[2] = val & 0x3fff; adsp->lmask[2] = mask_table[val & 0x3fff]; adsp->base[2] = adsp->i[2] & adsp->lmask[2]; }
+static void wr_l3(adsp2100_state *adsp, INT32 val) { adsp->l[3] = val & 0x3fff; adsp->lmask[3] = mask_table[val & 0x3fff]; adsp->base[3] = adsp->i[3] & adsp->lmask[3]; }
+static void wr_l4(adsp2100_state *adsp, INT32 val) { adsp->l[4] = val & 0x3fff; adsp->lmask[4] = mask_table[val & 0x3fff]; adsp->base[4] = adsp->i[4] & adsp->lmask[4]; }
+static void wr_l5(adsp2100_state *adsp, INT32 val) { adsp->l[5] = val & 0x3fff; adsp->lmask[5] = mask_table[val & 0x3fff]; adsp->base[5] = adsp->i[5] & adsp->lmask[5]; }
+static void wr_l6(adsp2100_state *adsp, INT32 val) { adsp->l[6] = val & 0x3fff; adsp->lmask[6] = mask_table[val & 0x3fff]; adsp->base[6] = adsp->i[6] & adsp->lmask[6]; }
+static void wr_l7(adsp2100_state *adsp, INT32 val) { adsp->l[7] = val & 0x3fff; adsp->lmask[7] = mask_table[val & 0x3fff]; adsp->base[7] = adsp->i[7] & adsp->lmask[7]; }
+static void wr_astat(adsp2100_state *adsp, INT32 val) { adsp->astat = val & 0x00ff; }
+static void wr_mstat(adsp2100_state *adsp, INT32 val) { set_mstat(adsp, val & adsp->mstat_mask); }
+static void wr_sstat(adsp2100_state *adsp, INT32 val) { adsp->sstat = val & 0x00ff; }
+static void wr_imask(adsp2100_state *adsp, INT32 val) { adsp->imask = val & adsp->imask_mask; check_irqs(adsp); }
+static void wr_icntl(adsp2100_state *adsp, INT32 val) { adsp->icntl = val & 0x001f; check_irqs(adsp); }
+static void wr_cntr(adsp2100_state *adsp, INT32 val) { cntr_stack_push(adsp); adsp->cntr = val & 0x3fff; }
+static void wr_sb(adsp2100_state *adsp, INT32 val) { adsp->core.sb.s = (INT32)(val << 27) >> 27; }
+static void wr_px(adsp2100_state *adsp, INT32 val) { adsp->px = val; }
+static void wr_ifc(adsp2100_state *adsp, INT32 val)
{
- adsp2100.ifc = val;
+ adsp->ifc = val;
#if (HAS_ADSP2181)
- if (chip_type >= CHIP_TYPE_ADSP2181)
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2181)
{
/* clear timer */
- if (val & 0x0002) adsp2100.irq_latch[ADSP2181_IRQ0] = 0;
- if (val & 0x0004) adsp2100.irq_latch[ADSP2181_IRQ1] = 0;
+ if (val & 0x0002) adsp->irq_latch[ADSP2181_IRQ0] = 0;
+ if (val & 0x0004) adsp->irq_latch[ADSP2181_IRQ1] = 0;
/* clear BDMA */
- if (val & 0x0010) adsp2100.irq_latch[ADSP2181_IRQE] = 0;
- if (val & 0x0020) adsp2100.irq_latch[ADSP2181_SPORT0_RX] = 0;
- if (val & 0x0040) adsp2100.irq_latch[ADSP2181_SPORT0_TX] = 0;
- if (val & 0x0080) adsp2100.irq_latch[ADSP2181_IRQ2] = 0;
+ if (val & 0x0010) adsp->irq_latch[ADSP2181_IRQE] = 0;
+ if (val & 0x0020) adsp->irq_latch[ADSP2181_SPORT0_RX] = 0;
+ if (val & 0x0040) adsp->irq_latch[ADSP2181_SPORT0_TX] = 0;
+ if (val & 0x0080) adsp->irq_latch[ADSP2181_IRQ2] = 0;
/* force timer */
- if (val & 0x0200) adsp2100.irq_latch[ADSP2181_IRQ0] = 1;
- if (val & 0x0400) adsp2100.irq_latch[ADSP2181_IRQ1] = 1;
+ if (val & 0x0200) adsp->irq_latch[ADSP2181_IRQ0] = 1;
+ if (val & 0x0400) adsp->irq_latch[ADSP2181_IRQ1] = 1;
/* force BDMA */
- if (val & 0x1000) adsp2100.irq_latch[ADSP2181_IRQE] = 1;
- if (val & 0x2000) adsp2100.irq_latch[ADSP2181_SPORT0_RX] = 1;
- if (val & 0x4000) adsp2100.irq_latch[ADSP2181_SPORT0_TX] = 1;
- if (val & 0x8000) adsp2100.irq_latch[ADSP2181_IRQ2] = 1;
+ if (val & 0x1000) adsp->irq_latch[ADSP2181_IRQE] = 1;
+ if (val & 0x2000) adsp->irq_latch[ADSP2181_SPORT0_RX] = 1;
+ if (val & 0x4000) adsp->irq_latch[ADSP2181_SPORT0_TX] = 1;
+ if (val & 0x8000) adsp->irq_latch[ADSP2181_IRQ2] = 1;
}
else
#endif
{
/* clear timer */
- if (val & 0x002) adsp2100.irq_latch[ADSP2101_IRQ0] = 0;
- if (val & 0x004) adsp2100.irq_latch[ADSP2101_IRQ1] = 0;
- if (val & 0x008) adsp2100.irq_latch[ADSP2101_SPORT0_RX] = 0;
- if (val & 0x010) adsp2100.irq_latch[ADSP2101_SPORT0_TX] = 0;
- if (val & 0x020) adsp2100.irq_latch[ADSP2101_IRQ2] = 0;
+ if (val & 0x002) adsp->irq_latch[ADSP2101_IRQ0] = 0;
+ if (val & 0x004) adsp->irq_latch[ADSP2101_IRQ1] = 0;
+ if (val & 0x008) adsp->irq_latch[ADSP2101_SPORT0_RX] = 0;
+ if (val & 0x010) adsp->irq_latch[ADSP2101_SPORT0_TX] = 0;
+ if (val & 0x020) adsp->irq_latch[ADSP2101_IRQ2] = 0;
/* set timer */
- if (val & 0x080) adsp2100.irq_latch[ADSP2101_IRQ0] = 1;
- if (val & 0x100) adsp2100.irq_latch[ADSP2101_IRQ1] = 1;
- if (val & 0x200) adsp2100.irq_latch[ADSP2101_SPORT0_RX] = 1;
- if (val & 0x400) adsp2100.irq_latch[ADSP2101_SPORT0_TX] = 1;
- if (val & 0x800) adsp2100.irq_latch[ADSP2101_IRQ2] = 1;
+ if (val & 0x080) adsp->irq_latch[ADSP2101_IRQ0] = 1;
+ if (val & 0x100) adsp->irq_latch[ADSP2101_IRQ1] = 1;
+ if (val & 0x200) adsp->irq_latch[ADSP2101_SPORT0_RX] = 1;
+ if (val & 0x400) adsp->irq_latch[ADSP2101_SPORT0_TX] = 1;
+ if (val & 0x800) adsp->irq_latch[ADSP2101_IRQ2] = 1;
}
- check_irqs();
+ check_irqs(adsp);
}
-static void wr_tx0(INT32 val) { if (adsp2100.sport_tx_callback) (*adsp2100.sport_tx_callback)(0, val); }
-static void wr_tx1(INT32 val) { if (adsp2100.sport_tx_callback) (*adsp2100.sport_tx_callback)(1, val); }
-static void wr_owrctr(INT32 val) { adsp2100.cntr = val & 0x3fff; }
-static void wr_topstack(INT32 val) { pc_stack_push_val(val & 0x3fff); }
+static void wr_tx0(adsp2100_state *adsp, INT32 val) { if (adsp->sport_tx_callback) (*adsp->sport_tx_callback)(0, val); }
+static void wr_tx1(adsp2100_state *adsp, INT32 val) { if (adsp->sport_tx_callback) (*adsp->sport_tx_callback)(1, val); }
+static void wr_owrctr(adsp2100_state *adsp, INT32 val) { adsp->cntr = val & 0x3fff; }
+static void wr_topstack(adsp2100_state *adsp, INT32 val) { pc_stack_push_val(adsp, val & 0x3fff); }
-#define WRITE_REG(grp,reg,val) ((*wr_reg[grp][reg])(val))
+#define WRITE_REG(adsp,grp,reg,val) ((*wr_reg[grp][reg])(adsp,val))
-static void (*const wr_reg[4][16])(INT32) =
+static void (*const wr_reg[4][16])(adsp2100_state*, INT32) =
{
{
wr_ax0, wr_ax1, wr_mx0, wr_mx1, wr_ay0, wr_ay1, wr_my0, wr_my1,
@@ -446,62 +446,62 @@ static void (*const wr_reg[4][16])(INT32) =
register reading
===========================================================================*/
-static INT32 rd_inval(void) { logerror( "ADSP %04x: Writing to an invalid register!\n", adsp2100.ppc ); return 0; }
-static INT32 rd_ax0(void) { return adsp2100.core.ax0.s; }
-static INT32 rd_ax1(void) { return adsp2100.core.ax1.s; }
-static INT32 rd_mx0(void) { return adsp2100.core.mx0.s; }
-static INT32 rd_mx1(void) { return adsp2100.core.mx1.s; }
-static INT32 rd_ay0(void) { return adsp2100.core.ay0.s; }
-static INT32 rd_ay1(void) { return adsp2100.core.ay1.s; }
-static INT32 rd_my0(void) { return adsp2100.core.my0.s; }
-static INT32 rd_my1(void) { return adsp2100.core.my1.s; }
-static INT32 rd_si(void) { return adsp2100.core.si.s; }
-static INT32 rd_se(void) { return adsp2100.core.se.s; }
-static INT32 rd_ar(void) { return adsp2100.core.ar.s; }
-static INT32 rd_mr0(void) { return adsp2100.core.mr.mrx.mr0.s; }
-static INT32 rd_mr1(void) { return adsp2100.core.mr.mrx.mr1.s; }
-static INT32 rd_mr2(void) { return adsp2100.core.mr.mrx.mr2.s; }
-static INT32 rd_sr0(void) { return adsp2100.core.sr.srx.sr0.s; }
-static INT32 rd_sr1(void) { return adsp2100.core.sr.srx.sr1.s; }
-static INT32 rd_i0(void) { return adsp2100.i[0]; }
-static INT32 rd_i1(void) { return adsp2100.i[1]; }
-static INT32 rd_i2(void) { return adsp2100.i[2]; }
-static INT32 rd_i3(void) { return adsp2100.i[3]; }
-static INT32 rd_i4(void) { return adsp2100.i[4]; }
-static INT32 rd_i5(void) { return adsp2100.i[5]; }
-static INT32 rd_i6(void) { return adsp2100.i[6]; }
-static INT32 rd_i7(void) { return adsp2100.i[7]; }
-static INT32 rd_m0(void) { return adsp2100.m[0]; }
-static INT32 rd_m1(void) { return adsp2100.m[1]; }
-static INT32 rd_m2(void) { return adsp2100.m[2]; }
-static INT32 rd_m3(void) { return adsp2100.m[3]; }
-static INT32 rd_m4(void) { return adsp2100.m[4]; }
-static INT32 rd_m5(void) { return adsp2100.m[5]; }
-static INT32 rd_m6(void) { return adsp2100.m[6]; }
-static INT32 rd_m7(void) { return adsp2100.m[7]; }
-static INT32 rd_l0(void) { return adsp2100.l[0]; }
-static INT32 rd_l1(void) { return adsp2100.l[1]; }
-static INT32 rd_l2(void) { return adsp2100.l[2]; }
-static INT32 rd_l3(void) { return adsp2100.l[3]; }
-static INT32 rd_l4(void) { return adsp2100.l[4]; }
-static INT32 rd_l5(void) { return adsp2100.l[5]; }
-static INT32 rd_l6(void) { return adsp2100.l[6]; }
-static INT32 rd_l7(void) { return adsp2100.l[7]; }
-static INT32 rd_astat(void) { return adsp2100.astat; }
-static INT32 rd_mstat(void) { return adsp2100.mstat; }
-static INT32 rd_sstat(void) { return adsp2100.sstat; }
-static INT32 rd_imask(void) { return adsp2100.imask; }
-static INT32 rd_icntl(void) { return adsp2100.icntl; }
-static INT32 rd_cntr(void) { return adsp2100.cntr; }
-static INT32 rd_sb(void) { return adsp2100.core.sb.s; }
-static INT32 rd_px(void) { return adsp2100.px; }
-static INT32 rd_rx0(void) { if (adsp2100.sport_rx_callback) return (*adsp2100.sport_rx_callback)(0); else return 0; }
-static INT32 rd_rx1(void) { if (adsp2100.sport_rx_callback) return (*adsp2100.sport_rx_callback)(1); else return 0; }
-static INT32 rd_stacktop(void) { return pc_stack_pop_val(); }
-
-#define READ_REG(grp,reg) ((*rd_reg[grp][reg])())
-
-static INT32 (*const rd_reg[4][16])(void) =
+static INT32 rd_inval(adsp2100_state *adsp) { logerror( "ADSP %04x: Writing to an invalid register!\n", adsp->ppc ); return 0; }
+static INT32 rd_ax0(adsp2100_state *adsp) { return adsp->core.ax0.s; }
+static INT32 rd_ax1(adsp2100_state *adsp) { return adsp->core.ax1.s; }
+static INT32 rd_mx0(adsp2100_state *adsp) { return adsp->core.mx0.s; }
+static INT32 rd_mx1(adsp2100_state *adsp) { return adsp->core.mx1.s; }
+static INT32 rd_ay0(adsp2100_state *adsp) { return adsp->core.ay0.s; }
+static INT32 rd_ay1(adsp2100_state *adsp) { return adsp->core.ay1.s; }
+static INT32 rd_my0(adsp2100_state *adsp) { return adsp->core.my0.s; }
+static INT32 rd_my1(adsp2100_state *adsp) { return adsp->core.my1.s; }
+static INT32 rd_si(adsp2100_state *adsp) { return adsp->core.si.s; }
+static INT32 rd_se(adsp2100_state *adsp) { return adsp->core.se.s; }
+static INT32 rd_ar(adsp2100_state *adsp) { return adsp->core.ar.s; }
+static INT32 rd_mr0(adsp2100_state *adsp) { return adsp->core.mr.mrx.mr0.s; }
+static INT32 rd_mr1(adsp2100_state *adsp) { return adsp->core.mr.mrx.mr1.s; }
+static INT32 rd_mr2(adsp2100_state *adsp) { return adsp->core.mr.mrx.mr2.s; }
+static INT32 rd_sr0(adsp2100_state *adsp) { return adsp->core.sr.srx.sr0.s; }
+static INT32 rd_sr1(adsp2100_state *adsp) { return adsp->core.sr.srx.sr1.s; }
+static INT32 rd_i0(adsp2100_state *adsp) { return adsp->i[0]; }
+static INT32 rd_i1(adsp2100_state *adsp) { return adsp->i[1]; }
+static INT32 rd_i2(adsp2100_state *adsp) { return adsp->i[2]; }
+static INT32 rd_i3(adsp2100_state *adsp) { return adsp->i[3]; }
+static INT32 rd_i4(adsp2100_state *adsp) { return adsp->i[4]; }
+static INT32 rd_i5(adsp2100_state *adsp) { return adsp->i[5]; }
+static INT32 rd_i6(adsp2100_state *adsp) { return adsp->i[6]; }
+static INT32 rd_i7(adsp2100_state *adsp) { return adsp->i[7]; }
+static INT32 rd_m0(adsp2100_state *adsp) { return adsp->m[0]; }
+static INT32 rd_m1(adsp2100_state *adsp) { return adsp->m[1]; }
+static INT32 rd_m2(adsp2100_state *adsp) { return adsp->m[2]; }
+static INT32 rd_m3(adsp2100_state *adsp) { return adsp->m[3]; }
+static INT32 rd_m4(adsp2100_state *adsp) { return adsp->m[4]; }
+static INT32 rd_m5(adsp2100_state *adsp) { return adsp->m[5]; }
+static INT32 rd_m6(adsp2100_state *adsp) { return adsp->m[6]; }
+static INT32 rd_m7(adsp2100_state *adsp) { return adsp->m[7]; }
+static INT32 rd_l0(adsp2100_state *adsp) { return adsp->l[0]; }
+static INT32 rd_l1(adsp2100_state *adsp) { return adsp->l[1]; }
+static INT32 rd_l2(adsp2100_state *adsp) { return adsp->l[2]; }
+static INT32 rd_l3(adsp2100_state *adsp) { return adsp->l[3]; }
+static INT32 rd_l4(adsp2100_state *adsp) { return adsp->l[4]; }
+static INT32 rd_l5(adsp2100_state *adsp) { return adsp->l[5]; }
+static INT32 rd_l6(adsp2100_state *adsp) { return adsp->l[6]; }
+static INT32 rd_l7(adsp2100_state *adsp) { return adsp->l[7]; }
+static INT32 rd_astat(adsp2100_state *adsp) { return adsp->astat; }
+static INT32 rd_mstat(adsp2100_state *adsp) { return adsp->mstat; }
+static INT32 rd_sstat(adsp2100_state *adsp) { return adsp->sstat; }
+static INT32 rd_imask(adsp2100_state *adsp) { return adsp->imask; }
+static INT32 rd_icntl(adsp2100_state *adsp) { return adsp->icntl; }
+static INT32 rd_cntr(adsp2100_state *adsp) { return adsp->cntr; }
+static INT32 rd_sb(adsp2100_state *adsp) { return adsp->core.sb.s; }
+static INT32 rd_px(adsp2100_state *adsp) { return adsp->px; }
+static INT32 rd_rx0(adsp2100_state *adsp) { if (adsp->sport_rx_callback) return (*adsp->sport_rx_callback)(0); else return 0; }
+static INT32 rd_rx1(adsp2100_state *adsp) { if (adsp->sport_rx_callback) return (*adsp->sport_rx_callback)(1); else return 0; }
+static INT32 rd_stacktop(adsp2100_state *adsp) { return pc_stack_pop_val(adsp); }
+
+#define READ_REG(adsp,grp,reg) ((*rd_reg[grp][reg])(adsp))
+
+static INT32 (*const rd_reg[4][16])(adsp2100_state *adsp) =
{
{
rd_ax0, rd_ax1, rd_mx0, rd_mx1, rd_ay0, rd_ay1, rd_my0, rd_my1,
@@ -527,16 +527,16 @@ static INT32 (*const rd_reg[4][16])(void) =
Modulus addressing logic
===========================================================================*/
-INLINE void modify_address(UINT32 ireg, UINT32 mreg)
+INLINE void modify_address(adsp2100_state *adsp, UINT32 ireg, UINT32 mreg)
{
- UINT32 base = adsp2100.base[ireg];
- UINT32 i = adsp2100.i[ireg];
- UINT32 l = adsp2100.l[ireg];
+ UINT32 base = adsp->base[ireg];
+ UINT32 i = adsp->i[ireg];
+ UINT32 l = adsp->l[ireg];
- i += adsp2100.m[mreg];
+ i += adsp->m[mreg];
if (i < base) i += l;
else if (i >= base + l) i -= l;
- adsp2100.i[ireg] = i;
+ adsp->i[ireg] = i;
}
@@ -545,15 +545,15 @@ INLINE void modify_address(UINT32 ireg, UINT32 mreg)
Data memory accessors
===========================================================================*/
-INLINE void data_write_dag1(UINT32 op, INT32 val)
+INLINE void data_write_dag1(adsp2100_state *adsp, UINT32 op, INT32 val)
{
UINT32 ireg = (op >> 2) & 3;
UINT32 mreg = op & 3;
- UINT32 base = adsp2100.base[ireg];
- UINT32 i = adsp2100.i[ireg];
- UINT32 l = adsp2100.l[ireg];
+ UINT32 base = adsp->base[ireg];
+ UINT32 i = adsp->i[ireg];
+ UINT32 l = adsp->l[ireg];
- if ( adsp2100.mstat & MSTAT_REVERSE )
+ if ( adsp->mstat & MSTAT_REVERSE )
{
UINT32 ir = reverse_table[ i & 0x3fff ];
WWORD_DATA(ir, val);
@@ -561,23 +561,23 @@ INLINE void data_write_dag1(UINT32 op, INT32 val)
else
WWORD_DATA(i, val);
- i += adsp2100.m[mreg];
+ i += adsp->m[mreg];
if (i < base) i += l;
else if (i >= base + l) i -= l;
- adsp2100.i[ireg] = i;
+ adsp->i[ireg] = i;
}
-INLINE UINT32 data_read_dag1(UINT32 op)
+INLINE UINT32 data_read_dag1(adsp2100_state *adsp, UINT32 op)
{
UINT32 ireg = (op >> 2) & 3;
UINT32 mreg = op & 3;
- UINT32 base = adsp2100.base[ireg];
- UINT32 i = adsp2100.i[ireg];
- UINT32 l = adsp2100.l[ireg];
+ UINT32 base = adsp->base[ireg];
+ UINT32 i = adsp->i[ireg];
+ UINT32 l = adsp->l[ireg];
UINT32 res;
- if (adsp2100.mstat & MSTAT_REVERSE)
+ if (adsp->mstat & MSTAT_REVERSE)
{
UINT32 ir = reverse_table[i & 0x3fff];
res = RWORD_DATA(ir);
@@ -585,45 +585,45 @@ INLINE UINT32 data_read_dag1(UINT32 op)
else
res = RWORD_DATA(i);
- i += adsp2100.m[mreg];
+ i += adsp->m[mreg];
if (i < base) i += l;
else if (i >= base + l) i -= l;
- adsp2100.i[ireg] = i;
+ adsp->i[ireg] = i;
return res;
}
-INLINE void data_write_dag2(UINT32 op, INT32 val)
+INLINE void data_write_dag2(adsp2100_state *adsp, UINT32 op, INT32 val)
{
UINT32 ireg = 4 + ((op >> 2) & 3);
UINT32 mreg = 4 + (op & 3);
- UINT32 base = adsp2100.base[ireg];
- UINT32 i = adsp2100.i[ireg];
- UINT32 l = adsp2100.l[ireg];
+ UINT32 base = adsp->base[ireg];
+ UINT32 i = adsp->i[ireg];
+ UINT32 l = adsp->l[ireg];
WWORD_DATA(i, val);
- i += adsp2100.m[mreg];
+ i += adsp->m[mreg];
if (i < base) i += l;
else if (i >= base + l) i -= l;
- adsp2100.i[ireg] = i;
+ adsp->i[ireg] = i;
}
-INLINE UINT32 data_read_dag2(UINT32 op)
+INLINE UINT32 data_read_dag2(adsp2100_state *adsp, UINT32 op)
{
UINT32 ireg = 4 + ((op >> 2) & 3);
UINT32 mreg = 4 + (op & 3);
- UINT32 base = adsp2100.base[ireg];
- UINT32 i = adsp2100.i[ireg];
- UINT32 l = adsp2100.l[ireg];
+ UINT32 base = adsp->base[ireg];
+ UINT32 i = adsp->i[ireg];
+ UINT32 l = adsp->l[ireg];
UINT32 res = RWORD_DATA(i);
- i += adsp2100.m[mreg];
+ i += adsp->m[mreg];
if (i < base) i += l;
else if (i >= base + l) i -= l;
- adsp2100.i[ireg] = i;
+ adsp->i[ireg] = i;
return res;
}
@@ -632,40 +632,40 @@ INLINE UINT32 data_read_dag2(UINT32 op)
Program memory accessors
===========================================================================*/
-INLINE void pgm_write_dag2(UINT32 op, INT32 val)
+INLINE void pgm_write_dag2(adsp2100_state *adsp, UINT32 op, INT32 val)
{
UINT32 ireg = 4 + ((op >> 2) & 3);
UINT32 mreg = 4 + (op & 3);
- UINT32 base = adsp2100.base[ireg];
- UINT32 i = adsp2100.i[ireg];
- UINT32 l = adsp2100.l[ireg];
+ UINT32 base = adsp->base[ireg];
+ UINT32 i = adsp->i[ireg];
+ UINT32 l = adsp->l[ireg];
- WWORD_PGM(i, (val << 8) | adsp2100.px);
+ WWORD_PGM(i, (val << 8) | adsp->px);
- i += adsp2100.m[mreg];
+ i += adsp->m[mreg];
if (i < base) i += l;
else if (i >= base + l) i -= l;
- adsp2100.i[ireg] = i;
+ adsp->i[ireg] = i;
}
-INLINE UINT32 pgm_read_dag2(UINT32 op)
+INLINE UINT32 pgm_read_dag2(adsp2100_state *adsp, UINT32 op)
{
UINT32 ireg = 4 + ((op >> 2) & 3);
UINT32 mreg = 4 + (op & 3);
- UINT32 base = adsp2100.base[ireg];
- UINT32 i = adsp2100.i[ireg];
- UINT32 l = adsp2100.l[ireg];
+ UINT32 base = adsp->base[ireg];
+ UINT32 i = adsp->i[ireg];
+ UINT32 l = adsp->l[ireg];
UINT32 res;
res = RWORD_PGM(i);
- adsp2100.px = res;
+ adsp->px = res;
res >>= 8;
- i += adsp2100.m[mreg];
+ i += adsp->m[mreg];
if (i < base) i += l;
else if (i >= base + l) i -= l;
- adsp2100.i[ireg] = i;
+ adsp->i[ireg] = i;
return res;
}
@@ -673,85 +673,19 @@ INLINE UINT32 pgm_read_dag2(UINT32 op)
/*===========================================================================
- ALU register reading
-===========================================================================*/
-
-#define ALU_GETXREG_UNSIGNED(x) (*(UINT16 *)alu_xregs[x])
-#define ALU_GETXREG_SIGNED(x) (*( INT16 *)alu_xregs[x])
-#define ALU_GETYREG_UNSIGNED(y) (*(UINT16 *)alu_yregs[y])
-#define ALU_GETYREG_SIGNED(y) (*( INT16 *)alu_yregs[y])
-
-static const void *const alu_xregs[8] =
-{
- &adsp2100.core.ax0,
- &adsp2100.core.ax1,
- &adsp2100.core.ar,
- &adsp2100.core.mr.mrx.mr0,
- &adsp2100.core.mr.mrx.mr1,
- &adsp2100.core.mr.mrx.mr2,
- &adsp2100.core.sr.srx.sr0,
- &adsp2100.core.sr.srx.sr1
-};
-
-static const void *const alu_yregs[4] =
-{
- &adsp2100.core.ay0,
- &adsp2100.core.ay1,
- &adsp2100.core.af,
- &adsp2100.core.zero
-};
-
-
-
-/*===========================================================================
- MAC register reading
+ register reading
===========================================================================*/
-#define MAC_GETXREG_UNSIGNED(x) (*(UINT16 *)mac_xregs[x])
-#define MAC_GETXREG_SIGNED(x) (*( INT16 *)mac_xregs[x])
-#define MAC_GETYREG_UNSIGNED(y) (*(UINT16 *)mac_yregs[y])
-#define MAC_GETYREG_SIGNED(y) (*( INT16 *)mac_yregs[y])
-
-static const void *const mac_xregs[8] =
-{
- &adsp2100.core.mx0,
- &adsp2100.core.mx1,
- &adsp2100.core.ar,
- &adsp2100.core.mr.mrx.mr0,
- &adsp2100.core.mr.mrx.mr1,
- &adsp2100.core.mr.mrx.mr2,
- &adsp2100.core.sr.srx.sr0,
- &adsp2100.core.sr.srx.sr1
-};
-
-static const void *const mac_yregs[4] =
-{
- &adsp2100.core.my0,
- &adsp2100.core.my1,
- &adsp2100.core.mf,
- &adsp2100.core.zero
-};
-
+#define ALU_GETXREG_UNSIGNED(a,x) (*(UINT16 *)(a)->alu_xregs[x])
+#define ALU_GETYREG_UNSIGNED(a,y) (*(UINT16 *)(a)->alu_yregs[y])
+#define MAC_GETXREG_UNSIGNED(a,x) (*(UINT16 *)(a)->mac_xregs[x])
+#define MAC_GETXREG_SIGNED(a,x) (*( INT16 *)(a)->mac_xregs[x])
+#define MAC_GETYREG_UNSIGNED(a,y) (*(UINT16 *)(a)->mac_yregs[y])
+#define MAC_GETYREG_SIGNED(a,y) (*( INT16 *)(a)->mac_yregs[y])
-/*===========================================================================
- SHIFT register reading
-===========================================================================*/
-
-#define SHIFT_GETXREG_UNSIGNED(x) (*(UINT16 *)shift_xregs[x])
-#define SHIFT_GETXREG_SIGNED(x) (*( INT16 *)shift_xregs[x])
-
-static const void *const shift_xregs[8] =
-{
- &adsp2100.core.si,
- &adsp2100.core.si,
- &adsp2100.core.ar,
- &adsp2100.core.mr.mrx.mr0,
- &adsp2100.core.mr.mrx.mr1,
- &adsp2100.core.mr.mrx.mr2,
- &adsp2100.core.sr.srx.sr0,
- &adsp2100.core.sr.srx.sr1
-};
+#define SHIFT_GETXREG_UNSIGNED(a,x) (*(UINT16 *)(a)->shift_xregs[x])
+#define SHIFT_GETXREG_SIGNED(a,x) (*( INT16 *)(a)->shift_xregs[x])
@@ -759,7 +693,7 @@ static const void *const shift_xregs[8] =
ALU operations (result in AR)
===========================================================================*/
-static void alu_op_ar(int op)
+static void alu_op_ar(adsp2100_state *adsp, int op)
{
INT32 xop = (op >> 8) & 7;
INT32 yop = (op >> 11) & 3;
@@ -769,12 +703,12 @@ static void alu_op_ar(int op)
{
case 0x00<<13:
/* Y Clear when y = 0 */
- res = ALU_GETYREG_UNSIGNED(yop);
+ res = ALU_GETYREG_UNSIGNED(adsp, yop);
CALC_NZ(res);
break;
case 0x01<<13:
/* Y + 1 PASS 1 when y = 0 */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop + 1;
CALC_NZ(res);
if (yop == 0x7fff) SET_V;
@@ -782,27 +716,27 @@ static void alu_op_ar(int op)
break;
case 0x02<<13:
/* X + Y + C */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
yop += GET_C >> 3;
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
case 0x03<<13:
/* X + Y X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
case 0x04<<13:
/* NOT Y */
- res = ALU_GETYREG_UNSIGNED(yop) ^ 0xffff;
+ res = ALU_GETYREG_UNSIGNED(adsp, yop) ^ 0xffff;
CALC_NZ(res);
break;
case 0x05<<13:
/* -Y */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = -yop;
CALC_NZ(res);
if (yop == 0x8000) SET_V;
@@ -810,21 +744,21 @@ static void alu_op_ar(int op)
break;
case 0x06<<13:
/* X - Y + C - 1 X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop - yop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(xop, yop, res);
break;
case 0x07<<13:
/* X - Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop - yop;
CALC_NZVC_SUB(xop, yop, res);
break;
case 0x08<<13:
/* Y - 1 PASS -1 when y = 0 */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - 1;
CALC_NZ(res);
if (yop == 0x8000) SET_V;
@@ -832,47 +766,47 @@ static void alu_op_ar(int op)
break;
case 0x09<<13:
/* Y - X -X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - xop;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0a<<13:
/* Y - X + C - 1 -X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - xop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0b<<13:
/* NOT X */
- res = ALU_GETXREG_UNSIGNED(xop) ^ 0xffff;
+ res = ALU_GETXREG_UNSIGNED(adsp, xop) ^ 0xffff;
CALC_NZ(res);
break;
case 0x0c<<13:
/* X AND Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop & yop;
CALC_NZ(res);
break;
case 0x0d<<13:
/* X OR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop | yop;
CALC_NZ(res);
break;
case 0x0e<<13:
/* X XOR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop ^ yop;
CALC_NZ(res);
break;
case 0x0f<<13:
/* ABS X */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = (xop & 0x8000) ? -xop : xop;
if (xop == 0) SET_Z;
if (xop == 0x8000) SET_N, SET_V;
@@ -885,10 +819,10 @@ static void alu_op_ar(int op)
}
/* saturate */
- if ((adsp2100.mstat & MSTAT_SATURATE) && GET_V) res = GET_C ? -32768 : 32767;
+ if ((adsp->mstat & MSTAT_SATURATE) && GET_V) res = GET_C ? -32768 : 32767;
/* set the final value */
- adsp2100.core.ar.u = res;
+ adsp->core.ar.u = res;
}
@@ -897,7 +831,7 @@ static void alu_op_ar(int op)
ALU operations (result in AR, constant yop)
===========================================================================*/
-static void alu_op_ar_const(int op)
+static void alu_op_ar_const(adsp2100_state *adsp, int op)
{
INT32 xop = (op >> 8) & 7;
INT32 yop = constants[((op >> 5) & 0x07) | ((op >> 8) & 0x18)];
@@ -919,14 +853,14 @@ static void alu_op_ar_const(int op)
break;
case 0x02<<13:
/* X + Y + C */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
yop += GET_C >> 3;
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
case 0x03<<13:
/* X + Y X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
@@ -944,13 +878,13 @@ static void alu_op_ar_const(int op)
break;
case 0x06<<13:
/* X - Y + C - 1 X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop - yop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(xop, yop, res);
break;
case 0x07<<13:
/* X - Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop - yop;
CALC_NZVC_SUB(xop, yop, res);
break;
@@ -963,42 +897,42 @@ static void alu_op_ar_const(int op)
break;
case 0x09<<13:
/* Y - X -X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = yop - xop;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0a<<13:
/* Y - X + C - 1 -X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = yop - xop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0b<<13:
/* NOT X */
- res = ALU_GETXREG_UNSIGNED(xop) ^ 0xffff;
+ res = ALU_GETXREG_UNSIGNED(adsp, xop) ^ 0xffff;
CALC_NZ(res);
break;
case 0x0c<<13:
/* X AND Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop & yop;
CALC_NZ(res);
break;
case 0x0d<<13:
/* X OR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop | yop;
CALC_NZ(res);
break;
case 0x0e<<13:
/* X XOR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop ^ yop;
CALC_NZ(res);
break;
case 0x0f<<13:
/* ABS X */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = (xop & 0x8000) ? -xop : xop;
if (xop == 0) SET_Z;
if (xop == 0x8000) SET_N, SET_V;
@@ -1011,10 +945,10 @@ static void alu_op_ar_const(int op)
}
/* saturate */
- if ((adsp2100.mstat & MSTAT_SATURATE) && GET_V) res = GET_C ? -32768 : 32767;
+ if ((adsp->mstat & MSTAT_SATURATE) && GET_V) res = GET_C ? -32768 : 32767;
/* set the final value */
- adsp2100.core.ar.u = res;
+ adsp->core.ar.u = res;
}
@@ -1023,7 +957,7 @@ static void alu_op_ar_const(int op)
ALU operations (result in AF)
===========================================================================*/
-static void alu_op_af(int op)
+static void alu_op_af(adsp2100_state *adsp, int op)
{
INT32 xop = (op >> 8) & 7;
INT32 yop = (op >> 11) & 3;
@@ -1033,12 +967,12 @@ static void alu_op_af(int op)
{
case 0x00<<13:
/* Y Clear when y = 0 */
- res = ALU_GETYREG_UNSIGNED(yop);
+ res = ALU_GETYREG_UNSIGNED(adsp, yop);
CALC_NZ(res);
break;
case 0x01<<13:
/* Y + 1 PASS 1 when y = 0 */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop + 1;
CALC_NZ(res);
if (yop == 0x7fff) SET_V;
@@ -1046,27 +980,27 @@ static void alu_op_af(int op)
break;
case 0x02<<13:
/* X + Y + C */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
yop += GET_C >> 3;
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
case 0x03<<13:
/* X + Y X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
case 0x04<<13:
/* NOT Y */
- res = ALU_GETYREG_UNSIGNED(yop) ^ 0xffff;
+ res = ALU_GETYREG_UNSIGNED(adsp, yop) ^ 0xffff;
CALC_NZ(res);
break;
case 0x05<<13:
/* -Y */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = -yop;
CALC_NZ(res);
if (yop == 0x8000) SET_V;
@@ -1074,21 +1008,21 @@ static void alu_op_af(int op)
break;
case 0x06<<13:
/* X - Y + C - 1 X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop - yop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(xop, yop, res);
break;
case 0x07<<13:
/* X - Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop - yop;
CALC_NZVC_SUB(xop, yop, res);
break;
case 0x08<<13:
/* Y - 1 PASS -1 when y = 0 */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - 1;
CALC_NZ(res);
if (yop == 0x8000) SET_V;
@@ -1096,47 +1030,47 @@ static void alu_op_af(int op)
break;
case 0x09<<13:
/* Y - X -X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - xop;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0a<<13:
/* Y - X + C - 1 -X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - xop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0b<<13:
/* NOT X */
- res = ALU_GETXREG_UNSIGNED(xop) ^ 0xffff;
+ res = ALU_GETXREG_UNSIGNED(adsp, xop) ^ 0xffff;
CALC_NZ(res);
break;
case 0x0c<<13:
/* X AND Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop & yop;
CALC_NZ(res);
break;
case 0x0d<<13:
/* X OR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop | yop;
CALC_NZ(res);
break;
case 0x0e<<13:
/* X XOR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop ^ yop;
CALC_NZ(res);
break;
case 0x0f<<13:
/* ABS X */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = (xop & 0x8000) ? -xop : xop;
if (xop == 0) SET_Z;
if (xop == 0x8000) SET_N, SET_V;
@@ -1149,7 +1083,7 @@ static void alu_op_af(int op)
}
/* set the final value */
- adsp2100.core.af.u = res;
+ adsp->core.af.u = res;
}
@@ -1158,7 +1092,7 @@ static void alu_op_af(int op)
ALU operations (result in AF, constant yop)
===========================================================================*/
-static void alu_op_af_const(int op)
+static void alu_op_af_const(adsp2100_state *adsp, int op)
{
INT32 xop = (op >> 8) & 7;
INT32 yop = constants[((op >> 5) & 0x07) | ((op >> 8) & 0x18)];
@@ -1180,14 +1114,14 @@ static void alu_op_af_const(int op)
break;
case 0x02<<13:
/* X + Y + C */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
yop += GET_C >> 3;
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
case 0x03<<13:
/* X + Y X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
@@ -1205,13 +1139,13 @@ static void alu_op_af_const(int op)
break;
case 0x06<<13:
/* X - Y + C - 1 X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop - yop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(xop, yop, res);
break;
case 0x07<<13:
/* X - Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop - yop;
CALC_NZVC_SUB(xop, yop, res);
break;
@@ -1224,42 +1158,42 @@ static void alu_op_af_const(int op)
break;
case 0x09<<13:
/* Y - X -X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = yop - xop;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0a<<13:
/* Y - X + C - 1 -X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = yop - xop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0b<<13:
/* NOT X */
- res = ALU_GETXREG_UNSIGNED(xop) ^ 0xffff;
+ res = ALU_GETXREG_UNSIGNED(adsp, xop) ^ 0xffff;
CALC_NZ(res);
break;
case 0x0c<<13:
/* X AND Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop & yop;
CALC_NZ(res);
break;
case 0x0d<<13:
/* X OR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop | yop;
CALC_NZ(res);
break;
case 0x0e<<13:
/* X XOR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = xop ^ yop;
CALC_NZ(res);
break;
case 0x0f<<13:
/* ABS X */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = (xop & 0x8000) ? -xop : xop;
if (xop == 0) SET_Z;
if (xop == 0x8000) SET_N, SET_V;
@@ -1272,7 +1206,7 @@ static void alu_op_af_const(int op)
}
/* set the final value */
- adsp2100.core.af.u = res;
+ adsp->core.af.u = res;
}
@@ -1281,7 +1215,7 @@ static void alu_op_af_const(int op)
ALU operations (no result)
===========================================================================*/
-static void alu_op_none(int op)
+static void alu_op_none(adsp2100_state *adsp, int op)
{
INT32 xop = (op >> 8) & 7;
INT32 yop = (op >> 11) & 3;
@@ -1291,12 +1225,12 @@ static void alu_op_none(int op)
{
case 0x00<<13:
/* Y Clear when y = 0 */
- res = ALU_GETYREG_UNSIGNED(yop);
+ res = ALU_GETYREG_UNSIGNED(adsp, yop);
CALC_NZ(res);
break;
case 0x01<<13:
/* Y + 1 PASS 1 when y = 0 */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop + 1;
CALC_NZ(res);
if (yop == 0x7fff) SET_V;
@@ -1304,27 +1238,27 @@ static void alu_op_none(int op)
break;
case 0x02<<13:
/* X + Y + C */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
yop += GET_C >> 3;
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
case 0x03<<13:
/* X + Y X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop + yop;
CALC_NZVC(xop, yop, res);
break;
case 0x04<<13:
/* NOT Y */
- res = ALU_GETYREG_UNSIGNED(yop) ^ 0xffff;
+ res = ALU_GETYREG_UNSIGNED(adsp, yop) ^ 0xffff;
CALC_NZ(res);
break;
case 0x05<<13:
/* -Y */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = -yop;
CALC_NZ(res);
if (yop == 0x8000) SET_V;
@@ -1332,21 +1266,21 @@ static void alu_op_none(int op)
break;
case 0x06<<13:
/* X - Y + C - 1 X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop - yop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(xop, yop, res);
break;
case 0x07<<13:
/* X - Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop - yop;
CALC_NZVC_SUB(xop, yop, res);
break;
case 0x08<<13:
/* Y - 1 PASS -1 when y = 0 */
- yop = ALU_GETYREG_UNSIGNED(yop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - 1;
CALC_NZ(res);
if (yop == 0x8000) SET_V;
@@ -1354,47 +1288,47 @@ static void alu_op_none(int op)
break;
case 0x09<<13:
/* Y - X -X when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - xop;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0a<<13:
/* Y - X + C - 1 -X + C - 1 when y = 0 */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = yop - xop + (GET_C >> 3) - 1;
CALC_NZVC_SUB(yop, xop, res);
break;
case 0x0b<<13:
/* NOT X */
- res = ALU_GETXREG_UNSIGNED(xop) ^ 0xffff;
+ res = ALU_GETXREG_UNSIGNED(adsp, xop) ^ 0xffff;
CALC_NZ(res);
break;
case 0x0c<<13:
/* X AND Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop & yop;
CALC_NZ(res);
break;
case 0x0d<<13:
/* X OR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop | yop;
CALC_NZ(res);
break;
case 0x0e<<13:
/* X XOR Y */
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
res = xop ^ yop;
CALC_NZ(res);
break;
case 0x0f<<13:
/* ABS X */
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
res = (xop & 0x8000) ? -xop : xop;
if (xop == 0) SET_Z;
if (xop == 0x8000) SET_N, SET_V;
@@ -1410,9 +1344,9 @@ static void alu_op_none(int op)
MAC operations (result in MR)
===========================================================================*/
-static void mac_op_mr(int op)
+static void mac_op_mr(adsp2100_state *adsp, int op)
{
- INT8 shift = ((adsp2100.mstat & MSTAT_INTEGER) >> 4) ^ 1;
+ INT8 shift = ((adsp->mstat & MSTAT_INTEGER) >> 4) ^ 1;
INT32 xop = (op >> 8) & 7;
INT32 yop = (op >> 11) & 3;
INT32 temp;
@@ -1425,8 +1359,8 @@ static void mac_op_mr(int op)
return;
case 0x01<<13:
/* X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
#if 0
@@ -1441,10 +1375,10 @@ static void mac_op_mr(int op)
break;
case 0x02<<13:
/* MR + X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
#if 0
if ((res & 0xffff) == 0x8000) res &= ~((UINT64)0x10000);
else res += (res & 0x8000) << 1;
@@ -1457,10 +1391,10 @@ static void mac_op_mr(int op)
break;
case 0x03<<13:
/* MR - X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
#if 0
if ((res & 0xffff) == 0x8000) res &= ~((UINT64)0x10000);
else res += (res & 0x8000) << 1;
@@ -1473,87 +1407,87 @@ static void mac_op_mr(int op)
break;
case 0x04<<13:
/* X * Y (SS) Clear when y = 0 */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
break;
case 0x05<<13:
/* X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
break;
case 0x06<<13:
/* X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
break;
case 0x07<<13:
/* X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
break;
case 0x08<<13:
/* MR + X * Y (SS) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x09<<13:
/* MR + X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0a<<13:
/* MR + X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0b<<13:
/* MR + X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0c<<13:
/* MR - X * Y (SS) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0d<<13:
/* MR - X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0e<<13:
/* MR - X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0f<<13:
/* MR - X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
default:
res = 0; /* just to keep the compiler happy */
@@ -1564,7 +1498,7 @@ static void mac_op_mr(int op)
temp = (res >> 31) & 0x1ff;
CLR_MV;
if (temp != 0x000 && temp != 0x1ff) SET_MV;
- adsp2100.core.mr.mr = res;
+ adsp->core.mr.mr = res;
}
@@ -1573,9 +1507,9 @@ static void mac_op_mr(int op)
MAC operations (result in MR, yop == xop)
===========================================================================*/
-static void mac_op_mr_xop(int op)
+static void mac_op_mr_xop(adsp2100_state *adsp, int op)
{
- INT8 shift = ((adsp2100.mstat & MSTAT_INTEGER) >> 4) ^ 1;
+ INT8 shift = ((adsp->mstat & MSTAT_INTEGER) >> 4) ^ 1;
INT32 xop = (op >> 8) & 7;
INT32 temp;
INT64 res;
@@ -1587,7 +1521,7 @@ static void mac_op_mr_xop(int op)
return;
case 0x01<<13:
/* X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
#if 0
@@ -1602,9 +1536,9 @@ static void mac_op_mr_xop(int op)
break;
case 0x02<<13:
/* MR + X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
#if 0
if ((res & 0xffff) == 0x8000) res &= ~((UINT64)0x10000);
else res += (res & 0x8000) << 1;
@@ -1617,9 +1551,9 @@ static void mac_op_mr_xop(int op)
break;
case 0x03<<13:
/* MR - X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
#if 0
if ((res & 0xffff) == 0x8000) res &= ~((UINT64)0x10000);
else res += (res & 0x8000) << 1;
@@ -1632,75 +1566,75 @@ static void mac_op_mr_xop(int op)
break;
case 0x04<<13:
/* X * Y (SS) Clear when y = 0 */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
break;
case 0x05<<13:
/* X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
break;
case 0x06<<13:
/* X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
break;
case 0x07<<13:
/* X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
break;
case 0x08<<13:
/* MR + X * Y (SS) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x09<<13:
/* MR + X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0a<<13:
/* MR + X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0b<<13:
/* MR + X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0c<<13:
/* MR - X * Y (SS) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0d<<13:
/* MR - X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0e<<13:
/* MR - X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0f<<13:
/* MR - X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
default:
res = 0; /* just to keep the compiler happy */
@@ -1711,7 +1645,7 @@ static void mac_op_mr_xop(int op)
temp = (res >> 31) & 0x1ff;
CLR_MV;
if (temp != 0x000 && temp != 0x1ff) SET_MV;
- adsp2100.core.mr.mr = res;
+ adsp->core.mr.mr = res;
}
@@ -1720,9 +1654,9 @@ static void mac_op_mr_xop(int op)
MAC operations (result in MF)
===========================================================================*/
-static void mac_op_mf(int op)
+static void mac_op_mf(adsp2100_state *adsp, int op)
{
- INT8 shift = ((adsp2100.mstat & MSTAT_INTEGER) >> 4) ^ 1;
+ INT8 shift = ((adsp->mstat & MSTAT_INTEGER) >> 4) ^ 1;
INT32 xop = (op >> 8) & 7;
INT32 yop = (op >> 11) & 3;
INT32 temp;
@@ -1735,8 +1669,8 @@ static void mac_op_mf(int op)
return;
case 0x01<<13:
/* X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
#if 0
@@ -1751,10 +1685,10 @@ static void mac_op_mf(int op)
break;
case 0x02<<13:
/* MR + X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
#if 0
if ((res & 0xffff) == 0x8000) res &= ~((UINT64)0x10000);
else res += (res & 0x8000) << 1;
@@ -1767,10 +1701,10 @@ static void mac_op_mf(int op)
break;
case 0x03<<13:
/* MR - X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
#if 0
if ((res & 0xffff) == 0x8000) res &= ~((UINT64)0x10000);
else res += (res & 0x8000) << 1;
@@ -1783,87 +1717,87 @@ static void mac_op_mf(int op)
break;
case 0x04<<13:
/* X * Y (SS) Clear when y = 0 */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
break;
case 0x05<<13:
/* X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
break;
case 0x06<<13:
/* X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
break;
case 0x07<<13:
/* X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
res = (INT64)temp;
break;
case 0x08<<13:
/* MR + X * Y (SS) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x09<<13:
/* MR + X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0a<<13:
/* MR + X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0b<<13:
/* MR + X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0c<<13:
/* MR - X * Y (SS) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0d<<13:
/* MR - X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0e<<13:
/* MR - X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_SIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_SIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0f<<13:
/* MR - X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
- yop = MAC_GETYREG_UNSIGNED(yop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
+ yop = MAC_GETYREG_UNSIGNED(adsp, yop);
temp = (xop * yop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
default:
res = 0; /* just to keep the compiler happy */
@@ -1871,7 +1805,7 @@ static void mac_op_mf(int op)
}
/* set the final value */
- adsp2100.core.mf.u = (UINT32)res >> 16;
+ adsp->core.mf.u = (UINT32)res >> 16;
}
@@ -1880,9 +1814,9 @@ static void mac_op_mf(int op)
MAC operations (result in MF, yop == xop)
===========================================================================*/
-static void mac_op_mf_xop(int op)
+static void mac_op_mf_xop(adsp2100_state *adsp, int op)
{
- INT8 shift = ((adsp2100.mstat & MSTAT_INTEGER) >> 4) ^ 1;
+ INT8 shift = ((adsp->mstat & MSTAT_INTEGER) >> 4) ^ 1;
INT32 xop = (op >> 8) & 7;
INT32 temp;
INT64 res;
@@ -1894,7 +1828,7 @@ static void mac_op_mf_xop(int op)
return;
case 0x01<<13:
/* X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
#if 0
@@ -1909,9 +1843,9 @@ static void mac_op_mf_xop(int op)
break;
case 0x02<<13:
/* MR + X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
#if 0
if ((res & 0xffff) == 0x8000) res &= ~((UINT64)0x10000);
else res += (res & 0x8000) << 1;
@@ -1924,9 +1858,9 @@ static void mac_op_mf_xop(int op)
break;
case 0x03<<13:
/* MR - X * Y (RND) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
#if 0
if ((res & 0xffff) == 0x8000) res &= ~((UINT64)0x10000);
else res += (res & 0x8000) << 1;
@@ -1939,75 +1873,75 @@ static void mac_op_mf_xop(int op)
break;
case 0x04<<13:
/* X * Y (SS) Clear when y = 0 */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
break;
case 0x05<<13:
/* X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
break;
case 0x06<<13:
/* X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
break;
case 0x07<<13:
/* X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
res = (INT64)temp;
break;
case 0x08<<13:
/* MR + X * Y (SS) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x09<<13:
/* MR + X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0a<<13:
/* MR + X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0b<<13:
/* MR + X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr + (INT64)temp;
+ res = adsp->core.mr.mr + (INT64)temp;
break;
case 0x0c<<13:
/* MR - X * Y (SS) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0d<<13:
/* MR - X * Y (SU) */
- xop = MAC_GETXREG_SIGNED(xop);
+ xop = MAC_GETXREG_SIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0e<<13:
/* MR - X * Y (US) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
case 0x0f<<13:
/* MR - X * Y (UU) */
- xop = MAC_GETXREG_UNSIGNED(xop);
+ xop = MAC_GETXREG_UNSIGNED(adsp, xop);
temp = (xop * xop) << shift;
- res = adsp2100.core.mr.mr - (INT64)temp;
+ res = adsp->core.mr.mr - (INT64)temp;
break;
default:
res = 0; /* just to keep the compiler happy */
@@ -2015,7 +1949,7 @@ static void mac_op_mf_xop(int op)
}
/* set the final value */
- adsp2100.core.mf.u = (UINT32)res >> 16;
+ adsp->core.mf.u = (UINT32)res >> 16;
}
@@ -2024,9 +1958,9 @@ static void mac_op_mf_xop(int op)
SHIFT operations (result in SR/SE/SB)
===========================================================================*/
-static void shift_op(int op)
+static void shift_op(adsp2100_state *adsp, int op)
{
- INT8 sc = adsp2100.core.se.s;
+ INT8 sc = adsp->core.se.s;
INT32 xop = (op >> 8) & 7;
UINT32 res;
@@ -2034,99 +1968,99 @@ static void shift_op(int op)
{
case 0x00<<11:
/* LSHIFT (HI) */
- xop = SHIFT_GETXREG_UNSIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop) << 16;
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? ((UINT32)xop >> -sc) : 0;
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x01<<11:
/* LSHIFT (HI, OR) */
- xop = SHIFT_GETXREG_UNSIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop) << 16;
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? ((UINT32)xop >> -sc) : 0;
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x02<<11:
/* LSHIFT (LO) */
- xop = SHIFT_GETXREG_UNSIGNED(xop);
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : 0;
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x03<<11:
/* LSHIFT (LO, OR) */
- xop = SHIFT_GETXREG_UNSIGNED(xop);
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : 0;
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x04<<11:
/* ASHIFT (HI) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : (xop >> 31);
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x05<<11:
/* ASHIFT (HI, OR) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : (xop >> 31);
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x06<<11:
/* ASHIFT (LO) */
- xop = SHIFT_GETXREG_SIGNED(xop);
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : (xop >> 31);
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x07<<11:
/* ASHIFT (LO, OR) */
- xop = SHIFT_GETXREG_SIGNED(xop);
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : (xop >> 31);
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x08<<11:
/* NORM (HI) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (sc > 0)
{
- xop = ((UINT32)xop >> 1) | ((adsp2100.astat & CFLAG) << 28);
+ xop = ((UINT32)xop >> 1) | ((adsp->astat & CFLAG) << 28);
res = xop >> (sc - 1);
}
else res = (sc > -32) ? (xop << -sc) : 0;
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x09<<11:
/* NORM (HI, OR) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (sc > 0)
{
- xop = ((UINT32)xop >> 1) | ((adsp2100.astat & CFLAG) << 28);
+ xop = ((UINT32)xop >> 1) | ((adsp->astat & CFLAG) << 28);
res = xop >> (sc - 1);
}
else res = (sc > -32) ? (xop << -sc) : 0;
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x0a<<11:
/* NORM (LO) */
- xop = SHIFT_GETXREG_UNSIGNED(xop);
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop >> sc) : 0;
else res = (sc > -32) ? (xop << -sc) : 0;
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x0b<<11:
/* NORM (LO, OR) */
- xop = SHIFT_GETXREG_UNSIGNED(xop);
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop >> sc) : 0;
else res = (sc > -32) ? (xop << -sc) : 0;
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x0c<<11:
/* EXP (HI) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
res = 0;
if (xop < 0)
{
@@ -2139,14 +2073,14 @@ static void shift_op(int op)
xop |= 0x8000;
while ((xop & 0x40000000) == 0) res++, xop <<= 1;
}
- adsp2100.core.se.s = -res;
+ adsp->core.se.s = -res;
break;
case 0x0d<<11:
/* EXP (HIX) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (GET_V)
{
- adsp2100.core.se.s = 1;
+ adsp->core.se.s = 1;
if (xop < 0) CLR_SS;
else SET_SS;
}
@@ -2164,14 +2098,14 @@ static void shift_op(int op)
xop |= 0x8000;
while ((xop & 0x40000000) == 0) res++, xop <<= 1;
}
- adsp2100.core.se.s = -res;
+ adsp->core.se.s = -res;
}
break;
case 0x0e<<11:
/* EXP (LO) */
- if (adsp2100.core.se.s == -15)
+ if (adsp->core.se.s == -15)
{
- xop = SHIFT_GETXREG_SIGNED(xop);
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop);
res = 15;
if (GET_SS)
while ((xop & 0x8000) != 0) res++, xop <<= 1;
@@ -2180,12 +2114,12 @@ static void shift_op(int op)
xop = (xop << 1) | 1;
while ((xop & 0x10000) == 0) res++, xop <<= 1;
}
- adsp2100.core.se.s = -res;
+ adsp->core.se.s = -res;
}
break;
case 0x0f<<11:
/* EXPADJ */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
res = 0;
if (xop < 0)
while ((xop & 0x40000000) != 0) res++, xop <<= 1;
@@ -2194,8 +2128,8 @@ static void shift_op(int op)
xop |= 0x8000;
while ((xop & 0x40000000) == 0) res++, xop <<= 1;
}
- if (res < -adsp2100.core.sb.s)
- adsp2100.core.sb.s = -res;
+ if (res < -adsp->core.sb.s)
+ adsp->core.sb.s = -res;
break;
}
}
@@ -2206,7 +2140,7 @@ static void shift_op(int op)
Immediate SHIFT operations (result in SR/SE/SB)
===========================================================================*/
-static void shift_op_imm(int op)
+static void shift_op_imm(adsp2100_state *adsp, int op)
{
INT8 sc = (INT8)op;
INT32 xop = (op >> 8) & 7;
@@ -2216,95 +2150,95 @@ static void shift_op_imm(int op)
{
case 0x00<<11:
/* LSHIFT (HI) */
- xop = SHIFT_GETXREG_UNSIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop) << 16;
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? ((UINT32)xop >> -sc) : 0;
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x01<<11:
/* LSHIFT (HI, OR) */
- xop = SHIFT_GETXREG_UNSIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop) << 16;
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? ((UINT32)xop >> -sc) : 0;
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x02<<11:
/* LSHIFT (LO) */
- xop = SHIFT_GETXREG_UNSIGNED(xop);
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : 0;
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x03<<11:
/* LSHIFT (LO, OR) */
- xop = SHIFT_GETXREG_UNSIGNED(xop);
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : 0;
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x04<<11:
/* ASHIFT (HI) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : (xop >> 31);
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x05<<11:
/* ASHIFT (HI, OR) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : (xop >> 31);
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x06<<11:
/* ASHIFT (LO) */
- xop = SHIFT_GETXREG_SIGNED(xop);
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : (xop >> 31);
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x07<<11:
/* ASHIFT (LO, OR) */
- xop = SHIFT_GETXREG_SIGNED(xop);
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop << sc) : 0;
else res = (sc > -32) ? (xop >> -sc) : (xop >> 31);
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x08<<11:
/* NORM (HI) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (sc > 0)
{
- xop = ((UINT32)xop >> 1) | ((adsp2100.astat & CFLAG) << 28);
+ xop = ((UINT32)xop >> 1) | ((adsp->astat & CFLAG) << 28);
res = xop >> (sc - 1);
}
else res = (sc > -32) ? (xop << -sc) : 0;
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x09<<11:
/* NORM (HI, OR) */
- xop = SHIFT_GETXREG_SIGNED(xop) << 16;
+ xop = SHIFT_GETXREG_SIGNED(adsp, xop) << 16;
if (sc > 0)
{
- xop = ((UINT32)xop >> 1) | ((adsp2100.astat & CFLAG) << 28);
+ xop = ((UINT32)xop >> 1) | ((adsp->astat & CFLAG) << 28);
res = xop >> (sc - 1);
}
else res = (sc > -32) ? (xop << -sc) : 0;
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
case 0x0a<<11:
/* NORM (LO) */
- xop = SHIFT_GETXREG_UNSIGNED(xop);
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop >> sc) : 0;
else res = (sc > -32) ? (xop << -sc) : 0;
- adsp2100.core.sr.sr = res;
+ adsp->core.sr.sr = res;
break;
case 0x0b<<11:
/* NORM (LO, OR) */
- xop = SHIFT_GETXREG_UNSIGNED(xop);
+ xop = SHIFT_GETXREG_UNSIGNED(adsp, xop);
if (sc > 0) res = (sc < 32) ? (xop >> sc) : 0;
else res = (sc > -32) ? (xop << -sc) : 0;
- adsp2100.core.sr.sr |= res;
+ adsp->core.sr.sr |= res;
break;
}
}
diff --git a/src/emu/cpu/adsp2100/adsp2100.c b/src/emu/cpu/adsp2100/adsp2100.c
index aae6ce1b8ed..672a217a93d 100644
--- a/src/emu/cpu/adsp2100/adsp2100.c
+++ b/src/emu/cpu/adsp2100/adsp2100.c
@@ -243,30 +243,32 @@ typedef struct
UINT8 irq_latch[9];
int (*irq_callback)(int irqline);
+ /* other internal states */
+ int icount;
+ int chip_type;
+ int mstat_mask;
+ int imask_mask;
+
+ /* register maps */
+ void * alu_xregs[8];
+ void * alu_yregs[4];
+ void * mac_xregs[8];
+ void * mac_yregs[4];
+ void * shift_xregs[8];
+
/* other callbacks */
RX_CALLBACK sport_rx_callback;
TX_CALLBACK sport_tx_callback;
ADSP2100_TIMER_CALLBACK timer_fired_func;
-} adsp2100_Regs;
+} adsp2100_state;
/***************************************************************************
- PUBLIC GLOBAL VARIABLES
-***************************************************************************/
-
-static int adsp2100_icount;
-
-
-/***************************************************************************
PRIVATE GLOBAL VARIABLES
***************************************************************************/
-static adsp2100_Regs adsp2100;
-
-static int chip_type = CHIP_TYPE_ADSP2100;
-static int mstat_mask;
-static int imask_mask;
+static void *token;
static UINT16 *reverse_table = 0;
static UINT16 *mask_table = 0;
@@ -282,7 +284,7 @@ static UINT32 pcbucket[0x4000];
***************************************************************************/
static int create_tables(void);
-static void check_irqs(void);
+static void check_irqs(adsp2100_state *adsp);
/***************************************************************************
@@ -319,68 +321,9 @@ INLINE void WWORD_PGM(UINT32 addr, UINT32 data)
program_write_dword_32le(addr << 2, data & 0xffffff);
}
-#define ROPCODE() cpu_readop32(adsp2100.pc << 2)
-
-#define CHANGEPC() change_pc(adsp2100.pc << 2)
-
-
-/***************************************************************************
- OTHER INLINES
-***************************************************************************/
-
-#if (HAS_ADSP2100)
-INLINE void set_core_2100(void)
-{
- chip_type = CHIP_TYPE_ADSP2100;
- mstat_mask = 0x0f;
- imask_mask = 0x0f;
-}
-#endif
-
-#if (HAS_ADSP2101)
-INLINE void set_core_2101(void)
-{
- chip_type = CHIP_TYPE_ADSP2101;
- mstat_mask = 0x7f;
- imask_mask = 0x3f;
-}
-#endif
-
-#if (HAS_ADSP2104)
-INLINE void set_core_2104(void)
-{
- chip_type = CHIP_TYPE_ADSP2104;
- mstat_mask = 0x7f;
- imask_mask = 0x3f;
-}
-#endif
-
-#if (HAS_ADSP2105)
-INLINE void set_core_2105(void)
-{
- chip_type = CHIP_TYPE_ADSP2105;
- mstat_mask = 0x7f;
- imask_mask = 0x3f;
-}
-#endif
+#define ROPCODE(a) cpu_readop32((a)->pc << 2)
-#if (HAS_ADSP2115)
-INLINE void set_core_2115(void)
-{
- chip_type = CHIP_TYPE_ADSP2115;
- mstat_mask = 0x7f;
- imask_mask = 0x3f;
-}
-#endif
-
-#if (HAS_ADSP2181)
-INLINE void set_core_2181(void)
-{
- chip_type = CHIP_TYPE_ADSP2181;
- mstat_mask = 0x7f;
- imask_mask = 0x3ff;
-}
-#endif
+#define CHANGEPC(a) change_pc((a)->pc << 2)
/***************************************************************************
@@ -395,209 +338,209 @@ INLINE void set_core_2181(void)
IRQ HANDLING
***************************************************************************/
-INLINE int adsp2100_generate_irq(int which)
+INLINE int adsp2100_generate_irq(adsp2100_state *adsp, int which)
{
/* skip if masked */
- if (!(adsp2100.imask & (1 << which)))
+ if (!(adsp->imask & (1 << which)))
return 0;
/* clear the latch */
- adsp2100.irq_latch[which] = 0;
+ adsp->irq_latch[which] = 0;
/* push the PC and the status */
- pc_stack_push();
- stat_stack_push();
+ pc_stack_push(adsp);
+ stat_stack_push(adsp);
/* vector to location & stop idling */
- adsp2100.pc = which;
- CHANGEPC();
- adsp2100.idle = 0;
+ adsp->pc = which;
+ CHANGEPC(adsp);
+ adsp->idle = 0;
/* mask other interrupts based on the nesting bit */
- if (adsp2100.icntl & 0x10) adsp2100.imask &= ~((2 << which) - 1);
- else adsp2100.imask &= ~0xf;
+ if (adsp->icntl & 0x10) adsp->imask &= ~((2 << which) - 1);
+ else adsp->imask &= ~0xf;
return 1;
}
-INLINE int adsp2101_generate_irq(int which, int indx)
+INLINE int adsp2101_generate_irq(adsp2100_state *adsp, int which, int indx)
{
/* skip if masked */
- if (!(adsp2100.imask & (0x20 >> indx)))
+ if (!(adsp->imask & (0x20 >> indx)))
return 0;
/* clear the latch */
- adsp2100.irq_latch[which] = 0;
+ adsp->irq_latch[which] = 0;
/* push the PC and the status */
- pc_stack_push();
- stat_stack_push();
+ pc_stack_push(adsp);
+ stat_stack_push(adsp);
/* vector to location & stop idling */
- adsp2100.pc = 0x04 + indx * 4;
- CHANGEPC();
- adsp2100.idle = 0;
+ adsp->pc = 0x04 + indx * 4;
+ CHANGEPC(adsp);
+ adsp->idle = 0;
/* mask other interrupts based on the nesting bit */
- if (adsp2100.icntl & 0x10) adsp2100.imask &= ~(0x3f >> indx);
- else adsp2100.imask &= ~0x3f;
+ if (adsp->icntl & 0x10) adsp->imask &= ~(0x3f >> indx);
+ else adsp->imask &= ~0x3f;
return 1;
}
-INLINE int adsp2181_generate_irq(int which, int indx)
+INLINE int adsp2181_generate_irq(adsp2100_state *adsp, int which, int indx)
{
/* skip if masked */
- if (!(adsp2100.imask & (0x200 >> indx)))
+ if (!(adsp->imask & (0x200 >> indx)))
return 0;
/* clear the latch */
- adsp2100.irq_latch[which] = 0;
+ adsp->irq_latch[which] = 0;
/* push the PC and the status */
- pc_stack_push();
- stat_stack_push();
+ pc_stack_push(adsp);
+ stat_stack_push(adsp);
/* vector to location & stop idling */
- adsp2100.pc = 0x04 + indx * 4;
- CHANGEPC();
- adsp2100.idle = 0;
+ adsp->pc = 0x04 + indx * 4;
+ CHANGEPC(adsp);
+ adsp->idle = 0;
/* mask other interrupts based on the nesting bit */
- if (adsp2100.icntl & 0x10) adsp2100.imask &= ~(0x3ff >> indx);
- else adsp2100.imask &= ~0x3ff;
+ if (adsp->icntl & 0x10) adsp->imask &= ~(0x3ff >> indx);
+ else adsp->imask &= ~0x3ff;
return 1;
}
-static void check_irqs(void)
+static void check_irqs(adsp2100_state *adsp)
{
UINT8 check;
#if (HAS_ADSP2181)
- if (chip_type >= CHIP_TYPE_ADSP2181)
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2181)
{
/* check IRQ2 */
- check = (adsp2100.icntl & 4) ? adsp2100.irq_latch[ADSP2181_IRQ2] : adsp2100.irq_state[ADSP2181_IRQ2];
- if (check && adsp2181_generate_irq(ADSP2181_IRQ2, 0))
+ check = (adsp->icntl & 4) ? adsp->irq_latch[ADSP2181_IRQ2] : adsp->irq_state[ADSP2181_IRQ2];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_IRQ2, 0))
return;
/* check IRQL1 */
- check = adsp2100.irq_state[ADSP2181_IRQL1];
- if (check && adsp2181_generate_irq(ADSP2181_IRQL1, 1))
+ check = adsp->irq_state[ADSP2181_IRQL1];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_IRQL1, 1))
return;
/* check IRQL2 */
- check = adsp2100.irq_state[ADSP2181_IRQL2];
- if (check && adsp2181_generate_irq(ADSP2181_IRQL2, 2))
+ check = adsp->irq_state[ADSP2181_IRQL2];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_IRQL2, 2))
return;
/* check SPORT0 transmit */
- check = adsp2100.irq_latch[ADSP2181_SPORT0_TX];
- if (check && adsp2181_generate_irq(ADSP2181_SPORT0_TX, 3))
+ check = adsp->irq_latch[ADSP2181_SPORT0_TX];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_SPORT0_TX, 3))
return;
/* check SPORT0 receive */
- check = adsp2100.irq_latch[ADSP2181_SPORT0_RX];
- if (check && adsp2181_generate_irq(ADSP2181_SPORT0_RX, 4))
+ check = adsp->irq_latch[ADSP2181_SPORT0_RX];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_SPORT0_RX, 4))
return;
/* check IRQE */
- check = adsp2100.irq_latch[ADSP2181_IRQE];
- if (check && adsp2181_generate_irq(ADSP2181_IRQE, 5))
+ check = adsp->irq_latch[ADSP2181_IRQE];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_IRQE, 5))
return;
/* check BDMA interrupt */
/* check IRQ1/SPORT1 transmit */
- check = (adsp2100.icntl & 2) ? adsp2100.irq_latch[ADSP2181_IRQ1] : adsp2100.irq_state[ADSP2181_IRQ1];
- if (check && adsp2181_generate_irq(ADSP2181_IRQ1, 7))
+ check = (adsp->icntl & 2) ? adsp->irq_latch[ADSP2181_IRQ1] : adsp->irq_state[ADSP2181_IRQ1];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_IRQ1, 7))
return;
/* check IRQ0/SPORT1 receive */
- check = (adsp2100.icntl & 1) ? adsp2100.irq_latch[ADSP2181_IRQ0] : adsp2100.irq_state[ADSP2181_IRQ0];
- if (check && adsp2181_generate_irq(ADSP2181_IRQ0, 8))
+ check = (adsp->icntl & 1) ? adsp->irq_latch[ADSP2181_IRQ0] : adsp->irq_state[ADSP2181_IRQ0];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_IRQ0, 8))
return;
/* check timer */
- check = adsp2100.irq_latch[ADSP2181_TIMER];
- if (check && adsp2181_generate_irq(ADSP2181_TIMER, 9))
+ check = adsp->irq_latch[ADSP2181_TIMER];
+ if (check && adsp2181_generate_irq(adsp, ADSP2181_TIMER, 9))
return;
}
else
#endif
- if (chip_type >= CHIP_TYPE_ADSP2101)
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2101)
{
/* check IRQ2 */
- check = (adsp2100.icntl & 4) ? adsp2100.irq_latch[ADSP2101_IRQ2] : adsp2100.irq_state[ADSP2101_IRQ2];
- if (check && adsp2101_generate_irq(ADSP2101_IRQ2, 0))
+ check = (adsp->icntl & 4) ? adsp->irq_latch[ADSP2101_IRQ2] : adsp->irq_state[ADSP2101_IRQ2];
+ if (check && adsp2101_generate_irq(adsp, ADSP2101_IRQ2, 0))
return;
/* check SPORT0 transmit */
- check = adsp2100.irq_latch[ADSP2101_SPORT0_TX];
- if (check && adsp2101_generate_irq(ADSP2101_SPORT0_TX, 1))
+ check = adsp->irq_latch[ADSP2101_SPORT0_TX];
+ if (check && adsp2101_generate_irq(adsp, ADSP2101_SPORT0_TX, 1))
return;
/* check SPORT0 receive */
- check = adsp2100.irq_latch[ADSP2101_SPORT0_RX];
- if (check && adsp2101_generate_irq(ADSP2101_SPORT0_RX, 2))
+ check = adsp->irq_latch[ADSP2101_SPORT0_RX];
+ if (check && adsp2101_generate_irq(adsp, ADSP2101_SPORT0_RX, 2))
return;
/* check IRQ1/SPORT1 transmit */
- check = (adsp2100.icntl & 2) ? adsp2100.irq_latch[ADSP2101_IRQ1] : adsp2100.irq_state[ADSP2101_IRQ1];
- if (check && adsp2101_generate_irq(ADSP2101_IRQ1, 3))
+ check = (adsp->icntl & 2) ? adsp->irq_latch[ADSP2101_IRQ1] : adsp->irq_state[ADSP2101_IRQ1];
+ if (check && adsp2101_generate_irq(adsp, ADSP2101_IRQ1, 3))
return;
/* check IRQ0/SPORT1 receive */
- check = (adsp2100.icntl & 1) ? adsp2100.irq_latch[ADSP2101_IRQ0] : adsp2100.irq_state[ADSP2101_IRQ0];
- if (check && adsp2101_generate_irq(ADSP2101_IRQ0, 4))
+ check = (adsp->icntl & 1) ? adsp->irq_latch[ADSP2101_IRQ0] : adsp->irq_state[ADSP2101_IRQ0];
+ if (check && adsp2101_generate_irq(adsp, ADSP2101_IRQ0, 4))
return;
/* check timer */
- check = adsp2100.irq_latch[ADSP2101_TIMER];
- if (check && adsp2101_generate_irq(ADSP2101_TIMER, 5))
+ check = adsp->irq_latch[ADSP2101_TIMER];
+ if (check && adsp2101_generate_irq(adsp, ADSP2101_TIMER, 5))
return;
}
else
{
/* check IRQ3 */
- check = (adsp2100.icntl & 8) ? adsp2100.irq_latch[ADSP2100_IRQ3] : adsp2100.irq_state[ADSP2100_IRQ3];
- if (check && adsp2100_generate_irq(ADSP2100_IRQ3))
+ check = (adsp->icntl & 8) ? adsp->irq_latch[ADSP2100_IRQ3] : adsp->irq_state[ADSP2100_IRQ3];
+ if (check && adsp2100_generate_irq(adsp, ADSP2100_IRQ3))
return;
/* check IRQ2 */
- check = (adsp2100.icntl & 4) ? adsp2100.irq_latch[ADSP2100_IRQ2] : adsp2100.irq_state[ADSP2100_IRQ2];
- if (check && adsp2100_generate_irq(ADSP2100_IRQ2))
+ check = (adsp->icntl & 4) ? adsp->irq_latch[ADSP2100_IRQ2] : adsp->irq_state[ADSP2100_IRQ2];
+ if (check && adsp2100_generate_irq(adsp, ADSP2100_IRQ2))
return;
/* check IRQ1 */
- check = (adsp2100.icntl & 2) ? adsp2100.irq_latch[ADSP2100_IRQ1] : adsp2100.irq_state[ADSP2100_IRQ1];
- if (check && adsp2100_generate_irq(ADSP2100_IRQ1))
+ check = (adsp->icntl & 2) ? adsp->irq_latch[ADSP2100_IRQ1] : adsp->irq_state[ADSP2100_IRQ1];
+ if (check && adsp2100_generate_irq(adsp, ADSP2100_IRQ1))
return;
/* check IRQ0 */
- check = (adsp2100.icntl & 1) ? adsp2100.irq_latch[ADSP2100_IRQ0] : adsp2100.irq_state[ADSP2100_IRQ0];
- if (check && adsp2100_generate_irq(ADSP2100_IRQ0))
+ check = (adsp->icntl & 1) ? adsp->irq_latch[ADSP2100_IRQ0] : adsp->irq_state[ADSP2100_IRQ0];
+ if (check && adsp2100_generate_irq(adsp, ADSP2100_IRQ0))
return;
}
}
-static void set_irq_line(int irqline, int state)
+static void set_irq_line(adsp2100_state *adsp, int irqline, int state)
{
/* update the latched state */
- if (state != CLEAR_LINE && adsp2100.irq_state[irqline] == CLEAR_LINE)
- adsp2100.irq_latch[irqline] = 1;
+ if (state != CLEAR_LINE && adsp->irq_state[irqline] == CLEAR_LINE)
+ adsp->irq_latch[irqline] = 1;
/* update the absolute state */
- adsp2100.irq_state[irqline] = state;
+ adsp->irq_state[irqline] = state;
/* check for IRQs */
if (state != CLEAR_LINE)
- check_irqs();
+ check_irqs(adsp);
}
@@ -606,31 +549,26 @@ static void set_irq_line(int irqline, int state)
CONTEXT SWITCHING
***************************************************************************/
-static void adsp2100_get_context(void *dst)
+static void adsp21xx_get_context(void *dst)
{
/* copy the context */
if (dst)
- *(adsp2100_Regs *)dst = adsp2100;
+ *(void **)dst = token;
}
-#if (HAS_ADSP2100)
-static void adsp2100_set_context(void *src)
+static void adsp21xx_set_context(void *src)
{
/* copy the context */
if (src)
{
- adsp2100 = *(adsp2100_Regs *)src;
- CHANGEPC();
+ adsp2100_state *adsp;
+ token = *(void **)src;
+ adsp = token;
+ CHANGEPC(adsp);
+ check_irqs(adsp);
}
-
- /* reset the chip type */
- set_core_2100();
-
- /* check for IRQs */
- check_irqs();
}
-#endif
@@ -638,120 +576,167 @@ static void adsp2100_set_context(void *src)
INITIALIZATION AND SHUTDOWN
***************************************************************************/
-static void adsp2100_init(int index, int clock, const void *config, int (*irqcallback)(int))
+static adsp2100_state *adsp21xx_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
+ adsp2100_state *adsp;
+
+ /* allocate state */
+ token = adsp = auto_malloc(sizeof(adsp2100_state));
+ memset(adsp, 0, sizeof(adsp2100_state));
+
/* create the tables */
if (!create_tables())
fatalerror("creating adsp2100 tables failed");
/* set the IRQ callback */
- adsp2100.irq_callback = irqcallback;
+ adsp->irq_callback = irqcallback;
+
+ /* set up ALU register pointers */
+ adsp->alu_xregs[0] = &adsp->core.ax0;
+ adsp->alu_xregs[1] = &adsp->core.ax1;
+ adsp->alu_xregs[2] = &adsp->core.ar;
+ adsp->alu_xregs[3] = &adsp->core.mr.mrx.mr0;
+ adsp->alu_xregs[4] = &adsp->core.mr.mrx.mr1;
+ adsp->alu_xregs[5] = &adsp->core.mr.mrx.mr2;
+ adsp->alu_xregs[6] = &adsp->core.sr.srx.sr0;
+ adsp->alu_xregs[7] = &adsp->core.sr.srx.sr1;
+ adsp->alu_yregs[0] = &adsp->core.ay0;
+ adsp->alu_yregs[1] = &adsp->core.ay1;
+ adsp->alu_yregs[2] = &adsp->core.af;
+ adsp->alu_yregs[3] = &adsp->core.zero;
+
+ /* set up MAC register pointers */
+ adsp->mac_xregs[0] = &adsp->core.mx0;
+ adsp->mac_xregs[1] = &adsp->core.mx1;
+ adsp->mac_xregs[2] = &adsp->core.ar;
+ adsp->mac_xregs[3] = &adsp->core.mr.mrx.mr0;
+ adsp->mac_xregs[4] = &adsp->core.mr.mrx.mr1;
+ adsp->mac_xregs[5] = &adsp->core.mr.mrx.mr2;
+ adsp->mac_xregs[6] = &adsp->core.sr.srx.sr0;
+ adsp->mac_xregs[7] = &adsp->core.sr.srx.sr1;
+ adsp->mac_yregs[0] = &adsp->core.my0;
+ adsp->mac_yregs[1] = &adsp->core.my1;
+ adsp->mac_yregs[2] = &adsp->core.mf;
+ adsp->mac_yregs[3] = &adsp->core.zero;
+
+ /* set up shift register pointers */
+ adsp->shift_xregs[0] = &adsp->core.si;
+ adsp->shift_xregs[1] = &adsp->core.si;
+ adsp->shift_xregs[2] = &adsp->core.ar;
+ adsp->shift_xregs[3] = &adsp->core.mr.mrx.mr0;
+ adsp->shift_xregs[4] = &adsp->core.mr.mrx.mr1;
+ adsp->shift_xregs[5] = &adsp->core.mr.mrx.mr2;
+ adsp->shift_xregs[6] = &adsp->core.sr.srx.sr0;
+ adsp->shift_xregs[7] = &adsp->core.sr.srx.sr1;
/* "core" */
- state_save_register_item("adsp2100", index, adsp2100.core.ax0.u);
- state_save_register_item("adsp2100", index, adsp2100.core.ax1.u);
- state_save_register_item("adsp2100", index, adsp2100.core.ay0.u);
- state_save_register_item("adsp2100", index, adsp2100.core.ay1.u);
- state_save_register_item("adsp2100", index, adsp2100.core.ar.u);
- state_save_register_item("adsp2100", index, adsp2100.core.af.u);
- state_save_register_item("adsp2100", index, adsp2100.core.mx0.u);
- state_save_register_item("adsp2100", index, adsp2100.core.mx1.u);
- state_save_register_item("adsp2100", index, adsp2100.core.my0.u);
- state_save_register_item("adsp2100", index, adsp2100.core.my1.u);
- state_save_register_item("adsp2100", index, adsp2100.core.mr.mr);
- state_save_register_item("adsp2100", index, adsp2100.core.mf.u);
- state_save_register_item("adsp2100", index, adsp2100.core.si.u);
- state_save_register_item("adsp2100", index, adsp2100.core.se.u);
- state_save_register_item("adsp2100", index, adsp2100.core.sb.u);
- state_save_register_item("adsp2100", index, adsp2100.core.sr.sr);
- state_save_register_item("adsp2100", index, adsp2100.core.zero.u);
+ state_save_register_item("adsp2100", index, adsp->core.ax0.u);
+ state_save_register_item("adsp2100", index, adsp->core.ax1.u);
+ state_save_register_item("adsp2100", index, adsp->core.ay0.u);
+ state_save_register_item("adsp2100", index, adsp->core.ay1.u);
+ state_save_register_item("adsp2100", index, adsp->core.ar.u);
+ state_save_register_item("adsp2100", index, adsp->core.af.u);
+ state_save_register_item("adsp2100", index, adsp->core.mx0.u);
+ state_save_register_item("adsp2100", index, adsp->core.mx1.u);
+ state_save_register_item("adsp2100", index, adsp->core.my0.u);
+ state_save_register_item("adsp2100", index, adsp->core.my1.u);
+ state_save_register_item("adsp2100", index, adsp->core.mr.mr);
+ state_save_register_item("adsp2100", index, adsp->core.mf.u);
+ state_save_register_item("adsp2100", index, adsp->core.si.u);
+ state_save_register_item("adsp2100", index, adsp->core.se.u);
+ state_save_register_item("adsp2100", index, adsp->core.sb.u);
+ state_save_register_item("adsp2100", index, adsp->core.sr.sr);
+ state_save_register_item("adsp2100", index, adsp->core.zero.u);
/* "alt" */
- state_save_register_item("adsp2100", index, adsp2100.alt.ax0.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.ax1.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.ay0.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.ay1.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.ar.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.af.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.mx0.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.mx1.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.my0.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.my1.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.mr.mr);
- state_save_register_item("adsp2100", index, adsp2100.alt.mf.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.si.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.se.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.sb.u);
- state_save_register_item("adsp2100", index, adsp2100.alt.sr.sr);
- state_save_register_item("adsp2100", index, adsp2100.alt.zero.u);
-
- state_save_register_item_array("adsp2100", index, adsp2100.i);
- state_save_register_item_array("adsp2100", index, adsp2100.m);
- state_save_register_item_array("adsp2100", index, adsp2100.l);
- state_save_register_item_array("adsp2100", index, adsp2100.lmask);
- state_save_register_item_array("adsp2100", index, adsp2100.base);
- state_save_register_item("adsp2100", index, adsp2100.px);
-
- state_save_register_item("adsp2100", index, adsp2100.pc);
- state_save_register_item("adsp2100", index, adsp2100.ppc);
- state_save_register_item("adsp2100", index, adsp2100.loop);
- state_save_register_item("adsp2100", index, adsp2100.loop_condition);
- state_save_register_item("adsp2100", index, adsp2100.cntr);
- state_save_register_item("adsp2100", index, adsp2100.astat);
- state_save_register_item("adsp2100", index, adsp2100.sstat);
- state_save_register_item("adsp2100", index, adsp2100.mstat);
- state_save_register_item("adsp2100", index, adsp2100.astat_clear);
- state_save_register_item("adsp2100", index, adsp2100.idle);
-
- state_save_register_item_array("adsp2100", index, adsp2100.loop_stack);
- state_save_register_item_array("adsp2100", index, adsp2100.cntr_stack);
- state_save_register_item_array("adsp2100", index, adsp2100.pc_stack);
- state_save_register_item_2d_array("adsp2100", index, adsp2100.stat_stack);
-
- state_save_register_item("adsp2100", index, adsp2100.pc_sp);
- state_save_register_item("adsp2100", index, adsp2100.cntr_sp);
- state_save_register_item("adsp2100", index, adsp2100.stat_sp);
- state_save_register_item("adsp2100", index, adsp2100.loop_sp);
-
- state_save_register_item("adsp2100", index, adsp2100.flagout);
- state_save_register_item("adsp2100", index, adsp2100.flagin);
- state_save_register_item("adsp2100", index, adsp2100.fl0);
- state_save_register_item("adsp2100", index, adsp2100.fl1);
- state_save_register_item("adsp2100", index, adsp2100.fl2);
- state_save_register_item("adsp2100", index, adsp2100.idma_addr);
- state_save_register_item("adsp2100", index, adsp2100.idma_cache);
- state_save_register_item("adsp2100", index, adsp2100.idma_offs);
-
- state_save_register_item("adsp2100", index, adsp2100.imask);
- state_save_register_item("adsp2100", index, adsp2100.icntl);
- state_save_register_item("adsp2100", index, adsp2100.ifc);
- state_save_register_item_array("adsp2100", index, adsp2100.irq_state);
- state_save_register_item_array("adsp2100", index, adsp2100.irq_latch);
+ state_save_register_item("adsp2100", index, adsp->alt.ax0.u);
+ state_save_register_item("adsp2100", index, adsp->alt.ax1.u);
+ state_save_register_item("adsp2100", index, adsp->alt.ay0.u);
+ state_save_register_item("adsp2100", index, adsp->alt.ay1.u);
+ state_save_register_item("adsp2100", index, adsp->alt.ar.u);
+ state_save_register_item("adsp2100", index, adsp->alt.af.u);
+ state_save_register_item("adsp2100", index, adsp->alt.mx0.u);
+ state_save_register_item("adsp2100", index, adsp->alt.mx1.u);
+ state_save_register_item("adsp2100", index, adsp->alt.my0.u);
+ state_save_register_item("adsp2100", index, adsp->alt.my1.u);
+ state_save_register_item("adsp2100", index, adsp->alt.mr.mr);
+ state_save_register_item("adsp2100", index, adsp->alt.mf.u);
+ state_save_register_item("adsp2100", index, adsp->alt.si.u);
+ state_save_register_item("adsp2100", index, adsp->alt.se.u);
+ state_save_register_item("adsp2100", index, adsp->alt.sb.u);
+ state_save_register_item("adsp2100", index, adsp->alt.sr.sr);
+ state_save_register_item("adsp2100", index, adsp->alt.zero.u);
+
+ state_save_register_item_array("adsp2100", index, adsp->i);
+ state_save_register_item_array("adsp2100", index, adsp->m);
+ state_save_register_item_array("adsp2100", index, adsp->l);
+ state_save_register_item_array("adsp2100", index, adsp->lmask);
+ state_save_register_item_array("adsp2100", index, adsp->base);
+ state_save_register_item("adsp2100", index, adsp->px);
+
+ state_save_register_item("adsp2100", index, adsp->pc);
+ state_save_register_item("adsp2100", index, adsp->ppc);
+ state_save_register_item("adsp2100", index, adsp->loop);
+ state_save_register_item("adsp2100", index, adsp->loop_condition);
+ state_save_register_item("adsp2100", index, adsp->cntr);
+ state_save_register_item("adsp2100", index, adsp->astat);
+ state_save_register_item("adsp2100", index, adsp->sstat);
+ state_save_register_item("adsp2100", index, adsp->mstat);
+ state_save_register_item("adsp2100", index, adsp->astat_clear);
+ state_save_register_item("adsp2100", index, adsp->idle);
+
+ state_save_register_item_array("adsp2100", index, adsp->loop_stack);
+ state_save_register_item_array("adsp2100", index, adsp->cntr_stack);
+ state_save_register_item_array("adsp2100", index, adsp->pc_stack);
+ state_save_register_item_2d_array("adsp2100", index, adsp->stat_stack);
+
+ state_save_register_item("adsp2100", index, adsp->pc_sp);
+ state_save_register_item("adsp2100", index, adsp->cntr_sp);
+ state_save_register_item("adsp2100", index, adsp->stat_sp);
+ state_save_register_item("adsp2100", index, adsp->loop_sp);
+
+ state_save_register_item("adsp2100", index, adsp->flagout);
+ state_save_register_item("adsp2100", index, adsp->flagin);
+ state_save_register_item("adsp2100", index, adsp->fl0);
+ state_save_register_item("adsp2100", index, adsp->fl1);
+ state_save_register_item("adsp2100", index, adsp->fl2);
+ state_save_register_item("adsp2100", index, adsp->idma_addr);
+ state_save_register_item("adsp2100", index, adsp->idma_cache);
+ state_save_register_item("adsp2100", index, adsp->idma_offs);
+
+ state_save_register_item("adsp2100", index, adsp->imask);
+ state_save_register_item("adsp2100", index, adsp->icntl);
+ state_save_register_item("adsp2100", index, adsp->ifc);
+ state_save_register_item_array("adsp2100", index, adsp->irq_state);
+ state_save_register_item_array("adsp2100", index, adsp->irq_latch);
+
+ return adsp;
}
-static void adsp2100_reset(void)
+static void adsp21xx_reset(void)
{
+ adsp2100_state *adsp = token;
int irq;
/* ensure that zero is zero */
- adsp2100.core.zero.u = adsp2100.alt.zero.u = 0;
+ adsp->core.zero.u = adsp->alt.zero.u = 0;
/* recompute the memory registers with their current values */
- wr_l0(adsp2100.l[0]); wr_i0(adsp2100.i[0]);
- wr_l1(adsp2100.l[1]); wr_i1(adsp2100.i[1]);
- wr_l2(adsp2100.l[2]); wr_i2(adsp2100.i[2]);
- wr_l3(adsp2100.l[3]); wr_i3(adsp2100.i[3]);
- wr_l4(adsp2100.l[4]); wr_i4(adsp2100.i[4]);
- wr_l5(adsp2100.l[5]); wr_i5(adsp2100.i[5]);
- wr_l6(adsp2100.l[6]); wr_i6(adsp2100.i[6]);
- wr_l7(adsp2100.l[7]); wr_i7(adsp2100.i[7]);
+ wr_l0(adsp, adsp->l[0]); wr_i0(adsp, adsp->i[0]);
+ wr_l1(adsp, adsp->l[1]); wr_i1(adsp, adsp->i[1]);
+ wr_l2(adsp, adsp->l[2]); wr_i2(adsp, adsp->i[2]);
+ wr_l3(adsp, adsp->l[3]); wr_i3(adsp, adsp->i[3]);
+ wr_l4(adsp, adsp->l[4]); wr_i4(adsp, adsp->i[4]);
+ wr_l5(adsp, adsp->l[5]); wr_i5(adsp, adsp->i[5]);
+ wr_l6(adsp, adsp->l[6]); wr_i6(adsp, adsp->i[6]);
+ wr_l7(adsp, adsp->l[7]); wr_i7(adsp, adsp->i[7]);
/* reset PC and loops */
- switch (chip_type)
+ switch (adsp->chip_type)
{
case CHIP_TYPE_ADSP2100:
- adsp2100.pc = 4;
+ adsp->pc = 4;
break;
case CHIP_TYPE_ADSP2101:
@@ -759,44 +744,44 @@ static void adsp2100_reset(void)
case CHIP_TYPE_ADSP2105:
case CHIP_TYPE_ADSP2115:
case CHIP_TYPE_ADSP2181:
- adsp2100.pc = 0;
+ adsp->pc = 0;
break;
default:
- logerror( "ADSP2100 core: Unknown chip type!. Defaulting to ADSP2100.\n" );
- adsp2100.pc = 4;
- chip_type = CHIP_TYPE_ADSP2100;
+ logerror( "ADSP2100 core: Unknown chip type!. Defaulting to adsp->\n" );
+ adsp->pc = 4;
+ adsp->chip_type = CHIP_TYPE_ADSP2100;
break;
}
- CHANGEPC();
+ CHANGEPC(adsp);
- adsp2100.ppc = -1;
- adsp2100.loop = 0xffff;
- adsp2100.loop_condition = 0;
+ adsp->ppc = -1;
+ adsp->loop = 0xffff;
+ adsp->loop_condition = 0;
/* reset status registers */
- adsp2100.astat_clear = ~(CFLAG | VFLAG | NFLAG | ZFLAG);
- adsp2100.mstat = 0;
- adsp2100.sstat = 0x55;
- adsp2100.idle = 0;
+ adsp->astat_clear = ~(CFLAG | VFLAG | NFLAG | ZFLAG);
+ adsp->mstat = 0;
+ adsp->sstat = 0x55;
+ adsp->idle = 0;
/* reset stacks */
- adsp2100.pc_sp = 0;
- adsp2100.cntr_sp = 0;
- adsp2100.stat_sp = 0;
- adsp2100.loop_sp = 0;
+ adsp->pc_sp = 0;
+ adsp->cntr_sp = 0;
+ adsp->stat_sp = 0;
+ adsp->loop_sp = 0;
/* reset external I/O */
- adsp2100.flagout = 0;
- adsp2100.flagin = 0;
- adsp2100.fl0 = 0;
- adsp2100.fl1 = 0;
- adsp2100.fl2 = 0;
+ adsp->flagout = 0;
+ adsp->flagin = 0;
+ adsp->fl0 = 0;
+ adsp->fl1 = 0;
+ adsp->fl2 = 0;
/* reset interrupts */
- adsp2100.imask = 0;
+ adsp->imask = 0;
for (irq = 0; irq < 8; irq++)
- adsp2100.irq_state[irq] = adsp2100.irq_latch[irq] = CLEAR_LINE;
+ adsp->irq_state[irq] = adsp->irq_latch[irq] = CLEAR_LINE;
}
@@ -813,7 +798,7 @@ static int create_tables(void)
condition_table = (UINT8 *)malloc(0x1000 * sizeof(UINT8));
/* handle errors */
- if (!reverse_table || !mask_table || !condition_table)
+ if (reverse_table == NULL || mask_table == NULL || condition_table == NULL)
return 0;
/* initialize the bit reversing table */
@@ -889,17 +874,17 @@ static int create_tables(void)
}
-static void adsp2100_exit(void)
+static void adsp21xx_exit(void)
{
- if (reverse_table)
+ if (reverse_table != NULL)
free(reverse_table);
reverse_table = NULL;
- if (mask_table)
+ if (mask_table != NULL)
free(mask_table);
mask_table = NULL;
- if (condition_table)
+ if (condition_table != NULL)
free(condition_table);
condition_table = NULL;
@@ -930,17 +915,18 @@ static void adsp2100_exit(void)
***************************************************************************/
/* execute instructions on this CPU until icount expires */
-static int adsp2100_execute(int cycles)
+static int adsp21xx_execute(int cycles)
{
int check_debugger = ((Machine->debug_flags & DEBUG_FLAG_ENABLED) != 0);
+ adsp2100_state *adsp = token;
/* reset the core */
- set_mstat(adsp2100.mstat);
+ set_mstat(adsp, adsp->mstat);
/* count cycles and interrupt cycles */
- adsp2100_icount = cycles;
+ adsp->icount = cycles;
- CHANGEPC();
+ CHANGEPC(adsp);
do
{
@@ -948,34 +934,34 @@ static int adsp2100_execute(int cycles)
UINT32 op;
/* debugging */
- adsp2100.ppc = adsp2100.pc; /* copy PC to previous PC */
+ adsp->ppc = adsp->pc; /* copy PC to previous PC */
if (check_debugger)
- debugger_instruction_hook(Machine, adsp2100.pc);
+ debugger_instruction_hook(Machine, adsp->pc);
#if TRACK_HOTSPOTS
- pcbucket[adsp2100.pc & 0x3fff]++;
+ pcbucket[adsp->pc & 0x3fff]++;
#endif
/* instruction fetch */
- op = ROPCODE();
+ op = ROPCODE(adsp);
/* advance to the next instruction */
- if (adsp2100.pc != adsp2100.loop)
- adsp2100.pc++;
+ if (adsp->pc != adsp->loop)
+ adsp->pc++;
/* handle looping */
else
{
/* condition not met, keep looping */
- if (CONDITION(adsp2100.loop_condition))
- adsp2100.pc = pc_stack_top();
+ if (CONDITION(adsp, adsp->loop_condition))
+ adsp->pc = pc_stack_top(adsp);
/* condition met; pop the PC and loop stacks and fall through */
else
{
- loop_stack_pop();
- pc_stack_pop_val();
- adsp2100.pc++;
+ loop_stack_pop(adsp);
+ pc_stack_pop_val(adsp);
+ adsp->pc++;
}
}
@@ -989,12 +975,12 @@ static int adsp2100_execute(int cycles)
/* 00000000 0xxxxxxx xxxxxxxx dst = IO(x) */
/* 00000000 1xxxxxxx xxxxxxxx IO(x) = dst */
/* ADSP-218x only */
- if (chip_type >= CHIP_TYPE_ADSP2181)
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2181)
{
if ((op & 0x008000) == 0x000000)
- WRITE_REG(0, op & 15, RWORD_IO((op >> 4) & 0x7ff));
+ WRITE_REG(adsp, 0, op & 15, RWORD_IO((op >> 4) & 0x7ff));
else
- WWORD_IO((op >> 4) & 0x7ff, READ_REG(0, op & 15));
+ WWORD_IO((op >> 4) & 0x7ff, READ_REG(adsp, 0, op & 15));
}
break;
case 0x02:
@@ -1003,23 +989,23 @@ static int adsp2100_execute(int cycles)
/* 00000010 10000000 0000xxxx idle (n) */
if (op & 0x008000)
{
- adsp2100.idle = 1;
- adsp2100_icount = 0;
+ adsp->idle = 1;
+ adsp->icount = 0;
}
else
{
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
- if (op & 0x020) adsp2100.flagout = 0;
- if (op & 0x010) adsp2100.flagout ^= 1;
- if (chip_type >= CHIP_TYPE_ADSP2101)
+ if (op & 0x020) adsp->flagout = 0;
+ if (op & 0x010) adsp->flagout ^= 1;
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2101)
{
- if (op & 0x080) adsp2100.fl0 = 0;
- if (op & 0x040) adsp2100.fl0 ^= 1;
- if (op & 0x200) adsp2100.fl1 = 0;
- if (op & 0x100) adsp2100.fl1 ^= 1;
- if (op & 0x800) adsp2100.fl2 = 0;
- if (op & 0x400) adsp2100.fl2 ^= 1;
+ if (op & 0x080) adsp->fl0 = 0;
+ if (op & 0x040) adsp->fl0 ^= 1;
+ if (op & 0x200) adsp->fl1 = 0;
+ if (op & 0x100) adsp->fl1 ^= 1;
+ if (op & 0x800) adsp->fl2 = 0;
+ if (op & 0x400) adsp->fl2 ^= 1;
}
}
}
@@ -1028,44 +1014,44 @@ static int adsp2100_execute(int cycles)
/* 00000011 xxxxxxxx xxxxxxxx call or jump on flag in */
if (op & 0x000002)
{
- if (adsp2100.flagin)
+ if (adsp->flagin)
{
if (op & 0x000001)
- pc_stack_push();
- adsp2100.pc = ((op >> 4) & 0x0fff) | ((op << 10) & 0x3000);
- CHANGEPC();
+ pc_stack_push(adsp);
+ adsp->pc = ((op >> 4) & 0x0fff) | ((op << 10) & 0x3000);
+ CHANGEPC(adsp);
}
}
else
{
- if (!adsp2100.flagin)
+ if (!adsp->flagin)
{
if (op & 0x000001)
- pc_stack_push();
- adsp2100.pc = ((op >> 4) & 0x0fff) | ((op << 10) & 0x3000);
- CHANGEPC();
+ pc_stack_push(adsp);
+ adsp->pc = ((op >> 4) & 0x0fff) | ((op << 10) & 0x3000);
+ CHANGEPC(adsp);
}
}
break;
case 0x04:
/* 00000100 00000000 000xxxxx stack control */
- if (op & 0x000010) pc_stack_pop_val();
- if (op & 0x000008) loop_stack_pop();
- if (op & 0x000004) cntr_stack_pop();
+ if (op & 0x000010) pc_stack_pop_val(adsp);
+ if (op & 0x000008) loop_stack_pop(adsp);
+ if (op & 0x000004) cntr_stack_pop(adsp);
if (op & 0x000002)
{
- if (op & 0x000001) stat_stack_pop();
- else stat_stack_push();
+ if (op & 0x000001) stat_stack_pop(adsp);
+ else stat_stack_push(adsp);
}
break;
case 0x05:
/* 00000101 00000000 00000000 saturate MR */
if (GET_MV)
{
- if (adsp2100.core.mr.mrx.mr2.u & 0x80)
- adsp2100.core.mr.mrx.mr2.u = 0xffff, adsp2100.core.mr.mrx.mr1.u = 0x8000, adsp2100.core.mr.mrx.mr0.u = 0x0000;
+ if (adsp->core.mr.mrx.mr2.u & 0x80)
+ adsp->core.mr.mrx.mr2.u = 0xffff, adsp->core.mr.mrx.mr1.u = 0x8000, adsp->core.mr.mrx.mr0.u = 0x0000;
else
- adsp2100.core.mr.mrx.mr2.u = 0x0000, adsp2100.core.mr.mrx.mr1.u = 0x7fff, adsp2100.core.mr.mrx.mr0.u = 0xffff;
+ adsp->core.mr.mrx.mr2.u = 0x0000, adsp->core.mr.mrx.mr1.u = 0x7fff, adsp->core.mr.mrx.mr0.u = 0xffff;
}
break;
case 0x06:
@@ -1074,13 +1060,13 @@ static int adsp2100_execute(int cycles)
int xop = (op >> 8) & 7;
int yop = (op >> 11) & 3;
- xop = ALU_GETXREG_UNSIGNED(xop);
- yop = ALU_GETYREG_UNSIGNED(yop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
+ yop = ALU_GETYREG_UNSIGNED(adsp, yop);
temp = xop ^ yop;
- adsp2100.astat = (adsp2100.astat & ~QFLAG) | ((temp >> 10) & QFLAG);
- adsp2100.core.af.u = (yop << 1) | (adsp2100.core.ay0.u >> 15);
- adsp2100.core.ay0.u = (adsp2100.core.ay0.u << 1) | (temp >> 15);
+ adsp->astat = (adsp->astat & ~QFLAG) | ((temp >> 10) & QFLAG);
+ adsp->core.af.u = (yop << 1) | (adsp->core.ay0.u >> 15);
+ adsp->core.ay0.u = (adsp->core.ay0.u << 1) | (temp >> 15);
}
break;
case 0x07:
@@ -1089,17 +1075,17 @@ static int adsp2100_execute(int cycles)
int xop = (op >> 8) & 7;
int res;
- xop = ALU_GETXREG_UNSIGNED(xop);
+ xop = ALU_GETXREG_UNSIGNED(adsp, xop);
if (GET_Q)
- res = adsp2100.core.af.u + xop;
+ res = adsp->core.af.u + xop;
else
- res = adsp2100.core.af.u - xop;
+ res = adsp->core.af.u - xop;
temp = res ^ xop;
- adsp2100.astat = (adsp2100.astat & ~QFLAG) | ((temp >> 10) & QFLAG);
- adsp2100.core.af.u = (res << 1) | (adsp2100.core.ay0.u >> 15);
- adsp2100.core.ay0.u = (adsp2100.core.ay0.u << 1) | ((~temp >> 15) & 0x0001);
+ adsp->astat = (adsp->astat & ~QFLAG) | ((temp >> 10) & QFLAG);
+ adsp->core.af.u = (res << 1) | (adsp->core.ay0.u >> 15);
+ adsp->core.ay0.u = (adsp->core.ay0.u << 1) | ((~temp >> 15) & 0x0001);
}
break;
case 0x08:
@@ -1108,33 +1094,33 @@ static int adsp2100_execute(int cycles)
case 0x09:
/* 00001001 00000000 000xxxxx modify address register */
temp = (op >> 2) & 4;
- modify_address(temp + ((op >> 2) & 3), temp + (op & 3));
+ modify_address(adsp, temp + ((op >> 2) & 3), temp + (op & 3));
break;
case 0x0a:
/* 00001010 00000000 000xxxxx conditional return */
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
- pc_stack_pop();
+ pc_stack_pop(adsp);
/* RTI case */
if (op & 0x000010)
- stat_stack_pop();
+ stat_stack_pop(adsp);
}
break;
case 0x0b:
/* 00001011 00000000 xxxxxxxx conditional jump (indirect address) */
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
if (op & 0x000010)
- pc_stack_push();
- adsp2100.pc = adsp2100.i[4 + ((op >> 6) & 3)] & 0x3fff;
- CHANGEPC();
+ pc_stack_push(adsp);
+ adsp->pc = adsp->i[4 + ((op >> 6) & 3)] & 0x3fff;
+ CHANGEPC(adsp);
}
break;
case 0x0c:
/* 00001100 xxxxxxxx xxxxxxxx mode control */
- temp = adsp2100.mstat;
- if (chip_type >= CHIP_TYPE_ADSP2101)
+ temp = adsp->mstat;
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2101)
{
if (op & 0x000008) temp = (temp & ~MSTAT_GOMODE) | ((op << 5) & MSTAT_GOMODE);
if (op & 0x002000) temp = (temp & ~MSTAT_INTEGER) | ((op >> 8) & MSTAT_INTEGER);
@@ -1144,540 +1130,540 @@ static int adsp2100_execute(int cycles)
if (op & 0x000080) temp = (temp & ~MSTAT_REVERSE) | ((op >> 5) & MSTAT_REVERSE);
if (op & 0x000200) temp = (temp & ~MSTAT_STICKYV) | ((op >> 6) & MSTAT_STICKYV);
if (op & 0x000800) temp = (temp & ~MSTAT_SATURATE) | ((op >> 7) & MSTAT_SATURATE);
- set_mstat(temp);
+ set_mstat(adsp, temp);
break;
case 0x0d:
/* 00001101 0000xxxx xxxxxxxx internal data move */
- WRITE_REG((op >> 10) & 3, (op >> 4) & 15, READ_REG((op >> 8) & 3, op & 15));
+ WRITE_REG(adsp, (op >> 10) & 3, (op >> 4) & 15, READ_REG(adsp, (op >> 8) & 3, op & 15));
break;
case 0x0e:
/* 00001110 0xxxxxxx xxxxxxxx conditional shift */
- if (CONDITION(op & 15)) shift_op(op);
+ if (CONDITION(adsp, op & 15)) shift_op(adsp, op);
break;
case 0x0f:
/* 00001111 0xxxxxxx xxxxxxxx shift immediate */
- shift_op_imm(op);
+ shift_op_imm(adsp, op);
break;
case 0x10:
/* 00010000 0xxxxxxx xxxxxxxx shift with internal data register move */
- shift_op(op);
- temp = READ_REG(0, op & 15);
- WRITE_REG(0, (op >> 4) & 15, temp);
+ shift_op(adsp, op);
+ temp = READ_REG(adsp, 0, op & 15);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, temp);
break;
case 0x11:
/* 00010001 xxxxxxxx xxxxxxxx shift with pgm memory read/write */
if (op & 0x8000)
{
- pgm_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- shift_op(op);
+ pgm_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ shift_op(adsp, op);
}
else
{
- shift_op(op);
- WRITE_REG(0, (op >> 4) & 15, pgm_read_dag2(op));
+ shift_op(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, pgm_read_dag2(adsp, op));
}
break;
case 0x12:
/* 00010010 xxxxxxxx xxxxxxxx shift with data memory read/write DAG1 */
if (op & 0x8000)
{
- data_write_dag1(op, READ_REG(0, (op >> 4) & 15));
- shift_op(op);
+ data_write_dag1(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ shift_op(adsp, op);
}
else
{
- shift_op(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag1(op));
+ shift_op(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag1(adsp, op));
}
break;
case 0x13:
/* 00010011 xxxxxxxx xxxxxxxx shift with data memory read/write DAG2 */
if (op & 0x8000)
{
- data_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- shift_op(op);
+ data_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ shift_op(adsp, op);
}
else
{
- shift_op(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag2(op));
+ shift_op(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag2(adsp, op));
}
break;
case 0x14: case 0x15: case 0x16: case 0x17:
/* 000101xx xxxxxxxx xxxxxxxx do until */
- loop_stack_push(op & 0x3ffff);
- pc_stack_push();
+ loop_stack_push(adsp, op & 0x3ffff);
+ pc_stack_push(adsp);
break;
case 0x18: case 0x19: case 0x1a: case 0x1b:
/* 000110xx xxxxxxxx xxxxxxxx conditional jump (immediate addr) */
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
- adsp2100.pc = (op >> 4) & 0x3fff;
- CHANGEPC();
+ adsp->pc = (op >> 4) & 0x3fff;
+ CHANGEPC(adsp);
/* check for a busy loop */
- if (adsp2100.pc == adsp2100.ppc)
- adsp2100_icount = 0;
+ if (adsp->pc == adsp->ppc)
+ adsp->icount = 0;
}
break;
case 0x1c: case 0x1d: case 0x1e: case 0x1f:
/* 000111xx xxxxxxxx xxxxxxxx conditional call (immediate addr) */
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
- pc_stack_push();
- adsp2100.pc = (op >> 4) & 0x3fff;
- CHANGEPC();
+ pc_stack_push(adsp);
+ adsp->pc = (op >> 4) & 0x3fff;
+ CHANGEPC(adsp);
}
break;
case 0x20: case 0x21:
/* 0010000x xxxxxxxx xxxxxxxx conditional MAC to MR */
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
- if (chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x0018f0) == 0x000010)
- mac_op_mr_xop(op);
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x0018f0) == 0x000010)
+ mac_op_mr_xop(adsp, op);
else
- mac_op_mr(op);
+ mac_op_mr(adsp, op);
}
break;
case 0x22: case 0x23:
/* 0010001x xxxxxxxx xxxxxxxx conditional ALU to AR */
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
- if (chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x000010) == 0x000010)
- alu_op_ar_const(op);
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x000010) == 0x000010)
+ alu_op_ar_const(adsp, op);
else
- alu_op_ar(op);
+ alu_op_ar(adsp, op);
}
break;
case 0x24: case 0x25:
/* 0010010x xxxxxxxx xxxxxxxx conditional MAC to MF */
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
- if (chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x0018f0) == 0x000010)
- mac_op_mf_xop(op);
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x0018f0) == 0x000010)
+ mac_op_mf_xop(adsp, op);
else
- mac_op_mf(op);
+ mac_op_mf(adsp, op);
}
break;
case 0x26: case 0x27:
/* 0010011x xxxxxxxx xxxxxxxx conditional ALU to AF */
- if (CONDITION(op & 15))
+ if (CONDITION(adsp, op & 15))
{
- if (chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x000010) == 0x000010)
- alu_op_af_const(op);
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x000010) == 0x000010)
+ alu_op_af_const(adsp, op);
else
- alu_op_af(op);
+ alu_op_af(adsp, op);
}
break;
case 0x28: case 0x29:
/* 0010100x xxxxxxxx xxxxxxxx MAC to MR with internal data register move */
- temp = READ_REG(0, op & 15);
- mac_op_mr(op);
- WRITE_REG(0, (op >> 4) & 15, temp);
+ temp = READ_REG(adsp, 0, op & 15);
+ mac_op_mr(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, temp);
break;
case 0x2a: case 0x2b:
/* 0010101x xxxxxxxx xxxxxxxx ALU to AR with internal data register move */
- if (chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x0000ff) == 0x0000aa)
- alu_op_none(op);
+ if (adsp->chip_type >= CHIP_TYPE_ADSP2181 && (op & 0x0000ff) == 0x0000aa)
+ alu_op_none(adsp, op);
else
{
- temp = READ_REG(0, op & 15);
- alu_op_ar(op);
- WRITE_REG(0, (op >> 4) & 15, temp);
+ temp = READ_REG(adsp, 0, op & 15);
+ alu_op_ar(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, temp);
}
break;
case 0x2c: case 0x2d:
/* 0010110x xxxxxxxx xxxxxxxx MAC to MF with internal data register move */
- temp = READ_REG(0, op & 15);
- mac_op_mf(op);
- WRITE_REG(0, (op >> 4) & 15, temp);
+ temp = READ_REG(adsp, 0, op & 15);
+ mac_op_mf(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, temp);
break;
case 0x2e: case 0x2f:
/* 0010111x xxxxxxxx xxxxxxxx ALU to AF with internal data register move */
- temp = READ_REG(0, op & 15);
- alu_op_af(op);
- WRITE_REG(0, (op >> 4) & 15, temp);
+ temp = READ_REG(adsp, 0, op & 15);
+ alu_op_af(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, temp);
break;
case 0x30: case 0x31: case 0x32: case 0x33:
/* 001100xx xxxxxxxx xxxxxxxx load non-data register immediate (group 0) */
- WRITE_REG(0, op & 15, (INT32)(op << 14) >> 18);
+ WRITE_REG(adsp, 0, op & 15, (INT32)(op << 14) >> 18);
break;
case 0x34: case 0x35: case 0x36: case 0x37:
/* 001101xx xxxxxxxx xxxxxxxx load non-data register immediate (group 1) */
- WRITE_REG(1, op & 15, (INT32)(op << 14) >> 18);
+ WRITE_REG(adsp, 1, op & 15, (INT32)(op << 14) >> 18);
break;
case 0x38: case 0x39: case 0x3a: case 0x3b:
/* 001110xx xxxxxxxx xxxxxxxx load non-data register immediate (group 2) */
- WRITE_REG(2, op & 15, (INT32)(op << 14) >> 18);
+ WRITE_REG(adsp, 2, op & 15, (INT32)(op << 14) >> 18);
break;
case 0x3c: case 0x3d: case 0x3e: case 0x3f:
/* 001111xx xxxxxxxx xxxxxxxx load non-data register immediate (group 3) */
- WRITE_REG(3, op & 15, (INT32)(op << 14) >> 18);
+ WRITE_REG(adsp, 3, op & 15, (INT32)(op << 14) >> 18);
break;
case 0x40: case 0x41: case 0x42: case 0x43: case 0x44: case 0x45: case 0x46: case 0x47:
case 0x48: case 0x49: case 0x4a: case 0x4b: case 0x4c: case 0x4d: case 0x4e: case 0x4f:
/* 0100xxxx xxxxxxxx xxxxxxxx load data register immediate */
- WRITE_REG(0, op & 15, (op >> 4) & 0xffff);
+ WRITE_REG(adsp, 0, op & 15, (op >> 4) & 0xffff);
break;
case 0x50: case 0x51:
/* 0101000x xxxxxxxx xxxxxxxx MAC to MR with pgm memory read */
- mac_op_mr(op);
- WRITE_REG(0, (op >> 4) & 15, pgm_read_dag2(op));
+ mac_op_mr(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, pgm_read_dag2(adsp, op));
break;
case 0x52: case 0x53:
/* 0101001x xxxxxxxx xxxxxxxx ALU to AR with pgm memory read */
- alu_op_ar(op);
- WRITE_REG(0, (op >> 4) & 15, pgm_read_dag2(op));
+ alu_op_ar(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, pgm_read_dag2(adsp, op));
break;
case 0x54: case 0x55:
/* 0101010x xxxxxxxx xxxxxxxx MAC to MF with pgm memory read */
- mac_op_mf(op);
- WRITE_REG(0, (op >> 4) & 15, pgm_read_dag2(op));
+ mac_op_mf(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, pgm_read_dag2(adsp, op));
break;
case 0x56: case 0x57:
/* 0101011x xxxxxxxx xxxxxxxx ALU to AF with pgm memory read */
- alu_op_af(op);
- WRITE_REG(0, (op >> 4) & 15, pgm_read_dag2(op));
+ alu_op_af(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, pgm_read_dag2(adsp, op));
break;
case 0x58: case 0x59:
/* 0101100x xxxxxxxx xxxxxxxx MAC to MR with pgm memory write */
- pgm_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- mac_op_mr(op);
+ pgm_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ mac_op_mr(adsp, op);
break;
case 0x5a: case 0x5b:
/* 0101101x xxxxxxxx xxxxxxxx ALU to AR with pgm memory write */
- pgm_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- alu_op_ar(op);
+ pgm_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ alu_op_ar(adsp, op);
break;
case 0x5c: case 0x5d:
/* 0101110x xxxxxxxx xxxxxxxx ALU to MR with pgm memory write */
- pgm_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- mac_op_mf(op);
+ pgm_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ mac_op_mf(adsp, op);
break;
case 0x5e: case 0x5f:
/* 0101111x xxxxxxxx xxxxxxxx ALU to MF with pgm memory write */
- pgm_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- alu_op_af(op);
+ pgm_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ alu_op_af(adsp, op);
break;
case 0x60: case 0x61:
/* 0110000x xxxxxxxx xxxxxxxx MAC to MR with data memory read DAG1 */
- mac_op_mr(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag1(op));
+ mac_op_mr(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag1(adsp, op));
break;
case 0x62: case 0x63:
/* 0110001x xxxxxxxx xxxxxxxx ALU to AR with data memory read DAG1 */
- alu_op_ar(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag1(op));
+ alu_op_ar(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag1(adsp, op));
break;
case 0x64: case 0x65:
/* 0110010x xxxxxxxx xxxxxxxx MAC to MF with data memory read DAG1 */
- mac_op_mf(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag1(op));
+ mac_op_mf(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag1(adsp, op));
break;
case 0x66: case 0x67:
/* 0110011x xxxxxxxx xxxxxxxx ALU to AF with data memory read DAG1 */
- alu_op_af(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag1(op));
+ alu_op_af(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag1(adsp, op));
break;
case 0x68: case 0x69:
/* 0110100x xxxxxxxx xxxxxxxx MAC to MR with data memory write DAG1 */
- data_write_dag1(op, READ_REG(0, (op >> 4) & 15));
- mac_op_mr(op);
+ data_write_dag1(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ mac_op_mr(adsp, op);
break;
case 0x6a: case 0x6b:
/* 0110101x xxxxxxxx xxxxxxxx ALU to AR with data memory write DAG1 */
- data_write_dag1(op, READ_REG(0, (op >> 4) & 15));
- alu_op_ar(op);
+ data_write_dag1(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ alu_op_ar(adsp, op);
break;
case 0x6c: case 0x6d:
/* 0111110x xxxxxxxx xxxxxxxx MAC to MF with data memory write DAG1 */
- data_write_dag1(op, READ_REG(0, (op >> 4) & 15));
- mac_op_mf(op);
+ data_write_dag1(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ mac_op_mf(adsp, op);
break;
case 0x6e: case 0x6f:
/* 0111111x xxxxxxxx xxxxxxxx ALU to AF with data memory write DAG1 */
- data_write_dag1(op, READ_REG(0, (op >> 4) & 15));
- alu_op_af(op);
+ data_write_dag1(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ alu_op_af(adsp, op);
break;
case 0x70: case 0x71:
/* 0111000x xxxxxxxx xxxxxxxx MAC to MR with data memory read DAG2 */
- mac_op_mr(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag2(op));
+ mac_op_mr(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag2(adsp, op));
break;
case 0x72: case 0x73:
/* 0111001x xxxxxxxx xxxxxxxx ALU to AR with data memory read DAG2 */
- alu_op_ar(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag2(op));
+ alu_op_ar(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag2(adsp, op));
break;
case 0x74: case 0x75:
/* 0111010x xxxxxxxx xxxxxxxx MAC to MF with data memory read DAG2 */
- mac_op_mf(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag2(op));
+ mac_op_mf(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag2(adsp, op));
break;
case 0x76: case 0x77:
/* 0111011x xxxxxxxx xxxxxxxx ALU to AF with data memory read DAG2 */
- alu_op_af(op);
- WRITE_REG(0, (op >> 4) & 15, data_read_dag2(op));
+ alu_op_af(adsp, op);
+ WRITE_REG(adsp, 0, (op >> 4) & 15, data_read_dag2(adsp, op));
break;
case 0x78: case 0x79:
/* 0111100x xxxxxxxx xxxxxxxx MAC to MR with data memory write DAG2 */
- data_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- mac_op_mr(op);
+ data_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ mac_op_mr(adsp, op);
break;
case 0x7a: case 0x7b:
/* 0111101x xxxxxxxx xxxxxxxx ALU to AR with data memory write DAG2 */
- data_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- alu_op_ar(op);
+ data_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ alu_op_ar(adsp, op);
break;
case 0x7c: case 0x7d:
/* 0111110x xxxxxxxx xxxxxxxx MAC to MF with data memory write DAG2 */
- data_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- mac_op_mf(op);
+ data_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ mac_op_mf(adsp, op);
break;
case 0x7e: case 0x7f:
/* 0111111x xxxxxxxx xxxxxxxx ALU to AF with data memory write DAG2 */
- data_write_dag2(op, READ_REG(0, (op >> 4) & 15));
- alu_op_af(op);
+ data_write_dag2(adsp, op, READ_REG(adsp, 0, (op >> 4) & 15));
+ alu_op_af(adsp, op);
break;
case 0x80: case 0x81: case 0x82: case 0x83:
/* 100000xx xxxxxxxx xxxxxxxx read data memory (immediate addr) to reg group 0 */
- WRITE_REG(0, op & 15, RWORD_DATA((op >> 4) & 0x3fff));
+ WRITE_REG(adsp, 0, op & 15, RWORD_DATA((op >> 4) & 0x3fff));
break;
case 0x84: case 0x85: case 0x86: case 0x87:
/* 100001xx xxxxxxxx xxxxxxxx read data memory (immediate addr) to reg group 1 */
- WRITE_REG(1, op & 15, RWORD_DATA((op >> 4) & 0x3fff));
+ WRITE_REG(adsp, 1, op & 15, RWORD_DATA((op >> 4) & 0x3fff));
break;
case 0x88: case 0x89: case 0x8a: case 0x8b:
/* 100010xx xxxxxxxx xxxxxxxx read data memory (immediate addr) to reg group 2 */
- WRITE_REG(2, op & 15, RWORD_DATA((op >> 4) & 0x3fff));
+ WRITE_REG(adsp, 2, op & 15, RWORD_DATA((op >> 4) & 0x3fff));
break;
case 0x8c: case 0x8d: case 0x8e: case 0x8f:
/* 100011xx xxxxxxxx xxxxxxxx read data memory (immediate addr) to reg group 3 */
- WRITE_REG(3, op & 15, RWORD_DATA((op >> 4) & 0x3fff));
+ WRITE_REG(adsp, 3, op & 15, RWORD_DATA((op >> 4) & 0x3fff));
break;
case 0x90: case 0x91: case 0x92: case 0x93:
/* 1001xxxx xxxxxxxx xxxxxxxx write data memory (immediate addr) from reg group 0 */
- WWORD_DATA((op >> 4) & 0x3fff, READ_REG(0, op & 15));
+ WWORD_DATA((op >> 4) & 0x3fff, READ_REG(adsp, 0, op & 15));
break;
case 0x94: case 0x95: case 0x96: case 0x97:
/* 1001xxxx xxxxxxxx xxxxxxxx write data memory (immediate addr) from reg group 1 */
- WWORD_DATA((op >> 4) & 0x3fff, READ_REG(1, op & 15));
+ WWORD_DATA((op >> 4) & 0x3fff, READ_REG(adsp, 1, op & 15));
break;
case 0x98: case 0x99: case 0x9a: case 0x9b:
/* 1001xxxx xxxxxxxx xxxxxxxx write data memory (immediate addr) from reg group 2 */
- WWORD_DATA((op >> 4) & 0x3fff, READ_REG(2, op & 15));
+ WWORD_DATA((op >> 4) & 0x3fff, READ_REG(adsp, 2, op & 15));
break;
case 0x9c: case 0x9d: case 0x9e: case 0x9f:
/* 1001xxxx xxxxxxxx xxxxxxxx write data memory (immediate addr) from reg group 3 */
- WWORD_DATA((op >> 4) & 0x3fff, READ_REG(3, op & 15));
+ WWORD_DATA((op >> 4) & 0x3fff, READ_REG(adsp, 3, op & 15));
break;
case 0xa0: case 0xa1: case 0xa2: case 0xa3: case 0xa4: case 0xa5: case 0xa6: case 0xa7:
case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xac: case 0xad: case 0xae: case 0xaf:
/* 1010xxxx xxxxxxxx xxxxxxxx data memory write (immediate) DAG1 */
- data_write_dag1(op, (op >> 4) & 0xffff);
+ data_write_dag1(adsp, op, (op >> 4) & 0xffff);
break;
case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb4: case 0xb5: case 0xb6: case 0xb7:
case 0xb8: case 0xb9: case 0xba: case 0xbb: case 0xbc: case 0xbd: case 0xbe: case 0xbf:
/* 1011xxxx xxxxxxxx xxxxxxxx data memory write (immediate) DAG2 */
- data_write_dag2(op, (op >> 4) & 0xffff);
+ data_write_dag2(adsp, op, (op >> 4) & 0xffff);
break;
case 0xc0: case 0xc1:
/* 1100000x xxxxxxxx xxxxxxxx MAC to MR with data read to AX0 & pgm read to AY0 */
- mac_op_mr(op);
- adsp2100.core.ax0.u = data_read_dag1(op);
- adsp2100.core.ay0.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.ax0.u = data_read_dag1(adsp, op);
+ adsp->core.ay0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xc2: case 0xc3:
/* 1100001x xxxxxxxx xxxxxxxx ALU to AR with data read to AX0 & pgm read to AY0 */
- alu_op_ar(op);
- adsp2100.core.ax0.u = data_read_dag1(op);
- adsp2100.core.ay0.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.ax0.u = data_read_dag1(adsp, op);
+ adsp->core.ay0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xc4: case 0xc5:
/* 1100010x xxxxxxxx xxxxxxxx MAC to MR with data read to AX1 & pgm read to AY0 */
- mac_op_mr(op);
- adsp2100.core.ax1.u = data_read_dag1(op);
- adsp2100.core.ay0.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.ax1.u = data_read_dag1(adsp, op);
+ adsp->core.ay0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xc6: case 0xc7:
/* 1100011x xxxxxxxx xxxxxxxx ALU to AR with data read to AX1 & pgm read to AY0 */
- alu_op_ar(op);
- adsp2100.core.ax1.u = data_read_dag1(op);
- adsp2100.core.ay0.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.ax1.u = data_read_dag1(adsp, op);
+ adsp->core.ay0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xc8: case 0xc9:
/* 1100100x xxxxxxxx xxxxxxxx MAC to MR with data read to MX0 & pgm read to AY0 */
- mac_op_mr(op);
- adsp2100.core.mx0.u = data_read_dag1(op);
- adsp2100.core.ay0.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.mx0.u = data_read_dag1(adsp, op);
+ adsp->core.ay0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xca: case 0xcb:
/* 1100101x xxxxxxxx xxxxxxxx ALU to AR with data read to MX0 & pgm read to AY0 */
- alu_op_ar(op);
- adsp2100.core.mx0.u = data_read_dag1(op);
- adsp2100.core.ay0.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.mx0.u = data_read_dag1(adsp, op);
+ adsp->core.ay0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xcc: case 0xcd:
/* 1100110x xxxxxxxx xxxxxxxx MAC to MR with data read to MX1 & pgm read to AY0 */
- mac_op_mr(op);
- adsp2100.core.mx1.u = data_read_dag1(op);
- adsp2100.core.ay0.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.mx1.u = data_read_dag1(adsp, op);
+ adsp->core.ay0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xce: case 0xcf:
/* 1100111x xxxxxxxx xxxxxxxx ALU to AR with data read to MX1 & pgm read to AY0 */
- alu_op_ar(op);
- adsp2100.core.mx1.u = data_read_dag1(op);
- adsp2100.core.ay0.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.mx1.u = data_read_dag1(adsp, op);
+ adsp->core.ay0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xd0: case 0xd1:
/* 1101000x xxxxxxxx xxxxxxxx MAC to MR with data read to AX0 & pgm read to AY1 */
- mac_op_mr(op);
- adsp2100.core.ax0.u = data_read_dag1(op);
- adsp2100.core.ay1.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.ax0.u = data_read_dag1(adsp, op);
+ adsp->core.ay1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xd2: case 0xd3:
/* 1101001x xxxxxxxx xxxxxxxx ALU to AR with data read to AX0 & pgm read to AY1 */
- alu_op_ar(op);
- adsp2100.core.ax0.u = data_read_dag1(op);
- adsp2100.core.ay1.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.ax0.u = data_read_dag1(adsp, op);
+ adsp->core.ay1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xd4: case 0xd5:
/* 1101010x xxxxxxxx xxxxxxxx MAC to MR with data read to AX1 & pgm read to AY1 */
- mac_op_mr(op);
- adsp2100.core.ax1.u = data_read_dag1(op);
- adsp2100.core.ay1.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.ax1.u = data_read_dag1(adsp, op);
+ adsp->core.ay1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xd6: case 0xd7:
/* 1101011x xxxxxxxx xxxxxxxx ALU to AR with data read to AX1 & pgm read to AY1 */
- alu_op_ar(op);
- adsp2100.core.ax1.u = data_read_dag1(op);
- adsp2100.core.ay1.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.ax1.u = data_read_dag1(adsp, op);
+ adsp->core.ay1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xd8: case 0xd9:
/* 1101100x xxxxxxxx xxxxxxxx MAC to MR with data read to MX0 & pgm read to AY1 */
- mac_op_mr(op);
- adsp2100.core.mx0.u = data_read_dag1(op);
- adsp2100.core.ay1.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.mx0.u = data_read_dag1(adsp, op);
+ adsp->core.ay1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xda: case 0xdb:
/* 1101101x xxxxxxxx xxxxxxxx ALU to AR with data read to MX0 & pgm read to AY1 */
- alu_op_ar(op);
- adsp2100.core.mx0.u = data_read_dag1(op);
- adsp2100.core.ay1.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.mx0.u = data_read_dag1(adsp, op);
+ adsp->core.ay1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xdc: case 0xdd:
/* 1101110x xxxxxxxx xxxxxxxx MAC to MR with data read to MX1 & pgm read to AY1 */
- mac_op_mr(op);
- adsp2100.core.mx1.u = data_read_dag1(op);
- adsp2100.core.ay1.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.mx1.u = data_read_dag1(adsp, op);
+ adsp->core.ay1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xde: case 0xdf:
/* 1101111x xxxxxxxx xxxxxxxx ALU to AR with data read to MX1 & pgm read to AY1 */
- alu_op_ar(op);
- adsp2100.core.mx1.u = data_read_dag1(op);
- adsp2100.core.ay1.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.mx1.u = data_read_dag1(adsp, op);
+ adsp->core.ay1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xe0: case 0xe1:
/* 1110000x xxxxxxxx xxxxxxxx MAC to MR with data read to AX0 & pgm read to MY0 */
- mac_op_mr(op);
- adsp2100.core.ax0.u = data_read_dag1(op);
- adsp2100.core.my0.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.ax0.u = data_read_dag1(adsp, op);
+ adsp->core.my0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xe2: case 0xe3:
/* 1110001x xxxxxxxx xxxxxxxx ALU to AR with data read to AX0 & pgm read to MY0 */
- alu_op_ar(op);
- adsp2100.core.ax0.u = data_read_dag1(op);
- adsp2100.core.my0.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.ax0.u = data_read_dag1(adsp, op);
+ adsp->core.my0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xe4: case 0xe5:
/* 1110010x xxxxxxxx xxxxxxxx MAC to MR with data read to AX1 & pgm read to MY0 */
- mac_op_mr(op);
- adsp2100.core.ax1.u = data_read_dag1(op);
- adsp2100.core.my0.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.ax1.u = data_read_dag1(adsp, op);
+ adsp->core.my0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xe6: case 0xe7:
/* 1110011x xxxxxxxx xxxxxxxx ALU to AR with data read to AX1 & pgm read to MY0 */
- alu_op_ar(op);
- adsp2100.core.ax1.u = data_read_dag1(op);
- adsp2100.core.my0.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.ax1.u = data_read_dag1(adsp, op);
+ adsp->core.my0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xe8: case 0xe9:
/* 1110100x xxxxxxxx xxxxxxxx MAC to MR with data read to MX0 & pgm read to MY0 */
- mac_op_mr(op);
- adsp2100.core.mx0.u = data_read_dag1(op);
- adsp2100.core.my0.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.mx0.u = data_read_dag1(adsp, op);
+ adsp->core.my0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xea: case 0xeb:
/* 1110101x xxxxxxxx xxxxxxxx ALU to AR with data read to MX0 & pgm read to MY0 */
- alu_op_ar(op);
- adsp2100.core.mx0.u = data_read_dag1(op);
- adsp2100.core.my0.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.mx0.u = data_read_dag1(adsp, op);
+ adsp->core.my0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xec: case 0xed:
/* 1110110x xxxxxxxx xxxxxxxx MAC to MR with data read to MX1 & pgm read to MY0 */
- mac_op_mr(op);
- adsp2100.core.mx1.u = data_read_dag1(op);
- adsp2100.core.my0.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.mx1.u = data_read_dag1(adsp, op);
+ adsp->core.my0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xee: case 0xef:
/* 1110111x xxxxxxxx xxxxxxxx ALU to AR with data read to MX1 & pgm read to MY0 */
- alu_op_ar(op);
- adsp2100.core.mx1.u = data_read_dag1(op);
- adsp2100.core.my0.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.mx1.u = data_read_dag1(adsp, op);
+ adsp->core.my0.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xf0: case 0xf1:
/* 1111000x xxxxxxxx xxxxxxxx MAC to MR with data read to AX0 & pgm read to MY1 */
- mac_op_mr(op);
- adsp2100.core.ax0.u = data_read_dag1(op);
- adsp2100.core.my1.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.ax0.u = data_read_dag1(adsp, op);
+ adsp->core.my1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xf2: case 0xf3:
/* 1111001x xxxxxxxx xxxxxxxx ALU to AR with data read to AX0 & pgm read to MY1 */
- alu_op_ar(op);
- adsp2100.core.ax0.u = data_read_dag1(op);
- adsp2100.core.my1.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.ax0.u = data_read_dag1(adsp, op);
+ adsp->core.my1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xf4: case 0xf5:
/* 1111010x xxxxxxxx xxxxxxxx MAC to MR with data read to AX1 & pgm read to MY1 */
- mac_op_mr(op);
- adsp2100.core.ax1.u = data_read_dag1(op);
- adsp2100.core.my1.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.ax1.u = data_read_dag1(adsp, op);
+ adsp->core.my1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xf6: case 0xf7:
/* 1111011x xxxxxxxx xxxxxxxx ALU to AR with data read to AX1 & pgm read to MY1 */
- alu_op_ar(op);
- adsp2100.core.ax1.u = data_read_dag1(op);
- adsp2100.core.my1.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.ax1.u = data_read_dag1(adsp, op);
+ adsp->core.my1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xf8: case 0xf9:
/* 1111100x xxxxxxxx xxxxxxxx MAC to MR with data read to MX0 & pgm read to MY1 */
- mac_op_mr(op);
- adsp2100.core.mx0.u = data_read_dag1(op);
- adsp2100.core.my1.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.mx0.u = data_read_dag1(adsp, op);
+ adsp->core.my1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xfa: case 0xfb:
/* 1111101x xxxxxxxx xxxxxxxx ALU to AR with data read to MX0 & pgm read to MY1 */
- alu_op_ar(op);
- adsp2100.core.mx0.u = data_read_dag1(op);
- adsp2100.core.my1.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.mx0.u = data_read_dag1(adsp, op);
+ adsp->core.my1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xfc: case 0xfd:
/* 1111110x xxxxxxxx xxxxxxxx MAC to MR with data read to MX1 & pgm read to MY1 */
- mac_op_mr(op);
- adsp2100.core.mx1.u = data_read_dag1(op);
- adsp2100.core.my1.u = pgm_read_dag2(op >> 4);
+ mac_op_mr(adsp, op);
+ adsp->core.mx1.u = data_read_dag1(adsp, op);
+ adsp->core.my1.u = pgm_read_dag2(adsp, op >> 4);
break;
case 0xfe: case 0xff:
/* 1111111x xxxxxxxx xxxxxxxx ALU to AR with data read to MX1 & pgm read to MY1 */
- alu_op_ar(op);
- adsp2100.core.mx1.u = data_read_dag1(op);
- adsp2100.core.my1.u = pgm_read_dag2(op >> 4);
+ alu_op_ar(adsp, op);
+ adsp->core.mx1.u = data_read_dag1(adsp, op);
+ adsp->core.my1.u = pgm_read_dag2(adsp, op >> 4);
break;
}
- adsp2100_icount--;
- } while (adsp2100_icount > 0);
+ adsp->icount--;
+ } while (adsp->icount > 0);
- return cycles - adsp2100_icount;
+ return cycles - adsp->icount;
}
@@ -1686,7 +1672,7 @@ static int adsp2100_execute(int cycles)
DEBUGGER DEFINITIONS
***************************************************************************/
-extern offs_t adsp2100_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
+extern offs_t adsp21xx_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram);
@@ -1696,107 +1682,108 @@ extern offs_t adsp2100_dasm(char *buffer, offs_t pc, const UINT8 *oprom, const U
static void adsp21xx_set_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are set as 64-bit signed integers --- */
case CPUINFO_INT_PC:
- case CPUINFO_INT_REGISTER + ADSP2100_PC: adsp2100.pc = info->i; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_AX0: wr_ax0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_AX1: wr_ax1(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_AY0: wr_ay0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_AY1: wr_ay1(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_AR: wr_ar(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_AF: adsp2100.core.af.u = info->i; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_MX0: wr_mx0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_MX1: wr_mx1(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_MY0: wr_my0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_MY1: wr_my1(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR0: wr_mr0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR1: wr_mr1(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR2: wr_mr2(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_MF: adsp2100.core.mf.u = info->i; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_SI: wr_si(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_SE: wr_se(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_SB: wr_sb(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_SR0: wr_sr0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_SR1: wr_sr1(info->i); break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_AX0_SEC: adsp2100.alt.ax0.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AX1_SEC: adsp2100.alt.ax1.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AY0_SEC: adsp2100.alt.ay0.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AY1_SEC: adsp2100.alt.ay1.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AR_SEC: adsp2100.alt.ar.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AF_SEC: adsp2100.alt.af.u = info->i; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_MX0_SEC: adsp2100.alt.mx0.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MX1_SEC: adsp2100.alt.mx1.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MY0_SEC: adsp2100.alt.my0.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MY1_SEC: adsp2100.alt.my1.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR0_SEC: adsp2100.alt.mr.mrx.mr0.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR1_SEC: adsp2100.alt.mr.mrx.mr1.s = info->i; adsp2100.alt.mr.mrx.mr2.s = (INT16)info->i >> 15; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR2_SEC: adsp2100.alt.mr.mrx.mr2.s = (INT8)info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MF_SEC: adsp2100.alt.mf.u = info->i; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_SI_SEC: adsp2100.alt.si.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SE_SEC: adsp2100.alt.se.s = (INT8)info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SB_SEC: adsp2100.alt.sb.s = (INT32)(info->i << 27) >> 27; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SR0_SEC: adsp2100.alt.sr.srx.sr0.s = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SR1_SEC: adsp2100.alt.sr.srx.sr1.s = info->i; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_I0: wr_i0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_I1: wr_i1(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_I2: wr_i2(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_I3: wr_i3(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_I4: wr_i4(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_I5: wr_i5(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_I6: wr_i6(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_I7: wr_i7(info->i); break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_L0: wr_l0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_L1: wr_l1(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_L2: wr_l2(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_L3: wr_l3(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_L4: wr_l4(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_L5: wr_l5(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_L6: wr_l6(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_L7: wr_l7(info->i); break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_M0: wr_m0(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_M1: wr_m1(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_M2: wr_m2(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_M3: wr_m3(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_M4: wr_m4(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_M5: wr_m5(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_M6: wr_m6(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_M7: wr_m7(info->i); break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_PX: wr_px(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_CNTR: adsp2100.cntr = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_ASTAT: wr_astat(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_SSTAT: wr_sstat(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_MSTAT: wr_mstat(info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_PC: adsp->pc = info->i; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_AX0: wr_ax0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AX1: wr_ax1(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AY0: wr_ay0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AY1: wr_ay1(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AR: wr_ar(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AF: adsp->core.af.u = info->i; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_MX0: wr_mx0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MX1: wr_mx1(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MY0: wr_my0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MY1: wr_my1(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR0: wr_mr0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR1: wr_mr1(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR2: wr_mr2(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MF: adsp->core.mf.u = info->i; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_SI: wr_si(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SE: wr_se(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SB: wr_sb(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SR0: wr_sr0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SR1: wr_sr1(adsp, info->i); break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_AX0_SEC: adsp->alt.ax0.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AX1_SEC: adsp->alt.ax1.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AY0_SEC: adsp->alt.ay0.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AY1_SEC: adsp->alt.ay1.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AR_SEC: adsp->alt.ar.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AF_SEC: adsp->alt.af.u = info->i; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_MX0_SEC: adsp->alt.mx0.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MX1_SEC: adsp->alt.mx1.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MY0_SEC: adsp->alt.my0.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MY1_SEC: adsp->alt.my1.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR0_SEC: adsp->alt.mr.mrx.mr0.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR1_SEC: adsp->alt.mr.mrx.mr1.s = info->i; adsp->alt.mr.mrx.mr2.s = (INT16)info->i >> 15; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR2_SEC: adsp->alt.mr.mrx.mr2.s = (INT8)info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MF_SEC: adsp->alt.mf.u = info->i; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_SI_SEC: adsp->alt.si.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SE_SEC: adsp->alt.se.s = (INT8)info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SB_SEC: adsp->alt.sb.s = (INT32)(info->i << 27) >> 27; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SR0_SEC: adsp->alt.sr.srx.sr0.s = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SR1_SEC: adsp->alt.sr.srx.sr1.s = info->i; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_I0: wr_i0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I1: wr_i1(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I2: wr_i2(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I3: wr_i3(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I4: wr_i4(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I5: wr_i5(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I6: wr_i6(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I7: wr_i7(adsp, info->i); break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_L0: wr_l0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L1: wr_l1(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L2: wr_l2(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L3: wr_l3(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L4: wr_l4(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L5: wr_l5(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L6: wr_l6(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L7: wr_l7(adsp, info->i); break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_M0: wr_m0(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M1: wr_m1(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M2: wr_m2(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M3: wr_m3(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M4: wr_m4(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M5: wr_m5(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M6: wr_m6(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M7: wr_m7(adsp, info->i); break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_PX: wr_px(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_CNTR: adsp->cntr = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_ASTAT: wr_astat(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SSTAT: wr_sstat(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MSTAT: wr_mstat(adsp, info->i); break;
case CPUINFO_INT_SP:
- case CPUINFO_INT_REGISTER + ADSP2100_PCSP: adsp2100.pc_sp = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_CNTRSP: adsp2100.cntr_sp = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_STATSP: adsp2100.stat_sp = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_LOOPSP: adsp2100.loop_sp = info->i; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_IMASK: wr_imask(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_ICNTL: wr_icntl(info->i); break;
- case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE0: adsp2100.irq_state[0] = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE1: adsp2100.irq_state[1] = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE2: adsp2100.irq_state[2] = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE3: adsp2100.irq_state[3] = info->i; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_FLAGIN: adsp2100.flagin = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_FLAGOUT: adsp2100.flagout = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_FL0: adsp2100.fl0 = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_FL1: adsp2100.fl1 = info->i; break;
- case CPUINFO_INT_REGISTER + ADSP2100_FL2: adsp2100.fl2 = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_PCSP: adsp->pc_sp = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_CNTRSP: adsp->cntr_sp = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_STATSP: adsp->stat_sp = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_LOOPSP: adsp->loop_sp = info->i; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_IMASK: wr_imask(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_ICNTL: wr_icntl(adsp, info->i); break;
+ case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE0: adsp->irq_state[0] = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE1: adsp->irq_state[1] = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE2: adsp->irq_state[2] = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE3: adsp->irq_state[3] = info->i; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_FLAGIN: adsp->flagin = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_FLAGOUT: adsp->flagout = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_FL0: adsp->fl0 = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_FL1: adsp->fl1 = info->i; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_FL2: adsp->fl2 = info->i; break;
}
}
@@ -1808,10 +1795,11 @@ static void adsp21xx_set_info(UINT32 state, cpuinfo *info)
static void adsp21xx_get_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(adsp2100); break;
+ case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(void *); break;
case CPUINFO_INT_INPUT_LINES: /* set per CPU */ break;
case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break;
case CPUINFO_INT_ENDIANNESS: info->i = CPU_IS_LE; break;
@@ -1832,117 +1820,117 @@ static void adsp21xx_get_info(UINT32 state, cpuinfo *info)
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break;
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break;
- case CPUINFO_INT_PREVIOUSPC: info->i = adsp2100.ppc; break;
+ case CPUINFO_INT_PREVIOUSPC: info->i = adsp->ppc; break;
case CPUINFO_INT_PC:
- case CPUINFO_INT_REGISTER + ADSP2100_PC: info->i = adsp2100.pc; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_AX0: info->i = adsp2100.core.ax0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AX1: info->i = adsp2100.core.ax1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AY0: info->i = adsp2100.core.ay0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AY1: info->i = adsp2100.core.ay1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AR: info->i = adsp2100.core.ar.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AF: info->i = adsp2100.core.af.u; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_MX0: info->i = adsp2100.core.mx0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MX1: info->i = adsp2100.core.mx1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MY0: info->i = adsp2100.core.my0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MY1: info->i = adsp2100.core.my1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR0: info->i = adsp2100.core.mr.mrx.mr0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR1: info->i = adsp2100.core.mr.mrx.mr1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR2: info->i = adsp2100.core.mr.mrx.mr2.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MF: info->i = adsp2100.core.mf.u; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_SI: info->i = adsp2100.core.si.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SE: info->i = adsp2100.core.se.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SB: info->i = adsp2100.core.sb.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SR0: info->i = adsp2100.core.sr.srx.sr0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SR1: info->i = adsp2100.core.sr.srx.sr1.u; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_AX0_SEC: info->i = adsp2100.alt.ax0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AX1_SEC: info->i = adsp2100.alt.ax1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AY0_SEC: info->i = adsp2100.alt.ay0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AY1_SEC: info->i = adsp2100.alt.ay1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AR_SEC: info->i = adsp2100.alt.ar.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_AF_SEC: info->i = adsp2100.alt.af.u; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_MX0_SEC: info->i = adsp2100.alt.mx0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MX1_SEC: info->i = adsp2100.alt.mx1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MY0_SEC: info->i = adsp2100.alt.my0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MY1_SEC: info->i = adsp2100.alt.my1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR0_SEC: info->i = adsp2100.alt.mr.mrx.mr0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR1_SEC: info->i = adsp2100.alt.mr.mrx.mr1.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MR2_SEC: info->i = adsp2100.alt.mr.mrx.mr2.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MF_SEC: info->i = adsp2100.alt.mf.u; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_SI_SEC: info->i = adsp2100.alt.si.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SE_SEC: info->i = adsp2100.alt.se.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SB_SEC: info->i = adsp2100.alt.sb.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SR0_SEC: info->i = adsp2100.alt.sr.srx.sr0.u; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SR1_SEC: info->i = adsp2100.alt.sr.srx.sr1.u; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_I0: info->i = adsp2100.i[0]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_I1: info->i = adsp2100.i[1]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_I2: info->i = adsp2100.i[2]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_I3: info->i = adsp2100.i[3]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_I4: info->i = adsp2100.i[4]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_I5: info->i = adsp2100.i[5]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_I6: info->i = adsp2100.i[6]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_I7: info->i = adsp2100.i[7]; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_L0: info->i = adsp2100.l[0]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_L1: info->i = adsp2100.l[1]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_L2: info->i = adsp2100.l[2]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_L3: info->i = adsp2100.l[3]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_L4: info->i = adsp2100.l[4]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_L5: info->i = adsp2100.l[5]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_L6: info->i = adsp2100.l[6]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_L7: info->i = adsp2100.l[7]; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_M0: info->i = adsp2100.m[0]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_M1: info->i = adsp2100.m[1]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_M2: info->i = adsp2100.m[2]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_M3: info->i = adsp2100.m[3]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_M4: info->i = adsp2100.m[4]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_M5: info->i = adsp2100.m[5]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_M6: info->i = adsp2100.m[6]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_M7: info->i = adsp2100.m[7]; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_PX: info->i = adsp2100.px; break;
- case CPUINFO_INT_REGISTER + ADSP2100_CNTR: info->i = adsp2100.cntr; break;
- case CPUINFO_INT_REGISTER + ADSP2100_ASTAT: info->i = adsp2100.astat; break;
- case CPUINFO_INT_REGISTER + ADSP2100_SSTAT: info->i = adsp2100.sstat; break;
- case CPUINFO_INT_REGISTER + ADSP2100_MSTAT: info->i = adsp2100.mstat; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_PC: info->i = adsp->pc; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_AX0: info->i = adsp->core.ax0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AX1: info->i = adsp->core.ax1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AY0: info->i = adsp->core.ay0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AY1: info->i = adsp->core.ay1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AR: info->i = adsp->core.ar.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AF: info->i = adsp->core.af.u; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_MX0: info->i = adsp->core.mx0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MX1: info->i = adsp->core.mx1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MY0: info->i = adsp->core.my0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MY1: info->i = adsp->core.my1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR0: info->i = adsp->core.mr.mrx.mr0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR1: info->i = adsp->core.mr.mrx.mr1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR2: info->i = adsp->core.mr.mrx.mr2.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MF: info->i = adsp->core.mf.u; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_SI: info->i = adsp->core.si.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SE: info->i = adsp->core.se.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SB: info->i = adsp->core.sb.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SR0: info->i = adsp->core.sr.srx.sr0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SR1: info->i = adsp->core.sr.srx.sr1.u; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_AX0_SEC: info->i = adsp->alt.ax0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AX1_SEC: info->i = adsp->alt.ax1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AY0_SEC: info->i = adsp->alt.ay0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AY1_SEC: info->i = adsp->alt.ay1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AR_SEC: info->i = adsp->alt.ar.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_AF_SEC: info->i = adsp->alt.af.u; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_MX0_SEC: info->i = adsp->alt.mx0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MX1_SEC: info->i = adsp->alt.mx1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MY0_SEC: info->i = adsp->alt.my0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MY1_SEC: info->i = adsp->alt.my1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR0_SEC: info->i = adsp->alt.mr.mrx.mr0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR1_SEC: info->i = adsp->alt.mr.mrx.mr1.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MR2_SEC: info->i = adsp->alt.mr.mrx.mr2.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MF_SEC: info->i = adsp->alt.mf.u; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_SI_SEC: info->i = adsp->alt.si.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SE_SEC: info->i = adsp->alt.se.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SB_SEC: info->i = adsp->alt.sb.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SR0_SEC: info->i = adsp->alt.sr.srx.sr0.u; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SR1_SEC: info->i = adsp->alt.sr.srx.sr1.u; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_I0: info->i = adsp->i[0]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I1: info->i = adsp->i[1]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I2: info->i = adsp->i[2]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I3: info->i = adsp->i[3]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I4: info->i = adsp->i[4]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I5: info->i = adsp->i[5]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I6: info->i = adsp->i[6]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_I7: info->i = adsp->i[7]; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_L0: info->i = adsp->l[0]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L1: info->i = adsp->l[1]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L2: info->i = adsp->l[2]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L3: info->i = adsp->l[3]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L4: info->i = adsp->l[4]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L5: info->i = adsp->l[5]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L6: info->i = adsp->l[6]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_L7: info->i = adsp->l[7]; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_M0: info->i = adsp->m[0]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M1: info->i = adsp->m[1]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M2: info->i = adsp->m[2]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M3: info->i = adsp->m[3]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M4: info->i = adsp->m[4]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M5: info->i = adsp->m[5]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M6: info->i = adsp->m[6]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_M7: info->i = adsp->m[7]; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_PX: info->i = adsp->px; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_CNTR: info->i = adsp->cntr; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_ASTAT: info->i = adsp->astat; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_SSTAT: info->i = adsp->sstat; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_MSTAT: info->i = adsp->mstat; break;
case CPUINFO_INT_SP:
- case CPUINFO_INT_REGISTER + ADSP2100_PCSP: info->i = adsp2100.pc_sp; break;
- case CPUINFO_INT_REGISTER + ADSP2100_CNTRSP: info->i = adsp2100.cntr_sp; break;
- case CPUINFO_INT_REGISTER + ADSP2100_STATSP: info->i = adsp2100.stat_sp; break;
- case CPUINFO_INT_REGISTER + ADSP2100_LOOPSP: info->i = adsp2100.loop_sp; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_IMASK: info->i = adsp2100.imask; break;
- case CPUINFO_INT_REGISTER + ADSP2100_ICNTL: info->i = adsp2100.icntl; break;
- case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE0: info->i = adsp2100.irq_state[0]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE1: info->i = adsp2100.irq_state[1]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE2: info->i = adsp2100.irq_state[2]; break;
- case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE3: info->i = adsp2100.irq_state[3]; break;
-
- case CPUINFO_INT_REGISTER + ADSP2100_FLAGIN: info->i = adsp2100.flagin; break;
- case CPUINFO_INT_REGISTER + ADSP2100_FLAGOUT: info->i = adsp2100.flagout; break;
- case CPUINFO_INT_REGISTER + ADSP2100_FL0: info->i = adsp2100.fl0; break;
- case CPUINFO_INT_REGISTER + ADSP2100_FL1: info->i = adsp2100.fl1; break;
- case CPUINFO_INT_REGISTER + ADSP2100_FL2: info->i = adsp2100.fl2; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_PCSP: info->i = adsp->pc_sp; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_CNTRSP: info->i = adsp->cntr_sp; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_STATSP: info->i = adsp->stat_sp; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_LOOPSP: info->i = adsp->loop_sp; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_IMASK: info->i = adsp->imask; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_ICNTL: info->i = adsp->icntl; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE0: info->i = adsp->irq_state[0]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE1: info->i = adsp->irq_state[1]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE2: info->i = adsp->irq_state[2]; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_IRQSTATE3: info->i = adsp->irq_state[3]; break;
+
+ case CPUINFO_INT_REGISTER + ADSP2100_FLAGIN: info->i = adsp->flagin; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_FLAGOUT: info->i = adsp->flagout; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_FL0: info->i = adsp->fl0; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_FL1: info->i = adsp->fl1; break;
+ case CPUINFO_INT_REGISTER + ADSP2100_FL2: info->i = adsp->fl2; break;
/* --- the following bits of info are returned as pointers to data or functions --- */
case CPUINFO_PTR_SET_INFO: /* set per CPU */ break;
- case CPUINFO_PTR_SET_CONTEXT: /* set per CPU */ break;
- case CPUINFO_PTR_GET_CONTEXT: info->getcontext = adsp2100_get_context; break;
- case CPUINFO_PTR_INIT: info->init = adsp2100_init; break;
- case CPUINFO_PTR_RESET: info->reset = adsp2100_reset; break;
- case CPUINFO_PTR_EXIT: info->exit = adsp2100_exit; break;
- case CPUINFO_PTR_EXECUTE: info->execute = adsp2100_execute; break;
+ case CPUINFO_PTR_SET_CONTEXT: info->setcontext = adsp21xx_set_context;break;
+ case CPUINFO_PTR_GET_CONTEXT: info->getcontext = adsp21xx_get_context;break;
+ case CPUINFO_PTR_INIT: /* set per CPU */ break;
+ case CPUINFO_PTR_RESET: info->reset = adsp21xx_reset; break;
+ case CPUINFO_PTR_EXIT: info->exit = adsp21xx_exit; break;
+ case CPUINFO_PTR_EXECUTE: info->execute = adsp21xx_execute; break;
case CPUINFO_PTR_BURN: info->burn = NULL; break;
- case CPUINFO_PTR_DISASSEMBLE: info->disassemble = adsp2100_dasm; break;
- case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &adsp2100_icount; break;
+ case CPUINFO_PTR_DISASSEMBLE: info->disassemble = adsp21xx_dasm; break;
+ case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &adsp->icount; break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
case CPUINFO_STR_NAME: /* set per CPU */ break;
@@ -1953,112 +1941,112 @@ static void adsp21xx_get_info(UINT32 state, cpuinfo *info)
case CPUINFO_STR_FLAGS:
sprintf(info->s, "%c%c%c%c%c%c%c%c",
- adsp2100.astat & 0x80 ? 'X':'.',
- adsp2100.astat & 0x40 ? 'M':'.',
- adsp2100.astat & 0x20 ? 'Q':'.',
- adsp2100.astat & 0x10 ? 'S':'.',
- adsp2100.astat & 0x08 ? 'C':'.',
- adsp2100.astat & 0x04 ? 'V':'.',
- adsp2100.astat & 0x02 ? 'N':'.',
- adsp2100.astat & 0x01 ? 'Z':'.');
+ adsp->astat & 0x80 ? 'X':'.',
+ adsp->astat & 0x40 ? 'M':'.',
+ adsp->astat & 0x20 ? 'Q':'.',
+ adsp->astat & 0x10 ? 'S':'.',
+ adsp->astat & 0x08 ? 'C':'.',
+ adsp->astat & 0x04 ? 'V':'.',
+ adsp->astat & 0x02 ? 'N':'.',
+ adsp->astat & 0x01 ? 'Z':'.');
break;
- case CPUINFO_STR_REGISTER + ADSP2100_PC: sprintf(info->s, "PC: %04X", adsp2100.pc); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_AX0: sprintf(info->s, "AX0: %04X", adsp2100.core.ax0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AX1: sprintf(info->s, "AX1: %04X", adsp2100.core.ax1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AY0: sprintf(info->s, "AY0: %04X", adsp2100.core.ay0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AY1: sprintf(info->s, "AY1: %04X", adsp2100.core.ay1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AR: sprintf(info->s, "AR: %04X", adsp2100.core.ar.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AF: sprintf(info->s, "AF: %04X", adsp2100.core.af.u); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_MX0: sprintf(info->s, "MX0: %04X", adsp2100.core.mx0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MX1: sprintf(info->s, "MX1: %04X", adsp2100.core.mx1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MY0: sprintf(info->s, "MY0: %04X", adsp2100.core.my0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MY1: sprintf(info->s, "MY1: %04X", adsp2100.core.my1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MR0: sprintf(info->s, "MR0: %04X", adsp2100.core.mr.mrx.mr0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MR1: sprintf(info->s, "MR1: %04X", adsp2100.core.mr.mrx.mr1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MR2: sprintf(info->s, "MR2: %02X", adsp2100.core.mr.mrx.mr2.u & 0x00ff); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MF: sprintf(info->s, "MF: %04X", adsp2100.core.mf.u); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_SI: sprintf(info->s, "SI: %04X", adsp2100.core.si.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SE: sprintf(info->s, "SE: %02X ", adsp2100.core.se.u & 0x00ff); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SB: sprintf(info->s, "SB: %02X ", adsp2100.core.sb.u & 0x001f); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SR0: sprintf(info->s, "SR0: %04X", adsp2100.core.sr.srx.sr0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SR1: sprintf(info->s, "SR1: %04X", adsp2100.core.sr.srx.sr1.u); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_AX0_SEC: sprintf(info->s, "AX0_SEC: %04X", adsp2100.alt.ax0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AX1_SEC: sprintf(info->s, "AX1_SEC: %04X", adsp2100.alt.ax1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AY0_SEC: sprintf(info->s, "AY0_SEC: %04X", adsp2100.alt.ay0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AY1_SEC: sprintf(info->s, "AY1_SEC: %04X", adsp2100.alt.ay1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AR_SEC: sprintf(info->s, "AR_SEC: %04X", adsp2100.alt.ar.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_AF_SEC: sprintf(info->s, "AF_SEC: %04X", adsp2100.alt.af.u); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_MX0_SEC: sprintf(info->s, "MX0_SEC: %04X", adsp2100.alt.mx0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MX1_SEC: sprintf(info->s, "MX1_SEC: %04X", adsp2100.alt.mx1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MY0_SEC: sprintf(info->s, "MY0_SEC: %04X", adsp2100.alt.my0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MY1_SEC: sprintf(info->s, "MY1_SEC: %04X", adsp2100.alt.my1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MR0_SEC: sprintf(info->s, "MR0_SEC: %04X", adsp2100.alt.mr.mrx.mr0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MR1_SEC: sprintf(info->s, "MR1_SEC: %04X", adsp2100.alt.mr.mrx.mr1.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MR2_SEC: sprintf(info->s, "MR2_SEC: %02X", adsp2100.alt.mr.mrx.mr2.u & 0x00ff); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MF_SEC: sprintf(info->s, "MF_SEC: %04X", adsp2100.alt.mf.u); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_SI_SEC: sprintf(info->s, "SI_SEC: %04X", adsp2100.alt.si.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SE_SEC: sprintf(info->s, "SE_SEC: %02X ", adsp2100.alt.se.u & 0x00ff); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SB_SEC: sprintf(info->s, "SB_SEC: %02X ", adsp2100.alt.sb.u & 0x001f); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SR0_SEC: sprintf(info->s, "SR0_SEC: %04X", adsp2100.alt.sr.srx.sr0.u); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SR1_SEC: sprintf(info->s, "SR1_SEC: %04X", adsp2100.alt.sr.srx.sr1.u); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_I0: sprintf(info->s, "I0: %04X", adsp2100.i[0]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_I1: sprintf(info->s, "I1: %04X", adsp2100.i[1]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_I2: sprintf(info->s, "I2: %04X", adsp2100.i[2]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_I3: sprintf(info->s, "I3: %04X", adsp2100.i[3]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_I4: sprintf(info->s, "I4: %04X", adsp2100.i[4]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_I5: sprintf(info->s, "I5: %04X", adsp2100.i[5]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_I6: sprintf(info->s, "I6: %04X", adsp2100.i[6]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_I7: sprintf(info->s, "I7: %04X", adsp2100.i[7]); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_L0: sprintf(info->s, "L0: %04X", adsp2100.l[0]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_L1: sprintf(info->s, "L1: %04X", adsp2100.l[1]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_L2: sprintf(info->s, "L2: %04X", adsp2100.l[2]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_L3: sprintf(info->s, "L3: %04X", adsp2100.l[3]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_L4: sprintf(info->s, "L4: %04X", adsp2100.l[4]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_L5: sprintf(info->s, "L5: %04X", adsp2100.l[5]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_L6: sprintf(info->s, "L6: %04X", adsp2100.l[6]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_L7: sprintf(info->s, "L7: %04X", adsp2100.l[7]); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_M0: sprintf(info->s, "M0: %04X", adsp2100.m[0]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_M1: sprintf(info->s, "M1: %04X", adsp2100.m[1]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_M2: sprintf(info->s, "M2: %04X", adsp2100.m[2]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_M3: sprintf(info->s, "M3: %04X", adsp2100.m[3]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_M4: sprintf(info->s, "M4: %04X", adsp2100.m[4]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_M5: sprintf(info->s, "M5: %04X", adsp2100.m[5]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_M6: sprintf(info->s, "M6: %04X", adsp2100.m[6]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_M7: sprintf(info->s, "M7: %04X", adsp2100.m[7]); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_PX: sprintf(info->s, "PX: %02X ", adsp2100.px); break;
- case CPUINFO_STR_REGISTER + ADSP2100_CNTR: sprintf(info->s, "CNTR:%04X", adsp2100.cntr); break;
- case CPUINFO_STR_REGISTER + ADSP2100_ASTAT: sprintf(info->s, "ASTA:%02X ", adsp2100.astat); break;
- case CPUINFO_STR_REGISTER + ADSP2100_SSTAT: sprintf(info->s, "SSTA:%02X ", adsp2100.sstat); break;
- case CPUINFO_STR_REGISTER + ADSP2100_MSTAT: sprintf(info->s, "MSTA:%02X ", adsp2100.mstat); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_PCSP: sprintf(info->s, "PCSP:%02X ", adsp2100.pc_sp); break;
- case CPUINFO_STR_REGISTER + ADSP2100_CNTRSP: sprintf(info->s, "CTSP:%01X ", adsp2100.cntr_sp); break;
- case CPUINFO_STR_REGISTER + ADSP2100_STATSP: sprintf(info->s, "STSP:%01X ", adsp2100.stat_sp); break;
- case CPUINFO_STR_REGISTER + ADSP2100_LOOPSP: sprintf(info->s, "LPSP:%01X ", adsp2100.loop_sp); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_IMASK: sprintf(info->s, "IMSK:%03X ", adsp2100.imask); break;
- case CPUINFO_STR_REGISTER + ADSP2100_ICNTL: sprintf(info->s, "ICTL:%02X ", adsp2100.icntl); break;
- case CPUINFO_STR_REGISTER + ADSP2100_IRQSTATE0: sprintf(info->s, "IRQ0:%X ", adsp2100.irq_state[0]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_IRQSTATE1: sprintf(info->s, "IRQ1:%X ", adsp2100.irq_state[1]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_IRQSTATE2: sprintf(info->s, "IRQ2:%X ", adsp2100.irq_state[2]); break;
- case CPUINFO_STR_REGISTER + ADSP2100_IRQSTATE3: sprintf(info->s, "IRQ3:%X ", adsp2100.irq_state[3]); break;
-
- case CPUINFO_STR_REGISTER + ADSP2100_FLAGIN: sprintf(info->s, "FI: %X ", adsp2100.flagin); break;
- case CPUINFO_STR_REGISTER + ADSP2100_FLAGOUT: sprintf(info->s, "FO: %X ", adsp2100.flagout); break;
- case CPUINFO_STR_REGISTER + ADSP2100_FL0: sprintf(info->s, "FL0: %X ", adsp2100.fl0); break;
- case CPUINFO_STR_REGISTER + ADSP2100_FL1: sprintf(info->s, "FL1: %X ", adsp2100.fl1); break;
- case CPUINFO_STR_REGISTER + ADSP2100_FL2: sprintf(info->s, "FL2: %X ", adsp2100.fl2); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_PC: sprintf(info->s, "PC: %04X", adsp->pc); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_AX0: sprintf(info->s, "AX0: %04X", adsp->core.ax0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AX1: sprintf(info->s, "AX1: %04X", adsp->core.ax1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AY0: sprintf(info->s, "AY0: %04X", adsp->core.ay0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AY1: sprintf(info->s, "AY1: %04X", adsp->core.ay1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AR: sprintf(info->s, "AR: %04X", adsp->core.ar.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AF: sprintf(info->s, "AF: %04X", adsp->core.af.u); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_MX0: sprintf(info->s, "MX0: %04X", adsp->core.mx0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MX1: sprintf(info->s, "MX1: %04X", adsp->core.mx1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MY0: sprintf(info->s, "MY0: %04X", adsp->core.my0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MY1: sprintf(info->s, "MY1: %04X", adsp->core.my1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MR0: sprintf(info->s, "MR0: %04X", adsp->core.mr.mrx.mr0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MR1: sprintf(info->s, "MR1: %04X", adsp->core.mr.mrx.mr1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MR2: sprintf(info->s, "MR2: %02X", adsp->core.mr.mrx.mr2.u & 0x00ff); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MF: sprintf(info->s, "MF: %04X", adsp->core.mf.u); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_SI: sprintf(info->s, "SI: %04X", adsp->core.si.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SE: sprintf(info->s, "SE: %02X ", adsp->core.se.u & 0x00ff); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SB: sprintf(info->s, "SB: %02X ", adsp->core.sb.u & 0x001f); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SR0: sprintf(info->s, "SR0: %04X", adsp->core.sr.srx.sr0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SR1: sprintf(info->s, "SR1: %04X", adsp->core.sr.srx.sr1.u); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_AX0_SEC: sprintf(info->s, "AX0_SEC: %04X", adsp->alt.ax0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AX1_SEC: sprintf(info->s, "AX1_SEC: %04X", adsp->alt.ax1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AY0_SEC: sprintf(info->s, "AY0_SEC: %04X", adsp->alt.ay0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AY1_SEC: sprintf(info->s, "AY1_SEC: %04X", adsp->alt.ay1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AR_SEC: sprintf(info->s, "AR_SEC: %04X", adsp->alt.ar.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_AF_SEC: sprintf(info->s, "AF_SEC: %04X", adsp->alt.af.u); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_MX0_SEC: sprintf(info->s, "MX0_SEC: %04X", adsp->alt.mx0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MX1_SEC: sprintf(info->s, "MX1_SEC: %04X", adsp->alt.mx1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MY0_SEC: sprintf(info->s, "MY0_SEC: %04X", adsp->alt.my0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MY1_SEC: sprintf(info->s, "MY1_SEC: %04X", adsp->alt.my1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MR0_SEC: sprintf(info->s, "MR0_SEC: %04X", adsp->alt.mr.mrx.mr0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MR1_SEC: sprintf(info->s, "MR1_SEC: %04X", adsp->alt.mr.mrx.mr1.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MR2_SEC: sprintf(info->s, "MR2_SEC: %02X", adsp->alt.mr.mrx.mr2.u & 0x00ff); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MF_SEC: sprintf(info->s, "MF_SEC: %04X", adsp->alt.mf.u); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_SI_SEC: sprintf(info->s, "SI_SEC: %04X", adsp->alt.si.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SE_SEC: sprintf(info->s, "SE_SEC: %02X ", adsp->alt.se.u & 0x00ff); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SB_SEC: sprintf(info->s, "SB_SEC: %02X ", adsp->alt.sb.u & 0x001f); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SR0_SEC: sprintf(info->s, "SR0_SEC: %04X", adsp->alt.sr.srx.sr0.u); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SR1_SEC: sprintf(info->s, "SR1_SEC: %04X", adsp->alt.sr.srx.sr1.u); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_I0: sprintf(info->s, "I0: %04X", adsp->i[0]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_I1: sprintf(info->s, "I1: %04X", adsp->i[1]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_I2: sprintf(info->s, "I2: %04X", adsp->i[2]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_I3: sprintf(info->s, "I3: %04X", adsp->i[3]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_I4: sprintf(info->s, "I4: %04X", adsp->i[4]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_I5: sprintf(info->s, "I5: %04X", adsp->i[5]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_I6: sprintf(info->s, "I6: %04X", adsp->i[6]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_I7: sprintf(info->s, "I7: %04X", adsp->i[7]); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_L0: sprintf(info->s, "L0: %04X", adsp->l[0]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_L1: sprintf(info->s, "L1: %04X", adsp->l[1]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_L2: sprintf(info->s, "L2: %04X", adsp->l[2]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_L3: sprintf(info->s, "L3: %04X", adsp->l[3]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_L4: sprintf(info->s, "L4: %04X", adsp->l[4]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_L5: sprintf(info->s, "L5: %04X", adsp->l[5]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_L6: sprintf(info->s, "L6: %04X", adsp->l[6]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_L7: sprintf(info->s, "L7: %04X", adsp->l[7]); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_M0: sprintf(info->s, "M0: %04X", adsp->m[0]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_M1: sprintf(info->s, "M1: %04X", adsp->m[1]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_M2: sprintf(info->s, "M2: %04X", adsp->m[2]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_M3: sprintf(info->s, "M3: %04X", adsp->m[3]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_M4: sprintf(info->s, "M4: %04X", adsp->m[4]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_M5: sprintf(info->s, "M5: %04X", adsp->m[5]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_M6: sprintf(info->s, "M6: %04X", adsp->m[6]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_M7: sprintf(info->s, "M7: %04X", adsp->m[7]); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_PX: sprintf(info->s, "PX: %02X ", adsp->px); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_CNTR: sprintf(info->s, "CNTR:%04X", adsp->cntr); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_ASTAT: sprintf(info->s, "ASTA:%02X ", adsp->astat); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_SSTAT: sprintf(info->s, "SSTA:%02X ", adsp->sstat); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_MSTAT: sprintf(info->s, "MSTA:%02X ", adsp->mstat); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_PCSP: sprintf(info->s, "PCSP:%02X ", adsp->pc_sp); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_CNTRSP: sprintf(info->s, "CTSP:%01X ", adsp->cntr_sp); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_STATSP: sprintf(info->s, "STSP:%01X ", adsp->stat_sp); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_LOOPSP: sprintf(info->s, "LPSP:%01X ", adsp->loop_sp); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_IMASK: sprintf(info->s, "IMSK:%03X ", adsp->imask); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_ICNTL: sprintf(info->s, "ICTL:%02X ", adsp->icntl); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_IRQSTATE0: sprintf(info->s, "IRQ0:%X ", adsp->irq_state[0]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_IRQSTATE1: sprintf(info->s, "IRQ1:%X ", adsp->irq_state[1]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_IRQSTATE2: sprintf(info->s, "IRQ2:%X ", adsp->irq_state[2]); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_IRQSTATE3: sprintf(info->s, "IRQ3:%X ", adsp->irq_state[3]); break;
+
+ case CPUINFO_STR_REGISTER + ADSP2100_FLAGIN: sprintf(info->s, "FI: %X ", adsp->flagin); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_FLAGOUT: sprintf(info->s, "FO: %X ", adsp->flagout); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_FL0: sprintf(info->s, "FL0: %X ", adsp->fl0); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_FL1: sprintf(info->s, "FL1: %X ", adsp->fl1); break;
+ case CPUINFO_STR_REGISTER + ADSP2100_FL2: sprintf(info->s, "FL2: %X ", adsp->fl2); break;
}
}
@@ -2081,15 +2069,24 @@ static void adsp21xx_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
* ADSP2100 section
**************************************************************************/
+static void adsp2100_init(int index, int clock, const void *config, int (*irqcallback)(int))
+{
+ adsp2100_state *adsp = adsp21xx_init(index, clock, config, irqcallback);
+ adsp->chip_type = CHIP_TYPE_ADSP2100;
+ adsp->mstat_mask = 0x0f;
+ adsp->imask_mask = 0x0f;
+}
+
static void adsp2100_set_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are set as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ0: set_irq_line(ADSP2100_IRQ0, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ1: set_irq_line(ADSP2100_IRQ1, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ2: set_irq_line(ADSP2100_IRQ2, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ3: set_irq_line(ADSP2100_IRQ3, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ0: set_irq_line(adsp, ADSP2100_IRQ0, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ1: set_irq_line(adsp, ADSP2100_IRQ1, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ2: set_irq_line(adsp, ADSP2100_IRQ2, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ3: set_irq_line(adsp, ADSP2100_IRQ3, info->i); break;
default:
adsp21xx_set_info(state, info);
@@ -2099,21 +2096,23 @@ static void adsp2100_set_info(UINT32 state, cpuinfo *info)
void adsp2100_get_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_LINES: info->i = 4; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ0: info->i = adsp2100.irq_state[ADSP2100_IRQ0]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ1: info->i = adsp2100.irq_state[ADSP2100_IRQ1]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ2: info->i = adsp2100.irq_state[ADSP2100_IRQ2]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ3: info->i = adsp2100.irq_state[ADSP2100_IRQ3]; break;
+ case CPUINFO_INT_INPUT_LINES: info->i = 4; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ0: info->i = adsp->irq_state[ADSP2100_IRQ0]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ1: info->i = adsp->irq_state[ADSP2100_IRQ1]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ2: info->i = adsp->irq_state[ADSP2100_IRQ2]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2100_IRQ3: info->i = adsp->irq_state[ADSP2100_IRQ3]; break;
/* --- the following bits of info are returned as pointers to data or functions --- */
- case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2100_set_info; break;
- case CPUINFO_PTR_SET_CONTEXT: info->setcontext = adsp2100_set_context; break;
+ case CPUINFO_PTR_INIT: info->init = adsp2100_init; break;
+ case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2100_set_info; break;
+ case CPUINFO_PTR_SET_CONTEXT: info->setcontext = adsp21xx_set_context; break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
- case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2100"); break;
+ case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2100"); break;
default:
adsp21xx_get_info(state, info);
@@ -2128,44 +2127,31 @@ void adsp2100_get_info(UINT32 state, cpuinfo *info)
* ADSP2101 section
**************************************************************************/
-static void adsp2101_reset(void)
+static void adsp2101_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
- set_core_2101();
- adsp2100_reset();
-}
-
-static void adsp2101_set_context(void *src)
-{
- /* copy the context */
- if (src)
- {
- adsp2100 = *(adsp2100_Regs *)src;
- CHANGEPC();
- }
-
- /* reset the chip type */
- set_core_2101();
-
- /* check for IRQs */
- check_irqs();
+ adsp2100_state *adsp = adsp21xx_init(index, clock, config, irqcallback);
+ adsp->chip_type = CHIP_TYPE_ADSP2101;
+ adsp->mstat_mask = 0x7f;
+ adsp->imask_mask = 0x3f;
}
static void adsp2101_set_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are set as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ0: set_irq_line(ADSP2101_IRQ0, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ1: set_irq_line(ADSP2101_IRQ1, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ2: set_irq_line(ADSP2101_IRQ2, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_SPORT0_RX:set_irq_line(ADSP2101_SPORT0_RX, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_SPORT0_TX:set_irq_line(ADSP2101_SPORT0_TX, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_TIMER: set_irq_line(ADSP2101_TIMER, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ0: set_irq_line(adsp, ADSP2101_IRQ0, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ1: set_irq_line(adsp, ADSP2101_IRQ1, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ2: set_irq_line(adsp, ADSP2101_IRQ2, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_SPORT0_RX:set_irq_line(adsp, ADSP2101_SPORT0_RX, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_SPORT0_TX:set_irq_line(adsp, ADSP2101_SPORT0_TX, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_TIMER: set_irq_line(adsp, ADSP2101_TIMER, info->i); break;
/* --- the following bits of info are set as pointers to data or functions --- */
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp2100.sport_rx_callback = (RX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp2100.sport_tx_callback = (TX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp2100.timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp->sport_rx_callback = (RX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp->sport_tx_callback = (TX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp->timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
default:
adsp21xx_set_info(state, info);
@@ -2175,28 +2161,28 @@ static void adsp2101_set_info(UINT32 state, cpuinfo *info)
void adsp2101_get_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_LINES: info->i = 5; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ0: info->i = adsp2100.irq_state[ADSP2101_IRQ0]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ1: info->i = adsp2100.irq_state[ADSP2101_IRQ1]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ2: info->i = adsp2100.irq_state[ADSP2101_IRQ2]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_SPORT0_RX:info->i = adsp2100.irq_state[ADSP2101_SPORT0_RX]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_SPORT0_TX:info->i = adsp2100.irq_state[ADSP2101_SPORT0_TX]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2101_TIMER: info->i = adsp2100.irq_state[ADSP2101_TIMER]; break;
+ case CPUINFO_INT_INPUT_LINES: info->i = 5; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ0: info->i = adsp->irq_state[ADSP2101_IRQ0]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ1: info->i = adsp->irq_state[ADSP2101_IRQ1]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_IRQ2: info->i = adsp->irq_state[ADSP2101_IRQ2]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_SPORT0_RX:info->i = adsp->irq_state[ADSP2101_SPORT0_RX];break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_SPORT0_TX:info->i = adsp->irq_state[ADSP2101_SPORT0_TX];break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2101_TIMER: info->i = adsp->irq_state[ADSP2101_TIMER]; break;
/* --- the following bits of info are returned as pointers to data or functions --- */
- case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2101_set_info; break;
- case CPUINFO_PTR_RESET: info->reset = adsp2101_reset; break;
- case CPUINFO_PTR_SET_CONTEXT: info->setcontext = adsp2101_set_context; break;
+ case CPUINFO_PTR_INIT: info->init = adsp2101_init; break;
+ case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2101_set_info; break;
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp2100.sport_rx_callback; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp2100.sport_tx_callback; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp2100.timer_fired_func; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp->sport_rx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp->sport_tx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp->timer_fired_func; break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
- case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2101"); break;
+ case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2101"); break;
default:
adsp21xx_get_info(state, info);
@@ -2211,26 +2197,12 @@ void adsp2101_get_info(UINT32 state, cpuinfo *info)
* ADSP2104 section
**************************************************************************/
-static void adsp2104_reset(void)
-{
- set_core_2104();
- adsp2100_reset();
-}
-
-static void adsp2104_set_context(void *src)
+static void adsp2104_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
- /* copy the context */
- if (src)
- {
- adsp2100 = *(adsp2100_Regs *)src;
- CHANGEPC();
- }
-
- /* reset the chip type */
- set_core_2104();
-
- /* check for IRQs */
- check_irqs();
+ adsp2100_state *adsp = adsp21xx_init(index, clock, config, irqcallback);
+ adsp->chip_type = CHIP_TYPE_ADSP2104;
+ adsp->mstat_mask = 0x7f;
+ adsp->imask_mask = 0x3f;
}
void adsp2104_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
@@ -2240,20 +2212,21 @@ void adsp2104_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
static void adsp2104_set_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are set as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ0: set_irq_line(ADSP2104_IRQ0, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ1: set_irq_line(ADSP2104_IRQ1, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ2: set_irq_line(ADSP2104_IRQ2, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_SPORT0_RX:set_irq_line(ADSP2104_SPORT0_RX, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_SPORT0_TX:set_irq_line(ADSP2104_SPORT0_TX, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_TIMER: set_irq_line(ADSP2104_TIMER, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ0: set_irq_line(adsp, ADSP2104_IRQ0, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ1: set_irq_line(adsp, ADSP2104_IRQ1, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ2: set_irq_line(adsp, ADSP2104_IRQ2, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_SPORT0_RX:set_irq_line(adsp, ADSP2104_SPORT0_RX, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_SPORT0_TX:set_irq_line(adsp, ADSP2104_SPORT0_TX, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_TIMER: set_irq_line(adsp, ADSP2104_TIMER, info->i); break;
/* --- the following bits of info are set as pointers to data or functions --- */
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp2100.sport_rx_callback = (RX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp2100.sport_tx_callback = (TX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp2100.timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp->sport_rx_callback = (RX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp->sport_tx_callback = (TX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp->timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
default:
adsp21xx_set_info(state, info);
@@ -2263,28 +2236,28 @@ static void adsp2104_set_info(UINT32 state, cpuinfo *info)
void adsp2104_get_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_LINES: info->i = 5; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ0: info->i = adsp2100.irq_state[ADSP2104_IRQ0]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ1: info->i = adsp2100.irq_state[ADSP2104_IRQ1]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ2: info->i = adsp2100.irq_state[ADSP2104_IRQ2]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_SPORT0_RX:info->i = adsp2100.irq_state[ADSP2104_SPORT0_RX]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_SPORT0_TX:info->i = adsp2100.irq_state[ADSP2104_SPORT0_TX]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2104_TIMER: info->i = adsp2100.irq_state[ADSP2104_TIMER]; break;
+ case CPUINFO_INT_INPUT_LINES: info->i = 5; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ0: info->i = adsp->irq_state[ADSP2104_IRQ0]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ1: info->i = adsp->irq_state[ADSP2104_IRQ1]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_IRQ2: info->i = adsp->irq_state[ADSP2104_IRQ2]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_SPORT0_RX:info->i = adsp->irq_state[ADSP2104_SPORT0_RX];break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_SPORT0_TX:info->i = adsp->irq_state[ADSP2104_SPORT0_TX];break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2104_TIMER: info->i = adsp->irq_state[ADSP2104_TIMER]; break;
/* --- the following bits of info are returned as pointers to data or functions --- */
- case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2104_set_info; break;
- case CPUINFO_PTR_RESET: info->reset = adsp2104_reset; break;
- case CPUINFO_PTR_SET_CONTEXT: info->setcontext = adsp2104_set_context; break;
+ case CPUINFO_PTR_INIT: info->init = adsp2104_init; break;
+ case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2104_set_info; break;
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp2100.sport_rx_callback; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp2100.sport_tx_callback; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp2100.timer_fired_func; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp->sport_rx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp->sport_tx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp->timer_fired_func; break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
- case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2104"); break;
+ case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2104"); break;
default:
adsp21xx_get_info(state, info);
@@ -2299,26 +2272,12 @@ void adsp2104_get_info(UINT32 state, cpuinfo *info)
* ADSP2105 section
**************************************************************************/
-static void adsp2105_reset(void)
+static void adsp2105_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
- set_core_2105();
- adsp2100_reset();
-}
-
-static void adsp2105_set_context(void *src)
-{
- /* copy the context */
- if (src)
- {
- adsp2100 = *(adsp2100_Regs *)src;
- CHANGEPC();
- }
-
- /* reset the chip type */
- set_core_2105();
-
- /* check for IRQs */
- check_irqs();
+ adsp2100_state *adsp = adsp21xx_init(index, clock, config, irqcallback);
+ adsp->chip_type = CHIP_TYPE_ADSP2105;
+ adsp->mstat_mask = 0x7f;
+ adsp->imask_mask = 0x3f;
}
void adsp2105_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
@@ -2328,17 +2287,18 @@ void adsp2105_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
static void adsp2105_set_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are set as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ0: set_irq_line(ADSP2105_IRQ0, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ1: set_irq_line(ADSP2105_IRQ1, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ2: set_irq_line(ADSP2105_IRQ2, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ0: set_irq_line(adsp, ADSP2105_IRQ0, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ1: set_irq_line(adsp, ADSP2105_IRQ1, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ2: set_irq_line(adsp, ADSP2105_IRQ2, info->i); break;
/* --- the following bits of info are set as pointers to data or functions --- */
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp2100.sport_rx_callback = (RX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp2100.sport_tx_callback = (TX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp2100.timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp->sport_rx_callback = (RX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp->sport_tx_callback = (TX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp->timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
default:
adsp21xx_set_info(state, info);
@@ -2348,25 +2308,25 @@ static void adsp2105_set_info(UINT32 state, cpuinfo *info)
void adsp2105_get_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_LINES: info->i = 3; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ0: info->i = adsp2100.irq_state[ADSP2105_IRQ0]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ1: info->i = adsp2100.irq_state[ADSP2105_IRQ1]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ2: info->i = adsp2100.irq_state[ADSP2105_IRQ2]; break;
+ case CPUINFO_INT_INPUT_LINES: info->i = 3; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ0: info->i = adsp->irq_state[ADSP2105_IRQ0]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ1: info->i = adsp->irq_state[ADSP2105_IRQ1]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2105_IRQ2: info->i = adsp->irq_state[ADSP2105_IRQ2]; break;
/* --- the following bits of info are returned as pointers to data or functions --- */
- case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2105_set_info; break;
- case CPUINFO_PTR_RESET: info->reset = adsp2105_reset; break;
- case CPUINFO_PTR_SET_CONTEXT: info->setcontext = adsp2105_set_context; break;
+ case CPUINFO_PTR_INIT: info->init = adsp2105_init; break;
+ case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2105_set_info; break;
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp2100.sport_rx_callback; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp2100.sport_tx_callback; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp2100.timer_fired_func; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp->sport_rx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp->sport_tx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp->timer_fired_func; break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
- case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2105"); break;
+ case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2105"); break;
default:
adsp21xx_get_info(state, info);
@@ -2381,26 +2341,12 @@ void adsp2105_get_info(UINT32 state, cpuinfo *info)
* ADSP2115 section
**************************************************************************/
-static void adsp2115_reset(void)
+static void adsp2115_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
- set_core_2115();
- adsp2100_reset();
-}
-
-static void adsp2115_set_context(void *src)
-{
- /* copy the context */
- if (src)
- {
- adsp2100 = *(adsp2100_Regs *)src;
- CHANGEPC();
- }
-
- /* reset the chip type */
- set_core_2115();
-
- /* check for IRQs */
- check_irqs();
+ adsp2100_state *adsp = adsp21xx_init(index, clock, config, irqcallback);
+ adsp->chip_type = CHIP_TYPE_ADSP2115;
+ adsp->mstat_mask = 0x7f;
+ adsp->imask_mask = 0x3f;
}
void adsp2115_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
@@ -2410,20 +2356,21 @@ void adsp2115_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
static void adsp2115_set_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are set as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ0: set_irq_line(ADSP2115_IRQ0, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ1: set_irq_line(ADSP2115_IRQ1, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ2: set_irq_line(ADSP2115_IRQ2, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_SPORT0_RX:set_irq_line(ADSP2115_SPORT0_RX, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_SPORT0_TX:set_irq_line(ADSP2115_SPORT0_TX, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_TIMER: set_irq_line(ADSP2115_TIMER, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ0: set_irq_line(adsp, ADSP2115_IRQ0, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ1: set_irq_line(adsp, ADSP2115_IRQ1, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ2: set_irq_line(adsp, ADSP2115_IRQ2, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_SPORT0_RX:set_irq_line(adsp, ADSP2115_SPORT0_RX, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_SPORT0_TX:set_irq_line(adsp, ADSP2115_SPORT0_TX, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_TIMER: set_irq_line(adsp, ADSP2115_TIMER, info->i); break;
/* --- the following bits of info are set as pointers to data or functions --- */
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp2100.sport_rx_callback = (RX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp2100.sport_tx_callback = (TX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp2100.timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp->sport_rx_callback = (RX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp->sport_tx_callback = (TX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp->timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
default:
adsp21xx_set_info(state, info);
@@ -2433,28 +2380,28 @@ static void adsp2115_set_info(UINT32 state, cpuinfo *info)
void adsp2115_get_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_LINES: info->i = 4; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ0: info->i = adsp2100.irq_state[ADSP2115_IRQ0]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ1: info->i = adsp2100.irq_state[ADSP2115_IRQ1]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ2: info->i = adsp2100.irq_state[ADSP2115_IRQ2]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_SPORT0_RX:info->i = adsp2100.irq_state[ADSP2115_SPORT0_RX]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_SPORT0_TX:info->i = adsp2100.irq_state[ADSP2115_SPORT0_TX]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2115_TIMER: info->i = adsp2100.irq_state[ADSP2115_TIMER]; break;
+ case CPUINFO_INT_INPUT_LINES: info->i = 4; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ0: info->i = adsp->irq_state[ADSP2115_IRQ0]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ1: info->i = adsp->irq_state[ADSP2115_IRQ1]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_IRQ2: info->i = adsp->irq_state[ADSP2115_IRQ2]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_SPORT0_RX:info->i = adsp->irq_state[ADSP2115_SPORT0_RX];break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_SPORT0_TX:info->i = adsp->irq_state[ADSP2115_SPORT0_TX];break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2115_TIMER: info->i = adsp->irq_state[ADSP2115_TIMER]; break;
/* --- the following bits of info are returned as pointers to data or functions --- */
- case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2115_set_info; break;
- case CPUINFO_PTR_RESET: info->reset = adsp2115_reset; break;
- case CPUINFO_PTR_SET_CONTEXT: info->setcontext = adsp2115_set_context; break;
+ case CPUINFO_PTR_INIT: info->init = adsp2115_init; break;
+ case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2115_set_info; break;
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp2100.sport_rx_callback; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp2100.sport_tx_callback; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp2100.timer_fired_func; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp->sport_rx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp->sport_tx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp->timer_fired_func; break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
- case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2115"); break;
+ case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2115"); break;
default:
adsp21xx_get_info(state, info);
@@ -2469,26 +2416,12 @@ void adsp2115_get_info(UINT32 state, cpuinfo *info)
* ADSP2181 section
**************************************************************************/
-static void adsp2181_reset(void)
-{
- set_core_2181();
- adsp2100_reset();
-}
-
-static void adsp2181_set_context(void *src)
+static void adsp2181_init(int index, int clock, const void *config, int (*irqcallback)(int))
{
- /* copy the context */
- if (src)
- {
- adsp2100 = *(adsp2100_Regs *)src;
- CHANGEPC();
- }
-
- /* reset the chip type */
- set_core_2181();
-
- /* check for IRQs */
- check_irqs();
+ adsp2100_state *adsp = adsp21xx_init(index, clock, config, irqcallback);
+ adsp->chip_type = CHIP_TYPE_ADSP2181;
+ adsp->mstat_mask = 0x7f;
+ adsp->imask_mask = 0x3ff;
}
void adsp2181_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
@@ -2498,23 +2431,24 @@ void adsp2181_load_boot_data(UINT8 *srcdata, UINT32 *dstdata)
static void adsp2181_set_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are set as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ0: set_irq_line(ADSP2181_IRQ0, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ1: set_irq_line(ADSP2181_IRQ1, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ2: set_irq_line(ADSP2181_IRQ2, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_SPORT0_RX:set_irq_line(ADSP2181_SPORT0_RX, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_SPORT0_TX:set_irq_line(ADSP2181_SPORT0_TX, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_TIMER: set_irq_line(ADSP2181_TIMER, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQE: set_irq_line(ADSP2181_IRQE, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQL1: set_irq_line(ADSP2181_IRQL1, info->i); break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQL2: set_irq_line(ADSP2181_IRQL2, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ0: set_irq_line(adsp, ADSP2181_IRQ0, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ1: set_irq_line(adsp, ADSP2181_IRQ1, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ2: set_irq_line(adsp, ADSP2181_IRQ2, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_SPORT0_RX:set_irq_line(adsp, ADSP2181_SPORT0_RX, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_SPORT0_TX:set_irq_line(adsp, ADSP2181_SPORT0_TX, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_TIMER: set_irq_line(adsp, ADSP2181_TIMER, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQE: set_irq_line(adsp, ADSP2181_IRQE, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQL1: set_irq_line(adsp, ADSP2181_IRQL1, info->i); break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQL2: set_irq_line(adsp, ADSP2181_IRQL2, info->i); break;
/* --- the following bits of info are set as pointers to data or functions --- */
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp2100.sport_rx_callback = (RX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp2100.sport_tx_callback = (TX_CALLBACK)info->f; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp2100.timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: adsp->sport_rx_callback = (RX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: adsp->sport_tx_callback = (TX_CALLBACK)info->f; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: adsp->timer_fired_func = (ADSP2100_TIMER_CALLBACK)info->f; break;
default:
adsp21xx_set_info(state, info);
@@ -2524,35 +2458,35 @@ static void adsp2181_set_info(UINT32 state, cpuinfo *info)
void adsp2181_get_info(UINT32 state, cpuinfo *info)
{
+ adsp2100_state *adsp = token;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_INPUT_LINES: info->i = 4; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ0: info->i = adsp2100.irq_state[ADSP2181_IRQ0]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ1: info->i = adsp2100.irq_state[ADSP2181_IRQ1]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ2: info->i = adsp2100.irq_state[ADSP2181_IRQ2]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_SPORT0_RX:info->i = adsp2100.irq_state[ADSP2181_SPORT0_RX]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_SPORT0_TX:info->i = adsp2100.irq_state[ADSP2181_SPORT0_TX]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_TIMER: info->i = adsp2100.irq_state[ADSP2181_TIMER]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQE: info->i = adsp2100.irq_state[ADSP2181_IRQE]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQL1: info->i = adsp2100.irq_state[ADSP2181_IRQL1]; break;
- case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQL2: info->i = adsp2100.irq_state[ADSP2181_IRQL2]; break;
-
- case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 16; break;
- case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 11; break;
- case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = -1; break;
+ case CPUINFO_INT_INPUT_LINES: info->i = 4; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ0: info->i = adsp->irq_state[ADSP2181_IRQ0]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ1: info->i = adsp->irq_state[ADSP2181_IRQ1]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQ2: info->i = adsp->irq_state[ADSP2181_IRQ2]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_SPORT0_RX:info->i = adsp->irq_state[ADSP2181_SPORT0_RX];break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_SPORT0_TX:info->i = adsp->irq_state[ADSP2181_SPORT0_TX];break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_TIMER: info->i = adsp->irq_state[ADSP2181_TIMER]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQE: info->i = adsp->irq_state[ADSP2181_IRQE]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQL1: info->i = adsp->irq_state[ADSP2181_IRQL1]; break;
+ case CPUINFO_INT_INPUT_STATE + ADSP2181_IRQL2: info->i = adsp->irq_state[ADSP2181_IRQL2]; break;
+
+ case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 16; break;
+ case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 11; break;
+ case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = -1; break;
/* --- the following bits of info are returned as pointers to data or functions --- */
- case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2181_set_info; break;
- case CPUINFO_PTR_RESET: info->reset = adsp2181_reset; break;
- case CPUINFO_PTR_SET_CONTEXT: info->setcontext = adsp2181_set_context; break;
+ case CPUINFO_PTR_INIT: info->init = adsp2181_init; break;
+ case CPUINFO_PTR_SET_INFO: info->setinfo = adsp2181_set_info; break;
- case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp2100.sport_rx_callback; break;
- case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp2100.sport_tx_callback; break;
- case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp2100.timer_fired_func; break;
+ case CPUINFO_PTR_ADSP2100_RX_HANDLER: info->f = (genf *)adsp->sport_rx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TX_HANDLER: info->f = (genf *)adsp->sport_tx_callback; break;
+ case CPUINFO_PTR_ADSP2100_TIMER_HANDLER: info->f = (genf *)adsp->timer_fired_func; break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
- case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2181"); break;
+ case CPUINFO_STR_NAME: strcpy(info->s, "ADSP2181"); break;
default:
adsp21xx_get_info(state, info);
@@ -2562,65 +2496,70 @@ void adsp2181_get_info(UINT32 state, cpuinfo *info)
void adsp2181_idma_addr_w(UINT16 data)
{
- adsp2100.idma_addr = data;
- adsp2100.idma_offs = 0;
+ adsp2100_state *adsp = token;
+ adsp->idma_addr = data;
+ adsp->idma_offs = 0;
}
UINT16 adsp2181_idma_addr_r(void)
{
- return adsp2100.idma_addr;
+ adsp2100_state *adsp = token;
+ return adsp->idma_addr;
}
void adsp2181_idma_data_w(UINT16 data)
{
+ adsp2100_state *adsp = token;
+
/* program memory? */
- if (!(adsp2100.idma_addr & 0x4000))
+ if (!(adsp->idma_addr & 0x4000))
{
/* upper 16 bits */
- if (adsp2100.idma_offs == 0)
+ if (adsp->idma_offs == 0)
{
- adsp2100.idma_cache = data;
- adsp2100.idma_offs = 1;
+ adsp->idma_cache = data;
+ adsp->idma_offs = 1;
}
/* lower 8 bits */
else
{
- WWORD_PGM(adsp2100.idma_addr++ & 0x3fff, (adsp2100.idma_cache << 8) | (data & 0xff));
- adsp2100.idma_offs = 0;
+ WWORD_PGM(adsp->idma_addr++ & 0x3fff, (adsp->idma_cache << 8) | (data & 0xff));
+ adsp->idma_offs = 0;
}
}
/* data memory */
else
- WWORD_DATA(adsp2100.idma_addr++ & 0x3fff, data);
+ WWORD_DATA(adsp->idma_addr++ & 0x3fff, data);
}
UINT16 adsp2181_idma_data_r(void)
{
+ adsp2100_state *adsp = token;
UINT16 result = 0xffff;
/* program memory? */
- if (!(adsp2100.idma_addr & 0x4000))
+ if (!(adsp->idma_addr & 0x4000))
{
/* upper 16 bits */
- if (adsp2100.idma_offs == 0)
+ if (adsp->idma_offs == 0)
{
- result = RWORD_PGM(adsp2100.idma_addr & 0x3fff) >> 8;
- adsp2100.idma_offs = 1;
+ result = RWORD_PGM(adsp->idma_addr & 0x3fff) >> 8;
+ adsp->idma_offs = 1;
}
/* lower 8 bits */
else
{
- result = RWORD_PGM(adsp2100.idma_addr++ & 0x3fff) & 0xff;
- adsp2100.idma_offs = 0;
+ result = RWORD_PGM(adsp->idma_addr++ & 0x3fff) & 0xff;
+ adsp->idma_offs = 0;
}
}
/* data memory */
else
- result = RWORD_DATA(adsp2100.idma_addr++ & 0x3fff);
+ result = RWORD_DATA(adsp->idma_addr++ & 0x3fff);
return result;
}