Metropoli BBS
VIEWER: spies.doc MODE: BINARY (HEX)
==============================================================================================================================================
OFFSET    00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F
----------------------------------------------------------------------------------------------------------------------------------------------
00000000  36 31 35 20 37 39 36 20  32 36 34 30 0D 0A 54 68  69 73 20 66 69 6C 65 2C  20 53 50 49 45 53 2E 44  615 796 2640This file, SPIES.D
00000020  4F 43 2C 20 69 73 20 74  68 65 20 64 6F 63 75 6D  65 6E 74 61 74 69 6F 6E  20 66 6F 72 20 74 68 65  OC, is the documentation for the
00000040  20 31 2E 30 20 76 65 72  73 69 6F 6E 73 20 6F 66  20 74 68 65 20 74 77 6F  0D 0A 70 72 6F 67 72 61   1.0 versions of the twoprogra
00000060  6D 73 20 53 50 59 2E 43  4F 4D 2C 20 61 6E 64 20  53 50 59 27 2E 43 4F 4D  20 61 6E 64 20 61 6C 73  ms SPY.COM, and SPY'.COM and als
00000080  6F 20 74 68 65 20 61 63  63 6F 6D 70 61 6E 79 69  6E 67 20 73 6F 75 72 63  65 20 66 69 6C 65 73 20  o the accompanying source files 
000000A0  53 50 59 2E 41 53 4D 0D  0A 61 6E 64 20 53 50 59  27 2E 41 53 4D 2E 0D 0A  0D 0A 54 68 65 20 70 72  SPY.ASMand SPY'.ASM.The pr
000000C0  6F 67 72 61 6D 73 20 77  65 72 65 20 77 72 69 74  74 65 6E 20 66 6F 72 20  74 68 65 20 54 53 52 20  ograms were written for the TSR 
000000E0  53 65 6D 69 6E 61 72 2F  54 75 74 6F 72 20 73 65  63 74 69 6F 6E 20 6F 66  20 74 68 65 20 4D 69 63  Seminar/Tutor section of the Mic
00000100  72 6F 73 6F 66 74 0D 0A  66 6F 72 75 6D 20 6F 66  20 43 6F 6D 70 75 53 65  72 76 65 2E 20 20 54 68  rosoftforum of CompuServe.  Th
00000120  65 79 20 61 72 65 20 73  68 61 72 65 77 61 72 65  20 70 72 6F 67 72 61 6D  73 20 77 69 74 68 20 61  ey are shareware programs with a
00000140  20 24 31 20 6D 69 6E 69  6D 75 6D 20 72 65 71 75  65 73 74 65 64 0D 0A 64  6F 6E 61 74 69 6F 6E 2E   $1 minimum requesteddonation.
00000160  20 20 49 66 20 79 6F 75  20 6C 69 6B 65 20 74 68  65 20 70 72 6F 67 72 61  6D 73 20 61 6E 64 2F 6F    If you like the programs and/o
00000180  72 20 74 68 65 20 69 64  65 61 73 20 70 72 65 73  65 6E 74 65 64 20 69 6E  20 74 68 65 20 73 6F 75  r the ideas presented in the sou
000001A0  72 63 65 0D 0A 63 6F 64  65 20 49 20 77 6F 75 6C  64 20 62 65 20 70 6C 65  61 73 65 64 20 69 66 20  rcecode I would be pleased if 
000001C0  79 6F 75 20 77 6F 75 6C  64 20 73 65 6E 64 20 6D  65 20 61 20 6D 6F 6E 65  74 61 72 79 20 6E 6F 74  you would send me a monetary not
000001E0  65 20 6F 66 20 74 68 61  6E 6B 73 2E 20 20 57 68  61 74 0D 0A 64 6F 20 79  6F 75 20 67 65 74 20 66  e of thanks.  Whatdo you get f
00000200  6F 72 20 79 6F 75 72 20  24 31 3F 20 20 4E 6F 74  20 6D 75 63 68 20 74 6F  20 62 65 20 73 75 72 65  or your $1?  Not much to be sure
00000220  2E 20 20 49 6E 20 66 61  63 74 20 65 61 63 68 20  24 31 20 74 68 61 74 20  79 6F 75 20 73 65 6E 64  .  In fact each $1 that you send
00000240  0D 0A 77 69 6C 6C 20 62  65 20 61 20 76 6F 74 65  20 66 6F 72 20 61 6E 20  65 6E 68 61 6E 63 65 64  will be a vote for an enhanced
00000260  20 76 65 72 73 69 6F 6E  20 6F 66 20 61 20 53 50  59 20 70 72 6F 67 72 61  6D 20 74 68 61 74 20 77   version of a SPY program that w
00000280  69 6C 6C 20 62 65 20 77  72 69 74 74 65 6E 0D 0A  63 6F 6E 74 69 6E 67 65  6E 74 20 75 70 6F 6E 20  ill be writtencontingent upon 
000002A0  74 68 65 20 6E 75 6D 62  65 72 20 6F 66 20 24 31  27 73 20 72 65 63 65 69  76 65 64 2E 20 20 28 49  the number of $1's received.  (I
000002C0  74 20 74 6F 6F 20 77 6F  75 6C 64 20 62 65 20 73  68 61 72 65 77 61 72 65  20 61 6E 64 0D 0A 73 6F  t too would be shareware andso
000002E0  75 72 63 65 20 63 6F 64  65 20 77 6F 75 6C 64 20  62 65 20 6D 61 64 65 20  61 76 61 69 6C 61 62 6C  urce code would be made availabl
00000300  65 20 74 6F 20 74 68 6F  73 65 20 73 65 6E 64 69  6E 67 20 69 6E 20 70 61  79 6D 65 6E 74 73 29 2E  e to those sending in payments).
00000320  0D 0A 0D 0A 59 6F 75 20  6D 61 79 20 73 65 6E 64  20 64 6F 6E 61 74 69 6F  6E 73 20 74 6F 3A 0D 0A  You may send donations to:
00000340  0D 0A 20 20 20 43 68 61  72 6C 65 73 20 4C 61 7A  6F 20 49 49 49 0D 0A 20  20 20 50 2E 20 4F 2E 20     Charles Lazo III   P. O. 
00000360  42 6F 78 20 32 33 31 32  0D 0A 20 20 20 48 6F 68  65 6E 77 61 6C 64 2C 20  54 4E 20 33 38 34 36 32  Box 2312   Hohenwald, TN 38462
00000380  0D 0A 0D 0A 4D 79 20 43  6F 6D 70 75 53 65 72 76  65 20 75 73 65 72 20 49  44 20 69 73 20 37 32 32  My CompuServe user ID is 722
000003A0  31 30 2C 31 37 2E 0D 0A  0D 0A 54 68 65 20 6F 62  6A 65 63 74 20 6F 66 20  74 68 65 73 65 20 70 72  10,17.The object of these pr
000003C0  6F 67 72 61 6D 73 20 69  73 20 74 6F 20 64 65 6D  6F 6E 73 74 72 61 74 65  20 74 77 6F 20 6D 65 74  ograms is to demonstrate two met
000003E0  68 6F 64 73 20 74 68 61  74 20 61 6C 6C 6F 77 20  61 20 70 72 6F 67 72 61  6D 0D 0A 74 6F 20 64 65  hods that allow a programto de
00000400  74 65 63 74 20 69 66 20  69 74 20 68 61 73 20 62  65 65 6E 20 6C 6F 61 64  65 64 20 61 73 20 61 20  tect if it has been loaded as a 
00000420  54 53 52 20 62 65 66 6F  72 65 20 61 6E 64 20 69  66 20 73 6F 20 74 6F 20  6F 70 74 69 6F 6E 61 6C  TSR before and if so to optional
00000440  6C 79 20 70 61 73 73 0D  0A 70 61 72 61 6D 65 74  65 72 73 20 74 6F 20 74  68 65 20 70 72 65 76 69  ly passparameters to the previ
00000460  6F 75 73 20 6C 6F 61 64  2E 20 20 49 6E 20 61 64  64 69 74 69 6F 6E 20 74  6F 20 6D 61 6B 69 6E 67  ous load.  In addition to making
00000480  20 74 68 65 20 70 72 6F  67 72 61 6D 73 20 61 73  20 73 69 6D 70 6C 65 0D  0A 61 73 20 70 6F 73 73   the programs as simpleas poss
000004A0  69 62 6C 65 20 69 74 20  77 61 73 20 61 6C 73 6F  20 64 65 73 69 72 65 64  20 74 6F 20 6D 61 6B 65  ible it was also desired to make
000004C0  20 74 68 65 6D 20 75 73  65 66 75 6C 20 69 6E 20  74 68 65 69 72 20 6F 77  6E 20 72 69 67 68 74 2E   them useful in their own right.
000004E0  0D 0A 57 68 65 74 68 65  72 20 49 20 68 61 76 65  20 62 65 65 6E 20 73 75  63 63 65 73 73 66 75 6C  Whether I have been successful
00000500  20 69 6E 20 74 68 69 73  20 65 6E 64 65 61 76 6F  72 20 77 69 6C 6C 20 62  65 20 75 70 20 74 6F 20   in this endeavor will be up to 
00000520  79 6F 75 20 74 6F 20 64  65 63 69 64 65 2E 0D 0A  0D 0A 42 6F 74 68 20 53  50 59 2E 43 4F 4D 20 61  you to decide.Both SPY.COM a
00000540  6E 64 20 53 50 59 27 2E  43 4F 4D 20 62 65 68 61  76 65 20 69 6E 20 65 78  61 63 74 6C 79 20 74 68  nd SPY'.COM behave in exactly th
00000560  65 20 73 61 6D 65 20 77  61 79 20 61 73 20 66 61  72 20 61 73 20 74 68 65  20 75 73 65 72 20 69 73  e same way as far as the user is
00000580  0D 0A 63 6F 6E 63 65 72  6E 65 64 20 28 65 78 63  65 70 74 2C 20 6F 66 20  63 6F 75 72 73 65 2C 20  concerned (except, of course, 
000005A0  66 6F 72 20 74 68 65 20  63 6F 70 79 72 69 67 68  74 20 61 6E 64 20 73 79  6E 74 61 78 20 6E 6F 74  for the copyright and syntax not
000005C0  69 63 65 73 29 2E 20 20  52 75 6E 6E 69 6E 67 0D  0A 74 68 65 20 53 50 59  20 70 72 6F 67 72 61 6D  ices).  Runningthe SPY program
000005E0  20 77 69 74 68 6F 75 74  20 70 61 72 61 6D 65 74  65 72 73 20 28 6F 72 20  62 79 20 6D 61 6B 69 6E   without parameters (or by makin
00000600  67 20 61 6E 20 65 72 72  6F 72 20 69 6E 20 73 79  6E 74 61 78 29 20 79 6F  75 20 77 69 6C 6C 0D 0A  g an error in syntax) you will
00000620  73 65 65 3A 0D 0A 0D 0A  53 50 59 20 43 6F 70 79  72 69 67 68 74 20 28 43  29 20 31 39 38 37 20 62  see:SPY Copyright (C) 1987 b
00000640  79 20 43 68 61 72 6C 65  73 20 4C 61 7A 6F 20 49  49 49 2C 20 76 31 2E 30  0D 0A 0D 0A 53 50 59 20  y Charles Lazo III, v1.0SPY 
00000660  73 79 6E 74 61 78 3A 20  20 53 50 59 20 78 78 78  78 3A 79 79 79 79 20 4C  20 7A 7A 7A 0D 0A 0D 0A  syntax:  SPY xxxx:yyyy L zzz
00000680  57 68 65 72 65 20 78 78  78 78 2C 20 61 6E 64 20  79 79 79 79 20 61 72 65  20 68 65 78 61 64 65 63  Where xxxx, and yyyy are hexadec
000006A0  69 6D 61 6C 20 6E 75 6D  62 65 72 73 20 75 70 20  74 6F 20 66 6F 75 72 20  64 69 67 69 74 73 20 69  imal numbers up to four digits i
000006C0  6E 20 6C 65 6E 67 74 68  20 61 6E 64 0D 0A 7A 7A  7A 20 69 73 20 61 20 6F  6E 65 20 74 6F 20 74 68  n length andzzz is a one to th
000006E0  72 65 65 20 64 69 67 69  74 20 68 65 78 61 64 65  63 69 6D 61 6C 20 6E 75  6D 62 65 72 2E 20 20 53  ree digit hexadecimal number.  S
00000700  50 59 20 77 69 6C 6C 20  6D 6F 6E 69 74 6F 72 20  74 68 65 20 73 65 67 6D  65 6E 74 2D 0D 0A 6F 66  PY will monitor the segment-of
00000720  66 73 65 74 20 72 65 67  69 6F 6E 20 78 78 78 78  3A 79 79 79 79 20 66 6F  72 20 61 20 6C 65 6E 67  fset region xxxx:yyyy for a leng
00000740  74 68 20 6F 66 20 7A 7A  7A 20 62 79 74 65 73 20  61 6E 64 20 72 65 70 6F  72 74 20 74 6F 20 74 68  th of zzz bytes and report to th
00000760  65 20 75 73 65 72 20 77  69 74 68 20 61 0D 0A 6E  75 6D 62 65 72 20 6F 66  20 62 65 65 70 73 20 65  e user with anumber of beeps e
00000780  71 75 61 6C 20 74 6F 20  74 68 65 20 6E 75 6D 62  65 72 20 6F 66 20 62 79  74 65 73 20 63 68 61 6E  qual to the number of bytes chan
000007A0  67 65 64 20 69 6E 20 74  68 61 74 20 72 65 67 69  6F 6E 20 69 66 20 61 6E  64 20 77 68 65 6E 0D 0A  ged in that region if and when
000007C0  61 6E 79 20 61 72 65 20  63 68 61 6E 67 65 64 2E  0D 0A 0D 0A 54 68 65 20  6D 65 74 68 6F 64 20 6F  any are changed.The method o
000007E0  66 20 70 61 72 61 6D 65  74 65 72 20 73 65 74 74  69 6E 67 20 66 6F 72 20  53 50 59 20 69 73 20 74  f parameter setting for SPY is t
00000800  68 65 20 73 61 6D 65 20  61 73 20 6F 6E 65 20 6F  66 20 74 68 65 20 6D 65  74 68 6F 64 73 20 6F 66  he same as one of the methods of
00000820  0D 0A 73 70 65 63 69 66  79 69 6E 67 20 61 20 72  61 6E 67 65 20 66 6F 72  20 44 45 42 55 47 2C 20  specifying a range for DEBUG, 
00000840  69 2E 65 2E 2C 20 73 65  67 6D 65 6E 74 3A 6F 66  66 73 65 74 20 4C 20 73  69 7A 65 2E 20 20 41 66  i.e., segment:offset L size.  Af
00000860  74 65 72 20 74 68 65 20  70 61 72 61 6D 65 74 65  72 0D 0A 73 74 72 69 6E  67 20 79 6F 75 20 6D 61  ter the parameterstring you ma
00000880  79 20 6F 70 74 69 6F 6E  61 6C 6C 79 20 70 6C 61  63 65 20 63 6F 6D 6D 65  6E 74 73 20 6F 6E 20 74  y optionally place comments on t
000008A0  68 65 20 73 61 6D 65 20  6C 69 6E 65 20 62 79 20  70 72 65 63 65 64 69 6E  67 20 74 68 65 6D 20 77  he same line by preceding them w
000008C0  69 74 68 0D 0A 61 20 73  65 6D 69 63 6F 6C 6F 6E  20 28 6D 61 79 20 62 65  20 75 73 65 66 75 6C 20  itha semicolon (may be useful 
000008E0  66 6F 72 20 53 50 59 20  69 6E 20 62 61 74 63 68  20 66 69 6C 65 73 29 2E  20 20 54 68 65 20 70 61  for SPY in batch files).  The pa
00000900  72 61 6D 65 74 65 72 20  73 74 72 69 6E 67 20 6D  61 79 20 62 65 0D 0A 65  6E 74 65 72 65 64 20 69  rameter string may beentered i
00000920  6E 20 61 6E 79 20 63 6F  6D 62 69 6E 61 74 69 6F  6E 20 6F 66 20 75 70 70  65 72 20 61 6E 64 20 6C  n any combination of upper and l
00000940  6F 77 65 72 20 63 61 73  65 2C 20 61 6E 64 20 74  61 62 73 20 6F 72 20 73  70 61 63 65 73 20 6D 61  ower case, and tabs or spaces ma
00000960  79 20 62 65 0D 0A 73 70  72 69 6E 6B 6C 65 64 20  6C 69 62 65 72 61 6C 6C  79 20 77 69 74 68 69 6E  y besprinkled liberally within
00000980  20 69 74 20 65 78 63 65  70 74 20 74 68 61 74 20  68 65 78 20 6E 75 6D 62  65 72 73 20 6D 61 79 20   it except that hex numbers may 
000009A0  6E 6F 74 20 62 65 20 62  72 6F 6B 65 6E 20 75 70  2E 0D 0A 0D 0A 54 68 65  20 6C 65 6E 67 74 68 20  not be broken up.The length 
000009C0  6F 66 20 74 68 65 20 73  70 79 20 72 65 67 69 6F  6E 20 68 61 73 20 62 65  65 6E 20 61 72 62 69 74  of the spy region has been arbit
000009E0  72 61 72 69 6C 79 20 6C  69 6D 69 74 65 64 20 74  6F 20 74 68 72 65 65 20  68 65 78 20 64 69 67 69  rarily limited to three hex digi
00000A00  74 73 2E 0D 0A 54 68 69  73 20 61 6C 6C 6F 77 73  20 66 6F 72 20 75 70 20  74 6F 20 34 30 39 35 20  ts.This allows for up to 4095 
00000A20  62 79 74 65 73 20 74 6F  20 62 65 20 6D 6F 6E 69  74 6F 72 65 64 20 61 74  20 6F 6E 63 65 20 66 6F  bytes to be monitored at once fo
00000A40  72 20 63 68 61 6E 67 65  73 20 77 68 69 6C 65 20  53 50 59 0D 0A 69 73 20  6C 6F 61 64 65 64 2E 20  r changes while SPYis loaded. 
00000A60  20 54 68 69 73 20 6D 61  78 69 6D 75 6D 20 76 61  6C 75 65 20 61 6C 73 6F  20 64 65 74 65 72 6D 69   This maximum value also determi
00000A80  6E 65 73 20 68 6F 77 20  6D 75 63 68 20 6D 65 6D  6F 72 79 20 74 68 61 74  20 53 50 59 20 77 69 6C  nes how much memory that SPY wil
00000AA0  6C 0D 0A 72 65 73 65 72  76 65 20 66 6F 72 20 74  68 65 20 73 70 79 20 62  75 66 66 65 72 2C 20 61  lreserve for the spy buffer, a
00000AC0  6E 20 61 72 65 61 20 6F  66 20 6D 65 6D 6F 72 79  20 74 68 61 74 20 77 69  6C 6C 20 63 6F 6E 74 61  n area of memory that will conta
00000AE0  69 6E 20 61 20 63 6F 70  79 20 6F 66 20 74 68 65  0D 0A 72 65 67 69 6F 6E  20 6F 66 20 6D 65 6D 6F  in a copy of theregion of memo
00000B00  72 79 20 74 6F 20 62 65  20 73 70 69 65 64 20 75  70 6F 6E 2E 20 20 45 61  63 68 20 74 69 6D 65 20  ry to be spied upon.  Each time 
00000B20  61 20 63 68 61 6E 67 65  20 6F 63 63 75 72 73 20  69 6E 20 74 68 65 20 73  70 79 20 72 65 67 69 6F  a change occurs in the spy regio
00000B40  6E 0D 0A 63 68 6F 73 65  6E 20 62 79 20 74 68 65  20 75 73 65 72 20 6F 6E  20 74 68 65 20 63 6F 6D  nchosen by the user on the com
00000B60  6D 61 6E 64 20 6C 69 6E  65 20 53 50 59 20 77 69  6C 6C 20 69 6E 63 72 65  6D 65 6E 74 20 61 20 63  mand line SPY will increment a c
00000B80  6F 75 6E 74 65 72 20 61  6E 64 20 75 70 64 61 74  65 0D 0A 69 74 73 20 63  6F 70 79 20 6F 66 20 74  ounter and updateits copy of t
00000BA0  68 65 20 72 65 67 69 6F  6E 20 77 68 69 63 68 20  69 74 20 75 73 65 73 20  66 6F 72 20 63 6F 6D 70  he region which it uses for comp
00000BC0  61 72 69 73 6F 6E 2E 20  20 54 68 69 73 20 61 63  74 69 6F 6E 20 74 61 6B  65 73 20 70 6C 61 63 65  arison.  This action takes place
00000BE0  0D 0A 69 6E 20 61 20 6D  6F 64 69 66 69 65 64 20  69 6E 74 65 72 72 75 70  74 20 38 20 28 63 6C 6F  in a modified interrupt 8 (clo
00000C00  63 6B 29 20 68 61 6E 64  6C 65 72 2E 20 20 49 6E  20 74 68 65 20 6E 65 77  20 69 6E 74 20 38 20 72  ck) handler.  In the new int 8 r
00000C20  6F 75 74 69 6E 65 20 69  66 20 74 68 69 73 0D 0A  63 6F 75 6E 74 65 72 20  69 73 20 6E 6F 6E 20 7A  outine if thiscounter is non z
00000C40  65 72 6F 2C 20 74 68 65  6E 20 74 68 65 20 73 70  65 61 6B 65 72 20 77 69  6C 6C 20 62 65 20 74 75  ero, then the speaker will be tu
00000C60  72 6E 65 64 20 6F 6E 20  61 6E 64 20 74 68 65 20  63 6F 75 6E 74 65 72 20  77 69 6C 6C 20 62 65 0D  rned on and the counter will be
00000C80  0A 64 65 63 72 65 6D 65  6E 74 65 64 2E 20 20 49  66 20 74 68 65 20 73 70  65 61 6B 65 72 20 69 73  decremented.  If the speaker is
00000CA0  20 6F 6E 20 74 68 65 6E  20 69 74 20 69 73 20 74  75 72 6E 65 64 20 6F 66  66 20 61 74 20 74 68 65   on then it is turned off at the
00000CC0  20 6E 65 78 74 20 69 6E  74 20 38 2E 0D 0A 41 20  64 65 6C 61 79 20 63 6F  75 6E 74 65 72 20 69 73   next int 8.A delay counter is
00000CE0  20 73 65 74 20 61 66 74  65 72 20 65 61 63 68 20  62 65 65 70 20 61 6E 64  20 69 73 20 64 65 63 72   set after each beep and is decr
00000D00  65 6D 65 6E 74 65 64 20  74 68 65 72 65 61 66 74  65 72 20 61 74 20 65 61  63 68 0D 0A 69 6E 74 20  emented thereafter at eachint 
00000D20  38 20 74 69 63 6B 2E 20  20 41 6E 6F 74 68 65 72  20 62 65 65 70 20 77 69  6C 6C 20 6E 6F 74 20 6F  8 tick.  Another beep will not o
00000D40  63 63 75 72 20 75 6E 74  69 6C 20 74 68 65 20 64  65 6C 61 79 20 63 6F 75  6E 74 65 72 20 69 73 20  ccur until the delay counter is 
00000D60  64 65 63 72 65 6D 65 6E  74 65 64 0D 0A 74 6F 20  7A 65 72 6F 2E 20 20 54  68 75 73 20 74 68 65 20  decrementedto zero.  Thus the 
00000D80  62 65 65 70 73 20 65 6D  69 74 74 65 64 20 62 79  20 53 50 59 20 6F 63 63  75 72 20 61 74 20 69 6E  beeps emitted by SPY occur at in
00000DA0  74 65 72 76 61 6C 73 20  77 68 69 63 68 20 64 65  70 65 6E 64 20 75 70 6F  6E 0D 0A 74 68 65 20 76  tervals which depend uponthe v
00000DC0  61 6C 75 65 20 73 65 74  20 69 6E 74 6F 20 74 68  65 20 64 65 6C 61 79 20  63 6F 75 6E 74 65 72 2E  alue set into the delay counter.
00000DE0  20 20 54 68 65 20 6D 61  78 69 6D 75 6D 20 73 69  7A 65 20 6F 66 20 74 68  65 20 73 70 79 20 72 65    The maximum size of the spy re
00000E00  67 69 6F 6E 20 61 6E 64  0D 0A 74 68 65 20 76 61  6C 75 65 20 6F 66 20 74  68 65 20 64 65 6C 61 79  gion andthe value of the delay
00000E20  20 69 6E 74 65 72 76 61  6C 20 63 61 6E 20 62 65  20 63 68 61 6E 67 65 64  20 69 66 20 74 68 65 20   interval can be changed if the 
00000E40  63 6F 6E 73 74 61 6E 74  73 20 77 68 69 63 68 20  63 6F 6E 74 72 6F 6C 0D  0A 74 68 65 6D 20 61 72  constants which controlthem ar
00000E60  65 20 61 6C 74 65 72 65  64 20 69 6E 20 74 68 65  20 53 50 59 2E 41 53 4D  20 66 69 6C 65 20 61 6E  e altered in the SPY.ASM file an
00000E80  64 20 74 68 65 20 70 72  6F 67 72 61 6D 20 69 73  20 72 65 61 73 73 65 6D  62 6C 65 64 2C 20 72 65  d the program is reassembled, re
00000EA0  6C 69 6E 6B 65 64 0D 0A  61 6E 64 20 70 61 73 73  65 64 20 74 68 72 6F 75  67 68 20 74 68 65 20 45  linkedand passed through the E
00000EC0  58 45 32 42 49 4E 20 70  72 6F 67 72 61 6D 2E 20  20 4F 6E 65 20 6D 6F 72  65 20 74 68 69 6E 67 20  XE2BIN program.  One more thing 
00000EE0  74 68 61 74 20 63 61 6E  20 62 65 20 65 61 73 69  6C 79 0D 0A 63 68 61 6E  67 65 64 20 69 73 20 74  that can be easilychanged is t
00000F00  68 65 20 66 72 65 71 75  65 6E 63 79 20 6F 66 20  74 68 65 20 74 6F 6E 65  20 65 6D 69 74 74 65 64  he frequency of the tone emitted
00000F20  20 62 79 20 53 50 59 2E  20 20 54 68 65 20 64 65  66 61 75 6C 74 20 66 72  65 71 75 65 6E 63 79 20   by SPY.  The default frequency 
00000F40  69 73 0D 0A 6A 75 73 74  20 61 62 6F 75 74 20 32  2C 30 30 30 20 68 65 72  74 7A 2E 0D 0A 0D 0A 53  isjust about 2,000 hertz.S
00000F60  65 74 74 69 6E 67 20 53  50 59 27 73 20 73 69 67  68 74 73 20 75 70 6F 6E  20 61 20 76 6F 6C 61 74  etting SPY's sights upon a volat
00000F80  69 6C 65 20 72 65 67 69  6F 6E 20 63 61 6E 20 62  65 63 6F 6D 65 20 64 69  73 74 72 61 63 74 69 6E  ile region can become distractin
00000FA0  67 20 73 6F 20 69 74 20  69 73 0D 0A 77 65 6C 63  6F 6D 65 20 6B 6E 6F 77  6C 65 64 67 65 20 74 68  g so it iswelcome knowledge th
00000FC0  61 74 20 79 6F 75 20 63  61 6E 20 73 68 75 74 20  69 74 20 75 70 20 6D 65  72 65 6C 79 20 62 79 20  at you can shut it up merely by 
00000FE0  70 6F 69 6E 74 69 6E 67  20 69 74 20 74 6F 20 61  6E 6F 74 68 65 72 0D 0A  72 65 67 69 6F 6E 20 6F  pointing it to anotherregion o
00001000  66 20 6D 65 6D 6F 72 79  2E 20 20 49 20 73 75 67  67 65 73 74 20 70 6F 69  6E 74 69 6E 67 20 69 74  f memory.  I suggest pointing it
00001020  20 74 6F 20 52 4F 4D 2C  20 65 2E 67 2E 2C 20 53  50 59 20 46 38 30 30 3A  30 20 4C 31 2E 20 20 54   to ROM, e.g., SPY F800:0 L1.  T
00001040  68 75 73 0D 0A 74 6F 20  62 65 20 65 78 70 6C 69  63 69 74 20 61 62 6F 75  74 20 74 68 65 20 6E 61  husto be explicit about the na
00001060  74 75 72 65 20 6F 66 20  53 50 59 27 73 20 6F 70  65 72 61 74 69 6F 6E 20  61 66 74 65 72 20 62 65  ture of SPY's operation after be
00001080  69 6E 67 20 6C 6F 61 64  65 64 20 6F 6E 63 65 0D  0A 62 65 66 6F 72 65 3A  20 20 53 50 59 20 64 65  ing loaded oncebefore:  SPY de
000010A0  74 65 63 74 73 20 61 20  70 72 65 76 69 6F 75 73  20 6C 6F 61 64 20 6F 66  20 69 74 73 65 6C 66 20  tects a previous load of itself 
000010C0  61 73 20 61 20 54 53 52  2C 20 61 6E 64 20 69 66  20 74 68 65 72 65 20 77  65 72 65 20 61 6E 79 0D  as a TSR, and if there were any
000010E0  0A 70 61 72 61 6D 65 74  65 72 73 20 6F 6E 20 74  68 65 20 63 6F 6D 6D 61  6E 64 20 6C 69 6E 65 20  parameters on the command line 
00001100  6F 66 20 74 68 65 20 63  75 72 72 65 6E 74 20 6C  6F 61 64 2C 20 74 68 65  6E 20 74 68 65 20 63 6F  of the current load, then the co
00001120  64 65 20 69 6E 20 73 70  79 20 77 69 6C 6C 0D 0A  70 61 73 73 20 74 68 65  73 65 20 70 61 72 61 6D  de in spy willpass these param
00001140  65 74 65 72 73 20 74 6F  20 74 68 65 20 63 6F 64  65 20 6F 66 20 74 68 65  20 70 72 65 76 69 6F 75  eters to the code of the previou
00001160  73 20 6C 6F 61 64 20 61  6E 64 20 74 68 65 79 20  77 69 6C 6C 20 62 65 20  61 63 74 65 64 0D 0A 75  s load and they will be actedu
00001180  70 6F 6E 20 61 73 20 69  66 20 53 50 59 20 69 73  20 62 65 69 6E 67 20 6C  6F 61 64 65 64 20 66 6F  pon as if SPY is being loaded fo
000011A0  72 20 74 68 65 20 66 69  72 73 74 20 74 69 6D 65  2E 20 20 28 54 68 69 73  20 69 73 20 77 68 79 20  r the first time.  (This is why 
000011C0  53 50 59 20 77 69 6C 6C  20 73 61 76 65 0D 0A 61  20 62 75 66 66 65 72 20  6F 66 20 34 30 39 35 20  SPY will savea buffer of 4095 
000011E0  62 79 74 65 73 20 5B 62  79 20 64 65 66 61 75 6C  74 5D 20 65 76 65 6E 20  69 66 20 79 6F 75 20 6F  bytes [by default] even if you o
00001200  6E 6C 79 20 61 73 6B 20  66 6F 72 20 74 68 65 20  6D 6F 6E 69 74 6F 72 69  6E 67 20 6F 66 0D 0A 61  nly ask for the monitoring ofa
00001220  20 73 69 6E 67 6C 65 20  62 79 74 65 2E 29 0D 0A  0D 0A 4B 65 65 70 69 6E  67 20 74 68 65 20 70 72   single byte.)Keeping the pr
00001240  6F 67 72 61 6D 20 73 69  6D 70 6C 65 20 68 61 73  20 6C 65 61 64 20 74 6F  20 61 20 6E 75 6D 62 65  ogram simple has lead to a numbe
00001260  72 20 6F 66 20 63 6F 6D  70 72 6F 6D 69 73 65 73  20 69 6E 20 69 74 73 20  6F 70 65 72 61 74 69 6F  r of compromises in its operatio
00001280  6E 2E 0D 0A 4F 6E 65 20  75 6E 64 65 73 69 72 61  62 6C 65 20 72 65 73 75  6C 74 20 69 73 20 73 65  n.One undesirable result is se
000012A0  67 6D 65 6E 74 20 77 72  61 70 20 61 72 6F 75 6E  64 2E 20 20 49 66 20 79  6F 75 20 77 65 72 65 20  gment wrap around.  If you were 
000012C0  74 6F 20 72 75 6E 20 53  50 59 20 61 73 3A 0D 0A  0D 0A 20 20 20 20 20 20  20 20 20 20 20 20 20 20  to run SPY as:              
000012E0  20 20 20 20 20 20 20 20  20 20 20 20 20 53 50 59  20 30 3A 66 66 30 30 20  4C 20 32 30 30 2C 0D 0A               SPY 0:ff00 L 200,
00001300  0D 0A 74 68 65 6E 20 69  6E 73 74 65 61 64 20 6F  66 20 6D 6F 6E 69 74 6F  72 69 6E 67 20 74 68 65  then instead of monitoring the
00001320  20 35 31 32 20 62 79 74  65 73 20 66 72 6F 6D 20  66 66 30 3A 30 20 74 6F  20 66 66 30 3A 32 30 30   512 bytes from ff0:0 to ff0:200
00001340  20 61 73 20 79 6F 75 20  6D 69 67 68 74 0D 0A 65  78 70 65 63 74 2C 20 79  6F 75 20 77 6F 75 6C 64   as you mightexpect, you would
00001360  20 69 6E 73 74 65 61 64  20 62 65 20 6B 65 65 70  69 6E 67 20 74 61 62 73  20 6F 6E 20 74 68 65 20   instead be keeping tabs on the 
00001380  32 35 36 20 62 79 74 65  73 20 66 72 6F 6D 20 66  66 30 3A 30 20 74 6F 20  66 66 30 3A 66 66 0D 0A  256 bytes from ff0:0 to ff0:ff
000013A0  61 6E 64 20 61 6C 73 6F  20 74 68 65 20 32 35 36  20 62 79 74 65 73 20 61  74 20 74 68 65 20 74 6F  and also the 256 bytes at the to
000013C0  70 20 6F 66 20 74 68 69  73 20 73 65 67 6D 65 6E  74 20 66 72 6F 6D 20 30  3A 30 20 74 6F 20 30 3A  p of this segment from 0:0 to 0:
000013E0  66 66 2E 20 20 49 6E 73  74 65 61 64 0D 0A 65 6E  74 65 72 20 74 68 69 73  20 61 73 3A 0D 0A 0D 0A  ff.  Insteadenter this as:
00001400  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 53 50 59 20 66                             SPY f
00001420  66 30 3A 30 20 4C 20 32  30 30 2E 0D 0A 0D 0A 57  68 69 6C 65 20 44 45 42  55 47 20 77 69 6C 6C 20  f0:0 L 200.While DEBUG will 
00001440  66 6C 61 67 20 74 68 69  73 20 73 6F 72 74 20 6F  66 20 63 61 72 65 6C 65  73 73 6E 65 73 73 20 77  flag this sort of carelessness w
00001460  69 74 68 20 61 6E 20 65  72 72 6F 72 2C 20 53 50  59 20 77 69 6C 6C 20 61  63 63 65 70 74 0D 0A 69  ith an error, SPY will accepti
00001480  74 20 61 6E 64 20 77 72  61 70 20 74 68 65 20 73  65 67 6D 65 6E 74 20 77  69 74 68 6F 75 74 20 63  t and wrap the segment without c
000014A0  6F 6D 70 6C 61 69 6E 74  2E 0D 0A 0D 0A 42 65 66  6F 72 65 20 49 20 62 65  67 69 6E 20 63 6F 6D 6D  omplaint.Before I begin comm
000014C0  65 6E 74 20 6F 6E 20 74  68 65 20 64 65 74 61 69  6C 73 20 6F 66 20 74 68  65 20 73 6F 75 72 63 65  ent on the details of the source
000014E0  20 63 6F 64 65 20 74 68  61 74 20 61 6C 6C 6F 77  73 20 73 65 6E 73 69 6E  67 20 61 0D 0A 70 72 65   code that allows sensing apre
00001500  76 69 6F 75 73 20 70 72  6F 67 72 61 6D 20 6C 6F  61 64 20 49 20 77 6F 75  6C 64 20 6C 69 6B 65 20  vious program load I would like 
00001520  74 6F 20 6D 65 6E 74 69  6F 6E 20 61 20 66 65 77  20 6F 66 20 74 68 65 20  64 69 73 63 6F 76 65 72  to mention a few of the discover
00001540  69 65 73 20 74 68 61 74  20 49 0D 0A 68 61 76 65  20 6D 61 64 65 20 73 6E  6F 6F 70 69 6E 67 20 61  ies that Ihave made snooping a
00001560  72 6F 75 6E 64 20 77 69  74 68 20 53 50 59 2E 20  20 54 68 65 72 65 20 69  73 20 61 20 31 36 20 62  round with SPY.  There is a 16 b
00001580  79 74 65 20 72 65 67 69  6F 6E 20 69 6E 20 74 68  65 20 44 4F 53 20 64 61  74 61 0D 0A 73 65 63 74  yte region in the DOS datasect
000015A0  69 6F 6E 20 6F 66 20 6D  65 6D 6F 72 79 20 63 61  6C 6C 65 64 20 74 68 65  20 49 43 41 20 28 49 6E  ion of memory called the ICA (In
000015C0  74 72 61 2D 41 70 70 6C  69 63 61 74 69 6F 6E 20  43 6F 6D 6D 75 6E 69 63  61 74 69 6F 6E 73 20 41  tra-Application Communications A
000015E0  72 65 61 29 2E 20 20 4E  6F 74 0D 0A 6D 61 6E 79  20 70 72 6F 67 72 61 6D  73 20 75 73 65 20 74 68  rea).  Notmany programs use th
00001600  69 73 20 72 65 67 69 6F  6E 20 61 6E 64 20 6F 6E  65 20 67 6F 6F 64 20 61  70 70 6C 69 63 61 74 69  is region and one good applicati
00001620  6F 6E 20 6F 66 20 53 50  59 20 69 73 20 74 6F 20  6D 6F 6E 69 74 6F 72 20  69 74 0D 0A 74 6F 20 64  on of SPY is to monitor itto d
00001640  65 74 65 72 6D 69 6E 65  20 77 68 69 63 68 20 70  72 6F 67 72 61 6D 73 20  64 6F 20 75 73 65 20 69  etermine which programs do use i
00001660  74 2E 20 20 49 20 77 61  73 20 73 75 72 70 72 69  73 65 64 20 74 6F 20 64  69 73 63 6F 76 65 72 20  t.  I was surprised to discover 
00001680  74 68 61 74 20 42 52 49  45 46 2C 0D 0A 74 68 65  20 65 64 69 74 6F 72 20  77 68 69 63 68 20 49 20  that BRIEF,the editor which I 
000016A0  61 6D 20 75 73 69 6E 67  20 74 6F 20 70 75 74 20  74 68 69 73 20 73 74 75  66 66 20 74 6F 67 65 74  am using to put this stuff toget
000016C0  68 65 72 2C 20 75 73 65  73 20 74 68 69 73 20 72  65 67 69 6F 6E 2E 20 20  57 68 79 0D 0A 49 20 64  her, uses this region.  WhyI d
000016E0  6F 6E 27 74 20 6B 6E 6F  77 2E 20 20 54 6F 20 6D  6F 6E 69 74 6F 72 20 74  68 69 73 20 72 65 67 69  on't know.  To monitor this regi
00001700  6F 6E 20 65 6E 74 65 72  20 53 50 59 20 30 3A 34  66 30 4C 31 30 2E 20 20  41 6E 6F 74 68 65 72 20  on enter SPY 0:4f0L10.  Another 
00001720  67 6F 6F 64 20 70 6C 61  63 65 20 74 6F 0D 0A 70  6F 69 6E 74 20 53 50 59  20 69 73 20 74 68 65 20  good place topoint SPY is the 
00001740  69 6E 74 65 72 72 75 70  74 20 74 61 62 6C 65 3A  20 20 53 50 59 20 30 3A  30 6C 34 30 30 2E 20 20  interrupt table:  SPY 0:0l400.  
00001760  49 20 68 61 76 65 20 6E  6F 74 69 63 65 64 20 77  68 69 6C 65 20 6D 6F 6E  69 74 6F 72 69 6E 67 0D  I have noticed while monitoring
00001780  0A 74 68 69 73 20 72 65  67 69 6F 6E 20 74 68 61  74 20 65 76 65 6E 20 74  68 6F 75 67 68 20 69 6E  this region that even though in
000017A0  74 65 72 72 75 70 74 20  76 65 63 74 6F 72 73 20  61 72 65 20 66 6F 75 72  20 62 79 74 65 73 20 6C  terrupt vectors are four bytes l
000017C0  6F 6E 67 20 49 20 73 6F  6D 65 74 69 6D 65 73 0D  0A 63 6F 75 6E 74 20 61  20 6E 75 6D 62 65 72 20  ong I sometimescount a number 
000017E0  6F 66 20 63 68 61 6E 67  65 73 20 77 68 69 63 68  20 69 73 20 6E 6F 74 20  64 69 76 69 73 69 62 6C  of changes which is not divisibl
00001800  65 20 62 79 20 66 6F 75  72 2E 20 20 49 20 64 6F  6E 6F 20 77 68 79 2E 20  20 54 68 65 20 6D 6F 73  e by four.  I dono why.  The mos
00001820  74 0D 0A 69 6E 74 65 72  65 73 74 69 6E 67 20 64  69 73 63 6F 76 65 72 79  20 73 6F 20 66 61 72 2C  tinteresting discovery so far,
00001840  20 68 6F 77 65 76 65 72  2C 20 68 61 73 20 62 65  65 6E 20 74 68 65 20 6C  6F 63 61 74 69 6F 6E 20   however, has been the location 
00001860  6F 66 20 61 20 62 79 74  65 20 69 6E 20 61 0D 0A  73 65 63 74 69 6F 6E 20  6F 66 20 6D 65 6D 6F 72  of a byte in asection of memor
00001880  79 20 75 73 65 64 20 62  79 20 44 4F 53 2E 20 20  49 20 73 75 70 70 6F 73  65 20 69 74 20 69 73 20  y used by DOS.  I suppose it is 
000018A0  69 6E 20 74 68 65 20 6E  6F 6E 20 74 72 61 6E 73  69 65 6E 74 20 70 6F 72  74 69 6F 6E 20 6F 66 0D  in the non transient portion of
000018C0  0A 43 4F 4D 4D 41 4E 44  2E 20 20 54 68 65 20 6C  6F 63 61 74 69 6F 6E 20  69 73 20 32 39 31 3A 31  COMMAND.  The location is 291:1
000018E0  61 37 20 69 6E 20 6D 79  20 50 43 20 44 4F 53 20  76 65 72 20 33 2E 32 30  2E 20 20 57 68 61 74 20  a7 in my PC DOS ver 3.20.  What 
00001900  69 73 20 69 6E 74 65 72  65 73 74 69 6E 67 20 69  73 0D 0A 74 68 61 74 20  77 68 69 6C 65 20 53 50  is interesting isthat while SP
00001920  59 20 69 73 20 70 6F 69  6E 74 65 64 20 61 74 20  74 68 69 73 20 73 69 6E  67 6C 65 20 62 79 74 65  Y is pointed at this single byte
00001940  20 61 6E 64 20 44 4F 53  20 69 73 20 61 74 20 74  68 65 20 44 4F 53 20 70  72 6F 6D 70 74 20 65 76   and DOS is at the DOS prompt ev
00001960  65 72 79 0D 0A 6B 65 79  70 72 65 73 73 20 74 68  61 74 20 70 6C 61 63 65  73 20 61 20 70 72 69 6E  erykeypress that places a prin
00001980  74 61 62 6C 65 20 63 68  61 72 61 63 74 65 72 20  6F 6E 20 74 68 65 20 73  63 72 65 65 6E 20 61 6C  table character on the screen al
000019A0  73 6F 20 65 6C 69 63 69  74 73 20 61 20 62 65 65  70 0D 0A 66 72 6F 6D 20  53 50 59 2E 20 20 54 68  so elicits a beepfrom SPY.  Th
000019C0  65 20 62 79 74 65 20 69  73 20 63 68 61 6E 67 65  64 20 76 65 72 79 20 6D  61 6E 79 20 74 69 6D 65  e byte is changed very many time
000019E0  73 20 66 6F 72 20 61 20  6C 6F 6E 67 20 64 69 73  70 6C 61 79 20 73 75 63  68 20 61 73 20 61 0D 0A  s for a long display such as a
00001A00  64 69 72 65 63 74 6F 72  79 20 6C 69 73 74 69 6E  67 20 6F 72 20 61 20 66  69 6C 65 20 74 79 70 65  directory listing or a file type
00001A20  64 20 74 6F 20 74 68 65  20 73 63 72 65 65 6E 2E  0D 0A 0D 0A 53 50 59 2E  41 53 4D 20 61 6E 64 20  d to the screen.SPY.ASM and 
00001A40  53 50 59 27 2E 41 53 4D  20 64 69 66 66 65 72 20  69 6E 20 6F 6E 6C 79 20  6F 6E 65 20 72 65 73 70  SPY'.ASM differ in only one resp
00001A60  65 63 74 20 65 78 63 65  70 74 20 66 6F 72 20 74  68 65 20 6E 65 61 72 20  75 6E 69 76 65 72 73 61  ect except for the near universa
00001A80  6C 0D 0A 72 65 70 6C 61  63 65 6D 65 6E 74 20 6F  66 20 53 50 59 20 77 69  74 68 20 53 50 59 27 20  lreplacement of SPY with SPY' 
00001AA0  69 6E 20 74 68 65 20 53  50 59 27 2E 41 53 4D 20  70 72 6F 67 72 61 6D 2E  20 20 54 68 69 73 20 69  in the SPY'.ASM program.  This i
00001AC0  73 20 74 68 65 20 6D 65  74 68 6F 64 20 74 68 61  74 0D 0A 74 68 65 20 74  77 6F 20 70 72 6F 67 72  s the method thatthe two progr
00001AE0  61 6D 73 20 75 73 65 20  74 6F 20 64 65 74 65 63  74 20 70 72 65 76 69 6F  75 73 20 6C 6F 61 64 73  ams use to detect previous loads
00001B00  20 6F 66 20 74 68 65 6D  73 65 6C 76 65 73 2E 20  20 54 68 65 20 64 65 74  65 63 74 69 6F 6E 20 64   of themselves.  The detection d
00001B20  6F 6E 65 0D 0A 62 79 20  53 50 59 20 69 73 20 63  61 72 72 69 65 64 20 6F  75 74 20 65 6E 74 69 72  oneby SPY is carried out entir
00001B40  65 6C 79 20 69 6E 20 74  68 65 20 72 6F 75 74 69  6E 65 20 6E 61 6D 65 64  20 73 65 74 5F 65 73 20  ely in the routine named set_es 
00001B60  77 68 69 6C 65 20 66 6F  72 20 53 50 59 27 20 69  74 20 69 73 0D 0A 64 6F  6E 65 20 69 6E 20 62 6F  while for SPY' it isdone in bo
00001B80  74 68 20 73 65 74 5F 65  73 20 61 6E 64 20 6E 65  77 69 6E 74 31 36 68 20  28 61 20 72 6F 75 74 69  th set_es and newint16h (a routi
00001BA0  6E 65 20 63 68 61 69 6E  65 64 20 69 6E 74 6F 20  74 68 65 20 52 4F 4D 20  42 49 4F 53 20 6B 65 79  ne chained into the ROM BIOS key
00001BC0  62 6F 61 72 64 0D 0A 69  6E 74 65 72 72 75 70 74  20 76 65 63 74 6F 72 29  2E 20 20 42 6F 74 68 20  boardinterrupt vector).  Both 
00001BE0  70 72 6F 67 72 61 6D 73  20 75 73 65 20 61 20 73  65 74 20 6F 66 20 74 68  72 65 65 20 64 61 74 61  programs use a set of three data
00001C00  20 76 61 6C 75 65 73 2C  20 6B 65 79 31 2C 20 6B  65 79 32 2C 0D 0A 61 6E  64 20 6B 65 79 33 20 74   values, key1, key2,and key3 t
00001C20  68 61 74 20 61 72 65 20  77 6F 72 64 73 20 77 68  69 63 68 20 61 72 65 20  73 65 74 20 69 6E 74 6F  hat are words which are set into
00001C40  20 73 70 65 63 69 66 69  63 20 6F 66 66 73 65 74  73 20 77 68 65 6E 20 74  68 65 20 70 72 6F 67 72   specific offsets when the progr
00001C60  61 6D 0D 0A 6C 6F 61 64  73 20 66 6F 72 20 74 68  65 20 66 69 72 73 74 20  74 69 6D 65 20 61 6E 64  amloads for the first time and
00001C80  20 62 65 63 6F 6D 65 73  20 61 20 54 53 52 2E 20  20 54 68 65 20 69 64 65  61 20 6F 66 20 64 65 74   becomes a TSR.  The idea of det
00001CA0  65 63 74 69 6F 6E 20 69  6E 20 65 61 63 68 20 63  61 73 65 0D 0A 69 73 20  74 6F 20 73 65 61 72 63  ection in each caseis to searc
00001CC0  68 20 6C 6F 63 61 74 69  6F 6E 73 20 69 6E 20 6D  65 6D 6F 72 79 20 66 6F  72 20 74 68 65 20 74 68  h locations in memory for the th
00001CE0  72 65 65 20 6B 65 79 20  76 61 6C 75 65 73 20 69  6E 20 74 68 65 20 72 65  6C 61 74 69 76 65 0D 0A  ree key values in the relative
00001D00  6C 6F 63 61 74 69 6F 6E  73 20 69 6E 20 77 68 69  63 68 20 74 68 65 79 20  61 72 65 20 65 78 70 65  locations in which they are expe
00001D20  63 74 65 64 20 74 6F 20  62 65 20 66 6F 75 6E 64  2E 20 20 53 50 59 20 75  73 65 73 20 61 20 62 72  cted to be found.  SPY uses a br
00001D40  75 74 65 20 66 6F 72 63  65 20 6D 65 74 68 6F 64  0D 0A 74 68 61 74 20 6C  6F 6F 6B 73 20 61 74 20  ute force methodthat looks at 
00001D60  65 76 65 72 79 20 70 61  72 61 67 72 61 70 68 20  70 72 69 6F 72 20 74 6F  20 74 68 65 20 63 75 72  every paragraph prior to the cur
00001D80  72 65 6E 74 20 76 61 6C  75 65 20 6F 66 20 74 68  65 20 63 6F 64 65 20 73  65 67 6D 65 6E 74 20 66  rent value of the code segment f
00001DA0  6F 72 0D 0A 74 68 65 20  70 72 65 73 65 6E 63 65  20 6F 66 20 74 68 65 20  6B 65 79 73 2E 20 20 54  orthe presence of the keys.  T
00001DC0  68 65 20 76 61 6C 75 65  20 6F 66 20 6B 65 79 31  20 69 73 20 74 68 65 20  74 77 6F 20 62 79 74 65  he value of key1 is the two byte
00001DE0  20 6F 70 20 63 6F 64 65  20 66 6F 72 20 74 68 65  0D 0A 69 6E 73 74 72 75  63 74 69 6F 6E 20 69 6E   op code for theinstruction in
00001E00  74 20 32 30 68 20 77 68  69 63 68 20 69 73 20 66  6F 75 6E 64 20 61 74 20  6F 66 66 73 65 74 20 30  t 20h which is found at offset 0
00001E20  20 6F 66 20 65 76 65 72  79 20 50 53 50 2E 20 20  49 74 20 77 61 73 20 63  68 6F 73 65 6E 0D 0A 62   of every PSP.  It was chosenb
00001E40  65 63 61 75 73 65 20 69  66 20 61 6C 6C 20 6F 66  20 74 68 65 20 6B 65 79  73 20 77 65 72 65 20 61  ecause if all of the keys were a
00001E60  74 20 6F 66 66 73 65 74  73 20 66 6F 6C 6C 6F 77  69 6E 67 20 6C 6F 63 61  74 69 6F 6E 20 31 30 30  t offsets following location 100
00001E80  68 20 69 6E 20 74 68 65  20 63 6F 64 65 0D 0A 73  65 67 6D 65 6E 74 2C 20  74 68 65 6E 20 53 50 59  h in the codesegment, then SPY
00001EA0  20 63 6F 75 6C 64 20 66  61 69 6C 20 69 6E 20 69  74 73 20 61 74 74 65 6D  70 74 20 74 6F 20 66 69   could fail in its attempt to fi
00001EC0  6E 64 20 69 74 73 65 6C  66 20 69 6E 20 6D 65 6D  6F 72 79 20 62 65 63 61  75 73 65 20 69 74 0D 0A  nd itself in memory because it
00001EE0  6D 69 67 68 74 20 6D 69  73 74 61 6B 65 20 61 20  73 65 74 20 6F 66 20 64  61 74 61 20 69 6E 20 61  might mistake a set of data in a
00001F00  20 63 61 63 68 65 20 6F  72 20 69 6E 20 74 68 65  20 62 75 66 66 65 72 73  20 6F 66 20 44 4F 53 20   cache or in the buffers of DOS 
00001F20  61 73 20 61 20 70 72 69  6F 72 20 6C 6F 61 64 0D  0A 69 66 20 69 74 73 65  6C 66 2E 20 20 53 50 59  as a prior loadif itself.  SPY
00001F40  27 20 75 73 65 73 20 74  68 65 20 72 6F 75 74 69  6E 65 20 6E 65 77 69 6E  74 31 36 68 20 74 6F 20  ' uses the routine newint16h to 
00001F60  61 64 64 20 61 20 6E 65  77 20 66 75 6E 63 74 69  6F 6E 20 74 6F 20 74 68  65 20 52 4F 4D 0D 0A 42  add a new function to the ROMB
00001F80  49 4F 53 20 6B 65 79 62  6F 61 72 64 20 69 6E 74  65 72 72 75 70 74 20 69  6E 74 20 31 36 68 2E 20  IOS keyboard interrupt int 16h. 
00001FA0  20 54 68 65 20 73 65 74  5F 65 73 20 72 6F 75 74  69 6E 65 20 69 6E 76 6F  6B 65 73 20 74 68 65 20   The set_es routine invokes the 
00001FC0  69 6E 74 20 31 36 68 20  77 69 74 68 0D 0A 74 68  65 20 66 75 6E 63 74 69  6F 6E 20 6E 75 6D 62 65  int 16h withthe function numbe
00001FE0  72 20 61 68 20 3D 20 37  37 68 2E 20 20 57 68 65  6E 20 53 50 59 27 20 68  61 73 20 6E 6F 74 20 62  r ah = 77h.  When SPY' has not b
00002000  65 65 6E 20 70 72 65 76  69 6F 75 73 6C 79 20 6C  6F 61 64 65 64 20 74 68  65 0D 0A 69 6E 74 65 72  een previously loaded theinter
00002020  72 75 70 74 20 72 65 74  75 72 6E 73 20 77 69 74  68 20 6E 6F 74 68 69 6E  67 20 63 68 61 6E 67 65  rupt returns with nothing change
00002040  64 2E 20 20 48 6F 77 65  76 65 72 2C 20 69 66 20  53 50 59 27 20 68 61 73  20 62 65 65 6E 20 70 72  d.  However, if SPY' has been pr
00002060  65 76 69 6F 75 73 6C 79  0D 0A 6C 6F 61 64 65 64  2C 20 74 68 65 6E 20 74  68 65 20 69 6E 73 74 61  eviouslyloaded, then the insta
00002080  6C 6C 65 64 20 6E 65 77  69 6E 74 31 36 68 20 77  69 6C 6C 20 73 65 72 76  69 63 65 20 74 68 65 20  lled newint16h will service the 
000020A0  37 37 68 20 66 75 6E 63  74 69 6F 6E 20 62 79 20  63 68 65 63 6B 69 6E 67  0D 0A 74 6F 20 73 65 65  77h function by checkingto see
000020C0  20 69 66 20 74 68 65 20  74 68 72 65 65 20 6B 65  79 73 20 61 72 65 20 66  6F 75 6E 64 20 69 6E 20   if the three keys are found in 
000020E0  74 68 65 69 72 20 72 65  73 70 65 63 74 69 76 65  20 6C 6F 63 61 74 69 6F  6E 73 20 28 69 66 20 6E  their respective locations (if n
00002100  6F 74 20 66 6F 75 6E 64  2C 0D 0A 74 68 65 6E 20  74 68 65 20 37 37 68 20  66 75 6E 63 74 69 6F 6E  ot found,then the 77h function
00002120  20 63 61 6C 6C 20 6D 75  73 74 20 62 65 20 64 75  65 20 74 6F 20 61 6E 6F  74 68 65 72 20 70 72 6F   call must be due to another pro
00002140  67 72 61 6D 20 75 73 69  6E 67 20 74 68 65 20 73  61 6D 65 20 6D 65 74 68  6F 64 0D 0A 61 6E 64 20  gram using the same methodand 
00002160  66 75 6E 63 74 69 6F 6E  20 6E 75 6D 62 65 72 20  73 6F 20 69 73 20 69 67  6E 6F 72 65 64 20 62 79  function number so is ignored by
00002180  20 6E 65 77 69 6E 74 31  36 68 29 2E 20 20 49 66  20 74 68 65 20 6B 65 79  73 20 61 72 65 20 66 6F   newint16h).  If the keys are fo
000021A0  75 6E 64 20 69 6E 20 74  68 65 0D 0A 72 69 67 68  74 20 6C 6F 63 61 74 69  6F 6E 73 2C 20 74 68 65  und in theright locations, the
000021C0  6E 20 6B 65 79 31 20 69  73 20 72 65 74 75 72 6E  65 64 20 69 6E 20 61 78  20 61 6E 64 20 6B 65 79  n key1 is returned in ax and key
000021E0  32 20 69 73 20 72 65 74  75 72 6E 65 64 20 69 6E  20 62 78 20 77 68 69 6C  65 0D 0A 74 68 65 20 76  2 is returned in bx whilethe v
00002200  61 6C 75 65 20 6F 66 20  63 73 20 66 6F 72 20 74  68 65 20 6E 65 77 69 6E  74 31 36 68 20 72 6F 75  alue of cs for the newint16h rou
00002220  74 69 6E 65 20 69 73 20  70 61 73 73 65 64 20 62  61 63 6B 20 69 6E 20 65  73 2E 20 20 54 68 75 73  tine is passed back in es.  Thus
00002240  20 73 65 74 5F 65 73 0D  0A 63 6F 6D 70 61 72 65  73 20 61 78 20 74 6F 20  6B 65 79 31 20 61 6E 64   set_escompares ax to key1 and
00002260  20 62 78 20 74 6F 20 6B  65 79 32 2E 20 20 49 66  20 62 6F 74 68 20 65 71  75 61 6C 20 61 72 65 20   bx to key2.  If both equal are 
00002280  65 71 75 61 6C 2C 20 74  68 65 6E 20 69 74 20 63  61 6E 20 62 65 0D 0A 61  73 73 75 6D 65 64 20 77  equal, then it can beassumed w
000022A0  69 74 68 20 66 61 69 72  20 63 6F 6E 66 69 64 65  6E 63 65 20 74 68 61 74  20 65 73 20 6E 6F 77 20  ith fair confidence that es now 
000022C0  63 6F 6E 74 61 69 6E 73  20 74 68 65 20 63 6F 64  65 20 73 65 67 6D 65 6E  74 20 6F 66 20 53 50 59  contains the code segment of SPY
000022E0  27 20 77 68 65 6E 0D 0A  69 74 20 77 61 73 20 66  69 72 73 74 20 6C 6F 61  64 65 64 20 61 73 20 61  ' whenit was first loaded as a
00002300  20 54 53 52 2E 0D 0A 0D  0A 49 20 68 61 76 65 20  74 68 6F 75 67 68 74 20  6F 66 20 61 20 66 65 77   TSR.I have thought of a few
00002320  20 65 6E 68 61 6E 63 65  6D 65 6E 74 73 20 66 6F  72 20 61 20 32 2E 30 20  76 65 72 73 69 6F 6E 20   enhancements for a 2.0 version 
00002340  6F 66 20 53 50 59 3A 0D  0A 0D 0A 20 20 20 20 20  28 31 29 20 54 68 65 20  61 62 69 6C 69 74 79 20  of SPY:     (1) The ability 
00002360  74 6F 20 72 65 70 6F 72  74 20 74 68 65 20 63 75  72 72 65 6E 74 6C 79 20  73 70 69 65 64 20 72 65  to report the currently spied re
00002380  67 69 6F 6E 20 6F 66 20  6D 65 6D 6F 72 79 2E 0D  0A 0D 0A 20 20 20 20 20  28 32 29 20 41 6C 6C 6F  gion of memory.     (2) Allo
000023A0  77 20 74 68 65 20 75 73  65 20 6F 66 20 6D 75 6C  74 69 70 6C 65 20 73 70  79 20 63 68 61 6E 6E 65  w the use of multiple spy channe
000023C0  6C 73 20 28 74 77 6F 20  6F 72 20 6D 6F 72 65 20  73 70 69 65 64 20 72 65  67 69 6F 6E 73 20 61 74  ls (two or more spied regions at
000023E0  0D 0A 20 20 20 20 20 20  20 20 20 6F 6E 63 65 20  75 73 69 6E 67 20 64 69  66 66 65 72 65 6E 74 20           once using different 
00002400  74 6F 6E 65 73 20 66 6F  72 20 72 65 70 6F 72 74  69 6E 67 20 63 68 61 6E  67 65 73 20 69 6E 20 65  tones for reporting changes in e
00002420  61 63 68 20 63 68 61 6E  6E 65 6C 29 2E 0D 0A 0D  0A 20 20 20 20 20 28 33  29 20 41 6C 6C 6F 77 20  ach channel).     (3) Allow 
00002440  74 68 65 20 75 73 65 20  6F 66 20 74 68 65 20 73  65 63 6F 6E 64 20 74 79  70 65 20 6F 66 20 44 45  the use of the second type of DE
00002460  42 55 47 20 72 61 6E 67  65 20 73 70 65 63 69 66  69 63 61 74 69 6F 6E 2E  20 20 49 2E 65 2E 2C 0D  BUG range specification.  I.e.,
00002480  0A 20 20 20 20 20 20 20  20 20 53 50 59 20 73 65  67 31 3A 6F 66 66 31 20  73 65 67 32 3A 6F 66 66           SPY seg1:off1 seg2:off
000024A0  32 2E 0D 0A 0D 0A 20 20  20 20 20 28 34 29 20 50  72 65 76 65 6E 74 69 6E  67 20 74 68 65 20 77 72  2.     (4) Preventing the wr
000024C0  61 70 20 6F 66 20 61 20  73 65 67 6D 65 6E 74 20  28 61 20 70 72 6F 62 6C  65 6D 20 6D 65 6E 74 69  ap of a segment (a problem menti
000024E0  6F 6E 65 64 20 65 61 72  6C 69 65 72 29 2E 0D 0A  0D 0A 20 20 20 20 20 28  35 29 20 49 6D 70 6C 65  oned earlier).     (5) Imple
00002500  6D 65 6E 74 69 6E 67 20  53 50 59 20 4F 46 46 20  61 6E 64 20 53 50 59 20  4F 4E 2E 0D 0A 0D 0A 20  menting SPY OFF and SPY ON. 
00002520  20 20 20 20 28 36 29 20  41 6C 6C 6F 77 69 6E 67  20 63 6F 6D 6D 61 6E 64  20 6C 69 6E 65 20 73 65      (6) Allowing command line se
00002540  74 74 69 6E 67 20 6F 66  20 74 68 65 20 64 65 6C  61 79 20 63 6F 75 6E 74  2C 20 6D 61 78 69 6D 75  tting of the delay count, maximu
00002560  6D 20 73 70 79 20 62 75  66 66 65 72 0D 0A 20 20  20 20 20 20 20 20 20 73  69 7A 65 2C 20 61 6E 64  m spy buffer         size, and
00002580  20 66 72 65 71 75 65 6E  63 79 20 6F 66 20 74 6F  6E 65 2E 0D 0A 0D 0A 20  20 20 20 20 28 37 29 20   frequency of tone.     (7) 
000025A0  54 68 65 20 61 62 69 6C  69 74 79 20 74 6F 20 6D  61 6B 65 20 63 61 6C 6C  73 20 74 6F 20 53 50 59  The ability to make calls to SPY
000025C0  20 66 72 6F 6D 20 77 69  74 68 69 6E 20 61 6E 6F  74 68 65 72 20 70 72 6F  67 72 61 6D 2E 20 20 28   from within another program.  (
000025E0  54 68 69 73 0D 0A 20 20  20 20 20 20 20 20 20 63  6F 75 6C 64 20 62 65 20  68 65 6C 70 66 75 6C 20  This         could be helpful 
00002600  69 6E 20 6D 6F 6E 69 74  6F 72 69 6E 67 20 73 74  61 63 6B 20 75 73 61 67  65 2E 29 0D 0A 0D 0A 20  in monitoring stack usage.) 
00002620  20 20 20 20 28 38 29 20  4F 70 74 69 6F 6E 61 6C  20 75 73 65 20 6F 66 20  61 20 70 6F 70 75 70 20      (8) Optional use of a popup 
00002640  77 69 6E 64 6F 77 20 66  6F 72 20 6F 6E 2D 74 68  65 2D 66 6C 79 20 63 68  61 6E 67 65 20 6F 72 20  window for on-the-fly change or 
00002660  6D 6F 6E 69 74 6F 72 69  6E 67 20 6F 66 0D 0A 20  20 20 20 20 20 20 20 20  53 50 59 20 70 61 72 61  monitoring of         SPY para
00002680  6D 65 74 65 72 73 2E 0D  0A 0D 0A 56 6F 74 65 20  66 6F 72 20 61 6E 79 20  6F 66 20 74 68 65 20 61  meters.Vote for any of the a
000026A0  62 6F 76 65 20 6F 72 20  6D 61 6B 65 20 79 6F 75  72 20 6F 77 6E 20 73 75  67 67 65 73 74 69 6F 6E  bove or make your own suggestion
000026C0  73 20 77 68 65 6E 20 73  65 6E 64 69 6E 67 20 69  6E 20 79 6F 75 72 20 24  31 0D 0A 6D 69 6E 69 6D  s when sending in your $1minim
000026E0  75 6D 20 63 6F 6E 74 72  69 62 75 74 69 6F 6E 2E  0D 0A 0D 0A 20 20 20 20  20 20 20 20 20 20 20 20  um contribution.            
00002700  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 52  45 46 45 52 45 4E 43 45                         REFERENCE
00002720  53 0D 0A 0D 0A 49 20 66  6F 75 6E 64 20 74 68 65  20 69 64 65 61 20 75 73  65 64 20 62 79 20 53 50  SI found the idea used by SP
00002740  59 20 74 6F 20 66 69 6E  64 20 61 20 70 72 65 76  69 6F 75 73 20 54 53 52  20 6C 6F 61 64 20 6F 66  Y to find a previous TSR load of
00002760  20 69 74 73 65 6C 66 20  77 68 69 6C 65 20 74 61  6B 69 6E 67 0D 0A 61 70  61 72 74 20 74 68 65 20   itself while takingapart the 
00002780  51 45 47 41 2E 43 4F 4D  20 70 72 6F 67 72 61 6D  20 77 68 69 63 68 20 77  61 73 20 73 75 70 70 6C  QEGA.COM program which was suppl
000027A0  69 65 64 20 62 79 20 74  68 65 20 51 55 41 44 52  41 4D 20 63 6F 72 70 6F  72 61 74 69 6F 6E 20 77  ied by the QUADRAM corporation w
000027C0  69 74 68 0D 0A 74 68 65  69 72 20 51 55 41 44 20  45 47 41 2B 20 45 47 41  20 63 61 72 64 2E 20 20  iththeir QUAD EGA+ EGA card.  
000027E0  41 73 20 49 20 72 65 63  61 6C 6C 20 74 68 69 73  20 70 72 6F 67 72 61 6D  20 75 73 65 64 20 6F 6E  As I recall this program used on
00002800  6C 79 20 74 77 6F 20 6B  65 79 73 20 61 6E 64 20  64 69 64 0D 0A 6E 6F 74  20 75 73 65 20 74 68 65  ly two keys and didnot use the
00002820  20 69 6E 74 20 32 30 68  20 69 6E 73 74 72 75 63  74 69 6F 6E 20 61 73 20  61 20 6B 65 79 2E 20 20   int 20h instruction as a key.  
00002840  49 20 64 6F 6E 6F 20 68  6F 77 20 69 74 20 61 76  6F 69 64 73 20 6D 61 6B  69 6E 67 20 74 68 65 0D  I dono how it avoids making the
00002860  0A 6D 69 73 74 61 6B 65  20 74 68 61 74 20 63 61  6E 20 62 65 20 63 61 75  73 65 64 20 62 79 20 63  mistake that can be caused by c
00002880  61 63 68 65 2F 62 75 66  66 65 72 73 2E 0D 0A 0D  0A 54 68 65 20 69 64 65  61 20 66 6F 72 20 61 64  ache/buffers.The idea for ad
000028A0  64 69 6E 67 20 61 6E 6F  74 68 65 72 20 66 75 6E  63 74 69 6F 6E 20 74 6F  20 74 68 65 20 69 6E 74  ding another function to the int
000028C0  20 31 36 68 20 6B 65 79  62 6F 61 72 64 20 72 6F  75 74 69 6E 65 20 61 73  20 75 73 65 64 20 69 6E   16h keyboard routine as used in
000028E0  0D 0A 74 68 65 20 53 50  59 27 20 70 72 6F 67 72  61 6D 20 49 20 67 6F 74  20 66 72 6F 6D 20 74 68  the SPY' program I got from th
00002900  65 20 70 72 6F 67 72 61  6D 20 50 55 53 48 44 49  52 20 28 75 73 65 64 20  61 6C 73 6F 20 69 6E 20  e program PUSHDIR (used also in 
00002920  74 68 65 20 63 6F 6D 70  61 6E 69 6F 6E 0D 0A 70  72 6F 67 72 61 6D 20 50  4F 50 44 49 52 29 20 77  the companionprogram POPDIR) w
00002940  68 69 63 68 20 69 73 20  70 72 65 73 65 6E 74 65  64 20 69 6E 20 74 68 65  20 4D 61 79 20 32 37 2C  hich is presented in the May 27,
00002960  20 31 39 38 36 20 69 73  73 75 65 20 6F 66 20 50  43 20 4D 61 67 61 7A 69  6E 65 2E 0D 0A 54 68 65   1986 issue of PC Magazine.The
00002980  20 70 72 6F 67 72 61 6D  73 27 20 61 75 74 68 6F  72 20 69 73 20 4A 6F 68  6E 20 46 72 69 65 6E 64   programs' author is John Friend
000029A0  2E 20 20 4A 6F 68 6E 20  75 73 65 73 20 74 68 65  20 73 61 6D 65 20 66 75  6E 63 74 69 6F 6E 20 6E  .  John uses the same function n
000029C0  75 6D 62 65 72 20 37 37  68 20 28 6F 72 0D 0A 72  61 74 68 65 72 20 49 20  61 6D 20 75 73 69 6E 67  umber 77h (orrather I am using
000029E0  20 74 68 65 20 73 61 6D  65 20 6E 75 6D 62 65 72  20 61 73 20 4A 6F 68 6E  29 2E 20 20 54 68 65 20   the same number as John).  The 
00002A00  72 65 61 73 6F 6E 20 49  20 63 68 6F 73 65 20 74  6F 20 75 73 65 20 74 68  65 20 73 61 6D 65 0D 0A  reason I chose to use the same
00002A20  66 75 6E 63 74 69 6F 6E  20 6E 75 6D 62 65 72 20  77 61 73 20 73 6F 20 74  68 61 74 20 69 74 20 63  function number was so that it c
00002A40  61 6E 20 62 65 20 64 65  6D 6F 6E 73 74 72 61 74  65 64 20 74 68 61 74 20  6E 6F 20 63 6F 6E 66 6C  an be demonstrated that no confl
00002A60  69 63 74 20 61 72 72 69  73 65 73 20 69 6E 0D 0A  74 68 65 20 75 73 65 20  6F 66 20 53 50 59 27 20  ict arrises inthe use of SPY' 
00002A80  61 6E 64 20 50 55 53 48  44 49 52 2D 50 4F 50 44  49 52 20 74 6F 67 65 74  68 65 72 20 69 6E 20 74  and PUSHDIR-POPDIR together in t
00002AA0  68 65 20 73 61 6D 65 20  6D 61 63 68 69 6E 65 2E  20 20 4F 74 68 65 72 20  74 68 61 6E 0D 0A 74 68  he same machine.  Other thanth
00002AC0  69 73 20 73 69 6D 69 6C  61 72 69 74 79 20 74 68  65 20 70 72 6F 67 72 61  6D 73 20 53 50 59 27 20  is similarity the programs SPY' 
00002AE0  61 6E 64 20 50 55 53 48  44 49 52 2D 50 4F 50 44  49 52 20 61 72 65 20 76  65 72 79 20 64 69 66 66  and PUSHDIR-POPDIR are very diff
00002B00  65 72 65 6E 74 20 69 6E  20 74 68 65 69 72 0D 0A  69 6E 6E 65 72 20 77 6F  72 6B 69 6E 67 73 2E 20  erent in theirinner workings. 
00002B20  20 50 55 53 48 44 49 52  2D 50 4F 50 44 49 52 20  64 6F 65 73 20 6E 6F 74  20 75 73 65 20 6B 65 79   PUSHDIR-POPDIR does not use key
00002B40  73 2C 20 62 75 74 20 69  6E 73 74 65 61 64 20 63  6F 6D 70 61 72 65 73 20  74 68 65 0D 0A 63 6F 70  s, but instead compares thecop
00002B60  79 72 69 67 68 74 20 6E  6F 74 69 63 65 20 69 6E  20 61 20 63 61 6E 64 69  64 61 74 65 20 66 6F 72  yright notice in a candidate for
00002B80  20 61 20 70 72 69 6F 72  20 6C 6F 61 64 2E 0D 0A  0D 0A 0D 0A 20 20 20 20  20 20 20 20 20 20 20 20   a prior load.            
00002BA0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 44  49 53 43 4C 41 49 4D 45                         DISCLAIME
00002BC0  52 0D 0A 0D 0A 54 68 69  73 20 73 6F 66 74 77 61  72 65 20 53 50 59 2E 43  4F 4D 2C 20 53 50 59 27  RThis software SPY.COM, SPY'
00002BE0  2E 43 4F 4D 2C 20 53 50  59 2E 41 53 4D 2C 20 61  6E 64 20 53 50 59 27 2E  41 53 4D 20 61 6E 64 20  .COM, SPY.ASM, and SPY'.ASM and 
00002C00  74 68 65 20 61 63 63 6F  6D 70 61 6E 79 69 6E 67  0D 0A 64 6F 63 75 6D 65  6E 74 61 74 69 6F 6E 20  the accompanyingdocumentation 
00002C20  53 50 49 45 53 2E 44 4F  43 20 61 72 65 20 6E 6F  74 20 77 61 72 72 61 6E  74 65 64 20 66 6F 72 20  SPIES.DOC are not warranted for 
00002C40  61 6E 79 20 70 75 72 70  6F 73 65 20 65 69 74 68  65 72 20 65 78 70 72 65  73 73 65 64 20 6F 72 0D  any purpose either expressed or
00002C60  0A 69 6D 70 6C 69 65 64  20 69 6E 63 6C 75 64 69  6E 67 20 62 75 74 20 6E  6F 74 20 6C 69 6D 69 74  implied including but not limit
00002C80  65 64 20 74 6F 20 6D 65  72 63 68 61 6E 74 61 62  69 6C 69 74 79 20 6F 72  20 66 69 74 6E 65 73 73  ed to merchantability or fitness
00002CA0  20 6F 66 20 70 75 72 70  6F 73 65 2E 20 20 54 68  65 0D 0A 61 75 74 68 6F  72 20 6F 66 20 74 68 65   of purpose.  Theauthor of the
00002CC0  20 73 6F 66 74 77 61 72  65 20 73 68 61 6C 6C 20  68 61 76 65 20 6E 6F 20  6C 69 61 62 69 6C 69 74   software shall have no liabilit
00002CE0  79 20 6F 72 20 72 65 73  70 6F 6E 73 69 62 69 6C  69 74 79 20 74 6F 20 61  6E 79 20 75 73 65 72 0D  y or responsibility to any user
00002D00  0A 6F 66 20 74 68 65 20  73 6F 66 74 77 61 72 65  20 77 69 74 68 20 72 65  73 70 65 63 74 20 74 6F  of the software with respect to
00002D20  20 61 6E 79 20 6C 69 61  62 69 6C 69 74 79 2C 20  6C 6F 73 73 20 6F 72 20  64 61 6D 61 67 65 20 64   any liability, loss or damage d
00002D40  69 72 65 63 74 6C 79 20  6F 72 0D 0A 69 6E 64 69  72 65 63 74 6C 79 20 61  72 69 73 69 6E 67 20 6F  irectly orindirectly arising o
00002D60  75 74 20 6F 66 20 74 68  65 20 75 73 65 20 6F 66  20 74 68 65 20 73 6F 66  74 77 61 72 65 2C 20 69  ut of the use of the software, i
00002D80  6E 63 6C 75 64 69 6E 67  2C 20 62 75 74 20 6E 6F  74 20 6C 69 6D 69 74 65  64 20 74 6F 0D 0A 61 6E  ncluding, but not limited toan
00002DA0  79 20 6C 6F 73 73 20 6F  66 20 62 75 73 69 6E 65  73 73 20 6F 72 20 6F 74  68 65 72 20 69 6E 63 69  y loss of business or other inci
00002DC0  64 65 6E 74 61 6C 20 6F  72 20 63 6F 6E 73 65 71  75 65 6E 74 69 61 6C 20  64 61 6D 61 67 65 73 2E  dental or consequential damages.
00002DE0  20 20 42 79 20 75 73 69  6E 67 20 74 68 65 0D 0A  73 6F 66 74 77 61 72 65  20 79 6F 75 20 61 67 72    By using thesoftware you agr
00002E00  65 65 20 74 6F 20 74 68  69 73 2E 0D 0A 0D 0A 1A  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ee to this.................
00002E20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002E40  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002E60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002E80  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002EA0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002EC0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002EE0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002F00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002F20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002F40  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002F60  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002F80  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002FA0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002FC0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
00002FE0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................................
[ RETURN TO DIRECTORY ]