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:
Tomasz Slanina 2009-08-30 19:12:57 +00:00
parent 9bde30c59b
commit c7d93414f2
2 changed files with 198 additions and 123 deletions

View File

@ -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(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(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(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(0xa80000, 0xa80001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // Watchdog
AM_RANGE(0xb80000, 0xb80001) AM_READ_PORT("P1") AM_RANGE(0xb80000, 0xb80001) AM_READ_PORT("P1")
AM_RANGE(0xb80002, 0xb80003) AM_READ_PORT("P2") 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_START( shogwarr )
ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "fb030a.u61", 0x000000, 0x020000, CRC(a04106c6) SHA1(95ab084f2e709be7cec2964cb09bcf5a8d3aacdf) ) 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_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */
ROM_LOAD( "fb040a.u33", 0x000000, 0x020000, CRC(4b62c4d9) SHA1(35c943dde70438a411714070e42a84366db5ef83) ) 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( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) )
ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) ) ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) )
ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) ) ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) )
ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) ) ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) )
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, BAD_DUMP CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) // half size?
ROM_LOAD( "fb022b.u6", 0x480000, 0x080000, CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) ROM_LOAD( "fb022b.u6", 0x500000, 0x080000, BAD_DUMP CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) // half size?
ROM_LOAD( "fb023.u7", 0x500000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) ) ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */ ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */
ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom 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_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( "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_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( "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_LOAD( "fb003.u45", 0x080000, 0x080000, CRC(405722e9) SHA1(92e51093d50f74f650ba137f5fc2910e0f85337e) ) // 2 x $40000
ROM_END ROM_END
@ -3414,24 +3417,24 @@ ROM_START( shogwarre )
ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */ ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */
ROM_LOAD( "fb040e.u33", 0x000000, 0x020000, CRC(299d0746) SHA1(67fe3a47ab01fa02ce2bb5836c2041986c19d875) ) 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( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) )
ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) ) ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) )
ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) ) ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) )
ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) ) ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) )
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, BAD_DUMP CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) // half size?
ROM_LOAD( "fb022b.u6", 0x480000, 0x080000, CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) ROM_LOAD( "fb022b.u6", 0x500000, 0x080000, BAD_DUMP CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) // half size?
ROM_LOAD( "fb023.u7", 0x500000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) ) ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */ ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */
ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom 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_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( "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_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( "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_LOAD( "fb003.u45", 0x080000, 0x080000, CRC(405722e9) SHA1(92e51093d50f74f650ba137f5fc2910e0f85337e) ) // 2 x $40000
ROM_END ROM_END
@ -3482,24 +3485,24 @@ ROM_START( fjbuster ) // Fujiyama Buster - Japan version of Shogun Warriors
ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */ ROM_REGION( 0x020000, "cpu1", 0 ) /* MCU Code */
ROM_LOAD( "fb040j.u33", 0x000000, 0x020000, CRC(299d0746) SHA1(67fe3a47ab01fa02ce2bb5836c2041986c19d875) ) 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( "fb-020a.u1", 0x000000, 0x100000, CRC(87e55c6d) SHA1(87886c045d7c30b8dee3c8fb0bf8f2cdbc5fd7fb) )
ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) ) ROM_LOAD( "fb020b.u2", 0x100000, 0x100000, CRC(276b9d7b) SHA1(7a154f65b4737f2b6ac8effa3352711079f571dc) )
ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) ) ROM_LOAD( "fb021a.u3", 0x200000, 0x100000, CRC(7da15d37) SHA1(345cf2242e8210a697294a45197f2b3b974de885) )
ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) ) ROM_LOAD( "fb021b.u4", 0x300000, 0x100000, CRC(6a512d7b) SHA1(7fc3002d23262a9a590a283ea9e111e38d889ef2) )
ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) ROM_LOAD( "fb022a.u5", 0x400000, 0x080000, BAD_DUMP CRC(60aa1282) SHA1(4648816016e00df3256226ba5134f6e5bb429909) ) // half size?
ROM_LOAD( "fb022b.u6", 0x480000, 0x080000, CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) ROM_LOAD( "fb022b.u6", 0x500000, 0x080000, BAD_DUMP CRC(cd05a5c8) SHA1(9f000cca8d31e19fdc4b38c00c3ed13f71e5541c) ) // half size?
ROM_LOAD( "fb023.u7", 0x500000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) ) ROM_LOAD( "fb023.u7", 0x600000, 0x100000, CRC(132794bd) SHA1(bcc73c3183c59a4b66f79d04774773b8a9239501) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */ ROM_REGION( 0x400000, "gfx2", 0 ) /* Tiles (scrambled) */
ROM_LOAD( "fb010.u65", 0x000000, 0x100000, CRC(296ffd92) SHA1(183a28e4594c428deb4726ed22d5166592b94b60) ) // 42 pin mask rom 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_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( "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_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( "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_LOAD( "fb003.u45", 0x080000, 0x080000, CRC(405722e9) SHA1(92e51093d50f74f650ba137f5fc2910e0f85337e) ) // 2 x $40000
ROM_END 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, 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 ) 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, shogwarr, 0, shogwarr, shogwarr, calc3, ROT0, "Kaneko", "Shogun Warriors (US)", GAME_NOT_WORKING )
GAME( 1992, shogwarre,shogwarr, shogwarr, shogwarr, calc3, ROT0, "Kaneko", "Shogun Warriors (Euro)", 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 ) GAME( 1992, fjbuster, shogwarr, shogwarr, shogwarr, calc3, ROT0, "Kaneko", "Fujiyama Buster (Japan)", GAME_NOT_WORKING )

