Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vidhd #51

Merged
merged 11 commits into from Dec 11, 2021
2 changes: 2 additions & 0 deletions AppleWinExpress2019.vcxproj
Expand Up @@ -121,6 +121,7 @@
<ClInclude Include="source\Tfe\Uilib.h" />
<ClInclude Include="source\Utilities.h" />
<ClInclude Include="source\Video.h" />
<ClInclude Include="Source\VidHD.h" />
<ClInclude Include="source\Windows\AppleWin.h" />
<ClInclude Include="source\Windows\DirectInput.h" />
<ClInclude Include="source\Windows\HookFilter.h" />
Expand Down Expand Up @@ -247,6 +248,7 @@
</ClCompile>
<ClCompile Include="source\Utilities.cpp" />
<ClCompile Include="source\Video.cpp" />
<ClCompile Include="Source\VidHD.cpp" />
<ClCompile Include="source\Windows\AppleWin.cpp" />
<ClCompile Include="source\Windows\DirectInput.cpp" />
<ClCompile Include="source\Windows\HookFilter.cpp" />
Expand Down
6 changes: 6 additions & 0 deletions AppleWinExpress2019.vcxproj.filters
Expand Up @@ -241,6 +241,9 @@
<ClCompile Include="source\Card.cpp">
<Filter>Source Files\Emulator</Filter>
</ClCompile>
<ClCompile Include="Source\VidHD.cpp">
<Filter>Source Files\Video</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="source\CommonVICE\6510core.h">
Expand Down Expand Up @@ -555,6 +558,9 @@
<ClInclude Include="source\SNESMAX.h">
<Filter>Source Files\Emulator</Filter>
</ClInclude>
<ClInclude Include="Source\VidHD.h">
<Filter>Source Files\Video</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<Image Include="resource\Applewin.bmp">
Expand Down
38 changes: 20 additions & 18 deletions resource/Applewin.rc
Expand Up @@ -84,38 +84,40 @@ IDB_DEBUG_FONT_7X8 BITMAP "Debug_Font.bmp"
// Dialog
//

