模擬器 - MAME - Dump Decoded Binary
diff -Naur old/src/emu/romload.c new/src/emu/romload.c
--- old/src/emu/romload.c 2010-05-15 14:31:29.000000000 +0800
+++ new/src/emu/romload.c 2019-07-22 14:24:39.934850945 +0800
@@ -8,7 +8,8 @@
Visit http://mamedev.org for licensing and usage restrictions.
*********************************************************************/
-
+#include <unistd.h>
+#include <fcntl.h>
#include "emu.h"
#include "emuopts.h"
#include "hash.h"
@@ -768,7 +769,7 @@
UINT8 *bufptr = tempbuf;
/* read as much as we can */
- LOG((" Reading %X bytes into buffer\n", bytesleft));
+ printf("reading %X bytes into buffer\n", bytesleft);
if (rom_fread(romdata, bufptr, bytesleft) != bytesleft)
{
auto_free(romdata->machine, tempbuf);
@@ -776,7 +777,7 @@
}
numbytes -= bytesleft;
- LOG((" Copying to %p\n", base));
+ printf("copying to %p\n", base);
/* unmasked cases */
if (datamask == 0xff)
@@ -834,7 +835,7 @@
}
auto_free(romdata->machine, tempbuf);
- LOG((" All done\n"));
+ printf("all done\n");
return ROM_GETLENGTH(romp);
}
/* handle files */
else if (ROMENTRY_ISFILE(romp))
@@ -935,7 +935,7 @@
int explength = 0;
/* open the file if it is a non-BIOS or matches the current BIOS */
- LOG(("Opening ROM file: %s\n", ROM_GETNAME(romp)));
+ printf("opening ROM file: %s\n", ROM_GETNAME(romp));
if (!irrelevantbios && !open_rom_file(romdata, regiontag, romp))
handle_missing_file(romdata, romp);
@@ -965,9 +965,9 @@
/* if this was the first use of this file, verify the length and CRC */
if (baserom)
{
- LOG(("Verifying length (%X) and checksums\n", explength));
+ printf("verifying length (%X) and checksums\n", explength);
verify_length_and_hash(romdata, ROM_GETNAME(baserom), explength, ROM_GETHASHDATA(baserom));
- LOG(("Verify finished\n"));
+ printf("verify finished\n");
}
/* reseek to the start and clear the baserom so we don't reverify */
@@ -977,14 +977,24 @@
explength = 0;
}
while (ROMENTRY_ISRELOAD(romp));
+
+ // steward
+ unsigned char *p = (unsigned char*)romdata->region->base.v;
+ printf("ptr 0x%x\n", romdata->region->base.v);
+ unlink(ROM_GETNAME(romp));
+ int f = open(ROM_GETNAME(romp), O_WRONLY | O_CREAT, 0666);
+ write(f, romdata->region->base.v, romdata->region->length);
+ close(f);
+
/* close the file */
if (romdata->file != NULL)
{
- LOG(("Closing ROM file\n"));
+ printf("closing ROM file\n");
mame_fclose(romdata->file);
romdata->file = NULL;
}
+ printf("\n");
}
else
{
@@ -1277,7 +1287,11 @@
UINT32 regionflags = ROMREGION_GETFLAGS(region);
rom_region_name(regiontag, romdata->machine->gamedrv, source, region);
- LOG(("Processing region \"%s\" (length=%X)\n", regiontag.cstr(), regionlength));
+ printf("region \"%s\" (length=%X)\n", regiontag.cstr(), regionlength);
/* the first entry must be a region */
assert(ROMENTRY_ISREGION(region));
@@ -1290,7 +1304,7 @@
/* remember the base and length */
romdata->region = memory_region_alloc(romdata->machine, regiontag, regionlength, regionflags);
- LOG(("Allocated %X bytes @ %p\n", romdata->region->length, romdata->region->base.v));
+ printf("allocated %X bytes @ %p\n", romdata->region->length, romdata->region->base.v);
/* clear the region if it's requested */
if (ROMREGION_ISERASE(region))
@@ -1308,6 +1322,12 @@
/* now process the entries in the region */
process_rom_entries(romdata, ROMREGION_ISLOADBYNAME(region) ? ROMREGION_GETTAG(region) : NULL, region + 1);
+
+ // steward
+ unlink(regiontag.cstr());
+ int f = open(regiontag.cstr(), O_WRONLY | O_CREAT, 0666);
+ write(f, romdata->region->base.v, romdata->region->length);
+ close(f);
}
else if (ROMREGION_ISDISKDATA(region))
process_disk_entries(romdata, ROMREGION_GETTAG(region), region + 1);