60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
import argparse, os, sys
|
|
|
|
|
|
def hi(addr):
|
|
return (addr >> 8) & 0xff
|
|
|
|
def lo(addr):
|
|
return addr & 0xff
|
|
|
|
def adddata(gt1data,bindata,addr):
|
|
execaddr = gt1data[-3:]
|
|
ngt1 = gt1data[:-3]
|
|
i = 0
|
|
n = len(bindata)
|
|
ngt1 += bytes((hi(addr-2), lo(addr-2), 2, lo(n), hi(n)))
|
|
while i < n:
|
|
l = 256
|
|
if l > n - i:
|
|
l = n - i
|
|
if l > 0x100 - lo(addr):
|
|
l = 0x100 - lo(addr)
|
|
ngt1 += bytes((hi(addr), lo(addr), lo(l)))
|
|
ngt1 += bindata[i:i+l]
|
|
i += l
|
|
addr += l
|
|
ngt1 += execaddr
|
|
return ngt1
|
|
|
|
def addbook(argv):
|
|
try:
|
|
parser = argparse.ArgumentParser(
|
|
usage='addbook --addr=<xxx> <gt1file> <binfile>',
|
|
description='Concatenate binary data to a GT1 file')
|
|
parser.add_argument('gt1', type=str, help='gt1 file')
|
|
parser.add_argument('bin', type=str, help='bin file')
|
|
parser.add_argument('--addr', type=str, help='starting address',
|
|
action='store', default='0xc000' )
|
|
args = parser.parse_args(argv)
|
|
with open(args.gt1,"rb") as fd:
|
|
gt1data = fd.read()
|
|
with open(args.bin,"rb") as fd:
|
|
bindata = fd.read()
|
|
gt1data = adddata(gt1data, bindata, int(args.addr, 0))
|
|
with open(args.gt1,"wb") as fd:
|
|
fd.write(gt1data)
|
|
return 0
|
|
except FileNotFoundError as err:
|
|
print(str(err), file=sys.stderr)
|
|
#except Exception as err:
|
|
# print(repr(err), file=sys.stderr)
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(addbook(sys.argv[1:]))
|
|
|
|
# Local Variables:
|
|
# mode: python
|
|
# indent-tabs-mode: ()
|
|
# End:
|
|
|