*****************************************************************************
*                                                                           *
*   Documentation for the public release of BeerMon V0.28 30.6.90       *
*                                                                           *
*****************************************************************************

It is done. The BEERMACHT presents the BeerMon, which seems to contain some
outstanding features other known monitors don't have. The BeerMon, as well
as the sourcecode, the schematics and the documentation being part of this
distribution appear by courtesy of the original author who reserves no
rights and places all this into the PUBLIC DOMAIN. Any hints, comments, bug
reports or opinions are highly appreciated and can be made in those BBS
the BEERMACHT appears in, prefered in these german ones:

      CAESAR'S PALACE      +49 211 7270374
   or   AIRPORT         +49 211 7338332

Now let's start with the documentation...
The BeerMon is another kind of monitor compared to those of the past like
C-monitor, Amon, etc. He is a monitor of the nasty type because he makes no
use of any library, device or even Kickstart stuff, in fact you may rip out
the Kickstart rom when the BeerMon is running. The BeerMon includes a full
screen editor which is of use in most cases. So if you got the taste of gore
now here's the most important thing. If you build the hardware add-on which
is described in the schematics you are able to break any program just with
reset and you are able to access any byte of memory untouched. This works
because the hardware contains autoconfig memory in which backup of workspace
memory is moved. Into this memory expansion the monitor can be loaded by
executing the "init"-command on this disk. If you aren't able to build this
board (blame on you), you could also use the BeerMon with in some cases 
reduced capabilities. So if you have some other kind of memory expansion you
may load the BeerMon into it using the "init$c0" cli-command on this disk.
The memory should for best results be physically but not logically available
(this can be done with those $c00000 expansions in A500's by switching the
expansion off, resetting and switching it on again). If the BeerMon is
located in there you may start him just by JMPing to the startaddress for
which he has been relocated using the "hunkwiz" -relocater. Take the file
"relocate" to see how to do it. Or you set this funky bus error vector at $8
with the startaddress and the magic button (see schematics) brings you to
paradise. Well, this should only be a hint how to be more powerful than only
start the BeerMon from cli, which is also possible but not the most advanced
and consistent method. Note the fact, that the BeerMon has never been
designed for cli usage and therefor may have some disadvantages when you
return to the cli. So the choice is yours...

now here some general notes about he this release of the BeerMon...

the mouse:   enables you to set the cursor (left mousebutton). Pressing
      the right mousebutton stops any textoutput on screen, until
      it is released again.
escape key:   aborts any command (even load/save...)
tab key:   sets the cursor to next item of data in a block (skips
      spaces, is useful in directory and hexdump).
muliate:   the standard mode which you usualy would enter, without
      freezing.
freezing:   is in work, not yet finished, but seems to become funky.
the display:   currently in pal, but there will be other options in future.
the keymap:   defaults to german keymap, but can be changed with "k" 
cpu:      currently 68000 and 68010 are tested, the 68010 might get
      useful in future due to the vector base capability to trick
      some protections vomiting on the those gory pointers around
      $000xxx (full tracing of every prg becomes possible).
agnus:      new big angus chip is recognized and may be used with 1 MB
      chip memory.

