AppleWin/help/dbg-symbols.html

296 lines
12 KiB
HTML
Raw Blame History

<!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">
<h2><a name="Symbols"></a>Symbols</h2>
<p>
When a programmer writes an assembly language program instead of directly referring to a memory address over and over again they use a <b>symbolic name</b> instead.
For example, instead of always directly hard-coding $C000 everywhere to read the keyboard they would instead write:
</p>
<p><font color="#00b8ff"><font face="courier"><b><pre style="background: rgb(0,0,0) 0% 50%;">
ORG $300
KEYBOARD EQU $C000
300:AD 00 C0 .1 LDA KEYBOARD
303:10 FB BPL .1
305:8D 00 04 STA $0400
306:60 RTS
</pre></b></font></font></p>
<p>
Let's try this out in the debugger. Make sure AppleWin is running. Press F2 (to reboot), then Ctrl-F2 (to break), and F7 (to enter the debugger.)
&nbsp; If you don't want to type in the following hex code, you can select it, copy it (Ctrl-C), and paste it into the Debugger console (Ctrl-V).
</p>
<p><font color="#00b8ff"><font face="Courier"><b><pre style="BACKGROUND: rgb(0,0,0) 0% 50%;">
300:AD 00 C0 10 FB 8D 00 04 60
300L
</pre></b></font></font></p>
<p>
Press F7 to exit the debugger, then type:
</p>
<p><font color="#00b8ff"><font face="Courier"><b><pre style="BACKGROUND: rgb(0,0,0) 0% 50%;">
HOME:CALL 768
</pre></b></font></font></p>
<p>
Press Enter.&nbsp; The emulated computer will wait for your to press a key and then echo it in the top left.
</p>
<p>
When debugging assembly programs since you typically don't have the source file availabe you can tell the debugger how to interpret a memory address as a variable name or symbol.
A <b>symbol</b> is the symbolic name and the address assigned to it.
</p>
<p>AppleWin supports loading of the assemblers ACME, and Merlin's symbol tables -- a collection of symbols, one per line, organized and collectively called a symbol table.
The semi-colon is a comment-till-end-of-line. The file format per line is: <b>ADDRESS SYMBOL</b></p>
<p>e.g.</p>
<p><font color="#00b8ff"><font face="courier"><b><pre style="background: rgb(0,0,0) 0% 50%;">
; IO Map
C000 KEYBOARD
</pre></b></font></font></p>
<p>
There are <b>9</b> symbol tables to help organize "modules"; each symbol table individually can be turned off/on independently.
<pre>
MAIN APPLE2E.SYM
BASIC A2_BASIC.SYM
ASM A2_ASM.SYM
User1 A2_USER1.SYM
User2 A2_USER2.SYM
Src1 A2_SRC1.SYM
Src2 A2_SRC2.SYM
DOS33 A2_DOS33.SYM
PRODOS A2_PRODOS.SYM
</pre></p>
<p>On startup the debugger reads 3 symbol tables by default: Main, Basic, User1.</p>
</p>
<p>Looking up symbols is easy.&nbsp; If you can't remember an address of a symbol,
or the reversse -- can't remember the symbol for an address -- you can use the following symbol commands:
(#### referes to either a hex address or a symbolic name)
</p>
<p><br>
<br>
</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%; ">SYM</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%; ">Display
the number of symbols in the Main, User, and Source symbol tables.</span></i></p>
</td>
</tr>
<tr bgcolor="#999999">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">SYM
####</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%; ">Look-up
the Symbol or Address, and display which Symbol Table it is in.</span></i></p>
</td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">SYMUSER
LOAD</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%; ">Reloads
the User Symbol Table: <b>A2_USER1.SYM</b></span></i></p>
</td>
</tr>
<tr bgcolor="#999999">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">SYMUSER
CLEAR</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%;">Clears
the User Symbol Table from RAM.</span></i></p>
</td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">SYMMAIN
####</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%; ">Look-up
only in the Main symbol table.</span></i></p>
</td>
</tr>
<tr bgcolor="#999999">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">SYMUSER
####</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%; ">Look-up
only in the User symbol table.</span></i></p>
</td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">SYMSRC
####</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%; ">Look-up
only in the Source symbol table.</span></i></p>
</td>
</tr>
<tr bgcolor="#999999">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">SYM
name = ####</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%; ">Add
(or update) a symbol in the User table with the new Address.</span></i></p>
</td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">SYM
! name</span></b></font></font></p>
</td>
<td width="75%">
<p><i><span style="BACKGROUND: 0% 50%; ">Remove
a symbol from the User table.</span></i></p>
</td>
</tr>
<tr bgcolor="#999999">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b><span style="BACKGROUND: 0% 50%; ">MEB
symbol ##</span></b></font></font></p>
</td>
<td width="75%">
<p><i>Set memory (at the symbol Address) to the 8-Bit (byte) Value.</i></p>
</td>
</tr>
<tr bgcolor="#cccccc">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b>MEW symbol ####</b></font></font></p>
</td>
<td width="75%">
<p><i>Set memory (at the symbol Address) to the 16-Bit (word) Value.</i></p>
</td>
</tr>
<tr bgcolor="#999999">
<td width="25%">
<p><font color="#000000"><font face="Courier"><b>E16 symbol ####</b></font></font></p>
</td>
<td width="75%">
<p><i>Alias for EW.</i></p>
</td>
</tr>
</tbody>
</table>
<p><br>
<br>
</p>
<p><font size="4"><b>Examples</b>:</font></p>
<table bgcolor="#000000" border="0" cellpadding="2" cellspacing="0" width="799">
<COLGROUP>
<col width="276">
<col width="515">
<tbody>
<tr bgcolor="#00b8ff">
<td bgcolor="#30c0ff" width="276">
<p><font color="#000000"><b>Input</b></font></p>
</td>
<td bgcolor="#30c0ff" width="515">
<p><font color="#000000"><b>Effect</b></font></p>
</td>
</tr>
<tr bgcolor="#000000">
<td width="276">
<p><font color="#00b8ff"><font face="Courier"><b>SYM</b></font></font></p>
</td>
<td width="515">
<p><font color="#ffffff"><i>Displays number of symbols in the Main, User, and Source
tables.</i></font></p>
</td>
</tr>
<tr bgcolor="#000000">
<td width="276">
<p><font color="#00b8ff"><font face="Courier"><b>SYMMAIN CLEAR</b></font></font></p>
</td>
<td width="515">
<p><font color="#ffffff"><i>Clears the main symbol table!!</i></font></p>
</td>
</tr>
<tr bgcolor="#000000">
<td width="276">
<p><font color="#00b8ff"><font face="Courier"><b>SYMMAIN LOAD APPLE2E.SYM</b></font></font></p>
</td>
<td width="515">
<p><font color="#ffffff"><i>Reloads the main symbol table.</i></font></p>
</td>
</tr>
<tr bgcolor="#000000">
<td bgcolor="#000000" width="276">
<p><font color="#00b8ff"><font face="Courier"><b>SYM FA62</b></font></font></p>
</td>
<td bgcolor="#000000" width="515">
<p><font color="#ffffff"><i>Look up the Address $<b><font color="#ffff00">FA62</font></b> (RESET).</i></font></p>
</td>
</tr>
<tr bgcolor="#000000">
<td bgcolor="#000000" width="276">
<p><font color="#00b8ff"><font face="Courier"><b><span style="BACKGROUND: rgb(0,0,0) 0% 50%; ">SYM
HOME</span></b></font></font></p>
</td>
<td bgcolor="#000000" width="515">
<p><font color="#ffffff"><i>Look up the Symbol Home ($<b><font color="#ffff00">FC58</font></b>).</i></font></p>
</td>
</tr>
<tr bgcolor="#000000">
<td bgcolor="#000000" width="276">
<p><font color="#00b8ff"><font face="Courier"><b><span style="BACKGROUND: rgb(0,0,0) 0% 50%;">SYM
LIFE = 300</span></b></font></font></p>
</td>
<td bgcolor="#000000" width="515">
<p><font color="#ffffff"><i>Define a new user symbol, called <20>Life<66> at Address $0300.</i></font></p>
</td>
</tr>
<tr bgcolor="#000000">
<td bgcolor="#000000" width="276">
<p><font color="#00b8ff"><font face="Courier"><b><span style="BACKGROUND: rgb(0,0,0) 0% 50%;">MEB
LIFE 64</span></b></font></font></p>
</td>
<td bgcolor="#000000" width="515">
<p><font color="#ffffff"><i>Set 8-Bit variable (@ $<b><font color="#ffff00">0300</font></b>)<29>Life<66>
to 100 (decimal).</i></font></p>
</td>
</tr>
<tr bgcolor="#000000">
<td bgcolor="#000000" width="276">
<p><font color="#00b8ff"><font face="courier"><b><span style="background: rgb(0,0,0) 0% 50%; ">MEW
LIFE 3E8</span></b></font></font></p>
</td>
<td bgcolor="#000000" width="515">
<p><font color="#ffffff"><i>Set 16-Bit variable (@ $<b><font color="#ffff00">0300</font></b>)<29>Life<66>
to $3E8 = 1000 (decimal).</i></font></p>
</td>
</tr>
</tbody>
</table>
<p>
<br>
&nbsp;
</p>
</body>
</html>