Previous 199869 Revisions Next

r34057 Wednesday 24th December, 2014 at 17:07:18 UTC by David Haywood
the 'with cartridge' codepath is different (nw)
[src/emu/cpu/arcompact]arcompact.h arcompact_execute.c

trunk/src/emu/cpu/arcompact/arcompact.h
r242568r242569
191191   ARCOMPACT_RETTYPE arcompact_handle04_2f_04(OPS_32);
192192   ARCOMPACT_RETTYPE arcompact_handle04_2f_05(OPS_32);
193193   ARCOMPACT_RETTYPE arcompact_handle04_2f_06(OPS_32);
194   ARCOMPACT_RETTYPE arcompact_handle04_2f_07(OPS_32);
194//   ARCOMPACT_RETTYPE arcompact_handle04_2f_07(OPS_32);
195195//   ARCOMPACT_RETTYPE arcompact_handle04_2f_08(OPS_32);
196196   ARCOMPACT_RETTYPE arcompact_handle04_2f_09(OPS_32);
197197   ARCOMPACT_RETTYPE arcompact_handle04_2f_0a(OPS_32);
r242568r242569
776776   ARCOMPACT_HANDLER04_TYPE_PM(04_16);
777777   ARCOMPACT_HANDLER04_TYPE_PM(04_20);
778778
779   ARCOMPACT_HANDLER04_TYPE_PM(04_2f_07);
779780   ARCOMPACT_HANDLER04_TYPE_PM(04_2f_08);
780781
781782   ARCOMPACT_HANDLER04_TYPE_PM(05_00);
trunk/src/emu/cpu/arcompact/arcompact_execute.c
r242568r242569
14801480   else if (a == 3)
14811481   {
14821482      if (Z == 0)
1483      {
14831484         address = address + (s << 2);
1484      else if (Z==2)
1485      }
1486      else if (Z == 2)
1487      {
14851488         address = address + (s << 1);
1489      }
14861490      else // Z == 1 and Z == 3 are invalid here
1487         arcompact_fatal("illegal LD %08x (data size %d mode %d)", op, Z, a);
1491      {
1492         arcompact_fatal("zz_ illegal LD %08x (data size %d mode %d)", op, Z, a);
1493      }
14881494   }
14891495
14901496   UINT32 readdata = 0;
r242568r242569
15161522   }
15171523   else if (Z == 3)
15181524   { // Z == 3 is always illegal
1519      arcompact_fatal("illegal LD %08x (data size %d mode %d)", op, Z, a);
1525      arcompact_fatal("xx_ illegal LD %08x (data size %d mode %d)", op, Z, a);
15201526   }
15211527
15221528   m_regs[areg] = readdata;
r242568r242569
15241530   // writeback / increment
15251531   if ((a == 1) || (a == 2))
15261532   {
1527      if (breg==limm)
1528         arcompact_fatal("illegal LD %08x (data size %d mode %d)", op, Z, a); // using the LIMM as the base register and an increment mode is illegal
1533      if (breg==LIMM_REG)
1534         arcompact_fatal("yy_ illegal LD %08x (data size %d mode %d)", op, Z, a); // using the LIMM as the base register and an increment mode is illegal
15291535
15301536      m_regs[breg] = m_regs[breg] + s;
15311537   }
r242568r242569
16191625   // writeback / increment
16201626   if ((a == 1) || (a == 2))
16211627   {
1622      if (breg==limm)
1628      if (breg==LIMM_REG)
16231629         arcompact_fatal("illegal ST %08x (data size %d mode %d)", op, Z, a); // using the LIMM as the base register and an increment mode is illegal
16241630
16251631      m_regs[breg] = m_regs[breg] + s;
r242568r242569
20332039// XOR
20342040ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_07_p00(OPS_32) // XOR
20352041{
2036   int size = 4;
2037   arcompact_fatal("arcompact_handle04_07_p00 (XOR)\n");
2042   SETUP_HANDLE04_0x_P00
2043   m_regs[areg] = b ^ c;
2044
2045   if (F)
2046   {
2047      arcompact_fatal("arcompact_handle04_07_p00 (XOR) (F set)\n"); // not yet supported
2048   }
2049
20382050   return m_pc + (size >> 0);
20392051}
20402052
r242568r242569
27022714ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_04(OPS_32)  { return arcompact_handle04_2f_helper(PARAMS, "RCC"); } // RCC
27032715ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_05(OPS_32)  { return arcompact_handle04_2f_helper(PARAMS, "SEXB"); } // SEXB
27042716ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_06(OPS_32)  { return arcompact_handle04_2f_helper(PARAMS, "SEXW"); } // SEXW
2705ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07(OPS_32)  { return arcompact_handle04_2f_helper(PARAMS, "EXTB"); } // EXTB
27062717
2718// EXTB
2719ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p00(OPS_32) // note 'b' destination for 04_2f_07_xx group
2720{
2721   SETUP_HANDLE04_2f_0x_P00;
2722   
2723   m_regs[breg] = c & 0x000000ff;
2724   if (F)
2725   {
2726      arcompact_fatal("arcompact_handle04_2f_08_p00 (EXTW) (F set)\n"); // not yet supported
2727   }
27072728
2729   return m_pc + (size >> 0);
2730}
2731
2732ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p01(OPS_32)
2733{
2734   int size = 4;
2735   arcompact_fatal("arcompact_handle04_2f_07_p01 (EXTB)\n");
2736   return m_pc + (size >> 0);
2737}
2738
2739ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p10(OPS_32)
2740{
2741   int size = 4;
2742   arcompact_fatal("illegal 04_2f_07_p10 (EXTB)\n"); // illegal mode because 'S' bits have already been used for opcode select
2743   return m_pc + (size >> 0);
2744}
2745
2746ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p11_m0(OPS_32)
2747{
2748   int size = 4;
2749   arcompact_fatal("arcompact_handle04_2f_07_p11_m0 (EXTB)\n");  // illegal mode because 'Q' bits have already been used for opcode select
2750   return m_pc + (size >> 0);
2751}
2752
2753ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_07_p11_m1(OPS_32)
2754{
2755   int size = 4;
2756   arcompact_fatal("arcompact_handle04_2f_07_p11_m1 (EXTB)\n");  // illegal mode because 'Q' bits have already been used for opcode select
2757   return m_pc + (size >> 0);
2758}
2759
27082760// EXTW b <- c  or  EXTW  b <- limm   or EXTW  limm <- c (no result)  or EXTW  limm, limm (invalid?)
27092761ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_2f_08_p00(OPS_32) // note 'b' destination for 04_2f_08_xx group
27102762{
r242568r242569
28362888
28372889ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p01(OPS_32)
28382890{
2839   int size = 4;
2840   arcompact_fatal("arcompact_handle05_00_p01 (ASL)\n");
2841   return m_pc + (size >> 0);
2842}
2891   SETUP_HANDLE04_0x_P01
28432892
2893   m_regs[areg] = b << (c&0x1f); // c = u
2894
2895   if (F)
2896   {
2897      arcompact_fatal("arcompact_handle05_00_p01 (ASL) (F set)\n"); // not yet supported
2898   }
2899
2900   return m_pc + (size >> 0);}
2901
28442902ARCOMPACT_RETTYPE arcompact_device::arcompact_handle05_00_p10(OPS_32)
28452903{
28462904   int size = 4;
r242568r242569
30593117}
30603118
30613119
3062ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_00(OPS_16)
3120ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_00(OPS_16) // ADD_S c, b,  u3   (note, c destination)
30633121{
3064   return arcompact_handle0d_helper(PARAMS, "ADD_S");
3122   int u, breg, creg;
3123
3124   COMMON16_GET_u3;
3125   COMMON16_GET_breg;
3126   COMMON16_GET_creg;
3127
3128   REG_16BIT_RANGE(breg);
3129   REG_16BIT_RANGE(creg);
3130
3131   m_regs[creg] = m_regs[breg] + u;
3132
3133   return m_pc + (2 >> 0);
30653134}
30663135
30673136ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0d_01(OPS_16)
r242568r242569
31163185
31173186}
31183187
3119ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_00(OPS_16)
3188ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_00(OPS_16) // ADD_s b, b, h
31203189{
3121   return arcompact_handle0e_0x_helper(PARAMS, "ADD_S", 0);
3190   int h,breg;
3191   int size = 2;
3192
3193   GROUP_0e_GET_h;
3194   COMMON16_GET_breg;
3195   REG_16BIT_RANGE(breg);
3196   
3197   if (h == LIMM_REG)
3198   {
3199      UINT32 limm;
3200      GET_LIMM_16;
3201      size = 6;
3202
3203      m_regs[breg] = m_regs[breg] + limm;
3204
3205   }
3206   else
3207   {
3208      m_regs[breg] = m_regs[breg] + m_regs[h];
3209   }
3210
3211   return m_pc+ (size>>0);
31223212}
31233213
31243214// 16-bit MOV with extended register range
r242568r242569
32533343   return m_pc + (2 >> 0);
32543344}
32553345
3256ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_02(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "SUB_S",0);  }
3346ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_02(OPS_16) // SUB_S b <- b,c
3347{
3348   int breg, creg;
3349
3350   COMMON16_GET_breg;
3351   COMMON16_GET_creg;
3352
3353   REG_16BIT_RANGE(breg);
3354   REG_16BIT_RANGE(creg);
3355
3356   m_regs[breg] = m_regs[breg] - m_regs[creg];
3357
3358   return m_pc + (2 >> 0);
3359}
3360
3361
32573362ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_04(OPS_16) // AND_S b <- b, c
32583363{
32593364   int breg, creg;
r242568r242569
35303635   return m_pc + (2 >> 0);
35313636}
35323637
3533ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_03(OPS_16)
3638ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_03(OPS_16) // SUB_S b,b,u5
35343639{
3535   return arcompact_handle_l7_0x_helper(PARAMS, "SUB_S");
3640   int breg, u;
3641
3642   COMMON16_GET_breg;
3643   COMMON16_GET_u5;
3644
3645   REG_16BIT_RANGE(breg);
3646
3647   m_regs[breg] = m_regs[breg] - u;
3648
3649   return m_pc + (2 >> 0);
35363650}
35373651
35383652ARCOMPACT_RETTYPE arcompact_device::arcompact_handle17_04(OPS_16) // BSET_S b,b,u5
r242568r242569
38703984   return realaddress;
38713985}
38723986
3873ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_01(OPS_16)  { return arcompact_handle1e_0x_helper(PARAMS, "BEQ_S"); }
3987ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_01(OPS_16) // BEQ_S s10 (branch is zero bit is set)
3988{
3989   if (STATUS32_CHECK_Z)
3990   {
3991      int s = (op & 0x01ff) >> 0;   op &= ~0x01ff;
3992      if (s & 0x100) s = -0x100 + (s & 0xff);
3993      UINT32 realaddress = PC_ALIGNED32 + (s * 2);
3994      //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link
3995      return realaddress;
3996   }
38743997
3998   return m_pc + (2 >> 0);
3999}
4000
38754001ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_02(OPS_16) // BNE_S s10  (branch if zero bit isn't set)
38764002{
38774003   if (!STATUS32_CHECK_Z)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team