diff options
author | Rangi <remy.oukaour+rangi@gmail.com> | 2020-08-09 13:49:34 -0400 |
---|---|---|
committer | Rangi <remy.oukaour+rangi@gmail.com> | 2020-08-09 13:49:34 -0400 |
commit | b7da8dbb0e2236f37e4b4c99b88598369da3a008 (patch) | |
tree | 7dd6391629d3c80572ed2af73205851d4122d72b /tools/fix_sections.py | |
parent | faa37936780b8e04733310024bd621a8f2c635cb (diff) |
tools/ contains what's needed to build the ROMs; utils/ contains disassembly utilites
Diffstat (limited to 'tools/fix_sections.py')
-rw-r--r-- | tools/fix_sections.py | 137 |
1 files changed, 0 insertions, 137 deletions
diff --git a/tools/fix_sections.py b/tools/fix_sections.py deleted file mode 100644 index dc23f52..0000000 --- a/tools/fix_sections.py +++ /dev/null @@ -1,137 +0,0 @@ -import os, errno -import re -import fix_sections_directory - -os.chdir("..") -cwd = os.getcwd() - -debug_lines_startswith = [ - "SECTION ", - "else", - "SECTION ", - "endc" -] - -with open("pokegold-spaceworld-gen.link", "r") as f: - linkerscript = f.read() - -def clean_section(line, file, multiple): - global linkerscript - lines = line.lstrip().split("\"") - if "@" in lines[1] or file == lines[1] or file == "hram.asm" or file == "vram.asm" or file == "sram.asm": - file = lines[1] - else: - file += ("@" + lines[1]) if multiple else "" - - linkerscript = linkerscript.replace("\"" + lines[1] + "\"", "\"" + file + "\"") - if "ROMX" in lines[2]: - return "SECTION \"%s\", ROMX" % file - elif "HRAM" in lines[2]: - return "SECTION \"%s\", HRAM" % file - elif "VRAM" in lines[2]: - return "SECTION \"%s\", VRAM" % file - elif "ROM0" in lines[2]: - return "SECTION \"%s\", ROM0" % file - elif "SRAM" in lines[2]: - return "SECTION \"%s\", SRAM" % file - else: - raise - -TEMP_PATH = fix_sections_directory.TEMP_DIRECTORY - -for root, dirs, files in os.walk(cwd): - for file in files: - rel_root = os.path.relpath(root, cwd) - if not rel_root.startswith("build") and not rel_root.startswith("temp") and file.endswith(".asm") and file != "rst.asm" and file != "wram.asm" and file != "zero_checksum.asm": - canonical_path = os.path.join(root, file) - rel_path = os.path.relpath(canonical_path, cwd) - with open(canonical_path, "r") as f: - contents = f.read() - content_lines = contents.splitlines() - - if "SECTION" in contents: - print(canonical_path) - modify_flag = False - skip_next_line = False - for i, line in enumerate(content_lines): - if not skip_next_line: - if line.lstrip().startswith("SECTION"): - modify_flag = True - content_lines[i] = clean_section(content_lines[i], rel_path, contents.count("SECTION") > 1) - elif "if DEBUG" in line: - debug_content_lines = content_lines[i+1:i+5] - debug_code = False - for debug_content_line, debug_line_startswith in zip(debug_content_lines, debug_lines_startswith): - if not debug_content_line.lstrip().startswith(debug_line_startswith): - break - else: - modify_flag = True - content_lines[i] = "; " + content_lines[i] - content_lines[i+1] = clean_section(content_lines[i+1], rel_path, contents.count("SECTION") > 2) - content_lines[i+2] = "; " + content_lines[i+2] - content_lines[i+3] = "; " + content_lines[i+3] - content_lines[i+4] = "; " + content_lines[i+4] - skip_next_line = True - else: - skip_next_line = False - - if modify_flag: - output = "\n".join(content_lines) - print("rel root: " + rel_root) - try: - os.makedirs(TEMP_PATH + rel_root) - except OSError as e: - if e.errno != errno.EEXIST: - raise - - with open(TEMP_PATH + rel_path, "w+") as f: - f.write(output) - -linkerscript_lines = linkerscript.splitlines() - -i = 0 -clean_wram = False - -while i < len(linkerscript_lines): - line = linkerscript_lines[i] - if clean_wram: - if "org $dfff" not in line: - print(linkerscript_lines.pop(i)) - else: - clean_wram = False - i += 1 - elif "\"Shim for " in line: - no_pop_count = 0 - shim_addr = line.replace(", ", " ; ").split(" ; ")[1] - if linkerscript_lines[i-1] == "\torg " + shim_addr and linkerscript_lines[i-1] != "\torg $4000": - print(linkerscript_lines.pop(i-1)) - else: - no_pop_count += 1 - print(linkerscript_lines.pop(i-1 + no_pop_count)) - - if linkerscript_lines[i-1 + no_pop_count] == "\t; " + shim_addr: - print(linkerscript_lines.pop(i-1 + no_pop_count)) - else: - no_pop_count += 1 - - i -= 3 - no_pop_count - print("") - elif "ROMX" in line and "org $4000" not in linkerscript_lines[i+1]: - linkerscript_lines.insert(i+1, "\torg $4000") - i += 1 - elif line.startswith("WRAM0"): - linkerscript_lines.insert(i+1, "\torg $c000") - i += 1 - elif "\"Map Buffer\"" in line: - clean_wram = True - i += 1 - else: - i += 1 - -for i in range(len(linkerscript_lines)): - linkerscript_lines[i] = linkerscript_lines[i].split(" ; ")[0] - -linkerscript = "\n".join(linkerscript_lines) + "\n" - -with open(TEMP_PATH + "pokegold-spaceworld.link", "w+") as f: - f.write(linkerscript)
\ No newline at end of file |