summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/nec/necmodrm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/nec/necmodrm.h')
-rw-r--r--src/devices/cpu/nec/necmodrm.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/devices/cpu/nec/necmodrm.h b/src/devices/cpu/nec/necmodrm.h
new file mode 100644
index 00000000000..8afc0240a78
--- /dev/null
+++ b/src/devices/cpu/nec/necmodrm.h
@@ -0,0 +1,106 @@
+// license:BSD-3-Clause
+// copyright-holders:Bryan McPhail
+static struct {
+ struct {
+ WREGS w[256];
+ BREGS b[256];
+ } reg;
+ struct {
+ WREGS w[256];
+ BREGS b[256];
+ } RM;
+} Mod_RM;
+
+#define RegWord(ModRM) Wreg(Mod_RM.reg.w[ModRM])
+#define RegByte(ModRM) Breg(Mod_RM.reg.b[ModRM])
+
+#define GetRMWord(ModRM) \
+ ((ModRM) >= 0xc0 ? Wreg(Mod_RM.RM.w[ModRM]) : ( (this->*s_GetEA[ModRM])(), read_mem_word( m_EA ) ))
+
+#define PutbackRMWord(ModRM,val) \
+{ \
+ if (ModRM >= 0xc0) Wreg(Mod_RM.RM.w[ModRM])=val; \
+ else write_mem_word(m_EA,val); \
+}
+
+#define GetnextRMWord read_mem_word((m_EA&0xf0000)|((m_EA+2)&0xffff))
+
+#define PutRMWord(ModRM,val) \
+{ \
+ if (ModRM >= 0xc0) \
+ Wreg(Mod_RM.RM.w[ModRM])=val; \
+ else { \
+ (this->*s_GetEA[ModRM])(); \
+ write_mem_word( m_EA ,val); \
+ } \
+}
+
+#define PutImmRMWord(ModRM) \
+{ \
+ WORD val; \
+ if (ModRM >= 0xc0) \
+ Wreg(Mod_RM.RM.w[ModRM]) = FETCHWORD(); \
+ else { \
+ (this->*s_GetEA[ModRM])(); \
+ val = FETCHWORD(); \
+ write_mem_word( m_EA , val); \
+ } \
+}
+
+#define GetRMByte(ModRM) \
+ ((ModRM) >= 0xc0 ? Breg(Mod_RM.RM.b[ModRM]) : read_mem_byte( (this->*s_GetEA[ModRM])() ))
+
+#define PutRMByte(ModRM,val) \
+{ \
+ if (ModRM >= 0xc0) \
+ Breg(Mod_RM.RM.b[ModRM])=val; \
+ else \
+ write_mem_byte( (this->*s_GetEA[ModRM])() ,val); \
+}
+
+#define PutImmRMByte(ModRM) \
+{ \
+ if (ModRM >= 0xc0) \
+ Breg(Mod_RM.RM.b[ModRM])=FETCH(); \
+ else { \
+ (this->*s_GetEA[ModRM])(); \
+ write_mem_byte( m_EA , FETCH() ); \
+ } \
+}
+
+#define PutbackRMByte(ModRM,val) \
+{ \
+ if (ModRM >= 0xc0) \
+ Breg(Mod_RM.RM.b[ModRM])=val; \
+ else \
+ write_mem_byte(m_EA,val); \
+}
+
+#define DEF_br8 \
+ UINT32 ModRM = FETCH(),src,dst; \
+ src = RegByte(ModRM); \
+ dst = GetRMByte(ModRM)
+
+#define DEF_wr16 \
+ UINT32 ModRM = FETCH(),src,dst; \
+ src = RegWord(ModRM); \
+ dst = GetRMWord(ModRM)
+
+#define DEF_r8b \
+ UINT32 ModRM = FETCH(),src,dst; \
+ dst = RegByte(ModRM); \
+ src = GetRMByte(ModRM)
+
+#define DEF_r16w \
+ UINT32 ModRM = FETCH(),src,dst; \
+ dst = RegWord(ModRM); \
+ src = GetRMWord(ModRM)
+
+#define DEF_ald8 \
+ UINT32 src = FETCH(); \
+ UINT32 dst = Breg(AL)
+
+#define DEF_axd16 \
+ UINT32 src = FETCH(); \
+ UINT32 dst = Wreg(AW); \
+ src += (FETCH() << 8)