]> Shamusworld >> Repos - virtualjaguar/commitdiff
Preparation for 2.1.0 release.
authorShamus Hammons <jlhamm@acm.org>
Wed, 30 Jan 2013 23:51:49 +0000 (17:51 -0600)
committerShamus Hammons <jlhamm@acm.org>
Wed, 30 Jan 2013 23:51:49 +0000 (17:51 -0600)
Added new icons, updated help file, and fixed/changed the various debug
browsers to work better. There are a few minor things left to fix, but
all the major stuff is done. Onward!

26 files changed:
res/blur.png [new file with mode: 0644]
res/fullscreen.png [new file with mode: 0644]
res/help.html
res/tool-68k-dis.png [new file with mode: 0644]
res/tool-cpu.png [new file with mode: 0644]
res/tool-memory.png [new file with mode: 0644]
res/tool-op.png [new file with mode: 0644]
res/tool-risc-dis.png [new file with mode: 0644]
res/zoom100.png
res/zoom200.png
res/zoom300.png
src/gui/controllertab.cpp
src/gui/debug/cpubrowser.cpp
src/gui/debug/m68kdasmbrowser.cpp
src/gui/debug/m68kdasmbrowser.h
src/gui/debug/memorybrowser.cpp
src/gui/debug/memorybrowser.h
src/gui/debug/opbrowser.cpp
src/gui/debug/riscdasmbrowser.cpp
src/gui/mainwin.cpp
src/gui/virtualjaguar.qrc
src/m68000/cpuextra.c
src/m68000/m68kdasm.c
src/m68000/m68kinterface.c
src/m68000/readcpu.c
virtualjaguar.pro

diff --git a/res/blur.png b/res/blur.png
new file mode 100644 (file)
index 0000000..efc1ad5
Binary files /dev/null and b/res/blur.png differ
diff --git a/res/fullscreen.png b/res/fullscreen.png
new file mode 100644 (file)
index 0000000..d365c28
Binary files /dev/null and b/res/fullscreen.png differ
index ac07ec644bd5f4643fbf5f67eba6a21b26d77368..29b814aeacfaca18a709afb3938a9bee29e0ef0b 100644 (file)
 <ul>
 <li>Power</li>
 <li>Pause</li>
+<li>Frame Advance</li>
 <li>Insert Cartridge...</li>
 <li>Use CD Unit</li>
 <li>Configure</li>
 
 <p><b>Pause</b> does the same as the toolbar button; see the &ldquo;Pause&rdquo; toolbar button description for details.</p>
 
+<p><b>Frame Advance</b> causes <i>Virtual Jaguar</i> to run for one frame (1/60th of a second for NTSC, 1/50th for PAL), and update the screen. This option only works when <i>Virtual Jaguar</i> is paused.</p>
+
 <p><b>Insert Cartridge...</b> does the same as the toolbar button; see the &ldquo;Insert Cartridge&rdquo; toolbar button description for details.</p>
 
 <p><b>Use CD Unit</b> does the same as the toolbar button; see the &ldquo;Use CD Unit&rdquo; toolbar button description for details.</p>
 <p>Under the Controller tab, there are the following options:</p>
 
 <ul>
-<li>A picture of a Jaguar controller showing which keys are defined</li>
-<li>A button labeled &ldquo;Define All Keys&rdquo;</li>
+<li>A picture of a Jaguar controller showing which inputs are defined</li>
+<li>A button labeled &ldquo;Define All Inputs&rdquo;</li>
 </ul>
 
-<p>Hovering over a letter on the picture of the Jaguar controller will highlight it; clicking on the letter will let you redefine that key. If you prefer, you can define all the keys at once by clicking on the &ldquo;Define All Keys&rdquo; button. It will then step through each button on the controller, one at a time, and wait for you to press the key that you wish to set it to. You can exit the key redefinition process at any time by pressing the <b>Esc</b> key on your keyboard.</p>
+<p>Hovering over a letter on the picture of the Jaguar controller will highlight it; clicking on the letter will let you redefine that input by pressing a key on the keyboard or button on a connected gamepad. If you prefer, you can define all inputs at once by clicking on the &ldquo;Define All Inputs&rdquo; button. It will then step through each input on the controller, one at a time, and wait for you to press the key/button that you wish to set it to. You can exit the key redefinition process at any time by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<p>NOTE: For gamepads to be detected, they must be connected to the computer before starting <i>Virtual Jaguar</i>.</p>
 
 <h2>EEPROMs</h2>
 
 
 <p><b>ABS to load</b> is the path to a Jaguar executable file that will be loaded in the Jaguar&rsquo;s main RAM. This file must have valid headers, otherwise <i>Virtual Jaguar</i> won&rsquo;t be able to load it. Assuming the file exists and has the correct headers in it, it will be loaded and run when <i>Virtual Jaguar</i> is first run.</p>
 
