home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 2 / MECOMP-CD-II.iso / amiga / programmieren / misc / cop / cop.doc < prev    next >
Encoding:
Text File  |  1998-03-29  |  130.9 KB  |  2,764 lines

  1. $VER: COP Doc 1.15 (25.02.98) (c) THOR 25 Feb 1998
  2. *****************************************************************************
  3. **                                                                         **
  4. ** ___________                                                             **
  5. ** \        */                                                             **
  6. **  /-----------     #######     #######    ########                       **
  7. **  |    ^ |        ##      ##  ##     ##   ##     ##                      **
  8. **  |      _\       ##          ##     ##   ##     ##  Version 1.64        **
  9. **  |      |        ##          ##     ##   ########                       **
  10. **  |    --|        ##          ##     ##   ##                             **
  11. **  +-----/         ##      ##  ##     ##   ##                             **
  12. **   |   |           #######     #######    ## (c) 1993-1998 THOR-Software **
  13. **                                                                         **
  14. **                                                                         **
  15. **              A Low Level Debugger for all Amiga Systems                 **
  16. **                                                                         **
  17. *****************************************************************************
  18.  
  19.                                     by
  20.  
  21.      _______         _____  _____           __     _
  22.         /    /    / /    / /    /         \/_/    //_/_
  23.        /    /____/ /    / /____/   ___    /  ____// /        _      __
  24.       /    /    / /    / /   \           /  /|/ /  /  /   /_/ / /\_/_/
  25.      /    /    / /____/ /    /         _/__/_/ /__/|_/_/_/ /_/_/  /_
  26.                                               /                   
  27.  
  28.  
  29.  
  30. +-----------------------------------------------------------------------+
  31. |                                                                       |
  32. |       This release of COP is full FREEWARE...                         |
  33. |        ...but possibly the next release won't.                        |
  34. |                                                                       |
  35. |       You are free to copy this program, as long as:                  |
  36. |                                                                       |
  37. | - All files in this drawer are included.                              |
  38. | - ALL COMERCIAL USE IS STRICTLY PERMITED :                            |
  39. |       DON'T SELL WITHOUT PERMISSION OF THE AUTHOR !                   |
  40. |       DON'T INCLUDE IN COMERCIAL PRODUCTS OR ARCHIVES WITHOUT         |
  41. |       PERMISSIONS OF THE AUTHOR !                                     |
  42. |                                                                       |
  43. | This  program  is  provided "as is" without warranty of any kind.     |
  44. | The entire risk  of using it is to the user himself.  In no event I   |
  45. | will be liable  for  direct or indirect damage, loss of data or       |
  46. | criminal actions done due to the use of this program.                 |
  47. | If you do not agree with this, you must not use COP.                  |
  48. |                                                                       |
  49. +-----------------------------------------------------------------------+
  50.  
  51. _____________________________________________________________________________
  52.  
  53.                         The THOR-Software Licence
  54.  
  55.  
  56. This License applies to the computer programs known as "COP".
  57. The "Program", below, refers to such program.
  58.  
  59.  
  60. The programs and files in this distribution are freely distributable
  61. under the restrictions stated below, but are also Copyright (c)
  62. Thomas Richter.
  63.  
  64.  
  65. Distribution of the Program by a commercial organization without written
  66. permission from the author to any third party is prohibited if any payment
  67. is made in connection with such distribution, whether directly
  68. (as in payment for a copy of the Program) or indirectly (as in payment
  69. for some service related to the Program, or payment for some product
  70. or service that includes a copy of the Program "without charge";
  71. these are only examples, and not an exhaustive enumeration of prohibited
  72. activities). However, the following methods of distribution involving
  73. payment shall not in and of themselves be a violation of this restriction:
  74.  
  75.  
  76. (i) Posting the Program on a public access information storage and
  77. retrieval service for which a fee is received for retrieving information
  78. (such as an on-line service), provided that the fee is not
  79. content-dependent (i.e., the fee would be the same for retrieving the same
  80. volume of information consisting of random data).
  81.  
  82.  
  83.  
  84. (ii) Distributing the Program on a CD-ROM, provided that the files
  85. containing the Program are reproduced entirely and verbatim on such
  86. CD-ROM, and provided further that all information on such CD-ROM be
  87. redistributable for non-commercial purposes without charge.
  88.  
  89.  
  90.  
  91. Everything in this distribution must be kept together, in original
  92. and unmodified form.
  93.  
  94.  
  95.  
  96.  
  97. Limitations.
  98.  
  99. THE PROGRAM IS PROVIDED TO YOU "AS IS," WITHOUT WARRANTY. THERE IS NO
  100. WARRANTY FOR THE PROGRAM, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
  101. LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
  102. PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. THE ENTIRE
  103. RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD
  104. THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
  105. SERVICING, REPAIR OR CORRECTION.
  106.  
  107.  
  108.  
  109. IF YOU DO NOT ACCEPT THIS LICENCE, YOU MUST DELETE ALL FILES CONTAINED IN
  110. THIS ARCHIVE.
  111.  
  112. _____________________________________________________________________________
  113.  
  114.  
  115. I) Who should use COP ?
  116. ------------------------
  117.  
  118. - If you prefer working with the workbench or if you write programs in
  119.   pascal or (ARGH) basic, if you do not know how to use an assembler 
  120.   or are not familiar with bits and bytes, if you hate command interpreters 
  121.   and like funny gadgets and colorful menus, if you do not know the ASCII
  122.   character codes by heart :
  123.   
  124.   **======================================================**
  125.   || FORGET IT ! STOP NOW ! YOU WON'T BE HAPPY WITH COP ! ||
  126.   **======================================================**  
  127.  
  128.   To make it short: COP is intended to be used by REAL MEN ! (-;
  129.   (or WOMEN...)
  130.  
  131.         (Suggested: "Real men don't eat quiche" available on
  132.          in good networks...)
  133.   
  134. II) COP Features
  135. ----------------
  136.  
  137. Let's start with the bad ones:
  138.  
  139.         o)      it looks like an old-time debugger and feels like one, too
  140.         o)      there's no graphic user interface
  141.         o)      it's based on a command interpreter
  142.         o)      it's hard to learn
  143.         o)      it supports the MMU only partially, although this is getting
  144.         better. 
  145.                 (STOP HERE IF YOU DO NOT KNOW THE WORD "MMU" !)
  146.         o)      it should support almost all MC68xxx, although I
  147.                 haven't tested it
  148.         o)      some features are available only with additional
  149.                 hardware, e.g. a MC68010 or higher or an external
  150.                 terminal
  151.         o)      some commands are available only with the 2.0 roms or better
  152.         o)      the build-in terminal emulation isn't a fast one
  153.                 and uses non-standard command sequences
  154.         o)      it does not handle fragmented memory models in a
  155.                 good way, although it's getting better
  156.         o)      there is no trackdisk or harddisk support and there
  157.                 never will be
  158.         o)      it does not use task switching, but busy-waits
  159.                 (ARGHH!)
  160.                 
  161.         Some of the points WILL change in the future, I promise...
  162.  
  163.                 
  164. ...and now the good ones:
  165.         o)      it does support all members of the MC68000-family,
  166.                 at least it should...
  167.                 (MC680000 thru MC68060 including FPUs, and MMUs)
  168.         o)      it provides a break key that can be assigned to
  169.                 any (well, almost any) key on the keyboard
  170.                 and that breaks almost everthing everytime.
  171.         o)      it uses hardware resources as less as possible
  172.                 (e.g. no blitter acesses, no copper on request)
  173.         o)      COP can be used to remote-debug a system over a
  174.                 serial connection, leaving the display and keyboard
  175.                 hardware to other programs
  176.         o)      COP catches almost all system crashes ("GURUs")
  177.         o)      COP can be used to debug almost all code, even 
  178.                 interrupts are NO problem (is there a second
  179.                 debugger who can ?)
  180.         o)      it can be made resident to debug startup code
  181.         o)      it supports symbols in its own language and
  182.                 the symbols in object modules. Source level
  183.                 debugging, however, is not supported.
  184.         o)      it has a funny documentation in broken english
  185.                 (speak you english ?)
  186.         o)      this new release supports printers, connected either to
  187.                 the parallel port of your Amiga or to an external terminal,
  188.                 provided it supports the new COP 5 terminal standard
  189.                 (see terminal.doc in this archive for more information)
  190.         o)      it can be loaded to a memory position of your choice,
  191.                 although the arguments are a bit tricky 
  192.         o)      it's free, at least this release...
  193.         o)      it steps thru everything, even interrupt code and
  194.                 supervisor programs. YES, exec's task scheduler is
  195.                 NO PROBLEM AT ALL.
  196.         o)      it can be used as a shell calculator and
  197.                 as a label database.
  198.         o)      it supports symbols in standard overlay segments
  199.                 (which other debugger does ?)
  200.         o)      it supports debugging of CLI/WB progs in C and BCPL
  201.                 thru a simplified interface
  202.         o)      it works in really almost all situations, even
  203.                 with execbase broken...
  204.         o)      it supports the ShapeShifter 
  205.     o)    it is compatible to the Enforcer and SegTracker if used 
  206.         with a MC68020 or MC68030. It should be compatible to the
  207.         060 CyberGuard, although I don't see a chance to test it.
  208.  
  209.         
  210.         ...and if I say "almost all" I mean: more than any other
  211.         debugger can, but I am honest: There are situations where
  212.         COP CAN crash, but they are VERY rare.        
  213.  
  214.  
  215. III) Before you start, you need to provide...
  216. -----------------------------------------------------------------------------
  217. (or, in other words: NOT included in this package...)
  218.  
  219. - a lot of good will and your brain. COP is not easy to use...
  220. - this manual. Or to make it clear : READ THIS FIRST BEFORE YOU
  221.   START PLAYING WITH COP. There's a good chance you'll crash your
  222.   system.
  223. - an amiga computer with at least 512K. The more memory, the better.
  224. - If you want that magic break feature : A processor MC68010 or
  225.   higher would be fine. The break key does not work in all situations
  226.   with the standard MC68000.
  227. - If you need all commands (e.g. task capture and task freeze), you need
  228.   commodore's 2.0 roms or better.
  229. - If the program to debug requires the display subsystem, you need at least
  230.   an external serial tty terminal - this is the recommended way to debug
  231.   programs anyways.
  232. - If you want a fancier and better user interface, the external terminal
  233.   should understand type-3 terminal commands or better. Cause this is
  234.   a private format, there are not many... :-)
  235.   You may write your own terminal, or use the one supplied in this
  236.   package, see "terminal.doc".
  237. - If you need printer output, you need either a printer connected to the
  238.   parallel port of your Amiga or a printer connected to an external type-5
  239.   terminal or tty-terminal with printer-support. Any printer will do, COP
  240.   outputs only plain 7-bit ASCII.
  241.   Use the following configuration for your printer:
  242.         
  243.         o) data input from parallel interface
  244.         o) Auto-LF on, CR disabled (Auto-CR does not care)
  245.  
  246.   This is, however, the most common setting, so just try. The normal setting
  247.   will work in most situations without any change.
  248.  
  249.   If you MUST use the Amiga parallel port, use the command line switch
  250.   BUILDINPRT or the IOCD.Q command to disable external printing.
  251.  
  252.   The current version of COP is not able to debug a program via the parallel
  253.   port, though. It's exclusively reserved for printer output. If your program
  254.   requires the serial port, use the build-in terminal emulation.
  255.    
  256.  
  257. IV) Installing COP in your system
  258. -----------------------------------------------------------------------------
  259.  
  260. If you want to remote-debug your system: connect an external ASCII-terminal
  261. to the serial plug. Set the external terminal to the following parameters:
  262.  
  263. 9600 baud, 8 bit, 1 stop bit, no parity,
  264. no auto LF, no auto CR, non-erasing BS
  265.  
  266. If your external terminal supports printers, connect the printer to THIS
  267. terminal, not to the Amiga; if not, connect the printer to the parallel port
  268. of the Amiga and use the IOCD.Q command or the command line option 
  269. BUILDINPRT to tell COP to use the build-in printer-routines.
  270.  
  271. Copy the COP file to the C:-drawer of your system disk and, if you like to
  272. start COP from the workbench, copy the COP-icon anywhere you want (this is
  273. not required, only a nice feature ).
  274.  
  275. Copy the shell scripts "Debug","WBDebug" and "Calc" to the S: drawer,
  276. put this file in a save place wherever you want.
  277.  
  278. If you have commodore's V40 includes, copy the default data description
  279. table "Startup.DDT" to S:. You might want to modify it a bit, for example
  280. to correct the paths. This file currently expects the FD files in a
  281. device FD:, and the includes in INCLUDE:
  282.  
  283. If you want to run COP with the shapeshifter, copy the file "Mac.DDT" to
  284. S:, too.
  285.  
  286. Insert in your startup-sequence DIRECTLY FOLLOWING to the "SetPatch"-command
  287. (this is the second line for most systems) a command like the following:
  288.  
  289. COP keymap usa display resident ddt s:startup.ddt pre s:startup.pre
  290.  
  291. What does this mean:
  292. -The build-in terminal uses the keymap "usa". If you prefer a different
  293.  keymap, change "usa" to your favourite keymap - it must be present in
  294.  the DEVS:keymaps drawer of your system.
  295.  YOU CAN'T CHANGE THAT KEYMAP WITH A "SETMAP" or "SETKEYBOARD" or the 
  296.  PREFERENCE PROGRAM LATER !
  297.  COP OPERATES INDEPENDED FROM THE REMAINDING SYSTEM !
  298.  
  299. -The "display" command tells COP to use the build-in terminal instead of an
  300.  external one. You can debug programs with the amiga keyboard on the amiga
  301.  monitor. If you want to remote-debug, use "serial" instead. If you've got
  302.  an external tty, I would suggest to do so.
  303.  
  304. -The "resident" keyword tells COP to stay resident even after reset. If
  305.  you do not need this feature: drop this argument. Loading COP as resident
  306.  program has the advantage that you can debug boot code.
  307.  
  308. -The "ddt" keyword loads the standard labels placed in the ddt-file and
  309.  commodore's include files into COP. If you don't have them:
  310.  Never mind, just delete the the last two arguments.
  311.  
  312. -The "pre" keyword instructs COP to build a pre-compiled image of the "ddt"
  313. file on first startup - they are faster to load and speed up booting. If
  314. you're low on disk space, drop this argument.
  315.  
  316. More about the command argument line later... (chapter XI)
  317.  
  318. You should also start the workbench with the "-debug" option to have COP
  319. ready in all situations.
  320.  
  321. For professional debugging, you should also install the "Enforcer", the
  322. "SegTracker" and "MungWall", all by Michael Sinz. The "Enforcer" is
  323. supported by COP, bus errors are routed thru COP, though. The "SegTracker"
  324. is used by COP to find the segment/offset information of a crashed program.
  325.  
  326. Save the modified startup-sequence and reboot your system. Not much to
  327. see? O.K., that's normal. COP is NOT a standard debugger and is only
  328. INSTALLED by the command line, but not STARTED.
  329.  
  330.  
  331.  
  332. V) How to start COP
  333. -----------------------------------------------------------------------------
  334.  
  335. There are many ways to begin a debug session with COP:
  336. -Double-click the COP-Icon, if you copied it to your system.
  337. -Enter in the shell the command:
  338.         COP go
  339. -Select the "ROMWack" (or "Debug") menu of the workbench. COP replaces
  340.  the old wack completly, if there was one installed in your ROM.
  341.  (Commodore removed the old ROM-Wack from the 3.1 Roms and replaced it
  342.  with the "SAD" debugger.)
  343. -Press the BREAK-key. In the build-in terminal - if you gave the
  344.  "display" argument above - this is the decimal dot of the numeric key-
  345.  pad. On external terminals, it's ESC. However, you may change that key
  346.  with an additional argument, see chapter XI.
  347. -Use the shell-scripts "Debug" and "WBDebug" to load programs,
  348.  symbols and start a debug session like with every other debugger.
  349.  Up to eight arguments are allowed here as CLI arguments, resp. one as
  350.  an extended selection icon "shift-selected" with the main icon.
  351. -The least pleasant way : Your system crashes and COP is entered auto-
  352.  matically. There are NO GURUs any longer, COP catches them all !
  353.  (Well, almost all... A special DOS crash isn't routed thru the standard
  354.   system requesters and can't be captured by COP - sigh.)
  355.  If you supply a data description file (see below), you even get the
  356.  guru codes in a readable language. If you installed "SegTracker", too, 
  357.  COP will also present the name, the segment number and the segment offset
  358.  of the code that crashed.
  359.  
  360.  
  361. VI) How to leave COP
  362. -----------------------------------------------------------------------------
  363.  
  364. Enter GOPG in the COP command line and press RETURN. This should start
  365. the program interrupted.
  366. If you entered COP by a guru, you should first debug the system or will
  367. get just another guru in mostly all cases. There's no good strategy to
  368. accomplish this task....
  369.  
  370. You may also start the old ROMWack from inside COP with the EXIT command.
  371. Starting with ROM versions 3.0, the system debugger has changed to the
  372. (more primitive ? different ?) SAD.
  373. See the autodocs how to use this thing...
  374.  
  375.  
  376. VII) A word about COP-terminals
  377. -----------------------------------------------------------------------------
  378.  
  379. You will normally use COP's build-in terminal to debug code, but this
  380. terminal will, of course, need some of the hardware systems - the display
  381. system, i.e. the copper and the display DMA channels (not the blitter),
  382. and the keyboard, also the parallel port if you want to print.
  383. I tried to implement the terminal as best as possible, but this may
  384. conflict with other programs which want to use the same hardware resources.
  385. For this reason COP can also be used to debug a system via the serial port.
  386. All you need - for the minimum configuration - is an external
  387. ASCII-terminal,e.g. a second amiga with a standard terminal program will
  388. do it.
  389.  
  390. In this case, choose the following transfer options:
  391.  
  392. 9600 baud, 8 bit, 1 stop bit, no parity
  393.  
  394. no auto CR, no auto LF, nonerasing BS
  395.  
  396.  
  397. However, things are much easier if you use a terminal program providing
  398. COP's private terminal formats, here called "type-3" or better terminals.
  399. The terminal transfer standard is documented in the "Terminal.doc" file
  400. in this drawer, if you want to write your own program. There are only
  401. two ready made programs supporting this standard:
  402.  
  403. -THOR's "Terminal" program for all Amigas provides a type-4 terminal
  404.  emulation and is included in this drawer.
  405.  
  406.  Enable the "COP Terminal Emulation" from the menu Settings/Protocol.
  407.  You also need to supply a zero-modem connector, but you should know
  408.  how to build one...
  409.  
  410. -THOR's "DASB" terminal is a full type-5 terminal, working on
  411.  Atari 800XL computers with a serial interface box. It's included
  412.  in the package.
  413.  There are no settings to be made, DASB is written exclusively to communicate
  414.  with COP, but does not support a printer. This drawback arises from the
  415.  Atari XL hardware.
  416.  
  417. If you want to write a COP terminal on your own (e.g for a C64) you
  418. are welcome! Please send me an email in this case (address below).
  419.  
  420. The build-in terminal for non-remove debugging is of course a full
  421. type-5 terminal.
  422.  
  423.  
  424. Here a word about the keyboard processor of the build-in terminal:
  425.  
  426. I tried to write a keyboard parser not conflicting with other
  427. applications, i.e. it does not read the IRQ-registers of the CIA-
  428. chips and is able to work even with all interrupts disabled. However,
  429. there are "some" drawbacks of this magic stuff : Sometimes a key
  430. may "leak thru" the keyboard parser to other applications. Because
  431. the corresponding key-up event is missing, the keyboard device will
  432. then activate the auto-repeat loop and generate a stream of key-events.
  433. If this happens, leave COP and press the repeating key to stop it.
  434. Even worse, you won't recognise this bug if the affected key is a 
  435. control key like "Ctrl" or "Shift". If, after leaving COP, the key-
  436. board seems to be out of order, try pressing all this keys first to
  437. send their key-up events. I tried hard to fix this bug, but it looks
  438. like there's no better way to write a magic keyboard parser. If you
  439. want to use COP the professional way, you should work with an external
  440. terminal anyhow.
  441.  
  442.  
  443. VIII) How to enter commands, the line editor
  444. -----------------------------------------------------------------------------
  445.  
  446. Once you've entered COP, it presents you the prompt "COP >" and is ready
  447. to accept debug commands. Below the special keys used for line editing:
  448.  
  449. -The backspace key erases the last character entered and moves the
  450.  cursor backwards one line ("Delete" on some terminal). On some terminals,
  451.  Ctrl-H must be used as a substitution.
  452. -The delete key ("rub-out" on some terminals, Ctrl-Backspace with
  453.  DASB, not available on all terminals) deletes the character under the
  454.  cursor and scrolls the rest of the line backwards.
  455. -The return key starts the execution of the command ("Enter" on some
  456.  keyboards)
  457. -Ctrl-C aborts the execution of a command.
  458. -Ctrl-U re-displays the last command entered - there's only a two-line
  459.  history for commands, identical and empty lines will not enter the history.
  460. -The decimal dot on the numeric keypad (for the build-in terminal) or
  461.  the ESC-key on external terminals stops execution of code and enters
  462.  COP. However, this break feature wouldn't work if all interrupts are
  463.  disabled or, if you use the MC68000, the interrupt vectors are messed
  464.  up.
  465. -The cursor-forward-key moves the cursor forward one character (only
  466.  type-3 or higher terminals)
  467. -The cursor-backward-key moves the cursor backwards one character
  468.  (only type-3 and better)
  469. -The cursor-up key moves the cursor to the begin of the line (type-3
  470.  and better only)
  471.  As a replacement, Ctrl-A can be used for this task with TTY-terminals.
  472. -The cursor-down key moves the cursor to the end of the line (type-3
  473.  and better only)
  474.  A replacement for this key is Ctrl-E.
  475. -The Alt-Del key or Ctrl-Clear (with DASB) erases the whole line 
  476.  (type-3 only). This feature is available with Ctrl-B on all ASCII
  477.  terminals.
  478. -The TAB-key has a special meaning while entering data sequences and
  479.  is described below.
  480.  
  481.  
  482. IX) The COP commands and expressions
  483. -----------------------------------------------------------------------------
  484.  
  485. Each COP command looks like the following:
  486. - a four character command base name or a one character short-cut
  487. - optionally a dot and an extension that determinates a specific
  488.   sub-command of a larger command class
  489. - optional arguments each separated by space
  490.  
  491. ALL numbers accepted by COP MUST BE GIVEN IN HEXADECIMAL, all arguments
  492. may contain simple calculations with numerical operators. This will be
  493. called an EXPRESSION in the following, abbreviated with <expr>.
  494. Here all supported operators, listed by their priority from low to high
  495. (higher priorities are evaluated FIRST, please note that the priorities
  496.  differ from C - in special the shift operators):
  497.  
  498. $               trap operator
  499.                 a$b returns a if b is faulty, else a.
  500.                 NOTE: You cannot enclose $ in brackets, so expressions like
  501.                 (2$a+b)-3 are ILLEGAL !
  502.                 The reason for this is that COP can't continue to evaluate
  503.                 expressions with illegal syntax that will be trapped by $
  504.  
  505. ?,:             C-style condition operator:
  506.                 a?b:c returns b if a is not equal, else c
  507.  
  508. =,<>            equal, not equal: returns -1 if expressions to the
  509.                 right and left are equal (resp. not equal) or 0 otherwise.
  510.  
  511. >,>=,<,<=       signed greater, greater equal, smaller, smaller equal.
  512.                 Returns -1 if the condition is true.
  513.  
  514. |               binary or
  515. !               binary or
  516. ^               binary exclusive or (XOR)
  517. &               binary and
  518.  
  519. +,-             addition, subtraction
  520.  
  521. >>,<<           shift left or right. The left expression is shifted
  522.                 times the right expression
  523.                 
  524. *,/,%           multiplication, integer division, modulo
  525.  
  526. [..]            indirect operator: the value is the (long) content of
  527.                 the address specified by the expression between the
  528.                 braces, e.g. [4] is ExecBase.
  529. [..].l          same as [..]
  530. [..].w          indirect operator, returns the (sign extended) value of 
  531.                 the word at the address in braces
  532. [..].b          indirect operator, returns the (sign extended) value of
  533.                 the byte at the given address
  534. [..].o          the operator size is determinated by the instruction under
  535.                 the program counter.
  536.  
  537.                 NOTE: There is a slight difference if you read a word or a
  538.                 long from an even or odd address. Reading from an even
  539.                 address is only ONE memory access, but reading from an odd
  540.                 one are TWO or FOUR accesses. While not a problem to normal
  541.                 memory, this is a difference for hardware registers !
  542.  
  543. (..)            normal brackets: expression in the brackets is
  544.                 evaluated first
  545. -               unary minus, i.e. change of sign
  546. ~               unary not
  547. >               unary greater. This symbol contains the last address
  548.                 affected by COP and is called the "here" address pointer.
  549.                 It is affected by almost all commands and can be used
  550.                 for saying the new command should "work on the same
  551.                 address" as the last one.
  552. *               unary star. This symbol contains the program counter of
  553.                 the CPU and is equivalent to ".pc"
  554. .b,.w,.l,.o     Sign extension operators. Will interpret the preceding ex-
  555.                 pression as byte, word or long and sign-extend it.
  556.                 So $ff.b is -1, but $ff.w is $000000ff.
  557.                 The .o is again the sign-extension to the operator size
  558.                 of the instruction under the PC.
  559.                 There is a small, but noticable difference between
  560.                 [adr].b and ([adr]).b ! The first will read only ONE BYTE
  561.                 from memory, the later FOUR BYTES but throwing away three
  562.                 of them. This DOES make a difference if you read a
  563.                 hardware-register !
  564. .reg
  565.  or
  566. 'reg            The content of the CPU register .reg
  567. or              Valid registers are .d0 to .d7 for CPU data registers,
  568. 'reg'           .a0 to .a7 for address registers - note that the
  569.                 meaning of .a7 changes with the supervisor bit -
  570.                 .ssp and .usp for the two stack pointers 
  571.                 .pc (same as *) for program counter and .sr for the
  572.                 status register (there is NO .ccr, use proper masking). 
  573.                 Also, there are 16 COP internal counter registers
  574.                 .c0 to .cf. They are incremented each time they are
  575.                 read and can be used to implement counter breakpoints.
  576.                 For some commands .fp0 to .fp7 are valid and address
  577.                 the eight FPU registers, if a FPU is installed and
  578.                 used by the program debugged.
  579. .sr,.se,.so
  580. .dr,.de,.do
  581.                 These pseudo registers refer to the source and
  582.                 destination effective address of the command under
  583.                 the program counter.
  584.  
  585.                 .sr     is the contents of the source register under
  586.                         the PC, if available
  587.                 .se     is the effective address of the source operand,
  588.                         if available
  589.                 .so     is either the content of the source register or
  590.                         the CONTENT of the effective source address 
  591.                 .dr,.de,.do
  592.                         Same for destination effective address
  593.                 You may alter all these registers to effect the source 
  594.                 or destination operand of an instruction. Although not
  595.                 causing an error, changing .se and .de does nothing
  596.                 usefull.
  597.  
  598.                 Additional, all supervisor registers of the 680x0 series
  599.                 can be viewed, as long as your CPU does support them.
  600.                 In this release of COP, the MMU registers can be changed,
  601.                 but won't be written back...
  602.  
  603.                 A new special register .vvbr has been introduced 
  604.                 in release 1.32:
  605.  
  606.                 The .vbr register refers always to the VBR of the CPU,
  607.                 but since COP needs this register to operate properly,
  608.                 you should not change VBR this way. Whenever possible,
  609.                 check the value of VBR, and if it has changed, write
  610.                 the new value not to VBR. Use the VVBR instead, and 
  611.         restore VBR to the value of the label COPVBR. COP will 
  612.         then filter out its own exceptions and pass the unused 
  613.         back to the system thru VVBR as if the VBR has been set. 
  614.  
  615.                 The change of VBR will now be detected by COP if the
  616.                 interupt check (ENVI.I) is turned on, and the VBR register
  617.                 can be restored by SETR.V. The autovector table can be
  618.                 rebuild automatically using the IRQ-copyback mode, enabled
  619.                 with the ENVI.C command.
  620.                 
  621. \character      The ASCII-code of the character following
  622.  
  623. $               Unary $. The number following is given in hexadecimal
  624.                 AS THIS IS THE DEFAULT, THIS SYMBOL DOES NOTHING
  625.  
  626. #               The number following is given in decimal, i.e.
  627.                 #16=$10=10
  628.  
  629. %               The next number is a binary number, i.e.
  630.                 %1000=$4=#4=4
  631.  
  632. label           A known label will be evaluated. By default there are
  633.                 only four labels:
  634.  
  635.                 AbsExecBase     will contain the value 4, thus is
  636.                                 pointing to the pointer of the system
  637.                                 library.
  638.                 Version         Will contain the version of COP as
  639.                                 Version<<16+Revision
  640.                 COPVBR          will contain the interal vector base
  641.                                 setup by COP. VBR should contain this
  642.                                 value.
  643.                                 DO NOT ALTER COP's vector base, use
  644.                                 VVBR instead.
  645.                 COPVVBR         will contain the default position of
  646.                                 COPs virtual vector base.
  647.  
  648.         Some read-only expressions follow:
  649.         (Not starting with a dot -> Not a (pseudo) register -> not alter-
  650.          able !)
  651.  
  652. l0              Left button of mouse or fire on joysticks connected to
  653.                 port 0, returns 0 if released or -1 if pressed
  654. l1              same for port 1
  655.                 l0 and l1 might be quite useful as conditions in
  656.                 breakpoints
  657. r0,r1           Right button of mouse in port 0 or 1
  658. m0,m1           Middle button of mouse in port 0 or 1
  659.         WARNING ! Some hardware limitation cause that it takes max.
  660.         20 msec to read r0,r1,m0,m1. This COULD be made somewhat faster,
  661.         but nevertheless r0,r1,m0,m1 ARE NOT FAST ENOUGH TO BE USED IN
  662.         CONDITIONED BREAKPOINTS.
  663.         Reading them causes also the POTGO-hardware register to be trashed.
  664.         There is no way to save this register back, although
  665.         there is a POTGO-read register - this is a hardware limitation.
  666.  
  667. su,sr   Information about addressing mode under the PC. su and du are
  668. du,dr   TRUE if the source resp. destination operator of the actual
  669.         instruction is used, sr and dr return TRUE if it is a register
  670.         and FALSE if it is in memory.
  671.  
  672. op      Data type of the instruction under the PC, returns
  673.         0 for byte, 1 for word or 2 for long, so 1<<op is the
  674.         size in bytes of the operator.
  675.  
  676.  
  677. X) List of all commands
  678. -----------------------------------------------------------------------------
  679.  
  680. Long command    Short command   possible extensions     arguments
  681.  
  682. HELP            ?               none                    none
  683.                 prints all COP commands to the active terminal
  684.                 
  685. EXIT            X               none                    none
  686.                 If execbase valid, COP is terminated and the
  687.                 ROMWack is entered. Note that ROMWack works ONLY
  688.                 with an external terminal (if there is one... it
  689.                 has been removed from the 3.1 - V40 roms).
  690.                 
  691. REGS            R               G,E,C,A                 none
  692.                 Register dump commands
  693.                 
  694.                 Without extension:      Dumps all common CPU
  695.                 registers to the screen, dumps fpu registers
  696.                 if FPU is available and in use.
  697.                 
  698.                 REGS.G                  Dumps the guru number
  699.                 and the address that generated the crash. If COP
  700.                 was entered the normal way, the guru number will 
  701.                 be zero.
  702.                 If a data description table was loaded and 
  703.                 gurus were defined, the full name of the
  704.                 guru will be printed.
  705.         If the "SegTracker" is available, COP will print the
  706.         name of the crashing program and the segment/offset
  707.         location of the PC within this program.
  708.                 
  709.                 REGS.E                  Dumps special purpose 
  710.                 registers of newer members of the MC68000 family as
  711.                 cache-control and MMU-registers. FPU registers will
  712.                 be included if the FPU is available and in use.
  713.                 
  714.                 REGS.C                  Dumps the COP-internal
  715.                 counter registers (without being incremented)
  716.  
  717.                 REGS.A                  Dumps effective address
  718.                 of instruction under PC and memory contents, if
  719.                 available.
  720.  
  721. DUMP            D               B,W,L,C,S,G,H,I,Q,Z,D,X,P,O     <expr>
  722.                 Dump memory. If <expr> is omitted, then the "here"
  723.                 pointer is used as address, otherwise change "here"
  724.                 to the given <expr>.
  725.                 
  726.                 without extension       Dump memory in the last mode
  727.                 used
  728.                 
  729.                 DUMP.B                  dump memory as bytes
  730.                 DUMP.W                  dump memory as words
  731.                 DUMP.L                  dump memory as longs
  732.                 DUMP.G                  dump a sequence of hardware
  733.                                         bytes. The memory manager gets
  734.                                         overridden by mode.
  735.                                         ! This might be somewhat danger-
  736.                                           ous, if you read some toggle
  737.                                           registers !
  738.                 DUMP.H                  dump hardware word
  739.                 DUMP.I                  dump hardware long
  740.                 DUMP.Q                  dump as quad word (=8 bytes)
  741.                 DUMP.Z                  dump as single precision
  742.                                         IEEE-numbers. 
  743.                 DUMP.D                  dump as IEEE double precision
  744.                 DUMP.X                  dump as MC68881 extended precision
  745.                 DUMP.P                  dump as MC68881 packed decimal
  746.                 DUMP.O                  dump memory as size of instruction
  747.                                         under PC
  748.                 
  749.                 DUMP.C                  Dump memory as characters.
  750.                 All unprintable characters are transcribed with a
  751.                 backslash and the numerical hex value followed.
  752.                 
  753.                 DUMP.S                  Dump memory as strings.
  754.                 All unprintable characters are displayed as a dot.
  755.                 
  756.  
  757.                 After dumping a few lines, COP stops and asks you
  758.                 to press RETURN or SPACE to continue. You may press
  759.                 here Q or Ctrl-C to abort dumping.
  760.                                 
  761.                                 
  762. EDIT            E               B,W,L,C,G,H,I,Z,D,X,P,O         <expr>
  763.                 Edit memory or hardware. If <expr> is omitted, then
  764.                 edit the address given by the "here" pointer. Else
  765.                 use the <expr> as address and save it to "here".
  766.                 
  767.                 In the edit mode, COP presents you the old contents
  768.                 of the address given. This value is now ready to be
  769.                 changed with the edit keys (see the last chapter).
  770.                 Press RETURN to accept the changes made or press TAB
  771.                 to undo the changes. Press Ctrl-C to abort editing.
  772.  
  773.         BE WARNED! The string "d0" means "contents of register
  774.         d0" not the value "d0", like everywhere in COP. To enter
  775.         the value "d0", you've to type "$d0". Quite for the same
  776.         reason we've "cf" as "contents of counter #f, increment it
  777.         when read" and not "the number $cf". The later is "$cf".
  778.         
  779.         
  780.                 Without extension       use the last edit mode used     
  781.                 EDIT.B                  edit memory as bytes
  782.                 EDIT.W                  edit memory as words
  783.                 EDIT.L                  edit memory as longwords
  784.                 EDIT.Z                  edit as IEEE single precision
  785.                 EDIT.D                  edit as IEEE double precision
  786.                 EDIT.X                  edit as MC68881 extended precision
  787.                 EDIT.P                  edit as MC68881 packed decimal  
  788.                 EDIT.O                  edit memory as size of instruction
  789.                                         under PC
  790.                 
  791.                 EDIT.G                  set hardware as bytes
  792.                 EDIT.H                  set hardware as words
  793.                 EDIT.I                  set hardware as longwords
  794.                 
  795.                 The difference between the first group and the second
  796.                 is that the hardware edit commands do NOT read the
  797.                 hardware registers prior to the user change. Instead,
  798.                 a zero gets displayed. Node that this is necessary because 
  799.         some hardware registers are WRITE ONLY.
  800.                 In all the modes presented above, you may enter a full
  801.                 <expr> as well as a numeric constant as a new value, 
  802.                 although the length of the <expr> is limited.
  803.  
  804.                 EDIT.C                  edit memory as characters
  805.                 
  806.                 Here, you may edit the memory as ASCII-characters. You
  807.                 may use the backslash followed by a hex number to enter
  808.                 values not available on the keyboard.
  809.                 
  810. EVAL            =               none                    <expr>
  811.                 Evaluate the expression given and print the result.
  812.                 The result might be a simple number, but very complex
  813.                 expressions including labels are valid, too.
  814.                 
  815. UNAS            =               none                    <expr>
  816.                 Unassemble code starting with address <expr> and set
  817.                 "here" to this value. If <expr> is missing, disassemble
  818.                 at address contained in "here".
  819.                 
  820.                 The disassembler knows the obcodes of all members of the
  821.                 Motorola MC68000 family, but the non-MC68000 codes are
  822.                 marked. FPU obcodes are disassembled as well, and numerical
  823.         constants will be disassembled as decimal floating point
  824.         expressions.
  825.         Illegal opcodes or opcodes that can't be used on the Amiga
  826.         (like the TAS instruction) get marked as well.
  827.  
  828.                 Depending on your enviroment settings - see the ENVI comand
  829.                 - some of the addresses will be expanded to known labels.
  830.                 
  831.                 NOTE: I was unable to test the correct disassembly of the
  832.                 MMU and MC68040 codes, although it SHOULD work.
  833.                 
  834.                 If the address being disassembled is the PC, this line
  835.                 is marked with an asterisk *; if it's the "here" pointer,
  836.                 the line is marked with ">".
  837.                 If the address is affected by a break point, a "B" is 
  838.                 inserted.
  839.                 
  840. NODE            N               L                        <expr>
  841.                 Display the node at address <expr>. If <expr> is not
  842.                 present, use the "here" pointer, otherwise set "here" 
  843.                 to the address of the node.
  844.                 
  845.         No extensions        The name of the node and its type 
  846.         is displayed.
  847.  
  848.         L            Dump the node as before, but print
  849.         additional information COP can gain about that node. COP
  850.         knowns most node types defined in the Os and will print
  851.         additional information contained in the data attached to 
  852.         the node.
  853.  
  854.                 
  855.                 
  856. LIST            L               M,R,D,I,L,P,T,S,Q,B     <expr>
  857.                 Dump contents of exec-type lists.
  858.                 
  859.                 No extension            Dump the list at given address,
  860.                 set "here" to this address. If <expr> is omitted, use
  861.                 the "here" pointer.
  862.                 
  863.                 B                       Same as without extension, but
  864.                 the list is traversed from the last element to the
  865.                 first. This is sometimes useful if parts of the list
  866.                 are broken.
  867.                 
  868.                 M                       Print exec memory list
  869.                 R                       Print resources
  870.                 D                       Print loaded devices
  871.                 I                       Print software interrupts
  872.                 L                       Print libraries
  873.                 P                       Print ports
  874.                 T                       Print tasks
  875.                 S                       Print semaphores
  876.                 Q                       Print hardware interrupts
  877.                 
  878.                 
  879. FILL            F               M                       <expr>,<expr>
  880.                 Fill memory with byte sequence starting with first <expr>
  881.                 and to last <expr>, exclusive. If one of the <expr> is
  882.                 missing, then "here" is used. Then "here" is set to the
  883.                 first <expr>.
  884.                 
  885.                 without extension       Enter the byte pattern the memory
  886.                 should be filled with. Press TAB to complete one byte, press
  887.                 RETURN to complete the whole sequence and to start filling.
  888.  
  889.         Again, "d0" is the register, not the value. The number is
  890.         entered as "$d0".
  891.                 
  892.                 M                       Fill memory thru mask (stencil
  893.                 fill operation).        Enter first the byte sequence
  894.                 as described above, then enter the mask bytes. Each
  895.                 bit set to zero in the mask will protect the corresponding
  896.                 memory bit from a change.
  897.                 
  898.                 You may press Ctrl-C any time to abort the operation.
  899.                 
  900.  
  901. FIND            I               M,I                     <expr>
  902.                 Find byte pattern, masked, or find instruction starting
  903.                 with given address or "here". Set "here" to given
  904.                 expression afterwards.
  905.                 
  906.         The found values are either dumped in the last mode used
  907.         by the "dump" command, or disassembled with the "I" mode.
  908.  
  909.         Furthermore, if the display is split, COP stops the search
  910.         as soon as something is found and updates the top window
  911.         of its screen, with the "here" pointer set to the found
  912.         address. This is most useful for displaying a large area
  913.         around the found bytes, and can be optained by displaying
  914.         the output of a command like "d >-8" in the top window.
  915.         To remind you, ">" is the name for the "here" pointer.
  916.         More about display splitting is found below.
  917.  
  918.  
  919.                 without extension       Enter the byte pattern byte for
  920.                 byte pressing TAB after each byte and RETURN to complete
  921.                 the sequence you are searching for.
  922.  
  923.         See above for caveats! "d0" is a register, not a number!    
  924.                 
  925.                 M                       Find masked. Enter the byte pattern 
  926.         you are searching for and then the mask.
  927.                 Each bit left to zero in the mask will disable the
  928.                 comparision of the corresponding bit in the sequence, i.e.
  929.                 the corresponding bit in the byte pattern will be ignored
  930.                 and will match always.
  931.                 
  932.                 I                       Find instruction. Enter the
  933.                 instruction or part of instruction you want to search
  934.                 for and press RETURN to start the search. Case and extra
  935.                 spaces will be ignored.
  936.                 You should note that all known labels will be expanded
  937.                 by COP unless the enviroment is changed. So you should
  938.                 enter the label names instead of the address if you look
  939.                 for an access to a defined label !
  940.                 
  941.                 You may press Ctrl-C to abort the searching anytime.
  942.                 
  943.                 
  944.                 
  945. MOVE            M               none                    <expr>,<expr>,<expr>
  946.                 Move source memory block starting with first <expr> and 
  947.                 ending with second argument exclusive to destination
  948.                 given by last <expr>. If any of the <expr> is missing,
  949.                 "here" will be used. Afterwards, "here" is set to the
  950.                 start of the source memory block.
  951.                 Overlapping memory blocks will be handled correctly.
  952.  
  953.         You may press Ctrl-C to abort the operation.                
  954.                 
  955.                 
  956. TASK            !               F,W,S                   <expr>
  957.                 Task commands: display,freeze and warm tasks, send
  958.                 signals.
  959.                 
  960.                 without extension       Display information about the task
  961.                 if <expr> is omitted and execbase is valid, the active task
  962.                 will be displayed.
  963.                 
  964.                 F                       Freeze the given task (exclude from
  965.                 execution). If the task to be freezed is the active one,
  966.                 this command will work with Kickstart releases 2.0 or higher
  967.                 only.
  968.                 
  969.                 W                       Warm the given task (include a
  970.                 previously freezed task in task switching).
  971.                 
  972.                 S                       Send a signal to a task. You need to
  973.                 supply two arguments, FIRST the signal to be send and
  974.                 SECONDLY the task affected.
  975.                 
  976.                 
  977.                 
  978. SETR            S               F,E,D,V                  <expr>,reg
  979.                 Set <expr> to given CPU register.
  980.                 
  981.                 without extension       Move given expression to a
  982.                 destination register. Valid destination registers are
  983.                 .d0 to .d7, .a0 and .a7, .ssp,.usp,.pc and .sr, and
  984.                 the COP internal counter registers .c0 to .cf.
  985.                 Note that the meaning of .a7 depends on the supervisor
  986.                 bit in the status register and is identically with
  987.                 .usp or .ssp.
  988.                 Starting with release 1.31, all other CPU supervisor
  989.                 registers can be set as well, but the MMU-registers
  990.                 are not written back (SIGH). 
  991.                 If you need to change the vector basis register VBR
  992.                 of 68010 or above, you should change COP's virtual
  993.                 VBR called .vvbr instead to keep COP's exception
  994.                 vectors untouched.
  995.                 
  996.                 F                       Load FPU register, if FPU is
  997.                 available and in use by the program being debugged.
  998.                 In this case, <expr> is a floating point number in the
  999.                 usual notation (e.g. 3.1415 or 3E8 ...).
  1000.                 
  1001.                 
  1002.                 E                       With MC68020 or higher: enable
  1003.                 all caches. No arguments need to be supplied.
  1004.  
  1005.         Warning: Don't touch the cache for 68040 or 68060 systems,
  1006.         at least don't try to activate it by force if it is not
  1007.         activated. DMA related device I/O might break by enabling
  1008.         the cache in an I/O operation.
  1009.                 
  1010.                 D                       With MC68020 or higher: disable
  1011.                 all caches. No arguments taken.
  1012.  
  1013.         Cache finetuning, if required, should be done by modifying
  1014.         the cacr register directly.
  1015.                 
  1016.                 V                       With MC68020 or higher: Set the
  1017.                 virtual vector base address to VBR, setup VBR to point
  1018.                 to COPs interrupt vector table. This command should be
  1019.                 given (if it isn't already too late...) if a program
  1020.                 changes the VBR to give back control to COP.
  1021.  
  1022. STEP            Z               none                    <expr>
  1023.                 Enter trace mode, start tracing at given address or use
  1024.                 PC if <expr> is omitted.
  1025.                 How the trace mode works depends highly on the terminal
  1026.                 type used to debug. 
  1027.                 On pure ASCII-terminals, the command at the PC is being
  1028.                 disassembled and dumped to the terminal; on type-3 or
  1029.                 type-4 terminals however, an entire page of instructions
  1030.                 is printed. The command at the PC is marked with an
  1031.                 asterisk and is highlighted on type-4 terminals. Lines
  1032.         with breakpoints are marked with a "B". The current
  1033.         position of the "here" pointer is marked by ">".
  1034.                 
  1035.                 With both types of terminals, COP is now ready to accept
  1036.                 one of the following step commands by pressing the
  1037.                 desired key:
  1038.                 
  1039.                 Q or Ctrl-C     Abort trace mode and return to normal
  1040.                 command line.
  1041.                 
  1042.                 S or SPACE      Step the command at the PC. If this is a
  1043.                 subroutine call, the subroutine itself will be entered in
  1044.                 trace mode and can be stepped thru.
  1045.                 
  1046.                 T               Trace the next command. The only difference
  1047.                 between S and T is how subroutines are handled. With the T
  1048.                 command, the subroutine is called as it and will be exe-
  1049.                 cuted as whole without beeing stepped thru.
  1050.                 
  1051.                 N               Next command. Almost like T, but works
  1052.                 different with branches. The next command starts the program
  1053.                 at the current PC and COP regains control only if the
  1054.                 statement IMMEDIATLY FOLLOWING the traced statement gets
  1055.                 executed. This will be the same as T for all commands but
  1056.                 branch and jump commands. You may use N to step thru a
  1057.                 loop as whole if you press N for the end condition branch
  1058.                 of a loop. 
  1059.                 WARNING !!      If this loop has a second exit point, the
  1060.                 command after the end condition may never be executed and
  1061.                 COP is never entered again.
  1062.                 WARNING !!      The next command works ONLY IF THE STATE-
  1063.                 MENT IS IN RAM CODE and DOES CHANGE parts of the code by
  1064.                 setting an internal breakpoint. See BRKP-section for a list
  1065.                 of caveats of breakpoints.
  1066.                 
  1067.                 M               Trace until. Almost like T, but the mecanism
  1068.                 how COP regains control after a subroutine call is different.
  1069.                 The 'T' trace changes the return address to COP's entrypoint.
  1070.                 Sometimes this is unwise cause this address might get used
  1071.                 by the called procedure. If you use 'M' instead, the called
  1072.                 procedure will be stepped thru in 'S'-like behaivor using
  1073.                 the CPU's trace-bit. Of course, 'M' will be much slower
  1074.                 and should not be used if some piece of hardware is accessed
  1075.                 or timing is vital.
  1076.  
  1077.                 O               Skip command. Do not execute the command
  1078.                 at the PC and switch PC to the command following.
  1079.                 WARNING !!      Make sure that the command skipped does
  1080.                 not anything important and watch out for side effects,
  1081.                 e.g. skipping a "push long to stack" could be dangerous
  1082.                 if the corresponding stack cleanup command is not skipped
  1083.                 too.
  1084.                 
  1085.                 G               Start program at current PC, activate all
  1086.                 breakpoints.
  1087.                 
  1088.                 R               Dump registers to terminal.
  1089.                 
  1090.                 B               Set breakpoint at current PC address.
  1091.                 Note that commands with a breakpoint on it are marked
  1092.                 with a "B". Further, a breakpoint under the current PC
  1093.                 is "delayed", i.e. it isn't activated unil the the PC
  1094.         leaves its address.
  1095.                 The breakpoint set by "B" will be an unconditioned type
  1096.                 (see BRKP for more about breakpoints)
  1097.                 
  1098.                 A               Alter display. If working with the build-
  1099.                 in terminal, the COP display is hidden and the display of
  1100.                 the program is brought to the monitor. The "A" command
  1101.                 is like the "IOCD" command without extension, read this
  1102.                 chapter to find more about COP displays.
  1103.                 If you use the remote-debug feature, this command does
  1104.                 nothing.
  1105.                 
  1106.                 F               Set COP to foreground mode, i.e. COP does
  1107.                 not hide its display if the program being debugged re-
  1108.                 gains control. Press F again to activate the normal display
  1109.                 swapping. This command works mostly like the "IOCD.F" 
  1110.                 command, read the "IOCD" section for more information about
  1111.                 COP foreground and background mode.
  1112.                 
  1113.                 
  1114.                 Some caveats about tracing are:
  1115.                 -------------------------------
  1116.  
  1117.                 - COP does not depend on exec-like task switching, it
  1118.                 is NO PROBLEM to step thru exec's task switching procedure.
  1119.                 (This is actually not a caveat !)
  1120.                 On the one hand a nice feature, on the other hand a problem
  1121.                 if you want to debug a SPECIFIC task. Therefore, you should
  1122.                 trace (T command) over a Wait() or Signal() call of exec.
  1123.                 The NEXT (N command) will work too, but if the same code
  1124.                 is used by two tasks - think about the trackdisk code - you
  1125.                 may catch a different task afterwards. Same goes for the
  1126.                 'M' command, but let me remind you again that 'M' is SLOW !
  1127.  
  1128.                 -The second problem with task switching is, that if an exec
  1129.                 task looses control by stepping thru the task-switch 
  1130.                 routine, exec will save its status register with the trace
  1131.                 bit on. If the task is reactivated later, COP will regain
  1132.                 control over this task. While not a problem to COP, this
  1133.                 behaviour might somewhat confusing to you, if COP is
  1134.                 suddenly (probably after hours...) reentered - and not by a
  1135.                 guru.
  1136.                 -There's one extra problem with the trace (T) command :
  1137.                 This commands works by altering the return-address of a
  1138.                 subroutine call. Some programs use this return address to
  1139.                 fetch data following the subroutine call and adjust the
  1140.                 return address afterwards. If changed by COP, this
  1141.                 will cause a nice crash of your system. Thus, if you find
  1142.                 funny code behind a subroutine call, e.g. many illegals
  1143.                 or the like, STEP thru this procedure or use 'M'.
  1144.                 -Since stepping thru a procedure is much slower than
  1145.                 executing one, there may arise timing problems in some
  1146.                 critical IO-procedures. You should trace this kind of
  1147.                 subroutines to avoid such problems. This goes again for
  1148.                 the 'M' command, since this is nothing but "automated
  1149.                 stepping".
  1150.                 
  1151.                 (That looks like a lot of "features" of this debugger,
  1152.                 but they are typically for this class of programs.
  1153.                 However, most authors handle them as "undocumented
  1154.                 features", but I don't. :-) )           
  1155.                 
  1156.                 
  1157. BRKP            B               A,D,C,R,S,O             <expr>
  1158.                 Breakpoint commands. The address affected is given by
  1159.                 <expr> or by "here", if omitted. 
  1160.                 
  1161.                 without extension       If no breakpoint is set at
  1162.                 supplied address, a unconditioned breakpoint is set there.
  1163.                 If a breakpoint is set at this address, the breakpoint
  1164.                 is removed. Note that COP supports up to 32 breakpoints.
  1165.                 It is further important to note that after setting a 
  1166.                 breakpoint, it is not yet active, i.e. causes a COP inter-
  1167.                 cept. The breakpoints are activated each time a program is
  1168.                 restarted, e.g. with the GOPG command; they will get de-
  1169.                 activated each time COP is entered again to prevent an 
  1170.                 endless loop if a breakpoint is set in interrupt code.
  1171.                 However, the breakpoints can be activated by hand, although
  1172.                 this is not recommended.
  1173.                 
  1174.                 
  1175.                 BRKP.A                  Remove all breakpoints (no
  1176.                 arguments accepted)
  1177.                 
  1178.                 BRKP.D                  Display all set breakpoints
  1179.                 with conditions, no arguments accecpted.
  1180.                 
  1181.                 BRKP.C                  Clear breakpoint at given address
  1182.                 
  1183.                 BRKP.R                  Reset all COP counter registers
  1184.                 .c0 to .cf to zero.
  1185.                 
  1186.                 
  1187.                 BRKP.S                  Set breakpoint at given address
  1188.                 and condition, if any. If the condition is omitted, then
  1189.                 an unconditioned breakpoint is set. If a counter
  1190.                 register is included in the condition, it is reset to zero.
  1191.  
  1192.                 With a conditioned breakpoint COP is entered on a BREAK
  1193.                 hit only if the condition is true, i.e. not zero.
  1194.                 You should remember that a counter register is incremented
  1195.                 each time it is accessed, so you may use this feature
  1196.                 to implement counter breakpoints, e.g. ".c0>=5" will stop
  1197.                 execution after the fifth BREAK-hit.
  1198.                 
  1199.                 BRKP.O                  Activate all breakpoints (no 
  1200.                 arguments accepted). Note that this operation might
  1201.                 somewhat dangerous if a breakpoint in an interrupt
  1202.                 procedure gets activated. In this case, COP will display
  1203.                 its "COP crashed" or "Other Task Crashed" message... 
  1204.         have fun!
  1205.                 
  1206.                 Some extra features of breakpoints are the "delay" of
  1207.                 breakpoints and the automatic removal of them:
  1208.                 -If you set a breakpoint under the current PC, this
  1209.                 breakpoint won't get active if you start the program,
  1210.                 but gets activated AFTER the PC leaves the statement. 
  1211.                 This is useful cause you usually never want to break 
  1212.                 on a command you already broke on. You will enter COP 
  1213.                 when the program reaches the breakpoint again.
  1214.                 -If an already activated breakpoint is getting written
  1215.                 over by a program (e.g. the memory is freed and another
  1216.                 task re-uses this area), this breakpoint is REMOVED
  1217.                 automatically at the time COP is entered again.
  1218.                 This is done to prevent programs from crashing by dangling 
  1219.                 breakpoints of a program that is no longer in memory.
  1220.         
  1221.                 WARNING !       The breakpoint IS NOT removed, if it
  1222.                 is not active at the time it is written over.
  1223.                 This MAY cause problems if the program changes and the
  1224.                 breakpoint is re-activated later, e.g. the breakpoint
  1225.                 may change the address part of a jump-instructions,
  1226.                 possible resulting in a nice fireworks display...
  1227.                 
  1228.                 WARNING !       Active breakpoints change the code
  1229.                 at their address to the ILLEGAL obcode. For this,
  1230.                 BREAKPOINTS DO NOT WORK IN ROM.
  1231.         (Trick for MMU owners if you need to do this: Enable
  1232.          the MMU bypass and set the breakpoint in the mirrored
  1233.          RAM.)
  1234.                 Second, if the code is changed, possibly some check-
  1235.                 sums (for libraries or resident code) will change and
  1236.                 things won't work later. For this reason, use the
  1237.                 T S or M STEP subcommands to step thru this part of code,
  1238.                 they DO NOT ALTER the code and work in RAM as well as in
  1239.                 ROM.
  1240.                 
  1241.                 
  1242.                 
  1243.         
  1244. GOPG            G               U,T                     <expr>,<expr>
  1245.  
  1246.                 without extension       Start interrupted program at given 
  1247.                 address or at PC if <expr> is omitted. If any breakpoints
  1248.                 are set, activate them first. A second argument is not
  1249.                 accepted.
  1250.  
  1251.                 U                       Go until
  1252.                 Set a breakpoint at the first given <expr> and start
  1253.                 the program at the address given by the second argument,
  1254.                 or the PC if omitted. Read the breakpoint section about
  1255.                 caveats of breakpoints !
  1256.  
  1257.                 T                       Trace until
  1258.                 Step thru the program until the PC reaches the first
  1259.                 expression. The second expression will be loaded into the
  1260.                 PC if given. This will be very slow, like the 'M' sub-
  1261.         command of STEP.
  1262.                 
  1263.                 
  1264. CAPT            C               S,N,C                     [<expr>,]<expr>
  1265.                 Capture a task, i.e. start debugging it.
  1266.                 
  1267.                 no extension            Capture the task with task
  1268.                 structure at the supplied address. If <expr> is omitted,
  1269.                 "here" is used. Afterwards, "here" is set to the
  1270.                 affected task address. If the task uses the FPU,
  1271.                 this capture command will work only with Kickstart
  1272.                 release 2.0 or later, due to the private exec stack frame
  1273.         which has been changed in Rev. 2.0.
  1274.                 
  1275.                 S                       Like capture without arguments,
  1276.                 but the first argument you supply is a signal mask which
  1277.                 is send to the task before trying to capture it. The 
  1278.                 second argument is the address of the task structure.
  1279.                 
  1280.                 N                       Capture the next task getting
  1281.                 started. No argument must be supplied with this sub-
  1282.                 command. Note that you might find the new task in the
  1283.                 private dos startup code you have to step thru first.
  1284.                 
  1285.                 C                       Capture next command getting
  1286.                 started from the shell. This command works only with
  1287.                 Kickstart 2.0 or later.
  1288.                 
  1289.  
  1290.  
  1291. IOCD            O               S,C,B,F,R,Z,L,M,V,P,Q,I,E      <expr>
  1292.  
  1293.                 Input / output commands, terminal commands (rather a
  1294.                 lot of them...)
  1295.                 
  1296.                 without extension       (does not take any arguments)
  1297.                 If you work with COP's build in terminal, toggle between
  1298.                 COP's display and the display of the program being de-
  1299.                 bugged. This is not done by intuition or the like, but
  1300.                 by PURE HARDWARE. For this reason, COP needs to know the
  1301.                 address of the copper list of this program, and with the
  1302.                 ECS-chipset, the BEAMCON0 value. While both is available
  1303.                 in the graphics library, you must set them by hand if
  1304.                 execbase is destroyed or the program debugged uses the
  1305.                 hardware register to setup its display.
  1306.                 While COP can almost always establish its screen, it is
  1307.                 sometimes impossible to restore the programs screen
  1308.                 completely - some hardware registers are write-only.
  1309.                 In this case, you MUST use remote-debugging.
  1310.                 If foreground or background mode has been active (see
  1311.                 below) they are deactivated by the IOCD command.
  1312.                 
  1313.                 IOCD.S                  (does not take arguments)
  1314.                 Toggle between build-in terminal and remote-debugging.
  1315.                 If you switch to an external terminal, you should make clear
  1316.                 that this terminal is online, or you might fail to enter
  1317.                 a second IOCD.S to switch back to the build-in one.
  1318.                 Everytime the terminal is changed, COP retries to get the
  1319.                 terminals type to setup type-3 or type-4 communication.
  1320.                 For more information about COP's internal terminal format
  1321.                 and auto-identification read the "Terminal.doc" file
  1322.                 included in this drawer.
  1323.                 
  1324.                 IOCD.C                  <expr>
  1325.                 Set the address of the copper list of the user-program to
  1326.                 re-establish the user's display. If <expr> is omitted,
  1327.                 the "here" pointer is used. You won't need this command if
  1328.                 you debug programs that use the "standard" graphic system,
  1329.                 since COP extracs the address out of gfxbase itself. But
  1330.                 if the user's program uses the hardware registers directly,
  1331.                 COP does not recognize this change of the copper list.
  1332.                 In this case, search with the FIND command for a write to
  1333.                 the hardware register and set this value as user-copperlist
  1334.                 with IOCD.C <expr>. It is seldom easy to find it, so
  1335.                 good luck...
  1336.                 If you have problems with programs using custom copper
  1337.                 lists, you should try the interrupt driven display using
  1338.                 the IOCD.I command (then you get trouble with
  1339.                 interrupts instead of copper lists... ;-)               
  1340.                 
  1341.                 IOCD.I                  (does not take arguments)
  1342.                 Toggle between copper list driven display and interrupt
  1343.                 driven display.
  1344.                 The standard way for COP to display information is to
  1345.                 setup a copper list and to load it into the hardware. Later
  1346.                 on, if the program is started again, the system copperlist,
  1347.                 which can be set by IOCD.C, will be loaded back.
  1348.                 This will, of course, cause trouble if the program changes
  1349.                 the copper list on its own.
  1350.                 The best solution is of course to change to remote de-
  1351.                 bugging using IOCD.S, but startig with release 1.30 COP
  1352.                 can be forced to use a different method of display.
  1353.                 The interrupt driven display does NOT use copper-lists,
  1354.                 but uses the vertical blank interrupt to write the
  1355.                 hardware registers. COP tries its best to keep the program
  1356.                 setting valid, e.g. if the program disables the interrupt,
  1357.                 COP excludes the user VBI from running. However, this is
  1358.                 really a bit tricky and may fail. A second drawback is
  1359.                 that the display produced by interrupts is much simpler
  1360.                 and does, for example, not support line highlighting.
  1361.  
  1362.                 IOCD.B                  (does not take arguments)
  1363.                 Set COP to background mode, i.e. COP's display is never
  1364.                 setup and the users display is kept active. However,
  1365.                 you are still ready to enter commands. This mode is
  1366.                 somewhat impracticable since you don't see what you type.
  1367.                 
  1368.                 IOCD.F                  (does not take arguments)
  1369.                 Set COP to background mode, i.e. COP's display is not
  1370.                 removed from the monitor (only execption: a GOPG command
  1371.                 or the G subcommand of the STEP-command). Use this command
  1372.                 to avoid the flicker that occurs if the screen changes.
  1373.                 There's one caveat with this command and the STEP-command:
  1374.                 Since the displays are not swapped, the user program may 
  1375.                 destroy COP's display by writing to a hardware register or
  1376.                 may get unexepected results reading a register while COP's
  1377.                 display is active.
  1378.                 So watch out and disable the foreground mode if you want
  1379.                 to step this type of commands.
  1380.                 
  1381.                 IOCD.R                  (does not take arguments)
  1382.                 Disables foreground and background mode and restores
  1383.                 normal display swapping.
  1384.                 
  1385.                 IOCD.Z                  <expr>
  1386.                 Set the screen size of the build-in terminal to <expr>
  1387.                 lines. If <expr> is omitted, the actual display size
  1388.                 will be used.
  1389.                 The standard screen size is 28 (=$1C, remember COP always
  1390.                 thinks in HEXADECIMAL !) lines, but this might be too
  1391.                 large for some monitors. To prevent you grabbling at your
  1392.                 monitor, this command can be used to setup a fitting
  1393.                 display size. However, the screensize is limited to 8 to
  1394.                 28 lines and will always be centered.
  1395.                 
  1396.                 IOCD.L                  <expr>
  1397.                 Setup the number of lines until COP presents its ***more***
  1398.                 message to ask for continue. This number is more an 
  1399.                 approximate value as some outputs can't be broken up into
  1400.                 lines (for example the register display does never generate
  1401.                 a ***more*** message).
  1402.                 If <expr> is not given, the command uses the last value.
  1403.                 (Remember that COP thinks in HEX, so 10 is not TEN but
  1404.                 SIXTEEN !)
  1405.                 
  1406.                 
  1407.                 IOCD.M                  <expr>
  1408.                 Set the value to be written to BEAMCON0 if user display
  1409.                 should be rebuild. This command is not required unless
  1410.                 an application uses the hardware registers directly.
  1411.                 See IOCD.C and IOCD for more information about this
  1412.                 feature.
  1413.                 If possible, COP tries to build a NTSC-display because
  1414.                 it is less flickering than a PAL screen. I think there
  1415.                 should be no problems with this feature, even commodore's
  1416.                 @#!?!-monitor supports 60Hz displays and most european 
  1417.                 TVs will do so, too. If there are problems, use the next
  1418.         option to use a PAL display instead, or use the PAL
  1419.         command line option (see below).
  1420.  
  1421.         IOCD.V            (does not take arguments)
  1422.         Toggles between PAL and NTSC display, if possible (ECS or
  1423.         better is required for this function)
  1424.                 
  1425.                 IOCD.P                  (does not take arguments)
  1426.                 Toggles printer output.
  1427.  
  1428.                 Not all commands cause a printer output, e.g. the edit
  1429.                 and step commands do not, since they are interactive.
  1430.  
  1431.         
  1432.                 IOCD.Q                  (does not take arguments)
  1433.                 Toggles printer support via the build-in printer driver
  1434.                 thru the parallel port of the amiga or the terminal
  1435.                 connected to COP (this is the default).
  1436.                 If you use the build-in terminal emulation, this command
  1437.                 will make no difference at all, but with an external type-5
  1438.                 terminal COP will either print itself or tell the external
  1439.                 terminal to start or stop printing. The later method is of
  1440.                 course the better one, it does not take over the parallel
  1441.                 port hardware.
  1442.  
  1443.                 All IO-commands but the L,S,P and Q subcommand don't make
  1444.                 sense in a remote-debug session and don't do anything in 
  1445.                 this case.
  1446.  
  1447.         IOCD.E            (does not take arguments)
  1448.  
  1449.         This command does not take any arguments. It will send a 
  1450.         FORM FEED control character to the connected printer, to
  1451.         eject the paper. This might be needed by some laser or
  1452.         deskjet printers.
  1453.  
  1454.  
  1455. ENVI            V                       R,L,I,B,X,E,M,F,D,C,U,O  <expr>
  1456.                 Enviroment settings, mode settings and so on.
  1457.                 
  1458.                 without extension       Not valid. This command MUST
  1459.                 be extended.
  1460.                 
  1461.                 ENVI.R                  (does not take arguments)
  1462.                 Enter raw mode. In this mode,
  1463.                 execbase is not used at all. There are much consequences
  1464.                 of entering the raw mode: The display copper list and
  1465.                 beamcon0 must be set by hand (with IOCD.C and IOCD.M),
  1466.                 interrupts are disabled if COP is entered, all list
  1467.                 commands depending on exec-lists, all task commands and
  1468.                 all capture commands refuse to work. The EXIT command
  1469.                 is not available, too. The SegTracker interface will be
  1470.         disabled, too.
  1471.                 There is no message if these commands are still entered.
  1472.  
  1473.                 All exceptions except interrupts cause now COP to inter-
  1474.                 cept, even if there is an exception handler installed in
  1475.                 the active task - normally it's no problem to run COP
  1476.                 parallel to a "normal" debugger, but in RAW-mode COP will
  1477.                 capture even its breakpoints.
  1478.                 
  1479.                 If you've entered the raw mode once, there's NO WAY
  1480.                 TO SWITCH IT OFF LATER except a power up or a reboot, 
  1481.         so be careful !
  1482.                 
  1483.                 You should use the raw mode if you MUST debug a program
  1484.                 that uses the hardware directly. In most cases, it is
  1485.                 necessary to use remote debugging, too.
  1486.  
  1487.                 If you must use the chip-mem buffer, you are REQUESTED TO
  1488.                 USE the raw mode too, or you will run into BIG TROUBLE
  1489.                 with task switching activity.
  1490.                                 
  1491.  
  1492.  
  1493.                 ENVI.L                  <expr> <expr>
  1494.                 Add memory section. Cause COP does not use the exec
  1495.                 memory list, COP tries to find the memory portions
  1496.                 in your system on startup, i.e. chip mem, fast mem
  1497.                 and the kickstart ROM. However, COP cannot handle 
  1498.                 "too complicate" memory models, e.g. fast mem that
  1499.                 is split in several blocks or memory that is not
  1500.                 aligned to 64K borders.
  1501.                 To fit your needs, you may add a memory chunk of
  1502.                 your choice to COP's list.
  1503.                 The first argument specifies the start address of
  1504.                 the block, the second the (exclusive) end address,
  1505.                 if both are equal, this memory block will be removed 
  1506.                 from COP's private list.
  1507.                 
  1508.                 This memory list is used for the FIND and FILL commands,
  1509.                 memory is scanned for all addresses in it.
  1510.  
  1511.                 NOTE:           Normally, the memory in an Amiga is
  1512.                 typically not organized in a linear way, some memory parts 
  1513.                 are mirrored to others and the memory is possibly split
  1514.                 into some chunks, e.g. if you have a memory expansion
  1515.                 card in an old Amiga 2000B with ranger-memory (slowmem).
  1516.                 In this case, your fast mem will fill the addresses
  1517.                 0x00020000 to ??? and 0x000c8000 to 0x000d0000. In this 
  1518.                 case COP will search the total area from 0x00020000 to 
  1519.                 0x00d00000, including some hardware registers in between.
  1520.                 In this release, COP can not handle such complicated memory
  1521.                 models, maybe later...
  1522.                 (This is even better than pre-1.17 releases, which were un-
  1523.                 able to work with A4000 memory models at all....)
  1524.                                                 
  1525.                 ENVI.I                  (no arguments)
  1526.                 Disable the checking of changes of IRQ-vectors.
  1527.                 Under normal conditions, COP checks the consistency of
  1528.                 the MC68000 autovector table, used by COP to allow trace and
  1529.                 breakpoint commands. If one of the entries are changed,
  1530.                 you will be prompted by a message if it's O.K. to undo the
  1531.                 change, to accept it (in this case COP writes the change
  1532.                 back to its second vector table, which can be used by
  1533.                 ENVI.F), or to ignore one or all changes.
  1534.  
  1535.                 This change could be done by a faulty program, or
  1536.                 by a program that wants to regain control over the whole
  1537.                 system. In the first case it's better to answer U(ndo), in
  1538.                 the later C(hange). If you use a MC68000, the address in the
  1539.                 trace and illegal trap vectors are vital, and any change
  1540.                 of them will prevent COP from being able to step thru
  1541.                 programs. Also, COP needs at least one interrupt that
  1542.                 occurs "often enough" to check the status of the break key.
  1543.                 With a MC68010 or higher things are not that worse, cause
  1544.                 COP uses the VBR register to move the autovector table
  1545.                 to a different part of the memory. However, changes to
  1546.                 the old table will be respected, although COP does not yet
  1547.                 notice the change of the VBR register. In case you notice
  1548.                 that the VBR has been changed, set it back to the old
  1549.                 value which can be found in the label COPVBR and place the
  1550.                 new value in the virtual vector base called VVBR.
  1551.  
  1552.                 If you disable the IRQ-checking, all changes to the
  1553.                 autovector table are ignored.
  1554.  
  1555.                 ENVI.C                  (no arguments)
  1556.                 Enables the IRQ copy back mode.
  1557.                 Instead of watching the low-memory vector base, COP keeps
  1558.                 an eye on its own vector offset and copies the changed
  1559.                 vectors on request to the virtual vector base. This option
  1560.                 should be choosen if you want to debug a program that
  1561.                 directly writes to the vector base, like ShapeShifter.
  1562.                 The command line option "MacMode" enables this automatically.
  1563.                 Be warned: Enabling the copy back mode disables the check
  1564.                 for the low memory vector table, which is normally used by
  1565.         the Amiga OS.
  1566.                 This check can be disabled with the ENVI.I switch described
  1567.                 above and works of course only for the MC68010 or better.
  1568.  
  1569.               
  1570.                 ENVI.B                  (no arguments)
  1571.                 Toggles the ChipMem backsave buffer.
  1572.                 The display build up by COP's internal terminal emulation
  1573.                 needs some chip memory that might be occupied by the
  1574.                 program you want to debug. If you want to prevent COP
  1575.                 from overwriting this area, you must:
  1576.                 o) provide a backsave area using the BUFFER keyword on
  1577.                    the command line when COP is installed
  1578.                    (usually in the startup-sequence)
  1579.                 o) enter the ENVI.B command to enable this buffer
  1580.                 o) you SHOULD use the Raw-mode to prevent conflicts with
  1581.                    multitasking
  1582.  
  1583.                 If the buffer is enabled, COP will backup the occupied 
  1584.                 memory area each time it builds its own display and will
  1585.                 restore it, if the program's display is restored later.
  1586.                 However, this backup mechanism is not (yet) fully trans-
  1587.                 parent to other parts of COP, but the UNAS and DUMP
  1588.                 commands keep care. It will be therefore convienent to 
  1589.                 place COP's CHIP hunk an uninteressting part of memory,
  1590.                 e.g. the display buffer of the debugged program would be
  1591.                 fine. To prevent problems with the blitter, COP will wait
  1592.                 for the blitter to complete before swapping the memory.
  1593.                 In all other cases the blitter will be just stopped.
  1594.  
  1595.                 ENVI.X                  (no arguments)
  1596.                 Affects the way the disassembler handles the indexed
  1597.                 indirect mode with label generation. The default is, that
  1598.                 the address which is used for label generation is given
  1599.                 by the base register plus the index. This is most com-
  1600.                 fortable if, for example, all entries of an indexed table
  1601.                 have labels associated to them. If, however, you want to
  1602.                 reassemble a part of code, this would be fatal since
  1603.                 all assemblers calculate the displacement, which will
  1604.                 be replaced by the label, as a distance to the base
  1605.                 register without the index. So if you switch out the
  1606.                 index inclusion, you will only see labels associated
  1607.                 to the base of a indexed table.
  1608.  
  1609.                 ENVI.E                  (no arguments)
  1610.                 Toggle the label generation on or off. If you do not want 
  1611.         to see labels, for example in a search process looking for
  1612.                 a instruction with specific address, you can switch out
  1613.                 the label generation at all using ENVI.E
  1614.  
  1615.                 ENVI.M                  (no argument)
  1616.                 Toggle the build-in memory manager. This part of code
  1617.                 in COP protects you from writing into hardware and non-
  1618.                 existing memory, as well as it does the memory re-
  1619.                 mapping for the chipmem-buffer. If, for special purposes,
  1620.                 you want to disable this feature, use ENVI.M
  1621.  
  1622.                 ENVI.F                  (no argument)
  1623.                 Toggle the place where the exception vectors are stored.
  1624.                 The default location is at address 0, but since this is
  1625.                 chip memory, exception handling gets slow. If you use
  1626.                 ENVI.F, the vector base will be located in the fast-memory.
  1627.  
  1628.                 Warning! ENVI.F does NOT change the vector base register
  1629.                 at all, since it is pointing to COP's own vector base at
  1630.                 any time. Instead, it says COP where to look for the system
  1631.                 vectors, so it changes only the virtual vector base VVBR.
  1632.                 Warning ! ENVI.F will overwrite the virtual vector base
  1633.                 register VVBR of COP in order to work ! So do not use this
  1634.                 command if you setup your own VVBR.
  1635.  
  1636.                 This command only takes effect if running under a MC68010
  1637.                 or better, since the plain MC68000 does not have a VBR.
  1638.  
  1639.  
  1640.                 ENVI.D                  (no argument)
  1641.                 Toggle the default input radix, with is set up as hex,
  1642.                 to decimal and back.
  1643.  
  1644.         ENVI.U            (no argument)
  1645.         Toggle the MMU bypass. All COP memory accesses usually by-
  1646.         pass the MMU of the 68020 or higher processors, so you see
  1647.         the true physical addresses. This can be desasterous if COP
  1648.         is used on an A3000 because disabling the MMU disables the
  1649.         image of the OS, too. Use ENVI.U to tell COP not to touch
  1650.         the MMU. That will have, however, certain consequences:
  1651.         First, all addresses shown in COP will be logical addresses,
  1652.         not the pure physical addresses. Reading or writing 
  1653.         non-existant or pure system addresses with the enforcer
  1654.         enabled will cause COP to crash by a bus error (that's harm-    
  1655.         less for COP, but you won't be able to alter these addresses
  1656.         at all).
  1657.         The command line option NOMMU can be used to enable this
  1658.         option by default. In any case, be careful with it.
  1659.  
  1660.         ENVI.O            (no argument)
  1661.         This is a MC68060 specific setting. It selects whether COP
  1662.         should bypass the non-implemented instruction exceptions
  1663.         to the 68060 library or capture them itself.
  1664.         The command line option NOEMU does quite the same, namely
  1665.         enabling the bypass.
  1666.  
  1667.         It is, however, not yet clear if this option works or makes
  1668.         any difference at all.
  1669.         
  1670.  
  1671. SPLT            /               C               <expr>
  1672.                 This command is available ONLY if you use the build-in
  1673.                 terminal or an external type-3 or type-4 terminal. It
  1674.                 won't work with a raw ASCII-terminal.
  1675.                 
  1676.                 COP has the ability to split off a part of the screen for
  1677.                 displaying some information permantly. This information
  1678.                 in then updated each time you enter a command or COP
  1679.                 looses or regains control over the system. For example,
  1680.                 splitting the screen and displaying the register set in
  1681.                 the upper part of the screen while tracing is highly use-
  1682.                 ful and is nowadays standard for all debuggers.
  1683.                 Cause COP is "a little" different from "the common 
  1684.         debugger", you must enable this feature by hand, and due 
  1685.         to the raw display system, it's not available in general - 
  1686.         a raw ASCII terminal can't split the screen.
  1687.                 
  1688.                 without extension       COP displays a new prompt and you
  1689.                 should enter a command that shall be executed each time
  1690.                 the display must be updated. The output of this command is
  1691.                 then displayed in a separated part of the display.
  1692.                 It is possible to execute more than one command if you
  1693.                 separate the commands by colons.
  1694.                 The argument following the SPLT-command determinates the
  1695.                 approximate size of the split-off part of the display 
  1696.                 (in lines; remember that all numerical values are HEX-
  1697.                 VALUES by default !). If there's not enough room, not
  1698.                 all commands will be executed.
  1699.                 
  1700.                 There are a few caveats to remember when using the SPLT-
  1701.                 command:
  1702.                 -Not all commands are splitable, e.g. the SPLT and the
  1703.                 STEP commands (since that doesn't make sense at all...)
  1704.                 -Some commands are splitable, but it's not very useful
  1705.                 to split them, cause they get executed each time the
  1706.                 display is updated, e.g. the GOPG and the EXIT commands.
  1707.                 -Almost all commands change the "here"-pointer. This is
  1708.                 NOT true for commands executed in the split-window, i.e.
  1709.                 they can READ "here", but do not change them.
  1710.                 This is somewhat useful since, while tracing, the "here"
  1711.                 pointer contains the address of the first command of the
  1712.                 lower window, e.g. splitting the command "d.w" will dump
  1713.                 the obcodes of the program in hex.
  1714.                 
  1715.                 Some useful commands for splitting:
  1716.                 REGS            will present a auto-updating register dump
  1717.                 NODE .a6        will print the name of the library pointed
  1718.                                 to by a6
  1719.                 DUMP.L .a0      will dump the memory pointed to by a0.
  1720.                                 (display will change if a0 changes, of
  1721.                                 course)
  1722.                 
  1723.                 (Remeber that you need to supply a dot in front of the
  1724.                 register names to distinguish between registers and
  1725.                 addresses)
  1726.                 
  1727.                                 
  1728.                 Remember that you can execute more than one command once,
  1729.                 e.g. REGS:NODE .a6
  1730.  
  1731.         
  1732.         Another idea about splitting is to use it when searching.
  1733.         COP halts now searching as soon as something is found and
  1734.         refreshes the split-off command, with the "here" pointer
  1735.         set to the found command. Thus, splitting the screen with
  1736.         a command like "u >-8" will disassemble the region around
  1737.         the found byte everytime the search succeeds.
  1738.                 
  1739.                 
  1740.                 SPLT.C                  (no arguments accepted)
  1741.                 Remove the split window and return to normal operation.
  1742.  
  1743.  
  1744.         This command is always executed if a part of COP causes
  1745.         a crash. Mainly because this part could be the split-off
  1746.         command, creating an infinite loop of crashes when re-
  1747.         freshing the screen after the crash-message.
  1748.                 
  1749. SKTB            T               <expr>
  1750.                 Stack traceback.
  1751.  
  1752.                 Search the stack at the given address or at the address
  1753.                 given by the active stack pointer for data- and
  1754.                 code addresses. This will be useful if you want to find
  1755.                 out which part of code called a faulty procedure.
  1756.  
  1757.                 COP TRIES to find out if the data on the stack is
  1758.                 just garbage (which won't be printed) or a pointer
  1759.                 to data, or a return address to a piece of code.
  1760.  
  1761.         In the later case, it tries to find a label near that
  1762.         code address, to provide you with the name of the calling
  1763.         routine.
  1764.  
  1765. LABS        A            E,S,B,G,T,V,A,U,L,F    [name]
  1766.         Dump labels.
  1767.  
  1768.         This command prints informations about label definitions
  1769.         loaded into COP. A line dumped by this command will look
  1770.         like the following:
  1771.  
  1772. label name    :    value    (+ base)        (flags)
  1773.  
  1774.         Some labels are either relative to a base, which is printed
  1775.         in hex if so, or relative to an exec node. It's name is
  1776.         printed in this case.
  1777.  
  1778.         The characters in the brackets specify the type of the 
  1779.         label:
  1780.  
  1781.         A    absolute address
  1782.         E    equate. An easy to remember expression representing
  1783.             a number.
  1784.         N    an address relative to a node, thus, an offset.
  1785.         V    a function vector of a library or a device.
  1786.         R    an offset relative to an absolute base.
  1787.         S    a size of something. Currently not supported.
  1788.         B    a bit definition.
  1789.         L    A lineA trap definition (not required by the
  1790.             Amiga-OS, but by the Mac OS)
  1791.  
  1792.         s    A COP internal (system) label. There are currently
  1793.             only four system labels.
  1794.         r    A read-only label.
  1795.         k    A resident label, can't be removed with FLUSHALL
  1796.         t    A temporary (so, user) label. Can be removed with
  1797.             FLUSH.
  1798.  
  1799.  
  1800.         The "name" argument specifies the label you'd like to know
  1801.         information about. Wildcars are welcome here, COP knows
  1802.         only two wildcards, '?' for one unknown character and '*'
  1803.         for a sequence of unknown characters. If you don't give a
  1804.         name, COP selects "*" for you as default, i.e. will show
  1805.         all label.
  1806.  
  1807.         The extensions specify the type of labels in the list:
  1808.  
  1809.         
  1810.         LABS.E            [name]
  1811.         Dump equates only.
  1812.  
  1813.         LABS.S            [name]
  1814.         Dump only sizes.
  1815.  
  1816.         LABS.B            [name]
  1817.         Dump bit definitions.
  1818.  
  1819.         LABS.G            [name]
  1820.         Dump gurus.
  1821.  
  1822.         LABS.T            [name]
  1823.         Dump line-A traps.
  1824.  
  1825.         LABS.V            [name]
  1826.         Print function vectors.
  1827.  
  1828.         LABS.A            [name]
  1829.         Print addresses. Absolute, relative or node relative.
  1830.  
  1831.         LABS.U            [name]
  1832.         Print all user defined (temporary) definitions.
  1833.  
  1834.         LABS.L            [name]
  1835.         Print all definitions.
  1836.  
  1837.         LABS            [name]
  1838.         Print all user defined addresses.
  1839.  
  1840.         LABS.F            <expr>
  1841.         Find the label nearest to and behind the given address.
  1842.         This is useful if you know only the absolute address in
  1843.         memory and want to relate it to the name of a subroutine
  1844.         of your program.
  1845.         
  1846. SEGM        Q            <expr>
  1847.         Find segment offsets.
  1848.  
  1849.         This command takes a memory address and tries to find out
  1850.         the program this memory belongs to. If successful, COP will
  1851.         print the segment (=hunk) number of that program, and the
  1852.         offset within that hunk the given address belongs to.
  1853.  
  1854.         Michael Sinz' "SegTracker" must be active for this service!
  1855.  
  1856.  
  1857.                 
  1858. XI) COP arguments to the command line and ToolTypes for the Workbench
  1859. ---------------------------------------------------------------------
  1860.  
  1861. Here a list of arguments COP acceptes as arguments when getting started
  1862. from the shell. However, it's possible to start COP from the workbench
  1863. and to supply the same arguments as tooltypes. Simply create a tooltype 
  1864. of the same name for each keyword.
  1865.  
  1866.  
  1867. KEYMAP  <keymap>        Set the keymap COP should use for the build-in
  1868. terminal. Please note that you CAN NOT change this keymap with the
  1869. SetMap or SetKeyboard command. This keymap is of course not used for
  1870. remote debugging.
  1871. The keymap file is searched in the DEVS:keymaps drawer (not in KEYMAPS:
  1872. cause this logical device is not standard with Kickstart 1.2 or 1.3)
  1873. or in the keymap.resource. You need to supply AT LEAST AT STARTUP
  1874. a KEYMAP argument to define the keymap COP shall use. (There's no default
  1875. in this release, a missing keymap argument will result in an unusable
  1876. build-in terminal)
  1877.  
  1878.  
  1879. SERIAL                  Choose remote debugging
  1880. DISPLAY                 Choose build-in terminal for debugging
  1881. Note that you MUST supply the DISPLAY argument if you want to enter COP
  1882. by a shell command or COP will switch to remote-debugging.
  1883.  
  1884.  
  1885. LINES <number>          Set the number of lines of the build-in terminal
  1886. screen, the default is 28. This argument will be ignored if COP is already
  1887. loaded, use the IOCD.Z command instead.
  1888.  
  1889. BREAKKEY <number>       Set the keycode (NOT the ASCII-value !) of the
  1890.                         BREAK-key. This value will be used only by the
  1891.                         internal terminal emulation and will be ignored
  1892.                         under remote debugging.
  1893.                         Some useable keys (in other words: You
  1894.                         MAY use the return key, but...) are:
  1895.  
  1896.                         93      the asterisk on the numeric key pad
  1897.                         90      the braket-left key on the pad
  1898.                         91      the braket-right key nearby
  1899.                         74      the minus key on the pad
  1900.                         94      the plus key underwards
  1901.                         60      the dot on the key pat
  1902.                                 this is the DEFAULT.
  1903.                         
  1904.                         You may also use hex numbers if you place a $ or a
  1905.                         0x in front of them.
  1906.                                                 
  1907. RESIDENT                Load COP resident into memory, i.e. COP will survive
  1908. a reset if execbase is still o.k. and need not to be reloaded. This option
  1909. is useful if you want to debug startup-code. If used together with the 
  1910. Enforcer, you might want to give the "RESTOREVBR" keyword as well, see 
  1911. below.
  1912.  
  1913. REMRESIDENT             Remove COP from the resident list and free all its
  1914. memory. Cause COP can not be removed completely, RESTART YOUR COMPUTER
  1915. IMMEDIATLY AFTER EXECUTING THIS COMMAND. Some code may write over COP's
  1916. still installed interrupt code resulting in a fireworks display or a crashed
  1917. harddisk (oh what a fun...).
  1918.  
  1919.  
  1920. GO                      Start a debug session using COP.
  1921.  
  1922. BUILDINPRT              Use the build-in printer support thru the parallel
  1923. port of the Amiga instead of the external terminal printer support. This
  1924. option works like the IOCD.Q command.
  1925.  
  1926. TERMINALPRT             The counterpart of BUILDINPRT: Use the printer pro-
  1927. vided by the terminal connected to COP. If you choose the build-in terminal
  1928. emulation, this won't make any difference. However, if you debug with an ex-
  1929. ternal terminal, the printing will be done thru its port and not thru the
  1930. amiga parallel port.
  1931.  
  1932.  
  1933. IRQDISPLAY              Select the buildin-terminal emulation, switch to
  1934. interrupt driven display. This acts like the IOCD.I command.
  1935.  
  1936. COPPERDISPLAY           Select the copper driven display as default.
  1937.  
  1938.  
  1939. IRQCOPYBACK             Select the IRQ copyback mode: COP does not watch the
  1940. low-memory interrupt vector table, but its own vector table and will copy
  1941. changes to the virtual vector base. This is the command-line counterpart of
  1942. the ENVI.C setting.
  1943.  
  1944. NOIRQCOPYBACK           The default operation of COP: Watch the standard
  1945. interrupt vector table, which is located at address 0 and up. Both checks
  1946. can be disabled with the ENVI.I switch.
  1947.  
  1948. RESTOREVBR        Instruct COP to re-install its own vector base 
  1949. register. This keyword is needed if COP is made resident and used in con-
  1950. junction with the "Enforcer". Since the "Enforcer" installs its own vector
  1951. base table on top of COP, a resident copy of COP won't be able to capture 
  1952. enforcer hits any more. Use this option to restore the VBR of COP, right 
  1953. after installing the Enforcer. 
  1954.  
  1955. MACMODE                 This macro switch enabled some options and settings
  1956. required for COP to run safely under the "ShapeShifter" Macintosh emulator.
  1957.  
  1958. SET60                   Tell COP that a MC68060 processor is in your system,
  1959. although exec.library does not know. The standard Amiga OS 3.1 does NOT
  1960. recognize a '60 processor, the correct flags are usually setup later by
  1961. a tool provided by the hardware manufacturer, mostly the 68060 library.
  1962. If you want to run COP prior to these tools, specify the SET60 option.
  1963. This flag DOES NOT change the processor flags in the exec.library!
  1964.  
  1965. NOMMU            Disable the MMU bypass. COP won't touch the MMU and
  1966. keep it active all the time - as needed for amiga models that use the
  1967. MMU to load an OS image. Disabling the MMU in this case will crash the system
  1968. because the OS will vanish. This keyword is identical to the ENVI.U 
  1969. instruction.
  1970.  
  1971. MMU            The default. COP bypasses the MMU for memory access, 
  1972. all addresses will be physical addresses. This is somewhat dangerous if the
  1973. MMU is required for system operation, as for '060 and '040 systems or if 
  1974. the MMU is used to map in a different version of the OS.
  1975.  
  1976. NOEMU            Instruct COP to bypass the 68060 emulator traps to
  1977. the 68060.library - which must be installed and running at the time COP is
  1978. launched. These exceptions are generated if the 68060 detects an instruction
  1979. that is not supported by the CPU directly but has to be emulated in software.
  1980.  
  1981. It is, however, not quite clear if this option makes any difference at all,
  1982. or if it works - simply because I don't own a '060 for testing.
  1983.  
  1984. EMU            The opposide and default setting. COP captures all
  1985. emulator traps as software failures.
  1986.  
  1987. The next two options contol the video mode used by COP for its own display:
  1988.  
  1989. NTSC            Use a NTSC screen for the debugger screen. This has
  1990.             been the default for versions up to 1.56.
  1991.  
  1992. PAL            Use a PAL screen instead. This is, however, more
  1993.             flickering but required for some TVs.
  1994.  
  1995. Now some options that tell COP where to place itself in memory. They do
  1996. not work if COP is already loaded !
  1997.  
  1998. CODE where              Tell COP where to place its CODE segment. where
  1999. might be:
  2000.         FORWARD         Allocate memory from the beginning of the memory
  2001.                         area, so COP is placed at LOW addresses.
  2002.                         This is impractical in most cases.
  2003.  
  2004.         REVERSE         Allocate memory from the end of the memory, so
  2005.                         COP is placed at HIGH addresses. This was the
  2006.                         default up to release 1.18.
  2007.  
  2008.         address         Place COP at an absolute address, given in decimal
  2009.                         or in hex if preceded by $ or 0x.
  2010.                         This memory area must be available, as long as you
  2011.                         do not use the FORCE option.
  2012.  
  2013. DATA where              Tell COP where to place the DATA section. The 
  2014.                         argument is the same as above.
  2015.  
  2016. BSS  where              ...same for BSS section
  2017.  
  2018. CHIP where              ...same for CHIP section. If you use an absolute
  2019.                         address here, make shure it is in chip mem !
  2020.  
  2021. LABEL where             ...same for LABEL section, which is needed if
  2022.                         you give a DDT (see below) and containes 
  2023.                         the names and addresses of DDT labels.
  2024.  
  2025. BUFFER where            Tell COP to use a chip-memory backup buffer and
  2026.                         place it according to the argument. You MUST
  2027.                         provide this argument if you want a chipmem backup
  2028.                         area, or the ENVI.B command won't work.
  2029.  
  2030. RESIDENTSTRUCT where    Tell COP where to place the resident structure that
  2031.                         is needed for COP to keep resident over resets.
  2032.                         This argument is only useful if you use the
  2033.                         RESIDENT switch too.
  2034.  
  2035. FORCE                   Tell COP to use the specified memory, even if it is
  2036.                         occupied by another program. WARNING !
  2037.                         YOU SHOULD BE REALLY SURE WHAT YOU ARE DOING if
  2038.                         you MUST use this option ! Portions of code of
  2039.                         other programs might get overwritten by COP, causing
  2040.                         a fantastic crash !
  2041.  
  2042. FLUSH                   Flush labels loaded as symbols from a segment,
  2043.                         e.g. loaded by CLIDEBUG or WBDEBUG.
  2044.                         This is done automatically every time if you
  2045.                         specify CLIDEBUG or WBDEBUG.
  2046.                         However, the labels defined in the DDT file
  2047.                         are left alone.
  2048.  
  2049. FLUSHALL                Flush all labels, even those defined in a
  2050.                         DDT file. The system labels AbsExecBase, Version
  2051.                         COPVBR and COPVVBR survive.
  2052.  
  2053. CLIDEBUG                Debug a program using the Shell interface. If
  2054.                         you want to give arguments to the program to
  2055.                         debug, INCLUDE THE COMMAND AND ITS ARGUMENTS
  2056.                         in double qoutes. Since a colon and an asterisk
  2057.                         is interpreted by COP as the beginning of a
  2058.                         comment, you MUST enclose these characters
  2059.                         in an additional pair of single quotes.
  2060.                         To simplify this, you might use the DEBUG
  2061.                         script.
  2062.                         CLIDEBUG always flushes the labels.
  2063.  
  2064. WBDEBUG                 Debug a program thru the workbench interface.
  2065.                         If you want to support a second icon which is
  2066.                         simulated to be clicked with the main program's
  2067.                         enclose THE MAIN AND THE SECOND ARGUMENT IN
  2068.                         DOUBLE QUOTES. DO NOT ADD ANY .INFO TO THE
  2069.                         NAME, even if you load an icon of project type.
  2070.                         The responsible program will be found and be
  2071.                         loaded.
  2072.                         WBDEBUG always flushes the labels.
  2073.  
  2074. SYMBOL                  Add the symbols of the given binary file to
  2075.                         the label buffer. To do so, you MUST support
  2076.                         the base address of the segment using
  2077.                         SEGMENT or FIRSTHUNK.
  2078.                         Adding of additional labels might be necessary
  2079.                         if you debug an overlayed program. COP cannot
  2080.                         load all labels on startup, since it is not clear
  2081.                         where the overlay nodes will be placed in memory.
  2082.                         Remember the base address of the program if loaded;
  2083.                         Later on, if the overlay nodes are present, reload 
  2084.                         the symbol table by FLUSH SYMBOL <progname>
  2085.                         FIRSTHUNK addr. 
  2086.  
  2087. FIRSTHUNK               Give the APTR to the first byte of the first hunk
  2088.                         to which the labels to be loaded belong.
  2089.                         Either FIRSTHUNK or SEGMENT MUST BE USED as an
  2090.                         additional argument if you use SYMBOL.
  2091.  
  2092. SEGMENT                 Give the BPTR, as available from LoadSeg(),
  2093.                         of the segment to which the labels to be loaded
  2094.                         by SYMBOL belong.
  2095.                         Either this or FIRSTHUNK IS REQUIRED for SYMBOL.
  2096.  
  2097. CALC                    Calculate the expression given. Everything COP's
  2098.                         EVAL command can evaluate is valid here, even
  2099.                         defined labels. So to read the value of ExecBase
  2100.                         using the Shell is quite easy:
  2101.                         COP CALC [AbsExecBase]
  2102.                         Note that this allows using COP as a symbol data-
  2103.                         base, e.g. to remember the system entry points.
  2104.  
  2105.                         COP CALC OpenLibrary
  2106.                         will give the offset of the OpenLibrary system
  2107.                         call, provided you added it using a DDT.
  2108.                         The only caveat is that COP will assume all
  2109.                         numbers are in DECIMAL unless preceeded by $.
  2110.             (Different to how expressions are handled usually!)
  2111.                         The $ notation, however, may conflict with
  2112.                         shell variables, so enclose the argument, also
  2113.                         if it contains spaces, in double quotes.
  2114.  
  2115.  
  2116. If you want to build an icon to start COP from the workbench, use for
  2117. example the following tooltypes:
  2118.  
  2119. DISPLAY                 MUST be present to prevent COP from remote-
  2120.                         debugging mode.
  2121. GO                      MUST be present if you want to start COP.
  2122.  
  2123.  
  2124.  
  2125. DDT file                Setup COP's labels using a data description
  2126.                         table. The syntax of this file is descripted
  2127.                         below, and a default table "startup.ddt" is
  2128.                         included in this drawer. If you want to run COP
  2129.                         together with the macintosh emulator, you should
  2130.                         specify the macintosh-version of the ddt file
  2131.                         called MAC.ddt and the MACMODE command line
  2132.                         switch.
  2133.  
  2134.                         You should use this option in your startup-
  2135.                         sequence to load all default labels.
  2136.  
  2137.                         It is fine to call COP again with this option
  2138.                         if you want to add some labels, however, if you want
  2139.                         to reload the table, you should flush all the
  2140.                         old labels with the FLUSHALL option.
  2141.  
  2142. PRE file        Provide or create a precompiled version of a DDT
  2143.             file. If this argument is given, COP tries first to
  2144.             read the label database from the "pre" file. If
  2145.             this file is not available, COP will read the usual
  2146.             DDT file and create a "PRE" file for you. The ad-
  2147.             vantage of precompiling "DDT" files is that they
  2148.             are parsed much faster. Their format is, however,
  2149.             private.
  2150.  
  2151. Of course, if COP is already present, the code loaded will get started and
  2152. will not be loaded again (and therefore, some options are useless in this
  2153. case !)
  2154.  
  2155. If you want to debug a Shell program, this command line would be nice:
  2156.  
  2157. COP CLIDEBUG "c:copy s:Startup-Sequence to '*'"
  2158.  
  2159. will debug the copy command in copying the startup-sequence to the console.
  2160. Please note the necessary quotes around the command line and the star.
  2161.  
  2162.  
  2163. To debug a Workbench progam, say the Shell-Icon, type:
  2164.  
  2165. COP WBDEBUG "SYS:Shell"
  2166.  
  2167.  
  2168. Debugging overlayed programs is a bit tricky. First load the program
  2169. itself, e.g. with
  2170.  
  2171. COP CLIDEBUG "SetVNC"
  2172.  
  2173. Now write down the address of the breakpoint when COP is entered.
  2174. Step thru the code until a new overlay segment is loaded. To do so,
  2175. set a breakpoint in the overlay manager, which will always be the first
  2176. hunk of the program. Then, load the symbols of the overlay code using
  2177.  
  2178. COP FLUSH SYMBOL "SetVNC" FIRSTHUNK 0x<addr>
  2179.  
  2180. where addr is the address of the breakpoint you wrote down before.
  2181.  
  2182. One caveat using overlays is that the structure of the overlay table
  2183. depends on the overlay manager the program uses. There are quite a lot
  2184. of them, however, COP only knows the default one supplied with the
  2185. linker BLink or SLink. As an example, the overlay structure of
  2186. DPaint II or COP (yes, that's me...) is private and is not supported
  2187. by COP. In this case, you cannot load symbols which are placed in the
  2188. overlay nodes, sorry.
  2189.  
  2190.  
  2191. If you want to use COP with the shapeshifter macintosh emulator, I suggest
  2192. the following command line:
  2193.  
  2194. COP FASTVBR MACMODE DDT S:Mac.ddt
  2195.  
  2196. plus your prefered keymap and display settings. COP can be entered from
  2197. the macintosh finder interface thru the hot key, as usual. Once entered,
  2198. the hardware traps are captured by COP, not by the MacOs. However, the
  2199. system failures (except those generated by hardware traps) are still left
  2200. to the Os. This might change in a future release.
  2201.  
  2202.  
  2203.  
  2204. XII) Syntax of a data description table
  2205. -----------------------------------------------------------------------------
  2206.  
  2207. The data description table contains information about labels, that are
  2208. litaral names given to addresses to make code more readable. COP intro-
  2209. duces a new concept of label creation not available with any other de-
  2210. bugger.
  2211. The labels are sorted by "type", as there are:
  2212.  
  2213. -       absolute labels, refering to one static address in memory.
  2214.         This is the only type of label most debuggers support.
  2215.  
  2216. -       equates. Those are simply names for numerical constants and
  2217.         are never used in actual disassembling. You may use it, how-
  2218.         ever, in expressions (and, in a release to come, in the
  2219.         microassembler)
  2220.         Typical equates are offsets of fields in structures.
  2221.  
  2222. -       node relative labels. If COP finds a specific base pointer
  2223.         points to a named exec-node structure (e.g. a library), this
  2224.         type of label is used to generate a name for the offset from
  2225.         the base of the node to the piece of memory which is addressed.
  2226.         A typical case is a entry point in a library, but also the full
  2227.         structure of a library can be addressed like that. So the default
  2228.         ddt includes the whole structure of execbase and gfxbase.
  2229.         Since the linking is done in the run time, it is not necessary
  2230.         to open these nodes, and the nodes even does not need to exist in
  2231.         memory while creating the labels.
  2232.  
  2233. -       address relative. This type is currently not used, but is
  2234.         useful if a base register is setup to point to the data region
  2235.         of a program. Typically, this will be a5 or a4.
  2236.  
  2237. -       a guru equate. This special type is used for giving readable
  2238.         names to guru meditations and is never used by the disassembler,
  2239.         but by the REGS.G instruction - And therefore every time COP is
  2240.     entered by a crash.
  2241.  
  2242. -       bit definitons. Useful for giving readable names to bits, but
  2243.         not used by the disassembler (there are way to many of them).
  2244.  
  2245. -       New with version 1.52 of COP, lineA-emulators can be named, too.
  2246.         These traps are never used by the AmigaOs, but function as Os-
  2247.         calls for a macintosh or Atari-ST emulator.
  2248.         
  2249. The syntax of a ddt file is a strange mixture of the syntax of the CBM
  2250. .fd-files and assembler include files, so you can use your .FD-files
  2251. and include files WITHOUT ANY CHANGE, provided you use the CBM macros
  2252. defined in exec/types.i and provided that you do not use forward 
  2253. references, as they are not supported.
  2254.  
  2255. Entries in the DDT are
  2256. i)      COPDDT-commands, a superset of the commands in the .fd files.
  2257.         COPDDT-commands are preceeded by two hashmarks and MUST be placed
  2258.         in the very first column.
  2259. ii)     Pure labels and function entries are given by their names and must 
  2260.         placed in the first column of the file, like labels in assembly
  2261.         language. As a special case, a label might be followed by a
  2262.         EQU or SET opcode. The first produces an equate label with
  2263.         a given value, and the second is ignored by COP since it is
  2264.         only used to keep track of the included files.
  2265.         If no value is given for a label, the contents is taken from
  2266.         the offset-counter which can be set by ##offset or ##bias.
  2267.         The type of the labels can be set by a COPDDT command pre-
  2268.         ceeding the label, except for labels defined by EQU, which
  2269.         are always equates.
  2270.         A pure label without EQU will always increment the ##offset
  2271.         counter by a size which can be set by ##increment.
  2272. iii)    Pseudoassembler commands which are named like the default CBM-
  2273.         macros in the exec/types.i file. They mostly define a label of
  2274.         a type defined by some COPDDT command above, and the value
  2275.         is also taken from the ##offset counter. However, the 
  2276.         increment depends on the pseudoassembler command.
  2277. iv)     Comments are introduced by a colon or an asterisk like in 
  2278.         assembly language.
  2279.  
  2280. Here the COPDDT-commands:
  2281. ##node name             Setup the next labels as labels relative to the
  2282.                         node with the given name. Should be used for
  2283.                         library offsets.
  2284.  
  2285. ##vectors name        Identical to ##node, except that it defines function
  2286.             vectors. The label values should be negative.
  2287.  
  2288. ##guru                  Setup the next labels as numbers of guru-meditations
  2289.  
  2290. ##absolute              Setup the next labels as absolute addresses.
  2291.                         Never used with the Amiga-Os, since there is only
  2292.                         one fixed address (AbsExecBase), which is already
  2293.                         defined as a label. However, this type is used for
  2294.                         the low-memory variables of the macintosh Os
  2295.                         (what a horror !)
  2296. ##relative <expr>       Setup the next labels as offsets to the address
  2297.                         given by <expr>, which need not to be a number,
  2298.                         and may contain other evaluable labels. However,
  2299.                         forward references are not supported.
  2300. ##equate                Setup the next labels as pure equates.
  2301. ##linea                 Setup the next labels as line-a traps, as used by
  2302.                         the MacOs and Atari ST. Useless for the Amiga.
  2303. ##offset <expr>         Set the offset of the next labels relative to their
  2304.                         base. With amiga only useful for labels of ##node, 
  2305.                         ##relative or ##equate type, since there is only 
  2306.                         one fixed absolute address in the amiga and no
  2307.                         line-A emulators. Useful for ##absolute and ##linea
  2308.                         under MacOs and Atari ST.
  2309. ##bias <expr>           Set the negative offset of the next labels. Will
  2310.                         be used by .fd files to set library entries and is
  2311.                         identical to ##offset except that the value of
  2312.                         <expr> is negated (sign-changed).
  2313. ##increment <expr>      Sets the default incrementation value of the offset
  2314.                         counter. Should be set to -6 prior to including
  2315.                         .fd files, since each entry takes up 6 bytes, and
  2316.                         libraries grow to lower addresses. If you want to
  2317.                         define a table of LONGs, set the increment to 4.
  2318.                         This value is added to the ##offset counter every
  2319.                         time a pure label without a size gets defined.
  2320.                         Function entries in a .fd file are "pure labels"
  2321.                         in the sense of COPDDT.
  2322. ##base name             Define the name of a library base. Used by the
  2323.                         .fd files. Will define a label of offset
  2324.                         zero.
  2325. ##include name          Include another file in the ddt. There is NO
  2326.                         check for cyclic dependence, so WATCH OUT !
  2327.                         If the name contains spaces, include it in double
  2328.                         quotes.
  2329. ##end                   End an ddt file. Also used by .fd files.
  2330.  
  2331. ##private               Quietly ignored by COP, only used in fd-files
  2332. ##public                Also ignored.
  2333.  
  2334. Empty lines or lines starting with a colon or a star are read as comment-
  2335. lines and are ignored, too.
  2336.  
  2337. Label definitions:
  2338. A "pure" label is defined by giving only its name starting in the
  2339. first row of a line, like this:
  2340.  
  2341. ##absolute 8            ; Labels are of absolute type
  2342. ##increment 1           ; Set the increment of pure labels
  2343. mylabel                 ; comments are welcome ! This label gets the value 8
  2344. nextlabel               ; and this one 9, since the increment is 1
  2345.  
  2346. The value of the label to be defined is contained in the offset counter,
  2347. and it will be incremented by the value in ##increment every time.
  2348.  
  2349. Since fd-files contain functions and arguments, a (pure) label name is 
  2350. cut in the first occurance of a left bracket:
  2351.  
  2352. myFunc(foo)(a0)         ;this label gets called "myFunc" and got the value 10
  2353.  
  2354. Labels can be set to given values using the EQU pseudoassembler directive.
  2355. These "unpure" labels neither need the offset counter nor increment it.
  2356. All labels generated by this syntax are of equate type, regardless of the
  2357. previous COPDDT command.
  2358. TRUE            EQU     1       ; an equate. Can be evaluated, but is
  2359.                                 ; not used by the disassembler
  2360.                                 ; the offset counter is untouched, too
  2361.  
  2362.  
  2363. The set directive of assembly language is known, but will be ignored without
  2364. any checking
  2365. ARGC            SET     §       ;in assembly language syntactically wrong,
  2366.                                 ;but completely ignored by COP.
  2367.  
  2368. The same goes for lines between a MACRO and a ENDM directive, since
  2369. COP does not support macros (and I think never will..).
  2370.  
  2371.  
  2372. Pseudoassembler commands:
  2373.  
  2374. They are called "pseudoassembler commands" cause they define labels in
  2375. assembly style, rather than .fd style. All macros in exec/types.i are
  2376. "emulated". The type of labels generated by them depend on the pre-
  2377. ceding COPDDT command, like ##absolute will generate absolute labels.
  2378. The value of the labels is given, as above, by the offset counter. This
  2379. counter can be set with the ##offset COPDDT command or the STRUCTURE
  2380. directive, and will be incremented by a value determinated by the
  2381. directive, unlike pure labels, which cause the value of ##increment
  2382. to be added.
  2383.  
  2384. Pseudoassembler directives MUST NOT start at the beginning of a line, but
  2385. MUST be preceded by spaces or TAB characters, like in assembly language.
  2386.  
  2387. Known directives are:
  2388.  
  2389.         STRUCTURE name,<expr>
  2390. Define a new label of given name as the base of a structure. The offset
  2391. counter will be initialized by <expr>, that is, the structure containes
  2392. unnamed field in the beginning of the size given by offset. The value
  2393. of the label defined will be zero relatively to a base, which can be
  2394. setup by ##node or ##relative. Defining an absolute structure does not
  2395. make much sense in this system.
  2396.  
  2397.         STRUCT name,<expr>
  2398. Define a substructure in a structure, that is, generate a label of given
  2399. name with the value as the value of the offset counter, and of type
  2400. given by a preceding COPDDT command. The offset counter is incremented by
  2401. the value of <expr> afterwards.
  2402.  
  2403.         LABEL name
  2404. Define a label with the value of the offset counter, which is not
  2405. incremented at all.
  2406.  
  2407.         UBYTE name[,<expr>]
  2408. Define one single byte, or array of bytes by generating a label. Its 
  2409. value is given by the offset counter, and its type is given by a preceding
  2410. COPDDT command. The offsetcounter is incremented by 1, if the expression
  2411. is ommited, or 1x<expr> to generate an array.
  2412.  
  2413.         BYTE name[,<expr>]
  2414. Same as byte.
  2415.  
  2416.         UWORD name[,<expr>]
  2417. Define one single word, or array of words. Works like BYTE, but the offset
  2418. counter is incremented by 2 or 2x<expr>. If the offset counter is odd, it
  2419. is rounded to the next even number.
  2420.  
  2421.         WORD name[,<expr>]
  2422. Same.
  2423.  
  2424.         BOOL name[,<expr>]
  2425. Same.
  2426.  
  2427.         ULONG name[,<expr>]
  2428. Defines one long word, or array of longwords. Increments by 4 or 4x<expr>
  2429. and alignes offset counter.
  2430.  
  2431.         LONG name[,<expr>]
  2432. Same.
  2433.  
  2434.         APTR name[,<expr>]
  2435. Same.
  2436.  
  2437.         CPTR name[,<expr>]
  2438. Same.
  2439.  
  2440.         FPTR name[,<expr>]
  2441. Same.
  2442.  
  2443.         FLOAT name[,<expr>]
  2444. Same.
  2445.  
  2446.         DOUBLE name[,<expr>]
  2447. Defines a IEEE-double precision entry or array. Increments the offset counter
  2448. by 8 or 8x<expr> and alignes it.
  2449.  
  2450.         UQUAT name[,<expr>]
  2451. Same.
  2452.  
  2453.         QUAT name[,<expr>]
  2454. Same.
  2455.  
  2456.         EXTENDED name[,<expr>]
  2457. Introduced in COP, defines MC68881 extended precision entry or array.
  2458. Increments the offset by 12 or 12x<expr> and aligns it.
  2459.  
  2460.         ALIGNWORD
  2461. Explicitly aligns the offset counter to the next word.
  2462.  
  2463.         ALIGNLONG
  2464. Align the offset counter to the next long word.
  2465.  
  2466.         ENUM [<expr>]
  2467. Initializes the ENUM-counter by the given value. Does not generate any label.
  2468.  
  2469.         ENUMITEM name
  2470. Generate a label of equate type. The value is given by the equate counter,
  2471. which will be incremented by one after the definition.
  2472.  
  2473.         BITDEF pre,post,<expr>
  2474. Generate two (!) labels. The first is of bit-type and will be named 
  2475. "preB_post" and will have the value given by <expr>. The second will be
  2476. named "preF_post", is of equate type and has the value of 1 << <expr>.
  2477.  
  2478.         IFD,IFND,ENDC
  2479. Ignored by COP
  2480.  
  2481.         INCLUDE
  2482. Ignored by COP. To include something, use the COPDDT command ##include.
  2483. This was mainly done to avoid unnecessary includes and to give the
  2484. control what will be included to the main DDT-file.
  2485.  
  2486.         LIBINIT
  2487.         LIBDEF
  2488. Also ignored by COP
  2489.  
  2490.         MACRO
  2491.         ...
  2492.         ENDM
  2493. Lines between MACRO and ENDM are ignored by COP, since it does not support
  2494. macros.
  2495.  
  2496.  
  2497. As noted above, the set of supported commands was choosen in a way such
  2498. that all orignal CBM-includes and .fd files can be used without a change.
  2499. Support of other style assembly include files (like DevPac's rs-counter)
  2500. are not supported and never will.
  2501. It is, however, sometimes necessary to explicitly define labels on one's
  2502. own. This happens mostly if the orginal include file defines useful
  2503. constants that should be relative to a base as equates. An example is
  2504. the definition of DOSBase in dos/dosextens.i. Since you cannot make
  2505. all labels relative to DOSBase, one must take this definition out
  2506. of the file.
  2507. Defining DOSBase as equates and not as node relative is of course not
  2508. illegal in COP, but will be of no use for the disassembler since it 
  2509. ignores equates (there are to many of them to be of any use). This was,
  2510. as a second example, necessary in defining the hardware offsets. 
  2511. Originally given as equates, they are now relative to the base of 
  2512. the custom chip set. See the included example ddt file. 
  2513.  
  2514. XIII) Precompiled files
  2515. -----------------------------------------------------------------------------
  2516.  
  2517. The 1.60 version of COP introduces the option to "precompile" DDT files for
  2518. faster startup. If you give a name of a pre-file on the command line with
  2519. "PRE filename", additional to the "DDT" keyword, COP will try first to load
  2520. all labels from this pre-compiled header. If successfully, the DDT keyword
  2521. will be ignored. If the "PRE" file is not available, COP will parse the "DDT"
  2522. file as usual and will create this "PRE" file afterwards so it is available
  2523. for later use. 
  2524.  
  2525. The main advantage of precompiled "DDT" files is that they are way faster to
  2526. load, no parsing and no syntax check is required. The data format is 
  2527. completely internal, please do not touch these files - they are purely for
  2528. COPs use and maintained completely by COP itself.
  2529.  
  2530. One caveat of "PRE" files is that they aren't updated automatically if you
  2531. change the original "DDT" file and there can be ONE and ONLY one "PRE" file
  2532. for the complete set of macros. Writing a partial set of label definitions
  2533. in a pre-file isn't possible. Either all or nothing!
  2534.  
  2535. The consequence is that you:
  2536.  
  2537. - should delete the "PRE" file manually if you made changes to the source DDT
  2538. file. COP will then re-create the "PRE" file the next time it is required.
  2539.  
  2540. - should only precompile the first DDT file that is loaded, that is the
  2541. "startup.ddt" file. Since this is the only DDT file in most applications,
  2542. that's not a restriction. DO NOT TRY to write PRE files for DDT files you
  2543. include afterwards - as they will not only contain the label definition in
  2544. the additional DDT file but in ALL DDT files. Loading these labels later on
  2545. might confuse COP. 
  2546.  
  2547. As a rule of thumb: Only the Startup.DDT file should be precompiled.
  2548.  
  2549.  
  2550. XIV) Shell scripts
  2551. -----------------------------------------------------------------------------
  2552.  
  2553. Three shell scripts are provided with COP, to simplify work:
  2554.  
  2555. -Debug          Accepts a program name (full path required) and its
  2556.                 arguments to be debugged by COP. Will load the program
  2557.                 as if started from the Shell and set a breakpoint at the
  2558.                 first hunk.
  2559.  
  2560. -WBDebug        Accept a workbench program and, optionally, a secondary
  2561.                 selection, without .info. Starts the program and supplies
  2562.                 the arguments thru a WBStartup message, as if started from
  2563.                 the workbench.
  2564.  
  2565. -Calc           Evaluates the supplied argument. Labels are welcome, and
  2566.                 the radix defaults to decimal. However, problems may
  2567.                 arise if you use hex numbers cause the $ can cause
  2568.                 conflicts with defined shell variables. In this case,
  2569.                 enclose the argument in double quotes.
  2570.  
  2571.  
  2572. XV) COP and the Enforcer/Cyberguard
  2573. -----------------------------------------------------------------------------
  2574. COP 1.56 supports the Enforcer program if run on a MC68020 or MC68030. The 
  2575. 1.59 version *might* support the Cyberguard, too. But as I don't have a
  2576. MC68060 processor, I can't test it.
  2577.  
  2578. There are two ways to run these tools together with COP, depending on which
  2579. output you need.
  2580.  
  2581. Method I):    Start the enforcer/cyberguard first, then run COP. 
  2582. Don't remove the Enforcer and the CyberGuard later. This is the recommended
  2583. way.
  2584.  
  2585. This will redirect Enforcer hints directly to COP. Faulty programs will cause
  2586. a bus error exception, and you're now able to debug these programs directly.
  2587. The enforcer won't cause any ouput, running "Sushi" is not necessary.
  2588.  
  2589. If you made COP resident, the COP invokation line in the startup-sequence
  2590. should contain the "RESTOREVBR" keyword, too. This is needed because the
  2591. order of installation will be different once COP is resident - the Enforcer
  2592. will now install on top of the resident copy of COP, hence, messing COP's
  2593. vector base register. This option will re-direct the vector base to COPs
  2594. interal base.
  2595.  
  2596.  
  2597. Method II):    Start COP first, then load the Enforcer. It is possible to
  2598. remove the Enforcer later on, however.
  2599.  
  2600. The enforcer will work as usual with this setting, COP won't interfere in this
  2601. case.
  2602.  
  2603. However, as soon as COP is entered, it will complain about its vector base
  2604. being messed up by the Enforcer. You might want to simply ignore this warning.
  2605.  
  2606.  
  2607. Enforcer and the FASTVBR option.
  2608. --------------------------------
  2609.  
  2610. That's a story of its own. If you want to run COP before Enforcer, the 
  2611. FASTVBR option IS REQUIRED. This is simply due to the fact that otherwise
  2612. COP will locate the virtual vector base in the first 1K of memory as usual -
  2613. and this memory isn't available with Enforcer.
  2614. Quite the same goes for keeping COP resident - it's in this case already
  2615. present when the Enforcer gets loaded, so FASTVBR is mandatory, too.
  2616.  
  2617. There's actually little reason NOT to use the FastVBR option except to keep
  2618. some badly written programs - mostly games - working.
  2619.  
  2620.  
  2621. XVI) COP and the 68060 / 68040
  2622. -----------------------------------------------------------------------------
  2623.  
  2624. The 1.61 release of COP should be able to support the 68060 processor - 
  2625. however, as most of the support code is untested, it is not quite clear if
  2626. everything works as expected. 
  2627.  
  2628.  
  2629. The following rules apply to COP and the 68060:
  2630. -----------------------------------------------
  2631.  
  2632. - Add the SET60 keyword to the command line option. That tells COP explicitly
  2633.   that it has to deal with the '060 processor. The execbase "AttFlags" flags
  2634.   field does not necessarely monitor the '060 processor correctly.
  2635.  
  2636. - Add the NOMMU keyword. The MMU operation is vital for '060 and '040 based
  2637.   systems, to mask certain regions of memory as "non-cacheable" as needed for
  2638.   DMA transfer and other reasons.
  2639.  
  2640. - Add the NOEMU keyword. COP will try to bypass the emulator traps to the
  2641.   68060 library. It is, however, not quite clear if this works as expected.
  2642.  
  2643. - Load the 68060 library BEFORE COP is run. This is usually done by the
  2644.   68060.library that gets loaded by SetPatch.
  2645.  
  2646. - Start COP after CyberGuard or Enforcer. This is the recommended way, but
  2647.   it is not yet quite clear if this works like it should. COP has to emu-
  2648.   late the access to the AbsExecBase location at address four, and this
  2649.   emulator code is quite tricky for the 68060. Even though I tried my best
  2650.   to test it with my 68030, it is not clear whether it works like it should.
  2651.  
  2652. - Add the FASTVBR option if you want to run COP before Enforcer/CyberGuard,
  2653.   or if you want to keep COP resident. Do not specify it otherwise.
  2654.  
  2655.  
  2656. COP and the 68040
  2657. -----------------
  2658.  
  2659. This should be less problematic, even though it is even less tested than
  2660. the '060 support code.
  2661.  
  2662. - Add the NOMMU keyword. It is required for proper DMA operation of '040
  2663. systems.
  2664.  
  2665. - Run COP after Enforcer.
  2666.  
  2667. - Run COP after loading the 68040.library. This is usually done by the 
  2668.   SetPatch command.
  2669.  
  2670. - Specify the FASTVBR keyword if you run COP before Enforcer, or if you
  2671.   want to keep it resident. Do not specify it otherwise.
  2672.  
  2673. In any case, whether it works or not, contact the author about your ex-
  2674. perience with COP and '060 and '040 systems since I need your support to
  2675. continue the work.
  2676.  
  2677.  
  2678. XVII) Plans
  2679. -----------------------------------------------------------------------------
  2680.  
  2681. - Making the chip-buffer more transparent
  2682. - Better memory chunk support
  2683. - better disassembler, parts are already working
  2684. - a microassembler (in preparation)
  2685. - wildcards in node matching
  2686. - bitdefs should really be relative to something, but system includes
  2687.   do not give the information
  2688. - more macintosh support, thru a mac INIT.
  2689. - a MMU table lister ?
  2690.  
  2691. In the next time, there won't be...
  2692.  
  2693. - a floppy or harddisk support. There are so many filing systems and device
  2694.   drivers and I think using the 20K or more needed to implement this stuff
  2695.   can be used a better way.
  2696.  
  2697.  
  2698. XVIII) Final remarks
  2699. -----------------------------------------------------------------------------
  2700.  
  2701. COP should not be crunched or compacted, since COP uses an internal overlay
  2702. format to load the debugger code if needed. To enter COP later with a
  2703. COP DISPLAY GO or equiv. the startup segment is loaded to memory only.
  2704.  
  2705. I wrote COP five years ago (1993) to find the reason of many crashes that
  2706. occured in my system. I found that most debuggers I knew were not
  2707. able to debug a system with execbase out of order or input.device crashed.
  2708. The first debugger I used to accomplish this task was the ROMWack, a very 
  2709. simple, but nevertheless useful one. 
  2710. It took a year to complete the first release of COP, so I can appreciate a
  2711. programmer's work and you should do so, too. Please use COP to find bugs
  2712. in your own code only, whenever every other debugger fails, e.g.
  2713. interrupt code or reset resident code. Use COP to find the reason of
  2714. system crashes that crash normal debuggers, but PLEASE DO NOT USE COP TO
  2715. FUMBLE IN FOREIGN CODE, since this will prevent people from writing
  2716. good programs. Not everthing is public domain today, support the good work
  2717. and buy software.
  2718.  
  2719. This program is decidated to all the bubling idiots that debug own code
  2720. up to 4 a.m. in the morning ("It MUST work...").
  2721.  
  2722.  
  2723. Thank goes to:
  2724. -Oliver Spaniol for letting me debug this proggy on his '060.
  2725. -Mark Watson for his help with the '060 code.
  2726.  
  2727.  
  2728.  
  2729. If you like this program, if you have any suggestions, if you want to get a
  2730. newer release of COP, write to:
  2731.  
  2732.  
  2733. Thomas Richter
  2734. Rühmkorffstraße 10 A
  2735.  
  2736. D-12209 Berlin
  2737.  
  2738. Germany
  2739. -------
  2740.  
  2741. or send electronic mail thru internet to
  2742.  
  2743. thor@einstein.math.tu-berlin.de                 - or -
  2744. thorj@granit.cs.tu-berlin.de
  2745.  
  2746.  
  2747. There's also a web site you should try:
  2748.  
  2749. WWW:    http://www.math.tu-berlin.de/~thor/thor/index.html
  2750.  
  2751.  
  2752.  
  2753. It might be possible that COP does not work on YOUR Amiga, some parts of
  2754. the code are very tricky and hardware dependent. I tried to avoid such
  2755. problems, but one can never know. If COP fails on your computer, send
  2756. me a mail and descripe as best as possible your problems. However, debugging
  2757. by mail is a complicate task....
  2758.  
  2759.  
  2760. Thank you for reading and have a good time...
  2761.  
  2762.         THOR    (February 1998)
  2763.  
  2764.