Previous 199869 Revisions Next

r33644 Wednesday 3rd December, 2014 at 10:01:02 UTC by David Haywood
arc branch dasm (nw)
[src/emu/cpu/arc]arcdasm.c

trunk/src/emu/cpu/arc/arcdasm.c
r242155r242156
3030   /* 01 */ "LD r+o",
3131   /* 02 */ "ST r+o",
3232   /* 03 */ "extended",
33   /* 04 */ "Bcc",
33   /* 04 */ "B",
3434   /* 05 */ "BLcc",
3535   /* 06 */ "LPcc",
3636   /* 07 */ "Jcc JLcc",
r242155r242156
6060   /* 1f */ "MIN"
6161};
6262
63static const char *conditions[0x20] =
64{
65   /* 00 */ "AL", // (aka RA         - Always)
66   /* 01 */ "EQ", // (aka Z          - Zero
67   /* 02 */ "NE", // (aka NZ         - Non-Zero)
68   /* 03 */ "PL", // (aka P          - Positive)
69   /* 04 */ "MI", // (aka N          - Negative)
70   /* 05 */ "CS", // (aka C,  LO     - Carry set / Lower than) (unsigned)
71   /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned)
72   /* 07 */ "VS", // (aka V          - Overflow set)
73   /* 08 */ "VC", // (aka NV         - Overflow clear)
74   /* 09 */ "GT", // (               - Greater than) (signed)
75   /* 0a */ "GE", // (               - Greater than or Equal) (signed)
76   /* 0b */ "LT", // (               - Less than) (signed)
77   /* 0c */ "LE", // (               - Less than or Equal) (signed)
78   /* 0d */ "HI", // (               - Higher than) (unsigned)
79   /* 0e */ "LS", // (               - Lower or Same) (unsigned)
80   /* 0f */ "PNZ",// (               - Positive non-0 value)
81   /* 10 */ "0x10 Reserved", // possible CPU implementation specifics
82   /* 11 */ "0x11 Reserved",
83   /* 12 */ "0x12 Reserved",
84   /* 13 */ "0x13 Reserved",
85   /* 14 */ "0x14 Reserved",
86   /* 15 */ "0x15 Reserved",
87   /* 16 */ "0x16 Reserved",
88   /* 17 */ "0x17 Reserved",
89   /* 18 */ "0x18 Reserved",
90   /* 19 */ "0x19 Reserved",
91   /* 1a */ "0x1a Reserved",
92   /* 1b */ "0x1b Reserved",
93   /* 1c */ "0x1c Reserved",
94   /* 1d */ "0x1d Reserved",
95   /* 1e */ "0x1e Reserved",
96   /* 1f */ "0x1f Reserved"
97};
6398
64CPU_DISASSEMBLE( arc )
99static const char *delaytype[0x4] =
65100{
101   "ND", // NO DELAY - execute next instruction only when NOT jumping
102   "D",  // always execute next instruction
103   "JD", // only execute next instruction when jumping
104   "Res!", // reserved / invalid
105};
106
107#define ARC_CONDITION ((op & 0x0000001f) >> 0 )
108
109// used in jumps
110#define ARC_BRANCH_DELAY     ((op & 0x00000060) >> 5 ) // aka NN
111#define ARC_BRANCH_ADDR      ((op & 0x07ffff80) >> 7 ) // aka L
112
113#define ARC_OPERATION ((op & 0xf8000000) >> 27) // aka QQQQQ
114
115CPU_DISASSEMBLE(arc)
116{
66117   UINT32 op = oprom[0] | (oprom[1] << 8) | (oprom[2] << 16) | (oprom[3] << 24);
67118   op = BIG_ENDIANIZE_INT32(op);
68119
69120   output = buffer;
70121
71   UINT8 opcode = (op & 0xf8000000) >> 27;
122   UINT8 opcode = ARC_OPERATION;
72123
73   print("%s (%08x)", basic[opcode], op &~ 0xf8000000);
124   switch (opcode)
125   {
126      case 0x04:
127      print("%s(%s)(%s) %08x", basic[opcode], conditions[ARC_CONDITION], delaytype[ARC_BRANCH_DELAY], (ARC_BRANCH_ADDR<<2)+pc+4);
128      break;
129   
130      default:
131      print("%s (%08x)", basic[opcode], op &~ 0xf8000000);
132      break;
133   }
74134
135
136
75137   return 4 | DASMFLAG_SUPPORTED;
76138}


Previous 199869 Revisions Next


© 1997-2024 The MAME Team