diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2024-04-24 16:37:20 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2024-04-24 16:37:20 +0300 |
| commit | ab25aef8555476836ce6d329bb0cb8deca9ecba9 (patch) | |
| tree | 3385f381f87183a9c37b276c1bcc254e8082c7c2 /atk16_emu/memory.py | |
| parent | fad7d9ff1b7f1cc736d775e03096a398a7e9719a (diff) | |
Add critical section logic to emu, develop monitor
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 |
