mirror of
https://gitlab.com/zephray/glider.git
synced 2025-08-01 20:13:40 +00:00
Add tool for converting 5bpp wvfm to 4bpp
This commit is contained in:
parent
1742a77511
commit
51c6e84ec9
1 changed files with 87 additions and 0 deletions
87
utils/waveform_5bpp_to_4bpp/convert.py
Normal file
87
utils/waveform_5bpp_to_4bpp/convert.py
Normal file
|
@ -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()
|
Loading…
Add table
Add a link
Reference in a new issue