15 #define RegWord(ModRM) cpustate->regs.w[Mod_RM.reg.w[ModRM]]
\r
16 #define RegByte(ModRM) cpustate->regs.b[Mod_RM.reg.b[ModRM]]
\r
18 #define GetRMWord(ModRM) \
\r
19 ((ModRM) >= 0xc0 ? cpustate->regs.w[Mod_RM.RM.w[ModRM]] : ( (*GetEA[ModRM])(cpustate), ReadWord( cpustate->ea ) ))
\r
21 #define PutbackRMWord(ModRM,val) \
\r
23 if (ModRM >= 0xc0) cpustate->regs.w[Mod_RM.RM.w[ModRM]]=val; \
\r
24 else WriteWord(cpustate->ea,val); \
\r
27 #define GetnextRMWord ReadWord(cpustate->ea+2)
\r
29 #define GetRMWordOffset(offs) \
\r
30 ReadWord(cpustate->ea-cpustate->eo+(UINT16)(cpustate->eo+offs))
\r
32 #define GetRMByteOffset(offs) \
\r
33 ReadByte(cpustate->ea-cpustate->eo+(UINT16)(cpustate->eo+offs))
\r
35 #define PutRMWord(ModRM,val) \
\r
37 if (ModRM >= 0xc0) \
\r
38 cpustate->regs.w[Mod_RM.RM.w[ModRM]]=val; \
\r
40 (*GetEA[ModRM])(cpustate); \
\r
41 WriteWord( cpustate->ea ,val); \
\r
45 #define PutRMWordOffset(offs, val) \
\r
46 WriteWord( cpustate->ea-cpustate->eo+(UINT16)(cpustate->eo+offs), val)
\r
48 #define PutRMByteOffset(offs, val) \
\r
49 WriteByte( cpustate->ea-cpustate->eo+(UINT16)(cpustate->eo+offs), val)
\r
51 #define PutImmRMWord(ModRM) \
\r
54 if (ModRM >= 0xc0) \
\r
55 FETCHWORD(cpustate->regs.w[Mod_RM.RM.w[ModRM]]) \
\r
57 (*GetEA[ModRM])(cpustate); \
\r
59 WriteWord( cpustate->ea , val); \
\r
63 #define GetRMByte(ModRM) \
\r
64 ((ModRM) >= 0xc0 ? cpustate->regs.b[Mod_RM.RM.b[ModRM]] : ReadByte( (*GetEA[ModRM])(cpustate) ))
\r
66 #define PutRMByte(ModRM,val) \
\r
68 if (ModRM >= 0xc0) \
\r
69 cpustate->regs.b[Mod_RM.RM.b[ModRM]]=val; \
\r
71 WriteByte( (*GetEA[ModRM])(cpustate) ,val); \
\r
74 #define PutImmRMByte(ModRM) \
\r
76 if (ModRM >= 0xc0) \
\r
77 cpustate->regs.b[Mod_RM.RM.b[ModRM]]=FETCH; \
\r
79 (*GetEA[ModRM])(cpustate); \
\r
80 WriteByte( cpustate->ea , FETCH ); \
\r
84 #define PutbackRMByte(ModRM,val) \
\r
86 if (ModRM >= 0xc0) \
\r
87 cpustate->regs.b[Mod_RM.RM.b[ModRM]]=val; \
\r
89 WriteByte(cpustate->ea,val); \
\r
92 #define DEF_br8(dst,src) \
\r
93 unsigned ModRM = FETCHOP; \
\r
94 unsigned src = RegByte(ModRM); \
\r
95 unsigned dst = GetRMByte(ModRM)
\r
97 #define DEF_wr16(dst,src) \
\r
98 unsigned ModRM = FETCHOP; \
\r
99 unsigned src = RegWord(ModRM); \
\r
100 unsigned dst = GetRMWord(ModRM)
\r
102 #define DEF_r8b(dst,src) \
\r
103 unsigned ModRM = FETCHOP; \
\r
104 unsigned dst = RegByte(ModRM); \
\r
105 unsigned src = GetRMByte(ModRM)
\r
107 #define DEF_r16w(dst,src) \
\r
108 unsigned ModRM = FETCHOP; \
\r
109 unsigned dst = RegWord(ModRM); \
\r
110 unsigned src = GetRMWord(ModRM)
\r
112 #define DEF_ald8(dst,src) \
\r
113 unsigned src = FETCHOP; \
\r
114 unsigned dst = cpustate->regs.b[AL]
\r
116 #define DEF_axd16(dst,src) \
\r
117 unsigned src = FETCHOP; \
\r
118 unsigned dst = cpustate->regs.w[AX]; \
\r
119 src += (FETCH << 8)
\r