SUPERIOR DISK PROTECTION GUIDE
Dextrovix / RetroBBC

This guide assumes you know how to view memory address. From the BASIC prompt, type

> PRINT ~?&41B

will print the contents of address 41B in hexidecimal.

Version ONE - "Sector Read Fault" text appears in code
Used 1988, 1989

Find the file on the disk that contains the attributes below:
[filename] 000400 000400 0000D9
START EXECUTE LENGTH

Some games that use Version One protection are Quest 1988, The Last Ninja 1988, Barbarian 1988, Barbarian II 1989 and Predator 1989

From all of the examples above, the protected program code is loaded at 000400.

To start with type,

> *LOAD [filename]

to put the code into memory. Then make a note of the PRINTed contents of the following addresses.

At memory address &41B is the number of sectors which the program will read to gather the protected file code.
e.g.. contents of &41B = &28 then the file length will be &2800.
At memory address &49A and &49B is the execute address (reversed) when all of the code is loaded from the disc.
e.g.. contents of &49A = &03, &49B = &11 then the execute address of the code is &1103.
At memory address &4BF and &4C0 is the start address (reversed) to start loading the code from the disc.
e.g. contents of &4BF = &00, &4C0 = &11 then the start address of the code is &1100.

To stop the code from executing the protected file code, type :

> ?&499 = &60 (return from subroutine)

then to run the loader type :

> CALL&400

This stops the program and returns the user to BASIC, whereby you can now save the data from the original, protected file to a blank disk (NOT the original). So from the above example the file had the following attributes:

[filename] 001100 001103 002800
START EXECUTE LENGTH

So from the prompt type

> *SAVE [filename] 1100+2800 1103

Once the one file has been recovered from the disc and saved, the game can be copied freely.
*COPY all of the other files to a blank disc and the game should work.

THE LAST NINJA: Example of Version One Protection

Protected file = NINJA3
Original file info NINJA3 000400 000400 0000D9

> *LOAD NINJA3

Information in loader file &41B = &1C (length)
&49A = &09 (execute
&49B = &23 address - reversed)
&4BF = &00 (start
&4C0 = &11 address - reversed)

> ?&499=&60
> CALL &400
> *SAVE NINJA3 001100+1C00 2309

De-Protected file info NINJA3 001100 002309 001C00

Version TWO - Used 1989 onwards

Find the file on the disk that contains the attributes below:
[filename] 000400 000400 0000D9
START EXECUTE LENGTH
e.g., Superior Soccer 1989, Ballistix 1989 and Ricochet 1989.

Other have the same lengths, but different loader address:
Hostages uses FF0400 FF0400 0000D9
Perplexity uses FF1100 FF1100 0000D9

With these, the offset is always the same, which means that 48 from the start address would mean 448, 948 or 1148 for the above titles.

To start with type,

> *LOAD [filename]

to put the code into memory. Then make a note of the PRINTed contents of the following addresses.

At memory address &408 is the number of sectors which the program will read to gather the protected file code.
e.g. contents of &408 = &15 then the file length will be &1500.
At memory address &448 and &449 is the execute address (reversed) when all of the code is loaded from the disc.
e.g. contents of &448 = &00, &449 = &20 then the execute address of the code is &2000.
At memory address &45D and &45E is the start address (reversed) to start loading the code from the disc.
e.g. contents of &45D = &00, &45E = &15 then the start address of the code is &1500.

To stop the code from executing the protected file code, type :

> ?&447 = &60 (return from subroutine)

then to run the loader type :

> CALL&400

This stops the program and returns the user to BASIC, whereby you can now save the data from the original, protected file to a blank disk (NOT the original). So from the above example the file had the following attributes:

[filename] 001500 002000 001500
START EXECUTE LENGTH

So from the prompt type

> *SAVE [filename] 1500+1500 2000

Once the one file has been recovered from the disc and saved, the game can be copied freely.
*COPY all of the other files to a blank disc and the game should work.

RICOCHET: Example of Version Two Protection

Protected file = RICODE
Original file info RICODE FF0400 FF0400 0000D9

> *LOAD RICODE

Information in loader file &408 = &53 (length)
&448 = &36 (execute
&449 = &19 address - reversed)
&45D = &03 (start
&45E = &11 address - reversed)

> ?&447 = &60
> CALL &400
> *SAVE RICODE 001103+5300 1936

De-Protected file info RICODE 001103 001936 005300


This article originally appeared on the RetroBBC website.
http://www.geocities.com/SiliconValley/Lakes/7207/Index.htm