<!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.) 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. 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. 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 �Life� 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>)�Life� 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>)�Life� to $3E8 = 1000 (decimal).</i></font></p> </td> </tr> </tbody> </table> <p> <br> </p> </body> </html>