Luc Posted July 27, 2008 Share Posted July 27, 2008 Hello, Does anyone happen to have a cheat code to get infinite lives in Phoenix? I'd like to see how the game levels evolve, but unfortunately I'm not very good at it. I've been searching for the lives counter myself using Stella, but could not find it. Any help would be appreciated. Thank you. Quote Link to comment Share on other sites More sharing options...
Nukey Shay Posted July 27, 2008 Share Posted July 27, 2008 Easy...just look for the BCD scoring routine (by searching for the SED instruction) and cross-reference the ram locations used near the end. It turns out that the #lives variable is controlled by ram location $CB...so all that needs to be done is search for where this ram location is reduced. This is commonly done by using the DEC instruction in games...and the instruction DEC $CB exists at $D932 in Phoenix. I changed that 2-byte instruction to be 2 NOP instructions instead here: Boring_Phoenix.bin Quote Link to comment Share on other sites More sharing options...
mos6507 Posted July 27, 2008 Share Posted July 27, 2008 Do you really need infinite lives? The game is much too easy as it is. Quote Link to comment Share on other sites More sharing options...
+stephena Posted July 28, 2008 Share Posted July 28, 2008 (edited) Hello, Does anyone happen to have a cheat code to get infinite lives in Phoenix? I'd like to see how the game levels evolve, but unfortunately I'm not very good at it. I've been searching for the lives counter myself using Stella, but could not find it. Any help would be appreciated. Thank you. In addition to what Nukey said, this can be found in Stella in several ways through the debugger and cheat facilities: 1) Search all of RAM, then go back to the game, lose a life, re-enter the debugger and compare RAM for '-1' (ie, all locations previously searched that are 1 less than before). This will highlight $CB and $CE. Lose another life to narrow it down. 2) Once you've determined it's $CB, there are two options: a) trapwrite on $CB, rerun the game, and let the debugger break when $CB is changed. Then 'NOP' the operation as described by Nukey. The instruction is located at $F932 in bank 1. A cheat to 'NOP' this instruction is 01932ea1. b) set $CB to some constant value all the time, so it effectively never changes. A cheat to do this is cb86. Edited July 28, 2008 by stephena Quote Link to comment Share on other sites More sharing options...
accousticguitar Posted July 29, 2008 Share Posted July 29, 2008 What this game REALLY needs is continuous fire on all screens instead of having to constantly press the fire button. My thumb is already strong; it doesn't need the workout. Quote Link to comment Share on other sites More sharing options...
iratanam Posted July 29, 2008 Share Posted July 29, 2008 Hello, Does anyone happen to have a cheat code to get infinite lives in Phoenix? I'd like to see how the game levels evolve, but unfortunately I'm not very good at it. I've been searching for the lives counter myself using Stella, but could not find it. Any help would be appreciated. Thank you. In addition to what Nukey said, this can be found in Stella in several ways through the debugger and cheat facilities: 1) Search all of RAM, then go back to the game, lose a life, re-enter the debugger and compare RAM for '-1' (ie, all locations previously searched that are 1 less than before). This will highlight $CB and $CE. Lose another life to narrow it down. 2) Once you've determined it's $CB, there are two options: a) trapwrite on $CB, rerun the game, and let the debugger break when $CB is changed. Then 'NOP' the operation as described by Nukey. The instruction is located at $F932 in bank 1. A cheat to 'NOP' this instruction is 01932ea1. b) set $CB to some constant value all the time, so it effectively never changes. A cheat to do this is cb86. I need to look into this, not really this but Stella's cheat system, I never have understood how it works. Quote Link to comment Share on other sites More sharing options...
Omegamatrix Posted July 29, 2008 Share Posted July 29, 2008 Easy...just look for the BCD scoring routine (by searching for the SED instruction) and cross-reference the ram locations used near the end. It turns out that the #lives variable is controlled by ram location $CB...so all that needs to be done is search for where this ram location is reduced. This is commonly done by using the DEC instruction in games...and the instruction DEC $CB exists at $D932 in Phoenix. I changed that 2-byte instruction to be 2 NOP instructions instead here: Or change the DEC to INC and gain lives by dying. Then you would be a true Phoenix, a mythical bird that rises from the ashes. Quote Link to comment Share on other sites More sharing options...
+stephena Posted July 29, 2008 Share Posted July 29, 2008 Hello, Does anyone happen to have a cheat code to get infinite lives in Phoenix? I'd like to see how the game levels evolve, but unfortunately I'm not very good at it. I've been searching for the lives counter myself using Stella, but could not find it. Any help would be appreciated. Thank you. In addition to what Nukey said, this can be found in Stella in several ways through the debugger and cheat facilities: 1) Search all of RAM, then go back to the game, lose a life, re-enter the debugger and compare RAM for '-1' (ie, all locations previously searched that are 1 less than before). This will highlight $CB and $CE. Lose another life to narrow it down. 2) Once you've determined it's $CB, there are two options: a) trapwrite on $CB, rerun the game, and let the debugger break when $CB is changed. Then 'NOP' the operation as described by Nukey. The instruction is located at $F932 in bank 1. A cheat to 'NOP' this instruction is 01932ea1. b) set $CB to some constant value all the time, so it effectively never changes. A cheat to do this is cb86. I need to look into this, not really this but Stella's cheat system, I never have understood how it works. Look at the Stella documentation, section 15 (Cheatcode Manager). Adding a cheat itself is ridiculously easy; coming up with them not so easy If you're creating one from scratch, 90% of the work is in finding the correct address/value to use, so knowing the debugger is really the first step. Also, the process in 2(a) above is described in the debugger section of the Stella manual as well. Quote Link to comment Share on other sites More sharing options...
+stephena Posted July 29, 2008 Share Posted July 29, 2008 Easy...just look for the BCD scoring routine (by searching for the SED instruction) and cross-reference the ram locations used near the end. It turns out that the #lives variable is controlled by ram location $CB...so all that needs to be done is search for where this ram location is reduced. This is commonly done by using the DEC instruction in games...and the instruction DEC $CB exists at $D932 in Phoenix. I changed that 2-byte instruction to be 2 NOP instructions instead here: Or change the DEC to INC and gain lives by dying. Then you would be a true Phoenix, a mythical bird that rises from the ashes. Unless, of course, you lose so many lives (255) that INC wraps around to zero and causes you to die again! Quote Link to comment Share on other sites More sharing options...
Nukey Shay Posted July 29, 2008 Share Posted July 29, 2008 More like 128 lives, since it looks as if the high bit ($80) is used to indicate an active game vs. attract mode. IMO searching for the SED instruction in any BCD game that awards reserve ships/lives during the score routine is a pretty quick method (and reveals the precise ram location used). Quote Link to comment Share on other sites More sharing options...
+stephena Posted July 29, 2008 Share Posted July 29, 2008 (edited) IMO searching for the SED instruction in any BCD game that awards reserve ships/lives during the score routine is a pretty quick method (and reveals the precise ram location used). True, but my explanation assumes that the programmer doesn't have the source/know of any way of decompiling, and that they don't necessarily know that BCD mode is used for scoring/lives. As such, it's a more general approach (at least for games that decrease some counter by 1, since games like River Raid decrease by 8 for each life). Edited July 29, 2008 by stephena Quote Link to comment Share on other sites More sharing options...
Nukey Shay Posted July 30, 2008 Share Posted July 30, 2008 ...or Pitfall!, which multiplies the value by 4 when losing a life (because the counter itself is used as the bitpattern for the display). Quote Link to comment Share on other sites More sharing options...
Luc Posted August 5, 2008 Author Share Posted August 5, 2008 Thank you all for the information. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.