33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
import sys, struct
|
|
patchfp = open(sys.argv[1], 'rb')
|
|
|
|
def read(f, size):
|
|
result = f.read(size)
|
|
if len(result) != size: raise Exception('truncated')
|
|
return result
|
|
|
|
print '#define P32(a, b) *((volatile unsigned int *) a) = b;'
|
|
print '#define P8(a, b) *((volatile unsigned char *) a) = b;'
|
|
|
|
while True:
|
|
namelen = patchfp.read(4)
|
|
if len(namelen) == 0: break
|
|
if len(namelen) != 4: raise Exception('truncated')
|
|
name = read(patchfp, struct.unpack('I', namelen)[0])
|
|
addr, = struct.unpack('I', read(patchfp, 4))
|
|
data = read(patchfp, struct.unpack('I', read(patchfp, 4))[0])
|
|
if name == 'sysent patch':
|
|
sysent_patch, = struct.unpack('I', data)
|
|
elif name == 'sysent patch orig':
|
|
sysent_patch_orig, = struct.unpack('I', data)
|
|
elif name == 'scratch':
|
|
scratch, = struct.unpack('I', data)
|
|
if addr == 0 or len(data) == 0:
|
|
continue
|
|
|
|
print '// %s' % name
|
|
for b in xrange(0, len(data) - 3, 4):
|
|
print 'P32(0x%x, 0x%x);' % (addr + b, struct.unpack('I', data[b:b+4])[0])
|
|
for b in xrange(b + 4, len(data)):
|
|
print 'P8(0x%x, 0x%x);' % (addr + b, ord(data[b]))
|