void DebugView_DrawProcessor(HDC hdc, const CProcessor* pProc, int x, int y, WORD* arrR, BOOL* arrRChanged) { int cxChar, cyLine; GetFontWidthAndHeight(hdc, &cxChar, &cyLine); COLORREF colorText = GetSysColor(COLOR_WINDOWTEXT); DrawRectangle(hdc, x - cxChar, y - 8, x + cxChar + 31 * cxChar, y + 8 + cyLine * 14); // Registers for (int r = 0; r < 8; r++) { ::SetTextColor(hdc, arrRChanged[r] ? COLOR_RED : colorText); LPCTSTR strRegName = REGISTER_NAME[r]; TextOut(hdc, x, y + r * cyLine, strRegName, (int) _tcslen(strRegName)); WORD value = arrR[r]; //pProc->GetReg(r); DrawOctalValue(hdc, x + cxChar * 3, y + r * cyLine, value); DrawHexValue(hdc, x + cxChar * 10, y + r * cyLine, value); DrawBinaryValue(hdc, x + cxChar * 15, y + r * cyLine, value); } ::SetTextColor(hdc, colorText); // CPC value ::SetTextColor(hdc, arrRChanged[9] ? COLOR_RED : colorText); TextOut(hdc, x, y + 8 * cyLine, _T("PC'"), 3); WORD cpc = arrR[9]; DrawOctalValue(hdc, x + cxChar * 3, y + 8 * cyLine, cpc); DrawHexValue(hdc, x + cxChar * 10, y + 8 * cyLine, cpc); DrawBinaryValue(hdc, x + cxChar * 15, y + 8 * cyLine, cpc); // PSW value ::SetTextColor(hdc, arrRChanged[8] ? COLOR_RED : colorText); TextOut(hdc, x, y + 10 * cyLine, _T("PS"), 2); WORD psw = arrR[8]; // pProc->GetPSW(); DrawOctalValue(hdc, x + cxChar * 3, y + 10 * cyLine, psw); DrawHexValue(hdc, x + cxChar * 10, y + 10 * cyLine, psw); TextOut(hdc, x + cxChar * 15, y + 9 * cyLine, _T(" HP TNZVC"), 16); DrawBinaryValue(hdc, x + cxChar * 15, y + 10 * cyLine, psw); // CPSW value ::SetTextColor(hdc, arrRChanged[10] ? COLOR_RED : colorText); TextOut(hdc, x, y + 11 * cyLine, _T("PS'"), 3); WORD cpsw = arrR[10]; DrawOctalValue(hdc, x + cxChar * 3, y + 11 * cyLine, cpsw); DrawHexValue(hdc, x + cxChar * 10, y + 11 * cyLine, cpsw); DrawBinaryValue(hdc, x + cxChar * 15, y + 11 * cyLine, cpsw); ::SetTextColor(hdc, colorText); // Processor mode - HALT or USER BOOL okHaltMode = pProc->IsHaltMode(); TextOut(hdc, x, y + 13 * cyLine, okHaltMode ? _T("HALT") : _T("USER"), 4); // "Stopped" flag BOOL okStopped = pProc->IsStopped(); if (okStopped) TextOut(hdc, x + 6 * cxChar, y + 13 * cyLine, _T("STOP"), 4); }
void QDebugView::drawProcessor(QPainter &painter, const CProcessor *pProc, int x, int y, WORD *arrR, BOOL *arrRChanged) { QFontMetrics fontmetrics(painter.font()); int cxChar = fontmetrics.averageCharWidth(); int cyLine = fontmetrics.height(); QColor colorText = painter.pen().color(); painter.setPen(QColor(Qt::gray)); painter.drawRect(x - cxChar, y - cyLine/2, 33 * cxChar, cyLine * 13 + cyLine/2); // Registers for (int r = 0; r < 8; r++) { painter.setPen(QColor(arrRChanged[r] ? Qt::red : colorText)); LPCTSTR strRegName = REGISTER_NAME[r]; painter.drawText(x, y + (1 + r) * cyLine, strRegName); WORD value = arrR[r]; //pProc->GetReg(r); DrawOctalValue(painter, x + cxChar * 3, y + (1 + r) * cyLine, value); DrawHexValue(painter, x + cxChar * 10, y + (1 + r) * cyLine, value); DrawBinaryValue(painter, x + cxChar * 15, y + (1 + r) * cyLine, value); } painter.setPen(colorText); // PSW value painter.setPen(QColor(arrRChanged[8] ? Qt::red : colorText)); painter.drawText(x, y + 10 * cyLine, _T("PS")); WORD psw = arrR[8]; // pProc->GetPSW(); DrawOctalValue(painter, x + cxChar * 3, y + 10 * cyLine, psw); DrawHexValue(painter, x + cxChar * 10, y + 10 * cyLine, psw); painter.drawText(x + cxChar * 15, y + 9 * cyLine, _T(" HP TNZVC")); DrawBinaryValue(painter, x + cxChar * 15, y + 10 * cyLine, psw); painter.setPen(colorText); // Processor mode - HALT or USER BOOL okHaltMode = pProc->IsHaltMode(); painter.drawText(x, y + 12 * cyLine, okHaltMode ? _T("HALT") : _T("USER")); // "Stopped" flag BOOL okStopped = pProc->IsStopped(); if (okStopped) painter.drawText(x + 6 * cxChar, y + 12 * cyLine, _T("STOP")); }