summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/tms9900/99xxstat.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/cpu/tms9900/99xxstat.h')
-rw-r--r--src/emu/cpu/tms9900/99xxstat.h194
1 files changed, 97 insertions, 97 deletions
diff --git a/src/emu/cpu/tms9900/99xxstat.h b/src/emu/cpu/tms9900/99xxstat.h
index dc0877a80cf..bde84b39928 100644
--- a/src/emu/cpu/tms9900/99xxstat.h
+++ b/src/emu/cpu/tms9900/99xxstat.h
@@ -5,52 +5,52 @@
************************************************************************/
/*
- remember that the OP ST bit is maintained in lastparity
+ remember that the OP ST bit is maintained in cpustate->lastparity
*/
/*
- setstat sets the ST_OP bit according to lastparity
+ setstat sets the ST_OP bit according to cpustate->lastparity
It must be called before reading the ST register.
*/
-static void setstat(void)
+static void setstat(tms99xx_state *cpustate)
{
int i;
UINT8 a;
- I.STATUS &= ~ ST_OP;
+ cpustate->STATUS &= ~ ST_OP;
/* We set the parity bit. */
- a = lastparity;
+ a = cpustate->lastparity;
for (i=0; i<8; i++) /* 8 bits to test */
{
if (a & 1) /* If current bit is set */
- I.STATUS ^= ST_OP; /* we toggle the ST_OP bit */
+ cpustate->STATUS ^= ST_OP; /* we toggle the ST_OP bit */
a >>= 1; /* Next bit. */
}
}
/*
- getstat sets emulator's lastparity variable according to 9900's STATUS bits.
+ getstat sets emulator's cpustate->lastparity variable according to 9900's STATUS bits.
It must be called on interrupt return, or when, for some reason,
the emulated program sets the STATUS register directly.
*/
-static void getstat(void)
+static void getstat(tms99xx_state *cpustate)
{
#if (USE_ST_MASK)
- I.STATUS &= ST_MASK; /* unused bits are forced to 0 */
+ cpustate->STATUS &= ST_MASK; /* unused bits are forced to 0 */
#endif
- if (I.STATUS & ST_OP)
- lastparity = 1;
+ if (cpustate->STATUS & ST_OP)
+ cpustate->lastparity = 1;
else
- lastparity = 0;
+ cpustate->lastparity = 0;
#if HAS_MAPPING
- I.cur_map = (I.STATUS & ST_MF) ? 1 : 0;
+ cpustate->cur_map = (cpustate->STATUS & ST_MF) ? 1 : 0;
#endif
}
@@ -134,96 +134,96 @@ INLINE INT16 arithmetic_right_shift(INT16 val, int c)
/*
Set lae
*/
-INLINE void setst_lae(INT16 val)
+INLINE void setst_lae(tms99xx_state *cpustate, INT16 val)
{
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ);
if (val > 0)
- I.STATUS |= (ST_LGT | ST_AGT);
+ cpustate->STATUS |= (ST_LGT | ST_AGT);
else if (val < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
}
/*
Set laep (BYTE)
*/
-INLINE void setst_byte_laep(INT8 val)
+INLINE void setst_byte_laep(tms99xx_state *cpustate, INT8 val)
{
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ);
if (val > 0)
- I.STATUS |= (ST_LGT | ST_AGT);
+ cpustate->STATUS |= (ST_LGT | ST_AGT);
else if (val < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
- lastparity = val;
+ cpustate->lastparity = val;
}
/*
For COC, CZC, and TB
*/
-INLINE void setst_e(UINT16 val, UINT16 to)
+INLINE void setst_e(tms99xx_state *cpustate, UINT16 val, UINT16 to)
{
if (val == to)
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
else
- I.STATUS &= ~ ST_EQ;
+ cpustate->STATUS &= ~ ST_EQ;
}
/*
For CI, C, CB
*/
-INLINE void setst_c_lae(UINT16 to, UINT16 val)
+INLINE void setst_c_lae(tms99xx_state *cpustate, UINT16 to, UINT16 val)
{
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ);
if (val == to)
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
else
{
if ( ((INT16) val) > ((INT16) to) )
- I.STATUS |= ST_AGT;
+ cpustate->STATUS |= ST_AGT;
if ( ((UINT16) val) > ((UINT16) to) )
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
}
}
/*
Set laeco for add
*/
-INLINE INT16 setst_add_laeco(int a, int b)
+INLINE INT16 setst_add_laeco(tms99xx_state *cpustate, int a, int b)
{
UINT32 res;
INT16 res2;
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV);
res = (a & 0xffff) + (b & 0xffff);
if (res & 0x10000)
- I.STATUS |= ST_C;
+ cpustate->STATUS |= ST_C;
if ((res ^ b) & (res ^ a) & 0x8000)
- I.STATUS |= ST_OV;
+ cpustate->STATUS |= ST_OV;
#if (TMS99XX_MODEL == TMS9940_ID) || (TMS99XX_MODEL == TMS9985_ID)
if (((a & b) | ((a | b) & ~ res)) & 0x0800)
- I.STATUS |= ST_DC;
+ cpustate->STATUS |= ST_DC;
#endif
res2 = (INT16) res;
if (res2 > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (res2 < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
return res2;
}
@@ -232,34 +232,34 @@ INLINE INT16 setst_add_laeco(int a, int b)
/*
Set laeco for subtract
*/
-INLINE INT16 setst_sub_laeco(int a, int b)
+INLINE INT16 setst_sub_laeco(tms99xx_state *cpustate, int a, int b)
{
UINT32 res;
INT16 res2;
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV);
res = (a & 0xffff) - (b & 0xffff);
if (! (res & 0x10000))
- I.STATUS |= ST_C;
+ cpustate->STATUS |= ST_C;
if ((a ^ b) & (a ^ res) & 0x8000)
- I.STATUS |= ST_OV;
+ cpustate->STATUS |= ST_OV;
#if (TMS99XX_MODEL == TMS9940_ID) || (TMS99XX_MODEL == TMS9985_ID)
if (((a & ~ b) | ((a | ~ b) & ~ res)) & 0x0800)
- I.STATUS |= ST_DC;
+ cpustate->STATUS |= ST_DC;
#endif
res2 = (INT16) res;
if (res2 > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (res2 < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
return res2;
}
@@ -268,36 +268,36 @@ INLINE INT16 setst_sub_laeco(int a, int b)
/*
Set laecop for add (BYTE)
*/
-INLINE INT8 setst_addbyte_laecop(int a, int b)
+INLINE INT8 setst_addbyte_laecop(tms99xx_state *cpustate, int a, int b)
{
unsigned int res;
INT8 res2;
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV | ST_OP);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV | ST_OP);
res = (a & 0xff) + (b & 0xff);
if (res & 0x100)
- I.STATUS |= ST_C;
+ cpustate->STATUS |= ST_C;
if ((res ^ b) & (res ^ a) & 0x80)
- I.STATUS |= ST_OV;
+ cpustate->STATUS |= ST_OV;
#if (TMS99XX_MODEL == TMS9940_ID) || (TMS99XX_MODEL == TMS9985_ID)
if (((a & b) | ((a | b) & ~ res)) & 0x08)
- I.STATUS |= ST_DC;
+ cpustate->STATUS |= ST_DC;
#endif
res2 = (INT8) res;
if (res2 > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (res2 < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
- lastparity = res2;
+ cpustate->lastparity = res2;
return res2;
}
@@ -306,36 +306,36 @@ INLINE INT8 setst_addbyte_laecop(int a, int b)
/*
Set laecop for subtract (BYTE)
*/
-INLINE INT8 setst_subbyte_laecop(int a, int b)
+INLINE INT8 setst_subbyte_laecop(tms99xx_state *cpustate, int a, int b)
{
unsigned int res;
INT8 res2;
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV | ST_OP);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV | ST_OP);
res = (a & 0xff) - (b & 0xff);
if (! (res & 0x100))
- I.STATUS |= ST_C;
+ cpustate->STATUS |= ST_C;
if ((a ^ b) & (a ^ res) & 0x80)
- I.STATUS |= ST_OV;
+ cpustate->STATUS |= ST_OV;
#if (TMS99XX_MODEL == TMS9940_ID) || (TMS99XX_MODEL == TMS9985_ID)
if (((a & ~ b) | ((a | ~ b) & ~ res)) & 0x08)
- I.STATUS |= ST_DC;
+ cpustate->STATUS |= ST_DC;
#endif
res2 = (INT8) res;
if (res2 > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (res2 < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
- lastparity = res2;
+ cpustate->lastparity = res2;
return res2;
}
@@ -345,20 +345,20 @@ INLINE INT8 setst_subbyte_laecop(int a, int b)
/*
For NEG
*/
-INLINE void setst_laeo(INT16 val)
+INLINE void setst_laeo(tms99xx_state *cpustate, INT16 val)
{
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_OV);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_OV);
if (val > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (val < 0)
{
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
if (((UINT16) val) == 0x8000)
- I.STATUS |= ST_OV;
+ cpustate->STATUS |= ST_OV;
}
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
}
@@ -366,24 +366,24 @@ INLINE void setst_laeo(INT16 val)
/*
Meat of SRA
*/
-INLINE UINT16 setst_sra_laec(INT16 a, UINT16 c)
+INLINE UINT16 setst_sra_laec(tms99xx_state *cpustate, INT16 a, UINT16 c)
{
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C);
if (c != 0)
{
a = arithmetic_right_shift(a, c-1);
if (a & 1) // The carry bit equals the last bit that is shifted out
- I.STATUS |= ST_C;
+ cpustate->STATUS |= ST_C;
a = arithmetic_right_shift(a, 1);
}
if (a > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (a < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
return a;
}
@@ -392,24 +392,24 @@ INLINE UINT16 setst_sra_laec(INT16 a, UINT16 c)
/*
Meat of SRL. Same algorithm as SRA, except that we fills in with 0s.
*/
-INLINE UINT16 setst_srl_laec(UINT16 a,UINT16 c)
+INLINE UINT16 setst_srl_laec(tms99xx_state *cpustate, UINT16 a,UINT16 c)
{
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C);
if (c != 0)
{
a = logical_right_shift(a, c-1);
if (a & 1)
- I.STATUS |= ST_C;
+ cpustate->STATUS |= ST_C;
a = logical_right_shift(a, 1);
}
if (((INT16) a) > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (((INT16) a) < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
return a;
}
@@ -418,23 +418,23 @@ INLINE UINT16 setst_srl_laec(UINT16 a,UINT16 c)
//
// Meat of SRC
//
-INLINE UINT16 setst_src_laec(UINT16 a,UINT16 c)
+INLINE UINT16 setst_src_laec(tms99xx_state *cpustate, UINT16 a,UINT16 c)
{
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C);
if (c != 0)
{
a = logical_right_shift(a, c) | (a << (16-c));
if (a & 0x8000) // The carry bit equals the last bit that is shifted out
- I.STATUS |= ST_C;
+ cpustate->STATUS |= ST_C;
}
if (((INT16) a) > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (((INT16) a) < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
return a;
}
@@ -443,9 +443,9 @@ INLINE UINT16 setst_src_laec(UINT16 a,UINT16 c)
//
// Meat of SLA
//
-INLINE UINT16 setst_sla_laeco(UINT16 a, UINT16 c)
+INLINE UINT16 setst_sla_laeco(tms99xx_state *cpustate, UINT16 a, UINT16 c)
{
- I.STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV);
+ cpustate->STATUS &= ~ (ST_LGT | ST_AGT | ST_EQ | ST_C | ST_OV);
if (c != 0)
{
@@ -458,22 +458,22 @@ INLINE UINT16 setst_sla_laeco(UINT16 a, UINT16 c)
if (ousted_bits) // If ousted_bits is neither all 0s
if (ousted_bits ^ mask) // nor all 1s,
- I.STATUS |= ST_OV; // we set overflow
+ cpustate->STATUS |= ST_OV; // we set overflow
}
a <<= c-1;
if (a & 0x8000) // The carry bit equals the last bit that is shifted out
- I.STATUS |= ST_C;
+ cpustate->STATUS |= ST_C;
a <<= 1;
}
if (((INT16) a) > 0)
- I.STATUS |= ST_LGT | ST_AGT;
+ cpustate->STATUS |= ST_LGT | ST_AGT;
else if (((INT16) a) < 0)
- I.STATUS |= ST_LGT;
+ cpustate->STATUS |= ST_LGT;
else
- I.STATUS |= ST_EQ;
+ cpustate->STATUS |= ST_EQ;
return a;
}