diff options
| author | Jordan Wiens <jordan@psifertex.com> | 2019-08-19 06:04:49 +0200 |
|---|---|---|
| committer | Jordan Wiens <jordan@psifertex.com> | 2019-08-19 06:04:49 +0200 |
| commit | 614ad620540ec271d08de6b4843949de4368df7a (patch) | |
| tree | b466ca73cd15082e6efb0da90e78b25237161c7f /python/examples | |
| parent | 2cb81a1d1d4384dcb129ca0c05f15d56cfff3408 (diff) | |
update nes example plugin for python3 support
Diffstat (limited to 'python/examples')
| -rw-r--r-- | python/examples/nes.py | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/python/examples/nes.py b/python/examples/nes.py index 305ebc43..f5b8c351 100644 --- a/python/examples/nes.py +++ b/python/examples/nes.py @@ -406,7 +406,7 @@ class M6502(Architecture): def decode_instruction(self, data, addr): if len(data) < 1: return None, None, None, None - opcode = ord(data[0]) + opcode = ord(data[0:1]) instr = InstructionNames[opcode] if instr is None: return None, None, None, None @@ -419,9 +419,9 @@ class M6502(Architecture): if OperandLengths[operand] == 0: value = None elif operand == REL: - value = (addr + 2 + struct.unpack("b", data[1])[0]) & 0xffff + value = (addr + 2 + struct.unpack("b", data[1:2])[0]) & 0xffff elif OperandLengths[operand] == 1: - value = ord(data[1]) + value = ord(data[1:2]) else: value = struct.unpack("<H", data[1:3])[0] @@ -444,7 +444,7 @@ class M6502(Architecture): elif instr in ["rti", "rts"]: result.add_branch(BranchType.FunctionReturn) if instr in ["bcc", "bcs", "beq", "bmi", "bne", "bpl", "bvc", "bvs"]: - dest = (addr + 2 + struct.unpack("b", data[1])[0]) & 0xffff + dest = (addr + 2 + struct.unpack("b", data[1:2])[0]) & 0xffff result.add_branch(BranchType.TrueBranch, dest) result.add_branch(BranchType.FalseBranch, addr + 2) return result @@ -484,12 +484,12 @@ class M6502(Architecture): return Architecture.get_flag_write_low_level_il(self, op, size, write_type, flag, operands, il) def is_never_branch_patch_available(self, data, addr): - if (data[0] == "\x10") or (data[0] == "\x30") or (data[0] == "\x50") or (data[0] == "\x70") or (data[0] == "\x90") or (data[0] == "\xb0") or (data[0] == "\xd0") or (data[0] == "\xf0"): + if (data[0:1] == b"\x10") or (data[0:1] == b"\x30") or (data[0:1] == b"\x50") or (data[0:1] == b"\x70") or (data[0:1] == b"\x90") or (data[0:1] == b"\xb0") or (data[0:1] == b"\xd0") or (data[0:1] == b"\xf0"): return True return False def is_invert_branch_patch_available(self, data, addr): - if (data[0] == "\x10") or (data[0] == "\x30") or (data[0] == "\x50") or (data[0] == "\x70") or (data[0] == "\x90") or (data[0] == "\xb0") or (data[0] == "\xd0") or (data[0] == "\xf0"): + if (data[0:1] == b"\x10") or (data[0:1] == b"\x30") or (data[0:1] == b"\x50") or (data[0:1] == b"\x70") or (data[0:1] == b"\x90") or (data[0:1] == b"\xb0") or (data[0:1] == b"\xd0") or (data[0:1] == b"\xf0"): return True return False @@ -497,28 +497,28 @@ class M6502(Architecture): return False def is_skip_and_return_zero_patch_available(self, data, addr): - return (data[0] == "\x20") and (len(data) == 3) + return (data[0:1] == b"\x20") and (len(data) == 3) def is_skip_and_return_value_patch_available(self, data, addr): - return (data[0] == "\x20") and (len(data) == 3) + return (data[0:1] == b"\x20") and (len(data) == 3) def convert_to_nop(self, data, addr): - return "\xea" * len(data) + return b"\xea" * len(data) def never_branch(self, data, addr): - if (data[0] == "\x10") or (data[0] == "\x30") or (data[0] == "\x50") or (data[0] == "\x70") or (data[0] == "\x90") or (data[0] == "\xb0") or (data[0] == "\xd0") or (data[0] == "\xf0"): - return "\xea" * len(data) + if (data[0:1] == b"\x10") or (data[0:1] == b"\x30") or (data[0:1] == b"\x50") or (data[0:1] == b"\x70") or (data[0:1] == b"\x90") or (data[0:1] == b"\xb0") or (data[0:1] == b"\xd0") or (data[0:1] == b"\xf0"): + return b"\xea" * len(data) return None def invert_branch(self, data, addr): - if (data[0] == "\x10") or (data[0] == "\x30") or (data[0] == "\x50") or (data[0] == "\x70") or (data[0] == "\x90") or (data[0] == "\xb0") or (data[0] == "\xd0") or (data[0] == "\xf0"): - return chr(ord(data[0]) ^ 0x20) + data[1:] + if (data[0:1] == b"\x10") or (data[0:1] == b"\x30") or (data[0:1] == b"\x50") or (data[0:1] == b"\x70") or (data[0:1] == b"\x90") or (data[0:1] == b"\xb0") or (data[0:1] == b"\xd0") or (data[0:1] == b"\xf0"): + return chr(ord(data[0:1]) ^ 0x20) + data[1:] return None def skip_and_return_value(self, data, addr, value): - if (data[0] != "\x20") or (len(data) != 3): + if (data[0:1] != b"\x20") or (len(data) != 3): return None - return "\xa9" + chr(value & 0xff) + "\xea" + return b"\xa9" + chr(value & 0xff) + b"\xea" class NESView(BinaryView): @@ -534,9 +534,9 @@ class NESView(BinaryView): hdr = data.read(0, 16) if len(hdr) < 16: return False - if hdr[0:4] != "NES\x1a": + if hdr[0:4] != b"NES\x1a": return False - rom_banks = struct.unpack("B", hdr[4])[0] + rom_banks = struct.unpack("B", hdr[4:5])[0] if rom_banks < (self.bank + 1): return False return True @@ -544,11 +544,11 @@ class NESView(BinaryView): def init(self): try: hdr = self.parent_view.read(0, 16) - self.rom_banks = struct.unpack("B", hdr[4])[0] - self.vrom_banks = struct.unpack("B", hdr[5])[0] - self.rom_flags = struct.unpack("B", hdr[6])[0] - self.mapper_index = struct.unpack("B", hdr[7])[0] | (self.rom_flags >> 4) - self.ram_banks = struct.unpack("B", hdr[8])[0] + self.rom_banks = struct.unpack("B", hdr[4:5])[0] + self.vrom_banks = struct.unpack("B", hdr[5:6])[0] + self.rom_flags = struct.unpack("B", hdr[6:7])[0] + self.mapper_index = struct.unpack("B", hdr[7:8])[0] | (self.rom_flags >> 4) + self.ram_banks = struct.unpack("B", hdr[8:9])[0] self.rom_offset = 16 if self.rom_flags & 4: self.rom_offset += 512 @@ -610,9 +610,10 @@ class NESView(BinaryView): self.file.filename + ".%x.nl" % (self.rom_banks - 1)] for f in sym_files: if os.path.exists(f): - sym_contents = open(f, "r").read() - lines = sym_contents.split('\n') + with open(f, "r") as f: + lines = f.readlines() for line in lines: + line = line.strip() sym = line.split('#') if len(sym) < 3: break |
