home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 310.lha / debug_v2.10 / debugdoc < prev    next >
Text File  |  1980-12-06  |  23KB  |  710 lines

  1.  
  2.                     -- Amiga Debugger --
  3.              Debug v2.10
  4.  
  5. Software and documentation  by Jim Thibodeau and  Larry LaPlume. Debug
  6. is the official resident debugger here at SLADE Software.
  7.  
  8. This is the second release of this program. Some of the added features
  9. include symbolic dissasembly,  breakpoint toggling,  workbench startup
  10. and simple expression parsing. As before, we welcome your comments and
  11. suggestions, and you can reach us like this:
  12.  
  13.     Jim Thibodeau                Larry Laplume
  14.     35349 Janine Dr.            64 Garland Dr. #4
  15.     Zephyrhills, FL.  33541            Jackson, TN.  38301
  16.     (813) 788-2627                (901) 664-7059
  17.  
  18.  
  19.                     --  Debug Notes  --
  20.  
  21. Command line syntax:
  22.    Is geared toward the heavy duty hacker.   Generally, a command
  23. line consists of a single letter command,  an optional space, and
  24. 1 or two arguments.  Arguments may be numeric, symbolic,  contain
  25. the simple math operators +,-,/,*,<<,>>, a register, or a segment
  26. number.    The supported numeric formats  are:  Hexidecimal, decimal
  27. or binary.  Some commands  take  no  arguments, such  as eXit and 
  28. display Hunk list.
  29.  
  30.    Note that Debug shares  its  very  own  Task Control Structure
  31. with the program being  debugged.   Things that the program being
  32. debugged does to its Task  Control  Structure,  it  automatically
  33. does to Debug's Task Control Structure. Currently, Debug modifies 
  34. the  TC_TRAPCODE field  of the TCB,  so  if your program  changes 
  35. this, Debug will NOT work.
  36.  
  37.    When  Disassembling  or  dumping  memory,  none,  one  or  two
  38. arguments may be given.  If no  argument  is given, the operation
  39. will begin where the last operation left off.  If one argument is
  40. given, the operation  will  begin  at  the address specified, and
  41. continue for a few  lines.   If  two  arguments  are  given,  the
  42. operation will begin with  the  address  specified  by  the first
  43. argument, and continue to the  second  argument.  The disassemble
  44. and memory dump routines both support the ^C user break keystroke
  45. to stop them from continuing to their normal completion.
  46.  
  47.    When  Debug  is  ready  to  accept  commands  it will  display
  48. a minus sign as a  prompt.   Commands  may  then  be typed at the
  49. keyboard, followed  by  the  return  or  enter  keys on the Amiga
  50. keyboard. Most of the time, spaces are optional, except where the
  51. parser may become confused. For example: 
  52.  
  53. -g_main _exit    Will begin execution at _main, and quit at _exit.
  54.  
  55. -g_main_exit    Will attempt to begin execution at _main_exit.
  56.  
  57.  
  58.  
  59.                     --  Expressions --
  60.  
  61.   An  expression is  defined as 1 or  more operands and 0 or more
  62. operators. An operator  is one of the  following: +, -, *, /, <<, 
  63. or >>, and valid operands are as follows:
  64.  
  65. s<segment-number>    The first  executable address of the seg-
  66.             ent.  This will be the same  value as the 
  67.             the segment using the 'S' command.
  68.  
  69. (<reg>[,<reg>])        Note that the second register is optional
  70.             but  the first is  not. This  MUST  be in 
  71.             parentheses!
  72.  
  73. $<hex-num>        A hexidecimal number.
  74.  
  75. +|-<dec-num>        A signed  decimal number.  Because Hex is
  76.             default, you must specify either + or -.
  77.  
  78. %<binary-num>        A binary number.
  79.  
  80. <number>        A hexidecimal number. (The default).
  81.  
  82. <symbol>        A symbolic label contained in the program
  83.             being debugged.
  84.  
  85. '<character>'        A single character enclosed in quotes.
  86.  
  87. '<string>'        A string of ascii characters enclosed in single
  88.             quotes.
  89.  
  90.   Each element will be checked for correct  syntax before a value
  91. is returned.  If the  parser finds  any errors, it  will  print a 
  92. (hopefully) helpful error message and terminate the command.
  93.  
  94.   Valid registers are as follows. Note that they can be in either 
  95. upper or lower case.
  96.  
  97.     a0-a7, d0-d7, sp, sr, pc, z, x, n, c, v.
  98.  
  99.  
  100.   Symbols  are  treated  in  a  case-sensitive  way  to  maintain
  101. compatibility with the assembler.  If  the label _main is used in 
  102. your program, it must be referred to in lower case only.
  103.  
  104.   Hexidecimal is the default input radix. If you type 3210, it is
  105. evaluated as  hexidecimal, not decimal.  To specify decimal,  you 
  106. must put a + or - in front of the number.
  107.  
  108.   Because   parentheses   are  used  to   delimit  registers,  no
  109. expression   nesting  is   allowed - i.e. 3 + (4*8)  is  illegal.
  110. Operator precedence is as follows:
  111.  
  112.     Highest                Lowest
  113.     *,/        +,-        <<, >>
  114.  
  115.  
  116.   There are no unary operators at this time.
  117.  
  118.  
  119.  
  120.  
  121.  
  122.                     --  Command Summary --
  123.  
  124. Note: The  following  symbols  and  their  definitions  are  used
  125.       throughout this discussion:
  126.     
  127.     |  - or
  128.     [] - optional argument
  129.     <> - description -  replace with value
  130.  
  131.  
  132. Command:    B      (Breakpoint commands)
  133. Syntax:     b|B [s|c|x|t|<bp-number>] <bp-number> <expression>
  134. Discussion:
  135.  
  136.   Debug supports limited, multiple  break  points.  Up to 8 break
  137. points may be active at once. Use the -b command to view, set, or
  138. clear any or  all  break  points.   When  setting a  break point, 
  139. Debug  stores  the requested  address  of  a break point,  stores 
  140. the    contents   of  that   address,  and   replaces   it   with
  141. the MC68000's  ILLEGAL opcode.  Clearing the break point replaces
  142. the ILLEGAL instruction with the saved contents.  When  the Amiga
  143. attempts to execute the  installed  ILLEGAL  instruction, via the
  144. 'g',  't', or  'z' commands, Debug considers  it a breakpoint and
  145. displays the appropriate information.  New to this version is the
  146. toggle  subcommand.  By using this once,  the breakpoint is still
  147. set, but  disabled (i.e. it  will not cause  the program to  stop 
  148. executing).  By using it again, the  breakpoint is  enabled. Note 
  149. that disabled breakpoints will not show up in the dissasembly.
  150.  
  151. Examples:
  152. -b              Lists all currently set break points.
  153.  
  154. -b 1            List  the  current  status  of break point number
  155.         one.
  156.  
  157. -bs 1 100       Sets Break point number one to address $100.
  158.  
  159. -bc 1           Removes  break  point  one,  and  restores  saved
  160.         contents of that address.
  161.  
  162. -bx             Remove all of  the  eight  break  points that are
  163.             set.
  164.  
  165. -bt 0            If breakpoint 0 is enabled, disable it  and vice/
  166.             versa.
  167.  
  168.  
  169. Command:    C   (Set Command Line Tail)
  170. Syntax:        c|C [<parameter string>]
  171. Example:
  172. -c Desired Command line tail
  173.  
  174.       Declare  "Desired Command line tail"  as  a  command  tail.  
  175. Debug will  set up the  string in  memory,  and install a pointer
  176. to it and the length of the specified  string in the MC68000s' A0
  177. and D0 registers  each  time,  BUT  NOT  UNTIL  the registers are
  178. initialized. (See the "I" command).
  179.  
  180.  
  181. Command:    D   (Disassemble memory)
  182. Syntax:        d|D [<start-address>] [<end-address>]
  183. Examples:
  184. -d 100 200    Will  disassemble  memory from  address  $100  to 
  185.         $200.
  186.  
  187. -d (a0)        Disassemble  memory pointed to by the contents of
  188.         register A0.
  189.  
  190. -d  (pc)    Disassemble memory  at  the  value of the Program
  191.         Counter.
  192.  
  193. -d (a0,d0)    Disassemble  memory at the  value of the register 
  194.         A0 plus the contents of the D0 register.  This is  
  195.         similar to the processor's  d(An,Xi) mode  except  
  196.         for  the lack of index size specifier - the  size  
  197.         always  being  long,  and  the lack  of any  dis-
  198.         placement value.
  199.  
  200.  
  201. Command:        f     (Fill memory)
  202. Syntax:         f.|F. <size> <start-address> <end-address> <value list>
  203. Discussion:
  204.  
  205.   This  command fills  successive  memory  locations  from start-
  206. address to  end-address  with the  values in value-list.  As with
  207. the modify command, valid size specifiers are B, W and L.
  208.  
  209. Examples:
  210.  
  211.  -f.l $4000 $5000 = 0    
  212.         Fill memory  between  addresses  $4000 and  $5000
  213.         with zeros.
  214.  
  215.  -f.b $4000 $5000 = 7, 'This is a test...', 0
  216.         Fill memory with a stupid,  repeating,  flashing,
  217.         NULL terminated message.
  218.  
  219.  
  220. Command:    G     (Go execute instructions)
  221. Syntax:        g|G   [=<start-address>] [<end-address>]
  222. Examples:
  223. -g_main        Execute  the  program  until the label _main. This 
  224.            is accomplished by setting a  temporary breakpoint
  225.            at the  destination  address.  If processing halts 
  226.            before _main, the  breakpoint will be cleared any-
  227.            way -  so if  you still wanted to go to _main, you 
  228.            would have to type g_main again, not just g.
  229.            
  230. -g=100         Begin executing instructions at address $100. 
  231.  
  232. -g             Begin  executing   instructions  at  the   current 
  233.            program counter.
  234.  
  235.  
  236. Command:    H   (Show Segment list of loaded file)
  237. Syntax:        h|H
  238. Example:
  239. -h        Display segment list of current file.
  240.  
  241.  
  242. Command:    I    (Initialize MC68000 Registers)
  243. Syntax:     i|I
  244. Discussion:
  245.  
  246.    When  initializing,  Command  line  tail  values  (if any) are
  247. installed in registers  A0  and  D0.   Also  initialized  are the
  248. Program  Counter,  and  User   Stack   Pointer  registers.   When
  249. initializing the USP, the top of stack is found, then the address
  250. of a termination routine is pushed onto the stack, so the program
  251. can run to  its   completion,  and  remain  in  Debug for further
  252. examination.
  253.  
  254.                     * * * N O T E * * *
  255.  
  256.     The  following  conditions  AUTOMATICALLY   perform  the  "I"
  257. command:
  258.  
  259. 1. Normal termination of the  program.  (registers  are displayed 
  260.    before reset).
  261. 2. Attempting to Load a file. (even if the load fails).
  262.  
  263. Example:
  264. -i        Initialize ALL MC68000 register values.
  265.  
  266.  
  267. Command:    L   (Load a file for debugging)
  268. Syntax:        l|L [<path>/]<filespec> [<arguments>]
  269. Example:
  270. -l fred abc     Will attempt to  read the file fred, and  set its
  271.         arguments to the string 'abc'.
  272.  
  273.  
  274. Command:    M   (Memory dump)
  275. Syntax:        m|M [<start-address>] [<end-address>]
  276.         m|M [B|W|L]
  277. Discussion:
  278.  
  279.   This command  presently only dumps data as longwords.  As noted
  280. in the  version changes above,  dumping will proceed  from an odd 
  281. address if specified.
  282.  
  283. Examples:
  284. -m 100 200    Display memory contents from address $100 to $200
  285.  
  286. -m (sp)        Display memory contents  pointed to  by the stack
  287.         pointer.
  288.  
  289. -mb        Change future memory dumps to eight bit format (byte).
  290.  
  291. -mw        Change future memory dumps to sixteen bit format (word).
  292.  
  293. -ml        Change future memory dumps to thirty-two bit format (long).
  294.  
  295.  
  296. Command:    N    (Change default input radix)
  297. Syntax:        n|N    [<H|D|B>]
  298. Discussion:
  299.  
  300.   Debug initially uses hexidecimal as the default input radix.  This may
  301. be changed to Decimal or Binary, by using the "n" command.  Note that typing
  302. $, +, -, or % before any argument will override the default radix.
  303.  
  304. Example:
  305. -nd        Changes the default input radix to decimal.
  306.  
  307.  
  308. Command:    R  (Display/Set MC68000 Register/Flag values)
  309. Syntax:        r|R [<register>]
  310. Examples:
  311. -r        Display the contents of MC68000 registers.
  312.  
  313. -ra0 _main    Set register a0 to the address of _main.
  314.  
  315. -r a0 100    Load register A0 with the value $100.
  316.  
  317. -r d0 +100    Loads register D0 with the decimal value +100.
  318.  
  319. -r d0 -1    Loads register d0 with the decimal value of -1.
  320.  
  321. -r sr %101    Loads the Status  Register with  the binary value
  322.         %101.
  323.  
  324. -r z 1        Forces the Zero flag on.
  325.  
  326.  
  327. Command:    S     (Display symbols)
  328. Syntax:        s|S   [g|<symbol>]
  329. Examples:
  330. -s        Display all of the symbols.
  331.  
  332. -sg        Just display  the global symbols.  A local symbol
  333.         is defined as one containing a '$'.
  334.  
  335. -s_fred        Display _fred and its address.
  336.  
  337.  
  338. Command:    T     (Execute in Trace mode)
  339. Syntax:        t|T   [=<start-address>] [<trace-count>]
  340. Discussion:
  341.  
  342.   Trace works just like Go, except  that  only ONE instruction is
  343. executed, and a register frame is displayed AFTER the instruction
  344. executes.   Additionally,   Debug   will   disassemble  the  next 
  345. instruction to be  executed.  A  trap  number  of  9 will usually
  346. appear when tracing. 
  347.  
  348. Note that due  to  characteristics  of  the  Amiga's multitasking
  349. system, attempting to trace  certain  types  of processor errors,
  350. including zero divide condition, can, and probably will crash the
  351. entire system.
  352.  
  353. Examples:
  354. -t=_main    Trace  the  instruction  at  _main.
  355.  
  356. -t=ralph 4    Trace  4  instructions  beginning  at  the  label
  357.         ralph.
  358.  
  359. -t4        Trace 4  instructions  beginning at  the  current 
  360.         program counter.
  361.  
  362.  
  363. Command:    W     (Toggle private window on/off).
  364. Syntax:        w|W   
  365. Discussion:
  366.  
  367.   When Debug is initially loaded, all I/O uses this window. Using
  368. it once, forces Debug to use _stdin and _stdout for its  I/O.  If
  369. the program  being debugged  uses _stdin and _stdout and Debug is
  370. using the  window,  the system  WILL hang up  when trying to do a 
  371. Read(),   therefore,  use  the  'w'   command   before  beginning 
  372. execution.   Note  that  this  command  does  nothing if Debug is
  373. run from the workbench because a workbench program has no default
  374. I/O handles.  Note that this window uses the CON: device.
  375.  
  376. Example:
  377. -w              Close private window  if it's open, Open  private
  378.         window if it's closed. 
  379.  
  380.  
  381. Command:    X   (eXit Debug)
  382. Syntax:        x|X
  383. Example:
  384. -x        Bye bye!
  385.  
  386.  
  387. Command:    Z      (Zip through a subroutine)
  388. Syntax:     z|Z
  389. Discussion:
  390.  
  391.   Zip is useful when tracing code.  When  the next instruction to
  392. be executed is a BSR or a JSR and  tracing through the subroutine
  393. is  not  desirable,  just  press  "z".   Debug  will  attempt  to
  394. execute the subroutine, and  stop  at the instruction immediately
  395. following it.  Zip performs this feat of magic by setting a temp-
  396. orary  breakpoint after the next  instruction.  Zip is also handy 
  397. for  skipping loops: just  trace  to the bottom  of the loop, and 
  398. type Z -  Zip will  execute  up to the instruction  following the 
  399. loop.
  400.  
  401. Example:
  402. -z        Zip  through  instruction  at the current Program
  403.         counter.
  404.  
  405.  
  406. Command:    .     (Modify memory)
  407. Syntax:        .     <size> <start-address> = <value list>
  408. Discussion:
  409.   
  410.   The modify memory command  will insert the values in the  value 
  411. list in memory starting at the start address. The size  specifier
  412. is the familiar B, W or L, and each value in the  value list must
  413. be separated by commas.
  414.  
  415. Examples:
  416.  
  417.  -.b $4000 = 1, 2, 3, 4, 5, 6, 7, 8, 9, a
  418.             Writes the values  1 to  10 at successive  memory 
  419.         locations starting at address $4000.
  420.   
  421.  -.w _main =  1, 2, 3, 4, 5            
  422.         Writes the values  1 to  5 at every OTHER address 
  423.         starting at the address of the symbol _main.
  424.  
  425.  -.l $4000 = 1, 2, 3, 4, 5                
  426.         Writes  the  values  1  to  5  as  32  bit values 
  427.         beginning at address $4000.
  428.  
  429. -.b $4000 = 'Fred''s dog' 10 'has fleas.', 0
  430.  
  431.         Stores the string:
  432.              "Fred's dog
  433.             has fleas"
  434.         at  address  $4000  complete  with  an  embedded 
  435.         linefeed and (') character.
  436.  
  437.  
  438. Command:    .     (Modify memory)
  439. Syntax:        .     <size> <start-address> = <value list>
  440. Discussion:
  441.   
  442.   The modify memory command  will insert the values in the  value 
  443. list in memory starting at the start address. The size  specifier
  444. is the familiar B, W or L, and each value in the  value list must
  445. be separated by commas.
  446.  
  447. Examples:
  448.  
  449.  -.b $4000 = 1, 2, 3, 4, 5, 6, 7, 8, 9, a
  450.             Writes the values  1 to  10 at successive  memory 
  451.         locations starting at address $4000.
  452.   
  453.  -.w _main =  1, 2, 3, 4, 5            
  454.         Writes the values  1 to  5 at every OTHER address 
  455.         starting at the address of the symbol _main.
  456.  
  457.  -.l $4000 = 1, 2, 3, 4, 5                
  458.         Writes  the  values  1  to  5  as  32  bit values 
  459.         beginning at address $4000.
  460.  
  461. -.b $4000 = 'Fred''s dog' 10 'has fleas.', 0
  462.  
  463.         Stores the string:
  464.              "Fred's dog
  465.             has fleas"
  466.         at  address  $4000  complete  with  an  embedded 
  467.         linefeed and (') character.
  468.  
  469.  
  470. Command:    >    (Redirect output to a file)
  471. Syntax:        > [<Filename>]
  472. Discussion:
  473.  
  474.   The > command may be used to direct all of debug's output to a file, if
  475. desired.  To restore console output use the > command with no paramaters.
  476. Note that all output including prompts, are redirected until normal output
  477. is restored.
  478.  
  479. Examples:
  480. ->ram:temp    Directs all debug output to the file "temp" on the ramdisk.
  481.  
  482. ->SER:         Sends all debug output to the Amiga serial port.
  483.  
  484. ->        Restores the normal output stream.
  485.  
  486.  
  487. Command:    <    (Get input from a file)
  488. Syntax:        < [<Filename>]
  489. Discussion:
  490.  
  491.   Debug may be used in non-interactive mode via the < command.  In this
  492. case, a file is specified.  The file is read, and interperted exactly as
  493. if the contents of the file were typed on the keyboard.  At the end of the
  494. file, debug will terminate unless the default input stream is restored via
  495. the < command with no paramaters WITHIN the file.  Note that any or all
  496. commands may be used in script files written for debug.  This feature is
  497. useful for redundant debugging.
  498.  
  499. Examples:
  500. -<DebugScriptFile    Gets input from DebugScriptFile.
  501.  
  502. -<SER:            Gets input from the Amiga's serial port.
  503.  
  504. <  (Within a file)    Restores default input.
  505.  
  506. Command:    ?     (Help)
  507. Syntax:        ?     
  508. Example:
  509. -?        Display the help message.
  510.  
  511.  
  512. Command:    =     (Evaluate expression).
  513. Syntax:            =     <expression>.
  514. Discussion:
  515.  
  516.   This command  will  evaluate the  expression  following the '='
  517. and print the result in ascii, binary, hexidecimal and decimal.
  518.  
  519. Examples:
  520. -= 1*2        Evaluate 1 * 2 and print it.
  521.  
  522. -= fred + 4    Evaluate fred + 4 and print the value.
  523.  
  524.  
  525.                     --  Using symbols  --
  526.  
  527.   If  you are  developing with  an assembler,  you  must  use the
  528. '-C S' or  similar  switch when  assembling  your  program.  This
  529. switch puts the symbols from your program  in the symbol hunks of
  530. the executable file.  (see the  AmigaDOS  manual for more inform-
  531. ation  on  symbol hunks).  No special software tool  is required.
  532. If  you  are  developing in another  language, see  your language
  533. reference for details on generating symbol hunks.  
  534.   Unfortunately,  if  your  language  processor  does not support
  535. symbol  hunks, Debug won't be able to use symbols.
  536.  
  537.  
  538.                     --  Error messages  --
  539.  
  540.  
  541. -   Segment out of range:
  542.     The segment number is greater than the number of segments
  543.     loaded. Use the 'S' command to see the segment list.
  544.  
  545. -   Bad register:
  546.     The  register was not  recognized.  See  the  section  on
  547.     expressions for valid registers.
  548.  
  549. -   Bad register number:
  550.     The digit  after an 'a' register  or 'd' register was not
  551.     recognizable or out of range.
  552.  
  553. -   Bad number format:
  554.     The number typed in was illegal.
  555.  
  556. -   Bad character format:
  557.     The character typed in was invalid.
  558.  
  559. -   Symbol not found or bad number format:
  560.     The  parser could  not  evaluate the  element  as a  hex-
  561.     idecimal number or a symbol. To avoid confusion between a
  562.     hexidecimal  number and a label, prefix the number with a 
  563.     '$'.
  564.  
  565. -   Missing expression:
  566.     This  error  usually  occurs  when a  binary  operator is 
  567.     used with only 1 operand, or the '=' command is used with
  568.     no expression following it.
  569.  
  570. -   No file loaded:
  571.     This  error  occurs  when  you  specify  a  segment in an
  572.     expression,  with no  loaded file.  If there is no  file, 
  573.     there is no segment list!
  574.  
  575. -   Breakpoint number out of range:
  576.     Breakpoints must be in the range 0-7.
  577.  
  578. -   No breakpoint to toggle:
  579.     Debug cannot  enable  or disable a breakpoint that is not
  580.     set.
  581.  
  582. -   Pc MUST be word aligned:
  583.     To prevent accidental address errors, the program counter
  584.     is tested for word alignment each time it is set.
  585.  
  586. -   Out of range for 16-bit number:
  587.     This error occurs when you try to set the status register
  588.     to a number greater than it will hold.
  589.  
  590. -   Breakpoint not set:
  591.     This message is printed if  you try to clear a breakpoint
  592.     that was not set.
  593.  
  594. -   Symbol not found:
  595.     Either  the symbol was  mis-typed, or it is non-existant.
  596.     Remember that symbol names are case sensitive.
  597.  
  598. -   Out of range for 8 bit number.
  599.     The number specified was > 255 or < -256
  600.  
  601. -   Missing address.
  602.     The  address was  not specified  for  the '.' or  the 'f'
  603.     command.
  604.  
  605. -   Missing or invalid size specifier.
  606.     Valid size specifiers are: B(yte), W(ord) or L(ong).
  607.  
  608. -   Operation MUST be word aligned.
  609.     For data sizes other than byte, the start address for the
  610.     '.' or 'f' command must be EVEN.
  611.  
  612. -   No symbols loaded.
  613.     Either  there  is  no  file loaded  (hence  no symbols to
  614.     print),  or  your   program  contains  no  symbol  hunks.
  615.     Consult your language reference on symbol hunks.
  616.  
  617. -   No memory available.
  618.     Pretty much what  you would  expect from such a message -
  619.     no memory!
  620.  
  621. -   <=> expected.
  622.     See the syntax for the '.' and 'f' commands.
  623.  
  624. -   <,> expected.
  625.     See the syntax for the '.' and 'f' commands.
  626.  
  627.  
  628.  
  629.                         --  Bugs  --
  630.  
  631.   Some of the following are real bugs, others are just things 
  632. that may cause suprises to the unwary.
  633.  
  634. -    The  name  of the  program  really  belongs in  the  Task
  635.     control block of the debugger  (which it shares).  If you
  636.     are looking for it there, you won't find it.
  637.  
  638. -    Even if no parameters are supplied to a program, AmigaDos
  639.     sticks the end-of-line character in a buffer and sets the
  640.     argument string length to 1. Debug does not. If there are
  641.     no parameters, D0 is 0, and A0 is 0.
  642.  
  643. -    Debug's  replacement  Exit() function  assumes  that  the 
  644.     first three bytes of the library call are:
  645.         moveq    #2,d0
  646.         bra.s    xxx
  647.     If this changes in a future  Dos library version, calling
  648.     calling Exit() from within  Debug will probably crash the
  649.     system.  Because  Dos  library is  not  implemented  as a 
  650.     'standard' jump table, Exec's SetFunction() doesn't work.
  651.  
  652. -    Debug has unexplainedly crashed a few times, and it seems
  653.     to be a memory allocation/deallocation error. It may have
  654.     something to  do with  Metacomco's assembler, which has a 
  655.     few bugs of its own. Any clues are welcome.
  656.  
  657. -     Although  Debug  loads the  registers  so you can examine 
  658.     BCPL  code, something  does not  work right.  Try loading
  659.     C:List, and  typing  G.  Debug gets the initial registers
  660.     at startup, and saves them for the loaded program.  Again
  661.     any clues are welcome.
  662.  
  663. -     The  command line arguments are  terminated with an ascii
  664.     null character  -  not a  newline ($10).  Although it may
  665.     seem  more consistent to  end the line  the way  AmigaDOS
  666.     does, an  end of file indicator will  also  terminate the
  667.     line (^\), so you  should check  for any  value < ' ' for
  668.     a terminator in your debugging.
  669.  
  670. -    Do not attempt to debug Debug.  Because Debug changes the
  671.     TCB in a non-reentrant way,  Debug has to be  modified in
  672.     order for it to debug itself.
  673.  
  674.     
  675.                     --  Future plans --
  676.  
  677.   All (2)  of us at  SLADE software  want to make this THE public
  678. domain debugger.  Toward this end, the  next version will contain
  679. a  few  more  'needed'  features.  If  you  have  any  ideas,  or
  680. commands you would like to see, let us know.
  681.  
  682.  
  683. 1. The  addition of  watch-point commands.  These are  similar to
  684.    breakpoints,   but  they  trap  on   data  writes  instead  of
  685.    executable instructions.
  686.  
  687. 2. The ability to list symbols by segment number and hunk type.
  688.  
  689. 3. The addition of the 'type' subcommand to dump.
  690.  
  691. 4. The ability to use breakpoints and watchpoints in expressions.
  692.    They would have a syntax similar to segments.
  693.  
  694. 5. Linked list traversal.
  695.  
  696.  
  697.  
  698.                     --  Addenda  --
  699.  
  700.  
  701.   When displaying local symbols (symbols of the form nnn$), they
  702. may  have an extra  1 to 3 digits following  them.  This is  the 
  703. 'fault' of the Amiga assembler, not this program.
  704.  
  705.   Some  types  of  errors  including  zero  divide, TRAP #x,  and
  706. address  errors  may  alter  the  value  of the  program  counter 
  707. displayed  in  the  register  frame.  In  other words,  it may be 
  708. necessary  to  scan   back  a  few  bytes  or  words,  with   the 
  709. disassembler to view the offending instruction.
  710.