Previous 199869 Revisions Next

r34079 Saturday 27th December, 2014 at 00:29:35 UTC by David Haywood
checkpoint (nw)
[src/emu/cpu/arcompact]arcompact.h arcompact_execute.c arcompact_make.py

trunk/src/emu/cpu/arcompact/arcompact.h
r242590r242591
165165   ARCOMPACT_RETTYPE arcompact_handle04_10(OPS_32);
166166   ARCOMPACT_RETTYPE arcompact_handle04_11(OPS_32);
167167   ARCOMPACT_RETTYPE arcompact_handle04_12(OPS_32);
168   ARCOMPACT_RETTYPE arcompact_handle04_13(OPS_32);
168//   ARCOMPACT_RETTYPE arcompact_handle04_13(OPS_32);
169169   ARCOMPACT_RETTYPE arcompact_handle04_14(OPS_32);
170170//   ARCOMPACT_RETTYPE arcompact_handle04_15(OPS_32);
171171//   ARCOMPACT_RETTYPE arcompact_handle04_16(OPS_32);
r242590r242591
774774   ARCOMPACT_HANDLER04_TYPE_PM(04_07);
775775   ARCOMPACT_HANDLER04_TYPE_PM(04_0a);
776776   ARCOMPACT_HANDLER04_TYPE_PM(04_0f);
777   ARCOMPACT_HANDLER04_TYPE_PM(04_13);
777778   ARCOMPACT_HANDLER04_TYPE_PM(04_15);
778779   ARCOMPACT_HANDLER04_TYPE_PM(04_16);
779780   ARCOMPACT_HANDLER04_TYPE_PM(04_20);
r242590r242591
851852#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)
852853#define CONDITION_EQ (STATUS32_CHECK_Z)
853854#define CONDITION_CS (STATUS32_CHECK_C)
855#define CONDITION_LT ((STATUS32_CHECK_N && !STATUS32_CHECK_V) || (!STATUS32_CHECK_N && STATUS32_CHECK_V))
854856
857
855858extern const device_type ARCA5;
856859
857860
trunk/src/emu/cpu/arcompact/arcompact_execute.c
r242590r242591
18611861   return arcompact_handle04_helper(PARAMS, opcodes_04[0x12], /*"BXOR"*/ 0,0);
18621862}
18631863
1864ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_13(OPS_32) 
1865{
1866   return arcompact_handle04_helper(PARAMS, opcodes_04[0x13], /*"BMSK"*/ 0,0);
1867}
18681864
1865
18691866ARCOMPACT_RETTYPE arcompact_device::arcompact_handle04_14(OPS_32) 
18701867{
18711868   return arcompact_handle04_helper(PARAMS, opcodes_04[0x14], /*"ADD1"*/ 0,0);
r242590r242591
27052702   return m_pc + (2 >> 0);
27062703}
27072704
2708ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_02(OPS_16) // SUB_S b <- b,c
2709{
2710   int breg, creg;
27112705
2712   COMMON16_GET_breg;
2713   COMMON16_GET_creg;
27142706
2715   REG_16BIT_RANGE(breg);
2716   REG_16BIT_RANGE(creg);
27172707
2718   m_regs[breg] = m_regs[breg] - m_regs[creg];
27192708
2720   return m_pc + (2 >> 0);
2721}
27222709
2723
2724ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_04(OPS_16) // AND_S b <- b, c
2725{
2726   int breg, creg;
2727
2728   COMMON16_GET_breg;
2729   COMMON16_GET_creg;
2730
2731   REG_16BIT_RANGE(breg);
2732   REG_16BIT_RANGE(creg);
2733
2734   m_regs[breg] = m_regs[breg] & m_regs[creg];
2735
2736   return m_pc + (2 >> 0);
2737}
2738
2739ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_05(OPS_16) // OR_S b <- b,c
2740{
2741   int breg, creg;
2742
2743   COMMON16_GET_breg;
2744   COMMON16_GET_creg;
2745
2746   REG_16BIT_RANGE(breg);
2747   REG_16BIT_RANGE(creg);
2748
2749   m_regs[breg] = m_regs[breg] | m_regs[creg];
2750
2751   return m_pc + (2 >> 0);
2752}
2753
2754
27552710ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_06(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "BIC_S",0);  }
2756ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_07(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "XOR_S",0);  }
2711
27572712ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0b(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "TST_S",1);  }
27582713ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0c(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "MUL64_S",2);  } // actual destination is special multiply registers
27592714ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0d(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "SEXB_S",0); }
27602715ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0e(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "SEXW_S",0); }
27612716
2762ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_0f(OPS_16) // EXTB_S
2763{
2764   int breg, creg;
27652717
2766   COMMON16_GET_breg;
2767   COMMON16_GET_creg;
27682718
2769   REG_16BIT_RANGE(breg);
2770   REG_16BIT_RANGE(creg);
27712719
2772   m_regs[breg] = m_regs[creg] & 0x000000ff;
2773
2774   return m_pc + (2 >> 0);
2775
2776}
2777
2778ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_10(OPS_16) // EXTW_S
2779{
2780   int breg, creg;
2781
2782   COMMON16_GET_breg;
2783   COMMON16_GET_creg;
2784
2785   REG_16BIT_RANGE(breg);
2786   REG_16BIT_RANGE(creg);
2787
2788   m_regs[breg] = m_regs[creg] & 0x0000ffff;
2789
2790   return m_pc + (2 >> 0);
2791}
2792
27932720ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_11(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "ABS_S",0);  }
27942721ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_12(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "NOT_S",0);  }
27952722ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_13(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "NEG_S",0);  }
r242590r242591
28002727ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_19(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "LSR_S",0);  }
28012728ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1a(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "ASR_S",0);  }
28022729
2803ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1b(OPS_16) //  ASL b, c asl 1   (can also be impleneted as b = c + c)
2804{
2805   int breg, creg;
28062730
2807   COMMON16_GET_breg;
2808   COMMON16_GET_creg;
2809
2810   REG_16BIT_RANGE(breg);
2811   REG_16BIT_RANGE(creg);
2812
2813   m_regs[breg] = m_regs[creg] << 1;
2814
2815   return m_pc + (2 >> 0);
2816}
2817
28182731ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1c(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "ASR1_S",0); }
28192732ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_1d(OPS_16)  { return arcompact_handle0f_0x_helper(PARAMS, "LSR1_S",0); }
28202733
r242590r242591
33023215
33033216ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_00(OPS_16)  { return arcompact_handle1e_03_0x_helper(PARAMS, "BGT_S"); }
33043217ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_01(OPS_16)  { return arcompact_handle1e_03_0x_helper(PARAMS, "BGE_S"); }
3305ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_02(OPS_16)  { return arcompact_handle1e_03_0x_helper(PARAMS, "BLT_S"); }
33063218
3219ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_02(OPS_16) // BLT_S
3220{
3221   if (CONDITION_LT)
3222   {
3223      int s = (op & 0x003f) >> 0;   op &= ~0x003f;
3224      if (s & 0x020) s = -0x20 + (s & 0x1f);
3225      UINT32 realaddress = PC_ALIGNED32 + (s * 2);
3226      //m_regs[REG_BLINK] = m_pc + (2 >> 0); // don't link
3227      return realaddress;
3228   }
3229
3230   return m_pc + (2 >> 0);
3231}
3232
33073233ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_03(OPS_16) // BLE_S
33083234{
33093235   if (CONDITION_LE)
trunk/src/emu/cpu/arcompact/arcompact_make.py
r242590r242591
251251        print >>f, ""
252252        print >>f, ""
253253
254# xxx_S b <- b,c format opcodes
255def EmitGroup0f(f,funcname, opname, opexecute, opwrite):
256    print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s(OPS_16)"% (funcname)
257    print >>f, "{"
258    print >>f, "   int breg, creg;"
259    print >>f, ""
260    print >>f, "   COMMON16_GET_breg;"
261    print >>f, "   COMMON16_GET_creg;"
262    print >>f, ""
263    print >>f, "   REG_16BIT_RANGE(breg);"
264    print >>f, "   REG_16BIT_RANGE(creg);"
265    print >>f, ""
266    print >>f, "   %s" % (opexecute)
267    print >>f, "   %s" % (opwrite)   
268    print >>f, ""
269    print >>f, "   return m_pc + (2 >> 0);"
270    print >>f, "}"
271
272
254273#  xxx_S b, b, u5 format opcodes
255274def EmitGroup17(f,funcname, opname, opexecute):
256275    print >>f, "ARCOMPACT_RETTYPE arcompact_device::arcompact_handle%s(OPS_16)" % (funcname)
r242590r242591
291310
292311EmitGroup04(f, "04_0f", "BSET", "UINT32 result = b | (1 << (c & 0x1f));", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags  )
293312
313EmitGroup04(f, "04_13", "BMSK", "UINT32 result = b & ((1<<(c+1))-1);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags  )
314
315
316
294317EmitGroup04(f, "04_15", "ADD2", "UINT32 result = b + (c << 2);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags  )
295318EmitGroup04(f, "04_16", "ADD3", "UINT32 result = b + (c << 3);", "m_regs[areg] = result;", "m_regs[breg] = result;", 0,0, -1, EmitGroup04_unsupported_Flags  )
296319
r242590r242591
303326EmitGroup04(f, "04_2f_07", "EXTB", "UINT32 result = c & 0x000000ff;",  "m_regs[breg] = result;","", 2,1, -1, EmitGroup04_unsupported_Flags  ) # ^
304327EmitGroup04(f, "04_2f_08", "EXTW", "UINT32 result = c & 0x0000ffff;",  "m_regs[breg] = result;","", 2,1, -1, EmitGroup04_unsupported_Flags  ) # ^
305328
329# xxx_S b <- b,c format opcodes  (or in some cases xxx_S b,c)
330EmitGroup0f(f, "0f_02", "SUB_S", "UINT32 result = m_regs[breg] - m_regs[creg];",  "m_regs[breg] = result;" )
331EmitGroup0f(f, "0f_04", "AND_S", "UINT32 result = m_regs[breg] & m_regs[creg];",  "m_regs[breg] = result;" )
332EmitGroup0f(f, "0f_05", "OR_S",  "UINT32 result = m_regs[breg] | m_regs[creg];",  "m_regs[breg] = result;" )
333EmitGroup0f(f, "0f_07", "XOR_S", "UINT32 result = m_regs[breg] ^ m_regs[creg];",  "m_regs[breg] = result;" )
334EmitGroup0f(f, "0f_0f", "EXTB_S","UINT32 result = m_regs[creg] & 0x000000ff;",    "m_regs[breg] = result;" )
335EmitGroup0f(f, "0f_10", "EXTW_S","UINT32 result = m_regs[creg] & 0x0000ffff;",    "m_regs[breg] = result;" )
336EmitGroup0f(f, "0f_1b", "ASL1_S","UINT32 result = m_regs[creg] << 1;",            "m_regs[breg] = result;" )
306337
338
307339#  xxx_S b, b, u5 format opcodes
308340EmitGroup17(f, "17_00", "ASL_S",  "m_regs[breg] = m_regs[breg] << (u&0x1f);" )
309341EmitGroup17(f, "17_01", "LSR_S",  "m_regs[breg] = m_regs[breg] >> (u&0x1f);" )


Previous 199869 Revisions Next


© 1997-2024 The MAME Team