/** 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); }
/** 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); } }
int CRegisterDialog::GetPageInfoStCount() { UpdateRegister(); if (m_listRegister.empty()) { return 0; } m_iIndex = 0; return m_listRegister.size(); }
/** 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(); }
/** 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); }