Preliminary Software Toolkit II Here are some quick descriptions and credits for the tools on this disk. Most CLI tools provide usage if called with "?". Some of the more complex tools (Wack and Wedge) are fully documented in separate .doc files. If you are planning on releasing software to the public, be sure to test with the various watchdog tools first! Memmung and io_torture work on any system. If you have an MMU and are running V1.3, use _Enforcer_. If you are running 2.0, chose between _Enforcer_, or CPU trap. If running an A3000, use complainer. autodoc Extracts autodocs from your source code, with docs on how to code your comments to make this possible. See autodoc.doc for usage. bumprev Bumps the revision in an xxx_rev.h or .i file. Usage: bumprev version revfilename (example bumprev 36 my_rev) charset Printf's a table of the Amiga character set (ECMA-94 Latin 1 International 8-bit character set) with hex and binary upper/lower nibble values. complainer and complainer.par (by Bryce Nesbitt) A3000 MMU watchdog. Use in conjunction with MemMung to catch use of freed or uninitialized memory, and writes to ROM or non-existant memory. Requires serial terminal. Usage: complainer[.par] on|off cputrap and cputrap.par (by Valentin Pepelea) A2500 MMU watchdog traps for use with the 2.0 CPU command. Catches illegal memory accesses, low memory reads/writes, writes to ROM, etc. Use in conjunction with MemMung to also catch use of freed memory of pointers. Requires 2.0, MMU, CPU command, and serial terminal (cputrap) or parallel printer (cputrap.par). Usage: run cputrap[.par] CPU trap config (by Carolyn Scheppner) Displays your system configuration ( versions, chips, boards, etc.) With "debug" option it lists all of the autoconfig info for each board. Usage: config [debug] configdev (by Bryce Nesbitt) Lists every last detail about every AutoConfig (tm) device in the system. Knows about Zorro III cards. Usage: configdev [brief] crash3, crash4, crash5, crash8, crasha (by C. Scheppner) Little programs to crash your machine (just what you need :-) They are useful when testing debugging tools like SRT and TNT. They are non-destructive - they just crash the shell process you call them from. They store recognizable values in most registers before they crash (like d0=0 thru d7=7, a0=10 thru a6=16 EXCEPT a2=program counter and a3=stack pointer) so you can tell if your debugging tool is picking up the right info. devlist (by Carolyn Scheppner) Lists all currently loaded/available devices in the system. devmon (by Carolyn Scheppner) Exec device monitor. Wedges into Open/Close/Expunge/BeginIO vectors of any exec device unit and reports on all calls. With "full" option, the exec functions DoIO, SendIO, WaitIO, AbortIO, and ReplyMsg are also wedged. Default output option buffers 40K of debug output then outputs to your choice of screen or file when you exit. (Local buffer can be restarted at any time). With "remote" option, output is kprintf'd. Warning - I don't suggest using remote option for heavy-use or time-critical devices like timer.device (too slow). disked Sector editor documented in Bantam AmigaDOS manual. See the toolkit documentation for an example. doslist (by Andy Finkel) Lists all of your dos device and volume environment information. This version has a larger buffer for folks with lots of devices. drip A classic memory loss tool. Usage: drip [threshold] Call it again to check for memory loss. eatcycles (by John Szucs) Requires 2.0. Lets you bog down the processor to simulate heavy multitasking loads. eatmem (by John Szucs) Requires 2.0. Great gadtools-interface memory control panel. Lets you dynamically adjust the amount of free memory available for testing under low memory situations, or to simulate a machine with less memory. enforcer and enforcer.par (by Bryce Nesbitt) MMU watchdog. Works under 2.0 and 1.3. Catches illegal memory accesses, low memory reads/writes, writes to ROM, areas of no memory, etc. Use with MemMung or MungWall to also catch use of freed memory or pointer. Requires MMU and serial terminal. Usage: enforcer on|off|fprotect flush (by Carolyn Scheppner) Does three big memory allocations to force currently unopened ram-resident fonts, libraries, and devices out of the system. (3 allocs so that libs/devs that have other libs/devs open... can be flushed, followed by the libs/devs THEY had open, etc...) Used when testing for memory loss. (flush, avail, run your program, exit program, flush, avail). frags Shows summary of memory fragmentation. intlist (from the original by Carl Sassenrath) System interrupt lister. io_torture (by Bryce Nesbitt) Device IO watchdog - watches for reuse of IORequests before they have completed. Requires serial terminal. lawbreaker (by Bryce Nesbitt) A little program to test your MMU debugging tool and remote setup. Does an read of location $14, and a write to location $C0EDBAE. liblist (by Carolyn Scheppner) Lists all currently loaded/available libraries in the system. lvo (by Carolyn Scheppner) If you have a directory or disk assigned the name FD:, containing the FD files, lvo can give you the LVO offset of a function (hex and decimal) and the usage line for the function (handy for quick checks on function arguments and registers). Wedgeline option generates command lines for Wedge. Usage: lvo library [functionname] [wedgeline] Example: lvo exec OpenLibrary memlist (by Carolyn Scheppner) Displays all of the system's memory areas and free memory lists. Can be redirected to a disk file. memmon (by Carolyn Scheppner) Simple memory monitor for checking relative memory usage while running your program. Redirect to a disk file for a log. memmung (by Bryce Nesbitt) Freed memory invalidation tool. Sets address $0, and all Free'd memory to a nasty value, designed to cause you big problems if you are using null pointers or accessing freed memory. If used in conjunction with an MMU Watchdog tool (enforcer, cputrap, or complainer as appropriate) you get informative messages on such accesses (rather than crashes). Memory allocations which don't have the MEMF_CLEAR flag set, will be munged as well. Use by itself if you don't have an MMU but be prepared to crash. Usage: run memmung mks_lens (by Mike Sinz) A magnifying-glass for for screen text and graphics. Lets you examine every pixel easily. Useful for debugging graphic placement and trashing. modlist (by Carolyn Scheppner) Lists all of the resident modules in the system. mungwall (by Ewout Walraven) Mungwall puts a magic cookie around all memory allocations (or all by a particular task) and complains serially when the memory is freed if the cookie has been trashed. Munges all free memory on startup, when it is allocated and when it is freed. See mungwall.doc for details. owner (by Mike Sinz) Searches exec lists trying to find owner of a piece of memory. Usage: owner 0xhhhhhh [0xhhhhhh, etc.] peek, poke (by Carolyn Scheppner) Let you peek or poke memory, and compare memory contents against a masked or unmasked value. Usage: peek B|W|L [0x]address [[0x]compvalue] [[0xmask] printertest (by Bob Burns) Printer driver test for printer driver writers. readpixel (by Carolyn Scheppner) Tool that lets you click on pixels to find out their pen number and x/y position. Useful for measuring things onscreen or checking their positions. Coordinates are relative to top left corner of screen. romwack Freezes your system and enters the rom-based system serial debugger, allowing you to examine your machine's memory remotely. Same effect as calling Debug() from within a program. See RomWack docs in the Addison-Wesley Rom Kernel Manual. settaskname (by Carolyn Scheppner) Lets you change the name of a CLI to any same or shorter length name. Useful in conjuction with the MemWall [task Name] option. Usage: settaskname newname showgfxbase (by Carolyn Scheppner) Shows some popular GfxBase variables. showlocks ( Copyright Chuck McManis ) Shows the outstanding locks on a volume. Usage: showlocks volumename snoop (by Carl Sassenrath, modified by R. Jesup and C. Scheppner) Snoop reports serially on all memory allocations and deallocations. You should capture snoop's output in a terminal program's ascii buffer abd then run snoopstrip on it to leave just unmatched allocs/frees. This version outputs full 32-bit addresses. Modified to snoop both AllocMem/FreeMem, plus AllocVec/FreeVec if 'vec' flag is used. NOTE! In order for snoopstrip to be able to match up AllocVec's and FreeVec's, I have to lie about the sizes and output the ACTUAL size rather than the requested size for these functions (requested size is not available on a FreeVec call). Requires serial terminal. Usage: snoop [vec] snoopstrip (by Neil Katin, modified by C. Scheppner) Snoopstrip is used to strip all matching allocations and frees from a captured snoop output file (or from the output of MemWall's snoop option). All unmatched allocs and frees will cause snoopstrip to output a "NoAlloc:" or an "UnFreed:" line, specifying the allocation and the owning task. This new version requires the full 32-bit output such as produced by the new Snoop and MemWall programs above. Snoopstrip no longer throws away lines it does not understand (unless used with the "discard" option). Instead, it will just prepend the lines with a "?". If it thinks it is being fed old-style 24-bit snoop output, it will also output a warning. Usage: snoopstrip outfile [discard] sparemem (by Carolyn Scheppner) Lets you reduce free memory TO a certain amount or BY a certain amount. (I wrote it before I saw how nice eatmem is). Still could be useful when (for instance) trying to test a bootable disk under lowered memory conditions. Usage: sparemem c=[-]bytes f=[-]bytes srt (by Carolyn Scheppner) Wedges into AutoRequest to trap Software Error requesters and replace with a debug requester containing PC, registers, task name, etc. Unfortunately, almost all of 2.0 uses EasyRequest() now, so SRT is useless for intercepting 2.0 requesters or software errors. However, one handy feature under 1.3 is that it can be installed after you crash (then click Retry in requester). Usage: srt textfile [default is s:srt.text] See new "tnt" below for trapping 1.3/2.0 software errors. tasklist (by Carolyn Scheppner) Lists all tasks in the system and their addresses. tnt (by Carolyn Scheppner) (== trap no tasks or something like that with the same letters...) Installs (or removes) a special task trap handler for all current and future system tasks and processes. Instead of Software Errors, you'll get an SRT-style debugging requester showing the name, registers, program counter, and stack pointer of the crashed task, process, or command. Lets you suspend the task if you wish. Works with (or without) Enforcer and CPU. However, turn it off before using a trap-based debugger. Usage: tnt [off] tstat (by Carolyn Scheppner) I use this a lot. It displays a whole bunch of information about any task, including what its registers, stack pointer, and PC were last time it got switched out. You can give it a CLI number or an exec task name. You can also give it a repeat time in ticks (50th's of a second) and it will monitor the task continuously. It shows all of the signal states, and Forbid/Disable nest counts, stack usage, and highest stack usage. Very handy for spotting unfreed signals, extra/missing Forbids/Disables, stack problems, memory drips, etc. And you can even use it as a poor-man's logic state analyzer - you can crudely follow the execution of any task or process by watching it's PC. wack, wack1.0 (original Wack1.0 by Carl Sassenrath, revision by Eric Cotton) Simple usage: wack [programname] Symbolic debuggers. See wack.doc. Or try ? in Wack. watchmem (by Andy Finkel) Processor based tool for spotting trashing of low memory on systems without an MMU. Usage: RUN watchemem [ file | window ] opt n [interval] (n==nocorrect) wedge (by Carolyn Scheppner) Lets you wedge into just about any system function. Call multiple times to install several wedges. Wedge LIST shows currently installed wedges. Wedge KILLALL kills all installed wedges. Wedge help gives help. Can snoop on just particular tasks/commands, or on all but particular tasks/commands. Use "lvo" with wedgeline option to create command lines for wedge. (redirect lvo to a file, then execute the file). Accompanying s/xxx.w files are sample script files (generated by lvo) for installing some wedges. Type wedge HELP for help. See wedge.doc for full docs. winlist (by Carolyn Scheppner) Lists all screens and windows in the system.