Hi guys, I thought it might be cool if you watched a speed movie on the actual original console.
I think it'd be great if you could somehow "fuse" the movie file, and the rom together - to make a rom that plays it's self.
Say I had an amazing video of Tetris on the original gameboy - wouldn't it be great if when I reset the console, the game would play normally - but if I reset the console while holding down a button, the speed movie would play?
I think it'd be great to see the videos being played on the original console. Has anyone done this before?
Thanks!
-James
Sorry if people didn't understand...
I ment combining a movie file with a rom, to produce a new rom that plays it's self.
This new rom could then be put on to a blank cartridge, and played in the console.
It's an idea that has been around occassionally. It's technically possible to do (an extension chip that has RAM storage and hooks up the controller I/O and can read the vsync signal would do it), but there's one problem:
As much as emulator authors try, emulators aren't yet perfect copies of the original system. As witnessed by the difficulty trying to make movie created on one emulator to work on another, chances are that a movie created on <choose your emulator> would desync when played back on a real console.
The magnitude of these differences is mostly small enough that it only affects where the game lags and which random drops are generated, but that's enough to desync just about any movie.
Yeah, for example, I believe that the closest anyone's got to being able to do this was making a cable that plugged into a Genesis controller port. But, as Bisqwit mentioned, emulators are not 100% accurate, especially Gens. I know for a fact that, in the case of the Sonic games at least, there is quite a bit more lag on real hardware than on emulation - thus it will be nearly impossible to watch any Sonic TAS runs on real hardware. You'd have to figure out a way to detect lag, and I don't think that would be too easy to do by programmatically looking at the video signal.
I heard yesterday someone that were able to run DX apps under Wine near perfectly if not. Warcraft 3 etc..
Probably Nintendulator could be runned under Linux.
There is another problem to doing this. Many games have an eeprom, which cannot be erased. If the game uses this data, then the run may start out different. With emulators, this is fixable, but on the console it would have to be manually wiped for some games before each run.
I'm quite ignorant to this, but interested!
Questions about this eeprom: What kind of data might be on it, and how does an emulator circumvent this problem? Does this mean that the emulation may not be true to the console in some way related to the eeprom?
<Swordless> Go hug a tree, you vegetarian (I bet you really are one)
Because the eeprom (or SRAM etc.) is just a separate file or chunk of memory to the emulator, all it has to do is clear it out to all 0's or something like that, and it will effectively be back in from-factory condition. On a real cartridge, it's not so easy to reset that memory, as it is intended to be permanently saved and there isn't necessarily any mechanism in the game for resetting it.
Not easy!? Press the power button a couple times and it will be erased. Pretty easy. In fact I hate NES because of that. It happens so often that my saves were erased.
Ex. I had almost finished DW4 and past many hours in Casino to earn coins then later, there was no more save and many hours lost.
The very same applies to Zelda 1 and 2.
Damn annoying when I power down my nes, came back a while later and everything was erased. Even the reset button could do that, but it was rare in my cases.
It is however recommended to press and hold the reset button while power down your nes.
I gotcha. There may be certain data that is not erasable that may affect luck in some strange way. An example I can think of (although not NES) is Tetris DX for GBC, as you can erase all the profiles, but the high scores that are obtained with those profiles will not be removed.
Oh man, how that brings back (frustrating) memories. One game notorious for this in a strange way was Kirby's Adventure. To get the highest ranking, you beat the "expert game" or whatever it's called, where you only have a max of three units of life, and you become "Super Star" and can access the sound test. I found that if I ever reset instead of power-off, it would change my save file back one ranking, i.e., as if I had never beat expert mode, but the rest of the file was still intact. This was annoying because I like sound tests.
Thanks for the info everyone!
<Swordless> Go hug a tree, you vegetarian (I bet you really are one)
A month ago I built a NES movie replayer that connects to the controller port and replays data. I got it working both playing live on the NES through it, and replaying a movie recorded with my experimental emulator. I was able to get several-minute Mega Man and Metroid movies to replay consistently. No modification was required to the cartridge, just the replay device that connects to the controller port. There's more about it at the Nesdev thread "PC to NES Transfer Cable".
Yah dude, and doesn't SRAM stand for Static RAM meaning it is static, stationary, unchangeable? And doesn't RAM stand for Random Access Memory meaning it's random and unpredictable and we'll need methods to manipulate luck?
Phil already established that you can erase the battery backup by hitting the power switch enough times. There's also the option of using a taser or one of those lightning globes to zap it. As for EEPROM, my guess is you could open up the cart and leave it on a bug zapper to expose it to ultraviolet for a while.
These technicalities aren't what bumped the topic today and lead you to post your message. Didn't you see blargg's post? Ain't that cool? Maybe the first TAS that we get to go from .fcm to console will be Gradius.
-hanzou
The Random in RAM means that you can access any point in the memory without accessing any other point in the memory, unlike a tape drive where you must rewind and read until you reach the point in question.
Build a man a fire, warm him for a day,
Set a man on fire, warm him for the rest of his life.
I've thought for a while now that, for games that don't lag on either emulation or hardware (and also games that lag exactly the same) that it would be possible to hook into the game's vblank interrupt and stuff the correct values into the game's internal handling of the controller (basically, replacing the joypad polling routine with one that just reads from a big long table at the end of the ROM, which would consist of the TAS keypresses converted to the game's internal format, with possibly some simple compression to handle stretches of time where there is no keypress - admittedly not too common in TAS runs but nonetheless every bit of space saved would help).
Problem is, this is an enormous amount of work, although part of it only has to be done once for each suitable game (and games like Sonic 2 that lag more on hardware won't be possible without even more manual work to determine where additional lagframes are and inseting them).