aboutsummaryrefslogtreecommitdiff
path: root/qtmips_gui/coreview
diff options
context:
space:
mode:
Diffstat (limited to 'qtmips_gui/coreview')
-rw-r--r--qtmips_gui/coreview/adder.cpp6
-rw-r--r--qtmips_gui/coreview/alu.cpp8
-rw-r--r--qtmips_gui/coreview/alu.h1
-rw-r--r--qtmips_gui/coreview/and.cpp53
-rw-r--r--qtmips_gui/coreview/and.h29
-rw-r--r--qtmips_gui/coreview/connection.cpp95
-rw-r--r--qtmips_gui/coreview/connection.h54
-rw-r--r--qtmips_gui/coreview/constant.cpp4
-rw-r--r--qtmips_gui/coreview/junction.cpp16
-rw-r--r--qtmips_gui/coreview/junction.h5
-rw-r--r--qtmips_gui/coreview/latch.cpp4
-rw-r--r--qtmips_gui/coreview/logicblock.cpp2
-rw-r--r--qtmips_gui/coreview/memory.cpp14
-rw-r--r--qtmips_gui/coreview/multiplexer.cpp14
-rw-r--r--qtmips_gui/coreview/multiplexer.h3
-rw-r--r--qtmips_gui/coreview/programcounter.cpp4
-rw-r--r--qtmips_gui/coreview/registers.cpp14
17 files changed, 239 insertions, 87 deletions
diff --git a/qtmips_gui/coreview/adder.cpp b/qtmips_gui/coreview/adder.cpp
index cd227ab..4363f97 100644
--- a/qtmips_gui/coreview/adder.cpp
+++ b/qtmips_gui/coreview/adder.cpp
@@ -17,9 +17,9 @@ Adder::Adder() : QGraphicsItem(nullptr), plus("+", this) {
QRectF plus_box = plus.boundingRect();
plus.setPos(DENT + (WIDTH-DENT)/2 - plus_box.width()/2, HEIGHT/2 - plus_box.height()/2);
- con_in_a = new Connector(0);
- con_in_b = new Connector(0);
- con_out = new Connector(M_PI);
+ con_in_a = new Connector(Connector::AX_X);
+ con_in_b = new Connector(Connector::AX_X);
+ con_out = new Connector(Connector::AX_X);
setPos(x(), y()); // set connector's position
}
diff --git a/qtmips_gui/coreview/alu.cpp b/qtmips_gui/coreview/alu.cpp
index d49cab2..2f24210 100644
--- a/qtmips_gui/coreview/alu.cpp
+++ b/qtmips_gui/coreview/alu.cpp
@@ -14,10 +14,10 @@ coreview::Alu::Alu() : QGraphicsItem(nullptr), name("ALU", this) {
font.setPointSize(7);
name.setFont(font);
- con_in_a = new Connector(0);
- con_in_b = new Connector(0);
- con_out = new Connector(M_PI);
- con_ctl = new Connector(-M_PI_2);
+ con_in_a = new Connector(Connector::AX_X);
+ con_in_b = new Connector(Connector::AX_X);
+ con_out = new Connector(Connector::AX_X);
+ con_ctl = new Connector(Connector::AX_Y);
setPos(x(), y()); // set connector's position
}
diff --git a/qtmips_gui/coreview/alu.h b/qtmips_gui/coreview/alu.h
index 25d7351..288de87 100644
--- a/qtmips_gui/coreview/alu.h
+++ b/qtmips_gui/coreview/alu.h
@@ -2,7 +2,6 @@
#define COREVIEW_ALU_H
#include <QGraphicsItem>
-#include <qtmipsmachine.h>
#include "connection.h"
namespace coreview {
diff --git a/qtmips_gui/coreview/and.cpp b/qtmips_gui/coreview/and.cpp
new file mode 100644
index 0000000..f60dfcd
--- /dev/null
+++ b/qtmips_gui/coreview/and.cpp
@@ -0,0 +1,53 @@
+#include "and.h"
+#include <cmath>
+
+using namespace coreview;
+
+//////////////////////
+#define GAP 5
+#define PENW 1
+//////////////////////
+
+And::And(unsigned size) : QGraphicsItem(nullptr) {
+ for (unsigned i = 0; i < size; i++)
+ connectors.append(new Connector(Connector::AX_X));
+ con_out = new Connector(Connector::AX_X);
+
+ setPos(x(), y()); // update connectors positions
+}
+
+And::~And() {
+ delete con_out;
+ for (int i = 0; i < connectors.size(); i++)
+ delete connectors[i];
+}
+
+QRectF And::boundingRect() const {
+ qreal side = GAP * connectors.size();
+ return QRectF(-PENW, -PENW, side + PENW, side + PENW);
+}
+
+void And::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute__((unused)), QWidget *widget __attribute__((unused))) {
+ qreal size = GAP * connectors.size();
+ painter->drawLine(0, 0, 0, size);
+ painter->drawLine(0, 0, size/2, 0);
+ painter->drawLine(0, size, size/2, size);
+ painter->drawArc(0, 0, size, size, 270 * 16, 180 * 16);
+}
+
+void And::setPos(qreal x, qreal y) {
+ QGraphicsItem::setPos(x, y);
+
+ qreal size = GAP * connectors.size();
+ con_out->setPos(x + size, y + size/2);
+ for (int i = 0; i < connectors.size(); i++)
+ connectors[i]->setPos(x, y + GAP/2 + GAP*i);
+}
+
+const Connector *And::connector_in(unsigned i) const {
+ return connectors[i];
+}
+
+const Connector *And::connector_out() const {
+ return con_out;
+}
diff --git a/qtmips_gui/coreview/and.h b/qtmips_gui/coreview/and.h
new file mode 100644
index 0000000..ca0af30
--- /dev/null
+++ b/qtmips_gui/coreview/and.h
@@ -0,0 +1,29 @@
+#ifndef COREVIEW_AND_H
+#define COREVIEW_AND_H
+
+#include <QGraphicsItem>
+#include <QVector>
+#include "connection.h"
+
+namespace coreview {
+
+class And : public QGraphicsItem {
+public:
+ And(unsigned size = 2);
+ ~And();
+
+ QRectF boundingRect() const;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+
+ void setPos(qreal x, qreal y);
+ const Connector *connector_in(unsigned) const;
+ const Connector *connector_out() const;
+
+private:
+ QVector<Connector*> connectors;
+ Connector* con_out;
+};
+
+}
+
+#endif // COREVIEW_AND_H
diff --git a/qtmips_gui/coreview/connection.cpp b/qtmips_gui/coreview/connection.cpp
index 71647e2..3355eed 100644
--- a/qtmips_gui/coreview/connection.cpp
+++ b/qtmips_gui/coreview/connection.cpp
@@ -3,14 +3,19 @@
using namespace coreview;
-Connector::Connector(qreal angle) {
- ang = angle;
+Connector::Connector(enum Axis ax) {
+ this->ax = ax;
}
void Connector::setPos(qreal x, qreal y) {
qx = x;
qy = y;
- emit updated(QPointF(qx, qy));
+ emit updated(point());
+ emit updated(vector());
+}
+
+enum Connector::Axis Connector::axis() const {
+ return ax;
}
qreal Connector::x() const {
@@ -21,28 +26,34 @@ qreal Connector::y() const {
return qy;
}
-QLineF Connector::vector() const {
- return QLineF(point(), QPointF(x() + cos(ang), y() + sin(ang)));
-}
-
QPointF Connector::point() const {
return QPointF(qx, qy);
}
-qreal Connector::angle() const {
- return ang;
+QLineF Connector::vector() const {
+ QPointF p = point();
+ switch (ax) {
+ case AX_X:
+ return QLineF(p, p + QPointF(1, 0));
+ case AX_Y:
+ return QLineF(p, p + QPointF(0, 1));
+ case AX_XY:
+ return QLineF(p, p + QPointF(1, 1));
+ case AX_MXY:
+ return QLineF(p, p + QPoint(1, -1));
+ }
}
Connection::Connection(const Connector *a, const Connector *b) : QGraphicsObject(nullptr) {
pen_width = 1;
- ang_start = a->angle();
- ang_end = b->angle();
+ ax_start = a->vector();
+ ax_end = a->vector();
- connect(a, SIGNAL(updated(QPointF)), this, SLOT(moved_start(QPointF)));
- connect(b, SIGNAL(updated(QPointF)), this, SLOT(moved_end(QPointF)));
- moved_start(a->point());
- moved_end(b->point());
+ connect(a, SIGNAL(updated(QLineF)), this, SLOT(moved_start(QLineF)));
+ connect(b, SIGNAL(updated(QLineF)), this, SLOT(moved_end(QLineF)));
+ moved_start(a->vector());
+ moved_end(b->vector());
}
void Connection::setHasText(bool has) {
@@ -65,13 +76,13 @@ void Connection::setAxes(QVector<QLineF> axes) {
recalc_line();
}
-void Connection::moved_start(QPointF p) {
- p_start = p;
+void Connection::moved_start(QLineF p) {
+ ax_start = p;
recalc_line();
}
-void Connection::moved_end(QPointF p) {
- p_end = p;
+void Connection::moved_end(QLineF p) {
+ ax_end = p;
recalc_line();
}
@@ -88,7 +99,9 @@ QRectF Connection::boundingRect() const {
void Connection::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute__((unused)), QWidget *widget __attribute__((unused))) {
QPen pen;
pen.setWidth(pen_width);
- // TODO color?
+ pen.setColor(color);
+ pen.setCapStyle(Qt::FlatCap);
+ pen.setJoinStyle(Qt::BevelJoin);
painter->setPen(pen);
painter->drawPolyline(QPolygonF(points));
@@ -97,20 +110,44 @@ void Connection::paint(QPainter *painter, const QStyleOptionGraphicsItem *option
void Connection::recalc_line() {
points.clear();
- points.append(p_start);
+ points.append(ax_start.p1());
- QLineF cur_l(p_start, QPointF(p_start.x() + cos(ang_start), p_start.y() + sin(ang_start)));
+ QLineF cur_l = ax_start;
for (int i = 0; i < break_axes.size(); i++) {
- recalc_line_add_point(cur_l, break_axes[i]);
- cur_l = break_axes[i];
+ if (recalc_line_add_point(cur_l, break_axes[i]))
+ cur_l = break_axes[i];
}
- recalc_line_add_point(cur_l, QLineF(QPoint(p_end.x() + cos(ang_end), p_end.y() + sin(ang_end)), p_end));
+ recalc_line_add_point(cur_l, ax_end);
- points.append(p_end);
+ points.append(ax_end.p1());
}
-void Connection::recalc_line_add_point(const QLineF &l1, const QLineF &l2) {
+bool Connection::recalc_line_add_point(const QLineF &l1, const QLineF &l2) {
QPointF intersec;
- if (l1.intersect(l2, &intersec) != QLineF::NoIntersection)
- points.append(intersec);
+ if (l1.intersect(l2, &intersec) == QLineF::NoIntersection)
+ return false;
+ points.append(intersec);
+ return true;
+}
+
+Bus::Bus(const Connector *start, const Connector *end, unsigned width) : Connection(start, end) {
+ pen_width = width;
+}
+
+const Connector *Bus::new_connector(qreal x, qreal y, enum Connector::Axis axis) {
+ Connector *c = new Connector(axis);
+ conns.append({
+ .c = c,
+ .p = QPoint(x, y)
+ });
+ // TODO update positions
+ return c;
+}
+
+const Connector *Bus::new_connector(const QPointF &p, enum Connector::Axis axis) {
+ return new_connector(p.x(), p.y(), axis);
+}
+
+Signal::Signal(const Connector *start, const Connector *end) : Connection(start, end) {
+ color = QColor(0, 0, 255);
}
diff --git a/qtmips_gui/coreview/connection.h b/qtmips_gui/coreview/connection.h
index 0ee981e..88ad1da 100644
--- a/qtmips_gui/coreview/connection.h
+++ b/qtmips_gui/coreview/connection.h
@@ -10,21 +10,30 @@ namespace coreview {
class Connector : public QObject {
Q_OBJECT
public:
- Connector(qreal angle);
+ enum Axis {
+ AX_X, // X axis
+ AX_Y, // Y axis
+ AX_XY, // X=Y axis (45°)
+ AX_MXY // X=-Y axis (-45°)
+ };
+
+ Connector(enum Axis axis = AX_X);
void setPos(qreal x, qreal y);
+
+ enum Axis axis() const;
qreal x() const;
qreal y() const;
+
QPointF point() const;
QLineF vector() const;
- qreal angle() const;
-
signals:
- void updated(QPointF);
+ void updated(QPointF point);
+ void updated(QLineF vector);
private:
- qreal ang;
+ enum Axis ax;
qreal qx, qy;
};
@@ -42,22 +51,43 @@ public:
void setAxes(QVector<QLineF>);
private slots:
- void moved_start(QPointF);
- void moved_end(QPointF);
+ void moved_start(QLineF);
+ void moved_end(QLineF);
-private:
+protected:
QGraphicsSimpleTextItem *value;
QVector<QPointF> points;
- QPointF p_start, p_end;
- qreal ang_start, ang_end;
+ QLineF ax_start, ax_end;
QVector<QLineF> break_axes;
QString text;
int pen_width;
+ QColor color;
- // TODO line width and possibly bus width
void recalc_line();
- void recalc_line_add_point(const QLineF &l1, const QLineF &l2);
+ bool recalc_line_add_point(const QLineF &l1, const QLineF &l2);
+};
+
+class Bus : public Connection {
+public:
+ Bus(const Connector *start, const Connector *end, unsigned width = 4);
+
+ // This creates connector snapped to closes point to x,y that is on bus
+ const Connector *new_connector(qreal x, qreal y, enum Connector::Axis = Connector::AX_X);
+ const Connector *new_connector(const QPointF&, enum Connector::Axis = Connector::AX_X);
+
+protected:
+ struct con_pos {
+ Connector *c;
+ QPointF p;
+ };
+ QVector<struct con_pos> conns;
+ // TODO because of this we have to overload setAxis function and update that in there
+};
+
+class Signal : public Connection {
+public:
+ Signal(const Connector *start, const Connector *end);
};
#define CON_AXIS_X(Y) QLineF(QPointF(0, Y), QPointF(1, Y))
diff --git a/qtmips_gui/coreview/constant.cpp b/qtmips_gui/coreview/constant.cpp
index 2f39fce..433d842 100644
--- a/qtmips_gui/coreview/constant.cpp
+++ b/qtmips_gui/coreview/constant.cpp
@@ -12,8 +12,8 @@ Constant::Constant(const Connector *con, const QString &text) : QGraphicsObject(
font.setPointSize(7);
this->text.setFont(font);
- con_our = new Connector(M_PI);
- conn = new Connection(con_our, con);
+ con_our = new Connector(Connector::AX_X);
+ conn = new Bus(con_our, con, 2);
connect(con, SIGNAL(updated(QPointF)), this, SLOT(ref_con_updated(QPointF)));
ref_con_updated(con->point()); // update initial connector position
}
diff --git a/qtmips_gui/coreview/junction.cpp b/qtmips_gui/coreview/junction.cpp
index 271284c..494aca6 100644
--- a/qtmips_gui/coreview/junction.cpp
+++ b/qtmips_gui/coreview/junction.cpp
@@ -6,7 +6,9 @@ using namespace coreview;
#define DOT_SIZE 4
//////////////////////
-Junction::Junction() : QGraphicsItem(nullptr) { }
+Junction::Junction(bool point) : QGraphicsItem(nullptr) {
+ this->point = point;
+}
Junction::~Junction() {
for (int i = 0; i < cons.size(); i++)
@@ -14,11 +16,17 @@ Junction::~Junction() {
}
QRectF Junction::boundingRect() const {
- return QRectF(-DOT_SIZE/2, -DOT_SIZE/2, DOT_SIZE, DOT_SIZE);
+ if (point)
+ return QRectF(-DOT_SIZE/2, -DOT_SIZE/2, DOT_SIZE, DOT_SIZE);
+ else
+ return QRectF();
}
void Junction::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute__((unused)), QWidget *widget __attribute__((unused))) {
+ if (!point)
+ return;
painter->setBrush(QBrush(QColor(0, 0, 0)));
+ painter->setPen(QPen(Qt::NoPen)); // Disable pen (render only brush)
painter->drawEllipse(-DOT_SIZE/2, -DOT_SIZE/2, DOT_SIZE, DOT_SIZE);
}
@@ -28,8 +36,8 @@ void Junction::setPos(qreal x, qreal y) {
con->setPos(x, y);
}
-Connector *Junction::new_connector(qreal angle) {
- Connector*n = new Connector(angle);
+Connector *Junction::new_connector(enum Connector::Axis axis) {
+ Connector*n = new Connector(axis);
cons.append(n);
setPos(x(), y()); // set connector's position
return n;
diff --git a/qtmips_gui/coreview/junction.h b/qtmips_gui/coreview/junction.h
index 1a8f5d7..2eaa732 100644
--- a/qtmips_gui/coreview/junction.h
+++ b/qtmips_gui/coreview/junction.h
@@ -10,17 +10,18 @@ namespace coreview {
class Junction : public QGraphicsItem {
public:
- Junction();
+ Junction(bool point = true);
~Junction();
QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
void setPos(qreal x, qreal y);
- Connector *new_connector(qreal angle);
+ Connector *new_connector(enum Connector::Axis axis = Connector::AX_X);
private:
QList<Connector*> cons;
+ bool point;
};
}
diff --git a/qtmips_gui/coreview/latch.cpp b/qtmips_gui/coreview/latch.cpp
index c3bab4f..e3d8ef5 100644
--- a/qtmips_gui/coreview/latch.cpp
+++ b/qtmips_gui/coreview/latch.cpp
@@ -69,8 +69,8 @@ void Latch::setPos(qreal x, qreal y) {
struct Latch::ConnectorPair Latch::new_connector(qreal cy) {
SANITY_ASSERT(cy < height, "Latch: Trying to create connector outside of latch height");
ConnectorPair cp;
- cp.in = new Connector(0);
- cp.out = new Connector(M_PI);
+ cp.in = new Connector(Connector::AX_X);
+ cp.out = new Connector(Connector::AX_X);
connectors.append(cp);
connectors_off.append(cy);
setPos(x(), y()); // Update connectors position
diff --git a/qtmips_gui/coreview/logicblock.cpp b/qtmips_gui/coreview/logicblock.cpp
index 1ee9a18..2e74a77 100644
--- a/qtmips_gui/coreview/logicblock.cpp
+++ b/qtmips_gui/coreview/logicblock.cpp
@@ -78,7 +78,7 @@ const Connector *LogicBlock::new_connector(qreal x, qreal y) {
y = sign(y);
// Note: we are using here that 0 and M_PI is same angle but different orientation (but we ignore orientation for now)
- Connector *c = new Connector(fabs(x) > fabs(y) ? 0 : M_PI_2);
+ Connector *c = new Connector(fabs(x) > fabs(y) ? Connector::AX_X : Connector::AX_Y);
connectors.append({
.con = c,
.x = x,
diff --git a/qtmips_gui/coreview/memory.cpp b/qtmips_gui/coreview/memory.cpp
index 8f1669d..a2e5899 100644
--- a/qtmips_gui/coreview/memory.cpp
+++ b/qtmips_gui/coreview/memory.cpp
@@ -53,8 +53,8 @@ ProgramMemory::ProgramMemory(machine::QtMipsMachine *machine) : Memory(machine)
cache = machine->config().cache_program().enabled();
set_type("Program");
- con_address = new Connector(0);
- con_inst = new Connector(M_PI);
+ con_address = new Connector(Connector::AX_X);
+ con_inst = new Connector(Connector::AX_X);
}
ProgramMemory::~ProgramMemory() {
@@ -81,11 +81,11 @@ DataMemory::DataMemory(machine::QtMipsMachine *machine) : Memory(machine) {
cache = machine->config().cache_data().enabled();
set_type("Data");
- con_address = new Connector(0);
- con_data_out = new Connector(M_PI);
- con_data_in = new Connector(0);
- con_req_write = new Connector(M_PI_2);
- con_req_read = new Connector(M_PI_2);
+ con_address = new Connector(Connector::AX_X);
+ con_data_out = new Connector(Connector::AX_X);
+ con_data_in = new Connector(Connector::AX_X);
+ con_req_write = new Connector(Connector::AX_X);
+ con_req_read = new Connector(Connector::AX_X);
}
DataMemory::~DataMemory() {
diff --git a/qtmips_gui/coreview/multiplexer.cpp b/qtmips_gui/coreview/multiplexer.cpp
index 7429fda..b25e6d1 100644
--- a/qtmips_gui/coreview/multiplexer.cpp
+++ b/qtmips_gui/coreview/multiplexer.cpp
@@ -10,15 +10,15 @@ using namespace coreview;
#define PENW 1
//////////////////////
-Multiplexer::Multiplexer(unsigned size) {
+Multiplexer::Multiplexer(unsigned size, bool ctl_up) {
this->size = size;
seton = 0;
- ctlfrom = false;
- con_ctl = new Connector(M_PI_2);
- con_out = new Connector(M_PI);
+ ctlfrom = ctl_up;
+ con_ctl = new Connector(Connector::AX_Y);
+ con_out = new Connector(Connector::AX_X);
con_in = new Connector*[size];
for (unsigned i = 0; i < size; i++)
- con_in[i] = new Connector(0);
+ con_in[i] = new Connector(Connector::AX_X);
setPos(x(), y()); // Set connectors possitions
}
@@ -80,7 +80,3 @@ void Multiplexer::set(unsigned i) {
update();
}
-void Multiplexer::setCtl(bool up) {
- ctlfrom = up;
- setPos(x(), y()); // Update connectors
-}
diff --git a/qtmips_gui/coreview/multiplexer.h b/qtmips_gui/coreview/multiplexer.h
index 2cfc90d..ad4fd0b 100644
--- a/qtmips_gui/coreview/multiplexer.h
+++ b/qtmips_gui/coreview/multiplexer.h
@@ -9,7 +9,7 @@ namespace coreview {
class Multiplexer : public QGraphicsItem {
public:
- Multiplexer(unsigned size);
+ Multiplexer(unsigned size, bool ctl_up = false);
~Multiplexer();
QRectF boundingRect() const;
@@ -21,7 +21,6 @@ public:
const Connector *connector_in(unsigned i) const; // Inputs
void set(unsigned i); // Set what value should be set as connected (indexing from 1 where 0 is no line)
- void setCtl(bool up); // Set if control signal is from up or down (in default down)
private:
bool ctlfrom;
diff --git a/qtmips_gui/coreview/programcounter.cpp b/qtmips_gui/coreview/programcounter.cpp
index c43ff6d..ab7d49b 100644
--- a/qtmips_gui/coreview/programcounter.cpp
+++ b/qtmips_gui/coreview/programcounter.cpp
@@ -22,8 +22,8 @@ ProgramCounter::ProgramCounter(machine::QtMipsMachine *machine) : QGraphicsObjec
connect(machine->registers(), SIGNAL(pc_update(std::uint32_t)), this, SLOT(pc_update(std::uint32_t)));
- con_in = new Connector(-M_PI_2);
- con_out = new Connector(M_PI_2);
+ con_in = new Connector(Connector::AX_Y);
+ con_out = new Connector(Connector::AX_Y);
setPos(x(), y()); // To set initial connectors positions
}
diff --git a/qtmips_gui/coreview/registers.cpp b/qtmips_gui/coreview/registers.cpp
index 87db32e..9a4fcff 100644
--- a/qtmips_gui/coreview/registers.cpp
+++ b/qtmips_gui/coreview/registers.cpp
@@ -10,13 +10,13 @@ using namespace coreview;
//////////////////////
Registers::Registers() : QGraphicsObject(nullptr), name("Registers", this) {
- con_read1 = new Connector(-M_PI_2);
- con_read1_reg = new Connector(-M_PI_2);
- con_read2 = new Connector(-M_PI_2);
- con_read2_reg = new Connector(-M_PI_2);
- con_write = new Connector(-M_PI_2);
- con_write_reg = new Connector(-M_PI_2);
- con_ctl_write = new Connector(-M_PI_2);
+ con_read1 = new Connector(Connector::AX_Y);
+ con_read1_reg = new Connector(Connector::AX_Y);
+ con_read2 = new Connector(Connector::AX_Y);
+ con_read2_reg = new Connector(Connector::AX_Y);
+ con_write = new Connector(Connector::AX_Y);
+ con_write_reg = new Connector(Connector::AX_Y);
+ con_ctl_write = new Connector(Connector::AX_Y);
// TODO do we want to have any hooks on real registers?