Previous 199869 Revisions Next

r31102 Wednesday 25th June, 2014 at 20:15:59 UTC by Alex Jackson
Fix a couple of ROM loading errors introduced in r31099; clarify mia/tmnt graphics ROM descrambling (nw)
[src/mame/drivers]blockhl.c tmnt.c

trunk/src/mame/drivers/tmnt.c
r31101r31102
19611961/* 051960 interfaces */
19621962static const k051960_interface cuebrick_k051960_intf =
19631963{
1964   "gfx2", 1,
1964   "gfx2", 0,
19651965   REVERSE_PLANE_ORDER,
19661966   KONAMI_ROM_DEINTERLEAVE_NONE,
19671967   mia_sprite_callback
r31101r31102
19691969
19701970static const k051960_interface mia_k051960_intf =
19711971{
1972   "gfx2", 1,
1972   "gfx2", 0,
19731973   REVERSE_PLANE_ORDER,
19741974   KONAMI_ROM_DEINTERLEAVE_NONE,
19751975   mia_sprite_callback
r31101r31102
19771977
19781978static const k051960_interface tmnt_k051960_intf =
19791979{
1980   "gfx2", 1,
1980   "gfx2", 0,
19811981   REVERSE_PLANE_ORDER,
19821982   KONAMI_ROM_DEINTERLEAVE_2,
19831983   tmnt_sprite_callback
r31101r31102
19851985
19861986static const k051960_interface punkshot_k051960_intf =
19871987{
1988   "gfx2", 1,
1988   "gfx2", 0,
19891989   NORMAL_PLANE_ORDER,
19901990   KONAMI_ROM_DEINTERLEAVE_2,
19911991   punkshot_sprite_callback
r31101r31102
19931993
19941994static const k051960_interface thndrx2_k051960_intf =
19951995{
1996   "gfx2", 1,
1996   "gfx2", 0,
19971997   NORMAL_PLANE_ORDER,
19981998   KONAMI_ROM_DEINTERLEAVE_2,
19991999   thndrx2_sprite_callback
r31101r31102
29092909   ROM_LOAD( "963e20.g13",      0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
29102910
29112911   ROM_REGION( 0x100000, "k052109", 0 )    /* tiles */
2912   ROM_LOAD( "963a28.h27",      0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
2913   ROM_LOAD( "963a29.k27",      0x080000, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
2912   ROM_LOAD32_WORD( "963a28.h27",      0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
2913   ROM_LOAD32_WORD( "963a29.k27",      0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
29142914
29152915   ROM_REGION( 0x200000, "gfx2", 0 )   /* graphics (addressable by the main CPU) */
29162916   ROM_LOAD( "963a17.h4",      0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )        /* sprites */
r31101r31102
29432943   ROM_LOAD( "963e20.g13",      0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
29442944
29452945   ROM_REGION( 0x100000, "k052109", 0 )    /* tiles */
2946   ROM_LOAD( "963a28.h27",      0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
2947   ROM_LOAD( "963a29.k27",      0x080000, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
2946   ROM_LOAD32_WORD( "963a28.h27",      0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
2947   ROM_LOAD32_WORD( "963a29.k27",      0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
29482948
29492949   ROM_REGION( 0x200000, "gfx2", 0 )   /* graphics (addressable by the main CPU) */
29502950   ROM_LOAD( "963a17.h4",      0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )        /* sprites */
r31101r31102
30113011   ROM_LOAD( "963e20.g13",      0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
30123012
30133013   ROM_REGION( 0x100000, "k052109", 0 )    /* tiles */
3014   ROM_LOAD( "963a28.h27",      0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
3015   ROM_LOAD( "963a29.k27",      0x080000, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
3014   ROM_LOAD32_WORD( "963a28.h27",      0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
3015   ROM_LOAD32_WORD( "963a29.k27",      0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
30163016
30173017   ROM_REGION( 0x200000, "gfx2", 0 )   /* graphics (addressable by the main CPU) */
30183018   ROM_LOAD( "963a17.h4",      0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )        /* sprites */
r31101r31102
30453045   ROM_LOAD( "963e20.g13",      0x00000, 0x08000, CRC(1692a6d6) SHA1(68c3419012b2863e91a7d7e479fce5ceabb10b88) )
30463046
30473047   ROM_REGION( 0x100000, "k052109", 0 )    /* tiles */
3048   ROM_LOAD( "963a28.h27",      0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
3049   ROM_LOAD( "963a29.k27",      0x080000, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
3048   ROM_LOAD32_WORD( "963a28.h27",      0x000000, 0x80000, CRC(db4769a8) SHA1(810811914f9c1fbf2320d5a9030cbf124f6d78cf) )
3049   ROM_LOAD32_WORD( "963a29.k27",      0x000002, 0x80000, CRC(8069cd2e) SHA1(54095d3546119ccd1e8814d692aceb1327c9369f) )
30503050
30513051   ROM_REGION( 0x200000, "gfx2", 0 )   /* graphics (addressable by the main CPU) */
30523052   ROM_LOAD( "963a17.h4",      0x000000, 0x80000, CRC(b5239a44) SHA1(84e94807e7c51aa652b4e4b827b36be59a53d0d6) )        /* sprites */
r31101r31102
33343334   ROM_REGION( 0x10000, "audiocpu", 0 )
33353335   ROM_LOAD( "061f01.4e",    0x0000, 0x8000, CRC(ab9a2a57) SHA1(c92738b4d3754c2378cd1e6ae786faa0c5a65808) )
33363336
3337   // the tile and sprite ROMs are actually 16-bit ROMs on a 32-bit bus, but the data lines are
3338   // swapped so that D0-D7 and D16-D23 come from one ROM and D8-D15 and D24-D31 from the other
33373339   ROM_REGION( 0x100000, "k052109", 0 )    /* tiles */
33383340   ROM_LOAD16_BYTE( "061d14.12l", 0x000000, 0x080000, CRC(b9440924) SHA1(d12763f1c999cfa4f2d6f685a73c8c20204f9cbb) )
33393341   ROM_LOAD16_BYTE( "061d13.12k", 0x000001, 0x080000, CRC(9f999f0b) SHA1(f83e3e9e44d7d5ba4c72f72db1ab9f98a0e80fe2) )
r31101r31102
33643366   ROM_REGION( 0x10000, "audiocpu", 0 )
33653367   ROM_LOAD( "061f01.4e",    0x0000, 0x8000, CRC(ab9a2a57) SHA1(c92738b4d3754c2378cd1e6ae786faa0c5a65808) )
33663368
3369   // the tile and sprite ROMs are actually 16-bit ROMs on a 32-bit bus, but the data lines are
3370   // swapped so that D0-D7 and D16-D23 come from one ROM and D8-D15 and D24-D31 from the other
33673371   ROM_REGION( 0x100000, "k052109", 0 )    /* tiles */
33683372   ROM_LOAD16_BYTE( "061d14.12l", 0x000000, 0x080000, CRC(b9440924) SHA1(d12763f1c999cfa4f2d6f685a73c8c20204f9cbb) )
33693373   ROM_LOAD16_BYTE( "061d13.12k", 0x000001, 0x080000, CRC(9f999f0b) SHA1(f83e3e9e44d7d5ba4c72f72db1ab9f98a0e80fe2) )
r31101r31102
39503954   ROM_LOAD( "101c05.5e",   0x00000, 0x20000, CRC(02c3679f) SHA1(e6d878185e73baca24ac98891c647856be9353c4) ) // 1.bin
39513955   ROM_RELOAD(              0x10000, 0x20000 )
39523956
3957   // the tile and sprite ROMs are actually 16-bit ROMs on a 32-bit bus, but the data lines are
3958   // swapped so that D0-D7 and D16-D23 come from one ROM and D8-D15 and D24-D31 from the other
39533959   ROM_REGION( 0x080000, "k052109", 0 )    /* tiles */
39543960   ROM_LOAD16_BYTE( "101a12.12l", 0x000000, 0x040000, CRC(33530d7f) SHA1(87859ad058fb79e357101675706373f83a3f23d4) )
39553961   ROM_LOAD16_BYTE( "101a11.12k", 0x000001, 0x040000, CRC(7f773271) SHA1(0c6a62c6eb1897e88e893576f751e3d4fc788036) )
r31101r31102
39813987   ROM_LOAD( "101c05.5e",   0x00000, 0x20000, CRC(02c3679f) SHA1(e6d878185e73baca24ac98891c647856be9353c4) )
39823988   ROM_RELOAD(              0x10000, 0x20000 )
39833989
3990   // the tile and sprite ROMs are actually 16-bit ROMs on a 32-bit bus, but the data lines are
3991   // swapped so that D0-D7 and D16-D23 come from one ROM and D8-D15 and D24-D31 from the other
39843992   ROM_REGION( 0x080000, "k052109", 0 )    /* tiles */
39853993   ROM_LOAD16_BYTE( "101a12.12l", 0x000000, 0x040000, CRC(33530d7f) SHA1(87859ad058fb79e357101675706373f83a3f23d4) )
39863994   ROM_LOAD16_BYTE( "101a11.12k", 0x000001, 0x040000, CRC(7f773271) SHA1(0c6a62c6eb1897e88e893576f751e3d4fc788036) )
r31101r31102
40044012ROM_END
40054013
40064014
4007DRIVER_INIT_MEMBER(tmnt_state, mia)
4015// MIA and TMNT have their graphics data (both tiles and sprites) stored in the ROMs in
4016// the packed pixel format used by older Konami hardware such as Twin16. The data lines
4017// from the ROMs to the custom chips are swapped so that the chips receive the data in
4018// the planar format they expect.
4019
4020static void chunky_to_planar(memory_region *rgn)
40084021{
4009   UINT8 *gfxdata;
4010   int len;
4011   int i, j, k, A, B;
4012   int bits[32];
4022   UINT32 *ROM = reinterpret_cast<UINT32 *>(rgn->base());
4023   int len = rgn->bytes() / 4;
40134024
4014   /*
4015       MIA needs the bits to be shuffled around because the
4016       ROMs are connected differently to the 051962 custom IC.
4017   */
4018   gfxdata = memregion("k052109")->base();
4019   len = memregion("k052109")->bytes();
4020   for (i = 0; i < len; i += 4)
4025   for (int i = 0; i < len; i++)
40214026   {
4022      for (j = 0; j < 4; j++)
4023         for (k = 0; k < 8; k++)
4024            bits[8 * j + k] = (gfxdata[i + j] >> k) & 1;
4025
4026      for (j = 0; j < 4; j++)
4027      {
4028         gfxdata[i + j] = 0;
4029         for (k = 0; k < 8; k++)
4030            gfxdata[i + j] |= bits[j + 4 * k] << k;
4031      }
4027      UINT32 data = LITTLE_ENDIANIZE_INT32(ROM[i]);
4028      data = BITSWAP32(data,31,27,23,19,15,11,7,3,30,26,22,18,14,10,6,2,29,25,21,17,13,9,5,1,28,24,20,16,12,8,4,0);
4029      ROM[i] = LITTLE_ENDIANIZE_INT32(data);
40324030   }
4031}
40334032
4034   /*
4035        MIA needs the bits to be shuffled around because the
4036        ROMs are connected differently to the 051937 custom IC.
4037   */
4038   gfxdata = memregion("gfx2")->base();
4039   len = memregion("gfx2")->bytes();
4040   for (i = 0; i < len; i += 4)
4041   {
4042      for (j = 0; j < 4; j++)
4043         for (k = 0; k < 8; k++)
4044            bits[8 * j + k] = (gfxdata[i + j] >> k) & 1;
40454033
4046      for (j = 0; j < 4; j++)
4047      {
4048         gfxdata[i + j] = 0;
4049         for (k = 0; k < 8; k++)
4050            gfxdata[i + j] |= bits[j + 4 * k] << k;
4051      }
4052   }
4034DRIVER_INIT_MEMBER(tmnt_state, mia)
4035{
4036   chunky_to_planar(memregion("k052109"));
4037   chunky_to_planar(memregion("gfx2"));
40534038
4054   dynamic_buffer temp(len);
4055   memcpy(temp, gfxdata, len);
4056   for (A = 0; A < len / 4; A++)
4039   // unscramble the sprite ROM address lines
4040   UINT32 *gfxdata = reinterpret_cast<UINT32 *>(memregion("gfx2")->base());
4041   int len = memregion("gfx2")->bytes() / 4;
4042   dynamic_array<UINT32> temp(len);
4043   memcpy(temp, gfxdata, len * 4);
4044   for (int A = 0; A < len; A++)
40574045   {
4058      /* the bits to scramble are the low 8 ones */
4059      for (i = 0; i < 8; i++)
4060         bits[i] = (A >> i) & 0x01;
4046      // the bits to scramble are the low 8 ones
4047      int B = A & 0x3ff00;
40614048
4062      B = A & 0x3ff00;
4063
40644049      if ((A & 0x3c000) == 0x3c000)
4065      {
4066         B |= bits[3] << 0;
4067         B |= bits[5] << 1;
4068         B |= bits[0] << 2;
4069         B |= bits[1] << 3;
4070         B |= bits[2] << 4;
4071         B |= bits[4] << 5;
4072         B |= bits[6] << 6;
4073         B |= bits[7] << 7;
4074      }
4050         B |= BITSWAP8(A,7,6,4,2,1,0,5,3);
40754051      else
4076      {
4077         B |= bits[3] << 0;
4078         B |= bits[5] << 1;
4079         B |= bits[7] << 2;
4080         B |= bits[0] << 3;
4081         B |= bits[1] << 4;
4082         B |= bits[2] << 5;
4083         B |= bits[4] << 6;
4084         B |= bits[6] << 7;
4085      }
4052         B |= BITSWAP8(A,6,4,2,1,0,7,5,3);
40864053
4087      gfxdata[4 * A + 0] = temp[4 * B + 0];
4088      gfxdata[4 * A + 1] = temp[4 * B + 1];
4089      gfxdata[4 * A + 2] = temp[4 * B + 2];
4090      gfxdata[4 * A + 3] = temp[4 * B + 3];
4054      gfxdata[A] = temp[B];
40914055   }
40924056}
40934057
40944058
40954059DRIVER_INIT_MEMBER(tmnt_state, tmnt)
40964060{
4097   UINT8 *gfxdata;
4098   const UINT8 *code_conv_table;
4099   int len;
4100   int i, j, k, A, B, entry;
4101   int bits[32];
4061   chunky_to_planar(memregion("k052109"));
4062   chunky_to_planar(memregion("gfx2"));
41024063
4103   /*
4104        TMNT needs the bits to be shuffled around because the
4105        ROMs are connected differently to the 051962 custom IC.
4106   */
4107   gfxdata = memregion("k052109")->base();
4108   len = memregion("k052109")->bytes();
4109   for (i = 0; i < len; i += 4)
4110   {
4111      for (j = 0; j < 4; j++)
4112         for (k = 0; k < 8; k++)
4113            bits[8 * j + k] = (gfxdata[i + j] >> k) & 1;
4064   // unscramble the sprite ROM address lines
4065   const UINT8 *code_conv_table = memregion("proms")->base();
4066   UINT32 *gfxdata = reinterpret_cast<UINT32 *>(memregion("gfx2")->base());
4067   int len = memregion("gfx2")->bytes() / 4;
4068   dynamic_array<UINT32> temp(len);
4069   memcpy(temp, gfxdata, len * 4);
41144070
4115      for (j = 0; j < 4; j++)
4116      {
4117         gfxdata[i + j] = 0;
4118         for (k = 0; k < 8; k++)
4119            gfxdata[i + j] |= bits[j + 4 * k] << k;
4120      }
4121   }
4122
4123   /*
4124       TMNT needs the bits to be shuffled around because the
4125        ROMs are connected differently to the 051937 custom IC.
4126   */
4127   gfxdata = memregion("gfx2")->base();
4128   len = memregion("gfx2")->bytes();
4129   for (i = 0; i < len; i += 4)
4071   for (int A = 0; A < len; A++)
41304072   {
4131      for (j = 0; j < 4; j++)
4132         for (k = 0; k < 8; k++)
4133            bits[8 * j + k] = (gfxdata[i + j] >> k) & 1;
4134
4135      for (j = 0; j < 4; j++)
4136      {
4137         gfxdata[i + j] = 0;
4138         for (k = 0; k < 8; k++)
4139            gfxdata[i + j] |= bits[j + 4 * k] << k;
4140      }
4141   }
4142
4143   dynamic_buffer temp(len);
4144   memcpy(temp, gfxdata, len);
4145   code_conv_table = &memregion("proms")->base()[0x0000];
4146   for (A = 0; A < len / 4; A++)
4147   {
41484073#define CA0 0
41494074#define CA1 1
41504075#define CA2 2
r31101r31102
41764101      };
41774102
41784103      /* pick the correct entry in the PROM (top 8 bits of the address) */
4179      entry = code_conv_table[(A & 0x7f800) >> 11] & 7;
4104      int entry = code_conv_table[(A & 0x7f800) >> 11] & 7;
41804105
4106      int bits[32];
4107
41814108      /* the bits to scramble are the low 10 ones */
4182      for (i = 0; i < 10; i++)
4109      for (int i = 0; i < 10; i++)
41834110         bits[i] = (A >> i) & 0x01;
41844111
4185      B = A & 0x7fc00;
4112      int B = A & 0x7fc00;
41864113
4187      for (i = 0; i < 10; i++)
4114      for (int i = 0; i < 10; i++)
41884115         B |= bits[bit_pick_table[i][entry]] << i;
41894116
4190      gfxdata[4 * A + 0] = temp[4 * B + 0];
4191      gfxdata[4 * A + 1] = temp[4 * B + 1];
4192      gfxdata[4 * A + 2] = temp[4 * B + 2];
4193      gfxdata[4 * A + 3] = temp[4 * B + 3];
4117      gfxdata[A] = temp[B];
41944118   }
41954119}
41964120
trunk/src/mame/drivers/blockhl.c
r31101r31102
251251
252252   ROM_REGION( 0x20000, "k052109", 0 )    /* tiles */
253253   ROM_LOAD32_BYTE( "973f07.k15", 0x00000, 0x08000, CRC(1a8cd9b4) SHA1(7cb7944d24ac51fa6b610542d9dec68697cacf0f) )
254   ROM_LOAD32_BYTE( "973f09.k20", 0x00001, 0x08000, CRC(77841594) SHA1(e1bfdc5bb598d865868d578ef7faba8078becd7a) )
255   ROM_LOAD32_BYTE( "973f08.k18", 0x00002, 0x08000, CRC(952b51a6) SHA1(017575738d444b688b137cad5611638d53be84f2) )
254   ROM_LOAD32_BYTE( "973f08.k18", 0x00001, 0x08000, CRC(952b51a6) SHA1(017575738d444b688b137cad5611638d53be84f2) )
255   ROM_LOAD32_BYTE( "973f09.k20", 0x00002, 0x08000, CRC(77841594) SHA1(e1bfdc5bb598d865868d578ef7faba8078becd7a) )
256256   ROM_LOAD32_BYTE( "973f10.k23", 0x00003, 0x08000, CRC(09039fab) SHA1(a9dea17aacf4484d21ef3b16470263447b51b6b5) )
257257
258258   ROM_REGION( 0x20000, "gfx2", 0 ) /* graphics (addressable by the main CPU) */
r31101r31102
275275
276276   ROM_REGION( 0x20000, "k052109", 0 )    /* tiles */
277277   ROM_LOAD32_BYTE( "973e07.k15", 0x00000, 0x08000, CRC(0bd6b0f8) SHA1(6c59cf637354fe2df424eaa89feb9c1bc1f66a92) )
278   ROM_LOAD32_BYTE( "973e09.k20", 0x00001, 0x08000, CRC(bd3a6f24) SHA1(eb45db3a6a52bb2b25df8c2dace877e59b4130a6) )
279   ROM_LOAD32_BYTE( "973e08.k18", 0x00002, 0x08000, CRC(104d0d5f) SHA1(595698911513113d01e5b565f5b073d1bd033d3f) )
278   ROM_LOAD32_BYTE( "973e08.k18", 0x00001, 0x08000, CRC(104d0d5f) SHA1(595698911513113d01e5b565f5b073d1bd033d3f) )
279   ROM_LOAD32_BYTE( "973e09.k20", 0x00002, 0x08000, CRC(bd3a6f24) SHA1(eb45db3a6a52bb2b25df8c2dace877e59b4130a6) )
280280   ROM_LOAD32_BYTE( "973e10.k23", 0x00003, 0x08000, CRC(cf5e4b86) SHA1(43348753894c1763b26dbfc70245dac92048db8f) )
281281
282282   ROM_REGION( 0x20000, "gfx2", 0 ) /* graphics (addressable by the main CPU) */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team