pgm cleanups part 1 (nw)

This commit is contained in:
David Haywood 2013-11-08 15:45:33 +00:00
parent ff14529dd3
commit 666532e476
6 changed files with 68 additions and 27 deletions

View File

@ -4018,15 +4018,15 @@ GAME( 1997, dw2v100x, drgw2, pgm_012_025_drgw2, pgm, pgm_012_025_sta
GAME( 1997, drgw2j, drgw2, pgm_012_025_drgw2, pgm, pgm_012_025_state, drgw2j, ROT0, "IGS", "Chuugokuryuu II (ver. 100J, Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1997, drgw2c, drgw2, pgm_012_025_drgw2, pgm, pgm_012_025_state, drgw2c, ROT0, "IGS", "Zhong Guo Long II (ver. 100C, China)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1998, killbld, pgm, pgm_022_025, killbld, pgm_022_025_state, killbld, ROT0, "IGS", "The Killing Blade (ver. 109, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, killbld104, killbld, pgm_022_025, killbld, pgm_022_025_state, killbld, ROT0, "IGS", "The Killing Blade (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, killbld, pgm, pgm_022_025_killbld, killbld, pgm_022_025_state, killbld, ROT0, "IGS", "The Killing Blade (ver. 109, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, killbld104, killbld, pgm_022_025_killbld, killbld, pgm_022_025_state, killbld, ROT0, "IGS", "The Killing Blade (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
// these seem playable but the DMA mode transfering 68k code to RAM is not emulated so there could still be problems
GAME( 1998, drgw3, pgm, pgm_022_025, dw3, pgm_022_025_state, drgw3, ROT0, "IGS", "Dragon World 3 (ver. 106)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, drgw3105, drgw3, pgm_022_025, dw3, pgm_022_025_state, drgw3, ROT0, "IGS", "Dragon World 3 (ver. 105)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, drgw3100, drgw3, pgm_022_025, dw3j,pgm_022_025_state, drgw3, ROT0, "IGS", "Dragon World 3 (Japan, ver. 100)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // Japan only, has an extra game mode option!
GAME( 1998, drgw3, pgm, pgm_022_025_dw3, dw3, pgm_022_025_state, drgw3, ROT0, "IGS", "Dragon World 3 (ver. 106)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, drgw3105, drgw3, pgm_022_025_dw3, dw3, pgm_022_025_state, drgw3, ROT0, "IGS", "Dragon World 3 (ver. 105)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, drgw3100, drgw3, pgm_022_025_dw3, dw3j,pgm_022_025_state, drgw3, ROT0, "IGS", "Dragon World 3 (Japan, ver. 100)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // Japan only, has an extra game mode option!
GAME( 1998, dwex, pgm, pgm_022_025, dw3, pgm_022_025_state, drgw3, ROT0, "IGS", "Dragon World 3 EX (ver. 100)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1998, dwex, pgm, pgm_022_025_dw3, dw3, pgm_022_025_state, drgw3, ROT0, "IGS", "Dragon World 3 EX (ver. 100)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
// region provided by internal ARM rom
GAME( 1999, photoy2k, pgm, pgm_arm_type1, photoy2k, pgm_arm_type1_state, photoy2k, ROT0, "IGS", "Photo Y2K (ver. 105)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */

View File

@ -405,6 +405,7 @@ public:
DECLARE_DRIVER_INIT(killbld);
DECLARE_DRIVER_INIT(drgw3);
DECLARE_MACHINE_RESET(killbld);
DECLARE_MACHINE_RESET(dw3);
void igs025_to_igs022_callback( void );
@ -532,7 +533,8 @@ MACHINE_CONFIG_EXTERN( pgm_arm_type3 );
/*----------- defined in machine/pgmprot4.c -----------*/
MACHINE_CONFIG_EXTERN( pgm_022_025 );
MACHINE_CONFIG_EXTERN(pgm_022_025_dw3);
MACHINE_CONFIG_EXTERN(pgm_022_025_killbld);
INPUT_PORTS_EXTERN( killbld );
INPUT_PORTS_EXTERN( dw3 );

View File

@ -148,7 +148,7 @@ void igs025_device::killbld_protection_calculate_hilo()
m_kb_prot_hilo_select = 0;
}
source = m_kb_source_data[(ioport(":Region")->read() - m_kb_source_data_offset)][m_kb_prot_hilo_select];
source = m_kb_source_data[m_drgw2_protection_region][m_kb_prot_hilo_select];
if (m_kb_prot_hilo_select & 1)
{
@ -236,7 +236,7 @@ READ16_MEMBER(igs025_device::killbld_igs025_prot_r )
switch (m_kb_ptr)
{
case 1:
return 0x3f00 | ioport(":Region")->read();
return 0x3f00 | ((m_kb_game_id >> 0) & 0xff);
case 2:
return 0x3f00 | ((m_kb_game_id >> 8) & 0xff);
@ -293,7 +293,7 @@ void igs025_device::olds_protection_calculate_hilo() // calculated in routine $1
m_olds_prot_hilo_select = 0;
}
source = olds_source_data[(ioport(":Region")->read())][m_olds_prot_hilo_select];
source = olds_source_data[m_drgw2_protection_region][m_olds_prot_hilo_select];
if (m_olds_prot_hilo_select & 1) // $8178fa
{
@ -372,16 +372,20 @@ READ16_MEMBER(igs025_device::olds_r )
{
switch (m_olds_ptr)
{
case 1: return 0x3f00 | ioport(":Region")->read();
case 1:
return 0x3f00 | ((m_kb_game_id >> 0) & 0xff);
case 2:
return 0x3f00 | 0x00;
return 0x3f00 | ((m_kb_game_id >> 8) & 0xff);
case 3:
return 0x3f00 | 0x90;
return 0x3f00 | ((m_kb_game_id >> 16) & 0xff);
case 4:
return 0x3f00 | 0x00;
return 0x3f00 | ((m_kb_game_id >> 24) & 0xff);
case 5:
default: // >= 5
@ -443,16 +447,17 @@ READ16_MEMBER(igs025_device::drgw2_d80000_protection_r )
{
switch (m_drgw2_ptr)
{
case 1: return 0x3f00 | ((m_drgw2_protection_region >> 0) & 0xff);
case 1:
return 0x3f00 | ((m_kb_game_id >> 0) & 0xff);
case 2:
return 0x3f00 | ((m_drgw2_protection_region >> 8) & 0xff);
return 0x3f00 | ((m_kb_game_id >> 8) & 0xff);
case 3:
return 0x3f00 | ((m_drgw2_protection_region >> 16) & 0xff);
return 0x3f00 | ((m_kb_game_id >> 16) & 0xff);
case 4:
return 0x3f00 | ((m_drgw2_protection_region >> 24) & 0xff);
return 0x3f00 | ((m_kb_game_id >> 24) & 0xff);
case 5:
default:

View File

@ -149,7 +149,9 @@ DRIVER_INIT_MEMBER(pgm_012_025_state,drgw2)
drgw2_common_init();
m_igs025->m_drgw2_protection_region = 0x00000006;
int region = 0x06;
m_igs025->m_drgw2_protection_region = region;
m_igs025->m_kb_game_id = region | (region << 8) | (region << 16) | (region << 24);
mem16[0x131098 / 2] = 0x4e93;
mem16[0x13113e / 2] = 0x4e93;
@ -162,7 +164,9 @@ DRIVER_INIT_MEMBER(pgm_012_025_state,dw2v100x)
drgw2_common_init();
m_igs025->m_drgw2_protection_region = 0x00000006;
int region = 0x06;
m_igs025->m_drgw2_protection_region = region;
m_igs025->m_kb_game_id = region | (region << 8) | (region << 16) | (region << 24);
mem16[0x131084 / 2] = 0x4e93;
mem16[0x13112a / 2] = 0x4e93;
@ -175,7 +179,9 @@ DRIVER_INIT_MEMBER(pgm_012_025_state,drgw2c)
drgw2_common_init();
m_igs025->m_drgw2_protection_region = 0x00000005;
int region = 0x05;
m_igs025->m_drgw2_protection_region = region;
m_igs025->m_kb_game_id = region | (region << 8) | (region << 16) | (region << 24);
mem16[0x1303bc / 2] = 0x4e93;
mem16[0x130462 / 2] = 0x4e93;
@ -188,7 +194,9 @@ DRIVER_INIT_MEMBER(pgm_012_025_state,drgw2j)
drgw2_common_init();
m_igs025->m_drgw2_protection_region = 0x00000001;
int region = 0x01;
m_igs025->m_drgw2_protection_region = region;
m_igs025->m_kb_game_id = region | (region << 8) | (region << 16) | (region << 24);
mem16[0x1302c0 / 2] = 0x4e93;
mem16[0x130366 / 2] = 0x4e93;

View File

@ -312,9 +312,27 @@ static const UINT8 dw3_source_data[0x08][0xec] =
MACHINE_RESET_MEMBER(pgm_022_025_state,killbld)
{
int region = (ioport(":Region")->read()) & 0xff;
m_igs025->m_drgw2_protection_region = region - 0x16;
m_igs025->m_kb_game_id = 0x89911400 | region;
MACHINE_RESET_CALL_MEMBER(pgm);
}
MACHINE_RESET_MEMBER(pgm_022_025_state, dw3)
{
int region = (ioport(":Region")->read()) & 0xff;
m_igs025->m_drgw2_protection_region = region;
m_igs025->m_kb_game_id = 0x00060000 | region;
MACHINE_RESET_CALL_MEMBER(pgm);
}
void pgm_022_025_state::igs025_to_igs022_callback( void )
{
// printf("igs025_to_igs022_callback\n");
@ -333,7 +351,6 @@ DRIVER_INIT_MEMBER(pgm_022_025_state,killbld)
m_igs022->m_sharedprotram = m_sharedprotram;
m_igs025->m_kb_source_data = killbld_source_data;
m_igs025->m_kb_source_data_offset = 0x16;
m_igs025->m_kb_game_id = 0x89911400;
}
DRIVER_INIT_MEMBER(pgm_022_025_state,drgw3)
@ -346,7 +363,6 @@ DRIVER_INIT_MEMBER(pgm_022_025_state,drgw3)
m_igs022->m_sharedprotram = m_sharedprotram;
m_igs025->m_kb_source_data = dw3_source_data;
m_igs025->m_kb_source_data_offset = 0;
m_igs025->m_kb_game_id = 0x00060000;
}
@ -368,7 +384,14 @@ MACHINE_CONFIG_START( pgm_022_025, pgm_022_025_state )
MCFG_DEVICE_ADD("igs022", IGS022, 0)
MCFG_MACHINE_RESET_OVERRIDE(pgm_022_025_state,killbld)
MACHINE_CONFIG_END
MACHINE_CONFIG_DERIVED(pgm_022_025_dw3, pgm_022_025)
MCFG_MACHINE_RESET_OVERRIDE(pgm_022_025_state, dw3)
MACHINE_CONFIG_END
MACHINE_CONFIG_DERIVED(pgm_022_025_killbld, pgm_022_025)
MCFG_MACHINE_RESET_OVERRIDE(pgm_022_025_state, killbld)
MACHINE_CONFIG_END

View File

@ -151,9 +151,12 @@ static const UINT8 olds_source_data[8][0xec] = // table addresses $2951CA
MACHINE_RESET_MEMBER(pgm_028_025_state,olds)
{
int region = (ioport(":Region")->read()) & 0xff;
m_igs025->m_drgw2_protection_region = region;
m_igs025->m_kb_game_id = 0x00900000 | region;
MACHINE_RESET_CALL_MEMBER(pgm);
}
DRIVER_INIT_MEMBER(pgm_028_025_state,olds)