diff --git a/utils/waveform_5bpp_to_4bpp/convert.py b/utils/waveform_5bpp_to_4bpp/convert.py new file mode 100644 index 0000000..ee5cea6 --- /dev/null +++ b/utils/waveform_5bpp_to_4bpp/convert.py @@ -0,0 +1,87 @@ +import configparser +import argparse +import csv +import os + +def process_table(fn, newfn): + table = {} + with open(fn, newline='') as csvfile: + csvreader = csv.reader(csvfile, delimiter=',') + for row in csvreader: + src = row[0] + dst = row[1] + seq = row[2:-1] + table[f'{src}_{dst}'] = seq + newtable = {} + # We drop all odd numbered entries + for src in range(16): + for dst in range(16): + seq = table[f'{src*2}_{dst*2}'] + newtable[f'{src}_{dst}'] = seq + with open(newfn, 'w') as csvfile: + for src in range(16): + for dst in range(16): + csvfile.write(f'{src},{dst},{','.join(newtable[f'{src}_{dst}'])}\n') + +def main(): + parser = argparse.ArgumentParser(prog='wvfm_converter') + parser.add_argument('filename') + args = parser.parse_args() + config = configparser.ConfigParser() + config.read(args.filename) + #print(config.sections()) + + version = config['WAVEFORM']['VERSION'] + if version != '2.0': + raise Exception("Unsupported") + prefix = config['WAVEFORM']['PREFIX'] + # name = config['WAVEFORM']['NAME'] + bpp = int(config['WAVEFORM']['BPP']) + if bpp != 5: + raise Exception("Input needs to be an 5bpp waveform") + modes = int(config['WAVEFORM']['MODES']) + temps = int(config['WAVEFORM']['TEMPS']) + tables = int(config['WAVEFORM']['TABLES']) + + # Get all framecounts + # fc = [] + # for i in range(tables): + # fc.append(config['WAVEFORM'][f'TB{i}FC']) + + # trange = [] + # for i in range(temps): + # trange.append(config['WAVEFORM'][f'T{i}RANGE']) + + dirname = os.path.dirname(os.path.abspath(args.filename)) + + for i in range(tables): + oldname = f'{prefix}_TB{i}.csv' + newname = f'{prefix}_4bpp_TB{i}.csv' + process_table(os.path.join(dirname, oldname), + os.path.join(dirname, newname)) + + with open(os.path.join(dirname, f'{prefix}_4bpp_desc.iwf'), 'w') as fp: + fp.write('[WAVEFORM]\n') + fp.write('VERSION = 2.0\n') + fp.write(f'PREFIX = {prefix}_4bpp\n') + fp.write(f'NAME = {config['WAVEFORM']['NAME']}\n') + fp.write(f'BPP = 4\n') + fp.write(f'MODES = {modes}\n') + fp.write(f'TEMPS = {temps}\n') + fp.write(f'TABLES = {tables}\n') + fp.write('\n') + for i in range(temps): + fp.write(f'T{i}RANGE = {config['WAVEFORM'][f'T{i}RANGE']}\n') + fp.write('\n') + for i in range(tables): + fp.write(f'TB{i}FC = {config['WAVEFORM'][f'TB{i}FC']}\n') + fp.write('\n') + for i in range(modes): + fp.write(f'[MODE{i}]\n') + fp.write(f'NAME = {config[f'MODE{i}']['NAME']}\n') + for j in range(temps): + fp.write(f'T{j}TABLE = {config[f'MODE{i}'][f'T{j}TABLE']}\n') + fp.write('\n') + +if __name__ == "__main__": + main() \ No newline at end of file