aboutsummaryrefslogtreecommitdiff
path: root/README.md
blob: 1de624d6a7d0e742643481ac068ff0561cc54a0e (plain)
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
QtMips
======
MIPS CPU simulator for education purposes.

Dependencies
------------
* Qt 5
* elfutils (libelf might works too but there can be some problems)

General compilation
-------------------
To compile whole project just run these commands:
```
qmake /path/to/qtmips
make
```
Where `/path/to/qtmips` is path to this project root.

(Be sure to use qt5 qmake.)

Compilation for local execution
-------------------------------
Because simulator it self is implemented as library you need to have that library
in path where loader can found it. Which is not commonly a case, so you have to
compile it with following additional option:
```
qmake /path/to/qtmips "QMAKE_RPATHDIR += ../qtmips_machine"
make
```

Tests
-----
There are two types of tests in QtMips. One type are unit tests for simulator it
self and second one are integration tests with command line client and real
compiled elf binaries. All these tests can be executed using script
`tests/run-all.sh` or one by one by running respective `test.sh` scripts.

Source files for unit tests can be found in path `qtmips_machine/tests` and
integration tests are located in `tests` directory.

Not implemented features
------------------------
These are features that are not implemented and are not currently being planned as
being so.

* Privileged instructions and all features dependent on it
* Coprocessors (so no floating point unit nor any other type)
* Peripherals
* Memory access stall (stalling execution because of cache miss would be pretty
  annoying for users so difference between cache and memory is just in collected
  statistics)
* Interrupts and exceptions (if exception occurs then machine execution is halted)
* Branch-likeli instructions (they are marked as obsolete)
* Complete binary instruction check (we check only minimal set of bites to decode
  instruction, we don't check if zero sections are really zero unless we need it).