+<p>Also, when in Alpine mode, extra toolbar buttons are defined (also found under the extra &ldquo;Debug&rdquo; menu):</p>
+
+<ul>
+<li>Memory Browser</li>
+<li>CPU Browser</li>
+<li>OP Browser</li>
+<li>M68K Disassembly Browser</li>
+<li>RISC Disassembly Browser</li>
+</ul>
+
+<h3>Memory Browser</h3>
+
+<p>This window lets you inspect <i>Virtual Jaguar</i>&rsquo;s emulated memory space. The <b>PgDn</b> key will advance the top of the window&rsquo;s memory location by 480 bytes, and <b>PgUp</b> will go back by the same amount. The <b>Plus (+)</b> key will advance the top of the window&rsquo;s memory location by 16 bytes, and <b>Minus (-)</b> will go back by the same amount. Entering a memory location, in hexadecimal, in the edit field and pressing the <b>Go</b> button will display memory from that location. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>CPU Browser</h3>
+
+<p>This window shows the state of the various CPUs in the emulated Jaguar. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>OP Browser</h3>
+
+<p>This window shows the current state of object list that the Object Processor is pointing to. Note that most of the time, this will likely show an object list that has had its objects processed. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>M68K Disassembly Browser</h3>
+
+<p>This window provides a disassembly of 68000 opcodes. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
+<h3>RISC Disassembly Browser</h3>
+
+<p>This window provides a disassembly of RISC opcodes. It can be dismissed by clicking on the &ldquo;X&rdquo; in the upper corner of the dialog, or by pressing the <b>Esc</b> key on your keyboard.</p>
+
 <p>The aforementioned options will only work when <i>Virtual Jaguar</i> is run in Alpine mode, that is, when the --alpine flag is passed in. If you do not pass in the --alpine flag, <i>Virtual Jaguar</i> will run as it normally does, i.e., as a stock Jaguar, and nothing will be loaded by default.</p>
 
 <h2>For The Curious</h2>
diff --git a/res/tool-68k-dis.png b/res/tool-68k-dis.png
new file mode 100644 (file)
index 0000000..1696fa1
Binary files /dev/null and b/res/tool-68k-dis.png differ
diff --git a/res/tool-cpu.png b/res/tool-cpu.png
new file mode 100644 (file)
index 0000000..a5bf399
Binary files /dev/null and b/res/tool-cpu.png differ
diff --git a/res/tool-memory.png b/res/tool-memory.png
new file mode 100644 (file)
index 0000000..b809c05
Binary files /dev/null and b/res/tool-memory.png differ
diff --git a/res/tool-op.png b/res/tool-op.png
new file mode 100644 (file)
index 0000000..8c0f776
Binary files /dev/null and b/res/tool-op.png differ
diff --git a/res/tool-risc-dis.png b/res/tool-risc-dis.png
new file mode 100644 (file)
index 0000000..71e00d8
Binary files /dev/null and b/res/tool-risc-dis.png differ
index 8cbc738ea3258d7ddcc2577014a4fa08270493ba..5b56a3f83f63b4936d093bec676855974fdbc418 100644 (file)
Binary files a/res/zoom100.png and b/res/zoom100.png differ
index 62788fddc1520e7e38e15a8e738c22f58a6b4b0d..8ed29a7ccad1a0f73c45ed2addedf1a7e6188628 100644 (file)
Binary files a/res/zoom200.png and b/res/zoom200.png differ
index 9f9573fb0c332a114b05e2bc0cb63ee75636d7c6..238d387a2b26d7aa724032b783fdd824f3f37598 100644 (file)
Binary files a/res/zoom300.png and b/res/zoom300.png differ
index ce09270ff86b53fd2e186b42260d9ec95b9d389d..1af9f45572fc6801efcbcf481ba0e89709d0fa30 100644 (file)
@@ -23,7 +23,7 @@
 ControllerTab::ControllerTab(QWidget * parent/*= 0*/): QWidget(parent)
 {
        controllerWidget = new ControllerWidget(this);
-       redefineAll = new QPushButton(tr("Define All Keys"));
+       redefineAll = new QPushButton(tr("Define All Inputs"));
 
        QVBoxLayout * layout = new QVBoxLayout;
        layout->addWidget(controllerWidget);
index 3871dbca671dff6e41f20e3e890d43378f5e82cf..9951c648a458ae5f147350b935a9544115c21964 100644 (file)
@@ -98,7 +98,7 @@ void CPUBrowserWindow::RefreshContents(void)
 
 void CPUBrowserWindow::keyPressEvent(QKeyEvent * e)
 {
-       if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return)
+       if (e->key() == Qt::Key_Escape)
                hide();
        else if (e->key() == Qt::Key_PageUp)
        {
index 25829e15e47042c05230d9bd1c3e0c5304e88cf4..0d94aa321adf848d8c9436735fc02e2eba1e120a 100644 (file)
@@ -25,10 +25,18 @@ M68KDasmBrowserWindow::M68KDasmBrowserWindow(QWidget * parent/*= 0*/): QWidget(p
 //     layout(new QVBoxLayout), text(new QTextBrowser),
        layout(new QVBoxLayout), text(new QLabel),
        refresh(new QPushButton(tr("Refresh"))),
+       address(new QLineEdit),
+       go(new QPushButton(tr("Go"))),
        memBase(0x4000)
 {
        setWindowTitle(tr("M68K Disassembly Browser"));
 
+       address->setInputMask("hhhhhh");
+       QHBoxLayout * hbox1 = new QHBoxLayout;
+       hbox1->addWidget(refresh);
+       hbox1->addWidget(address);
+       hbox1->addWidget(go);
+
        // Need to set the size as well...
 //     resize(560, 480);
 
@@ -38,9 +46,11 @@ M68KDasmBrowserWindow::M68KDasmBrowserWindow(QWidget * parent/*= 0*/): QWidget(p
        setLayout(layout);
 
        layout->addWidget(text);
-       layout->addWidget(refresh);
+//     layout->addWidget(refresh);
+       layout->addLayout(hbox1);
 
        connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));
+       connect(go, SIGNAL(clicked()), this, SLOT(GoToAddress()));
 }
 
 
@@ -125,3 +135,13 @@ void M68KDasmBrowserWindow::keyPressEvent(QKeyEvent * e)
        }
 #endif
 }
