summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2010-05-10 16:22:44 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2010-05-10 16:22:44 +0000
commitb0945bfa93bbe179e9c668cf698ac5347c4e6937 (patch)
tree730ee513ab867f79125048b8c7e7a5b6149b8fa0 /src
parentf45ce8f2231a57e734bbc5f3f57f558d1fb58113 (diff)
Implemented default EEPROMs for GTIClub, Hang Pilot, Asterix, X-Men and Polygonet Commanders [David Haywood]
Fixed the texture ROM loading/order in Wave Shark. Textures look better now, and the ROM check passes [David Haywood]
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/pgm.c224
-rw-r--r--src/mame/includes/pgm.h2
-rw-r--r--src/mame/machine/pgmcrypt.c58
-rw-r--r--src/mame/mamedriv.c7
4 files changed, 275 insertions, 16 deletions
diff --git a/src/mame/drivers/pgm.c b/src/mame/drivers/pgm.c
index 0ff7f945028..5cf9e2984f8 100644
--- a/src/mame/drivers/pgm.c
+++ b/src/mame/drivers/pgm.c
@@ -1460,6 +1460,20 @@ static MACHINE_DRIVER_START( kov )
MDRV_CPU_PROGRAM_MAP(kovsh_arm7_map)
MACHINE_DRIVER_END
+static MACHINE_DRIVER_START( kov_disabled_arm )
+ MDRV_IMPORT_FROM(pgm)
+
+ MDRV_CPU_MODIFY("maincpu")
+ MDRV_CPU_PROGRAM_MAP(kovsh_mem)
+ MDRV_CPU_VBLANK_INT_HACK(drgw_interrupt,2) // needs an extra IRQ, puzzli2 doesn't want this irq!
+
+ /* protection CPU */
+ MDRV_CPU_ADD("prot", ARM7, 20000000) // 55857E/F/G
+ MDRV_CPU_PROGRAM_MAP(kovsh_arm7_map)
+ MDRV_CPU_FLAGS(CPU_DISABLE)
+MACHINE_DRIVER_END
+
+
static MACHINE_DRIVER_START( kov2 )
MDRV_IMPORT_FROM(pgm)
@@ -1476,6 +1490,7 @@ static MACHINE_DRIVER_START( svg )
MDRV_CPU_MODIFY("maincpu")
MDRV_CPU_PROGRAM_MAP(svg_68k_mem)
+ MDRV_CPU_VBLANK_INT_HACK(drgw_interrupt,2) // needs an extra IRQ, puzzli2 doesn't want this irq!
/* protection CPU */
MDRV_CPU_ADD("prot", ARM7, 20000000) // 55857G
@@ -2077,6 +2092,66 @@ ROM_START( drgw3100 )
ROM_LOAD( "dw3m0400.u1", 0x400000, 0x400000, CRC(031eb9ce) SHA1(0673ec194732becc6648c2ae1396e894aa269f9a) )
ROM_END
+/*
+
+Dragon World EX IGS PGM cart
+
+Top board
+---------
+PCB Number: IGS PCB-0189-1
+8MHz XTAL
+2x 27C040 EPROMs at U12, U13
+27C512 EPROM at U15
+PAL at U17
+2x 6164 SRAM at U1, U4
+MACH211 at U11
+IGS022 at U14
+IGS025 at U16
+16M SOP44 mask ROM at U18
+
+Bottom Board
+------------
+PCB Number: IGS PCB-0178
+2x 16M mask ROMs at U1, U10
+2x 32M mask ROMs at U9, U13
+
+*/
+
+// seems to be an updated version of dw3, most roms are the same, but it's a sequel, not a clone.
+// the non-program roms that differ are actually the same, but in the dw3 sets they're double sized with duplicate data (overdumped, or just different roms used on pcb?)
+ROM_START( dwex )
+ ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
+ PGM_68K_BIOS
+ ROM_LOAD16_BYTE( "ex_v100.u12", 0x100001, 0x080000, CRC(bc171799) SHA1(142329dffbca199f3e748a52146a03e27b36db6a) )
+ ROM_LOAD16_BYTE( "ex_v100.u13", 0x100000, 0x080000, CRC(7afe6322) SHA1(a52d71af1d6de16c5a3df23eacdab3466693ba8d) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x010000, "igs022data", 0 ) /* Protection Data */
+ ROM_LOAD16_WORD_SWAP( "ex_data.u15", 0x000000, 0x010000, CRC(03dc4fdf) SHA1(b329b04325d4f725231b1bb7862eedef2319b652) )
+
+ ROM_REGION( 0xc00000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "ex_t0400.u18", 0x400000, 0x200000, CRC(9ecc950d) SHA1(fd97f43818a3eb18254636166871fa09bd0d6c07) )
+
+ ROM_REGION( 0xc00000/5*8, "gfx2", ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1800000, "gfx3", 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "ex_a0400.u9", 0x0000000, 0x400000, CRC(dd7bfd40) SHA1(fb7ec5bf89a413c5208716083762a725ff63f5db) )
+ ROM_LOAD( "ex_a0401.u10", 0x0400000, 0x200000, CRC(d36c06a4) SHA1(f192e8bfdfbe3d82a49d8f0d3cb0603e39719773) )
+
+ ROM_REGION( 0x1000000, "gfx4", 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "ex_b0400.u13", 0x0000000, 0x400000, CRC(4bb87cc0) SHA1(71b2dc43fd11f7a6dffaba501e4e344b843583d8) )
+
+ ROM_REGION( 0x800000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "ex_m0400.u1", 0x400000, 0x200000, CRC(42d54fd5) SHA1(ad915b514aa6cae6f72dea78e6208f40b08ceac0) )
+ROM_END
+
+
+
+
ROM_START( kov )
ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
PGM_68K_BIOS
@@ -2378,16 +2453,61 @@ ROM_START( kovsh103 )
ROM_LOAD( "m0600.rom", 0x400000, 0x400000, CRC(3ada4fd6) SHA1(4c87adb25d31cbd41f04fbffe31f7bc37173da76) )
ROM_END
+/*
+
+p0701_v105.u2
+
+IGS
+PGM P0701 V105
+1B2687LC
+C994746
+
+*/
ROM_START( photoy2k )
ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
PGM_68K_BIOS
+ ROM_LOAD16_WORD_SWAP( "p0701_v105.u2", 0x100000, 0x200000, CRC(fab142e0) SHA1(8dc7e53b740ed68bac98c0ef7ca4943c517e6f5d) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "igs027a_photoy2k_v100_china.asic", 0x000000, 0x04000, CRC(1a0b68f6) SHA1(290441ed652f54b26ace8f59a26220881fb62084) ) // 3 bytes differ from the read in the other sets. I think this one is GOOD and the other is bad. This always gives the same read, so unless the actual chips is bad... TBC
+
+ ROM_REGION( 0x480000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "t0700.rom", 0x400000, 0x080000, CRC(93943b4d) SHA1(3b439903853727d45d62c781af6073024eb3c5a3) )
+
+ ROM_REGION( 0x480000/5*8, "gfx2", ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x1080000, "gfx3", 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "a0700.l", 0x0000000, 0x0400000, CRC(26a9ae9c) SHA1(c977c89db6fdf47ee260ff687b80375caeab975c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0700.h", 0x0400000, 0x0400000, CRC(79bc1fc1) SHA1(a09472a9b75704c1d31ab828f92c2a5007b2b4ed) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0701.l", 0x0800000, 0x0400000, CRC(23607f81) SHA1(8b6dbcdce9b131370693847ed9771aa04b62711c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "a0701.h", 0x0c00000, 0x0400000, CRC(5f2efd37) SHA1(9a5bd9751691bc085b0751b9fa8ede9eb97b1248) )
+ ROM_LOAD( "a0702.rom", 0x1000000, 0x0080000, CRC(42239e1b) SHA1(2b6d20958abf8a67ce525d5c8964b6d225ccaeda) )
+
+ ROM_REGION( 0x1000000, "gfx4", 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "b0700.l", 0x0000000, 0x0400000, CRC(af096904) SHA1(8e86b36cc44720ece68022e409279bf9144341ba) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "b0700.h", 0x0400000, 0x0400000, CRC(6d53de26) SHA1(f3f93fd2f87adb815834ba0242b94073fbb5e333) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
+ ROM_LOAD( "cgv101.rom", 0x0800000, 0x0020000, CRC(da02ec3e) SHA1(7ee21d748c9b932f53e790a9040167f904fecefc) )
+
+ ROM_REGION( 0x480000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "m0700.rom", 0x400000, 0x080000, CRC(acc7afce) SHA1(ac2d344ebac336f0f363bb045dd8ea4e83d1fb50) )
+ROM_END
+
+
+ROM_START( photoy2k104 )
+ ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
+ PGM_68K_BIOS
ROM_LOAD16_WORD_SWAP( "v104.16m", 0x100000, 0x200000, CRC(e051070f) SHA1(a5a1a8dd7542a30632501af8d02fda07475fd9aa) )
/* CPU2 = Z80, romless, code uploaded by 68k */
ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
- ROM_LOAD( "photoy2k_v100_china.asic", 0x000000, 0x04000, CRC(6dd7f257) SHA1(1984f98a282d8b3264674f231c3b7def1757cf72) )
+ ROM_LOAD( "igs027a_photoy2k_v100_china_alt.asic", 0x000000, 0x04000, CRC(6dd7f257) SHA1(1984f98a282d8b3264674f231c3b7def1757cf72) )
ROM_REGION( 0x480000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
@@ -2396,7 +2516,6 @@ ROM_START( photoy2k )
ROM_REGION( 0x480000/5*8, "gfx2", ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
/* 32x32 Tile Data is put here for easier Decoding */
- /* all roms below need checking to see if they're the same on this board */
ROM_REGION( 0x1080000, "gfx3", 0 ) /* Sprite Colour Data */
ROM_LOAD( "a0700.l", 0x0000000, 0x0400000, CRC(26a9ae9c) SHA1(c977c89db6fdf47ee260ff687b80375caeab975c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
ROM_LOAD( "a0700.h", 0x0400000, 0x0400000, CRC(79bc1fc1) SHA1(a09472a9b75704c1d31ab828f92c2a5007b2b4ed) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
@@ -2455,7 +2574,7 @@ ROM_START( photoy2k102 )
/* CPU2 = Z80, romless, code uploaded by 68k */
ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
- ROM_LOAD( "photoy2k_v100_china.asic", 0x000000, 0x04000, CRC(6dd7f257) SHA1(1984f98a282d8b3264674f231c3b7def1757cf72) )
+ ROM_LOAD( "igs027a_photoy2k_v100_china_alt.asic", 0x000000, 0x04000, CRC(6dd7f257) SHA1(1984f98a282d8b3264674f231c3b7def1757cf72) )
ROM_REGION( 0x480000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
@@ -2464,7 +2583,6 @@ ROM_START( photoy2k102 )
ROM_REGION( 0x480000/5*8, "gfx2", ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
/* 32x32 Tile Data is put here for easier Decoding */
- /* all roms below need checking to see if they're the same on this board */
ROM_REGION( 0x1080000, "gfx3", 0 ) /* Sprite Colour Data */
ROM_LOAD( "a0700.l", 0x0000000, 0x0400000, CRC(26a9ae9c) SHA1(c977c89db6fdf47ee260ff687b80375caeab975c) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
ROM_LOAD( "a0700.h", 0x0400000, 0x0400000, CRC(79bc1fc1) SHA1(a09472a9b75704c1d31ab828f92c2a5007b2b4ed) ) // FIXED BITS (xxxxxxxx1xxxxxxx)
@@ -3252,6 +3370,58 @@ ROM_START( ddp2a )
ROM_LOAD( "m1300.u5", 0x400000, 0x400000, CRC(82d4015d) SHA1(d4cdc1aec1c97cf23ff7a20ccaad822962e66ffa) )
ROM_END
+/*
+
+Dragon World 2001 IGS PGM cart
+
+Top board
+---------
+PCB Number: IGS PCB-0349-01-FL
+22MHz OSC
+2x 27C4096 EPROMs at U12, U22
+1x 27C160 EPROM at U11
+2x PALs at U4, U6
+3x 62256 SRAM at U1, U23, U24
+IGS027A at U7
+
+Bottom Board
+------------
+PCB Number: IGS PCB-0350-00T-FL-A
+4x 27C160 EPROMs at U2, U3, U7, U9
+
+*/
+
+ROM_START( dw2001 )
+ ROM_REGION( 0x600000, "maincpu", 0 ) /* 68000 Code */
+ PGM_68K_BIOS
+ ROM_LOAD16_WORD_SWAP( "2001.u22", 0x100000, 0x80000, CRC(5cabed92) SHA1(d513e353c5c4695b16228e0bda9388c396aa4a81) )
+
+ /* CPU2 = Z80, romless, code uploaded by 68k */
+
+ ROM_REGION( 0x4000, "prot", ROMREGION_ERASEFF ) /* ARM protection ASIC - internal rom */
+ ROM_LOAD( "dw2001_igs027a.bin", 0x000000, 0x04000, NO_DUMP )
+
+ ROM_REGION32_LE( 0x4000000, "user1", ROMREGION_ERASEFF )
+ ROM_LOAD( "2001.u12", 0x000000, 0x80000, CRC(973db1ab) SHA1(cc35e1a8534fa5d59d888f530769bae4e08c62ca) ) // external ARM data rom (encrypted)
+
+ ROM_REGION( 0x600000, "gfx1", 0 ) /* 8x8 Text Tiles + 32x32 BG Tiles */
+ ROM_LOAD( "pgm_t01s.rom", 0x000000, 0x200000, CRC(1a7123a0) SHA1(cc567f577bfbf45427b54d6695b11b74f2578af3) ) // (BIOS)
+ ROM_LOAD( "2001.u11", 0x400000, 0x200000, CRC(1dd8d1e9) SHA1(13dc5d8e541bbd6eef9f477aa288978bccf7ebb3) )
+
+ ROM_REGION( 0x600000/5*8, "gfx2", ROMREGION_ERASEFF ) /* Region for 32x32 BG Tiles */
+ /* 32x32 Tile Data is put here for easier Decoding */
+
+ ROM_REGION( 0x400000, "gfx3", 0 ) /* Sprite Colour Data */
+ ROM_LOAD( "2001.u2", 0x000000, 0x200000, CRC(d11c733c) SHA1(8faad32e8e215631a2263bdd51a9ae434540d028) )
+ ROM_LOAD( "2001.u3", 0x200000, 0x200000, CRC(1435aef2) SHA1(582eb9f6415c89418401be7ebad041adeb600515) )
+
+ ROM_REGION( 0x0200000, "gfx4", 0 ) /* Sprite Masks + Colour Indexes */
+ ROM_LOAD( "2001.u9", 0x000000, 0x200000, CRC(ccbca572) SHA1(4d3512e82cb65e5cdfcc6cb18deec9f4a6dd350a) )
+
+ ROM_REGION( 0x1000000, "ics", 0 ) /* Samples - (8 bit mono 11025Hz) - */
+ ROM_LOAD( "pgm_m01s.rom", 0x000000, 0x200000, CRC(45ae7159) SHA1(d3ed3ff3464557fd0df6b069b2e431528b0ebfa8) ) // (BIOS)
+ ROM_LOAD( "2001.u7", 0x200000, 0x200000, CRC(4ea62f21) SHA1(318f8a1ff5d4ff029a1c4133fe7acc2fc185d112) )
+ROM_END
/*
@@ -3339,6 +3509,7 @@ ROM_START( puzzli2 )
ROM_END
+
/*
Martial Masters
@@ -4732,6 +4903,27 @@ static DRIVER_INIT( puzzli2 )
state_save_register_global_array(machine, state->eoregs);
}
+static DRIVER_INIT( dw2001 )
+{
+ //pgm_state *state = (pgm_state *)machine->driver_data;
+ UINT16 *mem16 = (UINT16 *)memory_region(machine, "maincpu");
+
+ pgm_basic_init(machine);
+ kovsh_latch_init(machine);
+ pgm_dw2001_decrypt(machine);
+
+ mem16[0x11e90c / 2] = 0x4e71;
+ mem16[0x11e90e / 2] = 0x4e71;
+
+ mem16[0x11e91a / 2] = 0x4e71;
+
+ mem16[0x11eaf6 / 2] = 0x4e71;
+ mem16[0x11eaf8 / 2] = 0x4e71;
+
+ mem16[0x11eb04 / 2] = 0x4e71;
+
+}
+
static UINT32 olds_prot_addr( UINT16 addr )
{
UINT32 mode = addr & 0xff;
@@ -4945,7 +5137,8 @@ GAME( 1997, drgw2, pgm, drgw2, pgm, drgw2, ROT0, "IGS
GAME( 1997, drgw2j, drgw2, drgw2, pgm, drgw2j, ROT0, "IGS", "Chuugokuryuu II (ver. 100J, Japan)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // This set still has protection issues!
GAME( 1997, drgw2c, drgw2, drgw2, pgm, drgw2c, ROT0, "IGS", "Zhong Guo Long II (ver. 100C, China)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
-GAME( 1999, photoy2k, pgm, kov, photoy2k, djlzz, ROT0, "IGS", "Photo Y2K (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
+GAME( 1999, photoy2k, pgm, kov, photoy2k, djlzz, ROT0, "IGS", "Photo Y2K (ver. 105)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
+GAME( 1999, photoy2k104, photoy2k, kov, photoy2k, djlzz, ROT0, "IGS", "Photo Y2K (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1999, photoy2k102, photoy2k, kov, photoy2k, djlzz, ROT0, "IGS", "Photo Y2K (ver. 102, Japanese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* region provided by protection device */
GAME( 1999, kovsh, pgm, kov, sango, kovsh, ROT0, "IGS", "Knights of Valour Super Heroes / Sangoku Senki Super Heroes (ver. 104, CN)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // 68k V104, China internal ROM
@@ -4965,7 +5158,7 @@ GAME( 2001, martmastc102, martmast, kov2, sango, martmast, ROT0, "IGS
Partially Working, playable, but some imperfections
-----------------------------------------------------------------------------------------------------------------------*/
- // it's playable, but one of the protection checks is still patched
+ // it's playable, but the region check is still patched (different IGS025 chips return different sequences so that the game can determine the region)
GAME( 1998, killbld, pgm, killbld, killbld, killbld, ROT0, "IGS", "The Killing Blade (ver. 109, Chinese Board)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1998, killbld104, killbld, killbld, killbld, killbld, ROT0, "IGS", "The Killing Blade (ver. 104)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
@@ -4982,14 +5175,17 @@ GAME( 1998, drgw3, pgm, dw3, dw3, drgw3, ROT0, "IGS
GAME( 1998, drgw3105, drgw3, dw3, dw3, drgw3, ROT0, "IGS", "Dragon World 3 (ver. 105)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 1998, drgw3100, drgw3, dw3, dw3, drgw3, ROT0, "IGS", "Dragon World 3 (ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // Japan Only?
-GAME( 1999, kov, pgm, kov, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 117)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // V0008 04/27/99 10:33:33
-GAME( 1999, kov115, kov, kov, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 115)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // V0006 02/22/99 11:53:18
-GAME( 1999, kov100, kov, kov, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 100, Japanese Board)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // V0002 01/31/99 01:54:16
+GAME( 1998, dwex, pgm, dw3, dw3, drgw3, ROT0, "IGS", "Dragon World 3 EX (ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
-GAME( 1999, kovplus, pgm, kov, sango, kov, ROT0, "IGS", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
-GAME( 1999, kovplusa, kovplus, kov, sango, kov, ROT0, "IGS", "Knights of Valour Plus / Sangoku Senki Plus (alt ver. 119)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
-GAME( 1999, puzlstar, pgm, kov, sango, pstar, ROT0, "IGS", "Puzzle Star (ver. 100MG)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
+GAME( 1999, kov, pgm, kov_disabled_arm, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 117)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // V0008 04/27/99 10:33:33
+GAME( 1999, kov115, kov, kov_disabled_arm, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 115)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // V0006 02/22/99 11:53:18
+GAME( 1999, kov100, kov, kov_disabled_arm, sango, kov, ROT0, "IGS", "Knights of Valour / Sangoku Senki (ver. 100, Japanese Board)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // V0002 01/31/99 01:54:16
+
+GAME( 1999, kovplus, pgm, kov_disabled_arm, sango, kov, ROT0, "IGS", "Knights of Valour Plus / Sangoku Senki Plus (ver. 119)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
+GAME( 1999, kovplusa, kovplus, kov_disabled_arm, sango, kov, ROT0, "IGS", "Knights of Valour Plus / Sangoku Senki Plus (alt ver. 119)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
+
+GAME( 1999, puzlstar, pgm, kov_disabled_arm, sango, pstar, ROT0, "IGS", "Puzzle Star (ver. 100MG)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
GAME( 2001, kov2p, pgm, kov2, sango, kov2p, ROT0, "IGS", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M204XX)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
GAME( 2001, kov2p205, kov2p, kov2, sango, kov2p, ROT0, "IGS", "Knights of Valour 2 Plus - Nine Dragons / Sangoku Senki 2 Plus - Nine Dragons (ver. M205XX)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
@@ -4997,7 +5193,9 @@ GAME( 2001, kov2p205, kov2p, kov2, sango, kov2p, ROT0, "IGS
GAME( 2001, ddp2, pgm, kov2, ddp2, ddp2, ROT270, "IGS", "Bee Storm - DoDonPachi II (ver. 100)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
GAME( 2001, ddp2a, ddp2, kov2, ddp2, ddp2, ROT270, "IGS", "Bee Storm - DoDonPachi II (ver. 102)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
-GAME( 2001, puzzli2, pgm, kov, sango, puzzli2, ROT0, "IGS", "Puzzli 2 Super (ver. 200)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
+GAME( 2001, dw2001, pgm, kov_disabled_arm, sango, dw2001, ROT0, "IGS", "Dragon World 2001", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) // V0000 02/21/01 16:05:16
+
+GAME( 2001, puzzli2, pgm, kov_disabled_arm, sango, puzzli2, ROT0, "IGS", "Puzzli 2 Super (ver. 200)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 2002, dmnfrnt, pgm, svg, sango, dmnfrnt, ROT0, "IGS", "Demon Front (ver. 102)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
GAME( 2002, dmnfrnta, dmnfrnt, svg, sango, dmnfrnt, ROT0, "IGS", "Demon Front (ver. 105)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
diff --git a/src/mame/includes/pgm.h b/src/mame/includes/pgm.h
index c238d6a487d..932502f7543 100644
--- a/src/mame/includes/pgm.h
+++ b/src/mame/includes/pgm.h
@@ -92,7 +92,7 @@ void pgm_oldsplus_decrypt(running_machine *machine);
void pgm_kovshp_decrypt(running_machine *machine);
void pgm_killbldp_decrypt(running_machine *machine);
void pgm_svg_decrypt(running_machine *machine);
-
+void pgm_dw2001_decrypt(running_machine *machine);
/*----------- defined in machine/pgmprot.c -----------*/
diff --git a/src/mame/machine/pgmcrypt.c b/src/mame/machine/pgmcrypt.c
index bc7d576ce1a..1f77a60486c 100644
--- a/src/mame/machine/pgmcrypt.c
+++ b/src/mame/machine/pgmcrypt.c
@@ -945,3 +945,61 @@ void pgm_svg_decrypt(running_machine *machine)
src[i] = x;
}
}
+
+/* not 100% correct */
+static const UINT8 dw2001_tab[256] = {
+ 0xd0,0x45,0xbc,0x84,0x93,0x60,0x7d,0x49,0x68,0xb1,0x54,0xa2,0x05,0x29,0x41,0x20,
+ 0x04,0x08,0x52,0x25,0x89,0xf4,0x69,0x9f,0x24,0x46,0x3d,0xf1,0xf9,0xab,0xa6,0x2d,
+ 0x18,0x19,0x6d,0x33,0x79,0x23,0x3b,0x1d,0xe0,0xb8,0x61,0x1a,0xe1,0x4c,0x5d,0x3f,
+ 0x5e,0x02,0xe3,0x4d,0x9e,0X80,0x28,0x50,0xa0,0x81,0xe4,0xa5,0x97,0xa1,0x86,0x36,
+ 0x1e,0xed,0x16,0x8a,0x44,0x06,0x64,0x12,0x9a,0x7e,0xce,0x9b,0xef,0xf7,0x3e,0xf8,
+ 0x15,0x07,0xcb,0x6f,0x8e,0x3c,0x82,0x70,0x62,0x8d,0x66,0x7a,0x4e,0xd3,0xb6,0x6a,
+ 0x51,0xa7,0x2c,0xc7,0xa4,0x0b,0xb5,0xe5,0x88,0xbd,0x5a,0x5b,0x1b,0xae,0xe6,0X5F,
+ 0x2e,0x92,0x8c,0xb7,0x96,0xba,0x99,0xbb,0xbe,0x0e,0xbf,0xe7,0x2f,0xe9,0x30,0x37,
+ 0x98,0xac,0x4a,0x94,0x38,0xf3,0x39,0xb2,0x55,0x72,0x7b,0xee,0xdd,0x6e,0x11,0xd5,
+ 0x26,0xa8,0x71,0xd6,0x74,0x7f,0x13,0xc2,0x56,0xea,0xa9,0xaf,0XC3,0x42,0x03,0xb3,
+ 0xc4,0x6b,0x47,0xf0,0x31,0xf5,0xaa,0x58,0x8f,0x48,0x75,0x95,0x35,0x8b,0x57,0x3a,
+ 0x73,0x0c,0x59,0xd8,0x14,0x65,0xd7,0x00,0xfa,0xdc,0x34,0xde,0xc0,0xb0,0x87,0xc1,
+ 0xc8,0xcd,0xd4,0x2a,0xda,0xe8,0xd2,0x83,0x0d,0xca,0xf2,0x0f,0xeb,0xec,0x9c,0x1f,
+ 0xad,0x22,0xd1,0x4b,0x5c,0xf6,0x17,0xc5,0x67,0x9d,0xfb,0xc9,0xcc,0x32,0x1c,0xb4,
+ 0xd9,0xe2,0xcf,0x90,0xb9,0x2b,0x61,0xc6,0x76,0x21,0x77,0x27,0xfc,0xfd,0x0a,0x09,
+ 0x7c,0x01,0x43,0xdb,0x53,0x87,0xfe,0x78,0x91,0x40,0xa3,0xdf,0x4f,0xff,0x10,0x6c,
+};
+
+void pgm_dw2001_decrypt(running_machine *machine)
+{
+ int i;
+ UINT16 *src = (UINT16 *)(memory_region(machine, "user1"));
+
+ int rom_size = 0x200000;
+
+ for(i=0; i<rom_size/2; i++) {
+ UINT16 x = src[i];
+
+ if((i & 0x000480) != 0x00080)
+ x^=0x0001;
+
+ if((i & 0x004008) == 0x004008)
+ x^=0x0002;
+
+ if((i & 0x000030) == 0x000010)
+ x^=0x0004;
+
+ if((i & 0x000242) != 0x000042)
+ x^=0x0008;
+
+ if((i & 0x02004) != 0x00004)
+ x^=0x0020;
+
+ if((i & 0x11800) != 0x10000)
+ x^=0x0040;
+
+ if((i & 0x00820) == 0x00820)
+ x^=0x0080;
+
+ x ^= dw2001_tab[(i >> 1) & 0xff] << 8;
+
+ src[i] = x;
+ }
+}
+
diff --git a/src/mame/mamedriv.c b/src/mame/mamedriv.c
index 967236701a7..4f49428e27c 100644
--- a/src/mame/mamedriv.c
+++ b/src/mame/mamedriv.c
@@ -8398,6 +8398,9 @@ Other Sun games
DRIVER( drgw3 ) /* (c) 1998 */
DRIVER( drgw3105 ) /* (c) 1998 */
DRIVER( drgw3100 ) /* (c) 1998 */
+ DRIVER( dwex ) /* (c) 1998 */
+ DRIVER( killbld ) /* (c) 1998 */
+ DRIVER( killbld104 ) /* (c) 1998 */
DRIVER( kov ) /* (c) 1999 */
DRIVER( kovplus ) /* (c) 1999 */
DRIVER( kovplusa ) /* (c) 1999 */
@@ -8407,8 +8410,7 @@ Other Sun games
DRIVER( kovsh103 ) /* (c) 1999 */
DRIVER( photoy2k ) /* (c) 1999 */
DRIVER( photoy2k102 ) /* (c) 1999 */
- DRIVER( killbld ) /* (c) 1998 */
- DRIVER( killbld104 ) /* (c) 1998 */
+ DRIVER( photoy2k104 ) /* (c) 1999 */
DRIVER( puzlstar ) /* (c) 1999 */
DRIVER( olds ) /* (c) 1999 */
DRIVER( olds100 ) /* (c) 1999 */
@@ -8428,6 +8430,7 @@ Other Sun games
DRIVER( martmastc102 ) /* (c) 2001 */
DRIVER( theglad ) /* (c) 2001 */
DRIVER( theglada ) /* (c) 2001 */
+ DRIVER( dw2001 ) /* (c) 2001 */
DRIVER( dmnfrnt ) /* (c) 2002 */
DRIVER( dmnfrnta ) /* (c) 2002 */
DRIVER( kovshp )