============================================================================================================================================== 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 2640♪◙This 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 two♪◙progra 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.ASM♪◙and 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 rosoft♪◙forum 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 requested♪◙donation. 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 rce♪◙code 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. What♪◙do 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 written♪◙contingent 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 and♪◙so 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 program♪◙to 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 pass♪◙parameters 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 simple♪◙as 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). Running♪◙the 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.0♪◙♪◙SPY 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 and♪◙zzz 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 a♪◙number 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 parameter♪◙string 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 ith♪◙a 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 be♪◙entered 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 be♪◙sprinkled 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 SPY♪◙is 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 l♪◙reserve 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 the♪◙region 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 n♪◙chosen 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 update♪◙its 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 this♪◙counter 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 each♪◙int 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 decremented♪◙to 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 upon♪◙the 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 and♪◙the 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 control♪◙them 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 linked♪◙and 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 easily♪◙changed 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 is♪◙just 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 is♪◙welcome 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 another♪◙region 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 hus♪◙to 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 once♪◙before: 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 will♪◙pass 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 acted♪◙u 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 save♪◙a 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 of♪◙a 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 might♪◙expect, 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. Instead♪◙enter 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 accept♪◙i 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 a♪◙pre 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 I♪◙have 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 data♪◙sect 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). Not♪◙many 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 it♪◙to 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. Why♪◙I 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 to♪◙point 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 sometimes♪◙count 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 t♪◙interesting 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 a♪◙section 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 is♪◙that 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 ery♪◙keypress 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 beep♪◙from 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 l♪◙replacement 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 that♪◙the 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 one♪◙by 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 is♪◙done 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 board♪◙interrupt 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 am♪◙loads 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 case♪◙is 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 method♪◙that 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 or♪◙the 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 the♪◙instruction 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 chosen♪◙b 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 code♪◙segment, 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 load♪◙if 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 ROM♪◙B 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 with♪◙the 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 the♪◙inter 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 eviously♪◙loaded, 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 checking♪◙to 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 method♪◙and 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 the♪◙right 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 while♪◙the 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_es♪◙compares 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 be♪◙assumed 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 ' when♪◙it 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 $1♪◙minim 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 S♪◙♪◙I 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 taking♪◙apart 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 ith♪◙their 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 did♪◙not 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 companion♪◙program 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 (or♪◙rather 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 in♪◙the 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 than♪◙th 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 their♪◙inner 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 the♪◙cop 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 R♪◙♪◙This 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 accompanying♪◙documentation 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. The♪◙author 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 or♪◙indirectly 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 to♪◙an 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 the♪◙software 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 ................................