<td width="100%"><a href="viewtopic.php?p=149#149"><img src="templates/subSilver/images/icon_minipost.gif" width="12" height="9" alt="Message" title="Message" border="0" /></a><span class="postdetails">PostΘ le: Dim 12 Ao√ 2007, 21:48<span class="gen"> </span> Sujet du message: Where in America's past is...? (Broderbund, 1992)</span></td>
<td valign="top" nowrap="nowrap"><a href="posting.php?mode=quote&p=149"><img src="templates/subSilver/images/lang_french/icon_quote.gif" alt="RΘpondre en citant" title="RΘpondre en citant" border="0" /></a> </td>
</tr>
<tr>
<td colspan="2"><hr /></td>
</tr>
<tr>
<td colspan="2"><span class="postbody">This exciting game turns history into a fast-paced detective adventure. Join the ACME Detective Agency and chase the notorious Carmen Sandiego and her gang as they filch famous objects from America's past.
- Insert, when requested, front side of disk 2 (CARMEN.AP3)
<br />
- Play the game...
<br />
You notice that you do not require the /CARMEN.AP disk so that we believe that the password protection:
<br />
- has already been loaded into memory from the /CARMEN.AP disk or
<br />
- will be loaded from the /CARMEN.AP3 disk
<br />
<br />
As we are dealing with a standard ProDOS disk, let's view all values of the files with a ProDOS version of Copy II+
<br />
<br />
The C13 file is a text file of plenty of C strings (the ones that end with a 00). An excerpt of the file is to be found hereafter:
<br />
<br />
</span><table width="90%" cellspacing="1" cellpadding="3" border="0" align="center"><tr> <td><span class="genmed"><b>Code:</b></span></td> </tr> <tr> <td class="code">0 ASC 'No warrant, no case. See you later...'00
<br />
1 ASC 'To: '00
<br />
2 ASC 8D'From: The Chief'8D8D00
<br />
3 ASC 'You always need a warrant before making an arrest. '
<br />
ASC 'You risk getting into a lot of trouble if you don'27't!'00
<br />
4 ASC 'Having the wrong warrant does us absolutely no good. '
<br />
ASC 'Please be more careful next time.'00
<br />
5 ASC 'Congratulations! You apprehended the crook!'00
<br />
6 ASC ' The goods were returned to '00
<br />
7 ASC 'One'00
<br />
8 ASC 'Two'00
<br />
9 ASC 'Three'00
<br />
A ASC 'Four'00
<br />
B ASC 'Five'00
<br />
C ASC 'Six'00
<br />
D ASC ' more '00
<br />
E ASC 'case'00
<br />
F ASC 'cases'00
<br />
10 ASC ' until your next promotion.'00
<br />
11 ASC 'You'27've earned yourself a promotion! '
<br />
ASC 'Before you can be promoted you have one '
<br />
ASC 'more clue to unravel.'00
<br />
12 ASC 'Use your copy of What Happened When to complete the following:'00
<br />
13 ASC 'Well done! You are now a '00
<br />
14 ASC 'Sorry, that'27's not the answer we have '
<br />
ASC 'here at ACME. Please try again.'00
<br />
15 ASC 'The elusive criminal was finally tracked '
<br />
ASC 'down by ACME'27's Agent '00
<br />
16 ASC 'Excellent work! You caught the head of '
<br />
ASC 'V.I.L.E., Carmen Sandiego!!'00
<br />
17 ASC 'You need to use your time more efficiently. '
<br />
ASC 'Time travel isn'27't cheap, you know!'00
<br />
18 ASC 'Are you ready for another case?'00</td> </tr></table><span class="postbody">
<br />
<br />
The numeric values are indexes and have been introduced for easier reading. The 11/12/13/14 indexes are part of the protection. We need to find some code on the disk that use those.
<br />
<br />
<span style="font-style: italic">Please note that it is common to print out a C string with an index instead of its address. The routine that has to write out the string has to count the 00. When it reaches the right value, the string is displayed.</span>
<br />
<br />
Now launch your favorite disk editor (mine is Disk Fixer <img src="images/smiles/icon_wink.gif" alt="Wink" border="0" />), set the ProDOS interleaving format, search for the following patterns:
<br />
- LDA #$13 (A9 13) or LDX #$13 (A2 13) or LDY #$13 (A0 13)
<br />
Repeat for the $12 and $14 values...
<br />
<br />
Gotcha! We find "A0 xx" patterns on track $15, sectors 5 and 6, they belong to the C12 file.
* 'Use your copy of What Happened When to complete the following:'00
<br />
<br />
LDY #$12 ; Before
<br />
L9DA5 JSR STROUT
<br />
JSR LA18F
<br />
LDA #$2C
<br />
JSR $B054
<br />
STA $73
<br />
LDA #$03 ; We have three tries
<br />
STA $74
<br />
<br />
L9DB6 JSR $B093 ; Protection loop
<br />
JSR $B084
<br />
LDA $73
<br />
LDX #$00
<br />
LDY #$78
<br />
JSR $B024
<br />
LDA #$0C
<br />
STA $26
<br />
LDA #$4F
<br />
JSR $B027
<br />
JSR $DC27
<br />
<br />
JSR L9FA6 ; ENTER STRING
<br />
<br />
PHP
<br />
INC $43
<br />
JSR $B093
<br />
JSR $B084
<br />
PLP
<br />
BCS L9E26 ; WRONG ANSWER
<br />
<br />
LDA $73
<br />
CMP #$14
<br />
BNE L9DF1
<br />
<br />
LDX #$8A
<br />
LDY #$A1
<br />
JSR L9F53 ; CHECK WORD
<br />
BCC L9DFD ; CORRECT ANSWER
<br />
<br />
LDA $73
<br />
<br />
L9DF1 LDX #$B2
<br />
LDY #$A0
<br />
JSR $B024
<br />
JSR L9F53 ; CHECK WORD
<br />
BCS L9E26 ; WRONG ANSWER
<br />
<br />
* THE ANSWER IS CORRECT, WE END HERE
<br />
<br />
L9DFD INC $19
<br />
INC $1A
<br />
JSR L9F02
<br />
<br />
* 'Well done! You are now a '00
<br />
<br />
LDY #$13 ; Well done!
<br />
JSR STROUT
<br />
CLC
<br />
LDA $19
<br />
ADC #$15
<br />
TAY
<br />
JSR $B08A
<br />
LDY #$3A
<br />
JSR STROUT
<br />
JSR L9F17
<br />
JSR LA1BB
<br />
JSR L9EAE
<br />
JSR LA195
<br />
JMP L9E65
<br />
<br />
L9E26 DEC $74
<br />
BNE L9E2D
<br />
JMP $1F00 ; END OF GAME I PRESUME!
<br />
<br />
* 'Sorry, that'27's not the answer we have '
<br />
* 'here at ACME. Please try again.'00
<br />
<br />
L9E2D LDY #$14 ; Sorry!
<br />
JSR STROUT
<br />
JSR LA18F
<br />
JMP L9DB6
<br />
<br />
L9E38 JSR L9F02
<br />
SEC
<br />
LDY $19
<br />
LDA L9F7D,Y
<br />
SBC $1A
<br />
STA $40
<br />
CLC
<br />
ADC #$06
<br />
TAY
<br />
JSR STROUT
<br />
LDY #$0D
<br />
JSR STROUT
<br />
LDY #$0E
<br />
LDA $40
<br />
CMP #$01
<br />
BEQ L9E5A
<br />
INY
<br />
L9E5A JSR STROUT
<br />
LDY #$10
<br />
JSR STROUT
<br />
JSR LA18F
<br />
<br />
L9E65 JSR L9F02
<br />
<br />
* 'Are you ready for another case?'00
<br />
<br />
LDY #$18
<br />
JSR STROUT
<br />
...</td> </tr></table><span class="postbody">
<br />
<br />
The code above is the protection loop. It goes to $9DFD is the answer is correct, otherwise, it loops until your three tries are used. The routine at $9F53 checks the word entered and clears the carry it is so, otherwise it sets it.
<td valign="middle" nowrap="nowrap"><a href="profile.php?mode=viewprofile&u=4"><img src="templates/subSilver/images/lang_french/icon_profile.gif" alt="Voir le profil de l'utilisateur" title="Voir le profil de l'utilisateur" border="0" /></a> <a href="privmsg.php?mode=post&u=4"><img src="templates/subSilver/images/lang_french/icon_pm.gif" alt="Envoyer un message privΘ" title="Envoyer un message privΘ" border="0" /></a> <a href="http://www.oss117.org/" target="_userwww"><img src="templates/subSilver/images/lang_french/icon_www.gif" alt="Visiter le site web de l'utilisateur" title="Visiter le site web de l'utilisateur" border="0" /></a> <script language="JavaScript" type="text/javascript"><!--
<td valign="middle" nowrap="nowrap"><a href="profile.php?mode=viewprofile&u=4"><img src="templates/subSilver/images/lang_french/icon_profile.gif" alt="Voir le profil de l'utilisateur" title="Voir le profil de l'utilisateur" border="0" /></a> <a href="privmsg.php?mode=post&u=4"><img src="templates/subSilver/images/lang_french/icon_pm.gif" alt="Envoyer un message privΘ" title="Envoyer un message privΘ" border="0" /></a> <a href="http://www.oss117.org/" target="_userwww"><img src="templates/subSilver/images/lang_french/icon_www.gif" alt="Visiter le site web de l'utilisateur" title="Visiter le site web de l'utilisateur" border="0" /></a> <script language="JavaScript" type="text/javascript"><!--
<td align="right" valign="top" nowrap="nowrap"><span class="gensmall">Toutes les heures sont au format GMT + 1 Heure</span><br /><span class="nav"></span>
</td>
</tr>
<tr>
<td align="left" colspan="3"><span class="nav">Page <b>1</b> sur <b>1</b></span></td>
<td nowrap="nowrap"><span class="gensmall">Sauter vers: <select name="f" onchange="if(this.options[this.selectedIndex].value != -1){ forms['jumpbox'].submit() }"><option value="-1">SΘlectionner un forum</option><option value="-1"> </option><option value="-1">GENERALITES</option><option value="-1">----------------</option><option value="1">REGLES DE BASE DU FORUM</option><option value="2">PRESENTATION DES MEMBRES</option><option value="3">FAQ</option><option value="24">LES VENDEURS DE Q et assimilΘs...</option><option value="-1"> </option><option value="-1">La ligne des APPLE II</option><option value="-1">----------------</option><option value="4">APPLE II et II+</option><option value="5">APPLE IIe</option><option value="6">APPLE IIc et IIc Plus</option><option value="7">APPLE IIGS</option><option value="8">ITT2020</option><option value="9">BELL & HOWELL</option><option value="-1"> </option><option value="-1">ON AIME AUSSI...</option><option value="-1">----------------</option><option value="25">APPLE I</option><option value="10">APPLE /// et ///Plus</option><option value="11">LISA 1, 2, 2/5, 2/10 et ... XL</option><option value="-1"> </option><option value="-1">LOGICIELS</option><option value="-1">----------------</option><option value="12">PROBLEMES DIVERS</option><option value="13"selected="selected">PROTECTION MALEFIQUE</option><option value="23">EMULATION</option><option value="-1"> </option><option value="-1">LES CARTES ET PERIPHERIQUES</option><option value="-1">----------------</option><option value="14">CARTES COPROCESSEUR</option><option value="15">CARTES MEMOIRE</option><option value="16">CARTES POUR DISQUES</option><option value="17">AUTRES CARTES</option><option value="18">PERIPHERIQUES</option><option value="-1"> </option><option value="-1">EN VRAC ET DIVERS</option><option value="-1">----------------</option><option value="19">Recherches techniques (hard ou soft)</option><option value="20">ACHATS,VENTES ET/OU ECHANGES</option><option value="21">DIVERS...MAIS TOUJOURS EN RELATION AVEC APPLE!</option><option value="22">LES PETITS MAUDITS A EVITER</option></select><input type="hidden" name="sid" value="88dc291636b558c274916ca04b217a32" /> <input type="submit" value="Aller" class="liteoption" /></span></td>
</tr>
</table></form>
<span class="gensmall">Vous <b>ne pouvez pas</b> poster de nouveaux sujets dans ce forum<br />Vous <b>ne pouvez pas</b> rΘpondre aux sujets dans ce forum<br />Vous <b>ne pouvez pas</b> Θditer vos messages dans ce forum<br />Vous <b>ne pouvez pas</b> supprimer vos messages dans ce forum<br />Vous <b>ne pouvez pas</b> voter dans les sondages de ce forum<br /></span></td>