+
+
+void M68KDasmBrowserWindow::GoToAddress(void)
+{
+       bool ok;
+       QString newAddress = address->text();
+       memBase = newAddress.toUInt(&ok, 16);
+       RefreshContents();
+}
+
index 77550eebb08d3b33a7db214265d03493de822d61..fe3f29d11602ce5690604803957d8a8a948e106b 100644 (file)
@@ -22,6 +22,7 @@ class M68KDasmBrowserWindow: public QWidget
        public slots:
 //             void DefineAllKeys(void);
                void RefreshContents(void);
+               void GoToAddress(void);
 
        protected:
                void keyPressEvent(QKeyEvent *);
@@ -31,6 +32,8 @@ class M68KDasmBrowserWindow: public QWidget
 //             QTextBrowser * text;
                QLabel * text;
                QPushButton * refresh;
+               QLineEdit * address;
+               QPushButton * go;
 
                int32_t memBase;
 };
index 7acc132969f66d7efe9bf97526b73fab125ae4fa..b2d2170f5ba308666541cccff30170a292afbce8 100644 (file)
@@ -22,10 +22,18 @@ MemoryBrowserWindow::MemoryBrowserWindow(QWidget * parent/*= 0*/): QWidget(paren
 //     layout(new QVBoxLayout), text(new QTextBrowser),
        layout(new QVBoxLayout), text(new QLabel),
        refresh(new QPushButton(tr("Refresh"))),
+       address(new QLineEdit),
+       go(new QPushButton(tr("Go"))),
        memBase(0)
 {
        setWindowTitle(tr("Memory Browser"));
 
+       address->setInputMask("hhhhhh");
+       QHBoxLayout * hbox1 = new QHBoxLayout;
+       hbox1->addWidget(refresh);
+       hbox1->addWidget(address);
+       hbox1->addWidget(go);
+
        // Need to set the size as well...
 //     resize(560, 480);
 
@@ -35,9 +43,11 @@ MemoryBrowserWindow::MemoryBrowserWindow(QWidget * parent/*= 0*/): QWidget(paren
        setLayout(layout);
 
        layout->addWidget(text);
-       layout->addWidget(refresh);
+//     layout->addWidget(refresh);
+       layout->addLayout(hbox1);
 
        connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));
+       connect(go, SIGNAL(clicked()), this, SLOT(GoToAddress()));
 }
 
 
@@ -83,7 +93,7 @@ void MemoryBrowserWindow::RefreshContents(void)
 
 void MemoryBrowserWindow::keyPressEvent(QKeyEvent * e)
 {
-       if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return)
+       if (e->key() == Qt::Key_Escape)
                hide();
        else if (e->key() == Qt::Key_PageUp)
        {
@@ -122,3 +132,13 @@ void MemoryBrowserWindow::keyPressEvent(QKeyEvent * e)
                RefreshContents();
        }
 }
+
+
+void MemoryBrowserWindow::GoToAddress(void)
+{
+       bool ok;
+       QString newAddress = address->text();
+       memBase = newAddress.toUInt(&ok, 16);
+       RefreshContents();
+}
+
index e373e517648dba4f6d5069e91946a050210c9126..ce3234d515a5fcfabc38539ddd5cab1ff22256c5 100644 (file)
@@ -22,6 +22,7 @@ class MemoryBrowserWindow: public QWidget
        public slots:
 //             void DefineAllKeys(void);
                void RefreshContents(void);
