From ab25aef8555476836ce6d329bb0cb8deca9ecba9 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Wed, 24 Apr 2024 16:37:20 +0300 Subject: Add critical section logic to emu, develop monitor --- atk16_emu/memory.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'atk16_emu/memory.py') 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 -- cgit v1.3