#include "settings.h"\r
\r
\r
-//#define DEBUG_SPDISPLAY 26 // To fill up to 256 bytes with values from 0 to $FF below the SP pointer\r
+//#define DEBUG_SPDISPLAY 1000 // To fill up to 256 bytes with values from 0 to $FF below the SP pointer any above are random values\r
\r
\r
//\r
//refresh(new QPushButton(tr("Refresh"))),\r
//address(new QLineEdit),\r
//go(new QPushButton(tr("Go"))),\r
- memBase(m68k_get_reg(NULL, M68K_REG_SP))\r
+ stackBase(m68k_get_reg(NULL, M68K_REG_SP))\r
{\r
- setWindowTitle(tr("Stack Browser"));\r
-\r
/*\r
address->setInputMask("hhhhhh");\r
QHBoxLayout * hbox1 = new QHBoxLayout;\r
// \r
void StackBrowserWindow::RefreshContents(void)\r
{\r
- char string[1024], buf[64];\r
- QString memDump;\r
- size_t i, j;\r
- uint8_t c;\r
+ char string[1024];\r
\r
if (isVisible())\r
{\r
- memBase = m68k_get_reg(NULL, M68K_REG_SP);\r
+#ifdef DEBUG_SPDISPLAY\r
+ m68k_set_reg(M68K_REG_SP, (vjs.DRAM_size - DEBUG_SPDISPLAY));\r
+#endif\r
+ if ((stackBase = m68k_get_reg(NULL, M68K_REG_SP)) && (stackBase < vjs.DRAM_size))\r
+ {\r
\r
#ifdef DEBUG_SPDISPLAY\r
+ for (int i = 0; i < DEBUG_SPDISPLAY; i++)\r
+ {\r
#if DEBUG_SPDISPLAY < 257\r
- memBase -= DEBUG_SPDISPLAY;\r
- for (i = 0; i < DEBUG_SPDISPLAY; i++)\r
- {\r
- jaguarMainRAM[memBase + i] = (uint8_t)i;\r
- }\r
+ jaguarMainRAM[stackBase + i] = (uint8_t)i;\r
+#else\r
+ jaguarMainRAM[stackBase + i] = (uint8_t)rand();\r
#endif\r
+ }\r
#endif\r
+ sprintf(string, "Stack Browser - 0x%06X", (unsigned int)(stackBase, (unsigned int)stackBase));\r
+ }\r
+ else\r
+ {\r
+ sprintf(string, "Stack Browser");\r
+ }\r
+\r
+ setWindowTitle(tr(string));\r
+ RefreshContentsWindow();\r
+ }\r
+}\r
+\r
\r
+// Refresh / Display the window contents\r
+void StackBrowserWindow::RefreshContentsWindow(void)\r
+{\r
+ char string[2048], buf[64];\r
+ QString memDump;\r
+ size_t i, j;\r
+ uint8_t c;\r
+\r
+ if (stackBase < vjs.DRAM_size)\r
+ {\r
for (i = 0; i < 480; i += 16)\r
{\r
- if ((memBase + i) < vjs.DRAM_size)\r
+ if ((stackBase + i) < vjs.DRAM_size)\r
{\r
- sprintf(string, "%s%06X: ", (i ? "<br>" : ""), (unsigned int)(memBase + i));\r
+ sprintf(string, "%s%06X: ", (i ? "<br>" : ""), (unsigned int)(stackBase + i));\r
\r
for (j = 0; j < 16; j++)\r
{\r
- if ((memBase + i + j) < vjs.DRAM_size)\r
+ if ((stackBase + i + j) < vjs.DRAM_size)\r
{\r
- sprintf(buf, "%02X ", jaguarMainRAM[memBase + i + j]);\r
+ sprintf(buf, "%02X ", jaguarMainRAM[stackBase + i + j]);\r
}\r
else\r
{\r
#ifdef _MSC_VER\r
#pragma message("Warning: !!! Need to dig the reason(s) why the 2nd line needs to use the instead of space !!!")\r
#else\r
-#warning "!!! Need to dig the reason(s) why the 2nd line needs to use the instead of space !!!"\r
+ #warning "!!! Need to dig the reason(s) why the 2nd line needs to use the instead of space !!!"\r
#endif // _MSC_VER\r
}\r
strcat(string, buf);\r
\r
for (j = 0; j < 16; j++)\r
{\r
- if ((memBase + i + j) < vjs.DRAM_size)\r
+ if ((stackBase + i + j) < vjs.DRAM_size)\r
{\r
- c = jaguarMainRAM[memBase + i + j];\r
+ c = jaguarMainRAM[stackBase + i + j];\r
//sprintf(buf, "&#%i;", c);\r
\r
//if (c == 0x20)\r
memDump += QString(string);\r
}\r
}\r
-\r
- text->clear();\r
- text->setText(memDump);\r
}\r
+ else\r
+ {\r
+ memDump += QString("");\r
+ }\r
+\r
+ text->clear();\r
+ text->setText(memDump);\r
}\r
\r
\r
-/*\r
+// \r
void StackBrowserWindow::keyPressEvent(QKeyEvent * e)\r
{\r
- if (e->key() == Qt::Key_Escape)\r
- hide();\r
- else if (e->key() == Qt::Key_PageUp)\r
- {\r
- memBase -= 480;\r
+ size_t offset;\r
\r
- if (memBase < 0)\r
- memBase = 0;\r
-\r
- RefreshContents();\r
- }\r
- else if (e->key() == Qt::Key_PageDown)\r
+ // Escape key to hide the window\r
+ if (e->key() == Qt::Key_Escape)\r
{\r
- memBase += 480;\r
-\r
- if (memBase > (0x200000 - 480))\r
- memBase = 0x200000 - 480;\r
-\r
- RefreshContents();\r
+ hide();\r
}\r
- else if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)\r
+ else\r
{\r
- memBase -= 16;\r
-\r
- if (memBase < 0)\r
- memBase = 0;\r
+ if (stackBase < vjs.DRAM_size)\r
+ {\r
+ if (e->key() == Qt::Key_PageUp)\r
+ {\r
+ offset = -480;\r
+ }\r
+ else\r
+ {\r
+ if (e->key() == Qt::Key_PageDown)\r
+ {\r
+ offset = 480;\r
+ }\r
+ else\r
+ {\r
+ if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)\r
+ {\r
+ offset = -16;\r
+ }\r
+ else\r
+ {\r
+ if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Plus)\r
+ {\r
+ offset = 16;\r
+ }\r
+ else\r
+ {\r
+ offset = 0;\r
+ }\r
+ }\r
+ }\r
+ }\r
\r
- RefreshContents();\r
- }\r
- else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)\r
- {\r
- memBase += 16;\r
+ if (offset)\r
+ {\r
+ if (offset < 0)\r
+ {\r
+ if ((stackBase += offset) < m68k_get_reg(NULL, M68K_REG_SP))\r
+ {\r
+ stackBase = m68k_get_reg(NULL, M68K_REG_SP);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if ((stackBase += offset) > (vjs.DRAM_size - 480))\r
+ {\r
+ stackBase = vjs.DRAM_size - 480;\r
+ }\r
\r
- if (memBase > (0x200000 - 480))\r
- memBase = 0x200000 - 480;\r
+ if (stackBase < m68k_get_reg(NULL, M68K_REG_SP))\r
+ {\r
+ stackBase = m68k_get_reg(NULL, M68K_REG_SP);\r
+ }\r
+ }\r
\r
- RefreshContents();\r
+ RefreshContentsWindow();\r
+ }\r
+ }\r
}\r
}\r
-*/\r
\r
\r
/*\r
{\r
bool ok;\r
QString newAddress = address->text();\r
- memBase = newAddress.toUInt(&ok, 16);\r
+ stackBase = newAddress.toUInt(&ok, 16);\r
RefreshContents();\r
}\r
*/\r