diff options
Diffstat (limited to 'atk16_emu/memory.py')
| -rw-r--r-- | atk16_emu/memory.py | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/atk16_emu/memory.py b/atk16_emu/memory.py index 2ce9c85..a27344d 100644 --- a/atk16_emu/memory.py +++ b/atk16_emu/memory.py @@ -53,4 +53,29 @@ class RAM: if value < 0 or value >= 2 ** self.data_bits: raise ValueError(f"Value {value} is out of range for {self.data_bits}-bit RAM") - self.memory[addr] = value
\ No newline at end of file + self.memory[addr] = value + + +class Interrupts: + def __init__(self, n: int): + self.n = n + self.interrupt_lines = [False] * n + + def set_interrupt(self, i: int): + if i < 0 or i >= self.n: + raise ValueError(f"Interrupt {i} is out of range for {self.n}-interrupt system") + + self.interrupt_lines[i] = True + + def clear_interrupt(self, i: int): + if i < 0 or i >= self.n: + raise ValueError(f"Interrupt {i} is out of range for {self.n}-interrupt system") + + self.interrupt_lines[i] = False + + def get_priority_interrupt(self) -> int | None: + for i in range(self.n): + if self.interrupt_lines[i]: + return i + + return None |
