arcadeutils/README.md

55 lines
1.9 KiB
Markdown
Raw Normal View History

2021-06-27 16:11:58 +00:00
# arcadeutils
2021-06-27 16:14:43 +00:00
2021-06-27 16:11:58 +00:00
Collection of utilities written in Python for working with various arcade binaries.
2021-06-27 16:14:43 +00:00
This is mostly suited towards the separated formats found in MAME archival releases
but also work on a variety of binaries from basically anywhere.
## bindiff
Create a binary diff from two same-length binaries, or apply a previously created
diff to a binary to patch that binary. Run it like `./bindiff diff --help` to see
options for diffing, and `./bindiff patch --help` to see options for patching.
The patch format is simple. The number on the left of the colon is the hex offset where
the difference was found, and the numbers on the right are the hex values to find
and replace. A wildcard (`*`) can be substituted for a hex pair for any byte in
the before section if you do not care what the value is, but be aware that this will
make the patch non-reversible. Arbitrary comments are supported anywhere in the diff.
Start a line with the `#` character to create a comment. Special values are recognized
in comments. If you create a comment starting with `# File size:` then the the base
file will be compared against the decimal number placed after the colon and any file
not matching that length will be rejected.
Some examples are as follows:
A simple patch changing a byte in a file at offset `0x256` from `0xAA` to `0xDD`:
```
256: AA -> DD
```
That same patch, but only for files that are exactly 1024 bytes long:
```
# File size: 1024
256: AA -> DD
```
A patch that does not care about one of the bytes it is patching. The byte at `0x513`
can be any value and the patch will still be applied, and altogether 4 bytes starting
at `0x512` will be changed to the hex value `0x00 0x11 0x22 0x33`:
```
512: AA * CC DD -> 00 11 22 33
```
A patch with multiple offsets, and helpful author descriptions for each section:
```
# This part of the patch fixes a sprite offset issue.
128: AA -> BB
# This part of the patch fixes sound playback issues.
256: 33 -> 44
```