Keep the scrollbar position in accordance of the M68K PC pointer
authorJean-Paul Mari <djipi.mari@gmail.com>
Sun, 15 Oct 2017 19:08:08 +0000 (15:08 -0400)
committerJean-Paul Mari <djipi.mari@gmail.com>
Sun, 15 Oct 2017 19:08:08 +0000 (15:08 -0400)
VS2015/virtualjaguar.vcxproj.user
docs/vj_ReleaseNotes.txt
src/debugger/m68kDasmWin.cpp
src/debugger/m68kDasmWin.h

index e9edadc..e9f0ef6 100644 (file)
@@ -7,7 +7,7 @@
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">\r
     <LocalDebuggerEnvironment>PATH=$(QTDIR)\bin%3b$(PATH)</LocalDebuggerEnvironment>\r
     <QTDIR>C:\Qt\Qt5.5.1\msvc2015_64</QTDIR>\r
-    <LocalDebuggerCommandArguments>C:\Projects\GLib-M68K\Lib-Test-M68K\Debug\LibTestM68K_Debug.elf --debugger</LocalDebuggerCommandArguments>\r
+    <LocalDebuggerCommandArguments>C:\Projects\quake2\JagCake\Debug\JagCake_Debug.elf --debugger</LocalDebuggerCommandArguments>\r
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>\r
     <LocalDebuggerWorkingDirectory>$(OutDir)</LocalDebuggerWorkingDirectory>\r
   </PropertyGroup>\r
index 361dd1b..533df09 100644 (file)
@@ -16,6 +16,8 @@ Release 3 (WiP)
 -- The setting is now only the reference used\r
 11) Fixed the SP (Stack) window UI potential missing data\r
 12) Create a directory for EEPROMs (based on the EEPROMs setting) if it doesn't already exist\r
+13) Keep the scrollbar position in accordance of the M68K PC pointer\r
+-- User will be able to see the source without the need to move down/up the scrollbar\r
 \r
 Release 2 (3rd September 2017)\r
 ------------------------------\r
@@ -91,6 +93,7 @@ Known issues
 -- Missing vectors may be added in future release\r
 8) User needs to manualy check if the Atari Jaguar executable match his source code files\r
 -- Otherwise, source code and assembly may not match or leads to instabilities\r
+9) Application needs to be restarted in case of keybindings changes\r
 \r
 Cosmetic / UX issues\r
 ====================\r
