2 // memory1browser.cpp - Jaguar memory window 1 browser
6 // JPM = Jean-Paul Mari <djipi.mari@gmail.com>
9 // --- ---------- -----------------------------------------------------------
10 // JPM 08/07/2017 Created this file
16 #include "memory1browser.h"
18 #include "debugger/DBGManager.h"
23 Memory1BrowserWindow::Memory1BrowserWindow(QWidget
* parent
/*= 0*/): QWidget(parent
, Qt::Dialog
),
24 layout(new QVBoxLayout
), text(new QLabel
),
25 refresh(new QPushButton(tr("Refresh"))),
26 address(new QLineEdit
),
27 go(new QPushButton(tr("Go"))),
28 memBase(0), memOrigin(0), NumWinOrigin(0)
30 address
->setPlaceholderText("0x<value>, decimal value or symbol name");
32 QHBoxLayout
* hbox1
= new QHBoxLayout
;
33 hbox1
->addWidget(refresh
);
34 hbox1
->addWidget(address
);
37 QFont
fixedFont("Lucida Console", 8, QFont::Normal
);
38 fixedFont
.setStyleHint(QFont::TypeWriter
);
39 text
->setFont(fixedFont
);
42 layout
->addWidget(text
);
43 layout
->addLayout(hbox1
);
45 connect(refresh
, SIGNAL(clicked()), this, SLOT(RefreshContentsWindow()));
46 connect(go
, SIGNAL(clicked()), this, SLOT(GoToAddress()));
50 // Refresh / Display the window contents
51 void Memory1BrowserWindow::RefreshContents(size_t NumWin
)
57 sprintf(string
, "Memory %i - 0x%06X", (unsigned int)((NumWinOrigin
= NumWin
) + 1), (unsigned int)memOrigin
);
58 setWindowTitle(tr(string
));
59 RefreshContentsWindow();
64 // Refresh / Display the window contents
65 void Memory1BrowserWindow::RefreshContentsWindow(void)
67 char string
[1024], buf
[64];
72 for (i
= 0; i
< 480; i
+= 16)
74 sprintf(string
, "%s%06X: ", (i
? "<br>" : ""), (unsigned int)(memBase
+ i
));
76 for (j
= 0; j
< 16; j
++)
78 sprintf(buf
, "%02X ", jaguarMainRAM
[memBase
+ i
+ j
]);
85 for (j
= 0; j
< 16; j
++)
87 c
= jaguarMainRAM
[memBase
+ i
+ j
];
88 sprintf(buf
, "&#%i;", c
);
91 sprintf(buf
, " ");
93 if ((c
< 0x20) || (c
> 0x7E))
99 memDump
+= QString(string
);
103 text
->setText(memDump
);
108 void Memory1BrowserWindow::keyPressEvent(QKeyEvent
* e
)
110 if (e
->key() == Qt::Key_Escape
)
116 if (e
->key() == Qt::Key_PageUp
)
118 if ((memBase
-= 480) < 0)
123 RefreshContentsWindow();
127 if (e
->key() == Qt::Key_PageDown
)
129 if ((memBase
+= 480) > (vjs
.DRAM_size
- 480))
131 memBase
= vjs
.DRAM_size
- 480;
134 RefreshContentsWindow();
138 if (e
->key() == Qt::Key_Up
|| e
->key() == Qt::Key_Minus
)
140 if ((memBase
-= 16) < 0)
145 RefreshContentsWindow();
149 if (e
->key() == Qt::Key_Down
|| e
->key() == Qt::Key_Equal
)
151 if ((memBase
+= 16) > (vjs
.DRAM_size
- 480))
153 memBase
= vjs
.DRAM_size
- 480;
156 RefreshContentsWindow();
160 if (e
->key() == Qt::Key_Return
)
172 // Go to the requested address
173 // Address can be an hexa, decimal or a symbol name
174 void Memory1BrowserWindow::GoToAddress(void)
181 QPalette p
= address
->palette();
182 newAddress
= address
->text();
184 if ((len
= newAddress
.size()))
186 if ((len
> 1) && (newAddress
.at(0) == QChar('0')) && (newAddress
.at(1) == QChar('x')))
188 newmemBase
= newAddress
.toUInt(&ok
, 16);
192 if (!(newmemBase
= DBGManager_GetAdrFromSymbolName(newAddress
.toLatin1().data())))
194 newmemBase
= newAddress
.toUInt(&ok
, 10);
202 if (!ok
|| (newmemBase
< 0) || (newmemBase
> vjs
.DRAM_size
))
204 p
.setColor(QPalette::Text
, Qt::red
);
208 p
.setColor(QPalette::Text
, Qt::black
);
209 memOrigin
= (memBase
= newmemBase
);
210 RefreshContents(NumWinOrigin
);
212 address
->setPalette(p
);