-added assemble option to disassembly view

-added 16bit li
This commit is contained in:
Kingcom 2013-07-28 15:24:33 +02:00
parent 961905cce8
commit b6bca24850
7 changed files with 32 additions and 3 deletions

View File

@ -28,10 +28,10 @@ void SplitLine(const char* Line, char* Name, char* Arguments)
*Arguments = 0;
}
bool MipsAssembleOpcode(std::string& line, DebugInterface* cpu, u32 address, u32& dest)
bool MipsAssembleOpcode(char* line, DebugInterface* cpu, u32 address, u32& dest)
{
char name[64],args[256];
SplitLine(line.c_str(),name,args);
SplitLine(line,name,args);
CMipsInstruction Opcode(cpu);
if (cpu == NULL || Opcode.Load(name,args,(int)address) == false)

View File

@ -6,7 +6,7 @@
namespace MIPSAsm
{
bool MipsAssembleOpcode(std::string& line, DebugInterface* cpu, u32 address, u32& dest);
bool MipsAssembleOpcode(char* line, DebugInterface* cpu, u32 address, u32& dest);
typedef enum eMipsImmediateType { MIPS_NOIMMEDIATE, MIPS_IMMEDIATE5,
MIPS_IMMEDIATE16, MIPS_IMMEDIATE20, MIPS_IMMEDIATE26 };

View File

@ -219,6 +219,7 @@ const tMipsOpcode MipsOpcodes[] = {
// OPCODE 09 - ADDIU
{ "addiu", "t,s,i", 0x24000000, O_RT|O_RS|O_I16 },
{ "addiu", "s,i", 0x24000000, O_RST|O_I16 },
{ "li", "t,i", 0x24000000, O_RT|O_I16 },
// OPCODE 0A - SLTI
{ "slti", "t,s,i", 0x28000000, O_RT|O_RS|O_I16 },
{ "slti", "s,i", 0x28000000, O_RST|O_I16 },

View File

@ -7,6 +7,7 @@
#include "../WndMainWindow.h"
#include "../InputBox.h"
#include "Core/MIPS/MIPSAsm.h"
#include "Core/Config.h"
#include "CtrlDisAsmView.h"
#include "Debugger_MemoryDlg.h"
@ -284,6 +285,25 @@ void CtrlDisAsmView::parseDisasm(const char* disasm, char* opcode, char* argumen
*arguments = 0;
}
void CtrlDisAsmView::assembleOpcode(u32 address, std::string defaultText)
{
char op[256];
u32 encoded;
bool result = InputBox_GetString(MainWindow::GetHInstance(),wnd,"Assemble opcode",(char*)defaultText.c_str(),op);
if (result == false) return;
result = MIPSAsm::MipsAssembleOpcode(op,debugger,address,encoded);
if (result == true)
{
Memory::Write_U32(encoded,address);
MIPSComp::jit->ClearCacheAt(address);
redraw();
} else {
MessageBox(wnd,"Couldn''t assemble.","Error",MB_OK);
}
}
void CtrlDisAsmView::onPaint(WPARAM wParam, LPARAM lParam)
{
if (!debugger->isAlive()) return;
@ -498,6 +518,10 @@ void CtrlDisAsmView::onKeyDown(WPARAM wParam, LPARAM lParam)
case 'x':
disassembleToFile();
break;
case 'a':
controlHeld = false;
assembleOpcode(curAddress,"");
break;
case 'g':
{
u32 addr;
@ -691,6 +715,9 @@ void CtrlDisAsmView::onMouseUp(WPARAM wParam, LPARAM lParam, int button)
toggleBreakpoint();
redraw();
break;
case ID_DISASM_ASSEMBLE:
assembleOpcode(curAddress,"");
break;
case ID_DISASM_COPYINSTRUCTIONDISASM:
{
int space = 256 * (selectRangeEnd - selectRangeStart) / instructionSize;

View File

@ -71,6 +71,7 @@ class CtrlDisAsmView
bool searching;
bool dontRedraw;
void assembleOpcode(u32 address, std::string defaultText);
void disassembleToFile();
void search(bool continueSearch);
void followBranch();

Binary file not shown.

Binary file not shown.