Repository navigation
Expand file tree
/
Copy pathMemory.py
More file actions
62 lines (51 loc) · 1.92 KB
/
Copy pathMemory.py
File metadata and controls
62 lines (51 loc) · 1.92 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
class DataMemory:
"""
Data Memory
0-510 for numbers
511 for direct operand loading
512-1023 for indirect addressing
1024-2047 for characters
"""
def __init__(self, memory_size, data_section):
assert len(data_section) < memory_size, "Length data_section more than memory_size"
self.data_address = 0
self.memory_size = memory_size
self.data = []
self.mapping_memory(data_section)
def latch_data_address(self, address):
assert 0 <= address <= self.memory_size, "Address out of memory"
self.data_address = address
def mapping_memory(self, data_section):
data_memory = []
num = data_section.index("numbers")
ind = data_section.index("indirect")
st = data_section.index("strings")
for elem in range(num + 1, ind):
data_memory.append(data_section[elem])
assert len(data_memory) <= 512, "Out of memory"
while len(data_memory) != 512:
data_memory.append(0)
for elem in range(ind + 1, st):
data_memory.append(data_section[elem])
assert len(data_memory) <= 1024, "Out of memory"
while len(data_memory) != 1024:
data_memory.append(0)
for elem in range(st + 1, len(data_section)):
data_memory.append(data_section[elem])
assert len(data_memory) <= 2048, "Out of memory"
while len(data_memory) != 2048:
data_memory.append(0)
self.data = data_memory
class ProgramMemory:
"""
Program Memory
0-2047
"""
def __init__(self, memory_size, program):
assert len(program) < memory_size, "Length program more than memory_size"
self.data: int | dict = program
self.program_start = 0
self.program_len = len(program)
def get_instruction(self, counter):
assert counter < self.program_len, "PC out of memory"
return self.data[counter]