+               void GoToAddress(void);
 
        protected:
                void keyPressEvent(QKeyEvent *);
@@ -31,6 +32,8 @@ class MemoryBrowserWindow: public QWidget
 //             QTextBrowser * text;
                QLabel * text;
                QPushButton * refresh;
+               QLineEdit * address;
+               QPushButton * go;
 
                int32_t memBase;
 };
index f129bec62f98c4208fbff6d2f6e9a227de986af7..3c1d2eab17800a0be0038329aeed8f97d42f056b 100644 (file)
 
 
 OPBrowserWindow::OPBrowserWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog),
-//     layout(new QVBoxLayout), text(new QTextBrowser),
        layout(new QVBoxLayout), text(new QLabel),
-       refresh(new QPushButton(tr("Refresh")))//,
-//     memBase(0)
+       refresh(new QPushButton(tr("Refresh")))
 {
        setWindowTitle(tr("OP Browser"));
 
@@ -36,7 +34,10 @@ OPBrowserWindow::OPBrowserWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::D
 ////   layout->setSizeConstraint(QLayout::SetFixedSize);
        setLayout(layout);
 
-       layout->addWidget(text);
+       QScrollArea * scrollArea = new QScrollArea;
+       scrollArea->setWidgetResizable(true);
+       scrollArea->setWidget(text);
+       layout->addWidget(scrollArea);
        layout->addWidget(refresh);
 
        connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));
@@ -48,39 +49,8 @@ void OPBrowserWindow::RefreshContents(void)
        char string[1024];//, buf[64];
        QString opDump;
 
-#if 0
-       for(uint32_t i=0; i<480; i+=16)
-       {
-               sprintf(string, "%s%06X: ", (i != 0 ? "<br>" : ""), memBase + i);
-
-               for(uint32_t j=0; j<16; j++)
-               {
-                       sprintf(buf, "%02X ", jaguarMainRAM[memBase + i + j]);
-                       strcat(string, buf);
-               }
-
-               sprintf(buf, "| ");
-               strcat(string, buf);
-
-               for(uint32_t j=0; j<16; j++)
-               {
-                       uint8_t c = jaguarMainRAM[memBase + i + j];
-                       sprintf(buf, "&#%i;", c);
-
-                       if (c == 0x20)
-                               sprintf(buf, "&nbsp;");
-
-                       if ((c < 0x20) || ((c > 0x7F) && (c < 0xA0)))
-                               sprintf(buf, ".");
-
-                       strcat(string, buf);
-               }
-
-               memDump += QString(string);
-       }
-#endif
        uint32_t olp = OPGetListPointer();
-       sprintf(string, "OLP = $%08X<br><br>", olp);
+       sprintf(string, "OLP = $%X<br>", olp);
        opDump += QString(string);
 
        numberOfObjects = 0;
@@ -94,46 +64,10 @@ void OPBrowserWindow::RefreshContents(void)
 
 void OPBrowserWindow::keyPressEvent(QKeyEvent * e)
 {
-       if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return)
+       if (e->key() == Qt::Key_Escape)
                hide();
-#if 0
-       else if (e->key() == Qt::Key_PageUp)
-       {
-               memBase -= 480;
-
-               if (memBase < 0)
-                       memBase = 0;
-
+       else if (e->key() == Qt::Key_Enter)
                RefreshContents();
-       }
-       else if (e->key() == Qt::Key_PageDown)
-       {
-               memBase += 480;
-
-               if (memBase > (0x200000 - 480))
-                       memBase = 0x200000 - 480;
-
-               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 > (0x200000 - 480))
-                       memBase = 0x200000 - 480;
-
-               RefreshContents();
-       }
-#endif
 }
 
 
@@ -204,7 +138,7 @@ void OPBrowserWindow::DumpObjectList(QString & list)
                uint8_t objectType = lo & 0x07;
                uint32_t link = ((hi << 11) | (lo >> 21)) & 0x3FFFF8;
 //             WriteLog("%08X: %08X %08X %s", address, hi, lo, opType[objectType]);
-               sprintf(buf, "%08X: %08X %08X %s -> %08X", address, hi, lo, opType[objectType], link);
+               sprintf(buf, "<br>%06X: %08X %08X %s -> %06X", address, hi, lo, opType[objectType], link);
                list += QString(buf);
 
                if (objectType == 3)
@@ -231,7 +165,7 @@ void OPBrowserWindow::DumpObjectList(QString & list)
                {
                        // Runaway recursive link is bad!
 //                     WriteLog("***** SELF REFERENTIAL LINK *****\n\n");
-                       sprintf(buf, "***** SELF REFERENTIAL LINK *****<br><br>");
+                       sprintf(buf, "***** SELF REFERENTIAL LINK *****<br>");
                        list += QString(buf);
                }
        }
