mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +03:00
tms57002: significantly improved build speed on lower-end h/w [R. Belmont]
No-whatsnew explanation: this takes OPTIMIZE=3 compile time for this core from over 1 hour down to about 2 minutes on PS3 Linux. (Yes, the tms57002 itself took over an hour to compile before - the thing has 256 MB of RAM and a very slow HDD so when it hits swap, swap hits back).
This commit is contained in:
parent
8e97bca711
commit
bf505cd350
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -488,6 +488,8 @@ src/emu/cpu/tms34010/tms34010.h svneol=native#text/plain
|
|||||||
src/emu/cpu/tms57002/57002dsm.c svneol=native#text/plain
|
src/emu/cpu/tms57002/57002dsm.c svneol=native#text/plain
|
||||||
src/emu/cpu/tms57002/tms57002.c svneol=native#text/plain
|
src/emu/cpu/tms57002/tms57002.c svneol=native#text/plain
|
||||||
src/emu/cpu/tms57002/tms57002.h svneol=native#text/plain
|
src/emu/cpu/tms57002/tms57002.h svneol=native#text/plain
|
||||||
|
src/emu/cpu/tms57002/tms57kdec.c svneol=native#text/plain
|
||||||
|
src/emu/cpu/tms57002/tms57kpr.h svneol=native#text/plain
|
||||||
src/emu/cpu/tms57002/tmsinstr.lst svneol=native#text/plain
|
src/emu/cpu/tms57002/tmsinstr.lst svneol=native#text/plain
|
||||||
src/emu/cpu/tms57002/tmsmake.c svneol=native#text/plain
|
src/emu/cpu/tms57002/tmsmake.c svneol=native#text/plain
|
||||||
src/emu/cpu/tms7000/7000dasm.c svneol=native#text/plain
|
src/emu/cpu/tms7000/7000dasm.c svneol=native#text/plain
|
||||||
|
@ -1631,13 +1631,19 @@ $(CPUOBJ)/tms32051/tms32051.o: $(CPUSRC)/tms32051/tms32051.c \
|
|||||||
|
|
||||||
ifneq ($(filter TMS57002,$(CPUS)),)
|
ifneq ($(filter TMS57002,$(CPUS)),)
|
||||||
OBJDIRS += $(CPUOBJ)/tms57002
|
OBJDIRS += $(CPUOBJ)/tms57002
|
||||||
CPUOBJS += $(CPUOBJ)/tms57002/tms57002.o
|
CPUOBJS += $(CPUOBJ)/tms57002/tms57002.o $(CPUOBJ)/tms57002/tms57kdec.o
|
||||||
DASMOBJS += $(CPUOBJ)/tms57002/57002dsm.o
|
DASMOBJS += $(CPUOBJ)/tms57002/57002dsm.o
|
||||||
TMSMAKE += $(BUILDOUT)/tmsmake$(BUILD_EXE)
|
TMSMAKE += $(BUILDOUT)/tmsmake$(BUILD_EXE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(CPUOBJ)/tms57002/tms57002.o: $(CPUSRC)/tms57002/tms57002.c \
|
$(CPUOBJ)/tms57002/tms57002.o: $(CPUSRC)/tms57002/tms57002.c \
|
||||||
$(CPUSRC)/tms57002/tms57002.h \
|
$(CPUSRC)/tms57002/tms57002.h \
|
||||||
|
$(CPUSRC)/tms57002/tms57kpr.h \
|
||||||
|
$(CPUOBJ)/tms57002/tms57002.inc
|
||||||
|
|
||||||
|
$(CPUOBJ)/tms57002/tms57kdec.o: $(CPUSRC)/tms57002/tms57kdec.c \
|
||||||
|
$(CPUSRC)/tms57002/tms57002.h \
|
||||||
|
$(CPUSRC)/tms57002/tms57kpr.h \
|
||||||
$(CPUOBJ)/tms57002/tms57002.inc
|
$(CPUOBJ)/tms57002/tms57002.inc
|
||||||
|
|
||||||
$(CPUOBJ)/tms57002/57002dsm.o: $(CPUSRC)/tms57002/57002dsm.c \
|
$(CPUOBJ)/tms57002/57002dsm.o: $(CPUSRC)/tms57002/57002dsm.c \
|
||||||
|
@ -1,113 +1,7 @@
|
|||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "tms57002.h"
|
#include "tms57002.h"
|
||||||
|
#include "tms57kpr.h"
|
||||||
CPU_DISASSEMBLE(tms57002);
|
|
||||||
|
|
||||||
#ifdef __GNUC__
|
|
||||||
#define noinline __attribute__((noinline))
|
|
||||||
#else
|
|
||||||
#define noinline /* */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
enum {
|
|
||||||
IN_PLOAD = 0x00000001,
|
|
||||||
IN_CLOAD = 0x00000002,
|
|
||||||
SU_CVAL = 0x00000004,
|
|
||||||
SU_MASK = 0x00000018, SU_ST0 = 0x00, SU_ST1 = 0x08, SU_PRG = 0x10,
|
|
||||||
S_IDLE = 0x00000020,
|
|
||||||
S_READ = 0x00000040,
|
|
||||||
S_WRITE = 0x00000080,
|
|
||||||
S_BRANCH = 0x00000100,
|
|
||||||
S_HOST = 0x00000200
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
ST0_INCS = 0x000001,
|
|
||||||
ST0_DIRI = 0x000002,
|
|
||||||
ST0_FI = 0x000004,
|
|
||||||
ST0_SIM = 0x000008,
|
|
||||||
ST0_PLRI = 0x000020,
|
|
||||||
ST0_PBCI = 0x000040,
|
|
||||||
ST0_DIRO = 0x000080,
|
|
||||||
ST0_FO = 0x000100,
|
|
||||||
ST0_SOM = 0x000600,
|
|
||||||
ST0_PLRO = 0x000800,
|
|
||||||
ST0_PBCO = 0x001000,
|
|
||||||
ST0_CNS = 0x002000,
|
|
||||||
ST0_WORD = 0x004000,
|
|
||||||
ST0_SEL = 0x008000,
|
|
||||||
ST0_M = 0x030000, ST0_M_64K = 0x000000, ST0_M_256K = 0x010000, ST0_M_1M = 0x020000,
|
|
||||||
ST0_SRAM = 0x200000,
|
|
||||||
|
|
||||||
ST1_AOV = 0x000001,
|
|
||||||
ST1_SFAI = 0x000002,
|
|
||||||
ST1_SFAO = 0x000004,
|
|
||||||
ST1_MOVM = 0x000020,
|
|
||||||
ST1_MOV = 0x000040,
|
|
||||||
ST1_SFMA = 0x000180, ST1_SFMA_SHIFT = 7,
|
|
||||||
ST1_SFMO = 0x001800, ST1_SFMO_SHIFT = 11,
|
|
||||||
ST1_RND = 0x038000, ST1_RND_SHIFT = 15,
|
|
||||||
ST1_CRM = 0x0C0000, ST1_CRM_SHIFT = 18, ST1_CRM_32 = 0x000000, ST1_CRM_16H = 0x040000, ST1_CRM_16L = 0x080000,
|
|
||||||
ST1_DBP = 0x100000,
|
|
||||||
ST1_CAS = 0x200000,
|
|
||||||
|
|
||||||
ST1_CACHE = ST1_SFAI|ST1_SFAO|ST1_MOVM|ST1_SFMA|ST1_SFMO|ST1_RND|ST1_CRM|ST1_DBP
|
|
||||||
};
|
|
||||||
|
|
||||||
enum { BR_UB, BR_CB, BR_IDLE };
|
|
||||||
|
|
||||||
enum { IBS = 8192, HBS = 4096 };
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
unsigned short op;
|
|
||||||
short next;
|
|
||||||
unsigned char param;
|
|
||||||
} icd;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
unsigned int st1;
|
|
||||||
short ipc;
|
|
||||||
short next;
|
|
||||||
} hcd;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
short hashbase[256];
|
|
||||||
hcd hashnode[HBS];
|
|
||||||
icd inst[IBS];
|
|
||||||
int hused, iused;
|
|
||||||
} cd;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int branch;
|
|
||||||
short hnode;
|
|
||||||
short ipc;
|
|
||||||
} cstate;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
INT64 macc;
|
|
||||||
|
|
||||||
UINT32 cmem[256];
|
|
||||||
UINT32 dmem0[256];
|
|
||||||
UINT32 dmem1[32];
|
|
||||||
|
|
||||||
UINT32 si[4], so[4];
|
|
||||||
|
|
||||||
UINT32 st0, st1, sti;
|
|
||||||
UINT32 aacc, xoa, xba, xwr, xrd, creg;
|
|
||||||
|
|
||||||
UINT8 pc, ca, id, ba0, ba1, rptc, rptc_next, sa;
|
|
||||||
|
|
||||||
UINT32 xm_adr;
|
|
||||||
|
|
||||||
UINT8 host[4], hidx, allow_update;
|
|
||||||
|
|
||||||
cd cache;
|
|
||||||
|
|
||||||
address_space *program, *data;
|
|
||||||
int icount;
|
|
||||||
int unsupported_inst_warning;
|
|
||||||
} tms57002_t;
|
|
||||||
|
|
||||||
INLINE tms57002_t *get_safe_token(device_t *device)
|
INLINE tms57002_t *get_safe_token(device_t *device)
|
||||||
{
|
{
|
||||||
@ -1018,61 +912,6 @@ void tms57002_execute(tms57002_t *s)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
INLINE int xmode(UINT32 opcode, char type)
|
|
||||||
{
|
|
||||||
if(((opcode & 0x400) && (type == 'c')) || (!(opcode & 0x400) && (type == 'd'))) {
|
|
||||||
if(opcode & 0x100)
|
|
||||||
return 0;
|
|
||||||
else if(opcode & 0x80)
|
|
||||||
return 2;
|
|
||||||
else
|
|
||||||
return 1;
|
|
||||||
} else if(opcode & 0x200)
|
|
||||||
return 2;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE int sfao(UINT32 st1)
|
|
||||||
{
|
|
||||||
return st1 & ST1_SFAO ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE int dbp(UINT32 st1)
|
|
||||||
{
|
|
||||||
return st1 & ST1_DBP ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE int crm(UINT32 st1)
|
|
||||||
{
|
|
||||||
return (st1 & ST1_CRM) >> ST1_CRM_SHIFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE int sfai(UINT32 st1)
|
|
||||||
{
|
|
||||||
return st1 & ST1_SFAI ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE int sfmo(UINT32 st1)
|
|
||||||
{
|
|
||||||
return (st1 & ST1_SFMO) >> ST1_SFMO_SHIFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE int rnd(UINT32 st1)
|
|
||||||
{
|
|
||||||
return (st1 & ST1_RND) >> ST1_RND_SHIFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE int movm(UINT32 st1)
|
|
||||||
{
|
|
||||||
return st1 & ST1_MOVM ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
INLINE int sfma(UINT32 st1)
|
|
||||||
{
|
|
||||||
return (st1 & ST1_SFMA) >> ST1_SFMA_SHIFT;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void tms57002_cache_flush(tms57002_t *s)
|
static void tms57002_cache_flush(tms57002_t *s)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -1091,86 +930,6 @@ static void tms57002_cache_flush(tms57002_t *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tms57002_decode_error(tms57002_t *s, UINT32 opcode)
|
|
||||||
{
|
|
||||||
char buf[256];
|
|
||||||
UINT8 opr[3];
|
|
||||||
if(s->unsupported_inst_warning)
|
|
||||||
return;
|
|
||||||
|
|
||||||
s->unsupported_inst_warning = 1;
|
|
||||||
opr[0] = opcode;
|
|
||||||
opr[1] = opcode >> 8;
|
|
||||||
opr[2] = opcode >> 16;
|
|
||||||
|
|
||||||
CPU_DISASSEMBLE_NAME(tms57002)(0, buf, s->pc, opr, opr, 0);
|
|
||||||
popmessage("tms57002: %s - Contact Mamedev", buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void tms57002_decode_cat1(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs)
|
|
||||||
{
|
|
||||||
switch(opcode >> 18) {
|
|
||||||
case 0x00: // nop
|
|
||||||
break;
|
|
||||||
|
|
||||||
#define CDEC1
|
|
||||||
#include "cpu/tms57002/tms57002.inc"
|
|
||||||
#undef CDEC1
|
|
||||||
|
|
||||||
default:
|
|
||||||
tms57002_decode_error(s, opcode);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void tms57002_decode_cat2_pre(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs)
|
|
||||||
{
|
|
||||||
switch((opcode >> 11) & 0x7f) {
|
|
||||||
case 0x00: // nop
|
|
||||||
break;
|
|
||||||
|
|
||||||
#define CDEC2A
|
|
||||||
#include "cpu/tms57002/tms57002.inc"
|
|
||||||
#undef CDEC2A
|
|
||||||
|
|
||||||
default:
|
|
||||||
tms57002_decode_error(s, opcode);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void tms57002_decode_cat2_post(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs)
|
|
||||||
{
|
|
||||||
switch((opcode >> 11) & 0x7f) {
|
|
||||||
case 0x00: // nop
|
|
||||||
break;
|
|
||||||
|
|
||||||
#define CDEC2B
|
|
||||||
#include "cpu/tms57002/tms57002.inc"
|
|
||||||
#undef CDEC2B
|
|
||||||
|
|
||||||
default:
|
|
||||||
tms57002_decode_error(s, opcode);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void tms57002_decode_cat3(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs)
|
|
||||||
{
|
|
||||||
switch((opcode >> 11) & 0x7f) {
|
|
||||||
case 0x00: // nop
|
|
||||||
break;
|
|
||||||
|
|
||||||
#define CDEC3
|
|
||||||
#include "cpu/tms57002/tms57002.inc"
|
|
||||||
#undef CDEC3
|
|
||||||
|
|
||||||
default:
|
|
||||||
tms57002_decode_error(s, opcode);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void tms57002_add_one(tms57002_t *s, cstate *cs, unsigned short op, UINT8 param)
|
static void tms57002_add_one(tms57002_t *s, cstate *cs, unsigned short op, UINT8 param)
|
||||||
{
|
{
|
||||||
short ipc = s->cache.iused++;
|
short ipc = s->cache.iused++;
|
||||||
|
91
src/emu/cpu/tms57002/tms57kdec.c
Normal file
91
src/emu/cpu/tms57002/tms57kdec.c
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
#include "emu.h"
|
||||||
|
#include "debugger.h"
|
||||||
|
#include "tms57002.h"
|
||||||
|
#include "tms57kpr.h"
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define noinline __attribute__((noinline))
|
||||||
|
#else
|
||||||
|
#define noinline /* */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void tms57002_decode_error(tms57002_t *s, UINT32 opcode)
|
||||||
|
{
|
||||||
|
char buf[256];
|
||||||
|
UINT8 opr[3];
|
||||||
|
if(s->unsupported_inst_warning)
|
||||||
|
return;
|
||||||
|
|
||||||
|
s->unsupported_inst_warning = 1;
|
||||||
|
opr[0] = opcode;
|
||||||
|
opr[1] = opcode >> 8;
|
||||||
|
opr[2] = opcode >> 16;
|
||||||
|
|
||||||
|
CPU_DISASSEMBLE_NAME(tms57002)(0, buf, s->pc, opr, opr, 0);
|
||||||
|
popmessage("tms57002: %s - Contact Mamedev", buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tms57002_decode_cat1(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs)
|
||||||
|
{
|
||||||
|
switch(opcode >> 18) {
|
||||||
|
case 0x00: // nop
|
||||||
|
break;
|
||||||
|
|
||||||
|
#define CDEC1
|
||||||
|
#include "cpu/tms57002/tms57002.inc"
|
||||||
|
#undef CDEC1
|
||||||
|
|
||||||
|
default:
|
||||||
|
tms57002_decode_error(s, opcode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void tms57002_decode_cat2_pre(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs)
|
||||||
|
{
|
||||||
|
switch((opcode >> 11) & 0x7f) {
|
||||||
|
case 0x00: // nop
|
||||||
|
break;
|
||||||
|
|
||||||
|
#define CDEC2A
|
||||||
|
#include "cpu/tms57002/tms57002.inc"
|
||||||
|
#undef CDEC2A
|
||||||
|
|
||||||
|
default:
|
||||||
|
tms57002_decode_error(s, opcode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void tms57002_decode_cat2_post(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs)
|
||||||
|
{
|
||||||
|
switch((opcode >> 11) & 0x7f) {
|
||||||
|
case 0x00: // nop
|
||||||
|
break;
|
||||||
|
|
||||||
|
#define CDEC2B
|
||||||
|
#include "cpu/tms57002/tms57002.inc"
|
||||||
|
#undef CDEC2B
|
||||||
|
|
||||||
|
default:
|
||||||
|
tms57002_decode_error(s, opcode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void tms57002_decode_cat3(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs)
|
||||||
|
{
|
||||||
|
switch((opcode >> 11) & 0x7f) {
|
||||||
|
case 0x00: // nop
|
||||||
|
break;
|
||||||
|
|
||||||
|
#define CDEC3
|
||||||
|
#include "cpu/tms57002/tms57002.inc"
|
||||||
|
#undef CDEC3
|
||||||
|
|
||||||
|
default:
|
||||||
|
tms57002_decode_error(s, opcode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
171
src/emu/cpu/tms57002/tms57kpr.h
Normal file
171
src/emu/cpu/tms57002/tms57kpr.h
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
#ifndef TMS57KPRIVATE_H
|
||||||
|
#define TMS57KPRIVATE_H
|
||||||
|
|
||||||
|
CPU_DISASSEMBLE(tms57002);
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
|
#define noinline __attribute__((noinline))
|
||||||
|
#else
|
||||||
|
#define noinline /* */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum {
|
||||||
|
IN_PLOAD = 0x00000001,
|
||||||
|
IN_CLOAD = 0x00000002,
|
||||||
|
SU_CVAL = 0x00000004,
|
||||||
|
SU_MASK = 0x00000018, SU_ST0 = 0x00, SU_ST1 = 0x08, SU_PRG = 0x10,
|
||||||
|
S_IDLE = 0x00000020,
|
||||||
|
S_READ = 0x00000040,
|
||||||
|
S_WRITE = 0x00000080,
|
||||||
|
S_BRANCH = 0x00000100,
|
||||||
|
S_HOST = 0x00000200
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ST0_INCS = 0x000001,
|
||||||
|
ST0_DIRI = 0x000002,
|
||||||
|
ST0_FI = 0x000004,
|
||||||
|
ST0_SIM = 0x000008,
|
||||||
|
ST0_PLRI = 0x000020,
|
||||||
|
ST0_PBCI = 0x000040,
|
||||||
|
ST0_DIRO = 0x000080,
|
||||||
|
ST0_FO = 0x000100,
|
||||||
|
ST0_SOM = 0x000600,
|
||||||
|
ST0_PLRO = 0x000800,
|
||||||
|
ST0_PBCO = 0x001000,
|
||||||
|
ST0_CNS = 0x002000,
|
||||||
|
ST0_WORD = 0x004000,
|
||||||
|
ST0_SEL = 0x008000,
|
||||||
|
ST0_M = 0x030000, ST0_M_64K = 0x000000, ST0_M_256K = 0x010000, ST0_M_1M = 0x020000,
|
||||||
|
ST0_SRAM = 0x200000,
|
||||||
|
|
||||||
|
ST1_AOV = 0x000001,
|
||||||
|
ST1_SFAI = 0x000002,
|
||||||
|
ST1_SFAO = 0x000004,
|
||||||
|
ST1_MOVM = 0x000020,
|
||||||
|
ST1_MOV = 0x000040,
|
||||||
|
ST1_SFMA = 0x000180, ST1_SFMA_SHIFT = 7,
|
||||||
|
ST1_SFMO = 0x001800, ST1_SFMO_SHIFT = 11,
|
||||||
|
ST1_RND = 0x038000, ST1_RND_SHIFT = 15,
|
||||||
|
ST1_CRM = 0x0C0000, ST1_CRM_SHIFT = 18, ST1_CRM_32 = 0x000000, ST1_CRM_16H = 0x040000, ST1_CRM_16L = 0x080000,
|
||||||
|
ST1_DBP = 0x100000,
|
||||||
|
ST1_CAS = 0x200000,
|
||||||
|
|
||||||
|
ST1_CACHE = ST1_SFAI|ST1_SFAO|ST1_MOVM|ST1_SFMA|ST1_SFMO|ST1_RND|ST1_CRM|ST1_DBP
|
||||||
|
};
|
||||||
|
|
||||||
|
enum { BR_UB, BR_CB, BR_IDLE };
|
||||||
|
|
||||||
|
enum { IBS = 8192, HBS = 4096 };
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned short op;
|
||||||
|
short next;
|
||||||
|
unsigned char param;
|
||||||
|
} icd;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
unsigned int st1;
|
||||||
|
short ipc;
|
||||||
|
short next;
|
||||||
|
} hcd;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
short hashbase[256];
|
||||||
|
hcd hashnode[HBS];
|
||||||
|
icd inst[IBS];
|
||||||
|
int hused, iused;
|
||||||
|
} cd;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int branch;
|
||||||
|
short hnode;
|
||||||
|
short ipc;
|
||||||
|
} cstate;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
INT64 macc;
|
||||||
|
|
||||||
|
UINT32 cmem[256];
|
||||||
|
UINT32 dmem0[256];
|
||||||
|
UINT32 dmem1[32];
|
||||||
|
|
||||||
|
UINT32 si[4], so[4];
|
||||||
|
|
||||||
|
UINT32 st0, st1, sti;
|
||||||
|
UINT32 aacc, xoa, xba, xwr, xrd, creg;
|
||||||
|
|
||||||
|
UINT8 pc, ca, id, ba0, ba1, rptc, rptc_next, sa;
|
||||||
|
|
||||||
|
UINT32 xm_adr;
|
||||||
|
|
||||||
|
UINT8 host[4], hidx, allow_update;
|
||||||
|
|
||||||
|
cd cache;
|
||||||
|
|
||||||
|
address_space *program, *data;
|
||||||
|
int icount;
|
||||||
|
int unsupported_inst_warning;
|
||||||
|
} tms57002_t;
|
||||||
|
|
||||||
|
void tms57002_decode_cat1(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs);
|
||||||
|
void tms57002_decode_cat2_pre(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs);
|
||||||
|
void tms57002_decode_cat3(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs);
|
||||||
|
void tms57002_decode_cat2_post(tms57002_t *s, UINT32 opcode, unsigned short *op, cstate *cs);
|
||||||
|
|
||||||
|
INLINE int xmode(UINT32 opcode, char type)
|
||||||
|
{
|
||||||
|
if(((opcode & 0x400) && (type == 'c')) || (!(opcode & 0x400) && (type == 'd'))) {
|
||||||
|
if(opcode & 0x100)
|
||||||
|
return 0;
|
||||||
|
else if(opcode & 0x80)
|
||||||
|
return 2;
|
||||||
|
else
|
||||||
|
return 1;
|
||||||
|
} else if(opcode & 0x200)
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE int sfao(UINT32 st1)
|
||||||
|
{
|
||||||
|
return st1 & ST1_SFAO ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE int dbp(UINT32 st1)
|
||||||
|
{
|
||||||
|
return st1 & ST1_DBP ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE int crm(UINT32 st1)
|
||||||
|
{
|
||||||
|
return (st1 & ST1_CRM) >> ST1_CRM_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE int sfai(UINT32 st1)
|
||||||
|
{
|
||||||
|
return st1 & ST1_SFAI ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE int sfmo(UINT32 st1)
|
||||||
|
{
|
||||||
|
return (st1 & ST1_SFMO) >> ST1_SFMO_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE int rnd(UINT32 st1)
|
||||||
|
{
|
||||||
|
return (st1 & ST1_RND) >> ST1_RND_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE int movm(UINT32 st1)
|
||||||
|
{
|
||||||
|
return st1 & ST1_MOVM ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
INLINE int sfma(UINT32 st1)
|
||||||
|
{
|
||||||
|
return (st1 & ST1_SFMA) >> ST1_SFMA_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user