gigatron/rom/Compilers/glcc/stuff/mscp/addbook.py
2025-01-28 19:17:01 +03:00

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: