fceux/web/ConvertFCMtoFM2.html

82 lines
9.6 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Convert FCM to FM2</title>
<link href="fceux.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="Javascript/buttons.js"></script>
</head>
<body onload="FP_preloadImgs(/*url*/'assets/button67.jpg',/*url*/'assets/button68.jpg',/*url*/'assets/button80.jpg',/*url*/'assets/button81.jpg',/*url*/'assets/button87.jpg',/*url*/'assets/button88.jpg',/*url*/'assets/button92.jpg',/*url*/'assets/button93.jpg',/*url*/'assets/button98.jpg',/*url*/'assets/button99.jpg',/*url*/'assets/button4.jpg',/*url*/'assets/button5.jpg')">
<div id="masthead">
<span class="largerfont">FCEUX<br/></span>The all in one NES/Famicom/Dendy Emulator
</div>
<div id="top_nav">
<a href="home.html"><img id="img1" alt="Home" height="20" onmousedown="FP_swapImg(1,0,/*id*/'img1',/*url*/'assets/button68.jpg')" onmouseout="FP_swapImg(0,0,/*id*/'img1',/*url*/'assets/button66.jpg')" onmouseover="FP_swapImg(1,0,/*id*/'img1',/*url*/'assets/button67.jpg')" onmouseup="FP_swapImg(0,0,/*id*/'img1',/*url*/'assets/button67.jpg')" src="assets/button66.jpg" style="border: 0" width="100" /><!-- MSComment="ibutton" fp-style="fp-btn: Braided Row 5; fp-bgcolor: #B7B7B7" fp-title="Home" --></a>
<a href="download.html"><img id="img2" alt="Download" height="20" onmousedown="FP_swapImg(1,0,/*id*/'img2',/*url*/'assets/button81.jpg')" onmouseout="FP_swapImg(0,0,/*id*/'img2',/*url*/'assets/button7F.jpg')" onmouseover="FP_swapImg(1,0,/*id*/'img2',/*url*/'assets/button80.jpg')" onmouseup="FP_swapImg(0,0,/*id*/'img2',/*url*/'assets/button80.jpg')" src="assets/button7F.jpg" style="border: 0" width="100" /><!-- MSComment="ibutton" fp-style="fp-btn: Braided Row 5; fp-bgcolor: #B7B7B7" fp-title="Download" --></a>
<a href="documentation.html"><img id="img6" alt="Documentation" height="20" onmousedown="FP_swapImg(1,0,/*id*/'img6',/*url*/'assets/button5.jpg')" onmouseout="FP_swapImg(0,0,/*id*/'img6',/*url*/'assets/button3.jpg')" onmouseover="FP_swapImg(1,0,/*id*/'img6',/*url*/'assets/button4.jpg')" onmouseup="FP_swapImg(0,0,/*id*/'img6',/*url*/'assets/button4.jpg')" src="assets/button3.jpg" style="border: 0" width="100" /><!-- MSComment="ibutton" fp-style="fp-btn: Braided Row 5; fp-bgcolor: #B7B7B7" fp-title="Documentation" --></a>
<a href="version.html"><img id="img3" alt="Versions" height="20" onmousedown="FP_swapImg(1,0,/*id*/'img3',/*url*/'assets/button88.jpg')" onmouseout="FP_swapImg(0,0,/*id*/'img3',/*url*/'assets/button86.jpg')" onmouseover="FP_swapImg(1,0,/*id*/'img3',/*url*/'assets/button87.jpg')" onmouseup="FP_swapImg(0,0,/*id*/'img3',/*url*/'assets/button87.jpg')" src="assets/button86.jpg" style="border: 0" width="100" /><!-- MSComment="ibutton" fp-style="fp-btn: Braided Row 5; fp-bgcolor: #B7B7B7" fp-title="Versions" --></a>
<a href="contact.html"><img id="img4" alt="Contact" height="20" onmousedown="FP_swapImg(1,0,/*id*/'img4',/*url*/'assets/button93.jpg')" onmouseout="FP_swapImg(0,0,/*id*/'img4',/*url*/'assets/button91.jpg')" onmouseover="FP_swapImg(1,0,/*id*/'img4',/*url*/'assets/button92.jpg')" onmouseup="FP_swapImg(0,0,/*id*/'img4',/*url*/'assets/button92.jpg')" src="assets/button91.jpg" style="border: 0" width="100" /><!-- MSComment="ibutton" fp-style="fp-btn: Braided Row 5; fp-bgcolor: #B7B7B7" fp-title="Contact" --></a>
<a href="links.html"><img id="img5" alt="Links" height="20" onmousedown="FP_swapImg(1,0,/*id*/'img5',/*url*/'assets/button99.jpg')" onmouseout="FP_swapImg(0,0,/*id*/'img5',/*url*/'assets/button97.jpg')" onmouseover="FP_swapImg(1,0,/*id*/'img5',/*url*/'assets/button98.jpg')" onmouseup="FP_swapImg(0,0,/*id*/'img5',/*url*/'assets/button98.jpg')" src="assets/button97.jpg" style="border: 0" width="100" /><!-- MSComment="ibutton" fp-style="fp-btn: Braided Row 5; fp-bgcolor: #B7B7B7" fp-title="Links" --></a></div>
<div id="container">
<div id="left_col">
</div>
<div id="page_content">
<h1>Convert FCM to FM2</h1>
<p>This page documents the conversion process of .fcm to .fm2. It also documents known issues with conversion as well as known cases where conversion fails.</p>
<p>FCEUX uses the file format .fm2. It does NOT play .fcm files (Older versions of FCEU). However any .fcm file can be converted to .fm2 by opening FCEUX and going to tools > Convert .fm2. You can mass convert files by highlighting them in the open dialog box. On the SDL build, you can run ./fceux --fcmconvert filename.fcm</p>
<p><b>See also:</b></p>
<ul>
<li>FM2 format</li>
<li>FCM format</li>
<li>Movie making</li>
</ul>
<h2>FM2 concept</h2>
<p>The old FCEUltra had a big problem with its movie recording. Every single movie was recorded with power-on, followed by a savestate. This means that WRAM (or save RAM) was being stored in its initialized state. As a consequence, many games that use save systems would go through an accelerated boot process since the save files were already initialized.</p>
<p>Typically, a movie maker would load his game and let it sit at the title screen while he sipped his drink or adjusted his pants or steeled his nerves or whatever and then triggered the movie record. At that point the savefile was initialized, and the recording was already compromised.</p>
<p>When preparing FCEUX for release, we decided that this was unacceptable. Therefore, every FCEUX movie is recorded from a fresh power-on with no WRAM or save RAM. Additionally, the "record from reset" was taken out because it is even worse. Now the game would be starting from initialized WRAM and initialized main ram. This can further confuse matters.</p>
<p>So, your movies might desync because on FCEUX the game is taking longer to boot, while it is initializing its WRAM and/or main ram.</p>
<p>Luckily, these are often easy to fix: since FM2 is a text format, it is trivial to insert additional empty frames into the correct locations during the game boot-up process. We have successfully used this approach to salvage a few movies. So, if you have trouble, let us know, and maybe since we have a bit of experience, we can help.</p>
<p>Also, when a game is initializing, I bet it is uncommon for the RNG to be running so you might get lucky there also.</p>
<p>Another trick is to add a boot-up time window to the beginning of your movie. Add empty frames to the very beginning, followed by the very first converted frame which should include a reset flag. This simulates what FCEUltra did, giving the game time to initialize its WRAM and possibly main RAM before your input events begin.</p>
<p>We have been excruciatingly careful not to do anything else which would adversely affect synching. We take this seriously. We have only found few desynching movies so far that we aren't able to fix.</p>
<h2>Sync issues</h2>
<p>Nearly all published .fcm files will convert without problem</p>
<p>Exceptions are noted:</p>
<ul>
<li>Any movie made with FCEU .10 or earlier (such as <a href="http://tasvideos.org/192M.html">Dragon's Lair</a>, <a href="http://tasvideos.org/193M.html">Powerblade</a></li>
<li>Any <a href="http://tasvideos.org/519M.html">Dragon Warrior 4</a> movie due to quirky VRAM handling of this game. Movies will only sync in the version in which they were created.</li>
<li>Any movie that starts from savestate (since savestates aren't compatible between FCEU and FCEUX) (Note: old savestates from 0.98.x can be loaded into FCEUX. However, they can not be used with movies since the new savestates handle movie data in drastically different ways.)</li>
<li><a href="http://tasvideos.org/355M.html">Battle Toads from FCEU .12</a> - Due to significant mapper 7 changes since FCEU .13</li>
</ul>
<p>Converting from FMV to FCM to FM2 may work, but it fails at least for these movies:</p>
<ul>
<li><a href="http://tasvideos.org/89M.html">Boku Dracula-kun by Phil and Genisto</a></li>
</ul>
<h3>Known desyncs fixed with added frames</h3>
<p>Some movies will desync but can be fixed by adding frames to the beginning of the movie. Basically any movie that was recorded from soft reset and uses battery backed ram will probably desync. This is because the soft reset allowed the SRAM to be cleared ahead of time, so frames were not needed to clear it in the movie (This is arguably cheating anyway, and recording from soft reset was removed in FCEUX).</p>
<p>Known desyncs that were fixed by adding frames:</p>
<dd><a href="http://tasvideos.org/868M.html">Legent of Zelda "1st Quest" by Baxter and Phil</a> - 3 frames added</dd>
<dd><a href="http://tasvideos.org/222M.html">Vice: Project Doom by FunkDoc</a> - 10 frames added</dd>
<h3>Known desyncs that could not be snced (to our knowledge)</h3>
<p>Movies that don't meet the above criteria but desync anyway</p>
<dd><a href="http://tasvideos.org/1021M.html">Addams Family</a> - Nothing up to 16 frames worked</dd>
<dd><a href="http://tasvideos.org/589M.html">Kattou Ninden Teyandee by Ferret Warlord</a> - Nothing up to 16 frames worked</dd>
<dd><a href="http://tasvideos.org/469M.html">Dragon Warrior by acmlm</a> - Adding 2 frames makes it sync up to around 46540</dd>
</div>
</div>
<div id="footer">
<a href="home.html">Home</a> | <a href="download.html">Download</a> |
<a href="documentation.html">Documentation</a> | <a href="version.html">
Version History</a> | <a href="contact.html">Contact</a>| <a href="links.html">Links</a>
<br/>We are in no way affiliated or endorsed by Nintendo or Nintendo of America. "Nintendo" is a registered trademark of Nintendo of America Inc.
<br/>©2009 adelikat
</div>
</body>
</html>