So the subject itself has been brought up by this thread.
My goal with this thread is to find games that use these uninitialized RAM values due to bad programming or because they expected a soft reset (some games put their game name in RAM and then do different things when they find that name in RAM on start-up).
As an example I used Super Mario All-Stars where SMB3 reads one of the uninitialized values and if that is 0x80 (so you basically have a 1/256 chance on a real SNES) allows you to change the powerup status when pressing select:
Link to video
Warning: Might glitch to creditsI will finish this ACE soon as possible
(or will I?)
The easiest way to list the games would be to modify the emulator to keep track of initialization, similar to valgrind. For older consoles (NES/SNES), the overhead should be manageable.
The 1/256 chance is only true if we assume that every bit has a 50/50 chance to be 1 or 0 before initialization. Due to slight differences in hardware, that's rarely the case. If you want to do it from power-on, your best bet is to buy 256 NESs and hope that one of them favours the 0x80 value you need.
It'd be easier to play a different cart, play it a while in the hopes that it sets the correct value, switch to SMB and do a soft reset. Pick a game that uses the same memory address for a known and manipulateable purpose and you're good to go.
Not even. Default values at power-up are not guaranteed but will likely favor a "blank" value (usually 0x00 in SRAMs) - so this is likely unattainable in practice. Also this is probably a debug code that could be poked by the debugger that was left in.
EDIT: I was thinking of NES for some reason even though SNES is in the title. SNES uses a PSRAM so it is more accurate to say that yes, the power-on states will differ by console, and consoles will independently have different patterns, favorite set/reset bits, and so on.
Not quite: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.164.6432
Note that SRAM is random, but not entirely random -- some bits favor zero some favor one, some are neutral and therefore random. Given a specific chip, a given initial power on state might not be realizable, even if it is on another, because of the skewed bits.
Hagane is affected by uninitialized memory in a variety of ways. The main thing it changes is the RNG seed (it is 0 in most cases, but is not initialized), however I have had several instances of very odd behavior with no other changes to the system (ie, just from a soft reset or quick hard reset). For example, gameplay playing at roughly 1/8 speed, collision detection being just plain wrong, and other things. I have a video somewhere if necessary.
Well, we were talking SRAM. I mentioned "likely favor" and not "always favor." But I was wrong above for another reason and edited my post; the SNES uses PSRAM. so it is a different beast.
Still, yes, for particular SRAMs specific bits may be favored to be 1 but SRAMs used in NES (and in fact many SRAM) have a very high percentage of bits being statistically always 0 at power-on. The probability of any specific bit being high quite low even console-to-console.
What I mentioned regarding SRAM and what you mention regarding SRAM are not mutually exclusive.
Just saw this thread, and suppose for documentation purposes we should add Tales of Phantasia to this list. It uses the uninitialized values at 0x83-0x84 to seed its RNG, and also appears to save the uninitialized value at 0x3c9 and use it for something (haven't checked what, it is at least not the primary RNG, but movies do desync if you hex that value at the beginning).
As one might have guessed, the same phenomenon of uninitialized RAM being used to generate RNG occurs with Star Ocean (SNES); the addresses in question this time are 0xB8-0xB9
As an example I used Super Mario All-Stars where SMB3 reads one of the uninitialized values and if that is 0x80 (so you basically have a 1/256 chance on a real SNES) allows you to change the powerup status when pressing select:
https://www.youtube.com/watch?v=eSdFdJGr5xA
Late, but is it possible to obtain that value of 0x80 anywhere in the All-Stars game itself, without relying on a different game?