diff --git a/src/mame/drivers/cavesh3.c b/src/mame/drivers/cavesh3.c index 1e6acaf58dc..e64c05b0c28 100644 --- a/src/mame/drivers/cavesh3.c +++ b/src/mame/drivers/cavesh3.c @@ -153,7 +153,7 @@ public: : driver_device(mconfig, type, tag) { } UINT8* flashregion; - + UINT8* flashwritemap; osd_work_queue * queue; /* work queue */ osd_work_item * blitter_request; @@ -5656,6 +5656,7 @@ static WRITE8_HANDLER( flash_cmd_w ) if (data==0xd0) { flash_change_state( space->machine(), STATE_BLOCK_ERASE ); + state->flashwritemap[flash_col] |= 1; memset(state->flashregion + flash_col * FLASH_PAGE_SIZE, 0xff, FLASH_PAGE_SIZE); //logerror("erased block %04x (%08x - %08x)\n", flash_col, flash_col * FLASH_PAGE_SIZE, ((flash_col+1) * FLASH_PAGE_SIZE)-1); } @@ -5668,6 +5669,7 @@ static WRITE8_HANDLER( flash_cmd_w ) if (data==0x10) { flash_change_state( space->machine(), STATE_PAGE_PROGRAM ); + state->flashwritemap[flash_row] |= (memcmp(state->flashregion + flash_row * FLASH_PAGE_SIZE, flash_page_data, FLASH_PAGE_SIZE) != 0); memcpy(state->flashregion + flash_row * FLASH_PAGE_SIZE, flash_page_data, FLASH_PAGE_SIZE); //logerror("re-written block %04x (%08x - %08x)\n", flash_row, flash_row * FLASH_PAGE_SIZE, ((flash_row+1) * FLASH_PAGE_SIZE)-1); @@ -6038,8 +6040,12 @@ static TIMER_CALLBACK( cavesh3_blitter_delay_callback ) static MACHINE_START( cavesh3 ) { + size_t size = machine.region( "game" )->bytes(); cavesh3_state *state = machine.driver_data(); + state->flashwritemap = auto_alloc_array(machine, UINT8, size / FLASH_PAGE_SIZE); + memset(state->flashwritemap, 0, size / FLASH_PAGE_SIZE); + cavesh3_ram16_copy = auto_alloc_array(machine, UINT16, 0x10000000); state->cavesh3_blitter_delay_timer = machine.scheduler().timer_alloc(FUNC(cavesh3_blitter_delay_callback)); @@ -6092,9 +6098,9 @@ static NVRAM_HANDLER( cavesh3 ) { /* Yes we have to crawl through the entire ~128MB flash because some games (eg. Deathsmiles) save data there on top of to the actual EEPROM */ - UINT8 *region_game = machine.region( "game" )->base(); - UINT8 *region_copy = machine.region( "copy" )->base(); + UINT8 *region = machine.region( "game" )->base(); size_t size = machine.region( "game" )->bytes(); + cavesh3_state *state = machine.driver_data(); if (size % FLASH_PAGE_SIZE) return; // region size must be multiple of flash page size size /= FLASH_PAGE_SIZE; @@ -6103,10 +6109,10 @@ static NVRAM_HANDLER( cavesh3 ) UINT32 page = 0; while (page < size) { - if (memcmp(region_game + page * FLASH_PAGE_SIZE, region_copy + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE)) + if (state->flashwritemap[page]) { file->write(&page, 4); - file->write(region_game + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE); + file->write(region + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE); } page++; } @@ -6120,7 +6126,7 @@ static NVRAM_HANDLER( cavesh3 ) file->read(&page, 4); while (page < size) { - file->read(region_game + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE); + file->read(region + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE); file->read(&page, 4); } } @@ -6180,8 +6186,6 @@ ROM_START( mushisam ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD("mushisam_u2", 0x000000, 0x8400000, CRC(b1f826dc) SHA1(c287bd9f571d0df03d7fcbcf3c57c74ce564ab05) ) /* (2004/10/12 MASTER VER.) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(138e2050) SHA1(9e86489a4e65af5efb5495adf6d4b3e01d5b2816) ) @@ -6195,8 +6199,6 @@ ROM_START( mushisama ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD("mushisama_u2", 0x000000, 0x8400000, CRC(2cd13810) SHA1(40e45e201b60e63a060b68d4cc767eb64cfb99c2) ) /* (2004/10/12 MASTER VER) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(138e2050) SHA1(9e86489a4e65af5efb5495adf6d4b3e01d5b2816) ) @@ -6209,9 +6211,7 @@ ROM_START( espgal2 ) ROM_RELOAD(0x200000,0x200000) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) - ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(222f58c7) SHA1(d47a5085a1debd9cb8c61d88cd39e4f5036d1797) ) /* (2005/11/14 MASTER VER) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) + ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(222f58c7) SHA1(d47a5085a1debd9cb8c61d88cd39e4f5036d1797) ) /* (2005/11/14 MASTER VER) */ ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(b9a10c22) SHA1(4561f95c6018c9716077224bfe9660e61fb84681) ) @@ -6224,9 +6224,7 @@ ROM_START( mushitam ) ROM_RELOAD(0x200000,0x200000) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) - ROM_LOAD("u2", 0x000000, 0x8400000, CRC(3f93ff82) SHA1(6f6c250aa7134016ffb288d056bc937ea311f538) ) /* (2005/09/09 MASTER VER) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) + ROM_LOAD("u2", 0x000000, 0x8400000, CRC(3f93ff82) SHA1(6f6c250aa7134016ffb288d056bc937ea311f538) ) /* (2005/09/09 MASTER VER) */ ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(701a912a) SHA1(85c198946fb693d99928ea2595c84ba4d9dc8157) ) @@ -6240,8 +6238,6 @@ ROM_START( futari15 ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD("futari15_u2", 0x000000, 0x8400000, CRC(b9eae1fc) SHA1(410f8e7cfcbfd271b41fb4f8d049a13a3191a1f9) ) /* (2006/12/8.MAST VER. 1.54.) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) ) @@ -6255,8 +6251,6 @@ ROM_START( futari15a ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD("futari15a_u2", 0x000000, 0x8400000, CRC(b9d815f9) SHA1(6b6f668b0bbb087ffac65e4f0d8bd9d5b28eeb28) ) /* (2006/12/8 MAST VER 1.54) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) ) @@ -6270,8 +6264,6 @@ ROM_START( futari10 ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD( "futari10_u2", 0x000000, 0x8400000, CRC(78ffcd0c) SHA1(0e2937edec15ce3f5741b72ebd3bbaaefffb556e) ) /* (2006/10/23 MASTER VER.) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) ) @@ -6285,8 +6277,6 @@ ROM_START( futariblk ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD( "futariblk_u2", 0x000000, 0x8400000, CRC(08c6fd62) SHA1(e1fc386b2b0e41906c724287cbf82304297e0150) ) /* (2007/12/11 BLACK LABEL VER) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(39f1e1f4) SHA1(53d12f59a56df35c705408c76e6e02118da656f1) ) @@ -6299,9 +6289,7 @@ ROM_START( ibara ) ROM_RELOAD(0x200000,0x200000) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) - ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(55840976) SHA1(4982bdce84f9603adfed7a618f18bc80359ab81e) ) /* (2005/03/22 MASTER VER..) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) + ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(55840976) SHA1(4982bdce84f9603adfed7a618f18bc80359ab81e) ) /* (2005/03/22 MASTER VER..) */ ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(ee5e585d) SHA1(7eeba4ee693060e927f8c46b16e39227c6a62392) ) @@ -6315,8 +6303,6 @@ ROM_START( ibarablk ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD( "ibarablk_u2", 0x000000, 0x8400000, CRC(5e46be44) SHA1(bed5f1bf452f2cac58747ecabec3c4392566a3a7) ) /* (2006/02/06. MASTER VER.) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(a436bb22) SHA1(0556e771cc02638bf8814315ba671c2d442594f1) ) /* (2006/02/06 MASTER VER.) */ @@ -6330,8 +6316,6 @@ ROM_START( ibarablka ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD( "ibarablka_u2", 0x000000, 0x8400000, CRC(33400d96) SHA1(09c22b5431ac3726bf88c56efd970f56793f825a) ) /* (2006/02/06 MASTER VER.) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(a436bb22) SHA1(0556e771cc02638bf8814315ba671c2d442594f1) ) /* (2006/02/06 MASTER VER.) */ @@ -6344,9 +6328,7 @@ ROM_START( deathsml ) ROM_RELOAD(0x200000,0x200000) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) - ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(d45b0698) SHA1(7077b9445f5ed4749c7f683191ccd312180fac38) ) /* (2007/10/09 MASTER VER) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) + ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(d45b0698) SHA1(7077b9445f5ed4749c7f683191ccd312180fac38) ) /* (2007/10/09 MASTER VER) */ ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(aab718c8) SHA1(0e636c46d06151abd6f73232bc479dafcafe5327) ) @@ -6359,9 +6341,7 @@ ROM_START( mmpork ) ROM_RELOAD(0x200000,0x200000) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) - ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(1ee961b8) SHA1(81a2eba704ac1cf7fc44fa7c6a3f50e3570c104f) ) /* (2007/ 4/17 MASTER VER.) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) + ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(1ee961b8) SHA1(81a2eba704ac1cf7fc44fa7c6a3f50e3570c104f) ) /* (2007/ 4/17 MASTER VER.) */ ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4a4b36df) SHA1(5db5ce6fa47e5ca3263d4bd19315890c6d29df66) ) @@ -6374,9 +6354,7 @@ ROM_START( mmmbanc ) ROM_RELOAD(0x200000,0x200000) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) - ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(f3b50c30) SHA1(962327798081b292b2d3fd3b7845c0197f9f2d8a) ) /* (2007/06/05 MASTER VER.) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) + ROM_LOAD( "u2", 0x000000, 0x8400000, CRC(f3b50c30) SHA1(962327798081b292b2d3fd3b7845c0197f9f2d8a) ) /* (2007/06/05 MASTER VER.) */ ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4caaa1bf) SHA1(9b92c13eac05601da4d9bb3eb727c156974e9f0c) ) @@ -6390,8 +6368,6 @@ ROM_START( pinkswts ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD( "pinkswts_u2", 0x000000, 0x8400000, CRC(92d3243a) SHA1(e9d20c62f642fb2f62ef83ed5caeee6b3f67fef9) ) /* (2006/04/06 MASTER VER....) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4b82d250) SHA1(ee98dbc3f791efb6d58f3945bcb2044667ae7978) ) @@ -6405,8 +6381,6 @@ ROM_START( pinkswtsa ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD( "pnkswtsa_u2", 0x000000, 0x8400000, CRC(829a862e) SHA1(8c0ee2a0eb33b68869252fd68aed74820a904287) ) /* (2006/04/06 MASTER VER...) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4b82d250) SHA1(ee98dbc3f791efb6d58f3945bcb2044667ae7978) ) @@ -6420,8 +6394,6 @@ ROM_START( pinkswtsb ) ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF) ROM_LOAD( "pnkswtsb_u2", 0x000000, 0x8400000, CRC(a5666ed9) SHA1(682e06c84990225bc6bb0c9f38b5f46c4e36b430) ) /* (2006/04/06 MASTER VER.) */ - ROM_REGION( 0x8400000, "copy", ROMREGION_ERASEFF) - ROM_COPY( "game", 0, 0x000000, 0x8400000 ) ROM_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF) ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4b82d250) SHA1(ee98dbc3f791efb6d58f3945bcb2044667ae7978) )