-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrom.py
More file actions
36 lines (27 loc) · 943 Bytes
/
rom.py
File metadata and controls
36 lines (27 loc) · 943 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from collections.abc import Buffer
from modes import Addr
class Rom(Buffer):
"""
Byte buffer with known address-offset.
"""
_data: bytearray
_start: Addr
_size: int
def __init__(self, *, size: int, start: Addr, init: bytearray | None = None):
self._start = start
self._size = size
if init:
init.resize(size)
self._data = init
else:
self._data = bytearray(size)
def __getitem__(self, addr: Addr) -> int:
return self._data[addr - self._start]
def __setitem__(self, addr: Addr, value: int | Addr) -> None:
if not isinstance(value, Addr):
self._data[addr - self._start] = value
else:
self._data[addr - self._start] = value & 0xFF
self._data[addr - self._start + 1] = value >> 8
def __buffer__(self, flags: int) -> memoryview:
return self._data.__buffer__(flags)