Fixed sound banking for Shogun Warriors [David Haywood]

This commit is contained in:
Tomasz Slanina 2009-09-01 13:46:27 +00:00
parent 8dd1566a27
commit 2f40f896a4

View File

@ -59,12 +59,13 @@ To Do:
[brapboys / shogwarr] [brapboys / shogwarr]
- Verify collision protection on real hardware - Verify collision protection on real hardware (appears to be a function of the system/memory controller, NOT the MCU)
- currently B.Rap Boys has it's own special case, it should work with the same code as Blood Warriors / Shogun Warriors (and probably SuperNova)
- Figure out how MCU resets writeback address (currently hacked) - Figure out how MCU resets writeback address (currently hacked)
- Find relationship between Key tables and final datablock - Find relationship between Key tables and final datablock
- Clean up debug code file writes etc. (when above are done only!) - Clean up debug code file writes etc. (when above are done only!)
- Interrupt timing? (some sprites flicker) - Interrupt timing? (some sprites flicker)
- Sprite buffering (2 frames?, or related to above) - Sprite buffering (1-2 frames?, or related to above)
Dip locations verified from manual for: Dip locations verified from manual for:
@ -77,7 +78,8 @@ Dip locations verified from manual for:
- gtmr2 - gtmr2
- shogwarr - shogwarr
[general]
- replace sample bank copying with new ADDRESS MAP system for OKI and do banking like CPUs
***************************************************************************/ ***************************************************************************/
@ -3374,20 +3376,16 @@ ROM_START( shogwarr )
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( 0x300000, "samples", 0 ) ROM_REGION( 0x300000, "samples", 0 )
/* OKI 1 */
ROM_LOAD( "fb001e.u43", 0x000000, 0x080000, CRC(f524aaa1) SHA1(006a886f9df2e57c51b61c6cea70a6574fc20304) ) ROM_LOAD( "fb001e.u43", 0x000000, 0x080000, CRC(f524aaa1) SHA1(006a886f9df2e57c51b61c6cea70a6574fc20304) )
ROM_LOAD( "fb000e.u42", 0x080000, 0x080000, CRC(969f1465) SHA1(4f56d1ad341b08f4db41b7ab2498740612ff7c3d) ) ROM_LOAD( "fb000e.u42", 0x080000, 0x080000, CRC(969f1465) SHA1(4f56d1ad341b08f4db41b7ab2498740612ff7c3d) )
/* OKI 2 */
ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) )
ROM_LOAD( "fb-002.u45", 0x200000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) )
/* Sound data is copied here during driver init */ /* Sound data is copied here during driver init */
ROM_REGION( 0x400000*16, "oki1", 0 ) ROM_REGION( 0x400000*16, "oki1", 0 )
ROM_FILL( 0x00000, 0x400000*16, 0x00 ) ROM_FILL( 0x00000, 0x400000*16, 0x00 )
ROM_REGION( 0x400000*16, "oki2", 0 ) ROM_REGION( 0x200000, "oki2", 0 )
ROM_FILL( 0x00000, 0x400000*16, 0x00 ) ROM_LOAD( "fb-002.u45", 0x000000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) )
ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) )
ROM_END ROM_END
/*************************************************************************** /***************************************************************************
@ -3441,20 +3439,16 @@ ROM_START( shogwarre )
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( 0x300000, "samples", 0 ) ROM_REGION( 0x300000, "samples", 0 )
/* OKI 1 */
ROM_LOAD( "fb001e.u43", 0x000000, 0x080000, CRC(f524aaa1) SHA1(006a886f9df2e57c51b61c6cea70a6574fc20304) ) ROM_LOAD( "fb001e.u43", 0x000000, 0x080000, CRC(f524aaa1) SHA1(006a886f9df2e57c51b61c6cea70a6574fc20304) )
ROM_LOAD( "fb000e.u42", 0x080000, 0x080000, CRC(969f1465) SHA1(4f56d1ad341b08f4db41b7ab2498740612ff7c3d) ) ROM_LOAD( "fb000e.u42", 0x080000, 0x080000, CRC(969f1465) SHA1(4f56d1ad341b08f4db41b7ab2498740612ff7c3d) )
/* OKI 2 */
ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) )
ROM_LOAD( "fb-002.u45", 0x200000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) )
/* Sound data is copied here during driver init */ /* Sound data is copied here during driver init */
ROM_REGION( 0x400000*16, "oki1", 0 ) ROM_REGION( 0x400000*16, "oki1", 0 )
ROM_FILL( 0x00000, 0x400000*16, 0x00 ) ROM_FILL( 0x00000, 0x400000*16, 0x00 )
ROM_REGION( 0x400000*16, "oki2", 0 ) ROM_REGION( 0x200000, "oki2", 0 )
ROM_FILL( 0x00000, 0x400000*16, 0x00 ) ROM_LOAD( "fb-002.u45", 0x000000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) )
ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) )
ROM_END ROM_END
/*************************************************************************** /***************************************************************************
@ -3518,20 +3512,16 @@ ROM_START( fjbuster ) // Fujiyama Buster - Japan version of Shogun Warriors
ROM_REGION( 0x300000, "samples", 0 ) ROM_REGION( 0x300000, "samples", 0 )
/* OKI 1 */
ROM_LOAD( "fb000j.u43", 0x000000, 0x080000, CRC(a7522555) SHA1(ea88d90dda20bc309f98a1924c41551e7708e6af) ) ROM_LOAD( "fb000j.u43", 0x000000, 0x080000, CRC(a7522555) SHA1(ea88d90dda20bc309f98a1924c41551e7708e6af) )
ROM_LOAD( "fb001j_u.101", 0x080000, 0x080000, CRC(07d4e8e2) SHA1(0de911f452ddeb54b0b435b9c1cf5d5881175d44) ) ROM_LOAD( "fb001j_u.101", 0x080000, 0x080000, CRC(07d4e8e2) SHA1(0de911f452ddeb54b0b435b9c1cf5d5881175d44) )
/* OKI 2 */
ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) )
ROM_LOAD( "fb-002.u45", 0x200000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) )
/* Sound data is copied here during driver init */ /* Sound data is copied here during driver init */
ROM_REGION( 0x400000*16, "oki1", 0 ) ROM_REGION( 0x400000*16, "oki1", 0 )
ROM_FILL( 0x00000, 0x400000*16, 0x00 ) ROM_FILL( 0x00000, 0x400000*16, 0x00 )
ROM_REGION( 0x400000*16, "oki2", 0 ) ROM_REGION( 0x200000, "oki2", 0 )
ROM_FILL( 0x00000, 0x400000*16, 0x00 ) ROM_LOAD( "fb-002.u45", 0x000000, 0x100000, CRC(010acc17) SHA1(2dc0897c7778eacf6bce12ff0adbadb307ea6c17) )
ROM_LOAD( "fb-003.u44", 0x100000, 0x100000, CRC(0aea4ac5) SHA1(8f3b30e505b0ba51c140a0a2c071680d4fa05db9) )
ROM_END ROM_END
/*************************************************************************** /***************************************************************************
@ -3646,6 +3636,7 @@ Game can be ROM Swapped onto a Shogun Warriors board and works
***************************************************************************/ ***************************************************************************/
ROM_START( brapboys ) /* Single PCB, fully populated, no rom sub board */ ROM_START( brapboys ) /* Single PCB, fully populated, no rom sub board */
ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */ ROM_REGION( 0x040000, "maincpu", 0 ) /* 68000 Code */
ROM_LOAD16_BYTE( "rb-030.u61", 0x000000, 0x020000, CRC(ccbe9a53) SHA1(b96baf0ecbf6550bfaf8e512d9275c53a3928bee) ) ROM_LOAD16_BYTE( "rb-030.u61", 0x000000, 0x020000, CRC(ccbe9a53) SHA1(b96baf0ecbf6550bfaf8e512d9275c53a3928bee) )
@ -3829,8 +3820,7 @@ DRIVER_INIT( calc3 )
DRIVER_INIT_CALL(kaneko16); DRIVER_INIT_CALL(kaneko16);
// MCU is a 78K series III type CPU // MCU is a 78K series III type CPU
} }
static void expand_shogwarr_samples(running_machine* machine)
static DRIVER_INIT( brapboys )
{ {
/* /*
Expand the OKI sample data Expand the OKI sample data
@ -3838,19 +3828,11 @@ static DRIVER_INIT( brapboys )
OKI 1: OKI 1:
Address space 0x00000-0x2ffff is fixed Address space 0x00000-0x2ffff is fixed
Address space 0x30000-0x3ffff is banked (13 banks) Address space 0x30000-0x3ffff is banked (13 banks)
OKI 2:
Address space 0x00000-0x1ffff is fixed
Address space 0x20000-0x3ffff is banked (15 banks)
The current sound device implementation can't handle
the banking dynamically so we have to expand all the bank
combinations here and use use okim6295_set_bank_base().
*/ */
int bank; int bank;
UINT8 *src = memory_region(machine, "samples"); UINT8 *src = memory_region(machine, "samples");
UINT8 *dst1 = memory_region(machine, "oki1"); UINT8 *dst1 = memory_region(machine, "oki1");
UINT8 *dst2 = memory_region(machine, "oki2");
/* OKI 1 */ /* OKI 1 */
for (bank = 0; bank < 13; ++bank) for (bank = 0; bank < 13; ++bank)
@ -3863,6 +3845,21 @@ static DRIVER_INIT( brapboys )
memcpy(dst, src, 0x30000); memcpy(dst, src, 0x30000);
memcpy(dst + 0x30000, srcn, 0x10000); memcpy(dst + 0x30000, srcn, 0x10000);
} }
}
static void expand_brapboys_music(running_machine* machine)
{
/*
Expand the OKI sample data
OKI 2:
Address space 0x00000-0x1ffff is fixed
Address space 0x20000-0x3ffff is banked (15 banks)
*/
int bank;
UINT8 *src = memory_region(machine, "samples");
UINT8 *dst2 = memory_region(machine, "oki2");
/* OKI 2 */ /* OKI 2 */
for (bank = 0; bank < 15; ++bank) for (bank = 0; bank < 15; ++bank)
@ -3878,6 +3875,21 @@ static DRIVER_INIT( brapboys )
DRIVER_INIT_CALL(calc3); DRIVER_INIT_CALL(calc3);
} }
static DRIVER_INIT( shogwarr )
{
expand_shogwarr_samples(machine);
DRIVER_INIT_CALL(calc3);
}
static DRIVER_INIT( brapboys )
{
expand_shogwarr_samples(machine);
// sample banking is different on brap boys for the music, why? GALs / PALs ?
expand_brapboys_music(machine);
DRIVER_INIT_CALL(calc3);
}
/*************************************************************************** /***************************************************************************
@ -3908,10 +3920,7 @@ GAME( 1995, gtmr2u, gtmr2, gtmr2, gtmr2, gtmr2, ROT0, "Kaneko", "Gre
// some functionality of the protection chip still needs investigating on these, but they seem to be playable // some functionality of the protection chip still needs investigating on these, but they seem to be playable
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 )
GAME( 1992, shogwarr, 0, shogwarr, shogwarr, shogwarr, ROT0, "Kaneko", "Shogun Warriors (US)", 0 )
/* Non-working games (mainly due to bad gfx roms) */ GAME( 1992, shogwarre,shogwarr, shogwarr, shogwarr, shogwarr, ROT0, "Kaneko", "Shogun Warriors (World)", 0 )
GAME( 1992, fjbuster, shogwarr, shogwarr, shogwarr, shogwarr, ROT0, "Kaneko", "Fujiyama Buster (Japan)", 0 )
GAME( 1992, shogwarr, 0, shogwarr, shogwarr, brapboys, ROT0, "Kaneko", "Shogun Warriors (US)", GAME_IMPERFECT_SOUND )
GAME( 1992, shogwarre,shogwarr, shogwarr, shogwarr, brapboys, ROT0, "Kaneko", "Shogun Warriors (World)", GAME_IMPERFECT_SOUND )
GAME( 1992, fjbuster, shogwarr, shogwarr, shogwarr, brapboys, ROT0, "Kaneko", "Fujiyama Buster (Japan)", GAME_IMPERFECT_SOUND )