From 666532e4766feabfed716d07cc2bbb97f63c9040 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Fri, 8 Nov 2013 15:45:33 +0000 Subject: [PATCH] pgm cleanups part 1 (nw) --- src/mame/drivers/pgm.c | 12 +++++----- src/mame/includes/pgm.h | 4 +++- src/mame/machine/igs025.c | 27 +++++++++++++--------- src/mame/machine/pgmprot_igs025_igs012.c | 16 +++++++++---- src/mame/machine/pgmprot_igs025_igs022.c | 29 +++++++++++++++++++++--- src/mame/machine/pgmprot_igs025_igs028.c | 7 ++++-- 6 files changed, 68 insertions(+), 27 deletions(-) diff --git a/src/mame/drivers/pgm.c b/src/mame/drivers/pgm.c index cc8bfd5b261..0347508a16f 100644 --- a/src/mame/drivers/pgm.c +++ b/src/mame/drivers/pgm.c @@ -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 */ diff --git a/src/mame/includes/pgm.h b/src/mame/includes/pgm.h index 37bc200105d..ae2c847a128 100644 --- a/src/mame/includes/pgm.h +++ b/src/mame/includes/pgm.h @@ -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 ); diff --git a/src/mame/machine/igs025.c b/src/mame/machine/igs025.c index e614f4d6102..2942a0b5bac 100644 --- a/src/mame/machine/igs025.c +++ b/src/mame/machine/igs025.c @@ -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: diff --git a/src/mame/machine/pgmprot_igs025_igs012.c b/src/mame/machine/pgmprot_igs025_igs012.c index 4d51d5ef088..a2414e324d2 100644 --- a/src/mame/machine/pgmprot_igs025_igs012.c +++ b/src/mame/machine/pgmprot_igs025_igs012.c @@ -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; diff --git a/src/mame/machine/pgmprot_igs025_igs022.c b/src/mame/machine/pgmprot_igs025_igs022.c index 7f69ba38a7d..40041d46753 100644 --- a/src/mame/machine/pgmprot_igs025_igs022.c +++ b/src/mame/machine/pgmprot_igs025_igs022.c @@ -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 diff --git a/src/mame/machine/pgmprot_igs025_igs028.c b/src/mame/machine/pgmprot_igs025_igs028.c index a5e6692feea..55daa959fea 100644 --- a/src/mame/machine/pgmprot_igs025_igs028.c +++ b/src/mame/machine/pgmprot_igs025_igs028.c @@ -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)