1) Turn off your computer and insert your reset button
         assembly into the cartridge port. Turn the computer on again. Load
         the $C000 monitor from your utility disk <> LOAD"49152",8,1 <>. At
         the completion of the load, type SYS 49152 and hit RETURN. The
         monitor should be active now.

         Working with your backup:

         2) With your backup in the drive and the monitor active,
         load the boot file <> L "COP*",08 <>. When the load is complete,
         disassemble memory at $02E0. You'll find a loader routine that
         loads in the 1985 file and jumps to $0C3D.

         3) Load the 1985 file into memory <> L "19*",08 <>. After
         the load, start disassembly of code at $0C3D (D 0C3D). The code is
         as follows: $0C3D-$0C5B sets up a fast loader and loads in the
         logo screen. $0C5C is a JSR (GOSUB in BASIC) to the logo screen.
         $0C5F is the start of the main program load. It is this code
         that is of interest to us.

         4) The code at $0CE5-$0D06 is a decryption routine. Examine
         it, because it is the key to the de-protection. This routine allows
         decryption and examination of the protection code. At the end of
         this decryption routine is a RTS ($0D06). Using the MEMORY
         command (M 0D06), change the 60 to a 00. This will allow a
         normal operation of code until the 00  (Break or Stop)  is
         encountered. The program, once started, will stop right after
         the decryption, allowing us to examine the protection routine.

         5) For our purposes, we will skip over the fast loader and
         logo screens. Let's start the program after the logo screen is run
         ($0C5F). Type G 0C5F and hit RETURN. The screen should turn
         black. Wait for about five seconds and reset the computer.
         Return to the monitor with SYS 49152. Using the INTERPRET
         command, examine code from $0A00 on (I 0A00). Code at $0AB6
         reveals a Block Execute (executes the protection check placed in
         drive memory) and code at $0AC2 reveals a Memory Read that reads
         the value placed in the drive by the protection check. This
         value is, in this scheme, always an $FF. Examine code at $0A92.
         The value is being returned to the computer by a Memory Read
         with a kernal routine. The $FFCF routine brings back the value
         $FF. It is then EORed with $FF which turns it into a $00 and
         then stores it at location $0AB5. Our job is to place the
         correct value in $0AB5 and disable the routine overwriting it.
         This can be accomplished by placing three NOPs at $0A97 which
         will allow the routine to Memory Read the value but not place it
         in computer RAM. All that is left is to place the value of $00
         at $0AB5.

         6) Now we have the correct values to plug into the code to
         disable


            K.J. REVEALED TRILOGY    PAGE [25]     (C)1990 K.J.P.B.

<<previous page - next page>>