]> Shamusworld >> Repos - virtualjaguar/blob - src/gui/debug/cpubrowser.cpp
3871dbca671dff6e41f20e3e890d43378f5e82cf
[virtualjaguar] / src / gui / debug / cpubrowser.cpp
1 //
2 // cpubrowser.cpp - Jaguar CPU 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  08/14/2012  Created this file
12 //
13
14 // STILL TO DO:
15 //
16
17 #include "cpubrowser.h"
18 //#include "memory.h"
19 #include "m68000/m68kinterface.h"
20 #include "dsp.h"
21 #include "gpu.h"
22
23
24 CPUBrowserWindow::CPUBrowserWindow(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         memBase(0)
29 {
30         setWindowTitle(tr("CPU Browser"));
31
32         // Need to set the size as well...
33 //      resize(560, 480);
34
35         QFont fixedFont("Lucida Console", 8, QFont::Normal);
36         text->setFont(fixedFont);
37 ////    layout->setSizeConstraint(QLayout::SetFixedSize);
38         setLayout(layout);
39
40         layout->addWidget(text);
41         layout->addWidget(refresh);
42
43         connect(refresh, SIGNAL(clicked()), this, SLOT(RefreshContents()));
44 }
45
46
47 void CPUBrowserWindow::RefreshContents(void)
48 {
49         char string[1024], buf[64];
50         QString s;
51
52         // 68K
53         uint32_t m68kPC = m68k_get_reg(NULL, M68K_REG_PC);
54         uint32_t m68kSR = m68k_get_reg(NULL, M68K_REG_SR);
55         sprintf(string, "PC: %06X&nbsp;&nbsp;SR: %04X<br><br>", m68kPC, m68kSR);
56         s += QString(string);
57
58         uint32_t m68kA0 = m68k_get_reg(NULL, M68K_REG_A0);
59         uint32_t m68kA1 = m68k_get_reg(NULL, M68K_REG_A1);
60         uint32_t m68kA2 = m68k_get_reg(NULL, M68K_REG_A2);
61         uint32_t m68kA3 = m68k_get_reg(NULL, M68K_REG_A3);
62         sprintf(string, "A0: %08X&nbsp;&nbsp;A1: %08X&nbsp;&nbsp;A2: %08X&nbsp;&nbsp;A3: %08X<br>", m68kA0, m68kA1, m68kA2, m68kA3);
63         s += QString(string);
64
65         uint32_t m68kA4 = m68k_get_reg(NULL, M68K_REG_A4);
66         uint32_t m68kA5 = m68k_get_reg(NULL, M68K_REG_A5);
67         uint32_t m68kA6 = m68k_get_reg(NULL, M68K_REG_A6);
68         uint32_t m68kA7 = m68k_get_reg(NULL, M68K_REG_A7);
69         sprintf(string, "A4: %08X&nbsp;&nbsp;A5: %08X&nbsp;&nbsp;A6: %08X&nbsp;&nbsp;A7: %08X<br><br>", m68kA4, m68kA5, m68kA6, m68kA7);
70         s += QString(string);
71
72         uint32_t m68kD0 = m68k_get_reg(NULL, M68K_REG_D0);
73         uint32_t m68kD1 = m68k_get_reg(NULL, M68K_REG_D1);
74         uint32_t m68kD2 = m68k_get_reg(NULL, M68K_REG_D2);
75         uint32_t m68kD3 = m68k_get_reg(NULL, M68K_REG_D3);
76         sprintf(string, "D0: %08X&nbsp;&nbsp;D1: %08X&nbsp;&nbsp;D2: %08X&nbsp;&nbsp;D3: %08X<br>", m68kD0, m68kD1, m68kD2, m68kD3);
77         s += QString(string);
78
79         uint32_t m68kD4 = m68k_get_reg(NULL, M68K_REG_D4);
80         uint32_t m68kD5 = m68k_get_reg(NULL, M68K_REG_D5);
81         uint32_t m68kD6 = m68k_get_reg(NULL, M68K_REG_D6);
82         uint32_t m68kD7 = m68k_get_reg(NULL, M68K_REG_D7);
83         sprintf(string, "D4: %08X&nbsp;&nbsp;D5: %08X&nbsp;&nbsp;D6: %08X&nbsp;&nbsp;D7: %08X<br><br>", m68kD4, m68kD5, m68kD6, m68kD7);
84         s += QString(string);
85
86         // GPU
87         sprintf(string, "GPU PC: %06X&nbsp;&nbsp;FLAGS: %08X<br><br>", GPUReadLong(0xF02010), GPUReadLong(0xF02000));
88         s += QString(string);
89
90         // DSP
91         sprintf(string, "DSP PC: %06X&nbsp;&nbsp;FLAGS: %08X<br><br>", DSPReadLong(0xF1A110), DSPReadLong(0xF1A100));
92         s += QString(string);
93
94         text->clear();
95         text->setText(s);
96 }
97
98
99 void CPUBrowserWindow::keyPressEvent(QKeyEvent * e)
100 {
101         if (e->key() == Qt::Key_Escape || e->key() == Qt::Key_Return)
102                 hide();
103         else if (e->key() == Qt::Key_PageUp)
104         {
105                 memBase -= 480;
106
107                 if (memBase < 0)
108                         memBase = 0;
109
110                 RefreshContents();
111         }
112         else if (e->key() == Qt::Key_PageDown)
113         {
114                 memBase += 480;
115
116                 if (memBase > (0x200000 - 480))
117                         memBase = 0x200000 - 480;
118
119                 RefreshContents();
120         }
121         else if (e->key() == Qt::Key_Up || e->key() == Qt::Key_Minus)
122         {
123                 memBase -= 16;
124
125                 if (memBase < 0)
126                         memBase = 0;
127
128                 RefreshContents();
129         }
130         else if (e->key() == Qt::Key_Down || e->key() == Qt::Key_Equal)
131         {
132                 memBase += 16;
133
134                 if (memBase > (0x200000 - 480))
135                         memBase = 0x200000 - 480;
136
137                 RefreshContents();
138         }
139 }