Updated with new tools and texture generation

This commit is contained in:
David Benepe
2020-06-12 17:09:01 -05:00
parent 4d038b42a5
commit d2c942115b
36 changed files with 23185 additions and 2897 deletions
+41 -6
View File
@@ -1,13 +1,20 @@
import re
import os
from file_util import FileUtil
# Possible TODO: Move generating assets.s into a seperate python script.
LD_NAME = 'dkr.ld'
ASM_DIR = './asm'
ASSETS_S_FILENAME = './asm/assets/assets.s'
ASSETS_DIR = './assets/us_1.0'
ASSETS_START = 0x0D8200
class LD:
def __init__(self, file):
print('Generating linker file...')
self.generate_assets_file()
self.files = self.get_asm_files()
self.indentLevel = 0
self.file = file
@@ -18,7 +25,7 @@ class LD:
#self.gen_macros()
self.gen_sections()
print('New linker file created!')
def gen_macros(self):
self.gen_line('#define BEGIN_SEG(name, addr) \\')
self.increase_indent()
@@ -57,9 +64,8 @@ class LD:
def gen_main_section(self):
self.gen_line('.main 0x80000400 : AT(romPos) SUBALIGN(16)')
self.gen_open_block()
self.files.sort(key = lambda x: x[2]) # Sort tuples by RAM address
for asmFile in self.files:
self.gen_line(asmFile[0] + '.o(.text);')
self.gen_line(asmFile[0] + '(.text);')
self.gen_close_block()
self.gen_line('romPos += SIZEOF(.main);')
self.gen_newline()
@@ -111,11 +117,11 @@ class LD:
def gen_newline(self):
self.file.write('\n')
def get_asm_files(self):
asmFiles = []
asmFilenames = FileUtil.get_filenames_from_directory(ASM_DIR, ('.s',))
regex = r'[\/][*]\s*([0-9A-F]{6})\s*([0-9A-F]{8})\s*([0-9A-F]{8})\s*[*][\/]'
regex = r'[\/][*]\s*([0-9A-Fa-f]{6})\s*([0-9A-Fa-f]{8})\s*([0-9A-Fa-f]{8})\s*[*][\/]'
for filename in asmFilenames:
with open(ASM_DIR + '/' + filename, 'r') as asmFile:
notDone = True
@@ -126,9 +132,38 @@ class LD:
line = asmFile.readline()
continue
matchedGroups = matches.groups()
asmFiles.append(('build/asm/' + filename[:-2], matchedGroups[0], matchedGroups[1]))
asmFiles.append(('build/asm/' + filename[:-2] + '.o', matchedGroups[0], matchedGroups[1]))
break
asmFiles.sort(key = lambda x: x[2]) # Sort tuples by RAM address
return asmFiles
def get_asset_files(self):
assetFiles = []
assetFilenames = FileUtil.getListOfFiles(ASSETS_DIR)
regex = r'[.][\/]assets[\/][^\/]*[\/]([^\/]*[\/][^.]*)[.](([.]?[^.]*)+)([.][A-Za-z0-9_]*)'
for filename in assetFilenames:
matches = re.match(regex, filename)
if matches is None:
raise Exception('Invalid filename: \"' + filename + '"')
matchedGroups = matches.groups()
fileExtension = matchedGroups[3]
fileProperties = matchedGroups[1].split('.')
if fileExtension == '.png' and int(fileProperties[1]) != 0:
continue
ramAddress = fileProperties[0]
outFilename = 'build/' + matchedGroups[0] + '.' + matchedGroups[1] + '.bin'
if int(ramAddress, 16) >= ASSETS_START:
assetFiles.append((outFilename, ramAddress, fileExtension))
assetFiles.sort(key = lambda x: x[1]) # Sort tuples by RAM address
return assetFiles
def generate_assets_file(self):
assets = self.get_asset_files()
assetsText = '# This file was generated by generate_ld.py\n\n'
for asset in assets:
assetsText += '.incbin "./' + asset[0] + '"\n'
with open(ASSETS_S_FILENAME, "w") as assetsFile:
assetsFile.write(assetsText)
with open(LD_NAME, 'w') as ldFile: