-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMemoryBlock.py
More file actions
46 lines (35 loc) · 1.24 KB
/
MemoryBlock.py
File metadata and controls
46 lines (35 loc) · 1.24 KB
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
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/python
from bitarray import bitarray
class MemoryBlock:
"""
Segments of memory blocks
- Typically 8-bit data containers, but padded to 16-bits for consistency
"""
def __init__(self, from_addr, to_addr, name):
self.from_addr = from_addr
self.to_addr = to_addr
self.name = name
# Fill memory with zeros
self.memory = {}
for address in range(self.from_addr, self.to_addr):
self.memory[hex(address)] = bitarray('1' * 8)
def load(self, address):
"""
Retreive data from memory
:param address: Hex str
"""
print('[{}] - Address \'{}\' read'.format(self.name, address))
return bitarray('0' * 8) + (self.memory[address])
def store(self, address, data):
"""
Store data into memory
:param address: Hex str
:param data: BitArray
"""
print('[{}] - Address \'{}\' set {}'.format(self.name, address, '0x' + data.tobytes().hex()))
self.memory[address] = data
def __str__(self):
str = ''
for address in range(self.from_addr, self.to_addr):
str += '{}\t{}\n'.format(hex(address), self.memory[hex(address)].tobytes().hex())
return str