Speedy Gonzales/ROM map: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
No edit summary
No edit summary
Line 15: Line 15:
==Disassembly==
==Disassembly==
===Password Comparison Routine===
===Password Comparison Routine===
This fragment of code compares the input password with the passwords of all 24 levels of the game.
This fragment of code compares the input password with the passwords of all 6 levels of the game.
<pre>
<pre>
0C:6442 21 AE 3E ld hl,$3EAE (Load address $00:3EAE in hl, where are the passwords of the game)
0C:6442 21 AE 3E ld hl,$3EAE (Load address $00:3EAE in hl, where are the passwords of the game)

Revision as of 17:58, 5 October 2010

Game Passwords

  • 3EAE-3EB3: 35 38 37 35 35 35 ("587555": ICE ZONE)
  • 3EB4: 00 (End of password)
  • 3EB5-3EBA: 35 30 30 39 39 39 ("500999": MÉXICO ZONE)
  • 3EBB: 00 (End of password)
  • 3EBC-3BC1: 33 34 33 30 30 33 ("343003": FOREST ZONE)
  • 3EC2: 00 (End of password)
  • 3EB3-3BC8: 38 33 30 36 33 37 ("830637": DESERT ZONE)
  • 3EC9: 00 (End of password)
  • 3ECA-3BCF: 38 31 32 31 37 31 ("812171": COUNTRY ZONE)
  • 3ED0: 00 (End of password)
  • 3ED1-3BD6: 35 32 32 34 37 32 ("522472": CHEESE ISLAND)
  • 3ED7: 00 (End of password)

Disassembly

Password Comparison Routine

This fragment of code compares the input password with the passwords of all 6 levels of the game.

0C:6442	21 AE 3E	ld hl,$3EAE	(Load address $00:3EAE in hl, where are the passwords of the game)
0C:6445	06 06		ld b,$06	(B=$06 = Number of passwords in ROM)
0C:6447	C5		push bc		(Push bc. Stores the value of bc)
0C:6448	E5		push hl		(Push hl. Stores the value of hl)
0C:6449	11 AC DF	ld de,$DFAC	(Load address $DFAC=First Digit of password in de)
0C:644C	06 06		ld b,$06	(B=$06 = Number of digits in password)
0C:644E	1A		ld a,[de]	(A=Value in Address de=Introduced password) 
0C:644F	BE		cp a,[hl]	(Compare this value with value in address hl=Password in ROM)
0C:6450	20 15		jr nz,$6467	(If not zero goto address 0C:6467 to compare with other password list in the ROM)
0C:6452	13		inc de		(Increases de)
0C:6453	23		inc hl		(Increases hl)
0C:6454	05		dec b		(Decreases b)
0C:6455	20 F7		jr nz,$644E	(If b not zero goto adress 0C:644E to compare other digit)
0C:6457	E1		pop hl		(Pop hl. Recovers the value of hl)
0C:6458	C1		pop bc		(Pop bc. Recovers the value of bc)
0C:6459	3E 06		ld a,$06	(a=$06)
0C:645B	90		sub b		(Decrease b)
0C:645C	EA 83 DF	ld [$DF83],a	(Put the value of A if is correct in RAM Address $DF83=Level)
0C:645F	B7		or a,a		(a or a)
0C:6460	C0		ret nz		(Return if not zero)
0C:6461	3E 05		ld a,$05	(a=$05)
0C:6463	EA B8 DF	ld [$DFB8],a	(Put the value of A in RAM Address $DFB8)
0C:6466	C9		ret		(Return)

0C:6467 E1 pop hl (Pop hl. Recovers the value of hl) 0C:6468 C1 pop bc (Pop bc. Recovers the value of bc) 0C:6469 11 07 00 ld de,$0007 (de=$0007=Quantity to add to hl to move to the next password in the list) 0C:646C 19 add hl,de (hl=hl+de=hl+$0007) 0C:646D 05 dec b (Decreasee b=number of passwords that are by comparison) 0C:646E 20 D7 jr nz,$6447 (Jump if not zero to address $ 0C: 6447) 0C:6470 C9 ret (Return)