============================= MemGuard IV.00 ===========================
========================================================================

Was  written  by  Ralf  Thanner in 100% assembly language!  This release
fixes  some  disadvantages  encountered  with  the  original MemWatch II
program written by John Toebes.

================================ Purpose ===============================
========================================================================

MemGuard  IV  checks  the  first  100  longwords, in particular location
$00000004,  for  random trashing.  Discovering any change an Alert comes
up  giving you the choice to leave the vectors as they are or to restore
their  original  contents.   Unlike other tools of this kind MemGuard IV
does  not  run  as  task,  but  rather  links itself to the level 3 IRQ,
checking the vectors each frame.  Therefore virtually no processing time
is wasted, no extra memory is used (very little actually, but below 1000
bytes  - the original MemWatch II needed about 4000 bytes while running)
and  the  checking  takes  place even while task-switching is forbidden.
Furthermore  most  actions  overriding  the  vector table are discovered
almost instantly.

MemGuard IV is NOT a virus killer but a usefull tool for 'C' Freaks.  If
an  opening of a structure failed and you don't check this, your program
starts  writing  random  data  to location $0.  In most cases your Amiga
will crash after this action.
 
================================= Usage ================================
========================================================================

MemGuard  IV  can be started both from Workbench and CLI.  The following
options are recognized:

	"A" -> Activate MemGuard IV 
	"Q" -> Terminate MemGuard IV 
	"?" -> Displays a short list of instructions

Note that these options are available from Workbench, too.  A small menu
will pop up and ask you for a selection.

============================= How it works =============================
========================================================================

MemGuard  IV  allocates  a  chunk of memory, copies the checking routine
into it, links it to the Vertical Blank interrupt and exits.  As soon as
an  application  trashes  a  low-memory vector an alert of the following
form comes up:

 #====================================================================#
 #                                                                    #
 #                MemGuard IV.00  (C) 1990 by Ralf Thanner            #
 #                                                                    #
 #  Adress: $xxxx    OLD: xxxxxxxx    NEW: xxxxxxx    ASCII: 'xxxx'   #
 #                                                                    #
 #  LEFT BUTTON TO CORRECT               RIGHT BUTTON TO SAVE CHANGE  #
 #====================================================================#

 -> 'ADRESS'	displays the address having been overwritten.
 -> 'OLD'	means the old value of the adress.
 -> 'NEW'	gives the  value  it  has  received.
 -> 'ASCII'	gives the ASCII text of the new value.

 - Pressing  the  left mouse button will restore the original contents
   of the trashed location.

 - Pressing the right mouse button will leave the location as it is.

================================= Author ===============================
========================================================================

MemGuard  IV  was written by Ralf Thanner using the Kuma Seka assembler,
the original MemWatch idea was suggested from MemWatch II which had some
substancial disadvantages.

                               Ralf Thanner
                             Ellerstrasse  83
                           D-4000 Duesseldorf 1

                        Federal Republic of Germany

              MemGuard IV (C) Copyright 1990 by Ralf Thanner

             Special thanks go to Olaf Barthel & Thorsten Hopf

VERSIONS:
=========

	- MemGuard III
	  ------------

	  Thought that this was the final version...
	  No bug reports.

	- MemGuard III.a
	  --------------
          Because  the  MemGuard level3 IRQ part uses no message
          ports  (  would  slow  down  the  everything  ) I took
          530(a6)  as  my `port'.  The bad thing is that 530(a6)
          is  the  vertical  blank  frequency and programs which
          check  this  pointer  had  problems  to interprete the
          value  (PAL  /  NTSC).   I  had to switch to debug dat
          (70(a6))  which  is  currently  not  assigned  to  any
          particular function.

	  Also added a cuter CLI-Interface.

	  Shortened and improved the check routine:
	   - now needs less than 896 bytes of memory.
	   - takes only about 2-3 percent of processing
	     time. (Memwatch II took about 50%)

	- MemGuard III.c
	  --------------
          As  more  and  more Amiga users have an 68020 or 68030
          which permit to relocate the IRQ vector table MemGuard
          was  extended  to  check  the  exact  location  before
          actually redirecting the level 3 IRQ vector.

	- MemGuard III.d
	  --------------

	  Extended the `trash' display.

	  Shortened code and reprogrammed the checking routine:

	   - Checking routine has become 924 bytes long and needs 8
             raster lines.  (MemGuard III.a needed 11 lines!!)

	   - The exec.library vector is buffered internally to help
             MemGuard  to  survive a fatal change in $4.  Thanks go
             to Holger Lubitz for this clever idea.

	- MemGuard IV.00
	  --------------
          - Fat  bug  removed:   the  task  running while MemGuard
            displayed  the  low  memory  change  would  freeze and
            finally   hang  (another  nice  feature  of  the  task
            scheduler).

          - Integrated a low level task to display the alert.

          - Better Shell parameter check, will also handle tabs.

===============================  MemGuard  ================================

IMPORTANT  NOTICE:   This Program Is (c) Copyright By Ralf Thanner, But Can
Be Freely Distributed, Providing That The Following Rules Are Respected.

  - No  Change Is Made To The Program Nor To The Accompaning Documentation

  - The  Package  Is Always Distributed In Its Complete Form Consisting Of
    2 Files:  'MemGuard'  And 'MemGuard.Doc'.

  - Every  Form  Of Distribution Is Allowed And Encouraged, But No Fee Can
    Be Charged For This Program Except For, Possibly, The Cost Of Magnetic
    Media.

By  Copying,  Distributing  And/Or  Using  The  Program  You  Indicate Your
Acceptance Of The Above Rules.

============================================================================
