mirror of
https://github.com/SAT-R/sa2.git
synced 2026-10-28 09:43:38 +00:00
60 lines
1.8 KiB
Python
Vendored
60 lines
1.8 KiB
Python
Vendored
rom_start = 0x0203B000
|
|
end_of_code = 0x0203C208
|
|
end_of_data = 0x0203F72C
|
|
|
|
addresses = set()
|
|
|
|
with open('multi_boot/subgame_loader_2/asm/code.s') as code:
|
|
for line in code.readlines():
|
|
line = line.strip()
|
|
if ".4byte 0x02" in line:
|
|
address = int(line.split("0x0")[1], 16)
|
|
if address >= end_of_code and address < end_of_data:
|
|
addresses.add(address)
|
|
|
|
addresses_with_size = []
|
|
sorted_addresses = sorted(addresses)
|
|
|
|
def upper_addr(addr):
|
|
return "0x" + hex(addr).split('0x')[1].upper()
|
|
|
|
def format_memory_addr(addr):
|
|
return "0x0" + hex(addr).split("0x")[1].upper()
|
|
|
|
def to_var_name(addr):
|
|
without_hex = addr.split("0x")[1]
|
|
return f"gUnknown_{without_hex}"
|
|
|
|
|
|
for i in range(len(sorted_addresses)):
|
|
address = sorted_addresses[i]
|
|
if i + 1 < len(sorted_addresses):
|
|
next_address = sorted_addresses[i + 1]
|
|
else:
|
|
next_address = end_of_data
|
|
|
|
addresses_with_size.append((address, format_memory_addr(address), upper_addr(next_address - address)))
|
|
|
|
summed = 0
|
|
|
|
with open("multi_boot/subgame_loader_2/data/sa2/new_data.s", "w") as data_file:
|
|
data_file.write(' .section .rodata\n')
|
|
data_file.write('\n')
|
|
for raw_addr, addr, size in addresses_with_size:
|
|
summed += int(size, 16)
|
|
var = to_var_name(addr)
|
|
data_file.write(f""" .global {var}
|
|
{var}:
|
|
.incbin "data/sa2/rom_data.bin", 0x{f"{(raw_addr - rom_start):08x}".upper()}, {size}
|
|
|
|
""")
|
|
|
|
print(hex(summed))
|
|
with open("multi_boot/subgame_loader_2/asm/new_code.s", "w") as new_rom:
|
|
existing_code = "".join(open("multi_boot/subgame_loader_2/asm/code.s").readlines())
|
|
for _, addr, __ in addresses_with_size:
|
|
var = to_var_name(addr)
|
|
existing_code = existing_code.replace(addr, to_var_name(addr))
|
|
|
|
new_rom.write(existing_code)
|