Previous 199869 Revisions Next

r26560 Monday 9th December, 2013 at 07:36:30 UTC by David Haywood
added speedups, marked as working.

NEW WORKING GAME
S.V.G. - Spectral vs Generation (M68k label V100JP) (ARM label V100JP ROM 05/12/05  S.V.G V100) (Japan, JAMMA PCB) [rtw, David Haywood]
[src/mame/drivers]pgm.c
[src/mame/includes]pgm.h
[src/mame/machine]pgmprot_igs027a_type3.c

trunk/src/mame/includes/pgm.h
r26559r26560
318318   required_shared_ptr<UINT32> m_arm_ram;
319319   required_shared_ptr<UINT32> m_arm_ram2;
320320
321   UINT32* m_armrom;
322
321323   optional_device<cpu_device> m_prot;
322324
323325   DECLARE_DRIVER_INIT(theglad);
r26559r26560
502504MACHINE_CONFIG_EXTERN( pgm_arm_type3 );
503505INPUT_PORTS_EXTERN(theglad);
504506INPUT_PORTS_EXTERN(happy6);
507INPUT_PORTS_EXTERN(svg);
505508
506509/*----------- defined in machine/pgmprot4.c -----------*/
507510
trunk/src/mame/drivers/pgm.c
r26559r26560
31993199   ROM_LOAD16_WORD_SWAP( "v101.u6",      0x100000, 0x080000, CRC(f799e866) SHA1(dccc3c903357c40c3cf85ac0ae8fc12fb0f853a6) )
32003200
32013201   ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
3202   ROM_LOAD( "thegladpcb_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP )
3203   ROM_LOAD( "thegladpcb_igs027a_v100_overseas.bin", 0x0188, 0x3e78, CRC(02fe6f52) SHA1(0b0ddf4507856cfc5b7d4ef7e4c5375254c2a024) )
3202   ROM_LOAD( "theglad_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP )
3203   ROM_LOAD( "theglad_igs027a_v100_overseas.bin", 0x0188, 0x3e78, CRC(02fe6f52) SHA1(0b0ddf4507856cfc5b7d4ef7e4c5375254c2a024) )
32043204
32053205   ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data, internal missing) */
32063206   ROM_LOAD( "v107.u26", 0x000000, 0x200000,  CRC(f7c61357) SHA1(52d31c464dfc83c5371b078cb6b73c0d0e0d57e3) )
r26559r26560
32293229   ROM_LOAD16_WORD_SWAP( "u6.rom",       0x100000, 0x080000, CRC(14c85212) SHA1(8d2489708e176a2c460498a13173be01f645b79e) )
32303230
32313231   ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
3232   ROM_LOAD( "thegladpcb_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP )
3233   ROM_LOAD( "thegladpcb_igs027a_older.bin", 0x0188, 0x3e78, BAD_DUMP CRC(02fe6f52) SHA1(0b0ddf4507856cfc5b7d4ef7e4c5375254c2a024) ) // this is wrong for this set, we patch it to work
3232   ROM_LOAD( "theglad_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP )
3233   ROM_LOAD( "theglad_igs027a_older.bin", 0x0188, 0x3e78, BAD_DUMP CRC(02fe6f52) SHA1(0b0ddf4507856cfc5b7d4ef7e4c5375254c2a024) ) // this is wrong for this set, we patch it to work
32343234
32353235   ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data, internal missing) */
32363236   ROM_LOAD( "u2.rom", 0x000000, 0x200000,  CRC(c7bcf2ae) SHA1(10bc012c83987f594d5375a51bc4be2e17568a81) )
r26559r26560
32603260   ROM_LOAD16_WORD_SWAP( "v100.u6",       0x100000, 0x080000, CRC(bcf3b172) SHA1(df7e2808c0341be0a59eefa852c857a3a919223e) )
32613261
32623262   ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
3263   ROM_LOAD( "thegladpcb_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP )
3264   ROM_LOAD( "thegladpcb_igs027a_v100_overseas.bin", 0x0188, 0x3e78, CRC(02fe6f52) SHA1(0b0ddf4507856cfc5b7d4ef7e4c5375254c2a024) )
3263   ROM_LOAD( "theglad_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP )
3264   ROM_LOAD( "theglad_igs027a_v100_overseas.bin", 0x0188, 0x3e78, CRC(02fe6f52) SHA1(0b0ddf4507856cfc5b7d4ef7e4c5375254c2a024) )
32653265
32663266   ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data, internal missing) */
32673267   ROM_LOAD( "v101.u26", 0x000000, 0x200000, CRC(23faec02) SHA1(9065d55c2a14e6889e735a452bbc32530056645a) )
r26559r26560
36143614   ROM_LOAD16_WORD_SWAP( "u30.bin",      0x100000, 0x080000, CRC(34c18f3f) SHA1(42d1edd0dcfaa5e44861c6a1d4cb24f51ba23de8) )
36153615
36163616   ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
3617   ROM_LOAD( "svg_igs027a.bin", 0x000000, 0x04000, NO_DUMP )
3617   ROM_LOAD( "svg_igs027a.bin", 0x000000, 0x04000, NO_DUMP ) // different from PCB version..
36183618
36193619   ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data) */
36203620   ROM_LOAD( "u26.bin", 0x000000, 0x400000, CRC(46826ec8) SHA1(ad1daf6f615fb8d748ce7f98f19dd3bf22f79fba) )
r26559r26560
36463646   ROM_LOAD16_WORD_SWAP( "svg_bios.u49",    0x000000, 0x020000, CRC(3346401f) SHA1(28bd730b6026c1e521c95072d33c7bdcd19c1460) )
36473647   ROM_LOAD16_WORD_SWAP( "svg_v100jp.u50",  0x100000, 0x080000, CRC(8d0405e4) SHA1(b6175c9ffeaac531d28e7845cb34c673476e286a) )
36483648
3649
36503649   ROM_REGION( 0x4000, "prot", 0 ) /* ARM protection ASIC - internal rom */
3651#if 0
3652   /* temp, remove me once combined */
3653   ROM_LOAD16_WORD_SWAP( "page00", 0x00 * 0x9c, 0x9c, CRC(7a7d92b9)   )
3654   ROM_LOAD16_WORD_SWAP( "page01", 0x01 * 0x9c, 0x9c, CRC(7a7d92b9)   )
3655   ROM_LOAD16_WORD_SWAP( "page02", 0x02 * 0x9c, 0x9c, CRC(2e9d4165)   )
3656   ROM_LOAD16_WORD_SWAP( "page03", 0x03 * 0x9c, 0x9c, CRC(b51e0f9c)   )
3657   ROM_LOAD16_WORD_SWAP( "page04", 0x04 * 0x9c, 0x9c, CRC(5ee59414)   )
3658   ROM_LOAD16_WORD_SWAP( "page05", 0x05 * 0x9c, 0x9c, CRC(c0d1ea02)   )
3659   ROM_LOAD16_WORD_SWAP( "page06", 0x06 * 0x9c, 0x9c, CRC(bebe0afa)   )
3660   ROM_LOAD16_WORD_SWAP( "page07", 0x07 * 0x9c, 0x9c, CRC(84e17cdb)   )
3661   ROM_LOAD16_WORD_SWAP( "page08", 0x08 * 0x9c, 0x9c, CRC(6fffa4e8)   )
3662   ROM_LOAD16_WORD_SWAP( "page09", 0x09 * 0x9c, 0x9c, CRC(3800e317)   )
3663   ROM_LOAD16_WORD_SWAP( "page0a", 0x0a * 0x9c, 0x9c, CRC(abd76978)   )
3664   ROM_LOAD16_WORD_SWAP( "page0b", 0x0b * 0x9c, 0x9c, CRC(e6d83c06)   )
3665   ROM_LOAD16_WORD_SWAP( "page0c", 0x0c * 0x9c, 0x9c, CRC(3468e50c)   )
3666   ROM_LOAD16_WORD_SWAP( "page0d", 0x0d * 0x9c, 0x9c, CRC(cebbd3e9)   )
3667   ROM_LOAD16_WORD_SWAP( "page0e", 0x0e * 0x9c, 0x9c, CRC(bdcf150d)   )
3668   ROM_LOAD16_WORD_SWAP( "page0f", 0x0f * 0x9c, 0x9c, CRC(bd4dcbe9)   )
3669
3670   ROM_LOAD16_WORD_SWAP( "page10", 0x10 * 0x9c, 0x9c, CRC(522e4166)   )
3671   ROM_LOAD16_WORD_SWAP( "page11", 0x11 * 0x9c, 0x9c, CRC(04ef2819)   )
3672   ROM_LOAD16_WORD_SWAP( "page12", 0x12 * 0x9c, 0x9c, CRC(2ebbe3b8)   )
3673   ROM_LOAD16_WORD_SWAP( "page13", 0x13 * 0x9c, 0x9c, CRC(084ad6e7)   )
3674   ROM_LOAD16_WORD_SWAP( "page14", 0x14 * 0x9c, 0x9c, CRC(344e4f98)   )
3675   ROM_LOAD16_WORD_SWAP( "page15", 0x15 * 0x9c, 0x9c, CRC(96bfb689)   )
3676   ROM_LOAD16_WORD_SWAP( "page16", 0x16 * 0x9c, 0x9c, CRC(778fd10f)   )
3677   ROM_LOAD16_WORD_SWAP( "page17", 0x17 * 0x9c, 0x9c, CRC(b51062b5)   )
3678   ROM_LOAD16_WORD_SWAP( "page18", 0x18 * 0x9c, 0x9c, CRC(828d598f)   )
3679   ROM_LOAD16_WORD_SWAP( "page19", 0x19 * 0x9c, 0x9c, CRC(93ecea91)   )
3680   ROM_LOAD16_WORD_SWAP( "page1a", 0x1a * 0x9c, 0x9c, CRC(06c3e100)   )
3681   ROM_LOAD16_WORD_SWAP( "page1b", 0x1b * 0x9c, 0x9c, CRC(608dbd52)   )
3682   ROM_LOAD16_WORD_SWAP( "page1c", 0x1c * 0x9c, 0x9c, CRC(c9e0813a)   )
3683   ROM_LOAD16_WORD_SWAP( "page1d", 0x1d * 0x9c, 0x9c, CRC(fff7aa20)   )
3684   ROM_LOAD16_WORD_SWAP( "page1e", 0x1e * 0x9c, 0x9c, CRC(3938c90d)   )
3685   ROM_LOAD16_WORD_SWAP( "page1f", 0x1f * 0x9c, 0x9c, CRC(9341f980)   )
3686
3687   ROM_LOAD16_WORD_SWAP( "page20", 0x20 * 0x9c, 0x9c, CRC(581d1a13)   )
3688   ROM_LOAD16_WORD_SWAP( "page21", 0x21 * 0x9c, 0x9c, CRC(78583484)   )
3689   ROM_LOAD16_WORD_SWAP( "page22", 0x22 * 0x9c, 0x9c, CRC(036ae38e)   )
3690   ROM_LOAD16_WORD_SWAP( "page23", 0x23 * 0x9c, 0x9c, CRC(4f82e8a3)   )
3691   ROM_LOAD16_WORD_SWAP( "page24", 0x24 * 0x9c, 0x9c, CRC(8373fbcb)   )
3692   ROM_LOAD16_WORD_SWAP( "page25", 0x25 * 0x9c, 0x9c, CRC(5ac73b85)   )
3693   ROM_LOAD16_WORD_SWAP( "page26", 0x26 * 0x9c, 0x9c, CRC(5b0aa40e)   )
3694   ROM_LOAD16_WORD_SWAP( "page27", 0x27 * 0x9c, 0x9c, CRC(b27464ea)   )
3695   ROM_LOAD16_WORD_SWAP( "page28", 0x28 * 0x9c, 0x9c, CRC(0e187e08)   )
3696   ROM_LOAD16_WORD_SWAP( "page29", 0x29 * 0x9c, 0x9c, CRC(1f62b715)   )
3697   ROM_LOAD16_WORD_SWAP( "page2a", 0x2a * 0x9c, 0x9c, CRC(aaa49bf9)   )
3698   ROM_LOAD16_WORD_SWAP( "page2b", 0x2b * 0x9c, 0x9c, CRC(231ecd40)   )
3699   ROM_LOAD16_WORD_SWAP( "page2c", 0x2c * 0x9c, 0x9c, CRC(9e4a4677)   )
3700   ROM_LOAD16_WORD_SWAP( "page2d", 0x2d * 0x9c, 0x9c, CRC(f124b6cf)   )
3701   ROM_LOAD16_WORD_SWAP( "page2e", 0x2e * 0x9c, 0x9c, CRC(dbea8517)   )
3702   ROM_LOAD16_WORD_SWAP( "page2f", 0x2f * 0x9c, 0x9c, CRC(df2223ca)   )
3703
3704   ROM_LOAD16_WORD_SWAP( "page30", 0x30 * 0x9c, 0x9c, CRC(da861aab)   )
3705   ROM_LOAD16_WORD_SWAP( "page31", 0x31 * 0x9c, 0x9c, CRC(ac9d70c4)   )
3706   ROM_LOAD16_WORD_SWAP( "page32", 0x32 * 0x9c, 0x9c, CRC(5d2631fa)   )
3707   ROM_LOAD16_WORD_SWAP( "page33", 0x33 * 0x9c, 0x9c, CRC(c3793fd4)   )
3708   ROM_LOAD16_WORD_SWAP( "page34", 0x34 * 0x9c, 0x9c, CRC(ce6df10e)   )
3709   ROM_LOAD16_WORD_SWAP( "page35", 0x35 * 0x9c, 0x9c, CRC(2a0df1c0)   )
3710   ROM_LOAD16_WORD_SWAP( "page36", 0x36 * 0x9c, 0x9c, CRC(13877e3f)   )
3711   ROM_LOAD16_WORD_SWAP( "page37", 0x37 * 0x9c, 0x9c, CRC(d41b8b56)   )
3712   ROM_LOAD16_WORD_SWAP( "page38", 0x38 * 0x9c, 0x9c, CRC(ba3faebb)   )
3713   ROM_LOAD16_WORD_SWAP( "page39", 0x39 * 0x9c, 0x9c, CRC(63f76afb)   )
3714   ROM_LOAD16_WORD_SWAP( "page3a", 0x3a * 0x9c, 0x9c, CRC(669351e3)   )
3715   ROM_LOAD16_WORD_SWAP( "page3b", 0x3b * 0x9c, 0x9c, CRC(0c456d7c)   )
3716   ROM_LOAD16_WORD_SWAP( "page3c", 0x3c * 0x9c, 0x9c, CRC(51312e64)   )
3717   ROM_LOAD16_WORD_SWAP( "page3d", 0x3d * 0x9c, 0x9c, CRC(7d60ca31)   )
3718   ROM_LOAD16_WORD_SWAP( "page3e", 0x3e * 0x9c, 0x9c, CRC(40201a66)   )
3719   ROM_LOAD16_WORD_SWAP( "page3f", 0x3f * 0x9c, 0x9c, CRC(eb1b2ec6)   )
3720
3721   ROM_LOAD16_WORD_SWAP( "page40", 0x40 * 0x9c, 0x9c, CRC(bb3dfff2)   )
3722   ROM_LOAD16_WORD_SWAP( "page41", 0x41 * 0x9c, 0x9c, CRC(c66a4986)   )
3723   ROM_LOAD16_WORD_SWAP( "page42", 0x42 * 0x9c, 0x9c, CRC(19d19cc4)   )
3724   ROM_LOAD16_WORD_SWAP( "page43", 0x43 * 0x9c, 0x9c, CRC(83c788f9)   )
3725   ROM_LOAD16_WORD_SWAP( "page44", 0x44 * 0x9c, 0x9c, CRC(237dfc25)   )
3726   ROM_LOAD16_WORD_SWAP( "page45", 0x45 * 0x9c, 0x9c, CRC(a0d63251)   )
3727   ROM_LOAD16_WORD_SWAP( "page46", 0x46 * 0x9c, 0x9c, CRC(f7ba4453)   )
3728   ROM_LOAD16_WORD_SWAP( "page47", 0x47 * 0x9c, 0x9c, CRC(76f296d2)   )
3729   ROM_LOAD16_WORD_SWAP( "page48", 0x48 * 0x9c, 0x9c, CRC(768f8882)   )
3730   ROM_LOAD16_WORD_SWAP( "page49", 0x49 * 0x9c, 0x9c, CRC(e3cc7b53)   )
3731   ROM_LOAD16_WORD_SWAP( "page4a", 0x4a * 0x9c, 0x9c, CRC(cd422fa9)   )
3732   ROM_LOAD16_WORD_SWAP( "page4b", 0x4b * 0x9c, 0x9c, CRC(4cdc65f8)   )
3733   ROM_LOAD16_WORD_SWAP( "page4c", 0x4c * 0x9c, 0x9c, CRC(3e8073f5)   )
3734   ROM_LOAD16_WORD_SWAP( "page4d", 0x4d * 0x9c, 0x9c, CRC(37e5a5df)   )
3735   ROM_LOAD16_WORD_SWAP( "page4e", 0x4e * 0x9c, 0x9c, CRC(e0d1bca7)   )
3736   ROM_LOAD16_WORD_SWAP( "page4f", 0x4f * 0x9c, 0x9c, CRC(66a2884a)   )
3737
3738   ROM_LOAD16_WORD_SWAP( "page50", 0x50 * 0x9c, 0x9c, CRC(01c4e7dd)   )
3739   ROM_LOAD16_WORD_SWAP( "page51", 0x51 * 0x9c, 0x9c, CRC(d359036c)   )
3740   ROM_LOAD16_WORD_SWAP( "page52", 0x52 * 0x9c, 0x9c, CRC(30ff2cff)   )
3741   ROM_LOAD16_WORD_SWAP( "page53", 0x53 * 0x9c, 0x9c, CRC(9ce7bafe)   )
3742   ROM_LOAD16_WORD_SWAP( "page54", 0x54 * 0x9c, 0x9c, CRC(179d750b)   )
3743   ROM_LOAD16_WORD_SWAP( "page55", 0x55 * 0x9c, 0x9c, CRC(e9c10e9f)   )
3744   ROM_LOAD16_WORD_SWAP( "page56", 0x56 * 0x9c, 0x9c, CRC(6afc9cf1)   )
3745   ROM_LOAD16_WORD_SWAP( "page57", 0x57 * 0x9c, 0x9c, CRC(b2b39a30)   )
3746   ROM_LOAD16_WORD_SWAP( "page58", 0x58 * 0x9c, 0x9c, CRC(41f0cc93)   )
3747   ROM_LOAD16_WORD_SWAP( "page59", 0x59 * 0x9c, 0x9c, CRC(2e917d23)   )
3748   ROM_LOAD16_WORD_SWAP( "page5a", 0x5a * 0x9c, 0x9c, CRC(c1efa6f2)   )
3749   ROM_LOAD16_WORD_SWAP( "page5b", 0x5b * 0x9c, 0x9c, CRC(c2989e24)   )
3750   ROM_LOAD16_WORD_SWAP( "page5c", 0x5c * 0x9c, 0x9c, CRC(fc903fab)   )
3751   ROM_LOAD16_WORD_SWAP( "page5d", 0x5d * 0x9c, 0x9c, CRC(afb51ff4)   )
3752   ROM_LOAD16_WORD_SWAP( "page5e", 0x5e * 0x9c, 0x9c, CRC(85b707d5)   )
3753   ROM_LOAD16_WORD_SWAP( "page5f", 0x5f * 0x9c, 0x9c, CRC(f9dc6148)   )
3754
3755   ROM_LOAD16_WORD_SWAP( "page60", 0x60 * 0x9c, 0x9c, CRC(5db0990b)   )
3756   ROM_LOAD16_WORD_SWAP( "page61", 0x61 * 0x9c, 0x9c, CRC(a02b5fda)   )
3757   ROM_LOAD16_WORD_SWAP( "page62", 0x62 * 0x9c, 0x9c, CRC(3932b150)   )
3758   ROM_LOAD16_WORD_SWAP( "page63", 0x63 * 0x9c, 0x9c, CRC(3932b150)   )
3759   ROM_LOAD16_WORD_SWAP( "page64", 0x64 * 0x9c, 0x9c, CRC(3932b150)   )
3760   ROM_LOAD16_WORD_SWAP( "page65", 0x65 * 0x9c, 0x9c, CRC(3932b150)   )
3761   ROM_LOAD16_WORD_SWAP( "page66", 0x66 * 0x9c, 0x9c, CRC(3932b150)   )
3762   ROM_LOAD16_WORD_SWAP( "page67", 0x67 * 0x9c, 0x9c, CRC(3932b150)   )
3763   ROM_LOAD16_WORD_SWAP( "page68", 0x68 * 0x9c, 0x9c, CRC(3932b150)   )
3764   ROM_LOAD16_WORD_SWAP( "page69", 0x69 * 0x9c, 0x9c, CRC(5aa51eb9)   )
3765   /* temp, remove me once cut off EO area */
3766   ROM_LOAD16_WORD_SWAP( "prot_svgpcb", 0x0000, 0x4000, CRC(1e487985) SHA1(a8f4c946f23d9d8dc7269680d04dfb0582b0b8f2)  )
3767#endif
3768   ROM_LOAD( "svg_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP )
3650   ROM_LOAD( "svgpcb_igs027a_execute_only_area", 0x0000, 0x00188, NO_DUMP )
37693651   ROM_LOAD( "svgcpb_igs027a_v100_japan.bin", 0x0188, 0x3e78, CRC(7a59da5d) SHA1(d67ba465db40ca716b4b901b1c8e762716fb954e) )
37703652
3771
37723653   
37733654   ROM_REGION( 0x800000, "user1", 0 ) /* Protection Data (encrypted external ARM data) */
37743655   ROM_LOAD( "svg_v100jp.u64", 0x000000, 0x400000, CRC(399d4a8b) SHA1(b120e8386a259e6fd7941acf3c33cf288eda616c) )
r26559r26560
42854166GAME( 1999, puzzli2,      pgm,       pgm_arm_type1_sim,  puzzli2, pgm_arm_type1_state,    puzzli2,    ROT0,   "IGS", "Puzzli 2 (ver. 100)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // ROM label is V100 ( V0001, 11/22/99 09:27:58 in program ROM )
42864167GAME( 2001, puzzli2s,     puzzli2,   pgm_arm_type1_sim,  puzzli2, pgm_arm_type1_state,    puzzli2,    ROT0,   "IGS", "Puzzli 2 Super (ver. 200)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )  // ( V200, 12/28/01 12:53:34 in program ROM )
42874168
4288GAME( 2005, killbldp,     pgm,       pgm_arm_type3,     pgm, pgm_arm_type3_state,    killbldp,   ROT0,   "IGS", "The Killing Blade Plus (ver. 300)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* using internal rom from bootleg */
4169GAME( 2005, killbldp,     pgm,       pgm_arm_type3,     pgm, pgm_arm_type3_state,    killbldp,   ROT0,   "IGS", "The Killing Blade Plus (China, ver. 300)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* using internal rom from bootleg */
42894170
42904171// we're using a partial dump of the internal rom (sans the execute only area) with handcrafted startup code..
42914172// all 3 68k roms still have V100 strings, but are clearly different builds, there don't appear to be build string dates in them.  Two of the external ARM roms are marked V100 but are different builds, the single PCB v100 appears to be a later revision than the cart V100 as it shares the internal ROM with the V107 cart version, the v100 cart has a different internal ROM
r26559r26560
42944175// the v100 68k ROM on this is older than the v101 set, this set also uses a different internal ROM to everything else, must be a very early release, maybe pre v100 proto with v100 strings?
42954176GAME( 2003, theglad100,   theglad,   pgm_arm_type3,     theglad, pgm_arm_type3_state,    theglada,   ROT0,   "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 01/16/03 SHEN JIAN)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) /* need correct internal rom of IGS027A - we currently patch the one we have */ // ARM time: 10:39:25
42964177// newer than ARM V100 Cart, older than ARM V101 Cart, same 68k rom as V101 Cart.
4297GAME( 2003, thegladpcb,   theglad,   pgm_arm_type3,     pgm,    pgm_arm_type3_state,    theglad,    ROT0,   "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (Japan, JAMMA PCB)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )// ARM time: 16:32:21
4178GAME( 2003, thegladpcb,   theglad,   pgm_arm_type3,     pgm,    pgm_arm_type3_state,    theglad,    ROT0,   "IGS", "The Gladiator / Road of the Sword / Shen Jian (M68k label V100) (ARM label V100, ROM 02/25/03 SHEN JIAN) (Japan, JAMMA PCB)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )// ARM time: 16:32:21 // PCB version only released in Japan?
42984179
4180GAME( 2005, svgpcb,       svg,       pgm_arm_type3,     svg, pgm_arm_type3_state,    svgpcb,     ROT0,   "IGS / Idea Factory", "S.V.G. - Spectral vs Generation (M68k label V100JP) (ARM label V100JP ROM 05/12/05  S.V.G V100) (Japan, JAMMA PCB)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )// ARM time: 15:31:35 // PCB version only released in Japan?
42994181
43004182/* -----------------------------------------------------------------------------------------------------------------------
43014183   Partially Working, playable, but some imperfections
r26559r26560
43554237
43564238GAME( 2004, happy6,       pgm,       pgm_arm_type3,     happy6, pgm_arm_type3_state,    happy6,     ROT0,   "IGS", "Happy 6-in-1 (ver. 101CN)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */
43574239
4358GAME( 2005, svg,          pgm,       pgm_arm_type3,     pgm, pgm_arm_type3_state,    svg,        ROT0,   "IGS / Idea Factory", "S.V.G. - Spectral vs Generation (M68k label V200) (ARM label V200, ROM 10/11/05 S.V.G V201)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // label was 200, but it's code rev 201? // ARM time: 10:07:20
4359GAME( 2005, svgpcb,       svg,       pgm_arm_type3,     pgm, pgm_arm_type3_state,    svgpcb,     ROT0,   "IGS / Idea Factory", "S.V.G. - Spectral vs Generation (M68k label V100JP) (ARM label V100JP ROM 05/12/05  S.V.G V100) (JAMMA PCB)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // ARM time: 15:31:35
4240GAME( 2005, svg,          pgm,       pgm_arm_type3,     svg, pgm_arm_type3_state,    svg,        ROT0,   "IGS / Idea Factory", "S.V.G. - Spectral vs Generation (M68k label V200) (ARM label V200, ROM 10/11/05 S.V.G V201)", GAME_IMPERFECT_SOUND | GAME_UNEMULATED_PROTECTION | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) /* need internal rom of IGS027A */ // label was 200, but it's code rev 201? // ARM time: 10:07:20
trunk/src/mame/machine/pgmprot_igs027a_type3.c
r26559r26560
88
99 Demon Front (dmnfrnt) *1
1010 The Gladiator (theglad) *2
11 Spectral vs. Generation (svg)
12 Happy 6-in-1 (happy6)
13 The Killing Blade Plus (killbldp) *2
11 Spectral vs. Generation (svg) *2
12 Happy 6-in-1 (happy6) *4
13 The Killing Blade Plus (killbldp) *3
1414
15 None of these work at all, with the following exception.
1615
1716 *1 - We bypass the internal ROM entirely! Game doesn't jump back
1817 *2 - Partial dump of internal ROM is used (currently only dumped from a Japan PCB, patched for other types) The missing code from the EO area is replaced with our own fake code with the same function
19 *2 - Complete dump of IGS027A ROM sourced from a bootleg, looks to be legitimate.
18 *3 - Complete dump of IGS027A ROM sourced from a bootleg, looks to be legitimate.
19 *4 - not yet working
2020
2121 ----
2222
23 These games use a large amount of shared RAM which is banked between CPUs
23 These games use a larger amount of shared RAM which is banked between CPUs compared to previous protection CPUs
2424
25 In most cases the games run almost entirely on the ARM with the 68k just parsing the display lists / feeding inputs to the ARM
26
2527 ----
2628
2729 All of these games have an external ARM rom.
r26559r26560
152154
153155MACHINE_RESET_MEMBER(pgm_arm_type3_state, pgm_arm_type3_reset)
154156{
155   // this is the location of the region in the internal rom, for some reaosn Japan doesn't play attract music (original game feature? bad code flow?)
157   // internal roms aren't fully dumped
156158   UINT16 *temp16 = (UINT16 *)memregion("prot")->base();
157159   int base = -1;
158160
r26559r26560
160162   if (!strcmp(machine().system().name, "theglad100")) base = 0x3316;
161163   if (!strcmp(machine().system().name, "theglad101")) base = 0x3316;
162164   if (!strcmp(machine().system().name, "happy6")) base = 0x3316;
165   if (!strcmp(machine().system().name, "svgpcb")) base = 0x3a8e;
163166
164167   if (base != -1)
165168   {
166169      int regionhack = ioport("RegionHack")->read();
167170      if (regionhack != 0xff)
168171      {
172//         printf("%04x\n", temp16[(base) / 2]);
169173         temp16[(base) / 2] = regionhack; base += 2;
170174      }
171175   }
r26559r26560
190194   MCFG_CPU_PROGRAM_MAP(svg_68k_mem)
191195
192196   /* protection CPU */
193   MCFG_CPU_ADD("prot", ARM7, 33333333)    // 55857G
197   MCFG_CPU_ADD("prot", ARM7, XTAL_33MHz)    // 55857G - 33Mhz Xtal, at least on SVG
194198   MCFG_CPU_PROGRAM_MAP(55857G_arm7_map)
195199
196200   MCFG_MACHINE_RESET_OVERRIDE(pgm_arm_type3_state, pgm_arm_type3_reset)
r26559r26560
251255   return m_arm_ram2[0x00c/4];
252256}
253257
258// installed over rom
254259READ32_MEMBER(pgm_arm_type3_state::svg_speedup_r )
255260{
256261   int pc = space.device().safe_pc();
257   if (pc == 0x7d8) space.device().execute().eat_cycles(500);
258   //else printf("killbldp_speedup_r %08x\n", pc);
259   return m_arm_ram2[0x00c/4];
262   if (pc == 0x9e0) space.device().execute().eat_cycles(500);
263//   else printf("killbldp_speedup_r %08x\n", pc);
264   return m_armrom[0x9e0/4];
260265}
261266
262267
263268void pgm_arm_type3_state::pgm_create_dummy_internal_arm_region_theglad(void)
264269{
265270   UINT16 *temp16 = (UINT16 *)memregion("prot")->base();
266
267271   int i;
268272   for (i=0;i<0x188/2;i+=2)
269273   {
r26559r26560
564568   PORT_CONFSETTING(      0x00ff, "Don't Change" ) // don't hack the region
565569INPUT_PORTS_END
566570
571INPUT_PORTS_START( svg )
572   PORT_INCLUDE ( pgm )
573
574   PORT_START("RegionHack")    /* Region - actually supplied by protection device */
575   PORT_CONFNAME( 0x00ff, 0x00ff, DEF_STR( Region ) )
576   PORT_CONFSETTING(      0x0000, DEF_STR( China ) )
577   PORT_CONFSETTING(      0x0001, DEF_STR( Taiwan ) )
578   PORT_CONFSETTING(      0x0002, DEF_STR( Japan ) )
579   PORT_CONFSETTING(      0x0003, DEF_STR( Korea ) )
580   PORT_CONFSETTING(      0x0004, DEF_STR( Hong_Kong ) )
581   PORT_CONFSETTING(      0x0005, "Spanish Territories" )
582   PORT_CONFSETTING(      0x0006, DEF_STR( World ) )
583   PORT_CONFSETTING(      0x00ff, "Don't Change" ) // don't hack the region
584INPUT_PORTS_END
585
567586DRIVER_INIT_MEMBER(pgm_arm_type3_state,svg)
568587{
569588   svg_basic_init();
r26559r26560
579598   pgm_svgpcb_decrypt(machine());
580599   svg_latch_init();
581600   pgm_create_dummy_internal_arm_region_theglad();
601   m_armrom = (UINT32 *)memregion("prot")->base();
602   machine().device("prot")->memory().space(AS_PROGRAM).install_read_handler(0x9e0, 0x9e3, read32_delegate(FUNC(pgm_arm_type3_state::svg_speedup_r),this));
582603
583//   machine().device("prot")->memory().space(AS_PROGRAM).install_read_handler(0x1000000c, 0x1000000f, read32_delegate(FUNC(pgm_arm_type3_state::svg_speedup_r),this));
584
585604}
586605
587606

Previous 199869 Revisions Next


© 1997-2024 The MAME Team