diff --git a/src/simudator/core/modules/memory.py b/src/simudator/core/modules/memory.py index 163d1f7f51a351dd247275dc18900502700eacbe..775f76f2b3773014e89cf69010ce0e4047117cea 100644 --- a/src/simudator/core/modules/memory.py +++ b/src/simudator/core/modules/memory.py @@ -23,10 +23,10 @@ class Memory(Module): # signals signals = { - "in_input": input_signal, - "in_control": control_signal, - "in_address": address_signal, - "out_content": output_signal + "in_input": input_signal, + "in_control": control_signal, + "in_address": address_signal, + "out_content": output_signal, } # Init super class @@ -54,11 +54,7 @@ class Memory(Module): adr_sig = self.signals["in_address"] ctrl_sig = self.signals["in_control"] out_sig = self.signals["out_content"] - if ( - - adr_sig.get_value() is not None - and ctrl_sig.get_value() is not None - ): + if adr_sig.get_value() is not None and ctrl_sig.get_value() is not None: self.is_write = ctrl_sig.get_value() self.current_address = adr_sig.get_value() out_sig.update_value(self.memory[self.current_address]) @@ -98,12 +94,15 @@ class Memory(Module): for i in range(len(self.memory)): self.memory[i] = 0 - def get_longest_line_len(self, ignore_keys=[]) -> int: + def get_longest_line_len(self, ignore_keys=None) -> int: """ Helper function for pretty_print that returns the length of the longest value in the memory to print for a module. """ + if ignore_keys is None: + ignore_keys = [] + longest_memory_line = 0 for value in self.memory: diff --git a/src/simudator/processor/mia/gui/mia_memory_graphic.py b/src/simudator/processor/mia/gui/mia_memory_graphic.py index 303ddb8d9cccd9b2e53139c4b9de9fe0fdb26766..ec29b7717ebc86efe8b0762dc07f3abef6ca34a1 100644 --- a/src/simudator/processor/mia/gui/mia_memory_graphic.py +++ b/src/simudator/processor/mia/gui/mia_memory_graphic.py @@ -2,6 +2,7 @@ import ast from qtpy.QtCore import Slot from qtpy.QtWidgets import ( + QErrorMessage, QGraphicsRectItem, QGraphicsSimpleTextItem, QTextEdit, @@ -28,6 +29,7 @@ class MiaMemoryGraphicsItem(MemoryGraphicsItem): def __init__(self, memory_module: Memory, **kwargs): super().__init__(memory_module, **kwargs) self.memory_window = None + self._errorMessageWidget = QErrorMessage() def draw_graphics_item(self) -> None: # Same as normal memory but no control signal @@ -94,9 +96,9 @@ class MiaMemoryGraphicsItem(MemoryGraphicsItem): module_name, str(parsed_address), str(parsed_value) ) except SyntaxError as e: - self.errorMessageWidget.showMessage(str(e)) + self._errorMessageWidget.showMessage(str(e)) except ValueError: - self.errorMessageWidget.showMessage( + self._errorMessageWidget.showMessage( "You must enter a hexadecimal" "number preceeded by '0x' (e.g." "0xc3)." ) @@ -106,16 +108,27 @@ class MiaMemoryGraphicsItem(MemoryGraphicsItem): Same as prent function but also prases data so it is hexadecimal. """ try: - parsed_address = int(address, 16) + parsed_adress = int(address, 16) parsed_value = ast.literal_eval(value) except SyntaxError as e: - self.errorMessageWidget.showMessage(str(e)) + self._errorMessageWidget.showMessage(str(e)) except ValueError: - self.errorMessageWidget.showMessage( + self._errorMessageWidget.showMessage( "You must enter a hexadecimal" "number preceeded by '0x' (e.g." "0xc3)." ) else: module_state = self.module.get_state() - module_state['memory'][parsed_address] = parsed_value + try: + if parsed_adress < 0: + raise IndexError + module_state['memory'][parsed_adress] = parsed_value + except IndexError: + self._errorMessageWidget.showMessage( + "Address entered was outside the memory space. Adress must be between 0 and 0xff." + ) + else: + self.module.set_state(module_state) + self.update_graphics_signal.emit() + module_state['memory'][parsed_adress] = parsed_value self.module.set_state(module_state) self.update_graphics_signal.emit()