@@ -246,17 +180,17 @@ void OPBrowserWindow::DumpScaledObject(QString & list, uint64_t p0, uint64_t p1,
        char buf[512];
 
 //     WriteLog("          %08X %08X\n", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF));
-       sprintf(buf, "_________ %08X %08X<br>", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF));
+       sprintf(buf, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%08X %08X<br>", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF));
        list += QString(buf);
 //     WriteLog("          %08X %08X\n", (uint32)(p2>>32), (uint32)(p2&0xFFFFFFFF));
-       sprintf(buf, "_________ %08X %08X<br>", (uint32)(p2>>32), (uint32)(p2&0xFFFFFFFF));
+       sprintf(buf, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%08X %08X<br>", (uint32)(p2>>32), (uint32)(p2&0xFFFFFFFF));
        list += QString(buf);
        DumpBitmapCore(list, p0, p1);
        uint32 hscale = p2 & 0xFF;
        uint32 vscale = (p2 >> 8) & 0xFF;
        uint32 remainder = (p2 >> 16) & 0xFF;
 //     WriteLog("    [hsc: %02X, vsc: %02X, rem: %02X]\n", hscale, vscale, remainder);
-       sprintf(buf, "[hsc: %02X, vsc: %02X, rem: %02X]<br>", hscale, vscale, remainder);
+       sprintf(buf, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[hsc: %02X, vsc: %02X, rem: %02X]<br>", hscale, vscale, remainder);
        list += QString(buf);
 }
 
@@ -266,7 +200,7 @@ void OPBrowserWindow::DumpFixedObject(QString & list, uint64_t p0, uint64_t p1)
        char buf[512];
 
 //     WriteLog("          %08X %08X\n", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF));
-       sprintf(buf, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%08X %08X<br>", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF));
+       sprintf(buf, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%08X %08X<br>", (uint32)(p1>>32), (uint32)(p1&0xFFFFFFFF));
        list += QString(buf);
        DumpBitmapCore(list, p0, p1);
 }
@@ -298,7 +232,7 @@ void OPBrowserWindow::DumpBitmapCore(QString & list, uint64_t p0, uint64_t p1)
 //             ptr, firstPix, (flags&OPFLAG_REFLECT ? "REFLECT " : ""),
 //             (flags&OPFLAG_RMW ? "RMW " : ""), (flags&OPFLAG_TRANS ? "TRANS " : ""),
 //             (flags&OPFLAG_RELEASE ? "RELEASE" : ""), idx, pitch);
-       sprintf(buf, "    [%u x %u @ (%i, %u) (iw:%u, dw:%u) (%u bpp), p:%08X fp:%02X, fl:%s%s%s%s, idx:%02X, pt:%02X]<br>",
+       sprintf(buf, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[%u x %u @ (%i, %u) (iw:%u, dw:%u) (%u bpp), p:%06X fp:%02X, fl:%s%s%s%s, idx:%02X, pt:%02X]<br>",
                iwidth * bdMultiplier[bitdepth],
                height, xpos, ypos, iwidth, dwidth, op_bitmap_bit_depth[bitdepth],
                ptr, firstPix, (flags&OPFLAG_REFLECT ? "REFLECT " : ""),
@@ -306,3 +240,4 @@ void OPBrowserWindow::DumpBitmapCore(QString & list, uint64_t p0, uint64_t p1)
                (flags&OPFLAG_RELEASE ? "RELEASE" : ""), idx, pitch);
        list += QString(buf);
 }
+
index 194bb110c577ecf84e074b14eaec6a01c4359548..be2196f3ce21cd1124c64bf71c15d2c0e1e42cd6 100644 (file)
@@ -39,7 +39,6 @@ RISCDasmBrowserWindow::RISCDasmBrowserWindow(QWidget * parent/*= 0*/): QWidget(p
        hbox1->addWidget(address);
        hbox1->addWidget(go);
 
-
        // Need to set the size as well...
 //     resize(560, 480);
 
index 28d022b073f83266973dfa12a4b1e4984f76a289..88b4d19e160e201a4e2876f8d104e480fa27ef0b 100644 (file)
@@ -175,7 +175,7 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
        palAct->setCheckable(true);
        connect(palAct, SIGNAL(triggered()), this, SLOT(SetPAL()));
 
-       blurAct = new QAction(QIcon(":/res/generic.png"), tr("Blur"), this);
+       blurAct = new QAction(QIcon(":/res/blur.png"), tr("Blur"), this);
        blurAct->setStatusTip(tr("Sets OpenGL rendering to GL_NEAREST"));
        blurAct->setCheckable(true);
        connect(blurAct, SIGNAL(triggered()), this, SLOT(ToggleBlur()));
@@ -208,32 +208,33 @@ MainWin::MainWin(bool autoRun): running(true), powerButtonOn(false),
        frameAdvanceAct->setShortcut(QKeySequence(tr("F7")));
        connect(frameAdvanceAct, SIGNAL(triggered()), this, SLOT(FrameAdvance()));
 
-       fullScreenAct = new QAction(QIcon(":/res/generic.png"), tr("F&ull Screen"), this);
+       fullScreenAct = new QAction(QIcon(":/res/fullscreen.png"), tr("F&ull Screen"), this);
        fullScreenAct->setShortcut(QKeySequence(tr("F9")));
+       fullScreenAct->setCheckable(true);
        connect(fullScreenAct, SIGNAL(triggered()), this, SLOT(ToggleFullScreen()));
 
        // Debugger Actions
-       memBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("Memory Browser"), this);
+       memBrowseAct = new QAction(QIcon(":/res/tool-memory.png"), tr("Memory Browser"), this);
        memBrowseAct->setStatusTip(tr("Shows the Jaguar memory browser window"));
 //     memBrowseAct->setCheckable(true);
        connect(memBrowseAct, SIGNAL(triggered()), this, SLOT(ShowMemoryBrowserWin()));
 
-       cpuBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("CPU Browser"), this);
+       cpuBrowseAct = new QAction(QIcon(":/res/tool-cpu.png"), tr("CPU Browser"), this);
        cpuBrowseAct->setStatusTip(tr("Shows the Jaguar CPU browser window"));
 //     memBrowseAct->setCheckable(true);
        connect(cpuBrowseAct, SIGNAL(triggered()), this, SLOT(ShowCPUBrowserWin()));
 
-       opBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("OP Browser"), this);
+       opBrowseAct = new QAction(QIcon(":/res/tool-op.png"), tr("OP Browser"), this);
        opBrowseAct->setStatusTip(tr("Shows the Jaguar OP browser window"));
 //     memBrowseAct->setCheckable(true);
        connect(opBrowseAct, SIGNAL(triggered()), this, SLOT(ShowOPBrowserWin()));
 
-       m68kDasmBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("68K Listing Browser"), this);
+       m68kDasmBrowseAct = new QAction(QIcon(":/res/tool-68k-dis.png"), tr("68K Listing Browser"), this);
        m68kDasmBrowseAct->setStatusTip(tr("Shows the 68K disassembly browser window"));
 //     memBrowseAct->setCheckable(true);
        connect(m68kDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowM68KDasmBrowserWin()));
 
