Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Docker Support for OSX #91

Merged
merged 14 commits into from
Apr 25, 2020
Prev Previous commit
Next Next commit
fixbaserom cleanup
  • Loading branch information
ethteck committed Apr 23, 2020
commit f605b3a8a7c4e97da8586c5d15153bb3fcc02be5
40 changes: 24 additions & 16 deletions fixbaserom.py
Original file line number Diff line number Diff line change
@@ -1,39 +1,48 @@
import os.path
from os import path
import sys
import struct
import hashlib


def get_str_hash(byte_array):
return str(hashlib.md5(byte_array).hexdigest())


# If the baserom exists and is correct, we don't need to change anything
if path.exists("baserom.z64"):
with open("baserom.z64", mode="rb") as file:
fileContent = bytearray(file.read())
if get_str_hash(fileContent) == "f0b7f35375f9cc8ca1b2d59d78e35405":
print("Found valid baserom - exiting early")
sys.exit(0)

# Determine if we have a ROM file
romFileName = ""
if (path.exists("baserom.z64")):
romFileName = "baserom.z64"
if (path.exists("baserom_original.z64")):
if path.exists("baserom_original.z64"):
romFileName = "baserom_original.z64"
elif (path.exists("baserom_original.n64")):
elif path.exists("baserom_original.n64"):
romFileName = "baserom_original.n64"
ethteck marked this conversation as resolved.
Show resolved Hide resolved

# Read in the original ROM
if (romFileName != ""):
if romFileName != "":
print("File '" + romFileName + "' found.")
with open(romFileName, mode='rb') as file:
with open(romFileName, mode="rb") as file:
fileContent = bytearray(file.read())

# Check if ROM needs to be byte swapped
if (fileContent[0] == 0x40):
# Byte Swap ROM
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)):
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):
if i % (1024 * 1024 * 4) == 0:
print(str(perc * 100) + "%")

print("Byte swapping done.")
Expand All @@ -50,10 +59,10 @@
strippedContent[0x3E] = 0x50

# Check to see if the ROM is a "vanilla" Debug ROM
md5Hash = hashlib.md5(bytes(strippedContent)).hexdigest()

if (str(md5Hash) != "f0b7f35375f9cc8ca1b2d59d78e35405"):
print("Error: Expected a hash of f0b7f35375f9cc8ca1b2d59d78e35405 but got " + str(md5Hash) + ". The baserom has probably been tampered, find a new one")
str_hash = get_str_hash(strippedContent)
if str_hash != "f0b7f35375f9cc8ca1b2d59d78e35405":
print("Error: Expected a hash of f0b7f35375f9cc8ca1b2d59d78e35405 but got " + str_hash + ". " +
"The baserom has probably been tampered, find a new one")
sys.exit(1)

# Write out our new ROM
Expand All @@ -62,4 +71,3 @@
file.write(bytes(strippedContent))

print("Done!")