sh-dis/mem.py

49 lines
1.4 KiB
Python

from collections import defaultdict
class Memory:
def __init__(self):
self._mem = defaultdict(int)
def read32(self, address):
assert (address & 0b11) == 0, address
a = self._mem[address + 0]
b = self._mem[address + 1]
c = self._mem[address + 2]
d = self._mem[address + 3]
return (
(a << 24)
| (b << 16)
| (c << 8 )
| (d << 0 )
)
def read16(self, address):
assert (address & 0b1) == 0, address
a = self._mem[address + 0]
b = self._mem[address + 1]
return (
(a << 8 )
| (b << 0 )
)
def read8(self, address):
return self._mem[address + 0]
def write32(self, address, value):
assert type(value) is int
assert (address & 0b11) == 0, address
self._mem[address + 0] = (value >> 24) & 0xff
self._mem[address + 1] = (value >> 16) & 0xff
self._mem[address + 2] = (value >> 8 ) & 0xff
self._mem[address + 3] = (value >> 0 ) & 0xff
def write16(self, address, value):
assert type(value) is int
assert (address & 0b1 ) == 0, address
self._mem[address + 0] = (value >> 8 ) & 0xff
self._mem[address + 1] = (value >> 0 ) & 0xff
def write8(self, address, value):
assert type(value) is int
self._mem[address + 0] = (value >> 0 ) & 0xff