From 3e74c336279d2218c297accfe715878b794619c6 Mon Sep 17 00:00:00 2001 From: Jack Walker <7463599+Jack-Walker@users.noreply.github.com> Date: Fri, 27 Mar 2020 22:30:19 -0400 Subject: [PATCH] Added 'extract' target to makefile Created a THANKS.md file for credits. Updated checksum.md5 for a "vanilla" debug ROM Added fixbaserom.py which automatically removes the overdump, byte swaps, and patches the ROM header. --- .gitignore | 2 ++ THANKS.md | 1 + checksum.md5 | 2 +- checksum_old.md5 | 1 + fixbaserom.py | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ makefile | 5 +++++ 6 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 THANKS.md create mode 100644 checksum_old.md5 create mode 100644 fixbaserom.py diff --git a/.gitignore b/.gitignore index a01307c6b1..5f1493e3eb 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,8 @@ baserom/ *.elf *.sra *.z64 +*.n64 +*.v64 *.map *.dump out.txt diff --git a/THANKS.md b/THANKS.md new file mode 100644 index 0000000000..13b9dbc43e --- /dev/null +++ b/THANKS.md @@ -0,0 +1 @@ +Thanks to z64me and CrookedPoe for their actor documentation. https://github.com/CrookedPoe/z64-rw \ No newline at end of file diff --git a/checksum.md5 b/checksum.md5 index 98da4b6798..4483a7ce34 100644 --- a/checksum.md5 +++ b/checksum.md5 @@ -1 +1 @@ -717179476af84133b14ff73af87db57a zelda_ocarina_mq_dbg.z64 +f0b7f35375f9cc8ca1b2d59d78e35405 zelda_ocarina_mq_dbg.z64 \ No newline at end of file diff --git a/checksum_old.md5 b/checksum_old.md5 new file mode 100644 index 0000000000..98da4b6798 --- /dev/null +++ b/checksum_old.md5 @@ -0,0 +1 @@ +717179476af84133b14ff73af87db57a zelda_ocarina_mq_dbg.z64 diff --git a/fixbaserom.py b/fixbaserom.py new file mode 100644 index 0000000000..cc06d78d3a --- /dev/null +++ b/fixbaserom.py @@ -0,0 +1,50 @@ +import os.path +from os import path +import sys +import struct + +# Read in the original ROM +if (path.exists("baserom_original.z64")): + print("File 'baserom_original.z64' found.") + with open("baserom_original.z64", mode='rb') as file: + fileContent = file.read() +elif (path.exists("baserom_original.n64")): + print("File 'baserom_original.n64' found.") + print("Byte swapping...") + with open("baserom_original.n64", mode='rb') as file: + fileContent = bytearray(file.read()) + + # Byte Swap ROM + # TODO: This is pretty slow at the moment. Look into optimizing it later... + i = 0 + while (i < len(fileContent)): + tmp = struct.unpack_from("BBBB", fileContent, i) + struct.pack_into("BBBB", fileContent, i + 0, tmp[3], tmp[2], tmp[1], tmp[0]) + i += 4 + + perc = float(i) / float(len(fileContent)) + + if (i % (1024 * 1024 * 4) == 0): + print(str(perc * 100) + "%") + + print("Byte swapping done.") +else: + print("Error: Could not find a baserom_original.z64 or baserom_original.n64.") + sys.exit(1) + +# Strip the overdump +print("Stripping overdump...") +strippedContent = list(fileContent[0:0x3600000]) + +# Patch the header +print("Patching header...") +strippedContent[0x3E] = 0x50 + + +# Write out our new ROM +print("Writing new ROM 'baserom.z64'.") +with open("baserom.z64", mode="wb") as file: + file.write(bytes(strippedContent)) + +print("Done!") + diff --git a/makefile b/makefile index 55ba473563..0702023fac 100644 --- a/makefile +++ b/makefile @@ -129,6 +129,11 @@ build/undefined_syms.txt: undefined_syms.txt clean: $(RM) $(ROM) $(ELF) -r build +extract: + make -C tools + python3 fixbaserom.py + python3 extract_baserom.py + python3 extract_assets.py #### Various Recipes ####