index 2d1daa3..de50c5f 100644 (file)
-//
-//  m68kDasmWin.cpp - M68K disassembly window
-//
-// by Jean-Paul Mari
-//
-// JPM = Jean-Paul Mari <djipi.mari@gmail.com>
-//
-// Who  When        What
-// ---  ----------  -------------------------------------------------------------
-// JPM  06/27/2016  Created this file
-// JPM  12/04/2016  Suport ELF debug information
-// JPM              Replacing the ELF support by the debugger information manager calls
-//
-
-// STILL TO DO:
-//
-
-#include       <stdlib.h>
-#include "debugger/m68kDasmWin.h"
-//#include "memory.h"
-#include "m68000/m68kinterface.h"
-#include "dsp.h"
-#include "gpu.h"
-//#include "jaguar.h"
-//#include "ELFManager.h"
-#include "DBGManager.h"
-//extern       jaguarRunAddress;
-#include "settings.h"
-
-
-m68KDasmWindow::m68KDasmWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog),
-       layout(new QVBoxLayout), text(new QTextBrowser),
-//     layout(new QTabWidget), text(new QLabel),
-#if 0
-       refresh(new QPushButton(tr("Refresh"))),
-       address(new QLineEdit),
-       go(new QPushButton(tr("Go"))),
-#endif
-//     memBase(0x4000)
-       memBase(0)
-{
-//     m68kDasmWindow *m68kDasmWin = new m68kDasmWindow();
-//     setWindowTitle(tr("Jaguar Disassembly Window"));
-//     layout->addTab(new m68KDasmWindow(), tr("M68K Disassembly"));
-       //layout = new QTabWidget;
-       //layout->QWidget();
-
-#if 0
-       address->setInputMask("hhhhhh");
-       QHBoxLayout * hbox1 = new QHBoxLayout;
-       hbox1->addWidget(refresh);
-       hbox1->addWidget(address);
-       hbox1->addWidget(go);
-#endif
-
-       // Need to set the size as well...
-//     resize(560, 480);
-
-       QFont fixedFont("Lucida Console", 8, QFont::Normal);
-//     QFont fixedFont("", 8, QFont::Normal);
-       fixedFont.setStyleHint(QFont::Monospace);   //TypeWriter
-       fixedFont.setLetterSpacing(QFont::PercentageSpacing, 100);
-       text->setFont(fixedFont);
-//     text->setStyleSheet("background-color: DeepSkyBlue;");
-////   layout->setSizeConstraint(QLayout::SetFixedSize);
-       setLayout(layout);
-
-       layout->addWidget(text);
-//     layout->addWidget(refresh);
-#if 0
-       layout->addLayout(hbox1);
-#endif
-
-#if 0
-       connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));
-       connect(go, SIGNAL(clicked()), this, SLOT(GoToAddress()));
-#endif
-}
-
-
-//
-void m68KDasmWindow::RefreshContents(void)
-{
-       //char ;        //, buf[64];
-       QString s;
-       char buffer[1024], string[1024], adresse[16];
-       size_t pc = memBase, oldpc;
-       size_t m68kPC = m68k_get_reg(NULL, M68K_REG_PC);
-       char *Symbol = NULL, *LineSrc, *CurrentLineSrc = NULL;
-       bool m68kPCShow = false;
-       bool constant, adr, equal, Error;
-       size_t j, i;
-       size_t  nbr = vjs.nbrdisasmlines;
-       char *PtrFullSource, *CurrentPtrFullSource = (char *)calloc(1, 1);
-       size_t NumLine; // , CurrentNumLine = 0;
-//     size_t CurrentNumLine = DBGManager_GetNumLineFromAdr(pc, DBG_NO_TAG) - 1;
-       size_t CurrentNumLine;
-       char singleCharString[2] = { 0, 0 };
-
-       text->clear();
-
-       for (i = 0; i < nbr; i++)
-       {
-               oldpc = pc;
-//             WriteLog("%06X: %s\n", oldpc, buffer);
-               adr = constant = equal = false;
-
-               // Display source filename based on the program address
-               if (vjs.displayFullSourceFilename && (PtrFullSource = DBGManager_GetFullSourceFilenameFromAdr(oldpc, &Error)) && strcmp(CurrentPtrFullSource, PtrFullSource))
-               {
-#if 0
-                       if (strcmp(OldPtrFullSource, PtrFullSource))
-#endif
-                       {
-#if 1
-                               if (i)
-                               {
-                                       nbr++;
-                                       s += QString("<br>");
-                               }
-#endif
-                               CurrentNumLine = DBGManager_GetNumLineFromAdr(pc, DBG_NO_TAG) - 1;
-                               nbr++;
-                               CurrentPtrFullSource = (char *)realloc(CurrentPtrFullSource, strlen(PtrFullSource) + 1);
-                               strcpy(CurrentPtrFullSource, PtrFullSource);
-                               if (!Error)
-                               {
-                                       sprintf(string, "<font color='#ff0000'><b>%s</b></font><br>", PtrFullSource);
-                               }
-                               else
-                               {
-                                       sprintf(string, "<font color='#00ff00'><b>%s</b></font><br>", PtrFullSource);
-                               }
-                               s += QString(string);
-                       }
-               }
-
-               // Display line number based on the program address
-               if ((NumLine = DBGManager_GetNumLineFromAdr(oldpc, DBG_NO_TAG)) && ((signed)NumLine > (signed)CurrentNumLine))
-               {
-                       if ((signed)CurrentNumLine < 0)
-                       {
-                               CurrentNumLine = NumLine - 1;
-                       }
-                       sprintf(string, "| <font color='#006400'>%5u</font> | ", (unsigned int)++CurrentNumLine);               // (CurrentNumLine = NumLine));
-               }
-               else
-               {
-                       sprintf(string, "|      | ");
-               }
-               s += QString(string);
-
-               // Display line source based on the program address
-               if (((signed)CurrentNumLine > 0) && (LineSrc = DBGManager_GetLineSrcFromNumLineBaseAdr(oldpc, CurrentNumLine)) && (LineSrc != CurrentLineSrc))
-               {
-                       sprintf(string, "<font color='#006400'>%s</font><br>", (CurrentLineSrc = LineSrc));
-                       s += QString(string);
-                       nbr++;
-               }
-               else
-               {
-                       // Display symbol, or line source, based on the program address
-                       if (!CurrentLineSrc && !Symbol && (Symbol = DBGManager_GetSymbolnameFromAdr(oldpc)))
-                       {
-                               sprintf(string, "%s:<br>", Symbol);
-                               s += QString(string);
-                               nbr++;
-                       }
-                       // Display the assembly line based on the current PC
-                       else
-                       {
-                               pc += m68k_disassemble(buffer, (unsigned int)pc, 0, vjs.disasmopcodes);
-
-                               if (m68kPC == oldpc)
-                               {
-                                       sprintf(string, "-> %06X: %s<br>", (unsigned int)oldpc, buffer);
-                                       m68kPCShow = true;
-                               }
-                               else
-                               {
-                                       sprintf(string, "   %06X: %s<br>", (unsigned int)oldpc, buffer);
-                               }
-
-                               buffer[0] = 0;  // Clear string
-                               //char singleCharString[2] = { 0, 0 };
-
-                               for (j = 0; j < strlen(string); j++)
-                               {
-                                       if (string[j] == ' ')
-                                       {
-                                               strcat(buffer, "&nbsp;");
-                                               adr = constant = false;
-                                       }
-                                       else
-                                       {
-                                               switch (string[j])
-                                               {
-                                               case    '#':
-                                                       constant = true;
-                                                       break;
-
-                                               case    '$':
-                                                       adr = true;
-                                                       break;
-
-                                               case    ',':
-                                                       constant = adr = equal = false;
-                                                       break;
-
-                                               case    '=':
-                                                       equal = true;
-                                                       break;
-                                               }
-
-                                               if (!constant && adr && !equal)
-                                               {
-                                                       int l = 0;
-                                                       char *p;
-                                                       do
-                                                       {
-                                                               adresse[l++] = string[++j];
-                                                       } while ((string[(j + 1)] >= '0') && (string[(j + 1)] <= '9') || (string[(j + 1)] >= 'A') && (string[(j + 1)] <= 'F'));
-                                                       adresse[l] = 0;
-
-                                                       if (Symbol = DBGManager_GetSymbolnameFromAdr(strtoul(adresse, &p, 16)))
-                                                       {
-                                                               strcat(buffer, Symbol);
-                                                       }
-                                                       else
-                                                       {
-                                                               strcat(buffer, "$");
-                                                               strcat(buffer, adresse);
-                                                       }
-
-                                                       adr = false;
-                                               }
-                                               else
-                                               {
-                                                       singleCharString[0] = string[j];
-                                                       strcat(buffer, singleCharString);
-                                               }
-                                       }
-                               }
-
-                               Symbol = NULL;
-                               //              s += QString(string);
-                               s += QString(buffer);
-                               //              text->setStyleSheet("QLabel { background-color : red; color : blue; }");
-                       }
-               }
-       }
-
-//     text->clear();
-
-       if (m68kPCShow)
-       {
-               text->setText(s);
-       }
-       else
-       {
-               Use68KPCAddress();
-               RefreshContents();
-       }
-
-       free(CurrentPtrFullSource);
-}
-
-
-#if 0
-void m68KDasmWindow::keyPressEvent(QKeyEvent * e)
-{
-//     if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return)
-//             hide();
-#if 0
-       else if (e->key() == Qt::Key_PageUp)
-       {
-               memBase -= 64;
-
-               if (memBase < 0)
-                       memBase = 0;
-
-               RefreshContents();
-       }
-       else if (e->key() == Qt::Key_PageDown)
-       {
-               memBase += 64;
-
-               if (memBase > (0xF00000 - 64))
-                       memBase = 0xF00000 - 64;
-
-               RefreshContents();
-       }
-       else if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)
-       {
-               memBase -= 16;
-
-               if (memBase < 0)
-                       memBase = 0;
-
-               RefreshContents();
-       }
-       else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)
-       {
-               memBase += 16;
-
-               if (memBase > (0xF00000 - 64))
-                       memBase = 0xF00000 - 64;
-
-               RefreshContents();
-       }
-#endif
-}
-#endif
-
-
-// Set mem base PC address using the 68K pc current address
-void   m68KDasmWindow::Use68KPCAddress(void)
-{
-       memBase = m68k_get_reg(NULL, M68K_REG_PC);
-}
-
-
-// Set mem base PC address
-void m68KDasmWindow::SetAddress(int address)
-{
-       memBase = address;
-//     RefreshContents();
-}
-
-
-// Set mem base PC address based on user interaction
-#if 0
-void m68KDasmWindow::GoToAddress(void)
-{
-       bool ok;
-
-       QString newAddress = address->text();
-       memBase = newAddress.toUInt(&ok, 16);
-       RefreshContents();
-}
-#endif
+//\r
+//  m68kDasmWin.cpp - M68K disassembly window\r
+//\r
+// by Jean-Paul Mari\r
+//\r
+// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
+//\r
+// Who  When        What\r
+// ---  ----------  -------------------------------------------------------------\r
+// JPM  06/27/2016  Created this file\r
+// JPM  12/04/2016  Suport ELF debug information\r
+// JPM              Replacing the ELF support by the debugger information manager calls\r
+//\r
+\r
+// STILL TO DO:\r
+//\r
+\r
+#include       <stdlib.h>\r
+#include "debugger/m68kDasmWin.h"\r
+//#include "memory.h"\r
+#include "m68000/m68kinterface.h"\r
+#include "dsp.h"\r
+#include "gpu.h"\r
+//#include "jaguar.h"\r
+//#include "ELFManager.h"\r
+#include "DBGManager.h"\r
+//extern       jaguarRunAddress;\r
+#include "settings.h"\r
+\r
+\r
+// \r
+m68KDasmWindow::m68KDasmWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog),\r
+       layout(new QVBoxLayout), text(new QTextBrowser),\r
+//     layout(new QTabWidget), text(new QLabel),\r
+#if 0\r
+       refresh(new QPushButton(tr("Refresh"))),\r
+       address(new QLineEdit),\r
+       go(new QPushButton(tr("Go"))),\r
+#endif\r
+//     memBase(0x4000)\r
+       //sb(new QScrollBar),\r
+       memBase(0)\r
+{\r
+//     m68kDasmWindow *m68kDasmWin = new m68kDasmWindow();\r
+//     setWindowTitle(tr("Jaguar Disassembly Window"));\r
+//     layout->addTab(new m68KDasmWindow(), tr("M68K Disassembly"));\r
+       //layout = new QTabWidget;\r
+       //layout->QWidget();\r
+\r
+#if 0\r
+       address->setInputMask("hhhhhh");\r
+       QHBoxLayout * hbox1 = new QHBoxLayout;\r
+       hbox1->addWidget(refresh);\r
+       hbox1->addWidget(address);\r
+       hbox1->addWidget(go);\r
+#endif\r
+\r
+       // Need to set the size as well...\r
+//     resize(560, 480);\r
+\r
+       QFont fixedFont("Lucida Console", 8, QFont::Normal);\r
+//     QFont fixedFont("", 8, QFont::Normal);\r
+       fixedFont.setStyleHint(QFont::Monospace);   //TypeWriter\r
+       fixedFont.setLetterSpacing(QFont::PercentageSpacing, 100);\r
+       text->setFont(fixedFont);\r
+//     sb = layout->text->verticalScrollBar();\r
+//     text->setStyleSheet("background-color: DeepSkyBlue;");\r
+////   layout->setSizeConstraint(QLayout::SetFixedSize);\r
+       setLayout(layout);\r
+\r
+       layout->addWidget(text);\r
+//     layout->addWidget(refresh);\r
+#if 0\r
+       layout->addLayout(hbox1);\r
+#endif\r
+\r
+#if 0\r
+       connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));\r
+       connect(go, SIGNAL(clicked()), this, SLOT(GoToAddress()));\r
+#endif\r
+}\r
+\r
+\r
+//\r
+void m68KDasmWindow::RefreshContents(void)\r
+{\r
+       //char ;        //, buf[64];\r
+       QString s;\r
+       char buffer[1024], string[1024], adresse[16];\r
+       size_t pc = memBase, oldpc;\r
+       size_t m68kPC = m68k_get_reg(NULL, M68K_REG_PC);\r
+       size_t m68KPCNbrDisasmLines = 0;\r
+       char *Symbol = NULL, *LineSrc, *CurrentLineSrc = NULL;\r
+       bool m68kPCShow = false;\r
+       bool constant, adr, equal, Error;\r
+       size_t j, i;\r
+       size_t  nbr = vjs.nbrdisasmlines;\r
+       char *PtrFullSource, *CurrentPtrFullSource = (char *)calloc(1, 1);\r
+       size_t NumLine; // , CurrentNumLine = 0;\r
+//     size_t CurrentNumLine = DBGManager_GetNumLineFromAdr(pc, DBG_NO_TAG) - 1;\r
+       size_t CurrentNumLine;\r
+       char singleCharString[2] = { 0, 0 };\r
+\r
+       //text->clear();\r
+\r
+       for (i = 0; i < nbr; i++)\r
+       {\r
+               //sb->setValue(sb->maximum());\r
+               //j = text->verticalScrollBar()->maximum();\r
+               //text->verticalScrollBar()->setValue(text->verticalScrollBar()->maximum());\r
+               //if (text->verticalScrollBar()->value())\r
+               //{\r
+               //      j = 1;\r
+               //}\r
+\r
+               oldpc = pc;\r
+//             WriteLog("%06X: %s\n", oldpc, buffer);\r
+               adr = constant = equal = false;\r
+\r
+               // Display source filename based on the program address\r
+               if (vjs.displayFullSourceFilename && (PtrFullSource = DBGManager_GetFullSourceFilenameFromAdr(oldpc, &Error)) && strcmp(CurrentPtrFullSource, PtrFullSource))\r
+               {\r
+#if 0\r
+                       if (strcmp(OldPtrFullSource, PtrFullSource))\r
+#endif\r
+                       {\r
+#if 1\r
+                               if (i)\r
+                               {\r
+                                       nbr++;\r
+                                       s += QString("<br>");\r
+                               }\r
+#endif\r
+                               CurrentNumLine = DBGManager_GetNumLineFromAdr(pc, DBG_NO_TAG) - 1;\r
+                               nbr++;\r
+                               CurrentPtrFullSource = (char *)realloc(CurrentPtrFullSource, strlen(PtrFullSource) + 1);\r
+                               strcpy(CurrentPtrFullSource, PtrFullSource);\r
+                               if (!Error)\r
+                               {\r
+                                       sprintf(string, "<font color='#ff0000'><b>%s</b></font><br>", PtrFullSource);\r
+                               }\r
+                               else\r
+                               {\r
+                                       sprintf(string, "<font color='#00ff00'><b>%s</b></font><br>", PtrFullSource);\r
+                               }\r
+                               s += QString(string);\r
+                       }\r
+               }\r
+\r
+               // Display line number based on the program address\r
+               if ((NumLine = DBGManager_GetNumLineFromAdr(oldpc, DBG_NO_TAG)) && ((signed)NumLine > (signed)CurrentNumLine))\r
+               {\r
+                       if ((signed)CurrentNumLine < 0)\r
+                       {\r
+                               CurrentNumLine = NumLine - 1;\r
+                       }\r
+                       sprintf(string, "| <font color='#006400'>%5u</font> | ", (unsigned int)++CurrentNumLine);               // (CurrentNumLine = NumLine));\r
+               }\r
+               else\r
+               {\r
+                       sprintf(string, "|      | ");\r
+               }\r
+               s += QString(string);\r
+\r
+               // Display line source based on the program address\r
+               if (((signed)CurrentNumLine > 0) && (LineSrc = DBGManager_GetLineSrcFromNumLineBaseAdr(oldpc, CurrentNumLine)) && (LineSrc != CurrentLineSrc))\r
+               {\r
+                       sprintf(string, "<font color='#006400'>%s</font><br>", (CurrentLineSrc = LineSrc));\r
+                       s += QString(string);\r
+                       nbr++;\r
+               }\r
+               else\r
+               {\r
+                       // Display symbol, or line source, based on the program address\r
+                       if (!CurrentLineSrc && !Symbol && (Symbol = DBGManager_GetSymbolnameFromAdr(oldpc)))\r
+                       {\r
+                               sprintf(string, "%s:<br>", Symbol);\r
+                               s += QString(string);\r
+                               nbr++;\r
+                       }\r
+                       // Display the assembly line based on the current PC\r
+                       else\r
+                       {\r
+                               pc += m68k_disassemble(buffer, (unsigned int)pc, 0, vjs.disasmopcodes);\r
+\r
+                               if (m68kPC == oldpc)\r
+                               {\r
+                                       sprintf(string, "-> %06X: %s<br>", (unsigned int)oldpc, buffer);\r
+                                       m68kPCShow = true;\r
+                                       m68KPCNbrDisasmLines = i;\r
+                               }\r
+                               else\r
+                               {\r
+                                       sprintf(string, "   %06X: %s<br>", (unsigned int)oldpc, buffer);\r
+                               }\r
+\r
+                               buffer[0] = 0;  // Clear string\r
+                               //char singleCharString[2] = { 0, 0 };\r
+\r
+                               for (j = 0; j < strlen(string); j++)\r
+                               {\r
+                                       if (string[j] == ' ')\r
+                                       {\r
+                                               strcat(buffer, "&nbsp;");\r
+                                               adr = constant = false;\r
+                                       }\r
+                                       else\r
+                                       {\r
+                                               switch (string[j])\r
+                                               {\r
+                                               case    '#':\r
+                                                       constant = true;\r
+                                                       break;\r
+\r
+                                               case    '$':\r
+                                                       adr = true;\r
+                                                       break;\r
+\r
+                                               case    ',':\r
+                                                       constant = adr = equal = false;\r
+                                                       break;\r
+\r
+                                               case    '=':\r
+                                                       equal = true;\r
+                                                       break;\r
+                                               }\r
+\r
+                                               if (!constant && adr && !equal)\r
+                                               {\r
+                                                       int l = 0;\r
+                                                       char *p;\r
+                                                       do\r
+                                                       {\r
+                                                               adresse[l++] = string[++j];\r
+                                                       } while ((string[(j + 1)] >= '0') && (string[(j + 1)] <= '9') || (string[(j + 1)] >= 'A') && (string[(j + 1)] <= 'F'));\r
+                                                       adresse[l] = 0;\r
+\r
+                                                       if (Symbol = DBGManager_GetSymbolnameFromAdr(strtoul(adresse, &p, 16)))\r
+                                                       {\r
+                                                               strcat(buffer, Symbol);\r
+                                                       }\r
+                                                       else\r
+                                                       {\r
+                                                               strcat(buffer, "$");\r
+                                                               strcat(buffer, adresse);\r
+                                                       }\r
+\r
+                                                       adr = false;\r
+                                               }\r
+                                               else\r
+                                               {\r
+                                                       singleCharString[0] = string[j];\r
+                                                       strcat(buffer, singleCharString);\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               Symbol = NULL;\r
+                               //              s += QString(string);\r
+                               s += QString(buffer);\r
+                               //              text->setStyleSheet("QLabel { background-color : red; color : blue; }");\r
+                       }\r
+               }\r
+       }\r
+\r
+       // Display generated text\r
+       text->clear();\r
+       if (m68kPCShow)\r
+       {\r
+               text->setText(s);\r
+       }\r
+       else\r
+       {\r
+               Use68KPCAddress();\r
+               RefreshContents();\r
+       }\r
+\r
+       // Set the scrollbar position in accordance of the M68K PC pointer \r
+       if (m68KPCNbrDisasmLines > (nbr / 2))\r
+       {\r
+               text->verticalScrollBar()->setValue(text->verticalScrollBar()->maximum());\r
+       }\r
+       else\r
+       {\r
+               text->verticalScrollBar()->setValue(text->verticalScrollBar()->minimum());\r
+       }\r
+\r
+       free(CurrentPtrFullSource);\r
+}\r
+\r
+\r
+#if 0\r
+// \r
+void m68KDasmWindow::keyPressEvent(QKeyEvent * e)\r
+{\r
+//     if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return)\r
+//             hide();\r
+#if 0\r
+       else if (e->key() == Qt::Key_PageUp)\r
+       {\r
+               memBase -= 64;\r
+\r
+               if (memBase < 0)\r
+                       memBase = 0;\r
+\r
+               RefreshContents();\r
+       }\r
+       else if (e->key() == Qt::Key_PageDown)\r
+       {\r
+               memBase += 64;\r
+\r
+               if (memBase > (0xF00000 - 64))\r
+                       memBase = 0xF00000 - 64;\r
+\r
+               RefreshContents();\r
+       }\r
+       else if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)\r
+       {\r
+               memBase -= 16;\r
+\r
+               if (memBase < 0)\r
+                       memBase = 0;\r
+\r
+               RefreshContents();\r
+       }\r
+       else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)\r
+       {\r
+               memBase += 16;\r
+\r
+               if (memBase > (0xF00000 - 64))\r
+                       memBase = 0xF00000 - 64;\r
+\r
+               RefreshContents();\r
+       }\r
+#endif\r
+}\r
+#endif\r
+\r
+\r
+// Set mem base PC address using the 68K pc current address\r
+void   m68KDasmWindow::Use68KPCAddress(void)\r
+{\r
+       memBase = m68k_get_reg(NULL, M68K_REG_PC);\r
+}\r
+\r
+\r
+// Set mem base PC address\r
+void m68KDasmWindow::SetAddress(int address)\r
+{\r
+       memBase = address;\r
+//     RefreshContents();\r
+}\r
+\r
+\r
+#if 0\r
+// Set mem base PC address based on user interaction\r
+void m68KDasmWindow::GoToAddress(void)\r
+{\r
+       bool ok;\r
+\r
+       QString newAddress = address->text();\r
+       memBase = newAddress.toUInt(&ok, 16);\r
+       RefreshContents();\r
+}\r
+#endif\r
index 2340a37..72af61e 100644 (file)
@@ -1,50 +1,51 @@
-//
-// m68kDasmWin.h: M68K disassembly window
-//
-// JPM = Jean-Paul Mari <djipi.mari@gmail.com>
-//
-// Who  When        What
-// ---  ----------  -------------------------------------------------------------
-// JPM  06/27/2016  Created this file
-//
-
-#ifndef __M68KDASMWIN_H__
-#define __M68KDASMWIN_H__
-
-#include <QtWidgets>
-#include <stdint.h>
-
-class m68KDasmWindow: public QWidget
-{
-       Q_OBJECT
-
-       public:
-               m68KDasmWindow(QWidget * parent = 0);
-
-       public slots:
-//             void    DefineAllKeys(void);
-               void    RefreshContents(void);
-#if 0
-               void    GoToAddress(void);
-#endif
-               void    SetAddress(int address);
-               void    Use68KPCAddress(void);
-
-       protected:
-#if 0
-               void    keyPressEvent(QKeyEvent *);
-#endif
-
-       private:
-               QVBoxLayout * layout;
-               QTextBrowser * text;
-//             QLabel * text;
-#if 0
-               QPushButton * refresh;
-               QLineEdit * address;
-               QPushButton * go;
-#endif
-               size_t memBase;
-};
-
-#endif // __M68KDASMWIN_H__
+//\r
+// m68kDasmWin.h: M68K disassembly window\r
+//\r
+// JPM = Jean-Paul Mari <djipi.mari@gmail.com>\r
+//\r
+// Who  When        What\r
+// ---  ----------  -------------------------------------------------------------\r
+// JPM  06/27/2016  Created this file\r
+//\r
+\r
+#ifndef __M68KDASMWIN_H__\r
+#define __M68KDASMWIN_H__\r
+\r
+#include <QtWidgets>\r
+#include <stdint.h>\r
+\r
+class m68KDasmWindow: public QWidget\r
+{\r
+       Q_OBJECT\r
+\r
+       public:\r
+               m68KDasmWindow(QWidget * parent = 0);\r
+\r
+       public slots:\r
+//             void    DefineAllKeys(void);\r
+               void    RefreshContents(void);\r
+#if 0\r
+               void    GoToAddress(void);\r
+#endif\r
+               void    SetAddress(int address);\r
+               void    Use68KPCAddress(void);\r
+\r
+       protected:\r
+#if 0\r
+               void    keyPressEvent(QKeyEvent *);\r
+#endif\r
+\r
+       private:\r
+               QVBoxLayout *layout;\r
+               QTextBrowser *text;\r
+//             QScrollBar *sb;\r
+//             QLabel * text;\r
+#if 0\r
+               QPushButton * refresh;\r
+               QLineEdit * address;\r
+               QPushButton * go;\r
+#endif\r
+               size_t memBase;\r
+};\r
+\r
+#endif // __M68KDASMWIN_H__\r