{THE COPY PROTECTION ROUTINE FROM Le Maitre Des Ames}
{is also found in Le Necromancien}
FUNCTION C_2835:BOOLEAN;
VAR
x86regs:RECORD CASE INTEGER OF
1:(AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags:INTEGER);
2:(AL,AH,BL,BH,CL,CH,DL,DH:BYTE);
END;
sectorBuff:ARRAY[0..$1ff] OF CHAR;
sectorNum,i,driveNum:INTEGER;
driveFlag:ARRAY[0..1] OF BOOLEAN;
strBuff:STRING[10];
BEGIN
driveFlag[0] := TRUE;
driveFlag[1] := TRUE;
strBuff := keyStr;
{0 TO 0, maybe defined as constants ?}
FOR driveNum := 0 TO 0
DO BEGIN
sectorNum := 0;
x86regs.AX := 0;
INTR($13, x86regs);
{READ SECTORS}
WHILE(driveFlag[driveNum] AND (sectorNum < 19))
DO BEGIN
x86regs.AX := $0201; {read one sector}
x86regs.CX := $2700 + sectorNum; {track:39, sector:sectorNum}
x86regs.DX := $0100 + driveNum; {head:1, drive:driveNum}
x86regs.ES := SEG(sectorBuff);
x86regs.BX := OFS(sectorBuff);
INTR($13, x86regs);
IF(LO(x86regs.Flags) MOD 2 = 1)
THEN driveFlag[driveNum] := FALSE;
sectorNum := sectorNum + 1
END;
{COMPARE STRINGS}
FOR i := 0 TO LENGTH(strBuff) - 1
DO BEGIN
IF(sectorBuff[i + $1F8] <> strBuff[i + 1])
THEN driveFlag[driveNum] := FALSE;
END;
END;
{return value}
C_2835 := driveFlag[0];
END;
Techniquement, elle va chercher a lire sur la piste 39 de la disquette les secteurs de 0 a 19 en utilisant les appels au bios (la fameuse int 13h). Puis a comparer les derniers octets du dernier secteur lu avec la constante keyStr, et ne renvoie la valeur vraie que si ils sont egaux.
C'est schema de protection qui m'a l'air archi-repandu dans les jeux de cette epoque, mais je n'ai jamais vraiment compris comment ca marchait.
Existe-t-il un programme special qui permette de formatter une piste avec le nombre de secteurs que l'on veut ? Puis d'y ecrire les donnees voulues ?
Enfin voila, je part un peu dans toutes les directions, mais mon idees est que, connaissant les "coordonnees" de ces secteurs caches sur nos anciens floppy, il doit etre possible de recuperer leur contenu et de les stocker quelque part avec l'archive du jeu, histoire de se dire qu'on a vraiment archive toutes les donnees originales du jeu. non ?
Je ne sais pas si ca interesse quelqu'un, ou bien si ce projet existe deja, mais je serais bien content de recupere le secteur cache des deux jeux en questions en tous cas.... si quelqu'un a toujours ses disquettes en etat de marche....
Merci d'avance




) et d'autres allusions/private jokes des programmeurs. Mais il y a eu un autre truc qu'on peut lire en ascii dans le code, un truc que je n'ai jamais lu dans le jeu : "Cheat!...but you won't get far". Ca doit à mon avis correspondre à ce qui s'affiche quand on tape un cheat code... mais ce dernier reste totalement inconnu. Et c'est en fait ça que j'aimerais savoir.
Commentaire