2 // localbrowser.cpp - Local variables
6 // JPM = Jean-Paul Mari <djipi.mari@gmail.com>
9 // --- ---------- -----------------------------------------------------------
10 // JPM 11/03/2017 Created this file
14 #include "debugger/localbrowser.h"
16 #include "debugger/DBGManager.h"
18 #include "m68000/m68kinterface.h"
22 LocalBrowserWindow::LocalBrowserWindow(QWidget
* parent
/*= 0*/) : QWidget(parent
, Qt::Dialog
),
23 layout(new QVBoxLayout
), text(new QTextBrowser
),
25 FuncName((char *)calloc(1, 1)),
28 setWindowTitle(tr("Local"));
30 QFont
fixedFont("Lucida Console", 8, QFont::Normal
);
31 fixedFont
.setStyleHint(QFont::TypeWriter
);
32 text
->setFont(fixedFont
);
35 layout
->addWidget(text
);
40 LocalBrowserWindow::~LocalBrowserWindow(void)
48 bool LocalBrowserWindow::UpdateInfos(void)
53 if (NbLocal
= DBGManager_GetNbLocalVariables(Adr
= m68k_get_reg(NULL
, M68K_REG_PC
)))
55 if (Ptr
= DBGManager_GetFunctionName(Adr
))
57 if (strcmp(FuncName
, Ptr
))
59 if (FuncName
= (char *)realloc(FuncName
, strlen(Ptr
) + 1))
61 strcpy(FuncName
, Ptr
);
63 if (LocalInfo
= (WatchInfo
*)realloc(LocalInfo
, (sizeof(WatchInfo
) * NbLocal
)))
65 for (size_t i
= 0; i
< NbLocal
; i
++)
67 // Get local variable name and his information
68 if (LocalInfo
[i
].PtrVariableName
= DBGManager_GetLocalVariableName(Adr
, i
+ 1))
70 LocalInfo
[i
].Op
= DBGManager_GetLocalVariableOp(Adr
, i
+ 1);
71 LocalInfo
[i
].Adr
= NULL
;
72 LocalInfo
[i
].PtrCPURegisterName
= NULL
;
73 LocalInfo
[i
].TypeTag
= DBGManager_GetLocalVariableTypeTag(Adr
, i
+ 1);
74 LocalInfo
[i
].PtrVariableBaseTypeName
= DBGManager_GetLocalVariableTypeName(Adr
, i
+ 1);
75 LocalInfo
[i
].TypeEncoding
= DBGManager_GetLocalVariableTypeEncoding(Adr
, i
+ 1);
76 LocalInfo
[i
].TypeByteSize
= DBGManager_GetLocalVariableTypeByteSize(Adr
, i
+ 1);
77 LocalInfo
[i
].Offset
= DBGManager_GetLocalVariableOffset(Adr
, i
+ 1);
95 void LocalBrowserWindow::RefreshContents(void)
102 const char *CPURegName
[] = { "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7", "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7" };
108 for (size_t i
= 0; i
< NbLocal
; i
++)
110 if (LocalInfo
[i
].PtrVariableName
)
112 // Local or parameters variables
113 if (((LocalInfo
[i
].Op
>= DBG_OP_breg0
) && (LocalInfo
[i
].Op
<= DBG_OP_breg31
)) || (LocalInfo
[i
].Op
== DBG_OP_fbreg
))
115 LocalInfo
[i
].Adr
= m68k_get_reg(NULL
, M68K_REG_A6
) + LocalInfo
[i
].Offset
;
117 if ((LocalInfo
[i
].Op
== DBG_OP_fbreg
))
119 LocalInfo
[i
].Adr
+= 8;
122 if ((LocalInfo
[i
].Adr
>= 0) && (LocalInfo
[i
].Adr
< vjs
.DRAM_size
))
124 PtrValue
= DBGManager_GetVariableValueFromAdr(LocalInfo
[i
].Adr
, LocalInfo
[i
].TypeEncoding
, LocalInfo
[i
].TypeByteSize
);
133 // Value from CPU register
134 if ((LocalInfo
[i
].Op
>= DBG_OP_reg0
) && (LocalInfo
[i
].Op
<= DBG_OP_reg31
))
136 LocalInfo
[i
].PtrCPURegisterName
= (char *)CPURegName
[(LocalInfo
[i
].Op
- DBG_OP_reg0
)];
137 PtrValue
= itoa(m68k_get_reg(NULL
, (m68k_register_t
)((size_t)M68K_REG_D0
+ (LocalInfo
[i
].Op
- DBG_OP_reg0
))), Value
, 10);
145 if (!LocalInfo
[i
].Op
)
147 sprintf(string
, "<font color='#A52A2A'>%i : %s | %s | [Not used]</font>", (i
+ 1), (LocalInfo
[i
].PtrVariableBaseTypeName
? LocalInfo
[i
].PtrVariableBaseTypeName
: (char *)"<font color='#ff0000'>N/A</font>"), LocalInfo
[i
].PtrVariableName
);
151 sprintf(string
, "%i : %s | %s | ", (i
+ 1), (LocalInfo
[i
].PtrVariableBaseTypeName
? LocalInfo
[i
].PtrVariableBaseTypeName
: (char *)"<font color='#ff0000'>N/A</font>"), LocalInfo
[i
].PtrVariableName
);
152 Local
+= QString(string
);
153 if ((unsigned int)LocalInfo
[i
].Adr
)
155 sprintf(string
, "0x%06X", (unsigned int)LocalInfo
[i
].Adr
);
159 if (LocalInfo
[i
].PtrCPURegisterName
)
161 sprintf(string
, "<font color='#0000FF'>%s</font>", LocalInfo
[i
].PtrCPURegisterName
);
165 sprintf(string
, "%s", (char *)"<font color='#ff0000'>N/A</font>");
168 Local
+= QString(string
);
169 sprintf(string
, " | %s", (!PtrValue
? (char *)"<font color='#ff0000'>N/A</font>" : PtrValue
));
171 Local
+= QString(string
);
172 sprintf(string
, "<br>");
173 Local
+= QString(string
);
178 text
->setText(Local
);
189 void LocalBrowserWindow::keyPressEvent(QKeyEvent
* e
)
191 if (e
->key() == Qt::Key_Escape
)