Beispiel #1
0
    def __init__(self):
        self.r = [VMGeneralPurposeRegister() for _ in xrange(16)]
        self.fr = 0
        self.sp = self.r[14]
        self.pc = self.r[15]
        self.mem = VMMemory()
        self.terminated = False
        self.opcodes = VM_OPCODES

        self.sp.v = 0x10000
        self.cr = {}

        # Interrupt registers.
        for creg in xrange(self.CREG_INT_FIRST, self.CREG_INT_LAST + 1):
            self.cr[creg] = 0xffffffff

        self.cr[self.CREG_INT_CONTROL] = 0  # Maskable interrupts disabled.

        self.dev_pit = VMDeviceTimer(self)
        self.dev_console = VMDeviceConsole(self)

        self.io = {
            0x20: self.dev_console,
            0x21: self.dev_console,
            0x22: self.dev_console,
            0x70: self.dev_pit,
            0x71: self.dev_pit
        }

        self.interrupt_queue = []
        self.interrupt_queue_mutex = threading.Lock()

        self.defered_queue = collections.deque()