summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/sh4/sh4.c
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2010-07-03 00:12:44 +0000
committer Aaron Giles <aaron@aarongiles.com>2010-07-03 00:12:44 +0000
commitc70c5fee5a6094c5a1fbd6b25568e57b1d3a8216 (patch)
treeeb0db95e2757f00a708dd4bfbf3ed4af41d943b6 /src/emu/cpu/sh4/sh4.c
parent46e30c4f68c5c92b597d6b3ae9e9037d5e04efe9 (diff)
Created CPU-specific device types for all CPUs, using new macros
DECLARE_LEGACY_CPU_DEVICE and DEFINE_LEGACY_CPU_DEVICE. Changed CPUs to be their own device types, rather than all of type CPU with a special internal subtype. Note that as part of this process I removed the CPU_ prefix from the ALL-CAPS device name, so CPU_Z80 is just plain old Z80 now. This required changing a couple of names like 8080 to I8080 so that there was an alphabetic first character. Added memory interfaces to the list of fast-access interfaces. To do this properly I had to add a separate method to devices which is called immediately after construction, when it is possible to perform dynamic_casts on fully-constructed objects. (This is just internal, no changes necessary to the devices themselves.) Some additional notes: * SH2 and SH4 had typedefs that conflicted with their CPU_-less names so I bulk renamed to structures to sh2_state and sh4_state; RB, feel free to choose alternate names if you don't like 'em * SCSP was caught doing something to the 3rd indexed CPU. Since several systems that use SCSP don't even have 3 CPUs, I had no idea what this was supposed to do, so I changed to it reference "audiocpu" assuming that stv was the assumed target. This is really gross and should be a configuration parameter, not a hard-coded assumption.
Diffstat (limited to 'src/emu/cpu/sh4/sh4.c')
-rw-r--r--src/emu/cpu/sh4/sh4.c485
1 files changed, 243 insertions, 242 deletions
diff --git a/src/emu/cpu/sh4/sh4.c b/src/emu/cpu/sh4/sh4.c
index 5a2dd91fe9b..d7e1784cd4f 100644
--- a/src/emu/cpu/sh4/sh4.c
+++ b/src/emu/cpu/sh4/sh4.c
@@ -30,16 +30,15 @@
CPU_DISASSEMBLE( sh4 );
-INLINE SH4 *get_safe_token(running_device *device)
+INLINE sh4_state *get_safe_token(running_device *device)
{
assert(device != NULL);
- assert(device->type() == CPU);
- assert(cpu_get_type(device) == CPU_SH4);
- return (SH4 *)downcast<legacy_cpu_device *>(device)->token();
+ assert(device->type() == SH4);
+ return (sh4_state *)downcast<legacy_cpu_device *>(device)->token();
}
/* Called for unimplemented opcodes */
-static void TODO(SH4 *sh4)
+static void TODO(sh4_state *sh4)
{
}
@@ -121,7 +120,7 @@ UINT32 abs;
}
#endif
-INLINE UINT8 RB(SH4 *sh4, offs_t A)
+INLINE UINT8 RB(sh4_state *sh4, offs_t A)
{
if (A >= 0xfe000000)
return sh4_internal_r(sh4->internal, ((A & 0x0fc) >> 2) | ((A & 0x1fe0000) >> 11), 0xff << ((A & 3)*8)) >> ((A & 3)*8);
@@ -132,7 +131,7 @@ INLINE UINT8 RB(SH4 *sh4, offs_t A)
return memory_read_byte_64le(sh4->program, A & AM);
}
-INLINE UINT16 RW(SH4 *sh4, offs_t A)
+INLINE UINT16 RW(sh4_state *sh4, offs_t A)
{
if (A >= 0xfe000000)
return sh4_internal_r(sh4->internal, ((A & 0x0fc) >> 2) | ((A & 0x1fe0000) >> 11), 0xffff << ((A & 2)*8)) >> ((A & 2)*8);
@@ -143,7 +142,7 @@ INLINE UINT16 RW(SH4 *sh4, offs_t A)
return memory_read_word_64le(sh4->program, A & AM);
}
-INLINE UINT32 RL(SH4 *sh4, offs_t A)
+INLINE UINT32 RL(sh4_state *sh4, offs_t A)
{
if (A >= 0xfe000000)
return sh4_internal_r(sh4->internal, ((A & 0x0fc) >> 2) | ((A & 0x1fe0000) >> 11), 0xffffffff);
@@ -154,7 +153,7 @@ INLINE UINT32 RL(SH4 *sh4, offs_t A)
return memory_read_dword_64le(sh4->program, A & AM);
}
-INLINE void WB(SH4 *sh4, offs_t A, UINT8 V)
+INLINE void WB(sh4_state *sh4, offs_t A, UINT8 V)
{
if (A >= 0xfe000000)
@@ -172,7 +171,7 @@ INLINE void WB(SH4 *sh4, offs_t A, UINT8 V)
memory_write_byte_64le(sh4->program, A & AM,V);
}
-INLINE void WW(SH4 *sh4, offs_t A, UINT16 V)
+INLINE void WW(sh4_state *sh4, offs_t A, UINT16 V)
{
if (A >= 0xfe000000)
{
@@ -189,7 +188,7 @@ INLINE void WW(SH4 *sh4, offs_t A, UINT16 V)
memory_write_word_64le(sh4->program, A & AM,V);
}
-INLINE void WL(SH4 *sh4, offs_t A, UINT32 V)
+INLINE void WL(sh4_state *sh4, offs_t A, UINT32 V)
{
if (A >= 0xfe000000)
{
@@ -213,7 +212,7 @@ INLINE void WL(SH4 *sh4, offs_t A, UINT32 V)
* 0011 nnnn mmmm 1100 1 -
* ADD Rm,Rn
*/
-INLINE void ADD(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void ADD(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] += sh4->r[m];
}
@@ -222,7 +221,7 @@ INLINE void ADD(SH4 *sh4, UINT32 m, UINT32 n)
* 0111 nnnn iiii iiii 1 -
* ADD #imm,Rn
*/
-INLINE void ADDI(SH4 *sh4, UINT32 i, UINT32 n)
+INLINE void ADDI(sh4_state *sh4, UINT32 i, UINT32 n)
{
sh4->r[n] += (INT32)(INT16)(INT8)i;
}
@@ -231,7 +230,7 @@ INLINE void ADDI(SH4 *sh4, UINT32 i, UINT32 n)
* 0011 nnnn mmmm 1110 1 carry
* ADDC Rm,Rn
*/
-INLINE void ADDC(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void ADDC(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 tmp0, tmp1;
@@ -250,7 +249,7 @@ INLINE void ADDC(SH4 *sh4, UINT32 m, UINT32 n)
* 0011 nnnn mmmm 1111 1 overflow
* ADDV Rm,Rn
*/
-INLINE void ADDV(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void ADDV(sh4_state *sh4, UINT32 m, UINT32 n)
{
INT32 dest, src, ans;
@@ -284,7 +283,7 @@ INLINE void ADDV(SH4 *sh4, UINT32 m, UINT32 n)
* 0010 nnnn mmmm 1001 1 -
* AND Rm,Rn
*/
-INLINE void AND(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void AND(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] &= sh4->r[m];
}
@@ -294,7 +293,7 @@ INLINE void AND(SH4 *sh4, UINT32 m, UINT32 n)
* 1100 1001 iiii iiii 1 -
* AND #imm,R0
*/
-INLINE void ANDI(SH4 *sh4, UINT32 i)
+INLINE void ANDI(sh4_state *sh4, UINT32 i)
{
sh4->r[0] &= i;
}
@@ -303,7 +302,7 @@ INLINE void ANDI(SH4 *sh4, UINT32 i)
* 1100 1101 iiii iiii 1 -
* AND.B #imm,@(R0,GBR)
*/
-INLINE void ANDM(SH4 *sh4, UINT32 i)
+INLINE void ANDM(sh4_state *sh4, UINT32 i)
{
UINT32 temp;
@@ -317,7 +316,7 @@ INLINE void ANDM(SH4 *sh4, UINT32 i)
* 1000 1011 dddd dddd 3/1 -
* BF disp8
*/
-INLINE void BF(SH4 *sh4, UINT32 d)
+INLINE void BF(sh4_state *sh4, UINT32 d)
{
if ((sh4->sr & T) == 0)
{
@@ -331,7 +330,7 @@ INLINE void BF(SH4 *sh4, UINT32 d)
* 1000 1111 dddd dddd 3/1 -
* BFS disp8
*/
-INLINE void BFS(SH4 *sh4, UINT32 d)
+INLINE void BFS(sh4_state *sh4, UINT32 d)
{
if ((sh4->sr & T) == 0)
{
@@ -346,7 +345,7 @@ INLINE void BFS(SH4 *sh4, UINT32 d)
* 1010 dddd dddd dddd 2 -
* BRA disp12
*/
-INLINE void BRA(SH4 *sh4, UINT32 d)
+INLINE void BRA(sh4_state *sh4, UINT32 d)
{
INT32 disp = ((INT32)d << 20) >> 20;
@@ -370,7 +369,7 @@ INLINE void BRA(SH4 *sh4, UINT32 d)
* 0000 mmmm 0010 0011 2 -
* BRAF Rm
*/
-INLINE void BRAF(SH4 *sh4, UINT32 m)
+INLINE void BRAF(sh4_state *sh4, UINT32 m)
{
sh4->delay = sh4->pc;
sh4->pc += sh4->r[m] + 2;
@@ -381,7 +380,7 @@ INLINE void BRAF(SH4 *sh4, UINT32 m)
* 1011 dddd dddd dddd 2 -
* BSR disp12
*/
-INLINE void BSR(SH4 *sh4, UINT32 d)
+INLINE void BSR(sh4_state *sh4, UINT32 d)
{
INT32 disp = ((INT32)d << 20) >> 20;
@@ -395,7 +394,7 @@ INLINE void BSR(SH4 *sh4, UINT32 d)
* 0000 mmmm 0000 0011 2 -
* BSRF Rm
*/
-INLINE void BSRF(SH4 *sh4, UINT32 m)
+INLINE void BSRF(sh4_state *sh4, UINT32 m)
{
sh4->pr = sh4->pc + 2;
sh4->delay = sh4->pc;
@@ -407,7 +406,7 @@ INLINE void BSRF(SH4 *sh4, UINT32 m)
* 1000 1001 dddd dddd 3/1 -
* BT disp8
*/
-INLINE void BT(SH4 *sh4, UINT32 d)
+INLINE void BT(sh4_state *sh4, UINT32 d)
{
if ((sh4->sr & T) != 0)
{
@@ -421,7 +420,7 @@ INLINE void BT(SH4 *sh4, UINT32 d)
* 1000 1101 dddd dddd 2/1 -
* BTS disp8
*/
-INLINE void BTS(SH4 *sh4, UINT32 d)
+INLINE void BTS(sh4_state *sh4, UINT32 d)
{
if ((sh4->sr & T) != 0)
{
@@ -436,7 +435,7 @@ INLINE void BTS(SH4 *sh4, UINT32 d)
* 0000 0000 0010 1000 1 -
* CLRMAC
*/
-INLINE void CLRMAC(SH4 *sh4)
+INLINE void CLRMAC(sh4_state *sh4)
{
sh4->mach = 0;
sh4->macl = 0;
@@ -446,7 +445,7 @@ INLINE void CLRMAC(SH4 *sh4)
* 0000 0000 0000 1000 1 -
* CLRT
*/
-INLINE void CLRT(SH4 *sh4)
+INLINE void CLRT(sh4_state *sh4)
{
sh4->sr &= ~T;
}
@@ -455,7 +454,7 @@ INLINE void CLRT(SH4 *sh4)
* 0011 nnnn mmmm 0000 1 comparison result
* CMP_EQ Rm,Rn
*/
-INLINE void CMPEQ(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void CMPEQ(sh4_state *sh4, UINT32 m, UINT32 n)
{
if (sh4->r[n] == sh4->r[m])
sh4->sr |= T;
@@ -467,7 +466,7 @@ INLINE void CMPEQ(SH4 *sh4, UINT32 m, UINT32 n)
* 0011 nnnn mmmm 0011 1 comparison result
* CMP_GE Rm,Rn
*/
-INLINE void CMPGE(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void CMPGE(sh4_state *sh4, UINT32 m, UINT32 n)
{
if ((INT32) sh4->r[n] >= (INT32) sh4->r[m])
sh4->sr |= T;
@@ -479,7 +478,7 @@ INLINE void CMPGE(SH4 *sh4, UINT32 m, UINT32 n)
* 0011 nnnn mmmm 0111 1 comparison result
* CMP_GT Rm,Rn
*/
-INLINE void CMPGT(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void CMPGT(sh4_state *sh4, UINT32 m, UINT32 n)
{
if ((INT32) sh4->r[n] > (INT32) sh4->r[m])
sh4->sr |= T;
@@ -491,7 +490,7 @@ INLINE void CMPGT(SH4 *sh4, UINT32 m, UINT32 n)
* 0011 nnnn mmmm 0110 1 comparison result
* CMP_HI Rm,Rn
*/
-INLINE void CMPHI(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void CMPHI(sh4_state *sh4, UINT32 m, UINT32 n)
{
if ((UINT32) sh4->r[n] > (UINT32) sh4->r[m])
sh4->sr |= T;
@@ -503,7 +502,7 @@ INLINE void CMPHI(SH4 *sh4, UINT32 m, UINT32 n)
* 0011 nnnn mmmm 0010 1 comparison result
* CMP_HS Rm,Rn
*/
-INLINE void CMPHS(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void CMPHS(sh4_state *sh4, UINT32 m, UINT32 n)
{
if ((UINT32) sh4->r[n] >= (UINT32) sh4->r[m])
sh4->sr |= T;
@@ -516,7 +515,7 @@ INLINE void CMPHS(SH4 *sh4, UINT32 m, UINT32 n)
* 0100 nnnn 0001 0101 1 comparison result
* CMP_PL Rn
*/
-INLINE void CMPPL(SH4 *sh4, UINT32 n)
+INLINE void CMPPL(sh4_state *sh4, UINT32 n)
{
if ((INT32) sh4->r[n] > 0)
sh4->sr |= T;
@@ -528,7 +527,7 @@ INLINE void CMPPL(SH4 *sh4, UINT32 n)
* 0100 nnnn 0001 0001 1 comparison result
* CMP_PZ Rn
*/
-INLINE void CMPPZ(SH4 *sh4, UINT32 n)
+INLINE void CMPPZ(sh4_state *sh4, UINT32 n)
{
if ((INT32) sh4->r[n] >= 0)
sh4->sr |= T;
@@ -540,7 +539,7 @@ INLINE void CMPPZ(SH4 *sh4, UINT32 n)
* 0010 nnnn mmmm 1100 1 comparison result
* CMP_STR Rm,Rn
*/
-INLINE void CMPSTR(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void CMPSTR(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 temp;
INT32 HH, HL, LH, LL;
@@ -560,7 +559,7 @@ INLINE void CMPSTR(SH4 *sh4, UINT32 m, UINT32 n)
* 1000 1000 iiii iiii 1 comparison result
* CMP/EQ #imm,R0
*/
-INLINE void CMPIM(SH4 *sh4, UINT32 i)
+INLINE void CMPIM(sh4_state *sh4, UINT32 i)
{
UINT32 imm = (UINT32)(INT32)(INT16)(INT8)i;
@@ -574,7 +573,7 @@ INLINE void CMPIM(SH4 *sh4, UINT32 i)
* 0010 nnnn mmmm 0111 1 calculation result
* DIV0S Rm,Rn
*/
-INLINE void DIV0S(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void DIV0S(sh4_state *sh4, UINT32 m, UINT32 n)
{
if ((sh4->r[n] & 0x80000000) == 0)
sh4->sr &= ~Q;
@@ -594,7 +593,7 @@ INLINE void DIV0S(SH4 *sh4, UINT32 m, UINT32 n)
* 0000 0000 0001 1001 1 0
* DIV0U
*/
-INLINE void DIV0U(SH4 *sh4)
+INLINE void DIV0U(sh4_state *sh4)
{
sh4->sr &= ~(M | Q | T);
}
@@ -603,7 +602,7 @@ INLINE void DIV0U(SH4 *sh4)
* 0011 nnnn mmmm 0100 1 calculation result
* DIV1 Rm,Rn
*/
-INLINE void DIV1(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void DIV1(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 tmp0;
UINT32 old_q;
@@ -695,7 +694,7 @@ INLINE void DIV1(SH4 *sh4, UINT32 m, UINT32 n)
}
/* DMULS.L Rm,Rn */
-INLINE void DMULS(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void DMULS(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 RnL, RnH, RmL, RmH, Res0, Res1, Res2;
UINT32 temp0, temp1, temp2, temp3;
@@ -744,7 +743,7 @@ INLINE void DMULS(SH4 *sh4, UINT32 m, UINT32 n)
}
/* DMULU.L Rm,Rn */
-INLINE void DMULU(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void DMULU(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 RnL, RnH, RmL, RmH, Res0, Res1, Res2;
UINT32 temp0, temp1, temp2, temp3;
@@ -772,7 +771,7 @@ INLINE void DMULU(SH4 *sh4, UINT32 m, UINT32 n)
}
/* DT Rn */
-INLINE void DT(SH4 *sh4, UINT32 n)
+INLINE void DT(sh4_state *sh4, UINT32 n)
{
sh4->r[n]--;
if (sh4->r[n] == 0)
@@ -798,38 +797,38 @@ INLINE void DT(SH4 *sh4, UINT32 n)
}
/* EXTS.B Rm,Rn */
-INLINE void EXTSB(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void EXTSB(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = ((INT32)sh4->r[m] << 24) >> 24;
}
/* EXTS.W Rm,Rn */
-INLINE void EXTSW(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void EXTSW(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = ((INT32)sh4->r[m] << 16) >> 16;
}
/* EXTU.B Rm,Rn */
-INLINE void EXTUB(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void EXTUB(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = sh4->r[m] & 0x000000ff;
}
/* EXTU.W Rm,Rn */
-INLINE void EXTUW(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void EXTUW(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = sh4->r[m] & 0x0000ffff;
}
/* JMP @Rm */
-INLINE void JMP(SH4 *sh4, UINT32 m)
+INLINE void JMP(sh4_state *sh4, UINT32 m)
{
sh4->delay = sh4->pc;
sh4->pc = sh4->ea = sh4->r[m];
}
/* JSR @Rm */
-INLINE void JSR(SH4 *sh4, UINT32 m)
+INLINE void JSR(sh4_state *sh4, UINT32 m)
{
sh4->delay = sh4->pc;
sh4->pr = sh4->pc + 2;
@@ -839,7 +838,7 @@ INLINE void JSR(SH4 *sh4, UINT32 m)
/* LDC Rm,SR */
-INLINE void LDCSR(SH4 *sh4, UINT32 m)
+INLINE void LDCSR(sh4_state *sh4, UINT32 m)
{
UINT32 reg;
@@ -853,19 +852,19 @@ UINT32 reg;
}
/* LDC Rm,GBR */
-INLINE void LDCGBR(SH4 *sh4, UINT32 m)
+INLINE void LDCGBR(sh4_state *sh4, UINT32 m)
{
sh4->gbr = sh4->r[m];
}
/* LDC Rm,VBR */
-INLINE void LDCVBR(SH4 *sh4, UINT32 m)
+INLINE void LDCVBR(sh4_state *sh4, UINT32 m)
{
sh4->vbr = sh4->r[m];
}
/* LDC.L @Rm+,SR */
-INLINE void LDCMSR(SH4 *sh4, UINT32 m)
+INLINE void LDCMSR(sh4_state *sh4, UINT32 m)
{
UINT32 old;
@@ -882,7 +881,7 @@ UINT32 old;
}
/* LDC.L @Rm+,GBR */
-INLINE void LDCMGBR(SH4 *sh4, UINT32 m)
+INLINE void LDCMGBR(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->gbr = RL(sh4, sh4->ea );
@@ -891,7 +890,7 @@ INLINE void LDCMGBR(SH4 *sh4, UINT32 m)
}
/* LDC.L @Rm+,VBR */
-INLINE void LDCMVBR(SH4 *sh4, UINT32 m)
+INLINE void LDCMVBR(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->vbr = RL(sh4, sh4->ea );
@@ -900,25 +899,25 @@ INLINE void LDCMVBR(SH4 *sh4, UINT32 m)
}
/* LDS Rm,MACH */
-INLINE void LDSMACH(SH4 *sh4, UINT32 m)
+INLINE void LDSMACH(sh4_state *sh4, UINT32 m)
{
sh4->mach = sh4->r[m];
}
/* LDS Rm,MACL */
-INLINE void LDSMACL(SH4 *sh4, UINT32 m)
+INLINE void LDSMACL(sh4_state *sh4, UINT32 m)
{
sh4->macl = sh4->r[m];
}
/* LDS Rm,PR */
-INLINE void LDSPR(SH4 *sh4, UINT32 m)
+INLINE void LDSPR(sh4_state *sh4, UINT32 m)
{
sh4->pr = sh4->r[m];
}
/* LDS.L @Rm+,MACH */
-INLINE void LDSMMACH(SH4 *sh4, UINT32 m)
+INLINE void LDSMMACH(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->mach = RL(sh4, sh4->ea );
@@ -926,7 +925,7 @@ INLINE void LDSMMACH(SH4 *sh4, UINT32 m)
}
/* LDS.L @Rm+,MACL */
-INLINE void LDSMMACL(SH4 *sh4, UINT32 m)
+INLINE void LDSMMACL(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->macl = RL(sh4, sh4->ea );
@@ -934,7 +933,7 @@ INLINE void LDSMMACL(SH4 *sh4, UINT32 m)
}
/* LDS.L @Rm+,PR */
-INLINE void LDSMPR(SH4 *sh4, UINT32 m)
+INLINE void LDSMPR(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->pr = RL(sh4, sh4->ea );
@@ -942,7 +941,7 @@ INLINE void LDSMPR(SH4 *sh4, UINT32 m)
}
/* MAC.L @Rm+,@Rn+ */
-INLINE void MAC_L(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MAC_L(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 RnL, RnH, RmL, RmH, Res0, Res1, Res2;
UINT32 temp0, temp1, temp2, temp3;
@@ -1019,7 +1018,7 @@ INLINE void MAC_L(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MAC.W @Rm+,@Rn+ */
-INLINE void MAC_W(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MAC_W(sh4_state *sh4, UINT32 m, UINT32 n)
{
INT32 tempm, tempn, dest, src, ans;
UINT32 templ;
@@ -1071,55 +1070,55 @@ INLINE void MAC_W(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MOV Rm,Rn */
-INLINE void MOV(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOV(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = sh4->r[m];
}
/* MOV.B Rm,@Rn */
-INLINE void MOVBS(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVBS(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[n];
WB(sh4, sh4->ea, sh4->r[m] & 0x000000ff);
}
/* MOV.W Rm,@Rn */
-INLINE void MOVWS(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVWS(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[n];
WW(sh4, sh4->ea, sh4->r[m] & 0x0000ffff);
}
/* MOV.L Rm,@Rn */
-INLINE void MOVLS(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVLS(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[n];
WL(sh4, sh4->ea, sh4->r[m] );
}
/* MOV.B @Rm,Rn */
-INLINE void MOVBL(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVBL(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[m];
sh4->r[n] = (UINT32)(INT32)(INT16)(INT8) RB(sh4, sh4->ea );
}
/* MOV.W @Rm,Rn */
-INLINE void MOVWL(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVWL(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[m];
sh4->r[n] = (UINT32)(INT32)(INT16) RW(sh4, sh4->ea );
}
/* MOV.L @Rm,Rn */
-INLINE void MOVLL(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVLL(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[m];
sh4->r[n] = RL(sh4, sh4->ea );
}
/* MOV.B Rm,@-Rn */
-INLINE void MOVBM(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVBM(sh4_state *sh4, UINT32 m, UINT32 n)
{
/* SMG : bug fix, was reading sh4->r[n] */
UINT32 data = sh4->r[m] & 0x000000ff;
@@ -1129,7 +1128,7 @@ INLINE void MOVBM(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MOV.W Rm,@-Rn */
-INLINE void MOVWM(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVWM(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 data = sh4->r[m] & 0x0000ffff;
@@ -1138,7 +1137,7 @@ INLINE void MOVWM(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MOV.L Rm,@-Rn */
-INLINE void MOVLM(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVLM(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 data = sh4->r[m];
@@ -1147,7 +1146,7 @@ INLINE void MOVLM(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MOV.B @Rm+,Rn */
-INLINE void MOVBP(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVBP(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = (UINT32)(INT32)(INT16)(INT8) RB(sh4, sh4->r[m] );
if (n != m)
@@ -1155,7 +1154,7 @@ INLINE void MOVBP(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MOV.W @Rm+,Rn */
-INLINE void MOVWP(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVWP(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = (UINT32)(INT32)(INT16) RW(sh4, sh4->r[m] );
if (n != m)
@@ -1163,7 +1162,7 @@ INLINE void MOVWP(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MOV.L @Rm+,Rn */
-INLINE void MOVLP(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVLP(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = RL(sh4, sh4->r[m] );
if (n != m)
@@ -1171,55 +1170,55 @@ INLINE void MOVLP(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MOV.B Rm,@(R0,Rn) */
-INLINE void MOVBS0(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVBS0(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[n] + sh4->r[0];
WB(sh4, sh4->ea, sh4->r[m] & 0x000000ff );
}
/* MOV.W Rm,@(R0,Rn) */
-INLINE void MOVWS0(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVWS0(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[n] + sh4->r[0];
WW(sh4, sh4->ea, sh4->r[m] & 0x0000ffff );
}
/* MOV.L Rm,@(R0,Rn) */
-INLINE void MOVLS0(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVLS0(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[n] + sh4->r[0];
WL(sh4, sh4->ea, sh4->r[m] );
}
/* MOV.B @(R0,Rm),Rn */
-INLINE void MOVBL0(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVBL0(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[m] + sh4->r[0];
sh4->r[n] = (UINT32)(INT32)(INT16)(INT8) RB(sh4, sh4->ea );
}
/* MOV.W @(R0,Rm),Rn */
-INLINE void MOVWL0(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVWL0(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[m] + sh4->r[0];
sh4->r[n] = (UINT32)(INT32)(INT16) RW(sh4, sh4->ea );
}
/* MOV.L @(R0,Rm),Rn */
-INLINE void MOVLL0(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MOVLL0(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[m] + sh4->r[0];
sh4->r[n] = RL(sh4, sh4->ea );
}
/* MOV #imm,Rn */
-INLINE void MOVI(SH4 *sh4, UINT32 i, UINT32 n)
+INLINE void MOVI(sh4_state *sh4, UINT32 i, UINT32 n)
{
sh4->r[n] = (UINT32)(INT32)(INT16)(INT8) i;
}
/* MOV.W @(disp8,PC),Rn */
-INLINE void MOVWI(SH4 *sh4, UINT32 d, UINT32 n)
+INLINE void MOVWI(sh4_state *sh4, UINT32 d, UINT32 n)
{
UINT32 disp = d & 0xff;
sh4->ea = sh4->pc + disp * 2 + 2;
@@ -1227,7 +1226,7 @@ INLINE void MOVWI(SH4 *sh4, UINT32 d, UINT32 n)
}
/* MOV.L @(disp8,PC),Rn */
-INLINE void MOVLI(SH4 *sh4, UINT32 d, UINT32 n)
+INLINE void MOVLI(sh4_state *sh4, UINT32 d, UINT32 n)
{
UINT32 disp = d & 0xff;
sh4->ea = ((sh4->pc + 2) & ~3) + disp * 4;
@@ -1235,7 +1234,7 @@ INLINE void MOVLI(SH4 *sh4, UINT32 d, UINT32 n)
}
/* MOV.B @(disp8,GBR),R0 */
-INLINE void MOVBLG(SH4 *sh4, UINT32 d)
+INLINE void MOVBLG(sh4_state *sh4, UINT32 d)
{
UINT32 disp = d & 0xff;
sh4->ea = sh4->gbr + disp;
@@ -1243,7 +1242,7 @@ INLINE void MOVBLG(SH4 *sh4, UINT32 d)
}
/* MOV.W @(disp8,GBR),R0 */
-INLINE void MOVWLG(SH4 *sh4, UINT32 d)
+INLINE void MOVWLG(sh4_state *sh4, UINT32 d)
{
UINT32 disp = d & 0xff;
sh4->ea = sh4->gbr + disp * 2;
@@ -1251,7 +1250,7 @@ INLINE void MOVWLG(SH4 *sh4, UINT32 d)
}
/* MOV.L @(disp8,GBR),R0 */
-INLINE void MOVLLG(SH4 *sh4, UINT32 d)
+INLINE void MOVLLG(sh4_state *sh4, UINT32 d)
{
UINT32 disp = d & 0xff;
sh4->ea = sh4->gbr + disp * 4;
@@ -1259,7 +1258,7 @@ INLINE void MOVLLG(SH4 *sh4, UINT32 d)
}
/* MOV.B R0,@(disp8,GBR) */
-INLINE void MOVBSG(SH4 *sh4, UINT32 d)
+INLINE void MOVBSG(sh4_state *sh4, UINT32 d)
{
UINT32 disp = d & 0xff;
sh4->ea = sh4->gbr + disp;
@@ -1267,7 +1266,7 @@ INLINE void MOVBSG(SH4 *sh4, UINT32 d)
}
/* MOV.W R0,@(disp8,GBR) */
-INLINE void MOVWSG(SH4 *sh4, UINT32 d)
+INLINE void MOVWSG(sh4_state *sh4, UINT32 d)
{
UINT32 disp = d & 0xff;
sh4->ea = sh4->gbr + disp * 2;
@@ -1275,7 +1274,7 @@ INLINE void MOVWSG(SH4 *sh4, UINT32 d)
}
/* MOV.L R0,@(disp8,GBR) */
-INLINE void MOVLSG(SH4 *sh4, UINT32 d)
+INLINE void MOVLSG(sh4_state *sh4, UINT32 d)
{
UINT32 disp = d & 0xff;
sh4->ea = sh4->gbr + disp * 4;
@@ -1283,7 +1282,7 @@ INLINE void MOVLSG(SH4 *sh4, UINT32 d)
}
/* MOV.B R0,@(disp4,Rn) */
-INLINE void MOVBS4(SH4 *sh4, UINT32 d, UINT32 n)
+INLINE void MOVBS4(sh4_state *sh4, UINT32 d, UINT32 n)
{
UINT32 disp = d & 0x0f;
sh4->ea = sh4->r[n] + disp;
@@ -1291,7 +1290,7 @@ INLINE void MOVBS4(SH4 *sh4, UINT32 d, UINT32 n)
}
/* MOV.W R0,@(disp4,Rn) */
-INLINE void MOVWS4(SH4 *sh4, UINT32 d, UINT32 n)
+INLINE void MOVWS4(sh4_state *sh4, UINT32 d, UINT32 n)
{
UINT32 disp = d & 0x0f;
sh4->ea = sh4->r[n] + disp * 2;
@@ -1299,7 +1298,7 @@ INLINE void MOVWS4(SH4 *sh4, UINT32 d, UINT32 n)
}
/* MOV.L Rm,@(disp4,Rn) */
-INLINE void MOVLS4(SH4 *sh4, UINT32 m, UINT32 d, UINT32 n)
+INLINE void MOVLS4(sh4_state *sh4, UINT32 m, UINT32 d, UINT32 n)
{
UINT32 disp = d & 0x0f;
sh4->ea = sh4->r[n] + disp * 4;
@@ -1307,7 +1306,7 @@ INLINE void MOVLS4(SH4 *sh4, UINT32 m, UINT32 d, UINT32 n)
}
/* MOV.B @(disp4,Rm),R0 */
-INLINE void MOVBL4(SH4 *sh4, UINT32 m, UINT32 d)
+INLINE void MOVBL4(sh4_state *sh4, UINT32 m, UINT32 d)
{
UINT32 disp = d & 0x0f;
sh4->ea = sh4->r[m] + disp;
@@ -1315,7 +1314,7 @@ INLINE void MOVBL4(SH4 *sh4, UINT32 m, UINT32 d)
}
/* MOV.W @(disp4,Rm),R0 */
-INLINE void MOVWL4(SH4 *sh4, UINT32 m, UINT32 d)
+INLINE void MOVWL4(sh4_state *sh4, UINT32 m, UINT32 d)
{
UINT32 disp = d & 0x0f;
sh4->ea = sh4->r[m] + disp * 2;
@@ -1323,7 +1322,7 @@ INLINE void MOVWL4(SH4 *sh4, UINT32 m, UINT32 d)
}
/* MOV.L @(disp4,Rm),Rn */
-INLINE void MOVLL4(SH4 *sh4, UINT32 m, UINT32 d, UINT32 n)
+INLINE void MOVLL4(sh4_state *sh4, UINT32 m, UINT32 d, UINT32 n)
{
UINT32 disp = d & 0x0f;
sh4->ea = sh4->r[m] + disp * 4;
@@ -1331,7 +1330,7 @@ INLINE void MOVLL4(SH4 *sh4, UINT32 m, UINT32 d, UINT32 n)
}
/* MOVA @(disp8,PC),R0 */
-INLINE void MOVA(SH4 *sh4, UINT32 d)
+INLINE void MOVA(sh4_state *sh4, UINT32 d)
{
UINT32 disp = d & 0xff;
sh4->ea = ((sh4->pc + 2) & ~3) + disp * 4;
@@ -1339,38 +1338,38 @@ INLINE void MOVA(SH4 *sh4, UINT32 d)
}
/* MOVT Rn */
-INLINE void MOVT(SH4 *sh4, UINT32 n)
+INLINE void MOVT(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->sr & T;
}
/* MUL.L Rm,Rn */
-INLINE void MULL(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MULL(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->macl = sh4->r[n] * sh4->r[m];
sh4->sh4_icount--;
}
/* MULS Rm,Rn */
-INLINE void MULS(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MULS(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->macl = (INT16) sh4->r[n] * (INT16) sh4->r[m];
}
/* MULU Rm,Rn */
-INLINE void MULU(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void MULU(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->macl = (UINT16) sh4->r[n] * (UINT16) sh4->r[m];
}
/* NEG Rm,Rn */
-INLINE void NEG(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void NEG(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = 0 - sh4->r[m];
}
/* NEGC Rm,Rn */
-INLINE void NEGC(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void NEGC(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 temp;
@@ -1383,31 +1382,31 @@ INLINE void NEGC(SH4 *sh4, UINT32 m, UINT32 n)
}
/* NOP */
-INLINE void NOP(SH4 *sh4)
+INLINE void NOP(sh4_state *sh4)
{
}
/* NOT Rm,Rn */
-INLINE void NOT(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void NOT(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = ~sh4->r[m];
}
/* OR Rm,Rn */
-INLINE void OR(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void OR(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] |= sh4->r[m];
}
/* OR #imm,R0 */
-INLINE void ORI(SH4 *sh4, UINT32 i)
+INLINE void ORI(sh4_state *sh4, UINT32 i)
{
sh4->r[0] |= i;
sh4->sh4_icount -= 2;
}
/* OR.B #imm,@(R0,GBR) */
-INLINE void ORM(SH4 *sh4, UINT32 i)
+INLINE void ORM(sh4_state *sh4, UINT32 i)
{
UINT32 temp;
@@ -1418,7 +1417,7 @@ INLINE void ORM(SH4 *sh4, UINT32 i)
}
/* ROTCL Rn */
-INLINE void ROTCL(SH4 *sh4, UINT32 n)
+INLINE void ROTCL(sh4_state *sh4, UINT32 n)
{
UINT32 temp;
@@ -1428,7 +1427,7 @@ INLINE void ROTCL(SH4 *sh4, UINT32 n)
}
/* ROTCR Rn */
-INLINE void ROTCR(SH4 *sh4, UINT32 n)
+INLINE void ROTCR(sh4_state *sh4, UINT32 n)
{
UINT32 temp;
temp = (sh4->sr & T) << 31;
@@ -1440,21 +1439,21 @@ INLINE void ROTCR(SH4 *sh4, UINT32 n)
}
/* ROTL Rn */
-INLINE void ROTL(SH4 *sh4, UINT32 n)
+INLINE void ROTL(sh4_state *sh4, UINT32 n)
{
sh4->sr = (sh4->sr & ~T) | ((sh4->r[n] >> 31) & T);
sh4->r[n] = (sh4->r[n] << 1) | (sh4->r[n] >> 31);
}
/* ROTR Rn */
-INLINE void ROTR(SH4 *sh4, UINT32 n)
+INLINE void ROTR(sh4_state *sh4, UINT32 n)
{
sh4->sr = (sh4->sr & ~T) | (sh4->r[n] & T);
sh4->r[n] = (sh4->r[n] >> 1) | (sh4->r[n] << 31);
}
/* RTE */
-INLINE void RTE(SH4 *sh4)
+INLINE void RTE(sh4_state *sh4)
{
sh4->delay = sh4->pc;
sh4->pc = sh4->ea = sh4->spc;
@@ -1468,7 +1467,7 @@ INLINE void RTE(SH4 *sh4)
}
/* RTS */
-INLINE void RTS(SH4 *sh4)
+INLINE void RTS(sh4_state *sh4)
{
sh4->delay = sh4->pc;
sh4->pc = sh4->ea = sh4->pr;
@@ -1476,77 +1475,77 @@ INLINE void RTS(SH4 *sh4)
}
/* SETT */
-INLINE void SETT(SH4 *sh4)
+INLINE void SETT(sh4_state *sh4)
{
sh4->sr |= T;
}
/* SHAL Rn (same as SHLL) */
-INLINE void SHAL(SH4 *sh4, UINT32 n)
+INLINE void SHAL(sh4_state *sh4, UINT32 n)
{
sh4->sr = (sh4->sr & ~T) | ((sh4->r[n] >> 31) & T);
sh4->r[n] <<= 1;
}
/* SHAR Rn */
-INLINE void SHAR(SH4 *sh4, UINT32 n)
+INLINE void SHAR(sh4_state *sh4, UINT32 n)
{
sh4->sr = (sh4->sr & ~T) | (sh4->r[n] & T);
sh4->r[n] = (UINT32)((INT32)sh4->r[n] >> 1);
}
/* SHLL Rn (same as SHAL) */
-INLINE void SHLL(SH4 *sh4, UINT32 n)
+INLINE void SHLL(sh4_state *sh4, UINT32 n)
{
sh4->sr = (sh4->sr & ~T) | ((sh4->r[n] >> 31) & T);
sh4->r[n] <<= 1;
}
/* SHLL2 Rn */
-INLINE void SHLL2(SH4 *sh4, UINT32 n)
+INLINE void SHLL2(sh4_state *sh4, UINT32 n)
{
sh4->r[n] <<= 2;
}
/* SHLL8 Rn */
-INLINE void SHLL8(SH4 *sh4, UINT32 n)
+INLINE void SHLL8(sh4_state *sh4, UINT32 n)
{
sh4->r[n] <<= 8;
}
/* SHLL16 Rn */
-INLINE void SHLL16(SH4 *sh4, UINT32 n)
+INLINE void SHLL16(sh4_state *sh4, UINT32 n)
{
sh4->r[n] <<= 16;
}
/* SHLR Rn */
-INLINE void SHLR(SH4 *sh4, UINT32 n)
+INLINE void SHLR(sh4_state *sh4, UINT32 n)
{
sh4->sr = (sh4->sr & ~T) | (sh4->r[n] & T);
sh4->r[n] >>= 1;
}
/* SHLR2 Rn */
-INLINE void SHLR2(SH4 *sh4, UINT32 n)
+INLINE void SHLR2(sh4_state *sh4, UINT32 n)
{
sh4->r[n] >>= 2;
}
/* SHLR8 Rn */
-INLINE void SHLR8(SH4 *sh4, UINT32 n)
+INLINE void SHLR8(sh4_state *sh4, UINT32 n)
{
sh4->r[n] >>= 8;
}
/* SHLR16 Rn */
-INLINE void SHLR16(SH4 *sh4, UINT32 n)
+INLINE void SHLR16(sh4_state *sh4, UINT32 n)
{
sh4->r[n] >>= 16;
}
/* SLEEP */
-INLINE void SLEEP(SH4 *sh4)
+INLINE void SLEEP(sh4_state *sh4)
{
/* 0 = normal mode */
/* 1 = enters into power-down mode */
@@ -1562,25 +1561,25 @@ INLINE void SLEEP(SH4 *sh4)
}
/* STC SR,Rn */
-INLINE void STCSR(SH4 *sh4, UINT32 n)
+INLINE void STCSR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->sr;
}
/* STC GBR,Rn */
-INLINE void STCGBR(SH4 *sh4, UINT32 n)
+INLINE void STCGBR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->gbr;
}
/* STC VBR,Rn */
-INLINE void STCVBR(SH4 *sh4, UINT32 n)
+INLINE void STCVBR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->vbr;
}
/* STC.L SR,@-Rn */
-INLINE void STCMSR(SH4 *sh4, UINT32 n)
+INLINE void STCMSR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1589,7 +1588,7 @@ INLINE void STCMSR(SH4 *sh4, UINT32 n)
}
/* STC.L GBR,@-Rn */
-INLINE void STCMGBR(SH4 *sh4, UINT32 n)
+INLINE void STCMGBR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1598,7 +1597,7 @@ INLINE void STCMGBR(SH4 *sh4, UINT32 n)
}
/* STC.L VBR,@-Rn */
-INLINE void STCMVBR(SH4 *sh4, UINT32 n)
+INLINE void STCMVBR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1607,25 +1606,25 @@ INLINE void STCMVBR(SH4 *sh4, UINT32 n)
}
/* STS MACH,Rn */
-INLINE void STSMACH(SH4 *sh4, UINT32 n)
+INLINE void STSMACH(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->mach;
}
/* STS MACL,Rn */
-INLINE void STSMACL(SH4 *sh4, UINT32 n)
+INLINE void STSMACL(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->macl;
}
/* STS PR,Rn */
-INLINE void STSPR(SH4 *sh4, UINT32 n)
+INLINE void STSPR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->pr;
}
/* STS.L MACH,@-Rn */
-INLINE void STSMMACH(SH4 *sh4, UINT32 n)
+INLINE void STSMMACH(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1633,7 +1632,7 @@ INLINE void STSMMACH(SH4 *sh4, UINT32 n)
}
/* STS.L MACL,@-Rn */
-INLINE void STSMMACL(SH4 *sh4, UINT32 n)
+INLINE void STSMMACL(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1641,7 +1640,7 @@ INLINE void STSMMACL(SH4 *sh4, UINT32 n)
}
/* STS.L PR,@-Rn */
-INLINE void STSMPR(SH4 *sh4, UINT32 n)
+INLINE void STSMPR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1649,13 +1648,13 @@ INLINE void STSMPR(SH4 *sh4, UINT32 n)
}
/* SUB Rm,Rn */
-INLINE void SUB(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void SUB(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] -= sh4->r[m];
}
/* SUBC Rm,Rn */
-INLINE void SUBC(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void SUBC(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 tmp0, tmp1;
@@ -1671,7 +1670,7 @@ INLINE void SUBC(SH4 *sh4, UINT32 m, UINT32 n)
}
/* SUBV Rm,Rn */
-INLINE void SUBV(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void SUBV(sh4_state *sh4, UINT32 m, UINT32 n)
{
INT32 dest, src, ans;
@@ -1702,7 +1701,7 @@ INLINE void SUBV(SH4 *sh4, UINT32 m, UINT32 n)
}
/* SWAP.B Rm,Rn */
-INLINE void SWAPB(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void SWAPB(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 temp0, temp1;
@@ -1713,7 +1712,7 @@ INLINE void SWAPB(SH4 *sh4, UINT32 m, UINT32 n)
}
/* SWAP.W Rm,Rn */
-INLINE void SWAPW(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void SWAPW(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 temp;
@@ -1722,7 +1721,7 @@ INLINE void SWAPW(SH4 *sh4, UINT32 m, UINT32 n)
}
/* TAS.B @Rn */
-INLINE void TAS(SH4 *sh4, UINT32 n)
+INLINE void TAS(sh4_state *sh4, UINT32 n)
{
UINT32 temp;
sh4->ea = sh4->r[n];
@@ -1739,7 +1738,7 @@ INLINE void TAS(SH4 *sh4, UINT32 n)
}
/* TRAPA #imm */
-INLINE void TRAPA(SH4 *sh4, UINT32 i)
+INLINE void TRAPA(sh4_state *sh4, UINT32 i)
{
UINT32 imm = i & 0xff;
@@ -1764,7 +1763,7 @@ INLINE void TRAPA(SH4 *sh4, UINT32 i)
}
/* TST Rm,Rn */
-INLINE void TST(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void TST(sh4_state *sh4, UINT32 m, UINT32 n)
{
if ((sh4->r[n] & sh4->r[m]) == 0)
sh4->sr |= T;
@@ -1773,7 +1772,7 @@ INLINE void TST(SH4 *sh4, UINT32 m, UINT32 n)
}
/* TST #imm,R0 */
-INLINE void TSTI(SH4 *sh4, UINT32 i)
+INLINE void TSTI(sh4_state *sh4, UINT32 i)
{
UINT32 imm = i & 0xff;
@@ -1784,7 +1783,7 @@ INLINE void TSTI(SH4 *sh4, UINT32 i)
}
/* TST.B #imm,@(R0,GBR) */
-INLINE void TSTM(SH4 *sh4, UINT32 i)
+INLINE void TSTM(sh4_state *sh4, UINT32 i)
{
UINT32 imm = i & 0xff;
@@ -1797,20 +1796,20 @@ INLINE void TSTM(SH4 *sh4, UINT32 i)
}
/* XOR Rm,Rn */
-INLINE void XOR(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void XOR(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] ^= sh4->r[m];
}
/* XOR #imm,R0 */
-INLINE void XORI(SH4 *sh4, UINT32 i)
+INLINE void XORI(sh4_state *sh4, UINT32 i)
{
UINT32 imm = i & 0xff;
sh4->r[0] ^= imm;
}
/* XOR.B #imm,@(R0,GBR) */
-INLINE void XORM(SH4 *sh4, UINT32 i)
+INLINE void XORM(sh4_state *sh4, UINT32 i)
{
UINT32 imm = i & 0xff;
UINT32 temp;
@@ -1823,7 +1822,7 @@ INLINE void XORM(SH4 *sh4, UINT32 i)
}
/* XTRCT Rm,Rn */
-INLINE void XTRCT(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void XTRCT(sh4_state *sh4, UINT32 m, UINT32 n)
{
UINT32 temp;
@@ -1833,49 +1832,49 @@ INLINE void XTRCT(SH4 *sh4, UINT32 m, UINT32 n)
}
/* STC SSR,Rn */
-INLINE void STCSSR(SH4 *sh4, UINT32 n)
+INLINE void STCSSR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->ssr;
}
/* STC SPC,Rn */
-INLINE void STCSPC(SH4 *sh4, UINT32 n)
+INLINE void STCSPC(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->spc;
}
/* STC SGR,Rn */
-INLINE void STCSGR(SH4 *sh4, UINT32 n)
+INLINE void STCSGR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->sgr;
}
/* STS FPUL,Rn */
-INLINE void STSFPUL(SH4 *sh4, UINT32 n)
+INLINE void STSFPUL(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->fpul;
}
/* STS FPSCR,Rn */
-INLINE void STSFPSCR(SH4 *sh4, UINT32 n)
+INLINE void STSFPSCR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->fpscr & 0x003FFFFF;
}
/* STC DBR,Rn */
-INLINE void STCDBR(SH4 *sh4, UINT32 n)
+INLINE void STCDBR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] = sh4->dbr;
}
/* STCRBANK Rm_BANK,Rn */
-INLINE void STCRBANK(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void STCRBANK(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] = sh4->rbnk[sh4->sr&sRB ? 0 : 1][m & 7];
}
/* STCMRBANK Rm_BANK,@-Rn */
-INLINE void STCMRBANK(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void STCMRBANK(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1884,24 +1883,24 @@ INLINE void STCMRBANK(SH4 *sh4, UINT32 m, UINT32 n)
}
/* MOVCA.L R0,@Rn */
-INLINE void MOVCAL(SH4 *sh4, UINT32 n)
+INLINE void MOVCAL(sh4_state *sh4, UINT32 n)
{
sh4->ea = sh4->r[n];
WL(sh4, sh4->ea, sh4->r[0] );
}
-INLINE void CLRS(SH4 *sh4)
+INLINE void CLRS(sh4_state *sh4)
{
sh4->sr &= ~S;
}
-INLINE void SETS(SH4 *sh4)
+INLINE void SETS(sh4_state *sh4)
{
sh4->sr |= S;
}
/* STS.L SGR,@-Rn */
-INLINE void STCMSGR(SH4 *sh4, UINT32 n)
+INLINE void STCMSGR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1909,7 +1908,7 @@ INLINE void STCMSGR(SH4 *sh4, UINT32 n)
}
/* STS.L FPUL,@-Rn */
-INLINE void STSMFPUL(SH4 *sh4, UINT32 n)
+INLINE void STSMFPUL(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1917,7 +1916,7 @@ INLINE void STSMFPUL(SH4 *sh4, UINT32 n)
}
/* STS.L FPSCR,@-Rn */
-INLINE void STSMFPSCR(SH4 *sh4, UINT32 n)
+INLINE void STSMFPSCR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1925,7 +1924,7 @@ INLINE void STSMFPSCR(SH4 *sh4, UINT32 n)
}
/* STC.L DBR,@-Rn */
-INLINE void STCMDBR(SH4 *sh4, UINT32 n)
+INLINE void STCMDBR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1933,7 +1932,7 @@ INLINE void STCMDBR(SH4 *sh4, UINT32 n)
}
/* STC.L SSR,@-Rn */
-INLINE void STCMSSR(SH4 *sh4, UINT32 n)
+INLINE void STCMSSR(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1941,7 +1940,7 @@ INLINE void STCMSSR(SH4 *sh4, UINT32 n)
}
/* STC.L SPC,@-Rn */
-INLINE void STCMSPC(SH4 *sh4, UINT32 n)
+INLINE void STCMSPC(sh4_state *sh4, UINT32 n)
{
sh4->r[n] -= 4;
sh4->ea = sh4->r[n];
@@ -1949,7 +1948,7 @@ INLINE void STCMSPC(SH4 *sh4, UINT32 n)
}
/* LDS.L @Rm+,FPUL */
-INLINE void LDSMFPUL(SH4 *sh4, UINT32 m)
+INLINE void LDSMFPUL(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->fpul = RL(sh4, sh4->ea );
@@ -1957,7 +1956,7 @@ INLINE void LDSMFPUL(SH4 *sh4, UINT32 m)
}
/* LDS.L @Rm+,FPSCR */
-INLINE void LDSMFPSCR(SH4 *sh4, UINT32 m)
+INLINE void LDSMFPSCR(sh4_state *sh4, UINT32 m)
{
UINT32 s;
@@ -1977,7 +1976,7 @@ UINT32 s;
}
/* LDC.L @Rm+,DBR */
-INLINE void LDCMDBR(SH4 *sh4, UINT32 m)
+INLINE void LDCMDBR(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->dbr = RL(sh4, sh4->ea );
@@ -1985,7 +1984,7 @@ INLINE void LDCMDBR(SH4 *sh4, UINT32 m)
}
/* LDC.L @Rn+,Rm_BANK */
-INLINE void LDCMRBANK(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void LDCMRBANK(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->ea = sh4->r[n];
sh4->rbnk[sh4->sr&sRB ? 0 : 1][m & 7] = RL(sh4, sh4->ea );
@@ -1993,7 +1992,7 @@ INLINE void LDCMRBANK(SH4 *sh4, UINT32 m, UINT32 n)
}
/* LDC.L @Rm+,SSR */
-INLINE void LDCMSSR(SH4 *sh4, UINT32 m)
+INLINE void LDCMSSR(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->ssr = RL(sh4, sh4->ea );
@@ -2001,7 +2000,7 @@ INLINE void LDCMSSR(SH4 *sh4, UINT32 m)
}
/* LDC.L @Rm+,SPC */
-INLINE void LDCMSPC(SH4 *sh4, UINT32 m)
+INLINE void LDCMSPC(sh4_state *sh4, UINT32 m)
{
sh4->ea = sh4->r[m];
sh4->spc = RL(sh4, sh4->ea );
@@ -2009,13 +2008,13 @@ INLINE void LDCMSPC(SH4 *sh4, UINT32 m)
}
/* LDS Rm,FPUL */
-INLINE void LDSFPUL(SH4 *sh4, UINT32 m)
+INLINE void LDSFPUL(sh4_state *sh4, UINT32 m)
{
sh4->fpul = sh4->r[m];
}
/* LDS Rm,FPSCR */
-INLINE void LDSFPSCR(SH4 *sh4, UINT32 m)
+INLINE void LDSFPSCR(sh4_state *sh4, UINT32 m)
{
UINT32 s;
@@ -2032,13 +2031,13 @@ UINT32 s;
}
/* LDC Rm,DBR */
-INLINE void LDCDBR(SH4 *sh4, UINT32 m)
+INLINE void LDCDBR(sh4_state *sh4, UINT32 m)
{
sh4->dbr = sh4->r[m];
}
/* SHAD Rm,Rn */
-INLINE void SHAD(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void SHAD(sh4_state *sh4, UINT32 m,UINT32 n)
{
if ((sh4->r[m] & 0x80000000) == 0)
sh4->r[n] = sh4->r[n] << (sh4->r[m] & 0x1F);
@@ -2052,7 +2051,7 @@ INLINE void SHAD(SH4 *sh4, UINT32 m,UINT32 n)
}
/* SHLD Rm,Rn */
-INLINE void SHLD(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void SHLD(sh4_state *sh4, UINT32 m,UINT32 n)
{
if ((sh4->r[m] & 0x80000000) == 0)
sh4->r[n] = sh4->r[n] << (sh4->r[m] & 0x1F);
@@ -2063,24 +2062,24 @@ INLINE void SHLD(SH4 *sh4, UINT32 m,UINT32 n)
}
/* LDCRBANK Rn,Rm_BANK */
-INLINE void LDCRBANK(SH4 *sh4, UINT32 m, UINT32 n)
+INLINE void LDCRBANK(sh4_state *sh4, UINT32 m, UINT32 n)
{
sh4->rbnk[sh4->sr&sRB ? 0 : 1][m & 7] = sh4->r[n];
}
/* LDC Rm,SSR */
-INLINE void LDCSSR(SH4 *sh4, UINT32 m)
+INLINE void LDCSSR(sh4_state *sh4, UINT32 m)
{
sh4->ssr = sh4->r[m];
}
/* LDC Rm,SPC */
-INLINE void LDCSPC(SH4 *sh4, UINT32 m)
+INLINE void LDCSPC(sh4_state *sh4, UINT32 m)
{
sh4->spc = sh4->r[m];
}
-static UINT32 sh4_getsqremap(SH4 *sh4, UINT32 address)
+static UINT32 sh4_getsqremap(sh4_state *sh4, UINT32 address)
{
if (!sh4->sh4_mmu_enabled)
return address;
@@ -2102,7 +2101,7 @@ static UINT32 sh4_getsqremap(SH4 *sh4, UINT32 address)
}
/* PREF @Rn */
-INLINE void PREFM(SH4 *sh4, UINT32 n)
+INLINE void PREFM(sh4_state *sh4, UINT32 n)
{
int a;
UINT32 addr,dest,sq;
@@ -2140,7 +2139,7 @@ INLINE void PREFM(SH4 *sh4, UINT32 n)
/*****************************************************************************
* OPCODE DISPATCHERS
*****************************************************************************/
-INLINE void op0000(SH4 *sh4, UINT16 opcode)
+INLINE void op0000(sh4_state *sh4, UINT16 opcode)
{
switch (opcode & 0xF)
{
@@ -2261,12 +2260,12 @@ INLINE void op0000(SH4 *sh4, UINT16 opcode)
}
}
-INLINE void op0001(SH4 *sh4, UINT16 opcode)
+INLINE void op0001(sh4_state *sh4, UINT16 opcode)
{
MOVLS4(sh4, Rm, opcode & 0x0f, Rn);
}
-INLINE void op0010(SH4 *sh4, UINT16 opcode)
+INLINE void op0010(sh4_state *sh4, UINT16 opcode)
{
switch (opcode & 15)
{
@@ -2289,7 +2288,7 @@ INLINE void op0010(SH4 *sh4, UINT16 opcode)
}
}
-INLINE void op0011(SH4 *sh4, UINT16 opcode)
+INLINE void op0011(sh4_state *sh4, UINT16 opcode)
{
switch (opcode & 15)
{
@@ -2312,7 +2311,7 @@ INLINE void op0011(SH4 *sh4, UINT16 opcode)
}
}
-INLINE void op0100(SH4 *sh4, UINT16 opcode)
+INLINE void op0100(sh4_state *sh4, UINT16 opcode)
{
switch (opcode & 0xF)
{
@@ -2507,12 +2506,12 @@ INLINE void op0100(SH4 *sh4, UINT16 opcode)
}
}
-INLINE void op0101(SH4 *sh4, UINT16 opcode)
+INLINE void op0101(sh4_state *sh4, UINT16 opcode)
{
MOVLL4(sh4, Rm, opcode & 0x0f, Rn);
}
-INLINE void op0110(SH4 *sh4, UINT16 opcode)
+INLINE void op0110(sh4_state *sh4, UINT16 opcode)
{
switch (opcode & 15)
{
@@ -2535,12 +2534,12 @@ INLINE void op0110(SH4 *sh4, UINT16 opcode)
}
}
-INLINE void op0111(SH4 *sh4, UINT16 opcode)
+INLINE void op0111(sh4_state *sh4, UINT16 opcode)
{
ADDI(sh4, opcode & 0xff, Rn);
}
-INLINE void op1000(SH4 *sh4, UINT16 opcode)
+INLINE void op1000(sh4_state *sh4, UINT16 opcode)
{
switch ( opcode & (15<<8) )
{
@@ -2564,22 +2563,22 @@ INLINE void op1000(SH4 *sh4, UINT16 opcode)
}
-INLINE void op1001(SH4 *sh4, UINT16 opcode)
+INLINE void op1001(sh4_state *sh4, UINT16 opcode)
{
MOVWI(sh4, opcode & 0xff, Rn);
}
-INLINE void op1010(SH4 *sh4, UINT16 opcode)
+INLINE void op1010(sh4_state *sh4, UINT16 opcode)
{
BRA(sh4, opcode & 0xfff);
}
-INLINE void op1011(SH4 *sh4, UINT16 opcode)
+INLINE void op1011(sh4_state *sh4, UINT16 opcode)
{
BSR(sh4, opcode & 0xfff);
}
-INLINE void op1100(SH4 *sh4, UINT16 opcode)
+INLINE void op1100(sh4_state *sh4, UINT16 opcode)
{
switch (opcode & (15<<8))
{
@@ -2602,12 +2601,12 @@ INLINE void op1100(SH4 *sh4, UINT16 opcode)
}
}
-INLINE void op1101(SH4 *sh4, UINT16 opcode)
+INLINE void op1101(sh4_state *sh4, UINT16 opcode)
{
MOVLI(sh4, opcode & 0xff, Rn);
}
-INLINE void op1110(SH4 *sh4, UINT16 opcode)
+INLINE void op1110(sh4_state *sh4, UINT16 opcode)
{
MOVI(sh4, opcode & 0xff, Rn);
}
@@ -2616,7 +2615,7 @@ INLINE void op1110(SH4 *sh4, UINT16 opcode)
/* FMOV @Rm+,DRn PR=0 SZ=1 1111nnn0mmmm1001 */
/* FMOV @Rm+,XDn PR=0 SZ=1 1111nnn1mmmm1001 */
/* FMOV @Rm+,XDn PR=1 1111nnn1mmmm1001 */
-INLINE void FMOVMRIFR(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void FMOVMRIFR(sh4_state *sh4, UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -2652,7 +2651,7 @@ INLINE void FMOVMRIFR(SH4 *sh4, UINT32 m,UINT32 n)
/* FMOV DRm,@Rn PR=0 SZ=1 1111nnnnmmm01010 */
/* FMOV XDm,@Rn PR=0 SZ=1 1111nnnnmmm11010 */
/* FMOV XDm,@Rn PR=1 1111nnnnmmm11010 */
-INLINE void FMOVFRMR(SH4 *sh4,UINT32 m,UINT32 n)
+INLINE void FMOVFRMR(sh4_state *sh4,UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
m= m & 14;
@@ -2682,7 +2681,7 @@ INLINE void FMOVFRMR(SH4 *sh4,UINT32 m,UINT32 n)
/* FMOV DRm,@-Rn PR=0 SZ=1 1111nnnnmmm01011 */
/* FMOV XDm,@-Rn PR=0 SZ=1 1111nnnnmmm11011 */
/* FMOV XDm,@-Rn PR=1 1111nnnnmmm11011 */
-INLINE void FMOVFRMDR(SH4 *sh4,UINT32 m,UINT32 n)
+INLINE void FMOVFRMDR(sh4_state *sh4,UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
m= m & 14;
@@ -2716,7 +2715,7 @@ INLINE void FMOVFRMDR(SH4 *sh4,UINT32 m,UINT32 n)
/* FMOV DRm,@(R0,Rn) PR=0 SZ=1 1111nnnnmmm00111 */
/* FMOV XDm,@(R0,Rn) PR=0 SZ=1 1111nnnnmmm10111 */
/* FMOV XDm,@(R0,Rn) PR=1 1111nnnnmmm10111 */
-INLINE void FMOVFRS0(SH4 *sh4,UINT32 m,UINT32 n)
+INLINE void FMOVFRS0(sh4_state *sh4,UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
m= m & 14;
@@ -2746,7 +2745,7 @@ INLINE void FMOVFRS0(SH4 *sh4,UINT32 m,UINT32 n)
/* FMOV @(R0,Rm),DRn PR=0 SZ=1 1111nnn0mmmm0110 */
/* FMOV @(R0,Rm),XDn PR=0 SZ=1 1111nnn1mmmm0110 */
/* FMOV @(R0,Rm),XDn PR=1 1111nnn1mmmm0110 */
-INLINE void FMOVS0FR(SH4 *sh4,UINT32 m,UINT32 n)
+INLINE void FMOVS0FR(sh4_state *sh4,UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n= n & 14;
@@ -2777,7 +2776,7 @@ INLINE void FMOVS0FR(SH4 *sh4,UINT32 m,UINT32 n)
/* FMOV @Rm,XDn PR=0 SZ=1 1111nnn1mmmm1000 */
/* FMOV @Rm,XDn PR=1 1111nnn1mmmm1000 */
/* FMOV @Rm,DRn PR=1 1111nnn0mmmm1000 */
-INLINE void FMOVMRFR(SH4 *sh4,UINT32 m,UINT32 n)
+INLINE void FMOVMRFR(sh4_state *sh4,UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
if (n & 1) {
@@ -2816,7 +2815,7 @@ INLINE void FMOVMRFR(SH4 *sh4,UINT32 m,UINT32 n)
/* FMOV XDm,DRn PR=1 XDm -> DRn 1111nnn0mmm11100 */
/* FMOV DRm,XDn PR=1 DRm -> XDn 1111nnn1mmm01100 */
/* FMOV XDm,XDn PR=1 XDm -> XDn 1111nnn1mmm11100 */
-INLINE void FMOVFR(SH4 *sh4,UINT32 m,UINT32 n)
+INLINE void FMOVFR(sh4_state *sh4,UINT32 m,UINT32 n)
{
if ((sh4->fpu_sz == 0) && (sh4->fpu_pr == 0)) /* SZ = 0 */
sh4->fr[n] = sh4->fr[m];
@@ -2842,38 +2841,38 @@ INLINE void FMOVFR(SH4 *sh4,UINT32 m,UINT32 n)
}
/* FLDI1 FRn 1111nnnn10011101 */
-INLINE void FLDI1(SH4 *sh4, UINT32 n)
+INLINE void FLDI1(sh4_state *sh4, UINT32 n)
{
sh4->fr[n] = 0x3F800000;
}
/* FLDI0 FRn 1111nnnn10001101 */
-INLINE void FLDI0(SH4 *sh4, UINT32 n)
+INLINE void FLDI0(sh4_state *sh4, UINT32 n)
{
sh4->fr[n] = 0;
}
/* FLDS FRm,FPUL 1111mmmm00011101 */
-INLINE void FLDS(SH4 *sh4, UINT32 m)
+INLINE void FLDS(sh4_state *sh4, UINT32 m)
{
sh4->fpul = sh4->fr[m];
}
/* FSTS FPUL,FRn 1111nnnn00001101 */
-INLINE void FSTS(SH4 *sh4, UINT32 n)
+INLINE void FSTS(sh4_state *sh4, UINT32 n)
{
sh4->fr[n] = sh4->fpul;
}
/* FRCHG 1111101111111101 */
-INLINE void FRCHG(SH4 *sh4)
+INLINE void FRCHG(sh4_state *sh4)
{
sh4->fpscr ^= FR;
sh4_swap_fp_registers(sh4);
}
/* FSCHG 1111001111111101 */
-INLINE void FSCHG(SH4 *sh4)
+INLINE void FSCHG(sh4_state *sh4)
{
sh4->fpscr ^= SZ;
sh4->fpu_sz = (sh4->fpscr & SZ) ? 1 : 0;
@@ -2881,7 +2880,7 @@ INLINE void FSCHG(SH4 *sh4)
/* FTRC FRm,FPUL PR=0 1111mmmm00111101 */
/* FTRC DRm,FPUL PR=1 1111mmm000111101 */
-INLINE void FTRC(SH4 *sh4, UINT32 n)
+INLINE void FTRC(sh4_state *sh4, UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -2894,7 +2893,7 @@ INLINE void FTRC(SH4 *sh4, UINT32 n)
/* FLOAT FPUL,FRn PR=0 1111nnnn00101101 */
/* FLOAT FPUL,DRn PR=1 1111nnn000101101 */
-INLINE void FLOAT(SH4 *sh4, UINT32 n)
+INLINE void FLOAT(sh4_state *sh4, UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -2906,7 +2905,7 @@ INLINE void FLOAT(SH4 *sh4, UINT32 n)
/* FNEG FRn PR=0 1111nnnn01001101 */
/* FNEG DRn PR=1 1111nnn001001101 */
-INLINE void FNEG(SH4 *sh4, UINT32 n)
+INLINE void FNEG(sh4_state *sh4, UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
FP_RFD(n) = -FP_RFD(n);
@@ -2917,7 +2916,7 @@ INLINE void FNEG(SH4 *sh4, UINT32 n)
/* FABS FRn PR=0 1111nnnn01011101 */
/* FABS DRn PR=1 1111nnn001011101 */
-INLINE void FABS(SH4 *sh4, UINT32 n)
+INLINE void FABS(sh4_state *sh4, UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
#ifdef LSB_FIRST
@@ -2934,7 +2933,7 @@ INLINE void FABS(SH4 *sh4, UINT32 n)
/* FCMP/EQ FRm,FRn PR=0 1111nnnnmmmm0100 */
/* FCMP/EQ DRm,DRn PR=1 1111nnn0mmm00100 */
-INLINE void FCMP_EQ(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void FCMP_EQ(sh4_state *sh4, UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -2953,7 +2952,7 @@ INLINE void FCMP_EQ(SH4 *sh4, UINT32 m,UINT32 n)
/* FCMP/GT FRm,FRn PR=0 1111nnnnmmmm0101 */
/* FCMP/GT DRm,DRn PR=1 1111nnn0mmm00101 */
-INLINE void FCMP_GT(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void FCMP_GT(sh4_state *sh4, UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -2971,7 +2970,7 @@ INLINE void FCMP_GT(SH4 *sh4, UINT32 m,UINT32 n)
}
/* FCNVDS DRm,FPUL PR=1 1111mmm010111101 */
-INLINE void FCNVDS(SH4 *sh4, UINT32 n)
+INLINE void FCNVDS(sh4_state *sh4, UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -2982,7 +2981,7 @@ INLINE void FCNVDS(SH4 *sh4, UINT32 n)
}
/* FCNVSD FPUL, DRn PR=1 1111nnn010101101 */
-INLINE void FCNVSD(SH4 *sh4, UINT32 n)
+INLINE void FCNVSD(sh4_state *sh4, UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -2992,7 +2991,7 @@ INLINE void FCNVSD(SH4 *sh4, UINT32 n)
/* FADD FRm,FRn PR=0 1111nnnnmmmm0000 */
/* FADD DRm,DRn PR=1 1111nnn0mmm00000 */
-INLINE void FADD(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void FADD(sh4_state *sh4, UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -3005,7 +3004,7 @@ INLINE void FADD(SH4 *sh4, UINT32 m,UINT32 n)
/* FSUB FRm,FRn PR=0 1111nnnnmmmm0001 */
/* FSUB DRm,DRn PR=1 1111nnn0mmm00001 */
-INLINE void FSUB(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void FSUB(sh4_state *sh4, UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -3019,7 +3018,7 @@ INLINE void FSUB(SH4 *sh4, UINT32 m,UINT32 n)
/* FMUL FRm,FRn PR=0 1111nnnnmmmm0010 */
/* FMUL DRm,DRn PR=1 1111nnn0mmm00010 */
-INLINE void FMUL(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void FMUL(sh4_state *sh4, UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -3032,7 +3031,7 @@ INLINE void FMUL(SH4 *sh4, UINT32 m,UINT32 n)
/* FDIV FRm,FRn PR=0 1111nnnnmmmm0011 */
/* FDIV DRm,DRn PR=1 1111nnn0mmm00011 */
-INLINE void FDIV(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void FDIV(sh4_state *sh4, UINT32 m,UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -3048,7 +3047,7 @@ INLINE void FDIV(SH4 *sh4, UINT32 m,UINT32 n)
}
/* FMAC FR0,FRm,FRn PR=0 1111nnnnmmmm1110 */
-INLINE void FMAC(SH4 *sh4, UINT32 m,UINT32 n)
+INLINE void FMAC(sh4_state *sh4, UINT32 m,UINT32 n)
{
if (sh4->fpu_pr == 0) { /* PR = 0 */
FP_RFS(n) = (FP_RFS(0) * FP_RFS(m)) + FP_RFS(n);
@@ -3057,7 +3056,7 @@ INLINE void FMAC(SH4 *sh4, UINT32 m,UINT32 n)
/* FSQRT FRn PR=0 1111nnnn01101101 */
/* FSQRT DRn PR=1 1111nnnn01101101 */
-INLINE void FSQRT(SH4 *sh4, UINT32 n)
+INLINE void FSQRT(sh4_state *sh4, UINT32 n)
{
if (sh4->fpu_pr) { /* PR = 1 */
n = n & 14;
@@ -3072,7 +3071,7 @@ INLINE void FSQRT(SH4 *sh4, UINT32 n)
}
/* FSRRA FRn PR=0 1111nnnn01111101 */
-INLINE void FSRRA(SH4 *sh4, UINT32 n)
+INLINE void FSRRA(sh4_state *sh4, UINT32 n)
{
if (FP_RFS(n) < 0)
return;
@@ -3080,7 +3079,7 @@ INLINE void FSRRA(SH4 *sh4, UINT32 n)
}
/* FSSCA FPUL,FRn PR=0 1111nnn011111101 */
-INLINE void FSSCA(SH4 *sh4, UINT32 n)
+INLINE void FSSCA(sh4_state *sh4, UINT32 n)
{
float angle;
@@ -3090,7 +3089,7 @@ float angle;
}
/* FIPR FVm,FVn PR=0 1111nnmm11101101 */
-INLINE void FIPR(SH4 *sh4, UINT32 n)
+INLINE void FIPR(sh4_state *sh4, UINT32 n)
{
UINT32 m;
float ml[4];
@@ -3104,7 +3103,7 @@ int a;
}
/* FTRV XMTRX,FVn PR=0 1111nn0111111101 */
-INLINE void FTRV(SH4 *sh4, UINT32 n)
+INLINE void FTRV(sh4_state *sh4, UINT32 n)
{
int i,j;
float sum[4];
@@ -3119,7 +3118,7 @@ float sum[4];
FP_RFS(n + i) = sum[i];
}
-INLINE void op1111(SH4 *sh4, UINT16 opcode)
+INLINE void op1111(sh4_state *sh4, UINT16 opcode)
{
switch (opcode & 0xf)
{
@@ -3246,7 +3245,7 @@ INLINE void op1111(SH4 *sh4, UINT16 opcode)
static CPU_RESET( sh4 )
{
- SH4 *sh4 = get_safe_token(device);
+ sh4_state *sh4 = get_safe_token(device);
emu_timer *tsaved[4];
emu_timer *tsave[5];
UINT32 *m;
@@ -3327,7 +3326,7 @@ static CPU_RESET( sh4 )
/* Execute cycles - returns number of cycles actually run */
static CPU_EXECUTE( sh4 )
{
- SH4 *sh4 = get_safe_token(device);
+ sh4_state *sh4 = get_safe_token(device);
if (sh4->cpu_off)
{
@@ -3384,7 +3383,7 @@ static CPU_EXECUTE( sh4 )
static CPU_INIT( sh4 )
{
const struct sh4_config *conf = (const struct sh4_config *)device->baseconfig().static_config();
- SH4 *sh4 = get_safe_token(device);
+ sh4_state *sh4 = get_safe_token(device);
sh4_common_init(device);
@@ -3472,7 +3471,7 @@ static CPU_INIT( sh4 )
static CPU_SET_INFO( sh4 )
{
- SH4 *sh4 = get_safe_token(device);
+ sh4_state *sh4 = get_safe_token(device);
switch (state)
{
@@ -3608,7 +3607,7 @@ static CPU_SET_INFO( sh4 )
void sh4_set_ftcsr_callback(running_device *device, sh4_ftcsr_callback callback)
{
- SH4 *sh4 = get_safe_token(device);
+ sh4_state *sh4 = get_safe_token(device);
sh4->ftcsr_read_callback = callback;
}
@@ -3625,7 +3624,7 @@ ADDRESS_MAP_END
static READ64_HANDLER( sh4_tlb_r )
{
- SH4 *sh4 = get_safe_token(space->cpu);
+ sh4_state *sh4 = get_safe_token(space->cpu);
int offs = offset*8;
@@ -3643,7 +3642,7 @@ static READ64_HANDLER( sh4_tlb_r )
static WRITE64_HANDLER( sh4_tlb_w )
{
- SH4 *sh4 = get_safe_token(space->cpu);
+ sh4_state *sh4 = get_safe_token(space->cpu);
int offs = offset*8;
@@ -3674,12 +3673,12 @@ ADDRESS_MAP_END
CPU_GET_INFO( sh4 )
{
- SH4 *sh4 = (device != NULL && device->token() != NULL) ? get_safe_token(device) : NULL;
+ sh4_state *sh4 = (device != NULL && device->token() != NULL) ? get_safe_token(device) : NULL;
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(SH4); break;
+ case CPUINFO_INT_CONTEXT_SIZE: info->i = sizeof(sh4_state); break;
case CPUINFO_INT_INPUT_LINES: info->i = 5; break;
case CPUINFO_INT_DEFAULT_IRQ_VECTOR: info->i = 0; break;
case DEVINFO_INT_ENDIANNESS: info->i = ENDIANNESS_LITTLE; break;
@@ -3882,3 +3881,5 @@ CPU_GET_INFO( sh4 )
#endif
}
}
+
+DEFINE_LEGACY_CPU_DEVICE(SH4, sh4);