OSDN Git Service

[General] Convert sourcecode's CRLF format: DOS(WINDOWS) to Unix, to apply patches...
[csp-qt/common_source_project-fm7.git] / source / src / vm / mame / emu / cpu / i86 / modrm.h
1 static struct
2 {
3         struct
4         {
5                 WREGS w[256];
6                 BREGS b[256];
7         } reg;
8         struct
9         {
10                 WREGS w[256];
11                 BREGS b[256];
12         } RM;
13 } Mod_RM;
14
15 #define RegWord(ModRM) cpustate->regs.w[Mod_RM.reg.w[ModRM]]
16 #define RegByte(ModRM) cpustate->regs.b[Mod_RM.reg.b[ModRM]]
17
18 #define GetRMWord(ModRM) \
19         ((ModRM) >= 0xc0 ? cpustate->regs.w[Mod_RM.RM.w[ModRM]] : ( (*GetEA[ModRM])(cpustate), ReadWord( cpustate->ea ) ))
20
21 #define PutbackRMWord(ModRM,val) \
22 { \
23         if (ModRM >= 0xc0) cpustate->regs.w[Mod_RM.RM.w[ModRM]]=val; \
24         else WriteWord(cpustate->ea,val); \
25 }
26
27 #define GetnextRMWord ReadWord(cpustate->ea+2)
28
29 #define GetRMWordOffset(offs) \
30                 ReadWord(cpustate->ea-cpustate->eo+(UINT16)(cpustate->eo+offs))
31
32 #define GetRMByteOffset(offs) \
33                 ReadByte(cpustate->ea-cpustate->eo+(UINT16)(cpustate->eo+offs))
34
35 #define PutRMWord(ModRM,val)                \
36 {                                           \
37         if (ModRM >= 0xc0)                      \
38                 cpustate->regs.w[Mod_RM.RM.w[ModRM]]=val;   \
39         else {                                  \
40                 (*GetEA[ModRM])(cpustate);                  \
41                 WriteWord( cpustate->ea ,val);              \
42         }                                       \
43 }
44
45 #define PutRMWordOffset(offs, val) \
46                 WriteWord( cpustate->ea-cpustate->eo+(UINT16)(cpustate->eo+offs), val)
47
48 #define PutRMByteOffset(offs, val) \
49                 WriteByte( cpustate->ea-cpustate->eo+(UINT16)(cpustate->eo+offs), val)
50
51 #define PutImmRMWord(ModRM)                 \
52 {                                           \
53         WORD val;                               \
54         if (ModRM >= 0xc0)                      \
55                 FETCHWORD(cpustate->regs.w[Mod_RM.RM.w[ModRM]]) \
56         else {                                  \
57                 (*GetEA[ModRM])(cpustate);                  \
58                 FETCHWORD(val)                      \
59                 WriteWord( cpustate->ea , val);             \
60         }                                       \
61 }
62
63 #define GetRMByte(ModRM) \
64         ((ModRM) >= 0xc0 ? cpustate->regs.b[Mod_RM.RM.b[ModRM]] : ReadByte( (*GetEA[ModRM])(cpustate) ))
65
66 #define PutRMByte(ModRM,val)                \
67 {                                           \
68         if (ModRM >= 0xc0)                      \
69                 cpustate->regs.b[Mod_RM.RM.b[ModRM]]=val;   \
70         else                                    \
71                 WriteByte( (*GetEA[ModRM])(cpustate) ,val); \
72 }
73
74 #define PutImmRMByte(ModRM)                 \
75 {                                           \
76         if (ModRM >= 0xc0)                      \
77                 cpustate->regs.b[Mod_RM.RM.b[ModRM]]=FETCH; \
78         else {                                  \
79                 (*GetEA[ModRM])(cpustate);                  \
80                 WriteByte( cpustate->ea , FETCH );          \
81         }                                       \
82 }
83
84 #define PutbackRMByte(ModRM,val)            \
85 {                                           \
86         if (ModRM >= 0xc0)                      \
87                 cpustate->regs.b[Mod_RM.RM.b[ModRM]]=val;   \
88         else                                    \
89                 WriteByte(cpustate->ea,val);                    \
90 }
91
92 #define DEF_br8(dst,src)                    \
93         unsigned ModRM = FETCHOP;               \
94         unsigned src = RegByte(ModRM);          \
95         unsigned dst = GetRMByte(ModRM)
96
97 #define DEF_wr16(dst,src)                   \
98         unsigned ModRM = FETCHOP;               \
99         unsigned src = RegWord(ModRM);          \
100         unsigned dst = GetRMWord(ModRM)
101
102 #define DEF_r8b(dst,src)                    \
103         unsigned ModRM = FETCHOP;               \
104         unsigned dst = RegByte(ModRM);          \
105         unsigned src = GetRMByte(ModRM)
106
107 #define DEF_r16w(dst,src)                   \
108         unsigned ModRM = FETCHOP;               \
109         unsigned dst = RegWord(ModRM);          \
110         unsigned src = GetRMWord(ModRM)
111
112 #define DEF_ald8(dst,src)                   \
113         unsigned src = FETCHOP;                 \
114         unsigned dst = cpustate->regs.b[AL]
115
116 #define DEF_axd16(dst,src)                  \
117         unsigned src = FETCHOP;                 \
118         unsigned dst = cpustate->regs.w[AX];            \
119         src += (FETCH << 8)