p9 bus emulation
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import unittest
|
||||
|
||||
from h8536.emulator.fast_paths import (
|
||||
LOC_BFE0_TRANSFER_WRAPPER,
|
||||
LOC_C08B_P9_WRITE_BYTE,
|
||||
LOC_C0DB_P9_READ_BYTE,
|
||||
P9FastPath,
|
||||
@@ -105,6 +106,41 @@ class P9FastPathTest(unittest.TestCase):
|
||||
self.assertEqual(event.queue_depth, 1)
|
||||
self.assertEqual(fast_path.trace_lines(), ["read_byte pc=C0DB value=00 source=script:idle-panel queued=1"])
|
||||
|
||||
def test_wrapper_defaults_to_timeout_when_no_p9_device_response_is_queued(self):
|
||||
emulator = H8536Emulator(bytes(rom_with_reset()))
|
||||
emulator.cpu.pc = LOC_BFE0_TRANSFER_WRAPPER
|
||||
emulator.cpu.regs[7] = 0xFE84
|
||||
emulator.memory.write16(0xFE84, 0x789A)
|
||||
|
||||
fast_path = P9FastPath(P9FastPathConfig(enabled=True))
|
||||
|
||||
self.assertTrue(fast_path.try_handle(emulator))
|
||||
event = fast_path.events[-1]
|
||||
self.assertEqual(event.kind, "wrapper_timeout")
|
||||
self.assertFalse(event.success)
|
||||
self.assertEqual(event.source, "default_timeout")
|
||||
self.assertEqual(emulator.cpu.regs[0], 0)
|
||||
self.assertTrue(emulator.cpu.z)
|
||||
self.assertEqual(emulator.cpu.pc, 0x789A)
|
||||
|
||||
def test_wrapper_can_succeed_from_queued_p9_device_response(self):
|
||||
emulator = H8536Emulator(bytes(rom_with_reset()))
|
||||
emulator.cpu.pc = LOC_BFE0_TRANSFER_WRAPPER
|
||||
emulator.cpu.regs[7] = 0xFE86
|
||||
emulator.memory.write16(0xFE86, 0x89AB)
|
||||
emulator.memory.p9_bus.queue_wrapper_results([True], source="panel-script")
|
||||
|
||||
fast_path = P9FastPath(P9FastPathConfig(enabled=True))
|
||||
|
||||
self.assertTrue(fast_path.try_handle(emulator))
|
||||
event = fast_path.events[-1]
|
||||
self.assertEqual(event.kind, "wrapper_success")
|
||||
self.assertTrue(event.success)
|
||||
self.assertEqual(event.source, "panel-script")
|
||||
self.assertEqual(emulator.cpu.regs[0], 1)
|
||||
self.assertFalse(emulator.cpu.z)
|
||||
self.assertEqual(emulator.cpu.pc, 0x89AB)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user