well, now we come to the command list, < > means optional parameter(s)...
-----------------------------------------------------------------------------

 m <adr1> <adr2>
      gives a hexdump as well as display in ASCII of specified or
   following memory locations. Both can be edited using the cursor.

 a <adr1> <adr2>
      gives a display of specified or following memory locations
   in ASCII. This can easily be edited using the cursor.

 ? value <operation value> <operation value> <...>
      returns the result of a calculation. "value" is interpreted
   as a hexadecimal value, if it is not preceeded by a "#" sign. In
   case it is interpreted as a decimal value. The operations can be
   one of the following:
            +   add to
            -   subtract 
            *   multiply by
            /   divide by
            !   or with
            &   and with
            =   exor with
            <   shift left "value" times
            >   shift right "value" times

   The result is returned as a hexadecimal, decimal and binary value.

 c adr1 adr2 adr3
      compares the memory beginning with "adr1" and ending with
   "adr2"-1 with the memory locations starting at "adr3". The result
   is a list of all memory locations which are different.

 t adr1 adr2 adr3
      tranfers the memory beginning with "adr1" and ending with
   "adr2"-1 to the memory locations starting at "adr3"

 o adr1 adr2 word
      fills the memory beginning with "adr1" and ending with
   "adr2"-1 with specified two-byte value "word".

 e adr1 adr2 word
      performes an exor operation with the memory beginning with
   "adr1" and ending with "adr2"-1 using the specified two-byte value
   "word".

 f adr1 adr2 byte <byte> <byte> <...>
      searches for one to 14 bytes beginning with "adr1" and
   ending with "adr2"-1. The result is a list of all memory locations
   where the specified byte or sequence can be found.

 f adr1 adr2 "text"
      searches for a text of up to 14 characters length beginning
   with "adr1" and ending with "adr2"-1. The result is a list of all
   memory locations where the specified text can be found.

 F adr
      searches for all conditional branch-instructions relatively
   accessing the specified address. Any occurence is shown in
   disassembled form. Possible instructions would be:

         BEQ.S/L $xx
         BRA.S/L $xx
         BSR.S/L $xx
         DBF Dx,$xx ...

 F adr pc
      searches for all instructions accessing the specified
   address using the pc-relative addressing-mode. Any occurence is
   shown in disassembled form. Possible instructions would be:

         LEA $xx(PC),Ax
         JSR $xx(PC)
         MOVE.B/W/L $xx(PC),xx ...

 p adr1 adr2 <period>
      plays dma-sound using the chip memory locations beginning
   with "adr1" and ending with "adr2". The current address of the
   replayer is shown while playing the sound. If no period is specified
   a period of $100 is used. The length of sounddata to be played is
   not limited to 128 KB.

 r <register value>
      displays current cpu-register contents if no parameters are
   given. If register and value are specified the register is modified
   accordingly. Valid registers are:

         D0 - D7
         A0 - A7
         USP
         SSP
         SR

 g adr
      executes a subroutine at the specified memory location. The
   cpu-registers are set before execution und the resulting register
   contents are displayed after the execution. Any cpu-exception is
   controlled and the memory location wehre it occured is displayed.

 x
      exits the monitor. If the monitor has been invoked from cli,
   he returns to it. If the monitor is located in the module a reset
   is performed. If the monitor is invoked by a freeze mechanism, the
   freezed program is continued.

 X
      exits the monitor and performes a complete hardware-reset
   including clearing of the memory.

 B rgb1 rgb2
      changes the background and foreground colors of the display.

 W <adr>
      displays the current workspace locations if no parameter is
   specified. In case a parameter is specified and there is backupmem
   either in the module or in special memory areas, the workspace is
   changed to the specified chip memory location. The previous memory
   locations used as a workspace are restored using the backupmemory
   contents created while startup. If there is no module installed the
   monitor searches other memory expansion to backup memory while
   startup. Currently the following locations are scanned for memory
   expansions during startup: 

      $c00000 - $80000 - $200000 and the module memory

   If there is no backupmemory found or you pressed right mousebutton
   during startup, no backupmemory is used and therefor the original
   contents cannot be restored when changing the workspace or exiting.
   The workspace memory which is used for screenbitmap and disk drive
   dma-buffers defaults to $74000 if there is no big agnus with 1 MB
   chip memory or $f4000 if there is both. The workspace should not
   overlay with the memory in which monitor is located, which is
   possible on amigas having no fastmem or module installed.

 i
      displays the contents of the cpu-exceptionvectors and the
   dma and interrupt-registers determined during startup. The vectors
   are changed within the monitor to prevent executed program from
   creating any alerts and gurus.

 d <adr1> <adr2>
      disassembles the memory locations beginning with "adr1" and
   ending with "adr2"-1 if they are specified. The disassembly can be
   edited using the cursor. If no valid instruction is given the line
   is not accepted and not altered in memory.

 dm
      changes the way offsets are displayed in disassembly between
   decimal and hexadecimal form.

 ds
      changes the way offsets are displayed in disassembly between
   signed and unsigned form.

 n adr
      invokes the built-in line-assembler at the specified
   address. The current instruction is displayed.

 K <fn "text1|text2...">
      defines commands or command sequences to be executed when
   pressing one of the function keys. The parameter "fn" may be one
   between f1 - f10. The "|" sign results in a return key being
   written into the input buffer and is not needed for the last command
   in a sequence. If no parameters are specified the current function
   key settings are displayed.

 D <n>
      selects another diskdrive. The parameter "n" may be one
   between 0 and 3 where 0 corresponds to DF0. The current directory is
   set to the root directory. If the specified diskdrive is not
   available the drive 0 is selected. If no parameter is specified the
   current diskdrive is returned.

 dir
      returns the filelist of the current directory including size
   and date of creation. At the end of the list the numbers of free and
   used blocks are returned. If the disk is not a dos disk or if any
   other errors occur a corresponding message is returned.

 C adr d
      calculates and sets the checksum of a amigados datablock
   located at the specified address. The previous and the new checksums
   are returned.

 C adr b
      calculates and sets the checksum of a amigados bootblock
   located at the specified address. The previous and the new checksums
   are returned.

 V <sync>
      changes the syncword for all disk file and track operations
   to the specified value. The value is not checked for consistency and
   you should know which are valid. If no parameter is specified the
   current syncword setting is returned.

 l adr cyl <num>
      reads the specified number of amigados cylinders to the
   specified memory locations from the selected diskdrive beginning
   with cylinder "cyl". If no parameter "num" is specified only one
   cylinder will be read. Note the difference between cylinders and
   tracks: a disk contains 83 cylinders and 166 tracks. The length of
   one cylinder is 2 sides * 11 sectors * $200 bytes = $2c00 bytes.
   While reading tracks a list is displayed reporting which cylinder
   head and sector has just been read in to which address and which
   error occured if there has been any. The number of retries is set
   to three for each sector.

 s adr cyl <num>
      writes cylinders to the selected diskdrive.
 
 l adr sec <num> s
      reads the specified number of amigados sectors to the
   specified memory locations from the selected diskdrive beginning
   with sector "sec". If no parameter "num" is specified only one
   sector will be read.

 s adr sec <num> s
      writes sectors to the selected diskdrive.

 L filename adr
      loads an amigados file named "filename" and located in the
   current directory to the specified address "adr". The filename can
   be quoted to include spaces. Be sure that the current directory is
   set to the root directory when reading from a new disk and you have
   been in one or more subdirectories before. This can be done with the
   "CD :"-command or the "D drive"-command. While loading the current
   loadaddress is displayed. If there is any error a corresponding
   message is returned.

 S filename adr1 adr2
      saves an amigados file named "filename" into the current
   direcory. Saving begins with "adr1" and ends with "adr2"-1. While
   saving the current saveadddress is diplayed. If there is any error
   a corresponding message is returned. If the screen flashes there has
   been a readerror while saving and you should check the consistency
   of the disk structure. The time and date information is at this time
   reset to 1-Jan-78.

 cd :
      sets the root directory as the current directory.

 cd subdir
      sets the specified subdirectory named "subdir" as the
   current directory. This is only valid for the disk which is
   currently installed in the selected diskdrive. Before any file- or
   dosoperation is done with a changed disk you must return to the
   rootdirectory first.

 mk subdir
      creates a subdirectory named "subdir" in the current
   directory of the selected diskdrive.

 del "name"
      deletes a file named "name" and being located in the
   current directory of the selected diskdrive. If "name" is a
   subdirectory it is also deleted if it has been empty. 

 M
      returns the block allocation map of an amigados disk
   inserted in the current diskdrive. The "#"-sign indicates that
   a sector is currently allocated and in use. The sector of the bitmap
   is also displayed and if the disk is validated or not. No writing
   fileoperation can be performed without a validated disk.

 h start end <adr> <jmp>
      generates an object module including the data beginning with
   "start" and ending with "end"-1. A relocater is added using the
   destination address "adr" or the parameter "start" if it is not
   specified. The program is executed using the parameter "jmp" or the
   parameter "start" if it is not specified. The relocater disables
   dma transfer, interrupt masks and flags and loads the active
   stackpointer with the value $80000. The generated module can be
   edited before being saved to disk.

 b <adr>
      shows memory locations beginning with "adr" in form of a
   bitmap. Moving the mouse up increases the startaddress. The right
   mousebutton toggles between Medres and Lores screenresolution. The
   escape key exits the bitplane display. This is no IFF-searcher and
   is only intended to get a quick overview about memory contents such
   as free space, code, diskbuffers, bitplanes, bobs or sounddata.
   The memory locations need not to be in chipmemory but may be any
   valid memory location below $c80000. Take care of not displaying any
   locations without ram installed such e.g. $b00000.

 P
      toggles printer output. If a printer is connected to the
   centronics port and online. Any text output is both displayed on
   the screen and sent to the printer if this function is enabled.

 k
      toggles the current keymap between german keymap and usa
   keymap. As a defualt default setting the german keymap is used.

***  So that's all, share, spread and enjoy the word and also the disk.

