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()