Previous 199869 Revisions Next

r34000 Sunday 21st December, 2014 at 17:42:42 UTC by David Haywood
couple more ops (nw)
[src/emu/cpu/arcompact]arcompact_common.h arcompact_execute.c arcompactdasm_ops.c
[src/mess/drivers]leapster.c

trunk/src/emu/cpu/arcompact/arcompact_common.h
r242511r242512
1515extern const char *regnames[0x40];
1616extern const char *opcodes_04[0x40];
1717
18#define REG_BLINK (0x1f) // 31
18#define REG_BLINK (0x1f) // r31
19#define REG_SP (0x1c) // r28
trunk/src/emu/cpu/arcompact/arcompact_execute.c
r242511r242512
120120   limm = (READ16((m_pc + 4) >> 1) << 16); \
121121   limm |= READ16((m_pc + 6) >> 1); \
122122
123#define GET_LIMM_16 \
124   limm = (READ16((m_pc + 2) >> 1) << 16); \
125   limm |= READ16((m_pc + 4) >> 1); \
123126
124127
125128#define PC_ALIGNED32 \
r242511r242512
12281231   int size = 4;
12291232   //UINT32 limm = 0;
12301233   int got_limm = 0;
1234   int S = (op & 0x00008000) >> 15;// op &= ~0x00008000;
1235   int s = (op & 0x00ff0000) >> 16;// op &= ~0x00ff0000;
12311236
12321237   COMMON32_GET_breg;
12331238   COMMON32_GET_creg;
12341239
1240   if (S) s = -0x100 + s;
1241
1242//   int R = (op & 0x00000001) >> 0; op &= ~0x00000001; // bit 0 is reserved
1243   int Z = (op & 0x00000006) >> 1; op &= ~0x00000006;
1244   int a = (op & 0x00000018) >> 3; op &= ~0x00000018;
1245//   int D = (op & 0x00000020) >> 5; op &= ~0x00000020; // we don't use the data cache currently
1246
12351247   if (breg == LIMM_REG)
12361248   {
12371249      //GET_LIMM_32;
r242511r242512
12521264
12531265   }
12541266
1255   arcompact_log("unimplemented ST %08x", op);
1267   if (Z == 0)
1268   {
1269      UINT32 address = m_regs[breg] + s;
1270
1271      WRITE32(address>>2, m_regs[creg]);
1272   }
1273   else if (Z == 1)
1274   {
1275      arcompact_fatal("illegal ST %08x (data size %d mode %d)", op, Z, a);
1276   }
1277   else if (Z == 2)
1278   {
1279      arcompact_fatal("illegal ST %08x (data size %d mode %d)", op, Z, a);
1280   }
1281   else
1282   {
1283      arcompact_fatal("illegal ST %08x (data size %d mode %d)", op, Z, a);
1284   }
1285
1286   // todo, handle 'a' increment modes
1287
12561288   return m_pc + (size>>0);
12571289
12581290}
r242511r242512
18461878   {
18471879   }
18481880
1849   arcompact_log("unimplemented ST %08x", op);
1881   arcompact_log("unimplemented SR %08x", op);
18501882   return m_pc + (size>>0);
18511883}
18521884
r242511r242512
21642196   return arcompact_handle0e_0x_helper(PARAMS, "ADD_S", 0);
21652197}
21662198
2167ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_01(OPS_16)
2199// 16-bit MOV with extended register range
2200ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_01(OPS_16) // MOV_S b <- h
21682201{
2169   return arcompact_handle0e_0x_helper(PARAMS, "MOV_S", 0);
2202   int h,breg;
2203   int size = 2;
2204
2205   GROUP_0e_GET_h;
2206   COMMON16_GET_breg;
2207   REG_16BIT_RANGE(breg);
2208   
2209   if (h == LIMM_REG)
2210   {
2211      // opcode        iiii ibbb hhhI Ihhh
2212      // MOV_S b, limm 0111 0bbb 1100 1111 [LIMM]   (h == LIMM)
2213
2214      UINT32 limm;
2215      GET_LIMM_16;
2216      size = 6;
2217
2218      m_regs[breg] = limm;
2219
2220   }
2221   else
2222   {
2223      // opcode        iiii ibbb hhhI Ihhh
2224      // MOV_S b,h     0111 0bbb hhh0 1HHH
2225      m_regs[breg] = m_regs[h];
2226   }
2227
2228   return m_pc+ (size>>0);
21702229}
21712230
21722231ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_02(OPS_16)
r242511r242512
21762235
21772236ARCOMPACT_RETTYPE arcompact_device::arcompact_handle0e_03(OPS_16)
21782237{
2179   return arcompact_handle0e_0x_helper(PARAMS, "MOV_S", 1);
2238   return arcompact_handle0e_0x_helper(PARAMS, "MOV_S (0e_03 type)", 1);
21802239}
21812240
21822241
r242511r242512
24032462// op bits remaining for 0x18_07_xx subgroups 0x0700
24042463ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_01(OPS_16)
24052464{
2406   arcompact_log("unimplemented PUSH_S %04x", op);
2407   return m_pc + (2 >> 0);;
2465   int breg;
2466   COMMON16_GET_breg;
2467   REG_16BIT_RANGE(breg);
2468   
2469   m_regs[REG_SP] -= 4;
2470   
2471   WRITE32(m_regs[REG_SP] >> 2, m_regs[breg]);
2472
2473   return m_pc + (2 >> 0);
24082474}
24092475
24102476
24112477ARCOMPACT_RETTYPE arcompact_device::arcompact_handle18_07_11(OPS_16)
24122478{
2413   arcompact_log("unimplemented PUSH_S [BLINK] %04x", op);
2414   return m_pc + (2 >> 0);;
2479   // breg bits are reserved
2480
2481   m_regs[REG_SP] -= 4;
2482   
2483   WRITE32(m_regs[REG_SP] >> 2, m_regs[REG_BLINK]);
2484
2485   return m_pc + (2 >> 0);
24152486}
24162487
24172488
r242511r242512
24342505
24352506ARCOMPACT_RETTYPE arcompact_device::arcompact_handle1b(OPS_16)
24362507{
2437   arcompact_log("unimplemented MOV_S %04x",  op);
2508   arcompact_log("unimplemented MOV_S (1b type) %04x",  op);
24382509   return m_pc + (2 >> 0);;
24392510}
24402511
trunk/src/emu/cpu/arcompact/arcompactdasm_ops.c
r242511r242512
14761476      UINT32 limm;
14771477      GET_LIMM;
14781478      size = 6;
1479      if (!revop) print("%s %s, (%08x) (%04x)", optext, regnames[breg], limm, op);
1480      else print("%s (%08x), %s (%04x)", optext, limm, regnames[breg], op);
1479      if (!revop) print("%s %s <- 0x%08x", optext, regnames[breg], limm);
1480      else print("%s 0x%08x <- %s", optext, limm, regnames[breg]);
14811481   }
14821482   else
14831483   {
1484      if (!revop) print("%s %s, %s (%04x)", optext, regnames[breg], regnames[h], op);
1485      else print("%s %s, %s (%04x)", optext, regnames[h], regnames[breg], op);
1484      if (!revop) print("%s %s <- %s", optext, regnames[breg], regnames[h]);
1485      else print("%s %s <- %s", optext, regnames[h], regnames[breg]);
14861486
14871487   }
14881488
r242511r242512
17921792// op bits remaining for 0x18_06_xx subgroups 0x0700
17931793int arcompact_handle18_06_01_dasm(DASM_OPS_16)
17941794{
1795   int breg = (op & 0x0700) >> 8;
1796   op &= ~0x0700; // all bits now used
1795   int breg;
1796   COMMON16_GET_breg
17971797   REG_16BIT_RANGE(breg)
17981798
17991799   print("POP_S %s", regnames[breg]);
r242511r242512
18171817// op bits remaining for 0x18_07_xx subgroups 0x0700
18181818int arcompact_handle18_07_01_dasm(DASM_OPS_16)
18191819{
1820   int breg = (op & 0x0700) >> 8;
1821   op &= ~0x0700; // all bits now used
1820   int breg;
1821   COMMON16_GET_breg
18221822   REG_16BIT_RANGE(breg)
18231823
18241824   print("PUSH_S %s", regnames[breg]);
trunk/src/mess/drivers/leapster.c
r242511r242512
277277
278278static ADDRESS_MAP_START( leapster_map, AS_PROGRAM, 32, leapster_state )
279279   AM_RANGE(0x00000000, 0x001fffff) AM_ROM AM_MIRROR(0x40000000) // pointers in the bios region seem to be to the 40xxxxxx region, either we mirror there or something (real bios?) is acutally missing
280   AM_RANGE(0x03000000, 0x030007ff) AM_RAM // puts stack here, writes a pointer @ 0x03000000 on startup
280281//   AM_RANGE(0x80000000, 0x807fffff) AM_ROMBANK("cartrom") // game ROM pointers are all to the 80xxxxxx region, so I assume it maps here - installed if a cart is present
281282ADDRESS_MAP_END
282283


Previous 199869 Revisions Next


© 1997-2024 The MAME Team