From d49a0062f888e9f9091f1d9a24d86563c18fe27b Mon Sep 17 00:00:00 2001 From: "R. Belmont" Date: Thu, 20 Aug 2009 18:25:42 +0000 Subject: [PATCH] Naomi update [R. Belmont, Deunan Knute, Alex, Mr. Mudkips, Frank Bukor] - Use new dump for ic31/32, ROM board test passes now - Add protection hookup for Marvel vs. Capcom 2, game is playable w/sound I'm not removing GAME_NOT_WORKING because I don't trust the Naomi emulation in general that much yet, although I was able to coin up and play (slowly ;-) Dump is uploading. --- src/mame/drivers/naomi.c | 52 ++++++++++++++++----------------- src/mame/machine/naomibd.c | 59 ++++++++++++++++++++++++++------------ 2 files changed, 66 insertions(+), 45 deletions(-) diff --git a/src/mame/drivers/naomi.c b/src/mame/drivers/naomi.c index 90897b7f00e..6bb3c9d5a3c 100644 --- a/src/mame/drivers/naomi.c +++ b/src/mame/drivers/naomi.c @@ -2910,39 +2910,39 @@ EXP: MARVEL VS. CAPCOM 2 Note: the following game is one of the few known regular Naomi game to have a rom test item in its specific test mode menu. So the Naomi regular board test item is unreliable in this circumstance. -protection notes: -CPU 'maincpu' (PC=0C001014): unmapped program memory qword write to 0231FCF8 = 00000000E2534910 & 00000000FFFFFFFF -CPU 'maincpu': warning - attempt to direct-map address 02534910 in program space -CPU 'maincpu' (PC=02534910): unmapped program memory qword read from 02534910 & 000000000000FFFF -CPU 'maincpu': warning - attempt to direct-map address 02534912 in program space -CPU 'maincpu' (PC=02534912): unmapped program memory qword read from 02534910 & 00000000FFFF0000 -CPU 'maincpu': warning - attempt to direct-map address 02534914 in program space */ - ROM_START( mvsc2 ) ROM_REGION( 0x200000, "maincpu", 0) NAOMI_BIOS - ROM_REGION( 0x8800000, "user1", ROMREGION_ERASEFF) - ROM_LOAD("epr-23085a.ic11", 0x0000000, 0x0400000, CRC(5d5b7ad1) SHA1(f58c31b245fc33fa541f9f074548402a63f7c3d3) ) //ic 22 + ROM_REGION( 0x8900000, "user1", ROMREGION_ERASEFF) + ROM_LOAD("epr-23085a.ic11", 0x0000000, 0x0400000, CRC(5d5b7ad1) SHA1(f58c31b245fc33fa541f9f074548402a63f7c3d3) ) ROM_RELOAD( 0x400000, 0x400000) - ROM_LOAD("mpr-23048.ic17", 0x0800000, 0x0800000, CRC(93d7a63a) SHA1(c50d10b4a3f9db51eae5749f5b665d7c8ab6c898) ) //ic 1 - ROM_LOAD("mpr-23049.ic18", 0x1000000, 0x0800000, CRC(003dcce0) SHA1(fb71c8ca9271d2155878c72d8fe2df3031e6c014) ) //ic 2 - ROM_LOAD("mpr-23050.ic19", 0x1800000, 0x0800000, CRC(1d6b88a7) SHA1(ba42e9d1d912d88a7ad839b878975ba590634320) ) //ic 3 - ROM_LOAD("mpr-23051.ic20", 0x2000000, 0x0800000, CRC(01226aaa) SHA1(a4c6a0eda05e53d0e51b92a4317a86a708a7efdb) ) //ic 4 - ROM_LOAD("mpr-23052.ic21", 0x2800000, 0x0800000, CRC(74bee120) SHA1(5a0fb48fa758a2be2e08e3b1298103c5aa748835) ) //ic 5 - ROM_LOAD("mpr-23053.ic22", 0x3000000, 0x0800000, CRC(d92d4401) SHA1(a868780f8d2e176ff10781e1c08bf932f34ac504) ) //ic 6 - ROM_LOAD("mpr-23054.ic23", 0x3800000, 0x0800000, CRC(78ba02e8) SHA1(0f696a33e1e6671001efc309ed62f084a246ad24) ) //ic 7 - ROM_LOAD("mpr-23055.ic24", 0x4000000, 0x0800000, CRC(84319604) SHA1(c3dde162e043a54e1325202b46191b32e8784a1c) ) //ic 8 - ROM_LOAD("mpr-23056.ic25", 0x4800000, 0x0800000, CRC(d7386034) SHA1(be1f3ca5f283e428dc59dc072de3e7d36e122d53) ) //ic 9 - ROM_LOAD("mpr-23057.ic26", 0x5000000, 0x0800000, CRC(a3f087db) SHA1(b52d7c072cb5c2fdd10d0ac0b62cebe48b229ae3) ) //ic 10 - ROM_LOAD("mpr-23058.ic27", 0x5800000, 0x0800000, CRC(61a6cc5d) SHA1(34e52cb076888313a80f2b87876b8d37b91d85a0) ) //ic 11 - ROM_LOAD("mpr-23059.ic28", 0x6000000, 0x0800000, CRC(64808024) SHA1(1a6c60c330642b273978d3dd02d95d17d36ee3f2) ) //ic 12 - ROM_LOAD("mpr-23060.ic29", 0x6800000, 0x0800000, CRC(67519942) SHA1(fc758d9075625f8140d5d828c8f6b7a91bcc9119) ) //ic 13 - ROM_LOAD("mpr-23061.ic30", 0x7000000, 0x0800000, CRC(fb1844c4) SHA1(1d1571516a6dbed0c4ded3b80efde9cc9281f66f) ) //ic 14 - ROM_LOAD32_WORD("mpr-23083.ic31", 0x8000000, 0x0400000, CRC(c61d2dfe) SHA1(a05fb979ed7c8040de91716fc8814e6bd995efa2) ) //ic 15 - ROM_LOAD32_WORD("mpr-23084.ic32", 0x8000002, 0x0400000, CRC(4ebbbdd9) SHA1(9ad8c1a644850de6e35705318cd1991e1d6e60a8) ) //ic 16 + ROM_LOAD("mpr-23048.ic17", 0x0800000, 0x0800000, CRC(93d7a63a) SHA1(c50d10b4a3f9db51eae5749f5b665d7c8ab6c898) ) + ROM_LOAD("mpr-23049.ic18", 0x1000000, 0x0800000, CRC(003dcce0) SHA1(fb71c8ca9271d2155878c72d8fe2df3031e6c014) ) + ROM_LOAD("mpr-23050.ic19", 0x1800000, 0x0800000, CRC(1d6b88a7) SHA1(ba42e9d1d912d88a7ad839b878975ba590634320) ) + ROM_LOAD("mpr-23051.ic20", 0x2000000, 0x0800000, CRC(01226aaa) SHA1(a4c6a0eda05e53d0e51b92a4317a86a708a7efdb) ) + ROM_LOAD("mpr-23052.ic21", 0x2800000, 0x0800000, CRC(74bee120) SHA1(5a0fb48fa758a2be2e08e3b1298103c5aa748835) ) + ROM_LOAD("mpr-23053.ic22", 0x3000000, 0x0800000, CRC(d92d4401) SHA1(a868780f8d2e176ff10781e1c08bf932f34ac504) ) + ROM_LOAD("mpr-23054.ic23", 0x3800000, 0x0800000, CRC(78ba02e8) SHA1(0f696a33e1e6671001efc309ed62f084a246ad24) ) + ROM_LOAD("mpr-23055.ic24", 0x4000000, 0x0800000, CRC(84319604) SHA1(c3dde162e043a54e1325202b46191b32e8784a1c) ) + ROM_LOAD("mpr-23056.ic25", 0x4800000, 0x0800000, CRC(d7386034) SHA1(be1f3ca5f283e428dc59dc072de3e7d36e122d53) ) + ROM_LOAD("mpr-23057.ic26", 0x5000000, 0x0800000, CRC(a3f087db) SHA1(b52d7c072cb5c2fdd10d0ac0b62cebe48b229ae3) ) + ROM_LOAD("mpr-23058.ic27", 0x5800000, 0x0800000, CRC(61a6cc5d) SHA1(34e52cb076888313a80f2b87876b8d37b91d85a0) ) + ROM_LOAD("mpr-23059.ic28", 0x6000000, 0x0800000, CRC(64808024) SHA1(1a6c60c330642b273978d3dd02d95d17d36ee3f2) ) + ROM_LOAD("mpr-23060.ic29", 0x6800000, 0x0800000, CRC(67519942) SHA1(fc758d9075625f8140d5d828c8f6b7a91bcc9119) ) + ROM_LOAD("mpr-23061.ic30", 0x7000000, 0x0800000, CRC(fb1844c4) SHA1(1d1571516a6dbed0c4ded3b80efde9cc9281f66f) ) + ROM_LOAD("mpr-23083.ic31", 0x7800000, 0x0400000, CRC(c61d2dfe) SHA1(a05fb979ed7c8040de91716fc8814e6bd995efa2) ) + ROM_LOAD("mpr-23084.ic32", 0x8000000, 0x0400000, CRC(e228cdfd) SHA1(d02a2e3557bd24cf34c5ddb42d41ca15e78ae885) ) + + // DMA protection data + ROM_LOAD("88000000.bin", 0x8800000, 0x025f00, CRC(77d79823) SHA1(2545d28eee47114e8ffb9bc6d7a910e90fc48420) ) + ROM_LOAD("88026440.bin", 0x8830000, 0x016520, CRC(dad9ebbd) SHA1(39c0697caa2b5ee11d99e75726e92ed86a23f10b) ) + ROM_LOAD("8803bda0.bin", 0x8850000, 0x01e5e0, CRC(9e0b8202) SHA1(729bed557c1a00da13c990603bbadab38d90285e) ) + ROM_LOAD("8805a560.bin", 0x8870000, 0x0017a0, CRC(7bc27482) SHA1(6ce6074cf47989f42af02deb7aac52883912784a) ) + ROM_LOAD("8805b720.bin", 0x8880000, 0x02b5a0, CRC(485d0aef) SHA1(853f4b49b489cc512c906edcaf3cd8b5bf4c64c0) ) + ROM_LOAD("8808b7e0.bin", 0x88a0000, 0x013ec0, CRC(0fc8f363) SHA1(dad30d43cef89d01ce80301b1d796aabad755de6) ) ROM_END /* toy fighter - 1999 sega */ diff --git a/src/mame/machine/naomibd.c b/src/mame/machine/naomibd.c index 20d42c49c49..25d67c43655 100644 --- a/src/mame/machine/naomibd.c +++ b/src/mame/machine/naomibd.c @@ -395,7 +395,7 @@ READ64_DEVICE_HANDLER( naomibd_r ) } else { - mame_printf_verbose("Bad protection offset read %x\n", v->rom_offset); + logerror("Bad protection offset read %x\n", v->rom_offset); } } else @@ -574,20 +574,6 @@ WRITE64_DEVICE_HANDLER( naomibd_w ) v->dma_offset &= 0xffff; v->dma_offset |= (data >> 16) & 0x1fff0000; v->dma_offset_flags = (data>>28); - - // if the flag is cleared that lets the protection chip go, - // we need to handle this specially. - if (!(v->dma_offset_flags & NAOMIBD_FLAG_ADDRESS_SHUFFLE)) - { - if (!strcmp(device->machine->gamedrv->name, "qmegamis")) - { - v->dma_offset = 0x9000000; - } - else - { - logerror("Protected DMA not handled for this game\n"); - } - } } if(ACCESSING_BITS_0_15) { @@ -607,7 +593,7 @@ WRITE64_DEVICE_HANDLER( naomibd_w ) case 0x1fffc: // decryption key v->prot_key = data; - mame_printf_verbose("Protection: set up read @ %x, key %x (PIO %x DMA %x) [%s]\n", v->prot_offset, v->prot_key, v->rom_offset, v->dma_offset, cpuexec_describe_context(device->machine)); +// printf("Protection: set up read @ %x, key %x (PIO %x DMA %x) [%s]\n", v->prot_offset, v->prot_key, v->rom_offset, v->dma_offset, cpuexec_describe_context(device->machine)); // translate address if necessary if (v->prot_translate != NULL) @@ -646,7 +632,7 @@ WRITE64_DEVICE_HANDLER( naomibd_w ) } else { - mame_printf_verbose("naomibd: protection not handled for this game\n"); + logerror("naomibd: protection not handled for this game\n"); } break; @@ -1043,7 +1029,43 @@ DEVICE_GET_INFO( naomibd ) case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(naomibd_state); break; case DEVINFO_INT_INLINE_CONFIG_BYTES: info->i = sizeof(naomibd_config); break; case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_PERIPHERAL; break; - case DEVINFO_INT_DMAOFFSET: info->i = get_safe_token(device)->dma_offset; break; + case DEVINFO_INT_DMAOFFSET: +// printf("DMA source %x, flags %x\n", get_safe_token(device)->dma_offset, get_safe_token(device)->dma_offset_flags); + + // if the flag is cleared that lets the protection chip go, + // we need to handle this specially. + if (!(get_safe_token(device)->dma_offset_flags & NAOMIBD_FLAG_ADDRESS_SHUFFLE)) + { + if (!strcmp(device->machine->gamedrv->name, "qmegamis")) + { + info->i = 0x9000000; + break; + } + else if (!strcmp(device->machine->gamedrv->name, "mvsc2")) + { + switch (get_safe_token(device)->dma_offset) + { + case 0x08000000: info->i = 0x8800000; break; + case 0x08026440: info->i = 0x8830000; break; + case 0x0803bda0: info->i = 0x8850000; break; + case 0x0805a560: info->i = 0x8870000; break; + case 0x0805b720: info->i = 0x8880000; break; + case 0x0808b7e0: info->i = 0x88a0000; break; + default: + info->i = get_safe_token(device)->dma_offset; + break; + } + + return; + } + else + { + logerror("Protected DMA not handled for this game (dma_offset %x)\n", get_safe_token(device)->dma_offset); + } + } + + info->i = get_safe_token(device)->dma_offset; + break; /* --- the following bits of info are returned as pointers --- */ case DEVINFO_PTR_ROM_REGION: info->romregion = NULL; break; @@ -1072,4 +1094,3 @@ DEVICE_GET_INFO( naomibd ) case DEVINFO_STR_CREDITS: strcpy(info->s, "Copyright Nicola Salmoria and the MAME Team"); break; } } -