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