mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Updated with new tools and texture generation
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user