aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarel Kočí <cynerd@email.cz>2018-01-03 19:19:06 +0100
committerKarel Kočí <cynerd@email.cz>2018-01-03 19:19:06 +0100
commit1473699d8e204d9bf8b00c160b097b4adf85a66b (patch)
tree204fe38be7511764310053f05b198de6c18c30b8
parent615060bc4017a3db864568ee3bb7bfb3ec18d2e7 (diff)
downloadqtmips-1473699d8e204d9bf8b00c160b097b4adf85a66b.tar.gz
qtmips-1473699d8e204d9bf8b00c160b097b4adf85a66b.tar.bz2
qtmips-1473699d8e204d9bf8b00c160b097b4adf85a66b.zip
Add memory template for gui coreview
-rw-r--r--qtmips_gui/coreview/memory.cpp63
-rw-r--r--qtmips_gui/coreview/memory.h41
-rw-r--r--qtmips_gui/qtmips_gui.pro6
3 files changed, 108 insertions, 2 deletions
diff --git a/qtmips_gui/coreview/memory.cpp b/qtmips_gui/coreview/memory.cpp
new file mode 100644
index 0000000..e6044fe
--- /dev/null
+++ b/qtmips_gui/coreview/memory.cpp
@@ -0,0 +1,63 @@
+#include "memory.h"
+
+using namespace coreview;
+
+//////////////////////
+#define WIDTH 80
+#define HEIGHT 100
+#define PENW 1
+//////////////////////
+
+Memory::Memory(machine::QtMipsMachine *machine) : QGraphicsObject(nullptr) {
+#define CON_INIT(X) do { \
+ X.in = new Connector(); \
+ X.out = new Connector(); \
+ X.read = new Connector(); \
+ X.write = new Connector(); \
+ } while(false)
+ CON_INIT(con_program);
+ CON_INIT(con_data);
+#undef CON_INIT
+ // TODO cache?
+}
+
+QRectF Memory::boundingRect() const {
+ // TODO
+}
+
+void Memory::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
+ // TODO
+}
+
+void Memory::setPos(qreal x, qreal y) {
+ QGraphicsObject::setPos(x, y);
+ // TODO con
+}
+
+const Connector *Memory::connector_in(bool program) const {
+ if (program)
+ return con_program.in;
+ else
+ return con_data.in;
+}
+
+const Connector *Memory::connector_out(bool program) const {
+ if (program)
+ return con_program.out;
+ else
+ return con_data.out;
+}
+
+const Connector *Memory::connector_read(bool program) const {
+ if (program)
+ return con_program.read;
+ else
+ return con_data.read;
+}
+
+const Connector *Memory::connector_write(bool program) const {
+ if (program)
+ return con_program.write;
+ else
+ return con_data.write;
+}
diff --git a/qtmips_gui/coreview/memory.h b/qtmips_gui/coreview/memory.h
new file mode 100644
index 0000000..0f0d40d
--- /dev/null
+++ b/qtmips_gui/coreview/memory.h
@@ -0,0 +1,41 @@
+#ifndef COREVIEW_MEMORY_H
+#define COREVIEW_MEMORY_H
+
+#include <QGraphicsObject>
+#include <QPainter>
+#include <qtmipsmachine.h>
+#include "../coreview.h"
+#include "connection.h"
+
+namespace coreview{
+
+class Memory : public QGraphicsObject {
+ Q_OBJECT
+public:
+ Memory(machine::QtMipsMachine *machine);
+
+ QRectF boundingRect() const;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+
+ void setPos(qreal x, qreal y);
+ const Connector *connector_in(bool program) const;
+ const Connector *connector_out(bool program) const;
+ const Connector *connector_read(bool program) const;
+ const Connector *connector_write(bool program) const;
+ // TODO integrate cache
+
+private:
+ struct {
+ Connector *in, *out, *read, *write;
+ } con_program, con_data;
+};
+
+}
+
+#else
+
+namespace coreview {
+ class Memory;
+}
+
+#endif // MEMORY_H
diff --git a/qtmips_gui/qtmips_gui.pro b/qtmips_gui/qtmips_gui.pro
index 66d9189..c16fed7 100644
--- a/qtmips_gui/qtmips_gui.pro
+++ b/qtmips_gui/qtmips_gui.pro
@@ -24,7 +24,8 @@ SOURCES += \
coreview/multiplexer.cpp \
coreview/connection.cpp \
coreview/latch.cpp \
- coreview/alu.cpp
+ coreview/alu.cpp \
+ coreview/memory.cpp
HEADERS += \
mainwindow.h \
@@ -37,7 +38,8 @@ HEADERS += \
coreview/multiplexer.h \
coreview/connection.h \
coreview/latch.h \
- coreview/alu.h
+ coreview/alu.h \
+ coreview/memory.h
FORMS += \
NewDialog.ui \