project64/Source/Project64-rsp/RSP Register.cpp

733 lines
24 KiB
C++
Raw Normal View History

2016-01-27 09:11:59 +00:00
#include <windows.h>
#include "Rsp.h"
2023-07-13 11:39:18 +00:00
#include "cpu/RspTypes.h"
#include <commctrl.h>
#include <stdio.h>
2016-01-27 09:11:59 +00:00
#define GeneralPurpose 1
#define ControlProcessor0 2
#define HiddenRegisters 3
#define Vector1 4
#define Vector2 5
#define IDC_TAB_CONTROL 1000
void Create_RSP_Register_Window(int);
void HideRSP_RegisterPanel(int);
void PaintRSP_HiddenPanel(HWND);
void PaintRSP_CP0Panel(HWND);
void PaintRSP_GPRPanel(HWND);
void PaintRSP_Vector1_Panel(HWND);
void PaintRSP_Vector2_Panel(HWND);
void ShowRSP_RegisterPanel(int);
void SetupRSP_HiddenPanel(HWND);
void SetupRSP_CP0Panel(HWND);
void SetupRSP_GPRPanel(HWND);
void SetupRSP_RegistersMain(HWND);
void SetupRSP_Vect1Panel(HWND);
void SetupRSP_Vect2Panel(HWND);
void UpdateRSPRegistersScreen(void);
LRESULT CALLBACK RefreshRSP_RegProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK RSP_Registers_Proc(HWND, UINT, WPARAM, LPARAM);
2016-01-27 09:11:59 +00:00
HWND RSP_Registers_hDlg, hTab, hStatic, hGPR[32], hCP0[16], hHIDDEN[12],
hVECT1[16], hVECT2[16];
2023-06-29 02:59:07 +00:00
int InRSPRegisterWindow = false;
WNDPROC RefreshProc;
2016-01-27 09:11:59 +00:00
// RSP registers
UWORD32 RSP_GPR[32], RSP_Flags[4];
UDWORD RSP_ACCUM[8];
2023-07-13 11:39:18 +00:00
RSPVector RSP_Vect[32];
2016-01-27 09:11:59 +00:00
char * GPR_Strings[32] = {
"R0", "AT", "V0", "V1", "A0", "A1", "A2", "A3",
"T0", "T1", "T2", "T3", "T4", "T5", "T6", "T7",
"S0", "S1", "S2", "S3", "S4", "S5", "S6", "S7",
"T8", "T9", "K0", "K1", "GP", "SP", "S8", "RA"};
void Create_RSP_Register_Window(int Child)
{
DWORD ThreadID;
if (Child)
{
2023-06-29 02:59:07 +00:00
InRSPRegisterWindow = true;
DialogBoxA((HINSTANCE)hinstDLL, "RSPREGISTERS", NULL, (DLGPROC)RSP_Registers_Proc);
2023-06-29 02:59:07 +00:00
InRSPRegisterWindow = false;
}
else
{
if (!InRSPRegisterWindow)
{
CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)Create_RSP_Register_Window,
2023-06-29 02:59:07 +00:00
(LPVOID)true, 0, &ThreadID);
}
else
{
if (IsIconic((HWND)RSP_Registers_hDlg))
{
SendMessage(RSP_Registers_hDlg, WM_SYSCOMMAND, SC_RESTORE, 0);
}
SetForegroundWindow(RSP_Registers_hDlg);
}
}
2016-01-27 09:11:59 +00:00
}
void Enter_RSP_Register_Window(void)
{
2023-06-29 02:59:07 +00:00
Create_RSP_Register_Window(false);
2016-01-27 09:11:59 +00:00
}
void HideRSP_RegisterPanel(int Panel)
{
int count;
switch (Panel)
{
case GeneralPurpose:
for (count = 0; count < 32; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hGPR[count], false);
}
break;
case ControlProcessor0:
for (count = 0; count < 16; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hCP0[count], false);
}
break;
case HiddenRegisters:
for (count = 0; count < 12; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hHIDDEN[count], false);
}
break;
case Vector1:
for (count = 0; count < 16; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hVECT1[count], false);
}
break;
case Vector2:
for (count = 0; count < 16; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hVECT2[count], false);
}
break;
}
2016-01-27 09:11:59 +00:00
}
void InitilizeRSPRegisters(void)
{
memset(RSP_GPR, 0, sizeof(RSP_GPR));
2023-07-13 11:39:18 +00:00
for (size_t i = 0, n = sizeof(RSP_Vect) / sizeof(RSP_Vect[0]); i < n; i++)
{
RSP_Vect[i] = RSPVector();
}
2016-01-27 09:11:59 +00:00
}
void PaintRSP_HiddenPanel(HWND hWnd)
{
PAINTSTRUCT ps;
RECT rcBox;
HFONT hOldFont;
int OldBkMode;
BeginPaint(hWnd, &ps);
rcBox.left = 66;
rcBox.top = 39;
rcBox.right = 320;
rcBox.bottom = 265;
DrawEdge(ps.hdc, &rcBox, EDGE_ETCHED, BF_RECT);
rcBox.left = 350;
rcBox.top = 39;
rcBox.right = 510;
rcBox.bottom = 265;
DrawEdge(ps.hdc, &rcBox, EDGE_ETCHED, BF_RECT);
rcBox.left = 75;
rcBox.top = 35;
rcBox.right = 150;
rcBox.bottom = 50;
FillRect(ps.hdc, &rcBox, (HBRUSH)COLOR_WINDOW);
rcBox.left = 365;
rcBox.top = 35;
rcBox.right = 425;
rcBox.bottom = 50;
FillRect(ps.hdc, &rcBox, (HBRUSH)COLOR_WINDOW);
hOldFont = (HFONT)SelectObject(ps.hdc,
GetStockObject((int)DEFAULT_GUI_FONT));
OldBkMode = SetBkMode(ps.hdc, TRANSPARENT);
TextOutA(ps.hdc, 80, 34, "Accumulators", 12);
TextOutA(ps.hdc, 80, 56, "Accumulator 0:", 14);
TextOutA(ps.hdc, 80, 81, "Accumulator 1:", 14);
TextOutA(ps.hdc, 80, 106, "Accumulator 2:", 14);
TextOutA(ps.hdc, 80, 131, "Accumulator 3:", 14);
TextOutA(ps.hdc, 80, 156, "Accumulator 4:", 14);
TextOutA(ps.hdc, 80, 181, "Accumulator 5:", 14);
TextOutA(ps.hdc, 80, 206, "Accumulator 6:", 14);
TextOutA(ps.hdc, 80, 231, "Accumulator 7:", 14);
TextOutA(ps.hdc, 371, 34, "RSP Flags", 9);
TextOutA(ps.hdc, 375, 86, "Flag 0:", 7);
TextOutA(ps.hdc, 375, 116, "Flag 2:", 7);
TextOutA(ps.hdc, 375, 146, "Flag 3:", 7);
TextOutA(ps.hdc, 375, 176, "Flag 4:", 7);
SelectObject(ps.hdc, hOldFont);
SetBkMode(ps.hdc, OldBkMode);
EndPaint(hWnd, &ps);
2016-01-27 09:11:59 +00:00
}
void PaintRSP_CP0Panel(HWND hWnd)
{
PAINTSTRUCT ps;
RECT rcBox;
HFONT hOldFont;
int OldBkMode;
BeginPaint(hWnd, &ps);
rcBox.left = 41;
rcBox.top = 29;
rcBox.right = 573;
rcBox.bottom = 275;
DrawEdge(ps.hdc, &rcBox, EDGE_ETCHED, BF_RECT);
hOldFont = (HFONT)SelectObject(ps.hdc,
GetStockObject(DEFAULT_GUI_FONT));
OldBkMode = SetBkMode(ps.hdc, TRANSPARENT);
TextOutA(ps.hdc, 53, 48, "Reg 0 - SP memory address:", 26);
TextOutA(ps.hdc, 53, 76, "Reg 1 - SP DRAM DMA address:", 28);
TextOutA(ps.hdc, 53, 104, "Reg 2 - SP read DMA length:", 27);
TextOutA(ps.hdc, 53, 132, "Reg 3 - SP write DMA length:", 28);
TextOutA(ps.hdc, 53, 160, "Reg 4 - SP status:", 18);
TextOutA(ps.hdc, 53, 188, "Reg 5 - SP DMA full:", 20);
TextOutA(ps.hdc, 53, 216, "Reg 6 - SP DMA busy:", 20);
TextOutA(ps.hdc, 53, 244, "Reg 7 - SP semaphore:", 21);
TextOutA(ps.hdc, 313, 48, "Reg 8 - DP CMD DMA start:", 25);
TextOutA(ps.hdc, 313, 76, "Reg 9 - DP CMD DMA end:", 23);
TextOutA(ps.hdc, 313, 104, "Reg 10 - DP CMD DMA current:", 28);
TextOutA(ps.hdc, 313, 132, "Reg 11 - DP CMD status:", 23);
TextOutA(ps.hdc, 313, 160, "Reg 12 - DP clock counter:", 26);
TextOutA(ps.hdc, 313, 188, "Reg 13 - DP buffer busy counter:", 32);
TextOutA(ps.hdc, 313, 216, "Reg 14 - DP pipe busy counter:", 30);
TextOutA(ps.hdc, 313, 244, "Reg 15 - DP TMEM load counter:", 30);
SelectObject(ps.hdc, hOldFont);
SetBkMode(ps.hdc, OldBkMode);
EndPaint(hWnd, &ps);
2016-01-27 09:11:59 +00:00
}
void PaintRSP_GPRPanel(HWND hWnd)
{
PAINTSTRUCT ps;
RECT rcBox;
HFONT hOldFont;
int OldBkMode;
BeginPaint(hWnd, &ps);
rcBox.left = 41;
rcBox.top = 29;
rcBox.right = 573;
rcBox.bottom = 275;
DrawEdge(ps.hdc, &rcBox, EDGE_ETCHED, BF_RECT);
hOldFont = (HFONT)SelectObject(ps.hdc,
GetStockObject(DEFAULT_GUI_FONT));
OldBkMode = SetBkMode(ps.hdc, TRANSPARENT);
TextOutA(ps.hdc, 53, 46, "R0 - Reg 0:", 11);
TextOutA(ps.hdc, 53, 66, "AT - Reg 1:", 11);
TextOutA(ps.hdc, 53, 86, "V0 - Reg 2:", 11);
TextOutA(ps.hdc, 53, 106, "V1 - Reg 3:", 11);
TextOutA(ps.hdc, 53, 126, "A0 - Reg 4:", 11);
TextOutA(ps.hdc, 53, 146, "A1 - Reg 5:", 11);
TextOutA(ps.hdc, 53, 166, "A2 - Reg 6:", 11);
TextOutA(ps.hdc, 53, 186, "A3 - Reg 7:", 11);
TextOutA(ps.hdc, 53, 206, "T0 - Reg 8:", 11);
TextOutA(ps.hdc, 53, 226, "T1 - Reg 9:", 11);
TextOutA(ps.hdc, 53, 246, "T2 - Reg 10:", 12);
TextOutA(ps.hdc, 228, 46, "T3 - Reg 11:", 12);
TextOutA(ps.hdc, 228, 66, "T4 - Reg 12:", 12);
TextOutA(ps.hdc, 228, 86, "T5 - Reg 13:", 12);
TextOutA(ps.hdc, 228, 106, "T6 - Reg 14:", 12);
TextOutA(ps.hdc, 228, 126, "T7 - Reg 15:", 12);
TextOutA(ps.hdc, 228, 146, "S0 - Reg 16:", 12);
TextOutA(ps.hdc, 228, 166, "S1 - Reg 17:", 12);
TextOutA(ps.hdc, 228, 186, "S2 - Reg 18:", 12);
TextOutA(ps.hdc, 228, 206, "S3 - Reg 19:", 12);
TextOutA(ps.hdc, 228, 226, "S4 - Reg 20:", 12);
TextOutA(ps.hdc, 228, 246, "S5 - Reg 21:", 12);
TextOutA(ps.hdc, 408, 46, "S6 - Reg 22:", 12);
TextOutA(ps.hdc, 408, 66, "S7 - Reg 23:", 12);
TextOutA(ps.hdc, 408, 86, "T8 - Reg 24:", 12);
TextOutA(ps.hdc, 408, 106, "T9 - Reg 25:", 12);
TextOutA(ps.hdc, 408, 126, "K0 - Reg 26:", 12);
TextOutA(ps.hdc, 408, 146, "K1 - Reg 27:", 12);
TextOutA(ps.hdc, 408, 166, "GP - Reg 28:", 12);
TextOutA(ps.hdc, 408, 186, "SP - Reg 29:", 12);
TextOutA(ps.hdc, 408, 206, "S8 - Reg 30:", 12);
TextOutA(ps.hdc, 408, 226, "RA - Reg 31:", 12);
SelectObject(ps.hdc, hOldFont);
SetBkMode(ps.hdc, OldBkMode);
EndPaint(hWnd, &ps);
2016-01-27 09:11:59 +00:00
}
void PaintRSP_Vector1_Panel(HWND hWnd)
{
PAINTSTRUCT ps;
RECT rcBox;
HFONT hOldFont;
int OldBkMode;
BeginPaint(hWnd, &ps);
rcBox.left = 10;
rcBox.top = 29;
rcBox.right = 606;
rcBox.bottom = 275;
DrawEdge(ps.hdc, &rcBox, EDGE_ETCHED, BF_RECT);
hOldFont = (HFONT)SelectObject(ps.hdc,
GetStockObject(DEFAULT_GUI_FONT));
OldBkMode = SetBkMode(ps.hdc, TRANSPARENT);
TextOutA(ps.hdc, 20, 48, "$v0:", 4);
TextOutA(ps.hdc, 20, 76, "$v1:", 4);
TextOutA(ps.hdc, 20, 104, "$v2:", 4);
TextOutA(ps.hdc, 20, 132, "$v3:", 4);
TextOutA(ps.hdc, 20, 160, "$v4:", 4);
TextOutA(ps.hdc, 20, 188, "$v5:", 4);
TextOutA(ps.hdc, 20, 216, "$v6:", 4);
TextOutA(ps.hdc, 20, 244, "$v7:", 4);
TextOutA(ps.hdc, 310, 48, "$v8:", 4);
TextOutA(ps.hdc, 310, 76, "$v9:", 4);
TextOutA(ps.hdc, 310, 104, "$v10:", 5);
TextOutA(ps.hdc, 310, 132, "$v11:", 5);
TextOutA(ps.hdc, 310, 160, "$v12:", 5);
TextOutA(ps.hdc, 310, 188, "$v13:", 5);
TextOutA(ps.hdc, 310, 216, "$v14:", 5);
TextOutA(ps.hdc, 310, 244, "$v15:", 5);
SelectObject(ps.hdc, hOldFont);
SetBkMode(ps.hdc, OldBkMode);
EndPaint(hWnd, &ps);
2016-01-27 09:11:59 +00:00
}
void PaintRSP_Vector2_Panel(HWND hWnd)
{
PAINTSTRUCT ps;
RECT rcBox;
HFONT hOldFont;
int OldBkMode;
BeginPaint(hWnd, &ps);
rcBox.left = 10;
rcBox.top = 29;
rcBox.right = 606;
rcBox.bottom = 275;
DrawEdge(ps.hdc, &rcBox, EDGE_ETCHED, BF_RECT);
hOldFont = (HFONT)SelectObject(ps.hdc,
GetStockObject(DEFAULT_GUI_FONT));
OldBkMode = SetBkMode(ps.hdc, TRANSPARENT);
TextOutA(ps.hdc, 20, 48, "$v16:", 5);
TextOutA(ps.hdc, 20, 76, "$v17:", 5);
TextOutA(ps.hdc, 20, 104, "$v18:", 5);
TextOutA(ps.hdc, 20, 132, "$v19:", 5);
TextOutA(ps.hdc, 20, 160, "$v20:", 5);
TextOutA(ps.hdc, 20, 188, "$v21:", 5);
TextOutA(ps.hdc, 20, 216, "$v22:", 5);
TextOutA(ps.hdc, 20, 244, "$v23:", 5);
TextOutA(ps.hdc, 310, 48, "$v24:", 5);
TextOutA(ps.hdc, 310, 76, "$v25:", 5);
TextOutA(ps.hdc, 310, 104, "$v26:", 5);
TextOutA(ps.hdc, 310, 132, "$v27:", 5);
TextOutA(ps.hdc, 310, 160, "$v28:", 5);
TextOutA(ps.hdc, 310, 188, "$v29:", 5);
TextOutA(ps.hdc, 310, 216, "$v30:", 5);
TextOutA(ps.hdc, 310, 244, "$v31:", 5);
SelectObject(ps.hdc, hOldFont);
SetBkMode(ps.hdc, OldBkMode);
EndPaint(hWnd, &ps);
2016-01-27 09:11:59 +00:00
}
LRESULT CALLBACK RefreshRSP_RegProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
int nSel;
TC_ITEM item;
switch (uMsg)
{
case WM_PAINT:
nSel = TabCtrl_GetCurSel(hTab);
if (nSel > -1)
{
item.mask = TCIF_PARAM;
TabCtrl_GetItem(hTab, nSel, &item);
switch (item.lParam)
{
case GeneralPurpose:
PaintRSP_GPRPanel(hWnd);
break;
case ControlProcessor0:
PaintRSP_CP0Panel(hWnd);
break;
case HiddenRegisters:
PaintRSP_HiddenPanel(hWnd);
break;
case Vector1:
PaintRSP_Vector1_Panel(hWnd);
break;
case Vector2:
PaintRSP_Vector2_Panel(hWnd);
break;
}
}
break;
}
return CallWindowProc(RefreshProc, hWnd, uMsg, wParam, lParam);
2016-01-27 09:11:59 +00:00
}
LRESULT CALLBACK RSP_Registers_Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static RECT rcDisp;
static int CurrentPanel = GeneralPurpose;
TC_ITEM item;
switch (uMsg)
{
case WM_INITDIALOG:
RSP_Registers_hDlg = hDlg;
SetupRSP_RegistersMain(hDlg);
break;
case WM_MOVE:
//StoreCurrentWinPos("RSP Registers",hDlg);
break;
case WM_SIZE:
GetClientRect(hDlg, &rcDisp);
2023-06-29 02:59:07 +00:00
TabCtrl_AdjustRect(hTab, false, &rcDisp);
break;
case WM_NOTIFY:
switch (((NMHDR *)lParam)->code)
{
case TCN_SELCHANGE:
2023-06-29 02:59:07 +00:00
InvalidateRect(hTab, &rcDisp, true);
HideRSP_RegisterPanel(CurrentPanel);
item.mask = TCIF_PARAM;
TabCtrl_GetItem(hTab, TabCtrl_GetCurSel(hTab), &item);
CurrentPanel = (int)item.lParam;
2023-06-29 02:59:07 +00:00
InvalidateRect(hStatic, NULL, false);
UpdateRSPRegistersScreen();
ShowRSP_RegisterPanel(CurrentPanel);
break;
}
break;
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDCANCEL:
CurrentPanel = GeneralPurpose;
EndDialog(hDlg, IDCANCEL);
break;
}
default:
2023-06-29 02:59:07 +00:00
return false;
}
2023-06-29 02:59:07 +00:00
return true;
2016-01-27 09:11:59 +00:00
}
void SetupRSP_HiddenPanel(HWND hDlg)
{
int count;
for (count = 0; count < 8; count++)
{
hHIDDEN[count] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 170, (count * 25) + 60, 140, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hHIDDEN[count], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
for (count = 0; count < 4; count++)
{
hHIDDEN[count + 8] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 425, (count * 30) + 90, 55, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hHIDDEN[count + 8], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
2016-01-27 09:11:59 +00:00
}
void SetupRSP_CP0Panel(HWND hDlg)
{
int count;
for (count = 0; count < 8; count++)
{
hCP0[count] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 225, (count * 28) + 53, 75, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hCP0[count], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
for (count = 0; count < 8; count++)
{
hCP0[count + 8] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 485, (count * 28) + 53, 75, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hCP0[count + 8], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
2016-01-27 09:11:59 +00:00
}
void SetupRSP_GPRPanel(HWND hDlg)
{
int count;
for (count = 0; count < 11; count++)
{
hGPR[count] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 135, (count * 20) + 50, 75, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hGPR[count], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
for (count = 0; count < 11; count++)
{
hGPR[count + 11] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 315, (count * 20) + 50, 75, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hGPR[count + 11], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
for (count = 0; count < 10; count++)
{
hGPR[count + 22] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 485, (count * 20) + 50, 75, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hGPR[count + 22], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
2016-01-27 09:11:59 +00:00
}
void SetupRSP_RegistersMain(HWND hDlg)
{
#define WindowWidth 630
2016-01-27 09:11:59 +00:00
#define WindowHeight 325
DWORD X, Y;
hTab = CreateWindowExA(0, WC_TABCONTROLA, "", WS_TABSTOP | WS_CHILD | WS_VISIBLE, 5, 6, 616, 290,
hDlg, (HMENU)IDC_TAB_CONTROL, (HINSTANCE)hinstDLL, NULL);
if (hTab)
{
TC_ITEMA item;
SendMessage(hTab, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
item.mask = TCIF_TEXT | TCIF_PARAM;
item.pszText = " General Purpose ";
item.lParam = GeneralPurpose;
(int)::SendMessageA(hTab, TCM_INSERTITEMA, (WPARAM)(int)(0), (LPARAM)(const TC_ITEMA *)(&item));
item.lParam = ControlProcessor0;
item.pszText = " Control Processor 0 ";
(int)::SendMessageA(hTab, TCM_INSERTITEMA, (WPARAM)(int)(1), (LPARAM)(const TC_ITEMA *)(&item));
item.lParam = HiddenRegisters;
item.pszText = " Hidden Registers ";
(int)::SendMessageA(hTab, TCM_INSERTITEMA, (WPARAM)(int)(2), (LPARAM)(const TC_ITEMA *)(&item));
item.lParam = Vector1;
item.pszText = " RSP Vectors $v0 - $v15 ";
(int)::SendMessageA(hTab, TCM_INSERTITEMA, (WPARAM)(int)(3), (LPARAM)(const TC_ITEMA *)(&item));
item.lParam = Vector2;
item.pszText = " RSP Vectors $v16 - $v31 ";
(int)::SendMessageA(hTab, TCM_INSERTITEMA, (WPARAM)(int)(4), (LPARAM)(const TC_ITEMA *)(&item));
}
SetupRSP_HiddenPanel(hDlg);
SetupRSP_CP0Panel(hDlg);
SetupRSP_GPRPanel(hDlg);
SetupRSP_Vect1Panel(hDlg);
SetupRSP_Vect2Panel(hDlg);
hStatic = CreateWindowExA(0, "STATIC", "", WS_CHILD | WS_VISIBLE, 5, 6, 616, 290, hDlg, 0, (HINSTANCE)hinstDLL, NULL);
2016-01-27 09:11:59 +00:00
#ifdef _M_IX86
RefreshProc = (WNDPROC)SetWindowLong(hStatic, GWL_WNDPROC, (long)RefreshRSP_RegProc);
2016-01-27 09:11:59 +00:00
#else
DebugBreak();
2016-01-27 09:11:59 +00:00
#endif
UpdateRSPRegistersScreen();
ShowRSP_RegisterPanel(GeneralPurpose);
SetWindowTextA(hDlg, " RSP Registers");
//if ( !GetStoredWinPos( "RSP Registers", &X, &Y ) ) {
X = (GetSystemMetrics(SM_CXSCREEN) - WindowWidth) / 2;
Y = (GetSystemMetrics(SM_CYSCREEN) - WindowHeight) / 2;
//}
SetWindowPos(hDlg, NULL, X, Y, WindowWidth, WindowHeight, SWP_NOZORDER | SWP_SHOWWINDOW);
2016-01-27 09:11:59 +00:00
}
void SetupRSP_Vect1Panel(HWND hDlg)
{
int count;
for (count = 0; count < 8; count++)
{
hVECT1[count] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 55, (count * 28) + 52, 254, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hVECT1[count], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
for (count = 0; count < 8; count++)
{
hVECT1[count + 8] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 345, (count * 28) + 52, 254, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hVECT1[count + 8], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
2016-01-27 09:11:59 +00:00
}
void SetupRSP_Vect2Panel(HWND hDlg)
{
int count;
for (count = 0; count < 8; count++)
{
hVECT2[count] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 55, (count * 28) + 52, 254, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hVECT2[count], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
for (count = 0; count < 8; count++)
{
hVECT2[count + 8] = CreateWindowExA(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD | ES_READONLY | WS_BORDER | WS_TABSTOP, 345, (count * 28) + 52, 254, 19,
hDlg, 0, (HINSTANCE)hinstDLL, NULL);
SendMessage(hVECT2[count + 8], WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
}
2016-01-27 09:11:59 +00:00
}
void ShowRSP_RegisterPanel(int Panel)
{
int count;
switch (Panel)
{
case GeneralPurpose:
for (count = 0; count < 32; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hGPR[count], true);
}
break;
case ControlProcessor0:
for (count = 0; count < 16; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hCP0[count], true);
}
break;
case HiddenRegisters:
for (count = 0; count < 12; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hHIDDEN[count], true);
}
break;
case Vector1:
for (count = 0; count < 16; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hVECT1[count], true);
}
break;
case Vector2:
for (count = 0; count < 16; count++)
{
2023-06-29 02:59:07 +00:00
ShowWindow(hVECT2[count], true);
}
break;
}
2016-01-27 09:11:59 +00:00
}
void UpdateRSPRegistersScreen(void)
{
char RegisterValue[100];
int count, nSel;
TC_ITEM item;
if (!InRSPRegisterWindow)
{
return;
}
nSel = TabCtrl_GetCurSel(hTab);
if (nSel > -1)
{
item.mask = TCIF_PARAM;
TabCtrl_GetItem(hTab, nSel, &item);
switch (item.lParam)
{
case GeneralPurpose:
for (count = 0; count < 32; count++)
{
sprintf(RegisterValue, " 0x%08X", RSP_GPR[count].UW);
SetWindowTextA(hGPR[count], RegisterValue);
}
break;
case ControlProcessor0:
if (RSPInfo.SP_MEM_ADDR_REG)
{
sprintf(RegisterValue, " 0x%08X", *RSPInfo.SP_MEM_ADDR_REG);
SetWindowTextA(hCP0[0], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.SP_DRAM_ADDR_REG);
SetWindowTextA(hCP0[1], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.SP_RD_LEN_REG);
SetWindowTextA(hCP0[2], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.SP_WR_LEN_REG);
SetWindowTextA(hCP0[3], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.SP_STATUS_REG);
SetWindowTextA(hCP0[4], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.SP_DMA_FULL_REG);
SetWindowTextA(hCP0[5], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.SP_DMA_BUSY_REG);
SetWindowTextA(hCP0[6], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.SP_SEMAPHORE_REG);
SetWindowTextA(hCP0[7], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.DPC_START_REG);
SetWindowTextA(hCP0[8], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.DPC_END_REG);
SetWindowTextA(hCP0[9], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.DPC_CURRENT_REG);
SetWindowTextA(hCP0[10], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.DPC_STATUS_REG);
SetWindowTextA(hCP0[11], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.DPC_CLOCK_REG);
SetWindowTextA(hCP0[12], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.DPC_BUFBUSY_REG);
SetWindowTextA(hCP0[13], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.DPC_PIPEBUSY_REG);
SetWindowTextA(hCP0[14], RegisterValue);
sprintf(RegisterValue, " 0x%08X", *RSPInfo.DPC_TMEM_REG);
SetWindowTextA(hCP0[15], RegisterValue);
}
break;
case HiddenRegisters:
for (count = 0; count < 8; count++)
{
sprintf(RegisterValue, " 0x%08X - %08X", RSP_ACCUM[count].W[1], RSP_ACCUM[count].W[0]);
SetWindowTextA(hHIDDEN[count], RegisterValue);
}
for (count = 0; count < 3; count++)
{
sprintf(RegisterValue, " 0x%04X", RSP_Flags[count].UHW[0]);
SetWindowTextA(hHIDDEN[count + 8], RegisterValue);
}
sprintf(RegisterValue, " 0x%04X", RSP_Flags[2].UHW[0]);
SetWindowTextA(hHIDDEN[11], RegisterValue);
break;
case Vector1:
for (count = 0; count < 16; count++)
{
2023-07-13 11:39:18 +00:00
sprintf(RegisterValue, " 0x%08X - %08X - %08X - %08X", RSP_Vect[count].s32(3),
RSP_Vect[count].s32(2), RSP_Vect[count].s32(1), RSP_Vect[count].s32(0));
SetWindowTextA(hVECT1[count], RegisterValue);
}
break;
case Vector2:
for (count = 0; count < 16; count++)
{
2023-07-13 11:39:18 +00:00
sprintf(RegisterValue, " 0x%08X - %08X - %08X - %08X", RSP_Vect[count + 16].s32(3),
RSP_Vect[count + 16].s32(2), RSP_Vect[count + 16].s32(1), RSP_Vect[count + 16].s32(0));
SetWindowTextA(hVECT2[count], RegisterValue);
}
break;
}
}
2016-01-27 09:11:59 +00:00
}