-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMemory.cpp
More file actions
70 lines (58 loc) · 1.07 KB
/
Memory.cpp
File metadata and controls
70 lines (58 loc) · 1.07 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
63
64
65
66
67
68
69
70
#include "Memory.h"
#include <iostream>
using namespace std;
char* Memory::getString(Word32 id)
{
return (char *)(mem + id);
}
Word32 Memory::getReg(Word32 id)
{
return reg[id];
}
void Memory::setReg(Word32 id, Word32 w)
{
if(0 <= id && id < 32)
reg[id] = w;
}
Word32 Memory::getWord(Word32 id)
{
if(0 <= id && id + 4 <= size)
return (getByte(id + 3) << 24) | (getByte(id + 2) << 16) | (getByte(id + 1) << 8) | getByte(id);
return 0;
}
void Memory::setWord(Word32 id, Word32 w)
{
if(0 <= id && id + 4 <= size)
for(int i = 0; i < 4; i++)
setByte(id + i, w), w >>= 8;
}
Word32 Memory::getByte(Word32 id)
{
if(0 <= id && id < size)
return mem[id];
return 0;
}
void Memory::setByte(Word32 id, Word32 w)
{
if(0 <= id && id < size)
mem[id] = w & 0xFF;
}
Word32 Memory::getPC()
{
return pc;
}
void Memory::setPC(Word32 id)
{
pc = id;
}
void Memory::step()
{
pc += 4;
}
Memory::Memory(Word32 size) :
size(size),
pc(0)
{
mem = new unsigned char[size];
reg = new Word32[size];
}