-       riscDasmBrowseAct = new QAction(QIcon(":/res/generic.png"), tr("RISC Listing Browser"), this);
+       riscDasmBrowseAct = new QAction(QIcon(":/res/tool-risc-dis.png"), tr("RISC Listing Browser"), this);
        riscDasmBrowseAct->setStatusTip(tr("Shows the RISC disassembly browser window"));
 //     memBrowseAct->setCheckable(true);
        connect(riscDasmBrowseAct, SIGNAL(triggered()), this, SLOT(ShowRISCDasmBrowserWin()));
index 87fc927e3f4ead10656efb604d7d5529cdce6a11..4225d19da588277cb253940ba4b5c7f8a1076d2e 100644 (file)
        <file>../../res/zoom100.png</file>
        <file>../../res/zoom200.png</file>
        <file>../../res/zoom300.png</file>
+       <file>../../res/blur.png</file>
+       <file>../../res/fullscreen.png</file>
+       <file>../../res/tool-memory.png</file>
+       <file>../../res/tool-cpu.png</file>
+       <file>../../res/tool-op.png</file>
+       <file>../../res/tool-68k-dis.png</file>
+       <file>../../res/tool-risc-dis.png</file>
        <file>../../res/generic.png</file>
        <file>../../res/cart-blank.png</file>
        <file>../../res/label-blank.png</file>
index 3b57590bba08bf64f1dbbac66e9a998b2e9240b7..e165dd202610e196425fde74cc07a8662e51ab6e 100644 (file)
@@ -21,6 +21,7 @@ int CurrentInstrCycles;
 
 struct regstruct regs;
 
+
 //
 // Make displacement effective address for 68000
 //
@@ -51,6 +52,7 @@ uint32_t get_disp_ea_000(uint32_t base, uint32_t dp)
 #endif
 }
 
+
 //
 // Create the Status Register from the flags
 //
@@ -60,6 +62,7 @@ void MakeSR(void)
                | (GET_NFLG << 3) | (GET_ZFLG << 2) | (GET_VFLG << 1) | GET_CFLG);
 }
 
+
 //
 // Set up the flags from Status Register
 //
@@ -94,6 +97,7 @@ void MakeFromSR(void)
 //     set_special(SPCFLAG_DOINT);
 }
 
+
 //
 // Rudimentary exception handling. This is really stripped down from what
 // was in Hatari.
