mirror of
https://github.com/holub/mame
synced 2025-05-30 01:23:07 +03:00
Shogun Warriors - various fixes
Extracted tables required for Shogun Warriors to work [Tomasz Slanina] Decrypted + verified table data for Shogun Warriors [David Haywood] Marked 2 graphic roms in Shogun Warriors as BAD_DUMP [David Haywood] Temporarily added a hack to the collision function to only use the B.Rap Boys code if the game is B.Rap Boys until we have a single function that works with both [David Haywood]
This commit is contained in:
parent
9bde30c59b
commit
c7d93414f2
@ -840,7 +840,7 @@ static ADDRESS_MAP_START( shogwarr, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x603000, 0x603fff) AM_RAM AM_BASE(&kaneko16_vscroll_0)
|
||||
AM_RANGE(0x800000, 0x80000f) AM_RAM_WRITE(kaneko16_layers_0_regs_w) AM_BASE(&kaneko16_layers_0_regs) // Layers 0 Regs
|
||||
AM_RANGE(0x900000, 0x90001f) AM_RAM_WRITE(kaneko16_sprites_regs_w) AM_BASE(&kaneko16_sprites_regs) // Sprites Regs
|
||||
AM_RANGE(0xa00000, 0xa0007f) AM_READWRITE(shogwarr_calc_r, shogwarr_calc_w) // Random Number ?
|
||||
AM_RANGE(0xa00000, 0xa0007f) AM_READWRITE(bloodwar_calc_r, bloodwar_calc_w)
|
||||
AM_RANGE(0xa80000, 0xa80001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // Watchdog
|
||||
AM_RANGE(0xb80000, 0xb80001) AM_READ_PORT("P1")
|
||||
AM_RANGE(0xb80002, 0xb80003) AM_READ_PORT("P2")
|
||||
@ -3347,6 +3347,9 @@ ROUTINES:
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
// some bad graphic roms
|
||||
// sound roms should probably also be checked..
|
||||
|
||||
ROM_START( shogwarr )
|
||||
ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */
|
||||
ROM_LOAD16_BYTE( "fb030a.u61", 0x000000, 0x020000, CRC(a04106c6) SHA1(95ab084f2e709be7cec2964cb09bcf5a8d3aacdf) )
|
||||
@ -3355,24 +3358,24 @@ ROM_START( shogwarr )
|
||||
ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */
|
||||
ROM_LOAD( "fb040a.u33", 0x000000, 0x020000, CRC(4b62c4d9) SHA1(35c943dde70438a411714070e42a84366db5ef83) )
|
||||
|
||||
ROM_REGION( 0x1000000, "gfx1", 0 ) /* Sprites */ /* not sure these are all correct size */
|
||||
ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ /* not sure these are all correct size */
|
||||
ROM_LOAD( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) )
|
||||
ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) )
|
||||
ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) )
|
||||
ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) )
|
||||
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) )
|
||||
ROM_LOAD( "fb022b.u6", 0x480000, 0x080000, CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) )
|
||||
ROM_LOAD( "fb023.u7", 0x500000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
|
||||
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, BAD_DUMP CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) // half size?
|
||||
ROM_LOAD( "fb022b.u6", 0x500000, 0x080000, BAD_DUMP CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) // half size?
|
||||
ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
|
||||
|
||||
ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */
|
||||
ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom
|
||||
ROM_LOAD( "fb011.u66", 0x100000, 0x080000, CRC(500a0367) SHA1(6dc5190f81b21f59ee56a3b2332c8d86d6599782) ) // 40 pin mask rom (verified correct)
|
||||
|
||||
ROM_REGION( 0x100000, "oki1", 0 ) /* Samples */
|
||||
ROM_REGION( 0x400000*16, "oki1", 0 ) /* Samples */
|
||||
ROM_LOAD( "fb000e.u42", 0x000000, 0x080000, CRC(969f1465) SHA1(4f56d1ad341b08f4db41b7ab2498740612ff7c3d) ) // 2 x $40000
|
||||
ROM_LOAD( "fb001e.u43", 0x080000, 0x080000, CRC(f524aaa1) SHA1(006a886f9df2e57c51b61c6cea70a6574fc20304) ) // 2 x $40000
|
||||
|
||||
ROM_REGION( 0x100000, "oki2", 0 ) /* Samples */
|
||||
ROM_REGION( 0x400000*16, "oki2", 0 ) /* Samples */
|
||||
ROM_LOAD( "fb002.u44", 0x000000, 0x080000, CRC(05d7c2a9) SHA1(e34d395985caec10139a22daa179bb185df157d6) ) // 2 x $40000
|
||||
ROM_LOAD( "fb003.u45", 0x080000, 0x080000, CRC(405722e9) SHA1(92e51093d50f74f650ba137f5fc2910e0f85337e) ) // 2 x $40000
|
||||
ROM_END
|
||||
@ -3414,24 +3417,24 @@ ROM_START( shogwarre )
|
||||
ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */
|
||||
ROM_LOAD( "fb040e.u33", 0x000000, 0x020000, CRC(299d0746) SHA1(67fe3a47ab01fa02ce2bb5836c2041986c19d875) )
|
||||
|
||||
ROM_REGION( 0x1000000, "gfx1", 0 ) /* Sprites */ /* not sure these are all correct size */
|
||||
ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ /* not sure these are all correct size */
|
||||
ROM_LOAD( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) )
|
||||
ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) )
|
||||
ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) )
|
||||
ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) )
|
||||
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) )
|
||||
ROM_LOAD( "fb022b.u6", 0x480000, 0x080000, CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) )
|
||||
ROM_LOAD( "fb023.u7", 0x500000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
|
||||
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, BAD_DUMP CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) // half size?
|
||||
ROM_LOAD( "fb022b.u6", 0x500000, 0x080000, BAD_DUMP CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) // half size?
|
||||
ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
|
||||
|
||||
ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */
|
||||
ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom
|
||||
ROM_LOAD( "fb011.u66", 0x100000, 0x080000, CRC(500a0367) SHA1(6dc5190f81b21f59ee56a3b2332c8d86d6599782) ) // 40 pin mask rom (verified correct)
|
||||
|
||||
ROM_REGION( 0x100000, "oki1", 0 ) /* Samples */
|
||||
ROM_REGION( 0x400000*16, "oki1", 0 ) /* Samples */
|
||||
ROM_LOAD( "fb000e.u42", 0x000000, 0x080000, CRC(969f1465) SHA1(4f56d1ad341b08f4db41b7ab2498740612ff7c3d) ) // 2 x $40000
|
||||
ROM_LOAD( "fb001e.u43", 0x080000, 0x080000, CRC(f524aaa1) SHA1(006a886f9df2e57c51b61c6cea70a6574fc20304) ) // 2 x $40000
|
||||
|
||||
ROM_REGION( 0x100000, "oki2", 0 ) /* Samples */
|
||||
ROM_REGION( 0x400000*16, "oki2", 0 ) /* Samples */
|
||||
ROM_LOAD( "fb002.u44", 0x000000, 0x080000, CRC(05d7c2a9) SHA1(e34d395985caec10139a22daa179bb185df157d6) ) // 2 x $40000
|
||||
ROM_LOAD( "fb003.u45", 0x080000, 0x080000, CRC(405722e9) SHA1(92e51093d50f74f650ba137f5fc2910e0f85337e) ) // 2 x $40000
|
||||
ROM_END
|
||||
@ -3482,24 +3485,24 @@ ROM_START( fjbuster ) // Fujiyama Buster - Japan version of Shogun Warriors
|
||||
ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */
|
||||
ROM_LOAD( "fb040j.u33", 0x000000, 0x020000, CRC(299d0746) SHA1(67fe3a47ab01fa02ce2bb5836c2041986c19d875) )
|
||||
|
||||
ROM_REGION( 0x1000000, "gfx1", 0 ) /* Sprites */ /* not sure these are all correct size */
|
||||
ROM_REGION( 0x1000000, "gfx1", ROMREGION_ERASEFF ) /* Sprites */ /* not sure these are all correct size */
|
||||
ROM_LOAD( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) )
|
||||
ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) )
|
||||
ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) )
|
||||
ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) )
|
||||
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) )
|
||||
ROM_LOAD( "fb022b.u6", 0x480000, 0x080000, CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) )
|
||||
ROM_LOAD( "fb023.u7", 0x500000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
|
||||
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, BAD_DUMP CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) // half size?
|
||||
ROM_LOAD( "fb022b.u6", 0x500000, 0x080000, BAD_DUMP CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) // half size?
|
||||
ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
|
||||
|
||||
ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */
|
||||
ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom
|
||||
ROM_LOAD( "fb011.u66", 0x100000, 0x080000, CRC(500a0367) SHA1(6dc5190f81b21f59ee56a3b2332c8d86d6599782) ) // 40 pin mask rom (verified correct)
|
||||
|
||||
ROM_REGION( 0x100000, "oki1", 0 ) /* Samples */
|
||||
ROM_REGION( 0x400000*16, "oki1", 0 ) /* Samples */
|
||||
ROM_LOAD( "fb000j.u43", 0x000000, 0x080000, CRC(a7522555) SHA1(ea88d90dda20bc309f98a1924c41551e7708e6af) ) // 2 x $40000
|
||||
ROM_LOAD( "fb001j_u.101", 0x080000, 0x080000, CRC(07d4e8e2) SHA1(0de911f452ddeb54b0b435b9c1cf5d5881175d44) ) // 2 x $40000
|
||||
|
||||
ROM_REGION( 0x100000, "oki2", 0 ) /* Samples */
|
||||
ROM_REGION( 0x400000*16, "oki2", 0 ) /* Samples */
|
||||
ROM_LOAD( "fb002.u44", 0x000000, 0x080000, CRC(05d7c2a9) SHA1(e34d395985caec10139a22daa179bb185df157d6) ) // 2 x $40000
|
||||
ROM_LOAD( "fb003.u45", 0x080000, 0x080000, CRC(405722e9) SHA1(92e51093d50f74f650ba137f5fc2910e0f85337e) ) // 2 x $40000
|
||||
ROM_END
|
||||
@ -3879,9 +3882,9 @@ GAME( 1995, gtmr2u, gtmr2, gtmr2, gtmr2, gtmr2, ROT0, "Kaneko", "Gre
|
||||
GAME( 1992, brapboys, 0, shogwarr, brapboys, brapboys, ROT0, "Kaneko", "B.Rap Boys (World)", 0 )
|
||||
GAME( 1992, brapboysj,brapboys, shogwarr, brapboys, brapboys, ROT0, "Kaneko", "B.Rap Boys Special (Japan)", 0 )
|
||||
|
||||
/* Non-working games (mainly due to protection) */
|
||||
/* Non-working games (mainly due to bad gfx roms) */
|
||||
|
||||
GAME( 1992, shogwarr, 0, shogwarr, shogwarr, calc3, ROT0, "Kaneko", "Shogun Warriors", GAME_NOT_WORKING )
|
||||
GAME( 1992, shogwarre,shogwarr, shogwarr, shogwarr, calc3, ROT0, "Kaneko", "Shogun Warriors (Euro)", GAME_NOT_WORKING )
|
||||
GAME( 1992, shogwarr, 0, shogwarr, shogwarr, calc3, ROT0, "Kaneko", "Shogun Warriors (US)", GAME_NOT_WORKING )
|
||||
GAME( 1992, shogwarre,shogwarr, shogwarr, shogwarr, calc3, ROT0, "Kaneko", "Shogun Warriors (World)", GAME_NOT_WORKING )
|
||||
GAME( 1992, fjbuster, shogwarr, shogwarr, shogwarr, calc3, ROT0, "Kaneko", "Fujiyama Buster (Japan)", GAME_NOT_WORKING )
|
||||
|
||||
|
@ -37,7 +37,8 @@ UINT16 *kaneko16_mcu_ram;
|
||||
- see notes about this "calculator" implementation in drivers\galpanic.c
|
||||
- bonkadv only uses Random Number, XY Overlap Collision bit and register '0x02'
|
||||
*/
|
||||
|
||||
READ16_HANDLER(shogwarr_calc_r);
|
||||
WRITE16_HANDLER(shogwarr_calc_w);
|
||||
|
||||
static struct {
|
||||
UINT16 x1p, y1p, x1s, y1s;
|
||||
@ -123,6 +124,16 @@ WRITE16_HANDLER(galpanib_calc_w)
|
||||
|
||||
WRITE16_HANDLER(bloodwar_calc_w)
|
||||
{
|
||||
|
||||
int isbrap = ( !strcmp(space->machine->gamedrv->name,"brapboysj") || !strcmp(space->machine->gamedrv->name,"brapboys"));
|
||||
|
||||
/* our implementation is incomplete, b.rap boys requires some modifications */
|
||||
if (isbrap)
|
||||
{
|
||||
shogwarr_calc_w(space,offset,data,mem_mask);
|
||||
return;
|
||||
}
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
// p is position, s is size
|
||||
@ -188,6 +199,14 @@ READ16_HANDLER(bloodwar_calc_r)
|
||||
UINT16 data = 0;
|
||||
INT16 x_coll, y_coll;
|
||||
|
||||
/* our implementation is incomplete, b.rap boys requires some modifications */
|
||||
int isbrap = ( !strcmp(space->machine->gamedrv->name,"brapboysj") || !strcmp(space->machine->gamedrv->name,"brapboys"));
|
||||
|
||||
if (isbrap)
|
||||
{
|
||||
return shogwarr_calc_r(space,offset,mem_mask);
|
||||
}
|
||||
|
||||
x_coll = calc_compute_x();
|
||||
y_coll = calc_compute_y();
|
||||
|
||||
@ -592,11 +611,14 @@ OFFSET 0 - the location of a word which specifies the size of the block
|
||||
- this is usually '3', but if it's larger than 3 it enables an 'inline encryption' mode, whereby the decryption table is stored in the
|
||||
- right before the length register
|
||||
|
||||
OFFSET 1 - a 'mode' register of some sort, usually 0,1,2 or 3 for used data, shogun also called a 'blank' command (length 0) with mode 8
|
||||
OFFSET 1 - a 'mode' register of some sort, usually 0,1,2 or 3 for used data, shogun also called a 'blank' command (length 0) with mode 8 and mode 6
|
||||
- seems to cause eeprom access and reset write addresses
|
||||
|
||||
OFFSET 2 - unknown, might be some kind of 'step' register
|
||||
- 4 bits are 'shift' used in the decryption
|
||||
- the other 4 bits probably control if the odd/even bytes are inverted, and if an alt shift is applied every other byte
|
||||
|
||||
OFFSET 3 - decryption key - specifies which decryption table to use (ignored for inline tables, see offset 0)
|
||||
OFFSET 3 - decryption key - specifies which decryption table to use (ignored for inline tables, see offset 0), key 00 is blank
|
||||
|
||||
(inline decryption table goes here if specified)
|
||||
|
||||
@ -611,90 +633,6 @@ where games specify the same decryption key the table used is the same, I don't
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
|
||||
Status
|
||||
|
||||
Blocks marked ** are decrypted and verified
|
||||
.. means I have the data to study
|
||||
|
||||
(Shogun Warriors)
|
||||
|
||||
Block 10 Found Base 0060 - Mode? 01 Unknown 14 Key 00 Length 0532
|
||||
Block 11 Found Base 0598 - Mode? 01 Unknown 48 Key 00 Length 03f4
|
||||
|
||||
** Block 19 Found Base 09bc - Mode? 03 Unknown 01 Key 01 Length 00da
|
||||
|
||||
Block 30 Found Base 0b20 - Mode? 02 Unknown 01 Key 10 Length 022a
|
||||
Block 31 Found Base 0d50 - Mode? 02 Unknown 03 Key 11 Length 0246
|
||||
Block 32 Found Base 0f9c - Mode? 02 Unknown 01 Key 12 Length 0226
|
||||
Block 33 Found Base 11c8 - Mode? 02 Unknown 02 Key 13 Length 0216
|
||||
Block 34 Found Base 13e4 - Mode? 02 Unknown 02 Key 14 Length 0226
|
||||
Block 35 Found Base 1610 - Mode? 02 Unknown 03 Key 15 Length 024a
|
||||
Block 36 Found Base 1860 - Mode? 02 Unknown 03 Key 16 Length 0222
|
||||
Block 37 Found Base 1a88 - Mode? 02 Unknown 02 Key 17 Length 0216
|
||||
Block 38 Found Base 1ca4 - Mode? 02 Unknown 02 Key 18 Length 0222
|
||||
Block 39 Found Base 1ecc - Mode? 02 Unknown 01 Key 19 Length 0206
|
||||
Block 3a Found Base 20d8 - Mode? 02 Unknown 01 Key 1a Length 0202
|
||||
Block 3b Found Base 22e0 - Mode? 02 Unknown 02 Key 1b Length 021e
|
||||
|
||||
** Block 40 Found Base 251c - Inline Encryption (size 22) - Mode? 01 Unknown 03 Key (unused?) 62 Length 1008
|
||||
** Block 41 Found Base 354c - Mode? 01 Unknown 7c Key 00 Length 1008
|
||||
|
||||
** Block 58 Found Base 45de - Mode? 01 Unknown 02 Key 15 Length 1d4e
|
||||
|
||||
Block 60 Found Base 635c - Mode? 02 Unknown 3f Key b0 Length 00e6
|
||||
Block 61 Found Base 6448 - Mode? 02 Unknown 3f Key 31 Length 00e6
|
||||
Block 62 Found Base 6534 - Mode? 02 Unknown 3f Key 32 Length 00e6
|
||||
Block 63 Found Base 6620 - Inline Encryption (size 33) - Mode? 02 Unknown 3f Key (unused?) 73 Length 00e6
|
||||
Block 64 Found Base 673f - Mode? 02 Unknown 3f Key 34 Length 00e6
|
||||
Block 65 Found Base 682b - Inline Encryption (size 35) - Mode? 02 Unknown 3f Key (unused?) 75 Length 00e6
|
||||
Block 66 Found Base 694c - Mode? 02 Unknown 3f Key 36 Length 00e6
|
||||
Block 67 Found Base 6a38 - Mode? 02 Unknown 3f Key b7 Length 00e6
|
||||
Block 68 Found Base 6b24 - Mode? 02 Unknown 3f Key 38 Length 00e6
|
||||
Block 69 Found Base 6c10 - Inline Encryption (size 39) - Mode? 02 Unknown 3f Key (unused?) 79 Length 00e6
|
||||
Block 6a Found Base 6d35 - Mode? 02 Unknown 3f Key 3a Length 00e6
|
||||
Block 6b Found Base 6e21 - Mode? 02 Unknown 3f Key bb Length 00e6
|
||||
|
||||
** Block 80 Found Base 6f85 - Mode? 00 Unknown 3f Key 01 Length 02b0
|
||||
|
||||
|
||||
(BRap Boys Special)
|
||||
|
||||
** Block 10 Found Base 0060 - Mode? 01 Unknown 02 Key 04 Length 00d0
|
||||
** Block 11 Found Base 0136 - Inline Encryption (size 13) - Mode? 00 Unknown 3f Key (unused?) 53 Length 00fe
|
||||
** Block 12 Found Base 024d - Mode? 02 Unknown 38 Key 00 Length 0050 | just a shift
|
||||
** Block 13 Found Base 02a3 - Mode? 02 Unknown 6f Key bc Length 09e0 | shift 2 places - (test mode code / data!)
|
||||
** Block 14 Found Base 0c89 - Mode? 03 Unknown 01 Key 31 Length 1880 | just a table
|
||||
** Block 15 Found Base 250f - Mode? 02 Unknown 3f Key 24 Length 03b8 | shift 3 places + table, contains GAME OVER, CONTINUE
|
||||
** Block 16 Found Base 28cd - Mode? 01 Unknown 03 Key 80 Length 018a
|
||||
** Block 17 Found Base 2a5d - Mode? 01 Unknown 1f Key 15 Length 018a
|
||||
** Block 18 Found Base 2bed - Mode? 01 Unknown 44 Key 00 Length 0184 | 4 place shift
|
||||
** Block 19 Found Base 2d77 - Mode? 01 Unknown 03 Key 19 Length 0184 | just a table
|
||||
** Block 1a Found Base 2f01 - Inline Encryption (size 21) - Mode? 02 Unknown 3f Key (unused?) 61 Length 0a24
|
||||
** Block 1b Found Base 394c - Mode? 01 Unknown 5f Key 22 Length 0e02
|
||||
** Block 1c Found Base 4754 - Mode? 01 Unknown 1f Key 3f Length 0e02
|
||||
** Block 1d Found Base 555c - Mode? 01 Unknown 03 Key bf Length 0e02
|
||||
** Block 1e Found Base 6364 - Mode? 01 Unknown 01 Key 24 Length 0e02
|
||||
** Block 1f Found Base 716c - Mode? 02 Unknown 1f Key 39 Length 02ac | 1 place shift + table
|
||||
** Block 20 Found Base 741e - Mode? 03 Unknown 03 Key af Length 01a4
|
||||
** Block 21 Found Base 75c8 - Inline Encryption (size 3d) - Mode? 03 Unknown 2f Key (unused?) 7d Length 01fa
|
||||
** Block 22 Found Base 7805 - Mode? 03 Unknown 1f Key 17 Length 010c | 1 place shift + table
|
||||
** Block 23 Found Base 7917 - Mode? 03 Unknown 03 Key 89 Length 018c | just a table
|
||||
** Block 24 Found Base 7aa9 - Inline Encryption (size 03) - Mode? 03 Unknown 5f Key (unused?) 43 Length 0214
|
||||
** Block 25 Found Base 7cc6 - Inline Encryption (size 1d) - Mode? 03 Unknown 02 Key (unused?) 5d Length 0178
|
||||
** Block 26 Found Base 7e61 - Mode? 03 Unknown 03 Key 05 Length 04e2
|
||||
** Block 27 Found Base 8349 - Mode? 03 Unknown 3f Key a7 Length 00fa
|
||||
** Block 28 Found Base 8449 - Inline Encryption (size 23) - Mode? 03 Unknown 1f Key (unused?) 63 Length 015a
|
||||
** Block 29 Found Base 85cc - Mode? 03 Unknown 03 Key 15 Length 00d6
|
||||
** Block 2a Found Base 86a8 - Mode? 03 Unknown 3f Key a1 Length 00aa
|
||||
** Block 2b Found Base 8758 - Mode? 03 Unknown 2f Key 04 Length 01a2
|
||||
** Block 2c Found Base 8900 - Mode? 03 Unknown 2f Key 04 Length 04cc
|
||||
** Block 2d Found Base 8dd2 - Mode? 03 Unknown 03 Key 15 Length 0486
|
||||
|
||||
|
||||
*/
|
||||
|
||||
UINT16 calc3_mcu_crc;
|
||||
|
||||
@ -732,6 +670,20 @@ static UINT8 calc3_key04[64] = {
|
||||
0x75,0x1c,0x72,0x3a,0x20,0xe1,0xcd,0xac,0x5d,0x8c,0x6d,0xa9,0x66,0x1d,0x41,0xca,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key10[64] = {
|
||||
0xca,0xdd,0x9e,0x00,0x37,0x8e,0x61,0xf3,0x71,0x67,0x02,0x4f,0x5b,0x71,0x50,0xde,
|
||||
0x06,0x25,0xd6,0x2b,0x44,0xbe,0xcd,0xbc,0xf0,0x5e,0xc4,0x11,0xfa,0xe2,0x11,0x5f,
|
||||
0x34,0x85,0xf6,0x0c,0xdf,0x36,0x92,0xe9,0xf3,0xb8,0x8d,0x31,0x30,0x7e,0x81,0x44,
|
||||
0xe8,0x43,0x29,0x22,0x89,0x6c,0x4b,0xa9,0xed,0x1d,0x66,0x8d,0x60,0x1c,0x1b,0x1b,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key11[64] = {
|
||||
0x75,0x98,0x5b,0x53,0x88,0x69,0x54,0x16,0x11,0x0d,0x1c,0x3b,0xae,0xad,0x1a,0xcd,
|
||||
0xed,0x47,0x37,0x56,0xdd,0x51,0xc8,0xa3,0x52,0x9f,0x38,0xc8,0xfb,0x86,0x78,0x64,
|
||||
0x25,0x42,0x27,0x26,0x4b,0x95,0x80,0x90,0x64,0xb1,0x07,0xfb,0xeb,0x58,0xf2,0xdc,
|
||||
0xad,0x42,0x57,0x45,0x56,0xbf,0x19,0xaf,0xb9,0x9d,0x93,0xf6,0xe1,0x4c,0x01,0xa5,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key12[64] = {
|
||||
0xdb,0xc0,0xb2,0x8c,0x40,0x69,0xee,0xf1,0x84,0x04,0xa7,0xe7,0x01,0x35,0xe1,0x8f,
|
||||
0xc1,0x8b,0xe2,0x4c,0x0d,0xda,0x19,0xfd,0xb9,0x5a,0xce,0xfa,0x2c,0x83,0x8d,0xd0,
|
||||
@ -739,6 +691,20 @@ static UINT8 calc3_key12[64] = {
|
||||
0xbf,0x56,0x2f,0x57,0x1a,0x30,0x9d,0xd9,0xe9,0x7e,0x41,0x01,0xf2,0x9d,0xf5,0x72,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key13[64] = {
|
||||
0x43,0x5b,0x9e,0xa2,0xe0,0x3c,0x13,0x3a,0x75,0xa6,0x9c,0x8d,0xed,0x27,0x99,0x4e,
|
||||
0xc0,0xa7,0x6a,0x2f,0x6b,0x04,0x81,0xa4,0x1d,0xf9,0xbb,0xe9,0xb4,0x44,0xf0,0x46,
|
||||
0xe7,0x08,0xc8,0x91,0xc5,0x70,0xd1,0xf5,0x5e,0x95,0xcf,0xf3,0xc0,0xa2,0x53,0xa6,
|
||||
0x25,0x35,0x90,0x4b,0x6a,0x09,0x69,0x00,0xc3,0xd2,0xce,0xcc,0xae,0x69,0x49,0xe0,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key14[64] = {
|
||||
0x25,0x29,0xd4,0x1d,0x18,0x99,0xee,0xd6,0x1a,0x4b,0xee,0xd6,0x5a,0x04,0x96,0xa5,
|
||||
0xd6,0x1c,0xeb,0x07,0xcb,0x28,0x44,0xc6,0x70,0xd7,0xa2,0xb1,0xe3,0x1a,0x3f,0xe5,
|
||||
0x64,0x88,0x6a,0x4b,0xc1,0x00,0x91,0x62,0x11,0x90,0xa0,0x3f,0xa5,0x95,0x89,0xd1,
|
||||
0x3c,0x24,0x24,0x6a,0x76,0xa9,0x3a,0x7b,0x8c,0xce,0xdc,0x9f,0x3d,0x9f,0xfa,0xdc,
|
||||
};
|
||||
|
||||
/* ok - shogwarr */
|
||||
static UINT8 calc3_key15[64] = {
|
||||
0x0C,0xEB,0x30,0x25,0xA8,0xED,0xE3,0x23,0xAC,0x2B,0x8D,0x34,0x88,0x9F,0x55,0xB5,
|
||||
@ -761,7 +727,12 @@ static UINT8 calc3_key16[64] = {
|
||||
0xc4,0xc4,0x98,0x36,0xb3,0x75,0x16,0x33,0xf2,0x45,0x84,0xb8,0xf2,0xdb,0xc7,0x46,
|
||||
};
|
||||
|
||||
|
||||
static UINT8 calc3_key18[64] = {
|
||||
0x58,0x63,0xab,0x0d,0xeb,0x34,0xe1,0xb2,0x6a,0xb0,0xc1,0x4f,0x14,0x6c,0xa0,0xbb,
|
||||
0xf5,0x91,0x10,0x0d,0x5e,0x83,0xf9,0x5b,0x94,0xc0,0xec,0xc7,0xc5,0x0a,0xb3,0xbd,
|
||||
0x40,0xc8,0x2d,0x76,0xe4,0xaa,0x58,0xc1,0xd9,0x8c,0xb0,0x02,0x7f,0x9d,0xb8,0x7b,
|
||||
0xa4,0xc0,0xd6,0xca,0xfa,0x32,0x63,0xb3,0xc8,0x6d,0x03,0x20,0xdf,0x4d,0x32,0x66,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key19[64] = {
|
||||
0x30,0x72,0xe0,0xca,0xa4,0xe5,0x41,0x44,0xd4,0xfe,0xe6,0x82,0x3e,0x85,0x18,0x30,
|
||||
@ -770,6 +741,20 @@ static UINT8 calc3_key16[64] = {
|
||||
0x7f,0x5f,0xa6,0x1b,0x90,0x96,0x19,0x14,0x22,0x81,0x38,0xcd,0x20,0x2f,0x22,0x70,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key1a[64] = {
|
||||
0x74,0x4c,0x04,0xab,0x9a,0x33,0x09,0x39,0xe5,0x39,0xff,0xf5,0x8e,0x64,0xce,0x62,
|
||||
0x81,0xa1,0x98,0x41,0xe7,0x25,0xaf,0xd3,0x71,0x89,0x3a,0xce,0x69,0xa3,0xa5,0x20,
|
||||
0x79,0x24,0xcc,0x65,0x38,0xf6,0xe6,0x29,0x79,0x53,0x33,0xdd,0x53,0xa4,0x64,0x99,
|
||||
0xee,0x1f,0xcc,0x96,0x13,0x1e,0x4a,0x69,0x71,0x40,0xf4,0x00,0xae,0x40,0x84,0x5d,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key1b[64] = {
|
||||
0xcc,0x69,0x7d,0xec,0x48,0x2c,0xca,0x7c,0x76,0x4b,0xb6,0x29,0x61,0xf3,0xbf,0x46,
|
||||
0xa2,0xab,0x65,0x24,0xd3,0xf2,0x3c,0xd8,0x47,0x24,0x41,0x3f,0xf8,0x9e,0x6a,0x40,
|
||||
0xc1,0x22,0x81,0x51,0xce,0x7d,0x31,0x3d,0x50,0x67,0x61,0x24,0x75,0xaa,0xc2,0xc3,
|
||||
0x97,0x87,0xa4,0xf5,0xb3,0x55,0x0e,0x7a,0x1e,0x6b,0x0d,0xf8,0x73,0x40,0x4c,0x3f,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key22[64] = {
|
||||
0xfe,0xf7,0xc7,0x85,0xe4,0xd3,0x93,0xd0,0x36,0x61,0xc8,0x4d,0x0c,0x3e,0x2a,0x1c,
|
||||
0x32,0x1a,0xbf,0x1a,0xb0,0x60,0xb5,0xa8,0x1a,0x19,0x16,0xaf,0x96,0x0d,0x2d,0xe0,
|
||||
@ -784,12 +769,15 @@ static UINT8 calc3_key16[64] = {
|
||||
0x8b,0xca,0xbe,0xe2,0x63,0x85,0x49,0xd3,0xeb,0x83,0x32,0x9a,0x23,0x11,0x4c,0x7e,
|
||||
};
|
||||
|
||||
|
||||
|
||||
static UINT8 calc3_key31[64] = {
|
||||
0x02,0x21,0x0f,0xf2,0x98,0xc6,0xa7,0x51,0xbd,0x50,0xe6,0xc6,0x8d,0x15,0xb4,0xc5,
|
||||
0x18,0x99,0x78,0x45,0xeb,0xe4,0x09,0xfa,0x5c,0xa4,0x51,0x4f,0x98,0x02,0xc0,0x24,
|
||||
0x6d,0x44,0x77,0x4b,0xd7,0x26,0x2f,0xc3,0x4c,0xf8,0xee,0xb1,0xc7,0x76,0x68,0x22,
|
||||
0x94,0x6a,0x35,0x82,0xe0,0x02,0xb7,0xda,0xff,0xf2,0xc7,0xcc,0x7b,0x48,0x25,0x4f,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key32[64] = {
|
||||
0xe0,0xee,0x9d,0xd7,0x49,0x50,0xf9,0xd0,0xa8,0x07,0xa9,0xc1,0xd8,0xf1,0x33,0x07,
|
||||
0x63,0xfe,0x5b,0xc0,0x13,0xda,0x12,0x8e,0x3a,0xcc,0x1e,0x97,0xc1,0xdd,0x8d,0xd1,
|
||||
@ -797,6 +785,13 @@ static UINT8 calc3_key32[64] = {
|
||||
0x1d,0x66,0x44,0x8a,0x9c,0xf7,0xf2,0xc6,0xa7,0x5c,0xae,0xe4,0x83,0xb7,0xd1,0xc2,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key34[64] = {
|
||||
0xd0,0xa8,0x87,0xcf,0xe1,0x22,0x8d,0xe7,0xfa,0x26,0x85,0xce,0x6d,0xfa,0x2c,0x8b,
|
||||
0xbd,0x75,0xfe,0x64,0x2b,0xab,0x25,0xa1,0x02,0xcc,0x1f,0x93,0xa2,0x4a,0x31,0xd5,
|
||||
0x4d,0x3a,0x8e,0xd2,0xb3,0xfd,0x46,0x87,0x3f,0x1f,0xef,0x8a,0x1e,0x7f,0x15,0x4c,
|
||||
0x13,0xb1,0x61,0x9b,0xfc,0xa0,0x8b,0x6b,0x22,0x78,0x00,0xd5,0x44,0xc3,0x52,0x60,
|
||||
};
|
||||
|
||||
// double check it
|
||||
static UINT8 calc3_key36[64] = {
|
||||
0xaf,0x2e,0xd9,0xfd,0x18,0xd1,0xb8,0xc2,0x9b,0x33,0x28,0x30,0x01,0xff,0x1c,0xf4,
|
||||
@ -805,6 +800,13 @@ static UINT8 calc3_key36[64] = {
|
||||
0x37,0x88,0x25,0xa0,0x3b,0xe6,0xfb,0x94,0x2d,0x41,0x59,0xdb,0x44,0x8b,0x0b,0xa3,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key38[64] = {
|
||||
0x7c,0x82,0x91,0x60,0xee,0x5d,0x7a,0x63,0x8a,0x2c,0x91,0xe7,0x94,0x02,0x02,0x42,
|
||||
0x7d,0x8a,0xba,0x09,0x78,0xa6,0x50,0xd6,0xbe,0x55,0xb5,0x49,0xa1,0xda,0x9d,0x4d,
|
||||
0x51,0x1b,0xab,0x9d,0x70,0x47,0x5f,0x86,0x57,0xbb,0xbf,0xee,0x24,0x27,0xc6,0x95,
|
||||
0x8b,0xec,0x90,0x9b,0x58,0xc9,0x42,0x43,0xc6,0xb7,0xba,0xf6,0x82,0x11,0xfa,0x8b,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key39[64] = {
|
||||
0x7d,0xf8,0x54,0xc5,0x74,0xf6,0x54,0x1d,0x40,0xe1,0x71,0xc2,0xdd,0x03,0x72,0xdf,
|
||||
0x3b,0x77,0xa1,0x1c,0xc7,0xd6,0xb1,0x67,0xb7,0x13,0x6f,0xf4,0x18,0xa4,0x2a,0x82,
|
||||
@ -812,6 +814,13 @@ static UINT8 calc3_key36[64] = {
|
||||
0x26,0xf3,0x44,0x94,0xdb,0x15,0x76,0xcc,0x28,0x33,0x2d,0x4b,0x79,0xdb,0x06,0xbc
|
||||
};
|
||||
|
||||
static UINT8 calc3_key3a[64] = {
|
||||
0x39,0xa2,0xb0,0xf7,0x63,0xc6,0xd4,0xc9,0xc9,0x12,0xc2,0xf3,0x26,0x02,0xe0,0x75,
|
||||
0xe4,0x28,0xd2,0x0c,0xad,0xce,0x68,0xf9,0xb3,0xdd,0x4b,0x04,0xbe,0xfd,0x65,0xc1,
|
||||
0xfa,0xfe,0x14,0x12,0x7d,0x77,0x0e,0xed,0x99,0xad,0x11,0x5f,0xe6,0xb6,0x52,0xd1,
|
||||
0x0d,0xde,0xa2,0x8a,0x55,0x49,0x60,0x76,0xee,0xda,0x21,0x26,0x00,0x54,0x20,0x17,
|
||||
};
|
||||
|
||||
static UINT8 calc3_key3f[64] = {
|
||||
0x27,0xb4,0xc1,0xba,0x5f,0xd4,0x47,0x04,0x1f,0xfe,0x42,0xa5,0xce,0xb5,0x23,0xbe,
|
||||
0x42,0xcc,0x59,0x71,0x51,0x13,0x41,0xa4,0x18,0x35,0xcf,0x02,0x0d,0xe1,0xfb,0x43,
|
||||
@ -854,6 +863,27 @@ static UINT8 calc3_key3f[64] = {
|
||||
0x81,0x71,0x09,0xc0,0xf8,0x3c,0x55,0xa6,0x71,0x3c,0xd2,0xda,0xfe,0xf8,0x07,0xbc,
|
||||
};
|
||||
|
||||
static UINT8 calc3_keyb0[64] = {
|
||||
0x33,0x7c,0x08,0x5e,0xb1,0xff,0x68,0x44,0x75,0xc3,0xdf,0x68,0xdf,0x3d,0xba,0x81,
|
||||
0x84,0x76,0x06,0x85,0xb4,0xb1,0x7a,0x6d,0xc9,0x4e,0x27,0x38,0x35,0xee,0xe1,0x32,
|
||||
0x48,0xd8,0x6b,0x76,0xc4,0x9b,0x65,0xb2,0x22,0xf5,0xf6,0x2a,0xa1,0xf4,0x37,0x00,
|
||||
0x12,0x5b,0x65,0xb2,0x65,0x47,0xc5,0xe4,0xf2,0x13,0x55,0x60,0x87,0x78,0x37,0x5b,
|
||||
};
|
||||
|
||||
static UINT8 calc3_keyb7[64] = {
|
||||
0xeb,0xd8,0xb6,0x33,0x90,0xbf,0x13,0x7f,0xd8,0x00,0xce,0xe0,0x48,0x79,0x78,0xd7,
|
||||
0xd7,0x62,0xa3,0xe7,0x7b,0xe8,0xc9,0x54,0x71,0x18,0xff,0x2b,0x4f,0xff,0x5e,0x82,
|
||||
0xca,0x10,0x2c,0x01,0x47,0xc5,0xcc,0xa2,0x22,0x89,0x6b,0xb4,0xc1,0xd6,0x66,0x26,
|
||||
0x56,0x9b,0x7c,0x02,0x77,0xe0,0xb8,0x38,0x5f,0xac,0x1b,0x9d,0x00,0x27,0x0c,0x33,
|
||||
};
|
||||
|
||||
static UINT8 calc3_keybb[64] = {
|
||||
0x65,0x19,0xf5,0x62,0x7a,0x92,0xc5,0x4a,0x55,0xcc,0x2f,0xf8,0x6c,0x79,0x34,0x3d,
|
||||
0xa4,0x9e,0xd3,0xec,0xe4,0x3a,0xf9,0x99,0x5a,0x28,0x2a,0xa0,0x8a,0x46,0xef,0x69,
|
||||
0x1b,0xd7,0xfd,0xeb,0x60,0x26,0x2a,0x6f,0xa7,0x6c,0x0f,0x97,0x44,0xf4,0x7d,0x9e,
|
||||
0x5b,0x7d,0xa0,0xe1,0x70,0xe0,0xf3,0x9f,0xb0,0xf3,0xea,0xfd,0xfc,0xac,0x58,0x4d,
|
||||
};
|
||||
|
||||
static UINT8 calc3_keybc[64] = {
|
||||
0xb8,0x8a,0xa5,0x8f,0x58,0x30,0xb0,0x38,0xa6,0x53,0x84,0x33,0xd4,0xd7,0xbd,0x26,
|
||||
0x45,0x35,0xb7,0xf6,0x1a,0x20,0x7b,0x8d,0x7e,0x68,0x69,0xdb,0xb1,0x1e,0xa5,0x1a,
|
||||
@ -990,7 +1020,8 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
|
||||
|
||||
if (calc3_mode==0x06)
|
||||
{
|
||||
calc3_writeaddress_current = 0x202000;
|
||||
calc3_writeaddress_current = 0x202000; // this is reasoanble for brapboys, not sure about shogun, needs emulating properly!
|
||||
//calc3_writeaddress_current = 0x20c000;
|
||||
}
|
||||
else if (calc3_mode==0x07)
|
||||
{
|
||||
@ -1041,8 +1072,10 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
|
||||
(tabnum==0x1a && isbrap) ||
|
||||
(tabnum==0x21 && isbrap) ||
|
||||
(tabnum==0x24 && isbrap) ||
|
||||
(tabnum==0x28 && isbrap)
|
||||
/*(tabnum==0x40 && !isbrap)*/
|
||||
(tabnum==0x28 && isbrap) ||
|
||||
(tabnum==0x63 && !isbrap) ||
|
||||
(tabnum==0x65 && !isbrap) ||
|
||||
(tabnum==0x69 && !isbrap)
|
||||
)
|
||||
extrasign = 0;
|
||||
|
||||
@ -1108,7 +1141,7 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
|
||||
}
|
||||
}
|
||||
// the above rule doesn't work for this case... hmm ..
|
||||
else if (tabnum==0x40 && !isbrap) // fjbuster / shogun warriors japanese character select (what enables this extra?)
|
||||
else if (tabnum==0x40 && !isbrap)
|
||||
{
|
||||
UINT8 inlinet = rom[inline_table_base + (i%inline_table_size)];
|
||||
dat = rom[offset+i];
|
||||
@ -1159,23 +1192,36 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
|
||||
if (calc3_decryption_key_byte == 0x01) key = calc3_key01;
|
||||
if (calc3_decryption_key_byte == 0x04) key = calc3_key04;
|
||||
if (calc3_decryption_key_byte == 0x05) key = calc3_key05;
|
||||
if (calc3_decryption_key_byte == 0x10) key = calc3_key10;
|
||||
if (calc3_decryption_key_byte == 0x11) key = calc3_key11;
|
||||
if (calc3_decryption_key_byte == 0x12) key = calc3_key12;
|
||||
if (calc3_decryption_key_byte == 0x13) key = calc3_key13;
|
||||
if (calc3_decryption_key_byte == 0x14) key = calc3_key14;
|
||||
if (calc3_decryption_key_byte == 0x15) key = calc3_key15;
|
||||
if (calc3_decryption_key_byte == 0x16) key = calc3_key16;
|
||||
if (calc3_decryption_key_byte == 0x17) key = calc3_key17;
|
||||
if (calc3_decryption_key_byte == 0x18) key = calc3_key18;
|
||||
if (calc3_decryption_key_byte == 0x19) key = calc3_key19;
|
||||
if (calc3_decryption_key_byte == 0x1a) key = calc3_key1a;
|
||||
if (calc3_decryption_key_byte == 0x1b) key = calc3_key1b;
|
||||
if (calc3_decryption_key_byte == 0x22) key = calc3_key22;
|
||||
if (calc3_decryption_key_byte == 0x24) key = calc3_key24;
|
||||
if (calc3_decryption_key_byte == 0x31) key = calc3_key31;
|
||||
if (calc3_decryption_key_byte == 0x32) key = calc3_key32;
|
||||
if (calc3_decryption_key_byte == 0x34) key = calc3_key34;
|
||||
if (calc3_decryption_key_byte == 0x36) key = calc3_key36;
|
||||
if (calc3_decryption_key_byte == 0x38) key = calc3_key38;
|
||||
if (calc3_decryption_key_byte == 0x39) key = calc3_key39;
|
||||
if (calc3_decryption_key_byte == 0x3a) key = calc3_key3a;
|
||||
if (calc3_decryption_key_byte == 0x3f) key = calc3_key3f;
|
||||
if (calc3_decryption_key_byte == 0x80) key = calc3_key80;
|
||||
if (calc3_decryption_key_byte == 0x89) key = calc3_key89;
|
||||
if (calc3_decryption_key_byte == 0xa1) key = calc3_keya1;
|
||||
if (calc3_decryption_key_byte == 0xa7) key = calc3_keya7;
|
||||
if (calc3_decryption_key_byte == 0xaf) key = calc3_keyaf;
|
||||
if (calc3_decryption_key_byte == 0xb0) key = calc3_keyb0;
|
||||
if (calc3_decryption_key_byte == 0xb7) key = calc3_keyb7;
|
||||
if (calc3_decryption_key_byte == 0xbb) key = calc3_keybb;
|
||||
if (calc3_decryption_key_byte == 0xbc) key = calc3_keybc;
|
||||
if (calc3_decryption_key_byte == 0xbf) key = calc3_keybf;
|
||||
|
||||
@ -1202,13 +1248,28 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
|
||||
(tabnum==0x26 && isbrap) ||
|
||||
(tabnum==0x27 && isbrap) ||
|
||||
(tabnum==0x2a && isbrap) ||
|
||||
(tabnum==0x41 &&!isbrap) ||
|
||||
/*(tabnum==0x10 &&!isbrap) ||
|
||||
(tabnum==0x11 &&!isbrap) ||*/
|
||||
|
||||
(tabnum==0x11 &&!isbrap) ||
|
||||
(tabnum==0x19 &&!isbrap) ||
|
||||
(tabnum==0x30 &&!isbrap) || /* double check it */
|
||||
(tabnum==0x31 &&!isbrap) ||
|
||||
(tabnum==0x32 &&!isbrap) ||
|
||||
(tabnum==0x33 &&!isbrap) ||
|
||||
(tabnum==0x34 &&!isbrap) ||
|
||||
(tabnum==0x36 &&!isbrap) ||
|
||||
(tabnum==0x63 &&!isbrap) ||
|
||||
(tabnum==0x66 &&!isbrap)
|
||||
(tabnum==0x38 &&!isbrap) ||
|
||||
(tabnum==0x3a &&!isbrap) ||
|
||||
(tabnum==0x3b &&!isbrap) ||
|
||||
(tabnum==0x41 &&!isbrap) ||
|
||||
(tabnum==0x58 &&!isbrap) ||
|
||||
(tabnum==0x60 &&!isbrap) ||
|
||||
(tabnum==0x62 &&!isbrap) ||
|
||||
(tabnum==0x64 &&!isbrap) ||
|
||||
(tabnum==0x66 &&!isbrap) ||
|
||||
(tabnum==0x67 &&!isbrap) ||
|
||||
(tabnum==0x68 &&!isbrap) ||
|
||||
(tabnum==0x6a &&!isbrap) ||
|
||||
(tabnum==0x6b &&!isbrap)
|
||||
)
|
||||
{
|
||||
dat -= key[i&0x3f];
|
||||
@ -1221,7 +1282,10 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
|
||||
(tabnum==0x29 && isbrap) ||
|
||||
(tabnum==0x2b && isbrap) ||
|
||||
(tabnum==0x2c && isbrap) ||
|
||||
(tabnum==0x2d && isbrap))
|
||||
(tabnum==0x2d && isbrap) ||
|
||||
(tabnum==0x35 && !isbrap) ||
|
||||
(tabnum==0x37 && !isbrap)
|
||||
)
|
||||
{
|
||||
if ((i&1)==0) dat += key[i&0x3f];
|
||||
else dat -= key[i&0x3f];
|
||||
@ -1230,7 +1294,10 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
|
||||
else dat = shift_bits(dat, calc3_shift);
|
||||
}
|
||||
else if ((tabnum==0x1e && isbrap) ||
|
||||
(tabnum==0x80 && !isbrap))
|
||||
(tabnum==0x80 && !isbrap) ||
|
||||
(tabnum==0x39 && !isbrap) ||
|
||||
(tabnum==0x61 && !isbrap)
|
||||
)
|
||||
{
|
||||
// note we've already seen this table, but like many others, it's + instead of - on some bytes..
|
||||
if ((i&1)==1) dat += key[i&0x3f];
|
||||
@ -1242,7 +1309,12 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
|
||||
else if (tabnum==0x12 && isbrap)
|
||||
{
|
||||
// this one doesn't alternate the shifts... 'unknown' is 8
|
||||
dat = BITSWAP8(dat, 4,3,2,1,0,7,6,5);
|
||||
dat = shift_bits(dat, calc3_shift);
|
||||
}
|
||||
else if (tabnum==0x10 && !isbrap)
|
||||
{
|
||||
// nor this one, but shifted the other way
|
||||
dat = shift_bits(dat, 8-calc3_shift);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user