1
0

Eprom emulation

This commit is contained in:
Aiden
2026-05-25 23:28:14 +10:00
parent 0819701b22
commit 3f9f03388c
12 changed files with 129 additions and 6 deletions

View File

@@ -4,6 +4,10 @@ from dataclasses import dataclass, field
X24164_SIZE = 2048
X24164_FACTORY_DEFAULT_BASE = 0xC964
X24164_FACTORY_DEFAULT_BYTES = 0x0100
X24164_LOGICAL_PAGE_SIZE = 0x0100
X24164_LOGICAL_PAGE_COUNT = 0x10
@dataclass
@@ -214,6 +218,16 @@ class X24164Bus:
)
return True
def seed_factory_defaults_from_rom(self, rom_bytes: bytes) -> None:
for offset, word in factory_default_words_from_rom(rom_bytes):
for page in range(X24164_LOGICAL_PAGE_COUNT):
self.write_linear_word((page * X24164_LOGICAL_PAGE_SIZE) + offset, word)
for page in range(X24164_LOGICAL_PAGE_COUNT):
base = page * X24164_LOGICAL_PAGE_SIZE
for offset in range(0, 8, 2):
self.write_linear_word(base + offset, 0x2020)
def trace_lines(self, limit: int | None = None) -> list[str]:
events = self.trace_events if limit is None else self.trace_events[-limit:]
return [event.line() for event in events]
@@ -360,3 +374,15 @@ def default_x24164_devices() -> list[X24164Device]:
X24164Device("x24164_a0_lower_2k", 0xA0),
X24164Device("x24164_e0_upper_2k", 0xE0),
]
def factory_default_words_from_rom(rom_bytes: bytes) -> list[tuple[int, int]]:
end = X24164_FACTORY_DEFAULT_BASE + X24164_FACTORY_DEFAULT_BYTES
if len(rom_bytes) < end:
raise ValueError(f"ROM is too small for X24164 factory default table at {X24164_FACTORY_DEFAULT_BASE:04X}")
words: list[tuple[int, int]] = []
for offset in range(0, X24164_FACTORY_DEFAULT_BYTES, 2):
address = X24164_FACTORY_DEFAULT_BASE + offset
word = (rom_bytes[address] << 8) | rom_bytes[address + 1]
words.append((offset, word))
return words