@@ -108,6 +112,10 @@ NB: Seems that when an address exception occurs, it doesn't get handled properly
 //
 void Exception(int nr, uint32_t oldpc, int ExceptionSource)
 {
+       uint32_t currpc = m68k_getpc(), newpc;
+
+// Need to figure out how to report this stuff without using printf on stdout :-/
+#if 0
 char excNames[33][64] = {
        "???", "???", "Bus Error", "Address Error",
        "Illegal Instruction", "Zero Divide", "CHK", "TrapV",
@@ -123,7 +131,6 @@ char excNames[33][64] = {
 printf("Exception #%i occurred! (%s)\n", nr, (nr < 32 ? excNames[nr] : (nr < 48 ? "Trap #" : "????")));
 printf("Vector @ #%i = %08X\n", nr, m68k_read_memory_32(nr * 4));
 //abort();
-       uint32_t currpc = m68k_getpc(), newpc;
 printf("PC = $%08X\n", currpc);
 printf("A0 = $%08X A1 = $%08X A2 = $%08X A3 = $%08X\n", m68k_areg(regs, 0), m68k_areg(regs, 1), m68k_areg(regs, 2), m68k_areg(regs, 3));
 printf("A4 = $%08X A5 = $%08X A6 = $%08X A7 = $%08X\n", m68k_areg(regs, 4), m68k_areg(regs, 5), m68k_areg(regs, 6), m68k_areg(regs, 7));
@@ -141,6 +148,7 @@ do
        printf("%s%08X: %s\n", (oldpc == currpc ? ">" : " "), oldpc, buffer);
 }
 while (disPC < (currpc + 10));
+#endif
 
 /*if( nr>=2 && nr<10 )  fprintf(stderr,"Exception (-> %i bombs)!\n",nr);*/
 
@@ -317,6 +325,7 @@ while (disPC < (currpc + 10));
 #endif
 }
 
+
 /*
  The routines below take dividend and divisor as parameters.
  They return 0 if division by zero, or exact number of cycles otherwise.
@@ -394,6 +403,7 @@ STATIC_INLINE int getDivu68kCycles_2 (uint32_t dividend, uint16_t divisor)
        return mcycles * 2;
 }
 
+
 // This is called by cpuemu.c
 int getDivu68kCycles(uint32_t dividend, uint16_t divisor)
 {
@@ -402,11 +412,11 @@ int getDivu68kCycles(uint32_t dividend, uint16_t divisor)
        return v;
 }
 
+
 //
 // DIVS
 // Signed division
 //
-
 STATIC_INLINE int getDivs68kCycles_2(int32_t dividend, int16_t divisor)
 {
        int mcycles;
@@ -451,6 +461,7 @@ STATIC_INLINE int getDivs68kCycles_2(int32_t dividend, int16_t divisor)
        return mcycles * 2;
 }
 
+
 // This is called by cpuemu.c
 int getDivs68kCycles(int32_t dividend, int16_t divisor)
 {
@@ -458,3 +469,4 @@ int getDivs68kCycles(int32_t dividend, int16_t divisor)
 //     write_log ("S%d ", v);
        return v;
 }
+
index 007f9d696ddcbd2fa3b28925d149662e2f21f0ca..0720c40f092122419068807c0a619c2780dddb13 100644 (file)
@@ -369,6 +369,7 @@ unsigned int m68k_disasm(char * output, uint32_t addr, uint32_t * nextpc, int cn
        return numberOfBytes;
 }
 
+
 //
 // Disasemble one instruction at pc and store in str_buff
 //
@@ -376,3 +377,4 @@ unsigned int m68k_disassemble(char * str_buff, unsigned int pc, unsigned int cpu
 {
        return m68k_disasm(str_buff, pc, 0, 1);
 }
+
index 12e57637f953cde2ffc466ace5dbb5a64b19c7a8..bdaa0c4d7e2074774ab2616c6d6e6b6d56bbe472 100644 (file)
@@ -77,6 +77,8 @@ cpuop_func * cpuFunctionTable[65536];
 #endif
 
 #define CPU_DEBUG
+
+
 void Dasm(uint32_t offset, uint32_t qt)
 {
 #ifdef CPU_DEBUG
@@ -102,6 +104,7 @@ void Dasm(uint32_t offset, uint32_t qt)
 #endif
 }
 
+
 #ifdef CPU_DEBUG
 void DumpRegisters(void)
 {
@@ -122,6 +125,7 @@ void m68k_set_cpu_type(unsigned int type)
 {
 }
 
+
 // Pulse the RESET line on the CPU
 void m68k_pulse_reset(void)
 {
@@ -190,6 +194,7 @@ void m68k_pulse_reset(void)
 #endif
 }
 
+
 int m68k_execute(int num_cycles)
 {
 #if 0
@@ -342,6 +347,7 @@ if (inRoutine)
 #endif
 }
 
+
 /* ASG: rewrote so that the int_level is a mask of the IPL0/IPL1/IPL2 bits */
 void m68k_set_irq(unsigned int intLevel)
 {
@@ -368,6 +374,7 @@ void m68k_set_irq(unsigned int intLevel)
 #endif
 }
 
+
 // Check for interrupts
 STATIC_INLINE void m68ki_check_interrupts(void)
 {
@@ -380,6 +387,7 @@ STATIC_INLINE void m68ki_check_interrupts(void)
 #endif
 }
 
+
 // Service an interrupt request and start exception processing
 void m68ki_exception_interrupt(uint32_t intLevel)
 {
@@ -495,6 +503,7 @@ void m68ki_exception_interrupt(uint32_t intLevel)
 #endif
 }
 
+
 // Initiate exception processing
 STATIC_INLINE uint32_t m68ki_init_exception(void)
 {
@@ -518,6 +527,7 @@ STATIC_INLINE uint32_t m68ki_init_exception(void)
 #endif
 }
 
+
 // 3 word stack frame (68000 only)
 STATIC_INLINE void m68ki_stack_frame_3word(uint32_t pc, uint32_t sr)
 {
@@ -534,6 +544,7 @@ STATIC_INLINE void m68ki_stack_frame_3word(uint32_t pc, uint32_t sr)
 #endif
 }
 
+
 unsigned int m68k_get_reg(void * context, m68k_register_t reg)
 {
        if (reg <= M68K_REG_A7)
@@ -551,6 +562,7 @@ unsigned int m68k_get_reg(void * context, m68k_register_t reg)
        return 0;
 }
 
+
 void m68k_set_reg(m68k_register_t reg, unsigned int value)
 {
        if (reg <= M68K_REG_A7)
@@ -566,6 +578,7 @@ void m68k_set_reg(m68k_register_t reg, unsigned int value)
                regs.regs[15] = value;
 }
 
+
 //
 // Check if the instruction is a valid one
 //
@@ -579,6 +592,7 @@ unsigned int m68k_is_valid_instruction(unsigned int instruction, unsigned int cp
        return 1;
 }
 
+
 // Dummy functions, for now, until we prove the concept here. :-)
 
 // Temp, while we're using the Musashi disassembler...
@@ -594,6 +608,7 @@ int m68k_cycles_remaining(void) {}        /* Number of cycles left */
 void m68k_modify_timeslice(int cycles) {} /* Modify cycles left */
 //void m68k_end_timeslice(void) {}          /* End timeslice now */
 
+
 void m68k_end_timeslice(void)
 {
 #if 0
index 3287e03b91d047fa68f158664455f6ded9759be2..4fcb100926c2dc1073f24c9835c7249f213661f8 100644 (file)
@@ -153,7 +153,9 @@ const struct mnemolookup lookuptab[] = {
        { i_ILLG, "" },
 };
 
-struct instr *table68k;
+
+struct instr * table68k;
+
 
 STATIC_INLINE amodes mode_from_str(const char * str)
 {
@@ -174,6 +176,7 @@ STATIC_INLINE amodes mode_from_str(const char * str)
        return 0;
 }
 
+
 STATIC_INLINE amodes mode_from_mr(int mode, int reg)
 {
        switch (mode)
@@ -203,6 +206,7 @@ STATIC_INLINE amodes mode_from_mr(int mode, int reg)
        return 0;
 }
 
+
 static void build_insn(int insn)
 {
        int find = -1;
@@ -948,8 +952,10 @@ void read_table68k(void)
                build_insn(i);
 }
 
+
 static int mismatch;
 
+
 static void handle_merges (long int opcode)
 {
        uint16_t smsk;
@@ -1087,6 +1093,7 @@ if (opcode == 0x31C3 || code == 0x31C3)
        }
 }
 
+
 // What this really does is expand the # of handlers, which is why the
 // opcode has to be passed into the opcode handler...
 // E.g., $F620 maps into $F621-F627 as well; this code does this expansion.
@@ -1108,7 +1115,9 @@ void do_merges(void)
        nr_cpuop_funcs = nr;
 }
 
+
 int get_no_mismatches(void)
 {
        return mismatch;
 }
+
index d31d2fbc8e666cc18c6c070ffd6c1408da562ca0..6e0862fc72f56dbaba0b43287c0f49816863427c 100644 (file)
@@ -45,6 +45,10 @@ QMAKE_CXXFLAGS += `$(CROSS)sdl-config --cflags`
 
 # Need to add libcdio stuffola (checking/including)...
 
+# Translations. None yet. :-(
+#TRANSLATIONS = virtualjaguar_fr.ts \
+#      virtualjaguar_gr.ts
+
 INCLUDEPATH += \
        src \
        src/gui