]> Shamusworld >> Repos - virtualjaguar/blob - src/gui/debug/m68kdasmbrowser.cpp
Added HOSTCC to m68000 Makefile, improvements to M68K disassembler.
[virtualjaguar] / src / gui / debug / m68kdasmbrowser.cpp
1 //
2 // m68kdasmbrowser.cpp - Jaguar M68K disassembly browser
3 //
4 // by James Hammons
5 // (C) 2012 Underground Software
6 //
7 // JLH = James Hammons <jlhamm@acm.org>
8 //
9 // Who  When        What
10 // ---  ----------  -------------------------------------------------------------
11 // JLH  12/01/2012  Created this file
12 //
13
14 // STILL TO DO:
15 //
16
17 #include "m68kdasmbrowser.h"
18 //#include "memory.h"
19 #include "m68000/m68kinterface.h"
20 #include "dsp.h"
21 #include "gpu.h"
22
23
24 M68KDasmBrowserWindow::M68KDasmBrowserWindow(QWidget * parent/*= 0*/): QWidget(parent, Qt::Dialog),
25 //      layout(new QVBoxLayout), text(new QTextBrowser),
26         layout(new QVBoxLayout), text(new QLabel),
27         refresh(new QPushButton(tr("Refresh"))),
28         address(new QLineEdit),
29         go(new QPushButton(tr("Go"))),
30         memBase(0x4000)
31 {
32         setWindowTitle(tr("M68K Disassembly Browser"));
33
34         address->setInputMask("hhhhhh");
35         QHBoxLayout * hbox1 = new QHBoxLayout;
36         hbox1->addWidget(refresh);
37         hbox1->addWidget(address);
38         hbox1->addWidget(go);
39
40         // Need to set the size as well...
41 //      resize(560, 480);
42
43         QFont fixedFont("Lucida Console", 8, QFont::Normal);
44         text->setFont(fixedFont);
45 ////    layout->setSizeConstraint(QLayout::SetFixedSize);
46         setLayout(layout);
47
48         layout->addWidget(text);
49 //      layout->addWidget(refresh);
50         layout->addLayout(hbox1);
51
52         connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));
53         connect(go, SIGNAL(clicked()), this, SLOT(GoToAddress()));
54 }
55
56
57 void M68KDasmBrowserWindow::RefreshContents(void)
58 {
59         char string[1024];//, buf[64];
60         QString s;
61
62         char buffer[2048];
63         int pc = memBase, oldpc;
64
65         for(uint32_t i=0; i<32; i++)
66         {
67                 oldpc = pc;
68                 pc += m68k_disassemble(buffer, pc, 0);
69 //              WriteLog("%06X: %s\n", oldpc, buffer);
70                 sprintf(string, "%06X: %s<br>", oldpc, buffer);
71
72                 buffer[0] = 0;  // Clear string
73                 char singleCharString[2] = { 0, 0 };
74
75                 for(int j=0; j<strlen(string); j++)
76                 {
77                         if (string[j] == 32)
78                                 strcat(buffer, "&nbsp;");
79                         else
80                         {
81                                 singleCharString[0] = string[j];
82                                 strcat(buffer, singleCharString);
83                         }
84                 }
85
86 //              s += QString(string);
87                 s += QString(buffer);
88         }
89
90         text->clear();
91         text->setText(s);
92 }
93
94
95 void M68KDasmBrowserWindow::keyPressEvent(QKeyEvent * e)
96 {
97         if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return)
98                 hide();
99 #if 1
100         else if (e->key() == Qt::Key_PageUp)
101         {
102                 memBase -= 64;
103
104                 if (memBase < 0)
105                         memBase = 0;
106
107                 RefreshContents();
108         }
109         else if (e->key() == Qt::Key_PageDown)
110         {
111                 memBase += 64;
112
113                 if (memBase > (0xF00000 - 64))
114                         memBase = 0xF00000 - 64;
115
116                 RefreshContents();
117         }
118         else if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)
119         {
120                 memBase -= 16;
121
122                 if (memBase < 0)
123                         memBase = 0;
124
125                 RefreshContents();
126         }
127         else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)
128         {
129                 memBase += 16;
130
131                 if (memBase > (0xF00000 - 64))
132                         memBase = 0xF00000 - 64;
133
134                 RefreshContents();
135         }
136 #endif
137 }
138
139
140 void M68KDasmBrowserWindow::GoToAddress(void)
141 {
142         bool ok;
143         QString newAddress = address->text();
144         memBase = newAddress.toUInt(&ok, 16);
145         RefreshContents();
146 }
147