CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/Windows/Debugger/Debugger_VFPUDlg.cpp
Views: 1401
#include "Common/CommonWindows.h"1#include <windowsx.h>2#include <commctrl.h>3#include "Windows/resource.h"4#include "Common/Data/Encoding/Utf8.h"56#include "Core/Debugger/SymbolMap.h"7#include "Windows/Debugger/Debugger_VFPUDlg.h"89#include "Windows/Debugger/CtrlMemView.h"1011#include "Core/MIPS/MIPS.h" // BAD1213CVFPUDlg::CVFPUDlg(HINSTANCE _hInstance, HWND _hParent, DebugInterface *cpu_) : Dialog((LPCSTR)IDD_VFPU, _hInstance,_hParent)14{15cpu = cpu_;16wchar_t temp[256];17wsprintf(temp, L"VFPU - %S", cpu->GetName());18SetWindowText(m_hDlg,temp);1920ShowWindow(m_hDlg,SW_HIDE);21font = CreateFont(12,0,0,0,FW_DONTCARE,FALSE,FALSE,FALSE,DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,22L"Lucida Console");2324HWND tabs = GetDlgItem(m_hDlg, IDC_TABDATATYPE);2526TCITEM tcItem;27ZeroMemory (&tcItem,sizeof (tcItem));28tcItem.mask = TCIF_TEXT;29tcItem.dwState = 0;30tcItem.pszText = (LPTSTR)L"Float";31tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;32tcItem.iImage = 0;33TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);34tcItem.pszText = (LPTSTR)L"HalfFloat";35tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;36TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);37tcItem.pszText = (LPTSTR)L"Hex";38tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;39TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);40tcItem.pszText = (LPTSTR)L"Bytes";41tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;42TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);43tcItem.pszText = (LPTSTR)L"Shorts";44tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;45TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);46tcItem.pszText = (LPTSTR)L"Ints";47tcItem.cchTextMax = (int)wcslen(tcItem.pszText)+1;48TabCtrl_InsertItem(tabs, TabCtrl_GetItemCount(tabs),&tcItem);49mode=0;50Size();51}525354CVFPUDlg::~CVFPUDlg(void)55{56DeleteObject(font);57}5859void CVFPUDlg::Update(void)60{61if (m_hDlg != NULL)62{63InvalidateRect(m_hDlg, 0,0);64/*65CtrlMemView *mv = CtrlMemView::getFrom(GetDlgItem(m_hDlg,IDC_MEMVIEW));66if (mv != NULL)67mv->redraw();*/68}69}70717273BOOL CVFPUDlg::DlgProc(UINT message, WPARAM wParam, LPARAM lParam)74{75switch(message)76{77case WM_INITDIALOG:78{79return TRUE;80}81break;82case WM_COMMAND:83{84// CtrlMemView *mv = CtrlMemView::getFrom(GetDlgItem(m_hDlg,IDC_MEMVIEW));85//switch (LOWORD(wParam))86//{87//}88}89break;9091case WM_NOTIFY:92{93HWND tabs = GetDlgItem(m_hDlg, IDC_TABDATATYPE);94NMHDR* pNotifyMessage = NULL;95pNotifyMessage = (LPNMHDR)lParam;96if (pNotifyMessage->hwndFrom == tabs)97{98mode = TabCtrl_GetCurSel (tabs);99InvalidateRect(m_hDlg,0,0);100}101break;102}103104case WM_SIZE:105Size();106break;107108case WM_PAINT:109{110HWND wnd = m_hDlg;111RECT rect;112GetClientRect(wnd, &rect);113PAINTSTRUCT p;114HDC hdc = BeginPaint(wnd, &p);115SetBkMode(hdc, TRANSPARENT);116DWORD bgColor = 0xffffff;117HPEN nullPen=CreatePen(0,0,bgColor);118HPEN currentPen=CreatePen(0,0,0);119HPEN selPen=CreatePen(0,0,0x808080);120LOGBRUSH lbr;121lbr.lbHatch=0; lbr.lbStyle=0;122lbr.lbColor=bgColor;123HBRUSH nullBrush=CreateBrushIndirect(&lbr);124lbr.lbColor=0xFFEfE8;125HBRUSH currentBrush=CreateBrushIndirect(&lbr);126lbr.lbColor=0x70FF70;127HBRUSH pcBrush=CreateBrushIndirect(&lbr);128HPEN oldPen=(HPEN)SelectObject(hdc,currentPen);129HBRUSH oldBrush=(HBRUSH)SelectObject(hdc,nullBrush);130HFONT oldFont = (HFONT)SelectObject(hdc,(HGDIOBJ)font);131132enum133{134rowHeight = 15,135columnWidth = 80,136xStart = columnWidth/2,137yStart = 30,138};139140for (int matrix = 0; matrix<8; matrix++)141{142int my = (int)(yStart + matrix * rowHeight * 5.5f);143Rectangle(hdc, 0, my, xStart, my+rowHeight);144char temp[256];145int temp_len = sprintf_s(temp, "M%i00", matrix);146TextOutA(hdc,3,my+2,temp,temp_len);147Rectangle(hdc,xStart,my+rowHeight,xStart+columnWidth*4,my+5*rowHeight);148149for (int column = 0; column<4; column++)150{151int y = my;152int x = column * columnWidth + xStart;153154Rectangle(hdc, x, y, x + columnWidth, y+rowHeight);155temp_len = sprintf_s(temp, "R%i0%i", matrix, column);156TextOutA(hdc,x+3,y+2,temp,temp_len);157158Rectangle(hdc, 0, y+rowHeight*(column+1), xStart, y+rowHeight*(column+2));159temp_len = sprintf_s(temp, "C%i%i0", matrix, column);160TextOutA(hdc,3,y+rowHeight*(column+1)+1,temp,temp_len);161162y+=rowHeight;163164for (int row = 0; row<4; row++)165{166float val = mipsr4k.v[voffset[column*32+row+matrix*4]];167u32 hex = mipsr4k.vi[voffset[column*32+row+matrix*4]];168switch (mode)169{170case 0: temp_len = sprintf_s(temp,"%f",val); break;171// case 1: temp_len = sprintf_s(temp,"??"); break;172case 2: temp_len = sprintf_s(temp,"0x%08x",hex); break;173default:temp_len = sprintf_s(temp,"%f",val); break;174}175176TextOutA(hdc,x+3,y+2,temp,temp_len);177y+=rowHeight;178}179}180}181182SelectObject(hdc,oldFont);183SelectObject(hdc,oldPen);184SelectObject(hdc,oldBrush);185186DeleteObject(nullPen);187DeleteObject(currentPen);188DeleteObject(selPen);189190DeleteObject(nullBrush);191DeleteObject(pcBrush);192DeleteObject(currentBrush);193194EndPaint(m_hDlg, &p);195}196break;197198case WM_CLOSE:199Show(false);200break;201}202203return 0;204}205206void CVFPUDlg::Goto(u32 addr)207{208Show(true);209CtrlMemView *mv = CtrlMemView::getFrom(GetDlgItem(CVFPUDlg::m_hDlg,IDC_MEMVIEW));210mv->gotoAddr(addr & ~3);211}212213214void CVFPUDlg::Size()215{216RECT rc;217GetClientRect(m_hDlg,&rc);218}219220221