summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Michaël Banaan Ananas <happppp@users.noreply.github.com>2011-10-22 16:29:19 +0000
committer Michaël Banaan Ananas <happppp@users.noreply.github.com>2011-10-22 16:29:19 +0000
commit519c4726cb56d824395686470f8620fb47e47ce4 (patch)
tree6195d6f2bf86ae2739798c2e302cc40b532445bb
parentbb4f4f610b5ea64b02d7a84e18a171f5f423a7a0 (diff)
don't save the whole 135MB flash to .nv file but just the modified flash pages
-rw-r--r--src/mame/drivers/cavesh3.c82
1 files changed, 69 insertions, 13 deletions
diff --git a/src/mame/drivers/cavesh3.c b/src/mame/drivers/cavesh3.c
index 69663e8b19e..1e6acaf58dc 100644
--- a/src/mame/drivers/cavesh3.c
+++ b/src/mame/drivers/cavesh3.c
@@ -6090,17 +6090,39 @@ static MACHINE_RESET( cavesh3 )
static NVRAM_HANDLER( cavesh3 )
{
- /* Yes we have to read/write the entire ~128MB flash because Deathsmiles saves data there instead of to the actual EEPROM */
- UINT8 *region = machine.region( "game" )->base();
+ /* 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();
size_t size = machine.region( "game" )->bytes();
+ if (size % FLASH_PAGE_SIZE) return; // region size must be multiple of flash page size
+ size /= FLASH_PAGE_SIZE;
if (read_or_write)
- file->write(region,size);
+ {
+ UINT32 page = 0;
+ while (page < size)
+ {
+ if (memcmp(region_game + page * FLASH_PAGE_SIZE, region_copy + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE))
+ {
+ file->write(&page, 4);
+ file->write(region_game + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE);
+ }
+ page++;
+ }
+ file->write(&page, 4);
+ }
else
{
if (file)
{
- file->read(region,size);
+ UINT32 page;
+ file->read(&page, 4);
+ while (page < size)
+ {
+ file->read(region_game + page * FLASH_PAGE_SIZE, FLASH_PAGE_SIZE);
+ file->read(&page, 4);
+ }
}
}
}
@@ -6158,6 +6180,8 @@ 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) )
@@ -6171,6 +6195,8 @@ 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) )
@@ -6183,7 +6209,9 @@ 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_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_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(b9a10c22) SHA1(4561f95c6018c9716077224bfe9660e61fb84681) )
@@ -6196,7 +6224,9 @@ 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_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_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP("u23", 0x000000, 0x400000, CRC(701a912a) SHA1(85c198946fb693d99928ea2595c84ba4d9dc8157) )
@@ -6210,6 +6240,8 @@ 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) )
@@ -6223,6 +6255,8 @@ 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) )
@@ -6236,6 +6270,8 @@ 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) )
@@ -6249,6 +6285,8 @@ 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) )
@@ -6261,7 +6299,9 @@ 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_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_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(ee5e585d) SHA1(7eeba4ee693060e927f8c46b16e39227c6a62392) )
@@ -6275,6 +6315,8 @@ 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.) */
@@ -6288,6 +6330,8 @@ 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.) */
@@ -6300,7 +6344,9 @@ 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_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_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(aab718c8) SHA1(0e636c46d06151abd6f73232bc479dafcafe5327) )
@@ -6313,7 +6359,9 @@ 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_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_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4a4b36df) SHA1(5db5ce6fa47e5ca3263d4bd19315890c6d29df66) )
@@ -6326,7 +6374,9 @@ ROM_START( mmmbanc )
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
- ROM_LOAD( "u2", 0x0000, 0x8400000, CRC(f3b50c30) SHA1(962327798081b292b2d3fd3b7845c0197f9f2d8a) ) /* (2007/06/05 MASTER VER.) */
+ 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_REGION( 0x800000, "ymz770", ROMREGION_ERASEFF)
ROM_LOAD16_WORD_SWAP( "u23", 0x000000, 0x400000, CRC(4caaa1bf) SHA1(9b92c13eac05601da4d9bb3eb727c156974e9f0c) )
@@ -6339,7 +6389,9 @@ ROM_START( pinkswts )
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
- ROM_LOAD( "pinkswts_u2", 0x0000, 0x8400000, CRC(92d3243a) SHA1(e9d20c62f642fb2f62ef83ed5caeee6b3f67fef9) ) /* (2006/04/06 MASTER VER....) */
+ 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) )
@@ -6352,7 +6404,9 @@ ROM_START( pinkswtsa )
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
- ROM_LOAD( "pnkswtsa_u2", 0x0000, 0x8400000, CRC(829a862e) SHA1(8c0ee2a0eb33b68869252fd68aed74820a904287) ) /* (2006/04/06 MASTER VER...) */
+ 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) )
@@ -6365,7 +6419,9 @@ ROM_START( pinkswtsb )
ROM_RELOAD(0x200000,0x200000)
ROM_REGION( 0x8400000, "game", ROMREGION_ERASEFF)
- ROM_LOAD( "pnkswtsb_u2", 0x0000, 0x8400000, CRC(a5666ed9) SHA1(682e06c84990225bc6bb0c9f38b5f46c4e36b430) ) /* (2006/04/06 MASTER VER.) */
+ 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) )