GSCats/ParseMapFile.py

65 lines
1.4 KiB
Python
Executable File

#!/usr/bin/env python3
# Outputs a list of exported symbols found in an ld65 link map file
# suitable for passing as a commandline option to define those
# same symbols in a cl65 compile/assemble operation. This allows
# sharing symbols between code banks without having to actually
# link them together. Sort of a low-budget DLL mechanism. :)
import sys
def parseInputFile(filename,bank):
inputFile = open(filename)
contents = inputFile.readlines()
output = ""
# Find exported symbols
lineNum = 0
for line in contents:
if line.find("Exports list") != -1:
break
lineNum+=1
# Found the exports table, so look for our symbol names
first=1
for line in contents[lineNum+1:]:
if line.startswith("_") or line.startswith("-"):
continue
if line.startswith("Imports") or len(line)<2:
break
if first!=1:
output += ","
first = 0
columns = line.split()
if len(columns) > 3:
output += ("-D,%s=0x%s,-D,%s=0x%s" % (columns[0],bank+columns[1][2:],columns[3],bank+columns[4][2:]))
else:
output += ("-D,%s=0x%s" % (columns[0],bank+columns[1][2:]))
inputFile.close()
return output
def main(argv):
commandline = ""
first=1
for file in argv:
if first!=1:
commandline += ","
first = 0
bank = file[-6:-4] # Assumes filename_XX.map
commandline += parseInputFile(file,bank)
print (commandline)
if __name__ == "__main__":
main(sys.argv[1:])