1
0

p9 bus emulation

This commit is contained in:
Aiden
2026-05-25 22:32:13 +10:00
parent c3eb09ddc8
commit 0c241877eb
12 changed files with 179 additions and 10 deletions

View File

@@ -53,12 +53,14 @@ class P9FastPathEvent:
value: int | None = None
source: str | None = None
queue_depth: int | None = None
success: bool | None = None
def line(self) -> str:
value = "" if self.value is None else f" value={self.value:02X}"
success = "" if self.success is None else f" success={int(self.success)}"
source = "" if self.source is None else f" source={self.source}"
queue_depth = "" if self.queue_depth is None else f" queued={self.queue_depth}"
return f"{self.kind} pc={self.pc:04X}{value}{source}{queue_depth}"
return f"{self.kind} pc={self.pc:04X}{value}{success}{source}{queue_depth}"
@dataclass
@@ -101,10 +103,7 @@ class P9FastPath:
self.events.append(P9FastPathEvent("marker", pc))
self._return_from_subroutine(emulator)
elif pc in self.config.wrapper_pcs:
self.events.append(P9FastPathEvent("wrapper_success", pc))
emulator.cpu.regs[0] = 1
self._set_logic_flags(emulator.cpu, 1, 1)
self._return_from_subroutine(emulator)
self._handle_wrapper(emulator)
else:
return False
@@ -140,6 +139,25 @@ class P9FastPath:
self._set_logic_flags(emulator.cpu, value, 1)
self._return_from_subroutine(emulator)
def _handle_wrapper(self, emulator: Any) -> None:
pc = emulator.cpu.pc & 0xFFFF
success, source, queue_depth = emulator.memory.p9_bus.consume_wrapper_result()
value = 1 if success else 0
self.events.append(
P9FastPathEvent(
"wrapper_success" if success else "wrapper_timeout",
pc,
value=value,
source=source,
queue_depth=queue_depth,
success=success,
)
)
emulator.cpu.regs[0] = value
self._set_logic_flags(emulator.cpu, value, 1)
self._return_from_subroutine(emulator)
def _return_from_subroutine(self, emulator: Any) -> None:
sp = emulator.cpu.regs[7] & 0xFFFF
emulator.cpu.pc = emulator.memory.read16(sp) & 0xFFFF