Previous 199869 Revisions Next

r34071 Friday 26th December, 2014 at 18:21:25 UTC by David Haywood
arcompact (nw)
[src/emu/cpu/arcompact]arcompact.h arcompact_common.h arcompact_execute.c

trunk/src/emu/cpu/arcompact/arcompact.h
r242582r242583
803803   inline void WRITE16(UINT32 address, UINT16 data){    m_program->write_word(address << 1, data); }
804804   inline UINT8 READ8(UINT32 address) { return m_program->read_byte(address << 0); }
805805   inline void WRITE8(UINT32 address, UINT8 data){    m_program->write_byte(address << 0, data); }
806   
807   int check_condition(UINT8 condition);
806808
807809   UINT32 m_regs[0x40];
808810
r242582r242583
842844
843845// Condition 0x0c (LE)
844846#define CONDITION_LE ((STATUS32_CHECK_Z) || (STATUS32_CHECK_N && !STATUS32_CHECK_V) ||  (!STATUS32_CHECK_N && STATUS32_CHECK_V)) // Z or (N and /V) or (/N and V)
847#define CONDITION_EQ (STATUS32_CHECK_Z)
845848
846849extern const device_type ARCA5;
847850
trunk/src/emu/cpu/arcompact/arcompact_common.h
r242582r242583
1717
1818#define REG_BLINK (0x1f) // r31
1919#define REG_SP (0x1c) // r28
20#define REG_ILINK1 (0x1d) // r29
21#define REG_ILINK2 (0x1e) // r30
trunk/src/emu/cpu/arcompact/arcompact_execute.c
r242582r242583
129129#define PC_ALIGNED32 \
130130   (m_pc&0xfffffffc)
131131
132int arcompact_device::check_condition(UINT8 condition)
133{
134   switch (condition & 0x1f)
135   {
136      case 0x00: return 1; // AL
137      case 0x01: return CONDITION_EQ;
132138
139      case 0x02: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
140      case 0x03: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
141      case 0x04: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
142      case 0x05: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
143      case 0x06: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
144      case 0x07: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
145      case 0x08: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
146      case 0x09: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
147      case 0x0a: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
148      case 0x0b: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
149      case 0x0c: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
150      case 0x0d: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
151      case 0x0e: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
152      case 0x0f: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
153      case 0x10: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
154      case 0x11: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
155      case 0x12: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
156      case 0x13: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
157      case 0x14: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
158      case 0x15: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
159      case 0x16: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
160      case 0x17: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
161      case 0x18: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
162      case 0x19: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
163      case 0x1a: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
164      case 0x1b: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
165      case 0x1c: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
166      case 0x1d: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
167      case 0x1e: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
168      case 0x1f: fatalerror("unhandled condition check %s", conditions[condition]); return -1;
169   }
170
171    return -1;
172
173}
174
175
133176ARCOMPACT_RETTYPE arcompact_device::get_insruction(OPS_32)
134177{
135178   UINT8 instruction = ARCOMPACT_OPERATION;
r242582r242583
18831926}
18841927
18851928
1886ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m0(OPS_32)
1929ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_20_p11_m0(OPS_32) // Jcc   (no link, no delay)
18871930{
18881931   int size = 4;
1889//   UINT32 limm = 0;
1932   UINT32 limm = 0;
18901933   int got_limm = 0;
18911934
18921935   COMMON32_GET_creg
1936   COMMON32_GET_CONDITION;
1937   COMMON32_GET_F
18931938
1939   UINT32 c = 0;
1940
18941941   if (creg == LIMM_REG)
18951942   {
18961943      // opcode          iiii i--- ppII IIII F--- cccc ccmq qqqq
18971944      // Jcc limm        0010 0RRR 1110 0000 0RRR 1111 100Q QQQQ  [LIUMM]
18981945      if (!got_limm)
18991946      {
1900         //GET_LIMM_32;
1947         GET_LIMM_32;
19011948         size = 8;
19021949      }
19031950
1904      arcompact_log("unimplemented J %08x", op);
1951      c = limm;
1952
19051953   }
19061954   else
19071955   {
19081956      // opcode          iiii i--- ppII IIII F--- cccc ccmq qqqq
19091957      // Jcc [c]         0010 0RRR 1110 0000 0RRR CCCC CC0Q QQQQ
19101958      // no conditional links to ILINK1, ILINK2?
1911      arcompact_log("unimplemented J %08x", op);
1959     
1960      c = m_regs[creg];
19121961   }
1962
1963   if (!check_condition(condition))
1964      return m_pc + (size>>0);
1965
1966   if (!F)
1967   {
1968      // if F isn't set then the destination can't be ILINK1 or ILINK2
1969
1970      if ((creg == REG_ILINK1) || (creg == REG_ILINK1))
1971      {
1972         arcompact_fatal ("fatal arcompact_handle04_20_p11_m0 J %08x (F not set but ILINK1 or ILINK2 used as dst)", op);
1973      }
1974      else
1975      {
1976         UINT32 realaddress = c;
1977         return realaddress;
1978      }
1979   }
1980
1981   if (F)
1982   {
1983      // if F is set then the destination MUST be ILINK1 or ILINK2
1984
1985      if ((creg == REG_ILINK1) || (creg == REG_ILINK1))
1986      {
1987         arcompact_log("unimplemented arcompact_handle04_20_p11_m0 J %08x (F set)", op);
1988      }
1989      else
1990      {
1991         arcompact_fatal ("fatal arcompact_handle04_20_p11_m0 J %08x (F set but not ILINK1 or ILINK2 used as dst)", op);
1992
1993      }   
1994   }
1995
1996
19131997   return m_pc + (size>>0);
19141998}
19151999
r242582r242583
19182002   // opcode          iiii i--- ppII IIII F--- uuuu uumq qqqq
19192003   // Jcc u6          0010 0RRR 1110 0000 0RRR uuuu uu1Q QQQQ
19202004   int size = 4;
1921   arcompact_log("unimplemented J %08x", op);
2005   arcompact_log("unimplemented arcompact_handle04_20_p11_m1 J %08x (u6)", op);
19222006   return m_pc + (size>>0);
19232007}
19242008


Previous 199869 Revisions Next


© 1997-2024 The MAME Team