The next object of our attention is Alien Mind. Details on the original floppies shipped are unclear, as I seem to have misplaced mine. But between examination of the data and reading of old discussions, it seems that it was copy-protected by way of an alternative nibble encoding (to say the least). But what's more commonly in circulation is the F.U.C.K. crack, which uses standard nibblization and a Smartport call based loader replacing the original one. Which sounds like it should just work, right? Here's the obligatory writeup:
Alien Mind Disassembly Notes (Warning: No, I'm never aiming for 100% accurate disassembly, this is just my working scratchpad)
Unfortunately two issues are introduced by the F.U.C.K. crack:
First, the F.U.C.K. crack screen loader itself breaks ROM03 compatibility, giving rise to people saying "Alien Mind doesn't work on ROM03," while people actually using the original floppies say "oh yes it does." This is the code responsible:
; play with toolbox dispatcher vector?
; in ROM 01, this is 5C AF 00 FE - JMP $FE00AF
; in ROM 03, this is 5C C5 00 FE - JMP $FE00C5
; this code changes it to 5C AF 00 FE - JMP $FE00AF (same as rom01)
; which screws with ROM 03 pretty badly and appears to be the source of
; "Alien Mind only works on ROM 03 with original disks"
082D: A9 5C AF - LDA #$AF5C
0830: 8F 00 00 E1 - STAL $E10000
0834: A9 00 FE - LDA #$FE00
0837: 8F 02 00 E1 - STAL $E10002
NOP'ing the STALs out (ie changing both of the 8F xx xx xx instructions to EAs) magically fixes things and makes it boot fine on ROM03. And it's all smartport calls from there, so you'd think it'd work, but no. The second problem is that unlike the floppy controller, the CFFA3K's smartport entry vector does not preserve the Direct Page register, which is a shame because this loader relies on D being $AF00 instead of the usual $0000. Let's fix that too, by adding some code to an empty spot from block 1:
0AB0: A9 F4 00 - LDA #$00F4
0AB3: 8D E2 22 - STA $22E2
0AB6: A9 AF 2B - LDA #$2BAF
0AB9: 8D E4 22 - STA $22E4
0ABC: A9 80 DA - LDA #$DA80
0ABF: 8D E6 22 - STA $22E6
0AC2: 4C 00 20 - JMP $2000
... what this code does, is change the code that ends up being ran in the loader at $B206 to reset the direct page. Instead of BRA $B1E6, we now do this:
B206: F4 00 AF - PEA #$AF00
B209: 2B - PLD
B20A: 80 DA - BRA $B1E6
... and also change the JMP to $2000 to jump to this patcher instead, by changing two bytes in block $0000:
091B: 4C 91 0A - JMP $0AB0
.. At this point, we can boot, fiddle with the mouse a bit to get through the silly crack-screen, and boot the game on a ROM 03 with a CFFA3K with Smartport on Slot 5. But even if we didn't care about slot independence (which we kinda do), is this sufficient? Turns out it isn't, mainly because eventually you have to change disks, and the Control Panel interrupt vector is hooked to go to the game's Save/Restore game stuff.
And that's why this is only "Part 1". In Part 2, we'll take a shot at getting you into the CFFA3000 menu via one of the interrupts so you can swap disks and beat the game [or! will we just miraculously glue the 4-volume set together into a single smartport image?]
Download patched Alien Mind Disk 1 (right-click, Save As, etc)
[ Updated 5/27/2016. Note, use the email address below to contact me. ]
- iigs@ballmerpeak.org