Short: Amiga Monitor, a monitor/debugger Author: trossi@jyu.fi (Timo Rossi) Uploader: trossi jyu fi (Timo Rossi) Version: 1.65 Architecture: m68k-amigaos Amiga Monitor v1.65 instructions ================================ This is a machine code monitor/debugger program for the Amiga. The first version was created many years ago, and many of the features and commands of the monitor were made similar to those of the monitors available for the Commodore 64. However, because the Amiga is a quite different machine many new commands and features were needed. Later versions of the monitor add many more useful features, such as expressions and variables. This version is quite close to an actual symbolic debugger as it can read symbol table information from executable files and display them in disassembly listings. It also has a built-in Scripts. Version history: 1.65 -> - loading symbols is a little faster (but not much, memory allocation limits the speed more than disk i/o) - current address is set to the starting address of '[' and '<' commands. - hunk number/offset is shown in disassembly output. - '&' (alloc-abs) doesn't allow odd addresses. - memory list shows block numbers, and they can be used in the mem-free (')' command. - added 'i'-command. - added AmigaGuide-format document. - address range syntax addr..endaddr and addr:length 1.64 -> - now works again on OS 1.3. there was a bug in version checking... 1.63 -> - now should properly count labels when displaying disassembly one screen at a time. 1.62 -> - fixed a problem with breakpoints on 68040 machines 1.61 -> - breakpoint list shows counts correctly. - better error messages with b and br commands. 1.60 -> - command line setting from monitor command line works again (was broken in 1.59) - lib/dev etc. now return zero on error only if option flag #6 is set, otherwise they fail. - added board()-function to the expression parser. - disassembler now displays short branches as '.b' and 68000 long branches as '.w'. It also understands 68020+ long branches (.l) - now supports ReadArgs() command line parsing. - rb-command now works properly 1.59 -> - added 've'-command (list autoconfig devices) - 'no auto stackreset'-option flag and 'rs'-command to reset the stack pointer - automatically initializes a0/d0 to point to an empty command line when 'l'-command is used to load a new executable file. 1.58 -> - changed window position/size logic. now monitor window should open to the visible part of a bigger-than-display screen. 1.57 -> - memory display displays only the requested memory block (the last line is not always full) 1.56 -> - memory display stops at end of hunk (disassembly already did that) - memory allocation error now stops script execution - added %s and %x formats to the mf-command 1.55 -> - uses TC_TrapData instead of TC_UserData again... - now the `(' command cannot allocate negative amounts of memory... - now the assembler understands `.b' as short branch specifier and `.w' as long branch specifier. - now frees memory properly in `u' command. 1.54 -> - added poke[w,l] commands 1.53 -> - better error reporting with scripts. 1.52 -> - scripts (exec/quit/if/goto/echo commands) - -command can be used to execute any cli/shell command. 1.51 -> - no longer lists bss hunks as split in strange ways (one lsl.l #2,d0 was missing in version 1.50) 1.50 -> - now mf-command requires space after command, else -> m fxxxx - show seglist displays info about split data/bss hunks - internal source reorganization 1.49 -> - hunk type display also shows chip/fast - some changes in symbol handling - internal source reorganization - disassembly stops at hunk end 1.48 -> - address register relative symbol support (rb-command) 1.47 -> - symbol support - variables now case sensitive - hunk type display in `sl'-command 1.46 -> - added breakpoint counts. 1.45 -> - small change in help text. 1.44 -> - added task/library/device/resource/port/semaphore list viewing commands. 1.43 -> - added formatted memory dump command - now gives error message if cannot allocate audio channels in digisound play command. - display can be stopped/started with ctrl-s/ctrl-q - spaces can be used in `set register' command before the equal sign. 1.42 -> - better option handling - understands 2.0 shell window close gadget - redirection to file now appends if possible - modulo operator now `%' 1.41 -> - fixed a bug that prevented some assembler instructions working. 1.40 -> - cd works correctly again (in 1.37..1.39 it ignored first letter of dir name...) 1.39 -> - interrupting `c' or `h' commands no longer causes error conditions. - added option flag 2 to select whether characters $a0-$ff are printable in `m' command memory dump. 1.38 -> - return from `j' or `g' commands with rts now works (was a major bug in 1.37) - input routine no longer acts strangely if shift-cursor-down or ESC-cursor/function/help is pressed. - command line automatically set if file name given on the monitor command line. - many little changes in assembler. most of these not visible to the user. 1.37 -> lots of new features... - major source code reorganization - extended checksum commands - calculator `ascii' output - memoryinfo displays hunk offsets - breakpoint numbers - added `port()' to expression parser 1.34 -> - added `narrow disassembly' option. - digisound player now defaults to play the sample once. 1.32 -> - now opens own window only if started with `run' or window width and height are given on the command line. can be used from serial terminal with AUX: shell. 1.31 -> - it is now not possible to accidentally try to assemble code to an odd address. 1.30 -> - many internal changes: global variable base register changed, uses new library call macros... 1.29 -> - added lib(), dev(), res() and task() to expression parser. 1.28 -> - modified patchtrace to work also when vector base is relocated. - small changes in initial window placement and size 1.27 -> - disk block/bootblock checksum functions and jump/go/trace etc. now check properly for odd addresses. - `odd address'-error message - skip instruction-command - Exit() now returns control back to the monitor. 1.26 -> - added hend() and nhunks-functions to the expression parser. - added command line options for window width and height - a file name to LoadSeg() can be given in the command line - new filename parse routine, now names with spaces in them must be in quotes 1.25 -> - (internal change) now uses TC_Userdata instead of TC_TrapData because TC_TrapData is marked as private in some prerelease 1.4/2.0 includes. - `'-command now first tries to start a shell, then a CLI. - disk read/write commands can be used with hard disks etc. - fixed condition code register setting with go and jump commands. 1.24 -> - corrected a small bug in the assembler/disassembler mnemonic tables (trap and tas-instructions were accidentally exchanged...) 1.23 -> - quicktrace-command - now reserves separate areas of stack for the monitor itself and the program being debugged. 1.22 -> - better handling of stack pointer with jump & go-commands - extended trace command - memory display can be used at odd addresses - generally cleaned up the source code - variables are now case-insensitive. 1.20 -> - added the `[register]'-syntax in the expression parser 1.19 -> - disassembler now uses new routines. this makes the monitor executable little smaller than 1.17 1.17 -> - monitor is now re-entrant and can be made resident - transfer no longer crashes if you transfer from location zero - default base is again hexadecimal 1.15 -> - some minor bug fixes in assembler (move sp,usp or exg Rx,sp did not work) - `memory info'-command - underscores are allowed in variable names - variable list is kept in alphabetical order 1.12 -> - expressions can now be used instead of numbers. also included calculator-command. - variables can be used in expressions. - user-defineable default number base, default is now decimal. - hunt-command no longer finds anything in the monitor code/data areas - show seglist now displays hunk numbers - chip memory allocation syntax has been changed. 1.08 -> - the monitor works ok with 68010/68020 processors. older versions left sometimes extra data in supervisor stack. 1.07 -> - The disassembler and assembler handle exg Dn,An correctly (previously the data and address register numbers were reversed) - The disassembler no more displays any invalid codes as valid instructions (On the 68000 processor, of course. The monitor does not currently support 68010/68020 extra instructions). - The pc-relative indexed addressing mode now works with the assembler. - Some little bugs were fixed in the assembler. + And/or-instructions work with a pc-relative source operand. + cmpm works with all sizes + most(if not all...) of the bugs that caused the assembler to assemble invalid instructions have been fixed. - `sp' can be used instead of `a7' in the assembler and the disassmbler displays a7 as `sp'. - The assembler now unserstands blo/bhs, slo/shs and dblo/sbhs and assembles them as bcs/bcc, scs/scc and dbcs/dbcc - The disassembler displays address-register relative offsets and short absolute addresses as signed numbers. - The monitor works now better with 60-column default font (TOPAZ60). - Disk read/write commands can be used with non-chip memory - Play digisound command has an optional parameter to specify how many times the sample is played. - A new command has been added to specify a command line for programs executed under the control of the monitor. - Breakpoints work even if you jump into the code at to breakpoint. The breakpoint does not activate until the instruction at the break position is executed, so you don't get immediately interrupted. (internally the monitor uses the trace-exception to skip the breakpoint at the first time...) 1.06 and older... - prehistoric versions...