Beispiel #1
0
 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()
Beispiel #2
0
 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]
Beispiel #3
0
 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]
Beispiel #4
0
    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()
Beispiel #5
0
 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
Beispiel #6
0
 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]
Beispiel #7
0
 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]
Beispiel #8
0
 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
Beispiel #9
0
 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()
Beispiel #10
0
    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()