| #!/usr/bin/env python3 | 
 | # -*- coding: utf-8 -*- | 
 | # | 
 | # Copyright (C) 2017-2020  The Project X-Ray Authors. | 
 | # | 
 | # Use of this source code is governed by a ISC-style | 
 | # license that can be found in the LICENSE file or at | 
 | # https://opensource.org/licenses/ISC | 
 | # | 
 | # SPDX-License-Identifier: ISC | 
 |  | 
 | from prjxray import bitsmaker | 
 |  | 
 |  | 
 | def run( | 
 |         bits_fn, | 
 |         design_fn, | 
 |         fnout, | 
 |         oneval, | 
 |         dframe, | 
 |         auto_frame, | 
 |         dword, | 
 |         dbit, | 
 |         multi=False, | 
 |         verbose=False): | 
 |     # mimicing tag names, wasn't sure if it would break things otherwise | 
 |     metastr = "DWORD:%u" % dword | 
 |     if dbit is not None: | 
 |         metastr += ".DBIT:%u" % dbit | 
 |     if dframe is not None: | 
 |         metastr += ".DFRAME:%02x" % dframe | 
 |     if multi: | 
 |         metastr += ".MULTI" | 
 |     if auto_frame: | 
 |         metastr += ".AUTO_FRAME" | 
 |  | 
 |     tags = dict() | 
 |     f = open(design_fn, 'r') | 
 |     f.readline() | 
 |     for l in f: | 
 |         l = l.strip() | 
 |         # Additional values reserved / for debugging | 
 |         tile, val = l.split(',')[0:2] | 
 |         tags["%s.%s" % (tile, metastr)] = val == oneval | 
 |  | 
 |     bitsmaker.write(bits_fn, fnout, tags) | 
 |  | 
 |  | 
 | def main(): | 
 |     import argparse | 
 |  | 
 |     parser = argparse.ArgumentParser( | 
 |         description= | 
 |         "Solve bits (like segmaker) on raw .bits file without segments") | 
 |     parser.add_argument("--bits-file", default="design.bits", help="") | 
 |     parser.add_argument("--verbose", action="store_true", help="") | 
 |     parser.add_argument("--design", default="design.csv", help="") | 
 |     parser.add_argument("--fnout", default="/dev/stdout", help="") | 
 |     parser.add_argument( | 
 |         "--oneval", | 
 |         required=True, | 
 |         help="Parameter value that correspodns to a set bit") | 
 |     # | 
 |     parser.add_argument( | 
 |         "--multi", action="store_true", help="Are multiple bits expected?") | 
 |     parser.add_argument( | 
 |         "--dframe", | 
 |         type=str, | 
 |         required=False, | 
 |         default="", | 
 |         help="Reference frame delta (base 16)") | 
 |     parser.add_argument( | 
 |         "--auto-frame", | 
 |         action='store_true', | 
 |         help="Auto align frame address to next lowest multiple of 0x80") | 
 |     parser.add_argument( | 
 |         "--dword", | 
 |         type=str, | 
 |         required=True, | 
 |         help="Reference word delta (base 10)") | 
 |     parser.add_argument( | 
 |         "--dbit", | 
 |         type=str, | 
 |         required=False, | 
 |         default="", | 
 |         help="Reference bit delta (base 10)") | 
 |     args = parser.parse_args() | 
 |  | 
 |     run( | 
 |         args.bits_file, | 
 |         args.design, | 
 |         args.fnout, | 
 |         args.oneval, | 
 |         None if args.dframe == "" else int(args.dframe, 16), | 
 |         args.auto_frame, | 
 |         int(args.dword, 10), | 
 |         None if args.dbit == "" else int(args.dbit, 10), | 
 |         multi=args.multi, | 
 |         verbose=args.verbose) | 
 |  | 
 |  | 
 | if __name__ == "__main__": | 
 |     main() |