Debugger view output QoL (#1384, PR #1385)

. Add (missing) help for Debugger's View Output
This commit is contained in:
Michael "Code Poet" Pohoreski
2025-02-22 08:57:10 -08:00
committed by GitHub
parent 07914230a7
commit c1592b90f4
4 changed files with 259 additions and 6 deletions
+10
View File
@@ -1,4 +1,14 @@
/*
2.9.2.7 Added: QoL for Debugger's view output screen.
When using the debugger to view the ouput screen such as `HGR`, `HGR2`, etc. allow the
keys 0-5 to display the specificed video # page, or 9 to see the current video mode.
0 Pseudo Page 0 ($0000 for graphics, else text page 1)
1 Hardware Page 1 ($2000 for graphics, else text $0400)
2 Hardware Page 2 ($4000 for graphics, else text $0800)
3 Pseudo Page 3 ($6000 for graphics, else text page 1)
4 Pseudo Page 4 ($8000 for graphics, else text page 1)
5 Pseudo Page 5 ($A000 for graphics, else text page 1)
9 Current mode and page
2.9.2.6 Added: QoL: Turning a symbol table on/off now shows the current status.
2.9.2.5 Added: Symbol table for DOS 3.3 using file A2_DOS33.SYM2
Add symbols via: SYMDOS33 <symbol> = <addr>
+5 -1
View File
@@ -7,7 +7,7 @@
<body style="DIRECTION: ltr" lang="en-US">
<H1>AppleWin Debugger Tutorial</H1>
<P><FONT size="4"><i>By Michael Pohoreski.</i></FONT></P>
<P><FONT size="3">Revision 3.&nbsp; Mar 12, 2006.</FONT></P>
<P><FONT size="3">Revision 4.&nbsp; Feb. 21, 2025.</FONT></P>
<H2>Table of Contents</H2>
<UL>
<LI><A href="#Introduction">Introduction</A>
@@ -23,6 +23,10 @@
<LI><A href="dbg-memory.html#Memory_Search">Searching Memory</A>
<LI><A href="dbg-memory.html#Memory_Change">Changing Memory</A>
</UL>
<LI><A href="dbg-view-output.html">View Ouput</a>
<LI><A href="dbg-view.html#View_Video_Modes">Video Modes</A>
<LI><A href="dbg-view.html#View_Output_Keys">Output Keys</A>
</UL>
<LI><A href="dbg-symbols.html">Symbols</A>
<LI><A href="dbg-calculator.html">Calculator</A>
<LI><A href="dbg-windows.html">Windows</A>
+175
View File
@@ -0,0 +1,175 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>AppleWin Debugger Tutorial</title>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=windows-1252">
</head>
<body style="DIRECTION: ltr" lang="en-US">
<h1><a name="View Output">View Output</a></h1>
<h3><a name="View_Video_Modes">Video Modes</a></h3>
<p>You can view the output of the Apple by using the following commands.</p>
</p>
<table border="0" cellpadding="2" cellspacing="0" width="80%">
<COLGROUP>
<col width="64">
<col width="192">
<tbody>
<tr bgcolor="#000000">
<td bgcolor="#000000" width="25%"><p><font color="#ffffff"><b>Command</b></font></p></td>
<td bgcolor="#000000" width="75%"><p style="FONT-STYLE: normal"><font color="#ffffff"><b>Effect</b></font></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">\</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">Display Apple output until a key pressed.</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">DGR</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Double lo-res (current page).</span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">DGR1</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Double lo-res Page 1.</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">DGR2</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Double lo-res Page 2.<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">DHGR</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Double Hi-res (current page).</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">DHGR1</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Double Hi-res Page 1.<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">DHGR2</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Double Hi-res Page 2.</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">GR</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Lo-Res screen (current page).<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">GR1</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Lo-Res screen Page 1.</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">GR2</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Lo-Res screen Page 2.<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">HGR</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Hi-res (current page).</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">HGR0</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View pseudo Hi-res Page 0 ($0000).<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">HGR1</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Hi-res Page 1 ($2000).</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">HGR2</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Hi-res Page 2 ($4000).<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">HGR3</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View pseudo Hi-res Page 3 ($6000).</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">HGR4</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View pseudo Hi-res Page 4 ($8000).<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">HGR5</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View pseudo Hi-res Page 5 ($A000).</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">SHR</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Super Hi-res.<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">TEXT</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Text screen (current page).</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">TEXT1</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Text screen Page 1 ($0400).<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">TEXT2</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View Text screen Page 2 ($0800).</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">TEXT80</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View 80-column Text screen (current page).<br></span></i></p></td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">TEXT81</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View 80-column Text screen Page 1.</span></i></p></td>
</tr>
<tr bgcolor="#999999">
<td width="25%"><p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">TEXT82</span></b></font></font></p></td>
<td width="75%"><p><i><span style="BACKGROUND: 0% 50%; moz-background-clip: initial; moz-background-origin: initial; moz-background-inline-policy: initial">View 80-column Text screen Page 2.<br></span></i></p></td>
</tr>
</tbody>
</table>
<h2><font size="4">Notes:</font></h2>
<ul>
<li><p>If you change to a specific video mode/page <i>different</i> from the current video settings and then exit the debugger (<font face="Courier, monospace">F7</font>) the screen will NOT change to the current video settings.
This lets you inspect other video modes/pages until code (re)sets the video mode or page -- handy if reverse engineering games.</p></li>
<li>If the Apple's output is in a mixed mode then viewing a specific mode MAY view them in full screen mode.</li>
</ul>
<p><br></p>
<h3><a name="View_Output_Keys">Output Keys</a></h3>
<p>While viewing the Apple's output you can use the following keys to switch video pages. Pressing any other key will return to the debugger's output.</p>
<table border="1" cellpadding="2" cellspacing="0" width="75%">
<COLGROUP>
<col width="26">
<col width="64">
<col width="166">
<tbody>
<tr bgcolor="#000000">
<td width="10%">
<p><font color="#ffffff"><b>Key</b></font></p>
</td>
<td width="25%">
<p><font color="#ffffff"><b>Name</b></font></p>
</td>
<td width="65%">
<p><font color="#ffffff"><b>Effect</b></font></p>
</td>
</tr>
<tr>
<td width="10%"><p><b><font face="Courier">0</font></b></p></td>
<td width="25%"><p>Zero</p></td><td width="65%"><p><i>View psuedo page 0<br> ($0000-$1FFF) if graphics,<br> page 1 if text.</i></p></td>
</tr>
<tr>
<td width="10%"><p><b><font face="Courier">1</font></b></p></td>
<td width="25%"><p>One</p></td><td width="65%"><p><i>View page 1<br> ($2000-$3FFF) if graphics,<br>($0400-$07FF) if text.</i></p></td>
</tr>
<tr>
<td width="10%"><p><b><font face="Courier">2</font></b></p></td>
<td width="25%"><p>Two</p></td><td width="65%"><p><i>View page 2<br> ($4000-$5FFF) if graphics,<br>($0800-$0BFF) if text.</i></p></td>
</tr>
<tr>
<td width="10%"><p><b><font face="Courier">3</font></b></p></td>
<td width="25%"><p>Three</p></td><td width="65%"><p><i>View pseudo page 3<br> ($6000-$7FFF) if graphics,<br>page 1 if text.</i></p></td>
</tr>
<tr>
<td width="10%"><p><b><font face="Courier">4</font></b></p></td>
<td width="25%"><p>Four</p></td><td width="65%"><p><i>View psuedo page 4<br> ($8000-$9FFF) if graphics,<br>page 1 if text.</i></p></td>
</tr>
<tr>
<td width="10%"><p><b><font face="Courier">5</font></b></p></td>
<td width="25%"><p>Five</p></td><td width="65%"><p><i>View psuedo page 5<br> ($A000-$BFFF) if graphics,<br>page 1 if text.</i></p></td>
</tr>
<tr>
<td width="10%"><p><b><font face="Courier">9</font></b></p></td>
<td width="25%"><p>Nine</p></td><td width="65%"><p><i>View current video mode and page.</i></p></td>
</tr>
</table>
</body>
</html>
+69 -5
View File
@@ -53,7 +53,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#define MAKE_VERSION(a,b,c,d) ((a<<24) | (b<<16) | (c<<8) | (d))
// See /docs/Debugger_Changelog.txt for full details
const int DEBUGGER_VERSION = MAKE_VERSION(2,9,2,6);
const int DEBUGGER_VERSION = MAKE_VERSION(2,9,2,7);
// Public _________________________________________________________________________________________
@@ -6813,7 +6813,7 @@ enum ViewVideoPage_t
static Update_t _ViewOutput ( ViewVideoPage_t iPage, UINT bVideoModeFlags )
{
switch ( iPage )
switch ( iPage )
{
case VIEW_PAGE_X:
bVideoModeFlags |= (!GetVideo().VideoGetSW80STORE() && GetVideo().VideoGetSWPAGE2()) ? VF_PAGE2 : 0;
@@ -9205,10 +9205,74 @@ void DebuggerProcessKey ( int keycode )
// 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
// 2.9.2.7 Added: QoL for Debugger's view output screen.
// When using the debugger to view the ouput screen such as `HGR`, `HGR2`, etc. allow the
// keys 0-5 to display the specificed video # page, or 9 to see the current video mode.
// 0 Pseudo Page 0 ($0000 for graphics, else text page 1)
// 1 Hardware Page 1 ($2000 for graphics, else text $0400)
// 2 Hardware Page 2 ($4000 for graphics, else text $0800)
// 3 Pseudo Page 3 ($6000 for graphics, else text page 1)
// 4 Pseudo Page 4 ($8000 for graphics, else text page 1)
// 5 Pseudo Page 5 ($A000 for graphics, else text page 1)
// 9 Current mode and page
//
// NOTE: Do we want to allow viewing mixed/full mode since 0-5 always sets fullscreen?
// 7 Mixed-screen mode
// 8 Full-screen mode
//
// NOTE: Keep in sync: ViewVideoPage_t, DebuggerProcessKey(), _ViewOutput()
if (((keycode >= '0') && (keycode <= '5'))
|| (keycode == '9'))
{
ViewVideoPage_t eVideoPage = VIEW_PAGE_X;
UINT bVideoFlags = 0;
DebugVideoMode::Instance().Get( &bVideoFlags );
uint32_t bSavedVideoModeFlags = bVideoFlags;
bVideoFlags &= ~(VF_MIXED | VF_PAGE0 | VF_PAGE2 | VF_PAGE3 | VF_PAGE4 | VF_PAGE5);
switch (keycode)
{
case '0': eVideoPage = VIEW_PAGE_0; bVideoFlags |= VF_PAGE0; break;
case '1': eVideoPage = VIEW_PAGE_1; /* */; break;
case '2': eVideoPage = VIEW_PAGE_2; bVideoFlags |= VF_PAGE2; break;
case '3': eVideoPage = VIEW_PAGE_3; bVideoFlags |= VF_PAGE3; break;
case '4': eVideoPage = VIEW_PAGE_4; bVideoFlags |= VF_PAGE4; break;
case '5': eVideoPage = VIEW_PAGE_5; bVideoFlags |= VF_PAGE5; break;
case '9': /* Don't use VIEW_PAGE_X as it is handled below*/; break;
default:
bool bUnknownViewVideoPage = false;
assert( bUnknownViewVideoPage );
break;
}
if (keycode == '9')
{
GetFrame().VideoRedrawScreen(); // See: CmdWindowViewOutput()
}
else
{
_ViewOutput( eVideoPage, bVideoFlags );
DebugDisplay();
}
// We need to restore the video mode since the original output may be mixed mode
// but switching to page 0-5 will have set full mode.
DebugVideoMode::Instance().Set( bSavedVideoModeFlags );
g_bIgnoreNextKey = true;
}
else
{
GetVideo().ClearSHRResidue(); // Clear the framebuffer to remove any SHR residue in the borders
DebugVideoMode::Instance().Reset();
// Technically this is a bug/feature: Leaving the debugger view output can sometimes be in the wrong view mode
// GetFrame().VideoRedrawScreen();
// DebugVideoMode::Instance().Set( GetVideo().GetVideoMode() );
UpdateDisplay( UPDATE_ALL ); // 1
}
DebugVideoMode::Instance().Reset();
UpdateDisplay( UPDATE_ALL ); // 1
return;
}