forked from gitz-braunschweig-rash/cpu-simulator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
helper.cpp
98 lines (77 loc) · 2.08 KB
/
helper.cpp
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "helper.h"
Helper::Helper(QVector<u_int16_t> &_ram, QVector<u_int16_t> &_registers) : ram(_ram), registers(_registers)
{
}
bool Helper::readRamFile(const QString &_file)
{
QFile file(_file);
if(!file.open(QIODevice::ReadOnly))
{
qDebug() << "[ERROR] Helper::readRamFile could not open " << _file;
return false;
}
char buffer[1024];
size_t counter = 0;
while (file.readLine(buffer,1023)) //zero byte needs on byte, so 1024-1=1023 read
{
if(counter >= ram.size())
{
qDebug() << "[WARNING] counter >= ram.size()" << counter << ">=" << ram.size();
break;
}
QString line(buffer);
if(line.contains("#"))
{
QStringList temp = line.split("#");
line = temp.first();
}
bool ok;
u_int16_t value = line.toUShort(&ok,16);
ram[counter] = value;
counter++;
}
return true;
}
bool Helper::readRegisterFile(const QString &_file)
{
QFile file(_file);
if(!file.open(QIODevice::ReadOnly))
{
qDebug() << "[ERROR] Helper::readRegisterFile could not open " << _file;
return false;
}
char buffer[1024];
size_t counter = 0;
while (file.readLine(buffer,1023)) //zero byte needs on byte, so 1024-1=1023 read
{
if(counter >= registers.size())
{
qDebug() << "[WARNING] counter >= registers.size()" << counter << ">=" << registers.size();
break;
}
QString line(buffer);
if(line.contains("#"))
{
QStringList temp = line.split("#");
line = temp.first();
}
bool ok;
u_int16_t value = line.toUShort(&ok,16);
registers[counter] = value;
counter++;
}
return true;
}
u_int16_t Helper::getFirstHalfOfOcted(u_int16_t _value)
{
_value = _value << 8;
_value = _value >> 8;
_value = _value >> 4;
return _value;
}
u_int16_t Helper::getSecondHalfOfOcted(u_int16_t _value)
{
_value = _value << 12;
_value = _value >> 12;
return _value;
}