IDD_PROPPAGE_CONFIG DIALOGEX 0, 0, 210, 209
IDD_PROPPAGE_CONFIG DIALOGEX 0, 0, 210, 240
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | WS_SYSMENU
CAPTION "Configuration"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN
LTEXT "&Model:",IDC_STATIC,5,7,40,8
COMBOBOX IDC_COMPUTER,45,5,91,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
CONTROL "Confirm reboot",IDC_CHECK_CONFIRM_REBOOT,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,8,62,10
GROUPBOX "Video",IDC_STATIC,5,22,200,56
GROUPBOX "Video",IDC_STATIC,5,22,200,74
LTEXT "Mo&de:",IDC_STATIC,12,33,33,8
COMBOBOX IDC_VIDEOTYPE,33,30,103,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "Monochrome &Color...",IDC_MONOCOLOR,12,46,80,14
CONTROL "50% Scan lines",IDC_CHECK_HALF_SCAN_LINES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,33,62,10
CONTROL "Vertical blend",IDC_CHECK_VERTICAL_BLEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,48,62,10
CONTROL "Full-Screen: Show drive/keyboard status",IDC_CHECK_FS_SHOW_SUBUNIT_STATUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,64,140,10
LTEXT "&Serial Port:",IDC_STATIC,5,89,40,8
COMBOBOX IDC_SERIALPORT,45,87,90,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "&Ethernet Settings...",IDC_ETHERNET,4,105,80,14
GROUPBOX "Emulation Speed Control",IDC_STATIC,5,130,200,85
CONTROL "Full-Screen: Show drive/keyboard status",IDC_CHECK_FS_SHOW_SUBUNIT_STATUS,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,64,140,10
CONTROL "VidHD in slot 3",IDC_CHECK_VIDHD_IN_SLOT3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,78,140,10
LTEXT "&Serial Port:",IDC_STATIC,5,108,40,8
COMBOBOX IDC_SERIALPORT,45,106,90,100,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
PUSHBUTTON "&Ethernet Settings...",IDC_ETHERNET,4,124,80,14
GROUPBOX "Emulation Speed Control",IDC_STATIC,5,149,200,85
CONTROL "Use &Authentic Machine Speed",IDC_AUTHENTIC_SPEED,
"Button",BS_AUTORADIOBUTTON,15,141,115,10
CONTROL "Select C&ustom Speed (in MHz)",IDC_CUSTOM_SPEED,"Button",BS_AUTORADIOBUTTON,15,153,115,10
CONTROL "Generic2",IDC_SLIDER_CPU_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,25,164,160,15
CTEXT "0.5",IDC_0_5_MHz,23,180,20,10
CTEXT "1.0",IDC_1_0_MHz,59,180,20,10
CTEXT "2.0",IDC_2_0_MHz,96,180,20,10
RTEXT "Fastest",IDC_MAX_MHz,150,180,29,10
PUSHBUTTON "&Benchmark Emulator",IDC_BENCHMARK,15,194,85,15
CONTROL "50Hz video",IDC_CHECK_50HZ_VIDEO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,141,51,10
"Button",BS_AUTORADIOBUTTON,15,160,115,10
CONTROL "Select C&ustom Speed (in MHz)",IDC_CUSTOM_SPEED,"Button",BS_AUTORADIOBUTTON,15,172,115,10
CONTROL "Generic2",IDC_SLIDER_CPU_SPEED,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,25,183,160,15
CTEXT "0.5",IDC_0_5_MHz,23,199,20,10
CTEXT "1.0",IDC_1_0_MHz,59,199,20,10
CTEXT "2.0",IDC_2_0_MHz,96,199,20,10
RTEXT "Fastest",IDC_MAX_MHz,150,199,29,10
PUSHBUTTON "&Benchmark Emulator",IDC_BENCHMARK,15,213,85,15
CONTROL "50Hz video",IDC_CHECK_50HZ_VIDEO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,142,160,51,10
END

IDD_PROPPAGE_INPUT DIALOGEX 0, 0, 211, 240
IDD_PROPPAGE_INPUT DIALOGEX 0, 0, 210, 240
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | WS_SYSMENU
CAPTION "Input"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
Expand Down Expand Up @@ -172,7 +174,7 @@ BEGIN
CONTROL "No sound cards",IDC_SOUNDCARD_DISABLE,"Button",BS_AUTORADIOBUTTON,10,175,78,10
END

IDD_PROPPAGE_DISK DIALOGEX 0, 0, 211, 188
IDD_PROPPAGE_DISK DIALOGEX 0, 0, 210, 240
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_DISABLED | WS_CAPTION | WS_SYSMENU
CAPTION "Disk"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
Expand Down
3 changes: 1 addition & 2 deletions resource/resource.h
Expand Up @@ -70,7 +70,6 @@
#define IDC_PHASOR_ENABLE 1029
#define IDC_SAM_ENABLE 1030
#define IDC_SOUNDCARD_DISABLE 1031

#define IDC_TFE_SETTINGS_ENABLE_T 1032
#define IDC_TFE_SETTINGS_ENABLE 1033
#define IDC_TFE_SETTINGS_INTERFACE_T 1034
Expand Down Expand Up @@ -99,7 +98,6 @@
#define IDC_PRINTER_FILTER_UNPRINTABLE 1057
#define IDC_PRINTER_APPEND 1058
#define IDC_SPIN_PRINTER_IDLE 1059

