Esempio n. 1
0
def do_patch_cmd(args):
  img = args.image
  logging.info("loading ROM from '%s'", img)
  rom = KickRom.Loader.load(img)
  # is kick?
  kh = KickRom.KickRomAccess(rom)
  is_kick = kh.is_kick_rom()
  # apply patches
  rp = RomPatcher(rom)
  for patch in args.patches:
    name, patch_args = KeyValue.parse_name_args_string(patch)
    logging.info("searching patch '%s' -> %s %s", patch, name, patch_args)
    p = rp.find_patch(name)
    if p is None:
      logging.error("can't find patch '%s'", name)
      return 1
    ok = rp.apply_patch(p, patch_args)
    if ok:
      logging.info("applied patch '%s'", name)
    else:
      logging.error("error applying patch '%s'", name)
      return 2
  # update kick sum
  rom_data = rp.get_patched_rom()
  if is_kick:
    kh = KickRom.KickRomAccess(rom_data)
    cs = kh.write_check_sum()
    logging.info("updated kicksum=%08x", cs)
  # save rom
  output = args.output
  if output is not None:
    logging.info("saving ROM to '%s'", output)
    with open(output, "wb") as fh:
      fh.write(rom_data)
  return 0
Esempio n. 2
0
def do_patch_cmd(args):
    img = args.image
    logging.info("loading ROM from '%s'", img)
    rom_img = rom.Loader.load(img)
    # is kick?
    kh = rom.KickRomAccess(rom_img)
    is_kick = kh.is_kick_rom()
    # apply patches
    rp = rom.RomPatcher(rom_img)
    for patch in args.patches:
        name, patch_args = KeyValue.parse_name_args_string(patch)
        logging.info("searching patch '%s' -> %s %s", patch, name, patch_args)
        p = rp.find_patch(name)
        if p is None:
            logging.error("can't find patch '%s'", name)
            return 1
        ok = rp.apply_patch(p, patch_args)
        if ok:
            logging.info("applied patch '%s'", name)
        else:
            logging.error("error applying patch '%s'", name)
            return 2
    # update kick sum
    rom_data = rp.get_patched_rom()
    if is_kick:
        kh = rom.KickRomAccess(rom_data)
        cs = kh.write_check_sum()
        logging.info("updated kicksum=%08x", cs)
    # save rom
    output = args.output
    if output is not None:
        logging.info("saving ROM to '%s'", output)
        with open(output, "wb") as fh:
            fh.write(rom_data)
    return 0