Notes:Alien Storm (Genesis)

Credits Select
After entering a successful button sequence in Options (more on that in a moment), bit is set in memory address. This bit is checked for when entering the Sound Test, and if it's set, bit is set in, unlocking the credits select in Options.

Most games store their button cheats as a sequence of bytes (e.g.,, , ,  for up, down, left, right)

This game uses XOR and bit shifting operations instead and checks for word in.

The programming looks like this:

00:2DF8 B1 41  EOR.W   D0,D1 00:2DFA E2 49  LSR.W   #1,D1 00:2DFC 64 00  BCC     #$0006 [00:2E04] 00:2E00 0A 41  EORI.W  #$8810,D1 00:2E04 31 C1  MOVE.w  D1,($FF1C) 00:2E08 B2 7A  CMP.W   $01FA(PC),D1

00003004 3929


 * First, XOR the controller button press with the word at memory address.
 * Next, shift right once.
 * If bit is set at the time of the shift, XOR  with.
 * Repeat these steps until is, then you're done.

A program, like the one at the bottom of this page, can be used to solve the problem.

Below is a detailed look at one possible button sequence that will work.

EXAMPLE:

button sequence: up, down, C, down, B, B, B, up, C button sequence as byte values: 01, 02, 10, 02, 40, 40, 40, 01, 10

up  0001 ^ 0000 = 0001 0001 >> 0001 = 0000    0000 ^ 8810 = 8810

down 0002 ^ 8810 = 8812 8812 >> 0001 = 4409

C   0010 ^ 4409 = 4419 4419 >> 0001 = 220C 220C ^ 8810 = AA1C

down 0002 ^ AA1C = AA1E AA1E >> 0001 = 550F

B   0040 ^ 550F = 554F 554F >> 0001 = 2AA7 2AA7 ^ 8810 = A2B7

B   0040 ^ A2B7 = A2F7 A2F7 >> 0001 = 517B 517B ^ 8810 = D96B

B   0040 ^ D96B = D92B D92B >> 0001 = 6C95 6C95 ^ 8810 = E485

up  0001 ^ E485 = E484 E484 >> 0001 = 7242

C   0010 ^ 7242 = 7252 7252 >> 0001 = 3929

No solution exists that uses less than 9 button presses.

There is no maximum limit on the number of presses, though. This opens the door for some creative ways to solve the problem, like using a controller with auto rapid-fire enabled on a single button to rack up tens of thousands of presses towards an eventual solution. The totals are 37,757 presses for button A, 63,671 for B, or 57,625 for C.

Some button sequences will inadvertently remap the control pad setup at the bottom of the options screen, resulting in a failed cheat. Any sequence that doesn't involve d-pad left or right is guaranteed to work.

Solve #$3929
Here is a small JavaScript program to generate a button sequence, save it as a .html file.

<!DOCTYPE html>  function generatecode { var ControllerArray = new Array(0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40); //controller buttons u, d, l, r, C, A, B

var Rand = Math.floor(Math.random*7); //select a random button press from ControllerArray

var RecordedPresses = new Array(0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00); //used to store sequence of 9 random button presses

var Counter = 0x00; var FF1C = 0x0000; var CarryFlag = new Boolean;

while (FF1C != 0x3929) { if (Counter > 0x08) //if 9 button presses made and no solution, start over { Counter = 0x00; FF1C = 0x0000; }

RecordedPresses[Counter] = ControllerArray[Rand]; FF1C = FF1C ^ ControllerArray[Rand]; Rand = Math.floor(Math.random*7); CarryFlag = (FF1C & 0x0001) == 0x0001; FF1C = FF1C >> 1;

if (CarryFlag == true) { FF1C = FF1C ^ 0x8810; }

Counter++; }

var ButtonText = new Array; ButtonText[0x01] = "up"; ButtonText[0x02] = "down"; ButtonText[0x04] = "left"; ButtonText[0x08] = "right"; ButtonText[0x10] = "C"; ButtonText[0x20] = "A"; ButtonText[0x40] = "B";

document.getElementById("RecordedPresses1").innerHTML=ButtonText[RecordedPresses[0x00]]; document.getElementById("RecordedPresses2").innerHTML=ButtonText[RecordedPresses[0x01]]; document.getElementById("RecordedPresses3").innerHTML=ButtonText[RecordedPresses[0x02]]; document.getElementById("RecordedPresses4").innerHTML=ButtonText[RecordedPresses[0x03]]; document.getElementById("RecordedPresses5").innerHTML=ButtonText[RecordedPresses[0x04]]; document.getElementById("RecordedPresses6").innerHTML=ButtonText[RecordedPresses[0x05]]; document.getElementById("RecordedPresses7").innerHTML=ButtonText[RecordedPresses[0x06]]; document.getElementById("RecordedPresses8").innerHTML=ButtonText[RecordedPresses[0x07]]; document.getElementById("RecordedPresses9").innerHTML=ButtonText[RecordedPresses[0x08]]; }

Solve #$3929

Generate

Click the button to begin.

        