Exemple #1
0
/** UpdateRegisters
  *
  * Updates all register values.
  */
void ComplxFrame::UpdateRegisters(void)
{
    UpdateRegister(r0text, state.regs[0], 0);
    UpdateRegister(r1text, state.regs[1], 1);
    UpdateRegister(r2text, state.regs[2], 2);
    UpdateRegister(r3text, state.regs[3], 3);
    UpdateRegister(r4text, state.regs[4], 4);
    UpdateRegister(r5text, state.regs[5], 5);
    UpdateRegister(r6text, state.regs[6], 6);
    UpdateRegister(r7text, state.regs[7], 7);
    UpdateRegister(pctext, state.pc, 8);
    UpdateRegister(cctext, (state.n ? -1 : (state.z ? 0 : 1)), 9);
}
Exemple #2
0
/** OnRegisterChanged
  *
  * Called when a registers value is changed.
  */
void ComplxFrame::OnRegisterChanged(wxCommandEvent& event)
{
    wxTextCtrl* text = static_cast<wxTextCtrl*>(event.GetEventObject());

    wxString name = text->GetName();
    std::string strdata = text->GetValue().ToStdString();
    int data;
    int error = lc3_calculate(state, strdata, data);

    if (name == _("CC") && strdata.size() == 1)
    {
        error = 0;
        if (strdata[0] == 'N' || strdata[0] == 'n')
            data = -1;
        else if (strdata[0] == 'Z' || strdata[0] == 'z')
            data = 0;
        else if (strdata[0] == 'P' || strdata[0] == 'p')
            data = 1;
        else
            error = 1;
    }

    if (error) lc3_warning(state, "Unable to parse expression " + strdata);
    if (name == _("PC"))
    {
        if (!error) state.pc = (unsigned short) data;
        UpdateRegister(text, error ? state.pc : data, 8);
        memory->SelectLocation(0);
        memory->SelectLocation(state.pc);
        memory->Refresh();
    }
    else if (name == _("CC"))
    {
        if (!error) lc3_setcc(state, data);
        int cc = state.n ? -1 : (state.z ? 0 : 1);
        UpdateRegister(text, error ? cc : data, 9);
    }
    else
    {
        int reg = name[1] - '0';
        if (!error) state.regs[reg] = (short) data;
        assert(reg <= 7);
        UpdateRegister(text, error ? state.regs[reg] : data, reg);
    }
}
Exemple #3
0
int CRegisterDialog::GetPageInfoStCount()
{
	UpdateRegister();
	if (m_listRegister.empty()) {
		return 0;
	}
	
	m_iIndex = 0;
	return m_listRegister.size();
}
Exemple #4
0
/** OnTextKillFocus
  *
  * Reverts whatever textbox to the proper text
  */
void ComplxFrame::OnTextKillFocus(wxFocusEvent& event)
{
    wxTextCtrl* text = static_cast<wxTextCtrl*>(event.GetEventObject());
    wxString name = text->GetName();

    if (name == _("PC"))
    {
        UpdateRegister(text, state.pc, 8);
    }
    else if (name == _("CC"))
    {
        int cc = state.n ? -1 : (state.z ? 0 : 1);
        UpdateRegister(text, cc, 9);
    }
    else
    {
        int reg = name[1] - '0';
        assert(reg <= 7);
        UpdateRegister(text, state.regs[reg], reg);
    }
    event.Skip();
}
Exemple #5
0
/** OnBaseChange
  *
  * Called when the user changes the base of a textbox
  */
void ComplxFrame::OnBaseChange(wxMouseEvent& event)
{
    wxTextCtrl* text = static_cast<wxTextCtrl*>(event.GetEventObject());

    wxString name = text->GetName();

    int index = 0;
    int value = 0;
    if (name == "PC")
    {
        index = 8;
        value = state.pc;
    }
    else if (name == "CC")
    {
        index = 9;
        value = state.n ? -1 : (state.z ? 0 : 1);
    }
    else
    {
        index = name[1] - '0';
        assert(index <= 7);
        value = state.regs[index];
    }

    int mode = register_display[index];
    if (mode == BASE_2)
        mode = BASE_10;
    else if (mode == BASE_10)
        mode = BASE_16;
    else if (mode == BASE_16)
    {
        //TODO register display as a character.
        //if (value > 0 && value <= 255)
        //    mode = BASE_CHAR;
        //else
            mode = BASE_2;
    }
    //else if (mode == BASE_CHAR)
    //    mode = BASE_2;
    register_display[index] = mode;

    UpdateRegister(text, value, index);
}