Previous 199869 Revisions Next

r33646 Wednesday 3rd December, 2014 at 11:16:38 UTC by David Haywood
(nw)
[src/emu/cpu/arc]arcdasm.c

trunk/src/emu/cpu/arc/arcdasm.c
r242157r242158
3131   /* 02 */ "ST r+o",
3232   /* 03 */ "extended",
3333   /* 04 */ "B",
34   /* 05 */ "BLcc",
34   /* 05 */ "BL",
3535   /* 06 */ "LPcc",
3636   /* 07 */ "Jcc JLcc",
3737   /* 08 */ "ADD",
r242157r242158
104104   "Res!", // reserved / invalid
105105};
106106
107static const char *regnames[0x40] =
108{
109   /* 0x00 */ "r00",
110   /* 0x01 */ "r01",
111   /* 0x02 */ "r02",
112   /* 0x03 */ "r03",
113   /* 0x04 */ "r04",
114   /* 0x05 */ "r05",
115   /* 0x06 */ "r06",
116   /* 0x07 */ "r07",
117   /* 0x08 */ "r08",
118   /* 0x09 */ "r09",
119   /* 0x0a */ "r10",
120   /* 0x0b */ "r11",
121   /* 0x0c */ "r12",
122   /* 0x0d */ "r13",
123   /* 0x0e */ "r14",
124   /* 0x0f */ "r15",
125
126   /* 0x10 */ "r16",
127   /* 0x11 */ "r17",
128   /* 0x12 */ "r18",
129   /* 0x13 */ "r19",
130   /* 0x14 */ "r20",
131   /* 0x15 */ "r21",
132   /* 0x16 */ "r22",
133   /* 0x17 */ "r23",
134   /* 0x18 */ "r24",
135   /* 0x19 */ "r25",
136   /* 0x1a */ "r26",
137   /* 0x1b */ "r27",
138   /* 0x1c */ "r28",
139   /* 0x1d */ "ILINK1",
140   /* 0x1e */ "ILINK2",
141   /* 0x1f */ "BLINK",
142
143   /* 0x20 */ "r32res", // reserved for manufacturer specific extensions
144   /* 0x21 */ "r33res",
145   /* 0x22 */ "r34res",
146   /* 0x23 */ "r35res",
147   /* 0x24 */ "r36res",
148   /* 0x25 */ "r37res",
149   /* 0x26 */ "r38res",
150   /* 0x27 */ "r39res",
151   /* 0x28 */ "r40res",
152   /* 0x29 */ "r41res",
153   /* 0x2a */ "r42res",
154   /* 0x2b */ "r43res",
155   /* 0x2c */ "r44res",
156   /* 0x2d */ "r45res",
157   /* 0x2e */ "r46res",
158   /* 0x2f */ "r47res",
159
160   /* 0x30 */ "r48res",
161   /* 0x31 */ "r49res",
162   /* 0x32 */ "r50res",
163   /* 0x33 */ "r51res",
164   /* 0x34 */ "r52res",
165   /* 0x35 */ "r53res",
166   /* 0x36 */ "r54res",
167   /* 0x37 */ "r55res",
168   /* 0x38 */ "r56res",
169   /* 0x39 */ "r57res",
170   /* 0x3a */ "r58res",
171   /* 0x3b */ "r59res",
172   /* 0x3c */ "LPCOUNT",
173   /* 0x3d */ "sImm F",
174   /* 0x3e */ "lImm",
175   /* 0x3f */ "sImm NF",
176};
177
107178#define ARC_CONDITION ((op & 0x0000001f) >> 0 )
108179
109180// used in jumps
110#define ARC_BRANCH_DELAY     ((op & 0x00000060) >> 5 ) // aka NN
181#define ARC_BRANCH_DELAY     ((op & 0x00000060) >> 5 ) // aka N
111182#define ARC_BRANCH_ADDR      ((op & 0x07ffff80) >> 7 ) // aka L
112183
113#define ARC_OPERATION ((op & 0xf8000000) >> 27) // aka QQQQQ
184#define ARC_OPERATION ((op & 0xf8000000) >> 27) // aka Q
114185
186#define ARC_REGOP_DEST      ((op & 0x07e00000) >> 21 ) // aka A
187#define ARC_REGOP_OP1       ((op & 0x001f8000) >> 15 ) // aka B
188#define ARC_REGOP_OP2       ((op & 0x00007e00) >> 9  ) // aka C
189#define ARC_REGOP_SHIMM     ((op & 0x000001ff) >> 0  ) // aka D
190
191
115192CPU_DISASSEMBLE(arc)
116193{
117194   UINT32 op = oprom[0] | (oprom[1] << 8) | (oprom[2] << 16) | (oprom[3] << 24);
r242157r242158
123200
124201   switch (opcode)
125202   {
126      case 0x04:
203      case 0x04: // B
204      case 0x05: // BL
127205      print("%s(%s)(%s) %08x", basic[opcode], conditions[ARC_CONDITION], delaytype[ARC_BRANCH_DELAY], (ARC_BRANCH_ADDR<<2)+pc+4);
128206      break;
129207   
208      case 0x08: // ADD
209      // todo, short / long immediate formats
210      print("%s %s , %s , %s (%08x)", basic[opcode], regnames[ARC_REGOP_DEST], regnames[ARC_REGOP_OP1], regnames[ARC_REGOP_OP2], op &~ 0xfffffe00);
211      break;
212
213
130214      default:
131215      print("%s (%08x)", basic[opcode], op &~ 0xf8000000);
132216      break;


Previous 199869 Revisions Next


© 1997-2024 The MAME Team