From d780e6b13e380839b8bfc0d6395a1fb61d76abf2 Mon Sep 17 00:00:00 2001 From: Jack Walker <7463599+Jack-Walker@users.noreply.github.com> Date: Mon, 30 Mar 2020 19:38:51 -0400 Subject: [PATCH] Updated fixbaserom script - Script now checks ROM header to determine if ROM is byte swapped. - Checks the hash of the ROM to determine if it's "vanilla". --- fixbaserom.py | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/fixbaserom.py b/fixbaserom.py index cc06d78d3a..88c6840249 100644 --- a/fixbaserom.py +++ b/fixbaserom.py @@ -2,34 +2,33 @@ import os.path from os import path import sys import struct +import hashlib # 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)) + # Check if ROM needs to be byte swapped + if (fileContent[0] == 0x40): + # Byte Swap ROM + # TODO: This is pretty slow at the moment. Look into optimizing it later... + print("ROM needs to be byte swapped...") + 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 - if (i % (1024 * 1024 * 4) == 0): - print(str(perc * 100) + "%") + perc = float(i) / float(len(fileContent)) + + if (i % (1024 * 1024 * 4) == 0): + print(str(perc * 100) + "%") - print("Byte swapping done.") + print("Byte swapping done.") else: - print("Error: Could not find a baserom_original.z64 or baserom_original.n64.") + print("Error: Could not find baserom_original.z64.") sys.exit(1) # Strip the overdump @@ -40,6 +39,12 @@ strippedContent = list(fileContent[0:0x3600000]) print("Patching header...") strippedContent[0x3E] = 0x50 +# Check to see if the ROM is a "vanilla" Debug ROM +md5Hash = hashlib.md5(bytearray(strippedContent)).hexdigest() + +if (str(md5Hash) != "f0b7f35375f9cc8ca1b2d59d78e35405"): + print("Error: Expected a hash of f0b7f35375f9cc8ca1b2d59d78e35405 but got " + str(md5Hash) + ". The baserom is probably not \"vanilla\"") + sys.exit(1) # Write out our new ROM print("Writing new ROM 'baserom.z64'.")