diff options
| author | 2011-10-22 16:29:19 +0000 | |
|---|---|---|
| committer | 2011-10-22 16:29:19 +0000 | |
| commit | 519c4726cb56d824395686470f8620fb47e47ce4 (patch) | |
| tree | 6195d6f2bf86ae2739798c2e302cc40b532445bb | |
| parent | bb4f4f610b5ea64b02d7a84e18a171f5f423a7a0 (diff) | |
don't save the whole 135MB flash to .nv file but just the modified flash pages
| -rw-r--r-- | src/mame/drivers/cavesh3.c | 82 |
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) ) |
