Skip to content

Commit dcbf893

Browse files
committed
gui: Fix address calculation in memory visualizer context menu
1 parent 9a3360e commit dcbf893

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

gui/qt/debugger/visualizerdisplaywidget.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ void VisualizerDisplayWidget::setRefreshRate(int rate) {
101101
m_refresh = rate;
102102
}
103103

104-
void VisualizerDisplayWidget::setConfig(float bppstep, int w, int h, uint32_t u, uint32_t c, bool g, uint32_t *d, uint32_t *e) {
104+
void VisualizerDisplayWidget::setConfig(uint32_t bppstep, int w, int h, uint32_t u, uint32_t c, bool g, uint32_t *d, uint32_t *e) {
105105
m_bppstep = bppstep;
106106
m_width = w;
107107
m_height = h;
@@ -125,8 +125,12 @@ void VisualizerDisplayWidget::contextMenu(const QPoint& posa) {
125125
uint32_t x = static_cast<uint32_t>(point.x());
126126
uint32_t y = static_cast<uint32_t>(point.y());
127127

128-
QString addr = int2hex(m_upbase + (static_cast<uint32_t>(std::floor((static_cast<float>(x)) / m_bppstep))) +
129-
(static_cast<unsigned int>(m_width) * y), 6);
128+
uint32_t offset = (static_cast<unsigned int>(m_width) * y + x) * m_bppstep / 8;
129+
if (m_control & 0x200) {
130+
// reverse order within 32-bit word for BEBO mode
131+
offset ^= (-m_bppstep / 8) & 3;
132+
}
133+
QString addr = int2hex(m_upbase + offset, 6);
130134

131135
coordStr += QString::number(x) + QStringLiteral("x") + QString::number(y);
132136
copyStr += QStringLiteral(" '") + addr + QStringLiteral("'");

gui/qt/debugger/visualizerdisplaywidget.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class VisualizerDisplayWidget : public QWidget {
1212
explicit VisualizerDisplayWidget(QWidget *p = Q_NULLPTR);
1313
~VisualizerDisplayWidget();
1414
void setRefreshRate(int rate);
15-
void setConfig(float bppstep, int w, int h, uint32_t u, uint32_t c, bool g, uint32_t *d, uint32_t *e);
15+
void setConfig(uint32_t bppstep, int w, int h, uint32_t u, uint32_t c, bool g, uint32_t *d, uint32_t *e);
1616

1717
protected:
1818
virtual void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
@@ -34,7 +34,7 @@ private slots:
3434
bool m_grid;
3535
uint32_t m_upbase;
3636
uint32_t m_control;
37-
float m_bppstep;
37+
uint32_t m_bppstep;
3838
uint32_t *m_data;
3939
uint32_t *m_data_end;
4040
};

gui/qt/visualizerwidget.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -291,17 +291,17 @@ void VisualizerWidget::forceUpdate() {
291291

292292
void VisualizerWidget::viewToString() {
293293
QString bpp;
294-
float bppstep = 1.0f;
294+
uint32_t bppstep = 1;
295295

296296
switch ((m_control >> 1) & 7) {
297-
case 0: bpp = QStringLiteral("1"); bppstep = 1.0f/0.125f; break;
298-
case 1: bpp = QStringLiteral("2"); bppstep = 1.0f/0.25f; break;
299-
case 2: bpp = QStringLiteral("4"); bppstep = 1.0f/0.5f; break;
300-
case 3: bpp = QStringLiteral("8"); bppstep = 1.0f/1.0f; break;
301-
case 4: bpp = QStringLiteral("1555"); bppstep = 1.0f/2.0f; break;
302-
case 5: bpp = QStringLiteral("888"); bppstep = 1.0f/3.0f; break;
303-
case 6: bpp = QStringLiteral("565"); bppstep = 1.0f/2.0f; break;
304-
case 7: bpp = QStringLiteral("444"); bppstep = 1.0f/1.5f; break;
297+
case 0: bpp = QStringLiteral("1"); bppstep = 1; break;
298+
case 1: bpp = QStringLiteral("2"); bppstep = 2; break;
299+
case 2: bpp = QStringLiteral("4"); bppstep = 4; break;
300+
case 3: bpp = QStringLiteral("8"); bppstep = 8; break;
301+
case 4: bpp = QStringLiteral("1555"); bppstep = 16; break;
302+
case 5: bpp = QStringLiteral("888"); bppstep = 32; break;
303+
case 6: bpp = QStringLiteral("565"); bppstep = 16; break;
304+
case 7: bpp = QStringLiteral("444"); bppstep = 16; break;
305305
default: break;
306306
}
307307

0 commit comments

Comments
 (0)