Previous 199869 Revisions Next

r34014 Monday 22nd December, 2014 at 15:57:08 UTC by David Haywood
(nw)
[src/emu/cpu/arcompact]arcompact_execute.c arcompactdasm_ops.c

trunk/src/emu/cpu/arcompact/arcompact_execute.c
r242525r242526
11231123   return m_pc + (size>>0);
11241124}
11251125
1126
1127
11261128ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_00_01dasm(OPS_32)
11271129{
11281130   int size = 4;
r242525r242526
11451147   }
11461148   else
11471149   {
1150      m_regs[REG_BLINK] = m_pc + (size >> 0);
11481151      return realaddress;
11491152   }
11501153
r242525r242526
11821185
11831186
11841187// register - register cases
1185ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_00(OPS_32)  { return arcompact_01_01_00_helper( PARAMS, "BREQ"); }
11861188
1187ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_01(OPS_32) // register - register BRNE
1188{
1189   int size = 4;
1189#define BR_REGREG_SETUP \
1190   /* Branch on Compare / Bit Test - Register-Register */ \
1191   int size = 4; \
1192   GET_01_01_01_BRANCH_ADDR; \
1193   COMMON32_GET_creg; \
1194   COMMON32_GET_breg; \
1195   int n = (op & 0x00000020) >> 5; \
1196   UINT32 b,c; \
1197   if ((breg != LIMM_REG) && (creg != LIMM_REG)) \
1198   { \
1199      b = m_regs[breg]; \
1200      c = m_regs[creg]; \
1201   } \
1202   else \
1203   { \
1204      UINT32 limm; \
1205      GET_LIMM_32; \
1206      size = 8; \
1207         \
1208      if (breg == LIMM_REG) \
1209         b = limm; \
1210      else \
1211         b = m_regs[breg]; \
1212        \
1213      if (creg == LIMM_REG) \
1214         c = limm; \
1215      else \
1216         c = m_regs[creg]; \
1217   } \
11901218
1191   // Branch on Compare / Bit Test - Register-Register
1192   GET_01_01_01_BRANCH_ADDR
1193   COMMON32_GET_creg
1194   COMMON32_GET_breg;
1219#define BR_TAKEJUMP \
1220   /* take jump */ \
1221   UINT32 realaddress = PC_ALIGNED32 + (address * 2); \
1222    \
1223   if (n) \
1224   { \
1225      m_delayactive = 1; \
1226      m_delayjump = realaddress; \
1227      m_delaylinks = 0; \
1228   } \
1229   else \
1230   { \
1231      return realaddress; \
1232   } \
11951233
1196   int n = (op & 0x00000020) >> 5;
11971234
1198   UINT32 b,c;
11991235
1200   if ((breg != LIMM_REG) && (creg != LIMM_REG))
1236ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_00(OPS_32)  // register - register BREQ
1237{
1238   BR_REGREG_SETUP
1239
1240   // BREQ
1241   if (b == c)
12011242   {
1202      b = m_regs[breg];
1203      c = m_regs[creg];
1243      BR_TAKEJUMP
12041244   }
1205   else
1206   {
1207      UINT32 limm;
1208      GET_LIMM_32;
1209      size = 8;
12101245   
1211      if (breg == LIMM_REG)
1212         b = limm;
1213      else
1214         b = m_regs[breg];
1246   return m_pc + (size>>0);
1247}
12151248
1216      if (creg == LIMM_REG)
1217         c = limm;
1218      else
1219         c = m_regs[creg];
1220   }
1249ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_01(OPS_32) // register - register BRNE
1250{
1251   BR_REGREG_SETUP
12211252
12221253   // BRNE
12231254   if (b != c)
12241255   {
1225      // take jump
1226      UINT32 realaddress = PC_ALIGNED32 + (address * 2);
1227
1228      if (n)
1229      {
1230         m_delayactive = 1;
1231         m_delayjump = realaddress;
1232         m_delaylinks = 1;
1233      }
1234      else
1235      {
1236         return realaddress;
1237      }
1256      BR_TAKEJUMP
12381257   }
12391258   
12401259   return m_pc + (size>>0);
r242525r242526
12421261
12431262ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_02(OPS_32)  { return arcompact_01_01_00_helper( PARAMS, "BRLT"); }
12441263ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_03(OPS_32)  { return arcompact_01_01_00_helper( PARAMS, "BRGE"); }
1245ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_04(OPS_32)  { return arcompact_01_01_00_helper( PARAMS, "BRLO"); }
1246ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_05(OPS_32)  { return arcompact_01_01_00_helper( PARAMS, "BRHS"); }
1264
1265ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_04(OPS_32) // register - register BRLO
1266{
1267   BR_REGREG_SETUP
1268
1269   // BRLO
1270   if (b < c)
1271   {
1272      BR_TAKEJUMP
1273   }
1274   
1275   return m_pc + (size>>0);
1276}
1277
1278
1279ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_05(OPS_32) // register - register BRHS
1280{
1281   BR_REGREG_SETUP
1282
1283   // BRHS
1284   if (b >= c)
1285   {
1286      BR_TAKEJUMP
1287   }
1288   
1289   return m_pc + (size>>0);
1290}
1291
1292
12471293ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_0e(OPS_32)  { return arcompact_01_01_00_helper( PARAMS, "BBIT0");}
12481294ARCOMPACT_RETTYPE arcompact_device::arcompact_handle01_01_00_0f(OPS_32)  { return arcompact_01_01_00_helper( PARAMS, "BBIT1");}
12491295
r242525r242526
12881334      b = limm;
12891335   }
12901336
1291   // BRHS"
1337   // BRHS
12921338   if (b >= c) // check
12931339   {
1294      // take jump
1295      UINT32 realaddress = PC_ALIGNED32 + (address * 2);
1296
1297      if (n)
1298      {
1299         m_delayactive = 1;
1300         m_delayjump = realaddress;
1301         m_delaylinks = 1;
1302      }
1303      else
1304      {
1305         return realaddress;
1306      }
1340      BR_TAKEJUMP
13071341   }
13081342   
13091343   return m_pc + (size>>0);
r242525r242526
23442378   return arcompact_handle0c_helper(PARAMS, "LDW_S");
23452379}
23462380
2347ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0c_03(OPS_16)
2381ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0c_03(OPS_16) // ADD_S a <- b + c
23482382{
2349   return arcompact_handle0c_helper(PARAMS, "ADD_S");
2383   int areg, breg, creg;
2384
2385   COMMON16_GET_areg;
2386   COMMON16_GET_breg;
2387   COMMON16_GET_creg;
2388
2389   REG_16BIT_RANGE(areg);
2390   REG_16BIT_RANGE(breg);
2391   REG_16BIT_RANGE(creg);
2392
2393   m_regs[areg] = m_regs[breg] + m_regs[creg];
2394
2395   return m_pc + (2 >> 0);
23502396}
23512397
23522398
r242525r242526
24452491   return arcompact_handle0e_0x_helper(PARAMS, "CMP_S", 0);
24462492}
24472493
2448ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_03(OPS_16)
2494ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_03(OPS_16) // MOV_S h <- b
24492495{
2450   return arcompact_handle0e_0x_helper(PARAMS, "MOV_S (0e_03 type)", 1);
2496   int h,breg;
2497   int size = 2;
2498
2499   GROUP_0e_GET_h;
2500   COMMON16_GET_breg;
2501   REG_16BIT_RANGE(breg);
2502   
2503   if (h == LIMM_REG) // no result..
2504   {
2505
2506   }
2507
2508   m_regs[h] = m_regs[breg];
2509
2510   return m_pc+ (size>>0);
24512511}
24522512
24532513
r242525r242526
24632523ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_00(OPS_16)  { return arcompact_handle0f_00_0x_helper(PARAMS, "J_S"); }
24642524ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_01(OPS_16)  { return arcompact_handle0f_00_0x_helper(PARAMS, "J_S.D"); }
24652525ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_02(OPS_16)  { return arcompact_handle0f_00_0x_helper(PARAMS, "JL_S");  }
2466ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_03(OPS_16)  { return arcompact_handle0f_00_0x_helper(PARAMS, "JL_S.D");  }
2526
2527ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_03(OPS_16) // JL_S.D
2528{
2529   int breg;
2530
2531   COMMON16_GET_breg;
2532   REG_16BIT_RANGE(breg);
2533   
2534   m_delayactive = 1;
2535   m_delayjump = m_regs[breg];
2536   m_delaylinks = 1;
2537   
2538   return m_pc + (2 >> 0);
2539}
2540
24672541ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0f_00_06(OPS_16)  { return arcompact_handle0f_00_0x_helper(PARAMS, "SUB_S.NE"); }
24682542
24692543
r242525r242526
27912865
27922866ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_0x_helper(OPS_16, const char* optext)
27932867{
2794   arcompact_log("unimplemented %s %04x", optext, op);
2868   arcompact_log("unimplemented %s %04x (1e_0x type)", optext, op);
27952869   return m_pc + (2 >> 0);
27962870}
27972871
r242525r242526
28162890ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_06(OPS_16)  { return arcompact_handle1e_03_0x_helper(PARAMS, "BLO_S"); }
28172891ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1e_03_07(OPS_16)  { return arcompact_handle1e_03_0x_helper(PARAMS, "BLS_S"); }
28182892
2819ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1f(OPS_16)
2893ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1f(OPS_16) // BL_S s13
28202894{
2821   arcompact_log("unimplemented BL_S %04x", op);
2822   return m_pc + (2 >> 0);
2895   int s = (op & 0x07ff) >> 0;   op &= ~0x07ff;
2896   if (s & 0x400) s = -0x400 + (s & 0x3ff);
2897
2898   UINT32 realaddress = PC_ALIGNED32 + (s * 4);
2899
2900   m_regs[REG_BLINK] = m_pc + (2 >> 0);
2901   return realaddress;
28232902}
28242903
28252904/************************************************************************************************************************************
trunk/src/emu/cpu/arcompact/arcompactdasm_ops.c
r242525r242526
13721372
13731373
13741374
1375int arcompact_handle0c_helper_dasm(DASM_OPS_16, const char* optext)
1375int arcompact_handle0c_helper_dasm(DASM_OPS_16, const char* optext, int format)
13761376{
13771377   int areg, breg, creg;
13781378
r242525r242526
13851385   REG_16BIT_RANGE(creg);
13861386
13871387
1388   print("%s %s <- [%s, %s]", optext, regnames[areg], regnames[breg], regnames[creg]);
1388   if (format==0) print("%s %s <- [%s, %s]", optext, regnames[areg], regnames[breg], regnames[creg]);
1389   else print("%s %s <- %s, %s", optext, regnames[areg], regnames[breg], regnames[creg]);
1390
13891391   return 2;
13901392}
13911393
13921394
13931395int arcompact_handle0c_00_dasm(DASM_OPS_16)
13941396{
1395   return arcompact_handle0c_helper_dasm(DASM_PARAMS, "LD_S");
1397   return arcompact_handle0c_helper_dasm(DASM_PARAMS, "LD_S", 0);
13961398}
13971399
13981400int arcompact_handle0c_01_dasm(DASM_OPS_16)
13991401{
1400   return arcompact_handle0c_helper_dasm(DASM_PARAMS, "LDB_S");
1402   return arcompact_handle0c_helper_dasm(DASM_PARAMS, "LDB_S", 0);
14011403}
14021404
14031405int arcompact_handle0c_02_dasm(DASM_OPS_16)
14041406{
1405   return arcompact_handle0c_helper_dasm(DASM_PARAMS, "LDW_S");
1407   return arcompact_handle0c_helper_dasm(DASM_PARAMS, "LDW_S", 0);
14061408}
14071409
14081410int arcompact_handle0c_03_dasm(DASM_OPS_16)
14091411{
1410   return arcompact_handle0c_helper_dasm(DASM_PARAMS, "ADD_S");
1412   return arcompact_handle0c_helper_dasm(DASM_PARAMS, "ADD_S", 1);
14111413}
14121414
14131415


Previous 199869 Revisions Next


© 1997-2024 The MAME Team