73 lines
2 KiB
Python
73 lines
2 KiB
Python
#!/usr/bin/env python
|
|
from struct import unpack
|
|
from collections import defaultdict
|
|
|
|
def print_compare(vals):
|
|
for ino, (v, i) in enumerate(zip(vals, intrinsics)):
|
|
print("%s: (Int%03X) %s" % (v, ino, i))
|
|
|
|
def load_vals(off_file):
|
|
f = open(off_file, "rb")
|
|
offsets = f.read()
|
|
nints = len(offsets)/4
|
|
ioff = unpack('i' * nints, offsets)
|
|
data = []
|
|
n = 0
|
|
for i in ioff:
|
|
seg = (i & 0xffff0000) >> 16
|
|
off = i & 0xffff
|
|
data.append((seg, off, n))
|
|
n = n + 1
|
|
return data
|
|
|
|
|
|
def main():
|
|
#new_data = load_vals("remorse_fr_UNKCOFF.DAT")
|
|
#old_data = load_vals("remorse_UNKCOFF.DAT")
|
|
#fn_names = open('rem_functions.txt').readlines()
|
|
new_data = load_vals("regret_demo_UNKCOFF.DAT")
|
|
old_data = load_vals("regret_UNKCOFF.DAT")
|
|
fn_names = open('reg_functions.txt').readlines()
|
|
|
|
seg_off = 0
|
|
|
|
fn_lookup = {(seg, off): n for seg, off, n in old_data}
|
|
|
|
used = { }
|
|
j = 0
|
|
|
|
for seg, off, n in new_data:
|
|
if n % 16 == 0:
|
|
print('// 0x%03X' % n)
|
|
|
|
x = None
|
|
|
|
if x is None:
|
|
x = fn_lookup.get((seg + seg_off, off))
|
|
if x is None:
|
|
x = fn_lookup.get((seg, off))
|
|
if x is None:
|
|
for i in range(-5, 5):
|
|
x = fn_lookup.get((seg + seg_off, off + i))
|
|
if x:
|
|
break
|
|
if x is None:
|
|
for i in range(-15, 15):
|
|
x = fn_lookup.get((seg + seg_off, off + i))
|
|
if x:
|
|
break
|
|
|
|
seg_pretty = 0x1000 + (seg - 1)*8
|
|
if x is None:
|
|
print('Intrinsic%03X %04x:%04x' % (n, seg_pretty, off))
|
|
else:
|
|
if x in used and used[x] != (seg_pretty, off):
|
|
print('** WARNING: %04x:%04x looked up to %s already used by %04x:%04x' %
|
|
(seg_pretty, off, fn_names[x].strip(), used[x][0], used[x][1]))
|
|
used[x] = (seg_pretty, off)
|
|
|
|
print('%-31s // Intrinsic%03X %04x:%04x' % (fn_names[x].strip() + ',', n, seg_pretty, off))
|
|
|
|
|
|
|
|
main()
|