77 lines
1.8 KiB
Python
77 lines
1.8 KiB
Python
import sys
|
|
f = list(open(sys.argv[1], "rb").read())[2:]
|
|
|
|
out = f[:(0x4711-0x2000)]
|
|
|
|
a = open(sys.argv[2],"r").read().split("\n")
|
|
a = [x for x in a if x != ""]
|
|
a = [x.split(",")[1] for x in a[:-1]]
|
|
|
|
frame = []
|
|
frame_dict = {}
|
|
|
|
cnt = 0
|
|
def append_frame(frame):
|
|
global cnt
|
|
if cnt < len(a):
|
|
filename_csv = a[cnt]
|
|
if filename_csv not in frame_dict:
|
|
frame_dict[filename_csv] = []
|
|
for d in frame:
|
|
if d not in frame_dict[filename_csv]:
|
|
frame_dict[filename_csv].append(d)
|
|
else:
|
|
print(cnt, len(a))
|
|
cnt += 1
|
|
|
|
ptr = 0x4711-0x2000
|
|
while ptr < len(f):
|
|
num_chars = f[ptr]
|
|
#print(ptr,len(f),num_chars)
|
|
ptr += 1
|
|
if num_chars == 0:
|
|
delay = f[ptr]
|
|
ptr += 1
|
|
append_frame(frame)
|
|
frame = []
|
|
continue
|
|
elif num_chars == 0xFF:
|
|
append_frame(frame)
|
|
break
|
|
bitmap = (f[ptr]|(f[ptr+1]<<8))+0x2000
|
|
ptr += 2
|
|
screen = (f[ptr]|(f[ptr+1]<<8))+0x400
|
|
cram = (f[ptr]|(f[ptr+1]<<8))+0xd800
|
|
ptr += 2
|
|
for i in range(num_chars):
|
|
frame.append([bitmap,f[ptr:ptr+8]])
|
|
ptr += 8
|
|
frame.append([screen,f[ptr]])
|
|
frame.append([cram,f[ptr+1]])
|
|
ptr += 2
|
|
bitmap += 8
|
|
screen += 1
|
|
cram += 1
|
|
|
|
out_pat_addr = len(out)
|
|
out.extend([0]*(len(a)*3))
|
|
|
|
frame_dict_offs = []
|
|
for i in frame_dict:
|
|
frame_dict_offs.append(len(out))
|
|
sort_dict = sorted([x for x in frame_dict[i]], key=lambda x : x[0])
|
|
print(sort_dict)
|
|
for j in sort_dict:
|
|
out.append(j[0]&0xff)
|
|
out.append(j[0]>>8&0xff)
|
|
if type(j[1]) == list:
|
|
out.extend(j[1])
|
|
else:
|
|
out.append(j[1])
|
|
|
|
#print(out)
|
|
|
|
print(hex(0x2000+len(out)))
|
|
f = open(sys.argv[3],"wb")
|
|
f.write(bytearray(out))
|
|
f.close() |