View File

@ -37,7 +37,8 @@ UINT16 *kaneko16_mcu_ram;
- see notes about this "calculator" implementation in drivers\galpanic.c - see notes about this "calculator" implementation in drivers\galpanic.c
- bonkadv only uses Random Number, XY Overlap Collision bit and register '0x02' - bonkadv only uses Random Number, XY Overlap Collision bit and register '0x02'
*/ */
READ16_HANDLER(shogwarr_calc_r);
WRITE16_HANDLER(shogwarr_calc_w);
static struct { static struct {
UINT16 x1p, y1p, x1s, y1s; UINT16 x1p, y1p, x1s, y1s;
@ -123,6 +124,16 @@ WRITE16_HANDLER(galpanib_calc_w)
WRITE16_HANDLER(bloodwar_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) switch (offset)
{ {
// p is position, s is size // p is position, s is size
@ -188,6 +199,14 @@ READ16_HANDLER(bloodwar_calc_r)
UINT16 data = 0; UINT16 data = 0;
INT16 x_coll, y_coll; 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(); x_coll = calc_compute_x();
y_coll = calc_compute_y(); 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 - 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 - 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 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) (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; 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, 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] = { static UINT8 calc3_key12[64] = {
0xdb,0xc0,0xb2,0x8c,0x40,0x69,0xee,0xf1,0x84,0x04,0xa7,0xe7,0x01,0x35,0xe1,0x8f, 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, 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, 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 */ /* ok - shogwarr */
static UINT8 calc3_key15[64] = { static UINT8 calc3_key15[64] = {
0x0C,0xEB,0x30,0x25,0xA8,0xED,0xE3,0x23,0xAC,0x2B,0x8D,0x34,0x88,0x9F,0x55,0xB5, 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, 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] = { static UINT8 calc3_key19[64] = {
0x30,0x72,0xe0,0xca,0xa4,0xe5,0x41,0x44,0xd4,0xfe,0xe6,0x82,0x3e,0x85,0x18,0x30, 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, 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] = { static UINT8 calc3_key22[64] = {
0xfe,0xf7,0xc7,0x85,0xe4,0xd3,0x93,0xd0,0x36,0x61,0xc8,0x4d,0x0c,0x3e,0x2a,0x1c, 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, 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, 0x8b,0xca,0xbe,0xe2,0x63,0x85,0x49,0xd3,0xeb,0x83,0x32,0x9a,0x23,0x11,0x4c,0x7e,
}; };
static UINT8 calc3_key31[64] = { static UINT8 calc3_key31[64] = {
0x02,0x21,0x0f,0xf2,0x98,0xc6,0xa7,0x51,0xbd,0x50,0xe6,0xc6,0x8d,0x15,0xb4,0xc5, 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, 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, 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, 0x94,0x6a,0x35,0x82,0xe0,0x02,0xb7,0xda,0xff,0xf2,0xc7,0xcc,0x7b,0x48,0x25,0x4f,
}; };
static UINT8 calc3_key32[64] = { static UINT8 calc3_key32[64] = {
0xe0,0xee,0x9d,0xd7,0x49,0x50,0xf9,0xd0,0xa8,0x07,0xa9,0xc1,0xd8,0xf1,0x33,0x07, 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, 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, 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 // double check it
static UINT8 calc3_key36[64] = { static UINT8 calc3_key36[64] = {
0xaf,0x2e,0xd9,0xfd,0x18,0xd1,0xb8,0xc2,0x9b,0x33,0x28,0x30,0x01,0xff,0x1c,0xf4, 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, 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] = { static UINT8 calc3_key39[64] = {
0x7d,0xf8,0x54,0xc5,0x74,0xf6,0x54,0x1d,0x40,0xe1,0x71,0xc2,0xdd,0x03,0x72,0xdf, 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, 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 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] = { static UINT8 calc3_key3f[64] = {
0x27,0xb4,0xc1,0xba,0x5f,0xd4,0x47,0x04,0x1f,0xfe,0x42,0xa5,0xce,0xb5,0x23,0xbe, 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, 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, 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] = { static UINT8 calc3_keybc[64] = {
0xb8,0x8a,0xa5,0x8f,0x58,0x30,0xb0,0x38,0xa6,0x53,0x84,0x33,0xd4,0xd7,0xbd,0x26, 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, 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) 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) else if (calc3_mode==0x07)
{ {
@ -1041,8 +1072,10 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
(tabnum==0x1a && isbrap) || (tabnum==0x1a && isbrap) ||
(tabnum==0x21 && isbrap) || (tabnum==0x21 && isbrap) ||
(tabnum==0x24 && isbrap) || (tabnum==0x24 && isbrap) ||
(tabnum==0x28 && isbrap) (tabnum==0x28 && isbrap) ||
/*(tabnum==0x40 && !isbrap)*/ (tabnum==0x63 && !isbrap) ||
(tabnum==0x65 && !isbrap) ||
(tabnum==0x69 && !isbrap)
) )
extrasign = 0; 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 .. // 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)]; UINT8 inlinet = rom[inline_table_base + (i%inline_table_size)];
dat = rom[offset+i]; 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 == 0x01) key = calc3_key01;
if (calc3_decryption_key_byte == 0x04) key = calc3_key04; if (calc3_decryption_key_byte == 0x04) key = calc3_key04;
if (calc3_decryption_key_byte == 0x05) key = calc3_key05; 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 == 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 == 0x15) key = calc3_key15;
if (calc3_decryption_key_byte == 0x16) key = calc3_key16; if (calc3_decryption_key_byte == 0x16) key = calc3_key16;
if (calc3_decryption_key_byte == 0x17) key = calc3_key17; 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 == 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 == 0x22) key = calc3_key22;
if (calc3_decryption_key_byte == 0x24) key = calc3_key24; if (calc3_decryption_key_byte == 0x24) key = calc3_key24;
if (calc3_decryption_key_byte == 0x31) key = calc3_key31; if (calc3_decryption_key_byte == 0x31) key = calc3_key31;
if (calc3_decryption_key_byte == 0x32) key = calc3_key32; 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 == 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 == 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 == 0x3f) key = calc3_key3f;
if (calc3_decryption_key_byte == 0x80) key = calc3_key80; if (calc3_decryption_key_byte == 0x80) key = calc3_key80;
if (calc3_decryption_key_byte == 0x89) key = calc3_key89; if (calc3_decryption_key_byte == 0x89) key = calc3_key89;
if (calc3_decryption_key_byte == 0xa1) key = calc3_keya1; if (calc3_decryption_key_byte == 0xa1) key = calc3_keya1;
if (calc3_decryption_key_byte == 0xa7) key = calc3_keya7; if (calc3_decryption_key_byte == 0xa7) key = calc3_keya7;
if (calc3_decryption_key_byte == 0xaf) key = calc3_keyaf; 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 == 0xbc) key = calc3_keybc;
if (calc3_decryption_key_byte == 0xbf) key = calc3_keybf; 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==0x26 && isbrap) ||
(tabnum==0x27 && isbrap) || (tabnum==0x27 && isbrap) ||
(tabnum==0x2a && 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==0x33 &&!isbrap) ||
(tabnum==0x34 &&!isbrap) ||
(tabnum==0x36 &&!isbrap) || (tabnum==0x36 &&!isbrap) ||
(tabnum==0x63 &&!isbrap) || (tabnum==0x38 &&!isbrap) ||
(tabnum==0x66 &&!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]; dat -= key[i&0x3f];
@ -1221,7 +1282,10 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram,
(tabnum==0x29 && isbrap) || (tabnum==0x29 && isbrap) ||
(tabnum==0x2b && isbrap) || (tabnum==0x2b && isbrap) ||
(tabnum==0x2c && isbrap) || (tabnum==0x2c && isbrap) ||
(tabnum==0x2d && isbrap)) (tabnum==0x2d && isbrap) ||
(tabnum==0x35 && !isbrap) ||
(tabnum==0x37 && !isbrap)
)
{ {
if ((i&1)==0) dat += key[i&0x3f]; if ((i&1)==0) dat += key[i&0x3f];
else 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 dat = shift_bits(dat, calc3_shift);
} }
else if ((tabnum==0x1e && isbrap) || 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.. // 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]; 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) else if (tabnum==0x12 && isbrap)
{ {
// this one doesn't alternate the shifts... 'unknown' is 8 // 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 else
{ {