Various improvements
This commit is contained in:
parent
4b0f72856f
commit
6007b23086
|
@ -6,28 +6,20 @@ VANILLA=~/Documents/mac/primary/Sys710x.rdump
|
||||||
SUPERMARIO=~/Documents/mac/supermario/worktree/cube-e
|
SUPERMARIO=~/Documents/mac/supermario/worktree/cube-e
|
||||||
BUILT=$SUPERMARIO/BuildResults/System/System.rdump
|
BUILT=$SUPERMARIO/BuildResults/System/System.rdump
|
||||||
|
|
||||||
WIDTHS="16 32 64"
|
|
||||||
|
|
||||||
MODE=-pj
|
|
||||||
RH="-rh $SUPERMARIO/BuildResults/System/Lib/LinkedPatches.lib"
|
RH="-rh $SUPERMARIO/BuildResults/System/Lib/LinkedPatches.lib"
|
||||||
SH="-sh $SUPERMARIO/BuildResults/System/Text/LinkPatchJumpTbl"
|
SH="-sh $SUPERMARIO/BuildResults/System/Text/LinkPatchJumpTbl"
|
||||||
|
COMMON="-w 16 $RH $SH"
|
||||||
|
|
||||||
for WIDTH in $WIDTHS; do
|
for MODE in pt pm pr pj pjh pp; do
|
||||||
DEST=lpchdmp$WIDTH.txt
|
|
||||||
COLUMN=$((10 + $WIDTH*5/4 + 4))
|
|
||||||
(
|
(
|
||||||
paste \
|
./patch_rip.py -$MODE $COMMON $BUILT >/tmp/elliot-$MODE-lpch
|
||||||
<(./patch_rip.py $VANILLA $MODE -w $WIDTH $RH $SH | cut -c -$(($COLUMN-1)) ) \
|
./patch_rip.py -$MODE $COMMON $VANILLA >/tmp/apple-$MODE-lpch; echo >>/tmp/apple-$MODE-lpch
|
||||||
<(./patch_rip.py $BUILT $MODE -w $WIDTH $RH $SH ) \
|
|
||||||
| expand -t $COLUMN
|
git diff --no-index -U999999999 /tmp/elliot-$MODE-lpch /tmp/apple-$MODE-lpch >lpch-$MODE.patch
|
||||||
)>/tmp/$DEST &
|
true
|
||||||
|
) &
|
||||||
done
|
done
|
||||||
|
|
||||||
for job in `jobs -p`; do
|
for job in `jobs -p`; do
|
||||||
wait $job
|
wait $job
|
||||||
done
|
|
||||||
|
|
||||||
for WIDTH in $WIDTHS; do
|
|
||||||
DEST=lpchdmp$WIDTH.txt
|
|
||||||
mv /tmp/$DEST $DEST
|
|
||||||
done
|
done
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,50 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import re
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description='''
|
||||||
|
Determine the order in which various object files make jmpROM, jsrROM etc calls.
|
||||||
|
This is relevant to matching up the link order with the linkedpatch ROM bind order
|
||||||
|
''')
|
||||||
|
|
||||||
|
parser.add_argument('src', action='store', nargs='+', help='Object files')
|
||||||
|
parser.add_argument('-1', action='store_true', dest='onlyonce', help='Mention each rom reference only once')
|
||||||
|
parser.add_argument('-f', '--filter', action='store', dest='filter', help='List of truly included ROM reference names (one per line)')
|
||||||
|
parser.add_argument('-n', '--number', action='store', dest='number', type=int, help='lpch resource number (helps sub-filter -f)')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
every = None
|
||||||
|
right_number = True
|
||||||
|
if args.number: right_number = False
|
||||||
|
if args.filter:
|
||||||
|
every = set()
|
||||||
|
for l in open(args.filter):
|
||||||
|
if args.number:
|
||||||
|
if 'lpch %d' % args.number in l:
|
||||||
|
right_number = True
|
||||||
|
elif 'lpch ' in l:
|
||||||
|
right_number = False
|
||||||
|
l = l.partition(';')[0].split()
|
||||||
|
if len(l) == 1:
|
||||||
|
if right_number:
|
||||||
|
name = l[0]
|
||||||
|
every.add(name)
|
||||||
|
|
||||||
|
already = set()
|
||||||
|
for src_path in args.src:
|
||||||
|
if not args.onlyonce: already = set()
|
||||||
|
|
||||||
|
obj_file = open(src_path, 'rb').read()
|
||||||
|
if obj_file.startswith(b'\x01'):
|
||||||
|
didprint = False
|
||||||
|
for m in re.finditer(rb'ROM\$([_A-Za-z][_A-Za-z0-9@%]*)\$', obj_file):
|
||||||
|
rom_name = m.group(1).decode('mac_roman')
|
||||||
|
if (every is None or rom_name in every) and rom_name not in already:
|
||||||
|
if not didprint:
|
||||||
|
print(path.basename(src_path))
|
||||||
|
didprint = True
|
||||||
|
already.add(rom_name)
|
||||||
|
print(' ' + rom_name)
|
23
patch_rip.py
23
patch_rip.py
|
@ -17,10 +17,10 @@ COND_NAMES = ['Plus', 'SE', 'II', 'Portable', 'IIci', 'SuperMario',
|
||||||
|
|
||||||
global_sym_names = {}
|
global_sym_names = {}
|
||||||
def name(jt_offset):
|
def name(jt_offset):
|
||||||
retval = 'R%03X' % jt_offset
|
retval = '%03X' % jt_offset
|
||||||
betterval = global_sym_names.get(jt_offset, None)
|
betterval = global_sym_names.get(jt_offset, None)
|
||||||
if betterval:
|
if betterval:
|
||||||
return retval + '/' + betterval
|
return retval + ' ' + betterval
|
||||||
else:
|
else:
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
|
@ -147,6 +147,7 @@ parser.add_argument('-pt', action='store_true', help='Print raw module tokens')
|
||||||
parser.add_argument('-pm', action='store_true', help='Print information about modules and code references')
|
parser.add_argument('-pm', action='store_true', help='Print information about modules and code references')
|
||||||
parser.add_argument('-pr', action='store_true', help='Print information about ROM references')
|
parser.add_argument('-pr', action='store_true', help='Print information about ROM references')
|
||||||
parser.add_argument('-pj', action='store_true', help='Print jump table')
|
parser.add_argument('-pj', action='store_true', help='Print jump table')
|
||||||
|
parser.add_argument('-pjh', action='store_true', help='Print jump table (hex)')
|
||||||
parser.add_argument('-pp', action='store_true', help='Print patch names')
|
parser.add_argument('-pp', action='store_true', help='Print patch names')
|
||||||
parser.add_argument('-rh', action='store', help='LinkedPatches.lib, so we know how to name ROM references')
|
parser.add_argument('-rh', action='store', help='LinkedPatches.lib, so we know how to name ROM references')
|
||||||
parser.add_argument('-sh', action='store', help='output of LinkedPatch -l, so we know how to name symbols')
|
parser.add_argument('-sh', action='store', help='output of LinkedPatch -l, so we know how to name symbols')
|
||||||
|
@ -265,7 +266,8 @@ for num, data in lpch_list:
|
||||||
rom_table.append(romofs_pairs)
|
rom_table.append(romofs_pairs)
|
||||||
|
|
||||||
if args.pr:
|
if args.pr:
|
||||||
print(','.join('(%s,$%x)' % (k, v) for k, v in romofs_pairs))
|
rom_lookup_name = ','.join('(%s,$%x)' % (k, v) for k, v in romofs_pairs)
|
||||||
|
print(global_romref_names.get(rom_lookup_name, rom_lookup_name))
|
||||||
|
|
||||||
if the_int & 0x800000:
|
if the_int & 0x800000:
|
||||||
break
|
break
|
||||||
|
@ -474,14 +476,16 @@ for el in large_rom_table:
|
||||||
|
|
||||||
|
|
||||||
if args.pp:
|
if args.pp:
|
||||||
for jt, v in patches.items():
|
for jt, v in sorted(patches.items()):
|
||||||
for trap, cond_names in v:
|
for trap, cond_names in v:
|
||||||
print(f' MakePatch {name(jt)}, _{trap:04X}, ({cond_names})')
|
print(f' MakePatch {name(jt)}, _{trap:04X}, ({cond_names})')
|
||||||
|
|
||||||
|
|
||||||
if args.pj:
|
if args.pj or args.pjh:
|
||||||
nums = [num for num, data in lpch_list]
|
nums = [num for num, data in lpch_list]
|
||||||
|
|
||||||
|
CHARWID = 2.5 if args.pjh else 1 # for hex
|
||||||
|
|
||||||
def render_line(ofs, line):
|
def render_line(ofs, line):
|
||||||
return '%05x: %s' % (ofs, line)
|
return '%05x: %s' % (ofs, line)
|
||||||
|
|
||||||
|
@ -494,15 +498,18 @@ if args.pj:
|
||||||
if not line:
|
if not line:
|
||||||
print('expected', stop, 'got', len(code))
|
print('expected', stop, 'got', len(code))
|
||||||
raise ValueError()
|
raise ValueError()
|
||||||
line = bytes(x if (32 < x and x != 127 and x != 0xF0 and x < 127) else 46 for x in line).decode('mac_roman')
|
if args.pjh:
|
||||||
line = ' ' * (ofs % args.width) + line
|
line = ' '.join(line[o:o+2].hex() for o in range(0, len(line), 2))
|
||||||
|
else:
|
||||||
|
line = bytes(x if (32 < x and x != 127 and x != 0xF0 and x < 127) else 46 for x in line).decode('mac_roman')
|
||||||
|
line = ' ' * int(CHARWID * (ofs % args.width)) + line
|
||||||
|
|
||||||
yield render_line(ofs, line)
|
yield render_line(ofs, line)
|
||||||
|
|
||||||
ofs = ofs2
|
ofs = ofs2
|
||||||
|
|
||||||
def render_offset(ofs, line):
|
def render_offset(ofs, line):
|
||||||
return '%05x: %s%s' % (ofs, ' ' * (ofs % args.width), line)
|
return '%05x: %s%s' % (ofs, ' ' * int(CHARWID * (ofs % args.width)), line)
|
||||||
|
|
||||||
def render_sep(ofs):
|
def render_sep(ofs):
|
||||||
return '%05x: %s' % (ofs, '=' * args.width)
|
return '%05x: %s' % (ofs, '=' * args.width)
|
||||||
|
|
Loading…
Reference in New Issue