1
0
Files
h8-536-decoder/h8536/memory.py
2026-05-25 13:47:13 +10:00

37 lines
1.3 KiB
Python

from __future__ import annotations
from dataclasses import dataclass
@dataclass(frozen=True)
class MemoryRegion:
name: str
start: int
end: int
kind: str
manual: str
def contains(self, address: int) -> bool:
return self.start <= address <= self.end
# Manual references:
# - H8/536 address map: Manual/0900766b802125d0.md:26503-26505
# - Vector/DTC low address area: Manual/0900766b802125d0.md:2944-2946
# - Register field H'FE80-H'FFFF: Manual/0900766b802125d0.md:2961-2968
# - On-chip RAM H'F680-H'FE7F: Manual/0900766b802125d0.md:17884-17894
MEMORY_REGIONS: tuple[MemoryRegion, ...] = (
MemoryRegion("exception_vectors", 0x0000, 0x009F, "vectors", "section 2 address space"),
MemoryRegion("dtc_vectors", 0x00A0, 0x00FF, "dtc_vectors", "section 2 address space"),
MemoryRegion("program_or_external", 0x0100, 0xF67F, "program", "section 2/17 mode-dependent ROM or external space"),
MemoryRegion("on_chip_ram", 0xF680, 0xFE7F, "ram", "section 16 RAM"),
MemoryRegion("register_field", 0xFE80, 0xFFFF, "registers", "appendix B register map"),
)
def region_for(address: int) -> MemoryRegion:
for region in MEMORY_REGIONS:
if region.contains(address):
return region
return MemoryRegion("external_or_unmapped", address, address, "external", "outside page-0 on-chip ranges")