def END(self): ''' End task ''' processor.si = 3 kernel.create_resource(InterruptEvent, self, { 'process': self, 'message': 'END event' }) self.state = configs.BLOCKED_STATE kernel.schedule()
def get_real_address_of_ds(self, XY): ''' return real address of offset from data segment ''' XY = to_int(XY) if XY > self.ds_length: processor.pi = 1 kernel.create_resource(InterruptEvent, self, {'process' : self, 'message' : 'invalid data pointer' }) self.state = configs.BLOCKED_STATE kernel.schedule() else: return self.addresses[XY + 1]
def get_real_address_from_cs(self, XY): ''' return real address of offset from code segment''' XY = to_int(XY) if XY > self.cs_length: processor.pi = 1 kernel.create_resource(InterruptEvent, self, {'process' : self, 'message' : 'jumping out of program' }) self.state = configs.BLOCKED_STATE kernel.schedule() else: return self.addresses[self.ds_length + 1 + XY]
def run(self): ''' execute user task until interrupt is encountered ''' self.update() command = user_memory.fetch(self.ic) if command[0:2] == 'LA': self.LA(command[2:4]) elif command[0:2] == 'LB': self.LB(command[2:4]) elif command[0:2] == 'MA': self.MA(command[2:4]) elif command[0:2] == 'MB': self.MB(command[2:4]) elif command[0:2] == 'WS': self.WS(command[2:4]) elif command[0:2] == 'LS': self.LS(command[2:4]) elif command[0:2] == 'JM': self.JM(command[2:4]) elif command[0:2] == 'JL': self.JL(command[2:4]) elif command[0:2] == 'JE': self.JE(command[2:4]) elif command[0:2] == 'PD': pass elif command[0:3] == 'ADD': self.ADD() elif command[0:3] == 'SUB': self.SUB() elif command[0:3] == 'CMP': self.CMP() elif command[0:3] == 'END': self.END() return elif command == 'SWAP': self.SWAP() elif command == 'AXOR': self.AXOR() elif command == 'BXOR': self.BXOR() else: processor.pi = 2 kernel.create_resource(InterruptEvent, self, {'process' : self, 'message' : str(command) }) self.state = configs.BLOCKED_STATE kernel.schedule() return logger.log("COMMAND EVALUATED: " + command) logger.log("TIME IS : " + str(processor.time)) self.update_time(2) if self.time_is_over(): processor.ti = 1 kernel.create_resource(InterruptEvent, self, {'process' : self, 'message' : None }) self.state = configs.BLOCKED_STATE kernel.schedule()
def JM(self, XY): ''' jump to XY ''' #processor.ic = to_hex(to_int(processor.get_real_address(XY)) + BLOCK_SIZE * DS_LENGTH - 1) #processor.ic = get_real_address_from_cs(XY) if to_int(XY) > self.cs_length: processor.pi = 3 kernel.create_resource(InterruptEvent, self, {'process' : self, 'message' : None }) self.state = configs.BLOCKED_STATE kernel.schedule() else: self.num = to_int(XY) + self.ds_length + 1
def get_real_address_of_ds(self, XY): ''' return real address of offset from data segment ''' XY = to_int(XY) if XY > self.ds_length: processor.pi = 1 kernel.create_resource(InterruptEvent, self, { 'process': self, 'message': 'invalid data pointer' }) self.state = configs.BLOCKED_STATE kernel.schedule() else: return self.addresses[XY + 1]
def get_real_address_from_cs(self, XY): ''' return real address of offset from code segment''' XY = to_int(XY) if XY > self.cs_length: processor.pi = 1 kernel.create_resource(InterruptEvent, self, { 'process': self, 'message': 'jumping out of program' }) self.state = configs.BLOCKED_STATE kernel.schedule() else: return self.addresses[self.ds_length + 1 + XY]
def JM(self, XY): ''' jump to XY ''' #processor.ic = to_hex(to_int(processor.get_real_address(XY)) + BLOCK_SIZE * DS_LENGTH - 1) #processor.ic = get_real_address_from_cs(XY) if to_int(XY) > self.cs_length: processor.pi = 3 kernel.create_resource(InterruptEvent, self, { 'process': self, 'message': None }) self.state = configs.BLOCKED_STATE kernel.schedule() else: self.num = to_int(XY) + self.ds_length + 1
def END(self): ''' End task ''' processor.si = 3 kernel.create_resource(InterruptEvent, self, {'process' : self, 'message' : 'END event' }) self.state = configs.BLOCKED_STATE kernel.schedule()
def run(self): ''' execute user task until interrupt is encountered ''' self.update() command = user_memory.fetch(self.ic) if command[0:2] == 'LA': self.LA(command[2:4]) elif command[0:2] == 'LB': self.LB(command[2:4]) elif command[0:2] == 'MA': self.MA(command[2:4]) elif command[0:2] == 'MB': self.MB(command[2:4]) elif command[0:2] == 'WS': self.WS(command[2:4]) elif command[0:2] == 'LS': self.LS(command[2:4]) elif command[0:2] == 'JM': self.JM(command[2:4]) elif command[0:2] == 'JL': self.JL(command[2:4]) elif command[0:2] == 'JE': self.JE(command[2:4]) elif command[0:2] == 'PD': pass elif command[0:3] == 'ADD': self.ADD() elif command[0:3] == 'SUB': self.SUB() elif command[0:3] == 'CMP': self.CMP() elif command[0:3] == 'END': self.END() return elif command == 'SWAP': self.SWAP() elif command == 'AXOR': self.AXOR() elif command == 'BXOR': self.BXOR() else: processor.pi = 2 kernel.create_resource(InterruptEvent, self, { 'process': self, 'message': str(command) }) self.state = configs.BLOCKED_STATE kernel.schedule() return logger.log("COMMAND EVALUATED: " + command) logger.log("TIME IS : " + str(processor.time)) self.update_time(2) if self.time_is_over(): processor.ti = 1 kernel.create_resource(InterruptEvent, self, { 'process': self, 'message': None }) self.state = configs.BLOCKED_STATE kernel.schedule()