aboutsummaryrefslogtreecommitdiff
path: root/qtmips_gui/coreview/instructionview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qtmips_gui/coreview/instructionview.cpp')
-rw-r--r--qtmips_gui/coreview/instructionview.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/qtmips_gui/coreview/instructionview.cpp b/qtmips_gui/coreview/instructionview.cpp
index d989b7b..495edfb 100644
--- a/qtmips_gui/coreview/instructionview.cpp
+++ b/qtmips_gui/coreview/instructionview.cpp
@@ -52,7 +52,8 @@ InstructionView::InstructionView() : QGraphicsObject(nullptr), text(this) {
f.setPointSize(6);
text.setFont(f);
- instruction_update(machine::Instruction(), 0); // Initialize to NOP
+ // Initialize to NOP
+ instruction_update(machine::Instruction(), 0, machine::EXCAUSE_NONE);
}
QRectF InstructionView::boundingRect() const {
@@ -61,13 +62,19 @@ QRectF InstructionView::boundingRect() const {
void InstructionView::paint(QPainter *painter, const QStyleOptionGraphicsItem *option __attribute__((unused)), QWidget *widget __attribute__((unused))) {
painter->setPen(QPen(QColor(240, 240, 240)));
- painter->setBrush(QBrush(QColor(240, 240, 240)));
+ if (excause == machine::EXCAUSE_NONE)
+ painter->setBrush(QBrush(QColor(240, 240, 240)));
+ else
+ painter->setBrush(QBrush(QColor(255, 100, 100)));
painter->drawRoundRect(-WIDTH/2, 0, WIDTH, HEIGHT, ROUND, ROUND);
}
-void InstructionView::instruction_update(const machine::Instruction &i, std::uint32_t inst_addr) {
+void InstructionView::instruction_update(const machine::Instruction &i,
+ std::uint32_t inst_addr, machine::ExceptionCause excause) {
+
QRectF prev_box = boundingRect();
text.setText(i.to_str(inst_addr));
+ this->excause = excause;
QRectF box = text.boundingRect();
text.setPos(-box.width()/2, GAP);
update(prev_box.united(boundingRect()));