#define IDC_CHECK_HALF_SCAN_LINES 1060
#define IDC_GPL_TEXT 1061
#define IDC_GPL_BORDER 1063
Expand All @@ -120,6 +118,7 @@
#define IDC_COMBO_DISK2_SLOT5 1086
#define IDC_FOURPLAY_CONFIG 1087
#define IDC_SNESMAX_CONFIG 1088
#define IDC_CHECK_VIDHD_IN_SLOT3 1089
#define IDM_EXIT 40001
#define IDM_HELP 40002
#define IDM_ABOUT 40003
Expand Down
2 changes: 2 additions & 0 deletions source/CMakeLists.txt
Expand Up @@ -47,6 +47,7 @@ set(SOURCE_FILES
Debugger/Debugger_Commands.cpp
Debugger/Util_MemoryTextFile.cpp

VidHD.cpp
SSI263.cpp
Speaker.cpp
SoundCore.cpp
Expand Down Expand Up @@ -115,6 +116,7 @@ set(SOURCE_FILES
)

set(HEADER_FILES
VidHD.cpp
SSI263.h
SSI263Phonemes.h
Speaker.h
Expand Down
1 change: 1 addition & 0 deletions source/Card.h
Expand Up @@ -23,6 +23,7 @@ enum SS_CARDTYPE
CT_Saturn128K, // Saturn 128K (but may be populated with less RAM, in multiples of 16K)
CT_FourPlay, // 4 port Atari 2600 style digital joystick card
CT_SNESMAX, // 2 port Nintendo NES/SNES controller serial interface card
CT_VidHD,
CT_Uthernet2,
};

Expand Down
7 changes: 6 additions & 1 deletion source/CardManager.cpp
Expand Up @@ -40,6 +40,8 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "SAM.h"
#include "SerialComms.h"
#include "SNESMAX.h"
#include "VidHD.h"
#include "linux/network/uthernet2.h"

void CardManager::InsertInternal(UINT slot, SS_CARDTYPE type)
{
Expand Down Expand Up @@ -91,14 +93,17 @@ void CardManager::InsertInternal(UINT slot, SS_CARDTYPE type)
m_slot[slot] = new DummyCard(type, slot);
break;
case CT_Uthernet2:
m_slot[slot] = new DummyCard(type, slot);
m_slot[slot] = new Uthernet2(slot);
break;
case CT_FourPlay:
m_slot[slot] = new FourPlayCard(slot);
break;
case CT_SNESMAX:
m_slot[slot] = new SNESMAXCard(slot);
break;
case CT_VidHD:
m_slot[slot] = new VidHDCard(slot);
break;

case CT_LanguageCard:
case CT_Saturn128K:
Expand Down
34 changes: 23 additions & 11 deletions source/CmdLine.cpp
Expand Up @@ -169,6 +169,13 @@ bool ProcessCmdLine(LPSTR lpCmdLine)
g_cmdLine.bSlotEmpty[slot] = true;
if (strcmp(lpCmdLine, "diskii") == 0)
g_cmdLine.slotInsert[slot] = CT_Disk2;
if (strcmp(lpCmdLine, "vidhd") == 0)
{
if (slot == SLOT3)
g_cmdLine.slotInsert[slot] = CT_VidHD;
else
LogFileOutput("VidHD currently only supported in slot 3\n");
}
}
else if (lpCmdLine[3] == 'd' && (lpCmdLine[4] == '1' || lpCmdLine[4] == '2')) // -s[1..7]d[1|2] <dsk-image>
{
Expand Down Expand Up @@ -208,31 +215,36 @@ bool ProcessCmdLine(LPSTR lpCmdLine)
{
g_cmdLine.setFullScreen = 0;
}
#define CMD_FS_WIDTH "-fs-width="
else if (strncmp(lpCmdLine, CMD_FS_WIDTH, sizeof(CMD_FS_WIDTH)-1) == 0)
{
if (g_cmdLine.setFullScreen < 0) // Not yet been specified on cmd line?
g_cmdLine.setFullScreen = 1; // Implicity set full-screen. NB. Can be overridden by "-no-full-screen"

LPSTR lpTmp = lpCmdLine + sizeof(CMD_FS_WIDTH)-1;
{
g_cmdLine.userSpecifiedWidth = atoi(lpTmp);
if (!g_cmdLine.userSpecifiedWidth)
LogFileOutput("Invalid cmd-line parameter for -fs-width=x switch\n");
}
}
#define CMD_FS_HEIGHT "-fs-height="
else if (strncmp(lpCmdLine, CMD_FS_HEIGHT, sizeof(CMD_FS_HEIGHT)-1) == 0)
{
if (g_cmdLine.setFullScreen < 0) // Not yet been specified on cmd line?
g_cmdLine.setFullScreen = 1; // Implicity set full-screen. NB. Can be overridden by "-no-full-screen"

LPSTR lpTmp = lpCmdLine + sizeof(CMD_FS_HEIGHT)-1;
bool bRes = false;
UINT bestWidth=0, bestHeight=0;
if (strcmp(lpTmp, "best") == 0)
{
bRes = GetFrame().GetBestDisplayResolutionForFullScreen(bestWidth, bestHeight);
g_cmdLine.bestFullScreenResolution = true;
}
else
{
UINT userSpecifiedHeight = atoi(lpTmp);
if (userSpecifiedHeight)
bRes = GetFrame().GetBestDisplayResolutionForFullScreen(bestWidth, bestHeight, userSpecifiedHeight);
else
g_cmdLine.userSpecifiedHeight = atoi(lpTmp);
if (!g_cmdLine.userSpecifiedHeight)
LogFileOutput("Invalid cmd-line parameter for -fs-height=x switch\n");
}
if (bRes)
LogFileOutput("Best resolution for -fs-height=x switch: Width=%d, Height=%d\n", bestWidth, bestHeight);
else
LogFileOutput("Failed to set parameter for -fs-height=x switch\n");
}
else if (strcmp(lpCmdLine, "-no-di") == 0)
{
Expand Down
6 changes: 6 additions & 0 deletions source/CmdLine.h
Expand Up @@ -35,6 +35,9 @@ struct CmdLine
rgbCard = RGB_Videocard_e::Apple;
rgbCardForegroundColor = 15;
rgbCardBackgroundColor = 0;
bestFullScreenResolution = false;
userSpecifiedWidth = 0;
userSpecifiedHeight = 0;

for (UINT i = 0; i < NUM_SLOTS; i++)
{
Expand Down Expand Up @@ -74,6 +77,9 @@ struct CmdLine
int rgbCardForegroundColor;
int rgbCardBackgroundColor;
std::string strCurrentDir;
bool bestFullScreenResolution;
UINT userSpecifiedWidth;
UINT userSpecifiedHeight;
};

bool ProcessCmdLine(LPSTR lpCmdLine);
Expand Down
26 changes: 20 additions & 6 deletions source/Configuration/PageConfig.cpp
Expand Up @@ -89,18 +89,18 @@ INT_PTR CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPA
switch (LOWORD(wparam))
{
case IDC_AUTHENTIC_SPEED: // Authentic Machine Speed
SendDlgItemMessage(hWnd,IDC_SLIDER_CPU_SPEED,TBM_SETPOS,1,SPEED_NORMAL);
EnableTrackbar(hWnd,0);
SendDlgItemMessage(hWnd, IDC_SLIDER_CPU_SPEED, TBM_SETPOS, 1, SPEED_NORMAL);
EnableTrackbar(hWnd, 0);
break;

case IDC_CUSTOM_SPEED: // Select Custom Speed
SetFocus(GetDlgItem(hWnd,IDC_SLIDER_CPU_SPEED));
EnableTrackbar(hWnd,1);
SetFocus(GetDlgItem(hWnd, IDC_SLIDER_CPU_SPEED));
EnableTrackbar(hWnd, 1);
break;

case IDC_SLIDER_CPU_SPEED: // CPU speed slider
CheckRadioButton(hWnd,IDC_AUTHENTIC_SPEED,IDC_CUSTOM_SPEED,IDC_CUSTOM_SPEED);
EnableTrackbar(hWnd,1);
CheckRadioButton(hWnd, IDC_AUTHENTIC_SPEED, IDC_CUSTOM_SPEED, IDC_CUSTOM_SPEED);
EnableTrackbar(hWnd, 1);
break;

case IDC_BENCHMARK:
Expand All @@ -113,6 +113,7 @@ INT_PTR CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPA
case IDC_ETHERNET:
ui_tfe_settings_dialog(hWnd);
m_PropertySheetHelper.GetConfigNew().m_Slot[SLOT3] = m_PageConfigTfe.m_tfe_enabled ? CT_Uthernet : CT_Empty;
InitOptions(hWnd);
break;

case IDC_MONOCOLOR:
Expand All @@ -127,6 +128,14 @@ INT_PTR CPageConfig::DlgProcInternal(HWND hWnd, UINT message, WPARAM wparam, LPA
// Checked in DlgOK()
break;

case IDC_CHECK_VIDHD_IN_SLOT3:
{
const UINT newState = IsDlgButtonChecked(hWnd, IDC_CHECK_VIDHD_IN_SLOT3) ? 1 : 0;
m_PropertySheetHelper.GetConfigNew().m_Slot[SLOT3] = newState ? CT_VidHD : CT_Empty;
InitOptions(hWnd);
}
break;

case IDC_COMPUTER:
if(HIWORD(wparam) == CBN_SELCHANGE)
{
Expand Down Expand Up @@ -374,6 +383,11 @@ void CPageConfig::InitOptions(HWND hWnd)
const SS_CARDTYPE slot3 = m_PropertySheetHelper.GetConfigNew().m_Slot[SLOT3];
const BOOL enableUthernetDialog = slot3 == CT_Empty || slot3 == CT_Uthernet;
EnableWindow(GetDlgItem(hWnd, IDC_ETHERNET), enableUthernetDialog);

const bool bIsSlot3VidHD = slot3 == CT_VidHD;
CheckDlgButton(hWnd, IDC_CHECK_VIDHD_IN_SLOT3, bIsSlot3VidHD ? BST_CHECKED : BST_UNCHECKED);
const BOOL enableVidHD = slot3 == CT_Empty || bIsSlot3VidHD;
EnableWindow(GetDlgItem(hWnd, IDC_CHECK_VIDHD_IN_SLOT3), enableVidHD);
}

// Config->Computer: Menu item to eApple2Type
Expand Down
2 changes: 2 additions & 0 deletions source/Configuration/PropertySheetHelper.cpp
Expand Up @@ -548,6 +548,8 @@ std::string CPropertySheetHelper::GetCardName(const SS_CARDTYPE CardType)
return "4Play";
case CT_SNESMAX:
return "SNES MAX";
case CT_VidHD:
return "VidHD";
default:
return "Unknown";
}
Expand Down
8 changes: 8 additions & 0 deletions source/Debugger/Debug.cpp
Expand Up @@ -6545,6 +6545,11 @@ Update_t _ViewOutput( ViewVideoPage_t iPage, int bVideoModeFlags )
{
return _ViewOutput( VIEW_PAGE_2, VF_HIRES | VF_DHIRES | VF_80COL );
}
// Super Hi-Res
Update_t CmdViewOutput_SHR(int nArgs)
{
return _ViewOutput( VIEW_PAGE_1, VF_SHR );
}

// Watches ________________________________________________________________________________________

Expand Down Expand Up @@ -8744,6 +8749,9 @@ void DebuggerProcessKey( int keycode )
// Normally any key press takes us out of "Viewing Apple Output" g_nAppMode
// VK_F# are already processed, so we can't use them to cycle next video g_nAppMode
// if ((g_nAppMode != MODE_LOGO) && (g_nAppMode != MODE_DEBUG))

GetVideo().ClearSHRResidue(); // Clear the framebuffer to remove any SHR residue in the borders

DebugVideoMode::Instance().Reset();
UpdateDisplay( UPDATE_ALL ); // 1
return;
Expand Down
1 change: 1 addition & 0 deletions source/Debugger/Debugger_Commands.cpp
Expand Up @@ -267,6 +267,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
{TEXT("DHGR") , CmdViewOutput_DHGRX , CMD_VIEW_DHGRX , "View Double Hi-res (current page)" },
{TEXT("DHGR1") , CmdViewOutput_DHGR1 , CMD_VIEW_DHGR1 , "View Double Hi-res Page 1" },
{TEXT("DHGR2") , CmdViewOutput_DHGR2 , CMD_VIEW_DHGR2 , "View Double Hi-res Page 2" },
{TEXT("SHR") , CmdViewOutput_SHR , CMD_VIEW_SHR , "View Super Hi-res" },
// Watch
{TEXT("W") , CmdWatch , CMD_WATCH , "Alias for WA (Watch Add)" },
{TEXT("WA") , CmdWatchAdd , CMD_WATCH_ADD , "Add/Update address or symbol to watch" },
Expand Down
5 changes: 3 additions & 2 deletions source/Debugger/Debugger_Display.cpp
Expand Up @@ -639,8 +639,8 @@ void StretchBltMemToFrameDC(void)
int nViewportCX, nViewportCY;
win32Frame.GetViewportCXCY(nViewportCX, nViewportCY);

int xdest = win32Frame.IsFullScreen() ? win32Frame.GetFullScreenOffsetX() : 0;
int ydest = win32Frame.IsFullScreen() ? win32Frame.GetFullScreenOffsetY() : 0;
int xdest = win32Frame.IsFullScreen() ? win32Frame.GetFullScreenOffsetX() : GetVideo().GetFrameBufferCentringOffsetX() * win32Frame.GetViewportScale();
int ydest = win32Frame.IsFullScreen() ? win32Frame.GetFullScreenOffsetY() : GetVideo().GetFrameBufferCentringOffsetY() * win32Frame.GetViewportScale();
int wdest = nViewportCX;
int hdest = nViewportCY;

Expand Down Expand Up @@ -738,6 +738,7 @@ static void PrintGlyph( const int xDst, const int yDst, const int glyph )
// Manual print of character. A lot faster than BitBlt, which must be avoided.
int index_src = (CONSOLE_FONT_BITMAP_HEIGHT - 1 - ySrc) * CONSOLE_FONT_NUM_CHARS_PER_ROW * CONSOLE_FONT_GRID_X + xSrc; // font bitmap
int index_dst = (DISPLAY_HEIGHT - 1 - yDst) * DEBUG_VIRTUAL_TEXT_WIDTH * CONSOLE_FONT_GRID_X + xDst; // debugger bitmap

for (int yy = 0; yy < CONSOLE_FONT_GRID_Y; yy++)
{
for (int xx = 0; xx < CONSOLE_FONT_GRID_X; xx++)
Expand Down
2 changes: 2 additions & 0 deletions source/Debugger/Debugger_Types.h
Expand Up @@ -509,6 +509,7 @@
, CMD_VIEW_DHGRX
, CMD_VIEW_DHGR1
, CMD_VIEW_DHGR2
, CMD_VIEW_SHR
// Watch
, CMD_WATCH // TODO: Deprecated ?
, CMD_WATCH_ADD
Expand Down Expand Up @@ -770,6 +771,7 @@
Update_t CmdViewOutput_DHGRX (int nArgs);
Update_t CmdViewOutput_DHGR1 (int nArgs);
Update_t CmdViewOutput_DHGR2 (int nArgs);
Update_t CmdViewOutput_SHR (int nArgs);
// Watch
Update_t CmdWatch (int nArgs);
Update_t CmdWatchAdd (int nArgs);
Expand Down