def disassemble(self, bytes, pc=0, mpu=None):
     if mpu is None:
         mpu = MPU()
     address_parser = AddressParser()
     disasm = Disassembler(mpu, address_parser)
     mpu.memory[pc:len(bytes) - 81] = bytes
     return disasm.instruction_at(pc)
Exemple #2
0
    def __init__(self, filename):
        self.nsf = NSFParser(bytearray(file(filename).read()))

        # Set up Memory with Hooks
        self.mem = ObservableMemory()
        self.mem.write(self.nsf.load_addr, self.nsf.data)
        self.cpu = MPU(self.mem)
        self.deltaCallTime = 0
        self.totalCycles = 0
Exemple #3
0
    def __init__(self):
        self.mem = Memory()
        self.cpu = MPU()
        self.patches = Patches()
        self.dis = Disassembler(self.cpu)

        pc_low = self.mem[0xfffc]
        pc_hi = self.mem[0xfffd]

        self.cpu.memory = self.mem
        self.cpu.pc = (pc_hi << 8) + pc_low

        self.trace = False
    def _dont_test_disassemble_wraps_after_top_of_mem(self):
        '''
        TODO: This test fails with IndexError.  We should fix this
        so that it does not attempt to index memory out of range.
        It does not affect most Py65 users because py65mon uses
        ObservableMemory, which does not raise IndexError.
        '''
        mpu = MPU()
        mpu.memory[0xFFFF] = 0x20  # JSR
        mpu.memory[0x0000] = 0xD2  #
        mpu.memory[0x0001] = 0xFF  # $FFD2

        dis = Disassembler(mpu)
        length, disasm = dis.instruction_at(0xFFFF)
        self.assertEqual(3, length)
        self.assertEqual('JSR $ffd2', disasm)
Exemple #5
0
 def assemble(self, statement, pc=0000, mpu=None):
     if mpu is None:
         mpu = MPU()
     address_parser = AddressParser()
     assembler = Assembler(mpu, address_parser)
     return assembler.assemble(statement, pc)
Exemple #6
0
 def setUp(self):
     self.cpu = MPU()
Exemple #7
0
 def test_ctor_uses_bus_width_from_mpu(self):
     asm = Assembler(MPU())
     self.assertEqual(16, asm.addrWidth)
     asm = Assembler(MPU65Org16())
     self.assertEqual(32, asm.addrWidth)
Exemple #8
0
 def test_ctor_optionally_creates_address_parser(self):
     mpu = MPU()
     asm = Assembler(mpu)
     self.assertFalse(asm._address_parser is None)
Exemple #9
0
 def test_ctor_uses_provided_mpu_and_address_parser(self):
     mpu = MPU()
     address_parser = AddressParser()
     asm = Assembler(mpu, address_parser)
     self.assertTrue(asm._mpu is mpu)
     self.assertTrue(asm._address_parser is address_parser)
Exemple #10
0
 def assemble(self, statement, pc=0000):
     mpu = MPU()
     address_parser = AddressParser()
     assembler = Assembler(mpu, address_parser)
     return assembler.assemble(statement, pc)
Exemple #11
0
 def reset(self):
     self.cpu = MPU()
     self.start_addr = 0
     self.stop_addr = 0
     self.paused = False
     self.step = False
Exemple #12
0
 def disassemble(self, bytes):
     mpu = MPU()
     address_parser = AddressParser()
     disasm = Disassembler(mpu, address_parser)
     mpu.memory[0:len(bytes)-1] = bytes
     return disasm.instruction_at(0)
 def setUp(self):
     self.cpu = MPU()
     print(self.cpu)
Exemple #14
0
 def __init__(self):
     self.mpu = MPU()
     self.symtab = symtab.SymTab([])  # symtab initially empty
Exemple #15
0
 def __init__(self):
     super().__init__()
     self.mpu = MPU()
     self.regsobj = self.mpu