Skip to content

ROM Expander Pro

Boris Timofeev edited this page Mar 15, 2017 · 2 revisions

Text below is copied from application ROM Expander Pro

How to Format the ROM Expander Pro.txt file

Here's a sample file that shows all that can be done.

Image

Original ROM with NES header is shown in YELLOW.
Expanded (shrunk!) ROM with NES header is shown in WHITE.
Of course, this is NOT the real file, just an example for illustrative purposes:


NAME	Portopia Renzoku Satsujin Jiken.nes	Portopia Serial Murder Case.nes
SIZE	A000	A0	24F1D824A2E187603A22AF0C4612EE5F
HEADER	10	4E	45	53	1A	4	1	40	40
COPY	0	20
REPLACE	20	11	22	33
REPLACE	30	44	55	66
FILL	40	FF
COPY	50	60
FILL	80	F0
REPLACE	90	77	88	99

  • All entries are tab dilineated.
  • All numbers are in hex, optionally padded with zeros.
  • All addresses refer to locations in an original or expanded ROM WITHOUT A HEADER even if you want the expanded ROM to have a header.
  • Row names are required but are case insensitive.
  • The file can be a DOS, Mac, or Unix text file. {As of rev 12.8.12}

Note that most real expansion files will be much simpler.
For example, this is the real Portopia file:


NAME	Portopia Renzoku Satsujin Jiken.nes	Portopia Serial Murder Case.nes
SIZE	A000	12000	24F1D824A2E187603A22AF0C4612EE5F
HEADER	10	4E	45	53	1A	4	1	40	40
COPY	0	0
COPY	4000	0
COPY	8000	0

Line Explanation:

1st Line - Required

NAME
{original ROM name}
{Expanded ROM name}

2nd Line - Required

SIZE
{original ROM size in bytes WITHOUT header}
{expanded ROM size in bytes WITHOUT header}
optional: {MD5 checksum of original ROM (ignoring the header bytes)}

Notes on the MD5 checksum feature:
If the MD5 is not listed, the program simply ignores this.
If the MD5 is doesn't match, it let's the user know this, but it still expands the ROM.

To compute the MD5 of your game, simply run the program with any string in the MD5 location. You will get an error, telling you that your MD5 is wrong, but it will list the MD5 it calculated in a box below the status box. Now, simply copy this string and paste it in over the string you used in the MD5 location.

You might not want to use this feature for FDS games that use save files since the MD5 will be wrong for their file if their save file doesn't match yours.

3rd Line - Required

HEADER
{size of header in bytes}
{1st byte of header}
{2nd byte of header}
...
{nth byte of header}

Non-defined header bytes will all be 00s.

ROM Expander Pro automatically detects whether or not the original ROM file has a header, but you need to define the size of header for it to do this!

Even if you don't want the expanded ROM to have a header, you must define the length of the standard header for your game if you want someone with a headered ROM to be able to use the expansion program.

Some header size standards:

NES   10 : Required for both emulators and copiers
FDS   10 : Optional for emulator and not allowed for copiers
SNES 100 : Optional for copiers and emulators

If your original ROM file is designed for a system where no standard header is used and thus would never have a header and, of course, your expanded ROM will not have one either, you can use the following line:
HEADER 0 If a user tries to add a header, he will get an error box telling him that it is not possible.

4th Line - Required

COPY
{starting address to copy data to in expanded ROM}
{starting address to copy data from in original ROM}

or

FILL
{starting address to fill with bytes in expanded ROM}
{byte value to fill area with (typically 00 or FF}}

ROM Expander Pro will continue to FILL or COPY data until the next FILL or COPY line OR the end of the expanded ROM is reached, as defined on the SIZE line.

5+ Lines - Optional

COPY

or

FILL

or

REPLACE
{starting address to replace bytes in expanded ROM}
{list of bytes to put at that address}

REPLACE simply replaces bytes that would normally be copied or filled. After the byte list ends, it goes back to copying or filling the bytes that it was doing before.

This is very useful for things like FDS expansion where bytes need to be modified to change the size of the file or number of files.

Of course, all byte replacement, even in the header, can be done by the IPS patch, but doing it here allows you to test that the expanded ROM still runs before applying the IPS patch.