2009-12-03 17:30:56 +00:00
<!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 > FM2< / title >
< link href = "fceux.css" rel = "stylesheet" type = "text/css" / >
2009-12-04 22:42:48 +00:00
< script type = "text/javascript" src = "Javascript/buttons.js" > < / script >
2009-12-03 17:30:56 +00:00
< / head >
2009-12-05 00:05:16 +00:00
< 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')" >
2009-12-03 17:30:56 +00:00
< div id = "masthead" >
2009-12-04 22:42:48 +00:00
< span class = "largerfont" > FCEUX< br / > < / span > The all in one NES/Famicom Emulator
2009-12-03 17:30:56 +00:00
< / div >
< div id = "top_nav" >
2009-12-05 00:05:16 +00:00
< 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 >
2009-12-03 17:30:56 +00:00
< / div >
< div id = "container" >
< div id = "left_col" >
< / div >
< div id = "page_content" >
< h1 > FM2 Movie file format< / h1 >
< p > FM2 is the movie capture format of FCEUX< / p >
< h2 > FM2 file format description< / h2 >
< p > FCEUX uses a new movie file format - .fm2< / p >
< p > This differs from the previous FCE Ultra movie format (.fcm) in the following ways:< / p >
2009-12-05 00:05:16 +00:00
< ul >
< li > It is completely text based; allowing easy movie editing/splicing< / li >
< li > An imbedded GUID so FCEUX can tell if a savestate belongs to a particular movie file< / li >
< li > Movies recorded from Start (Power-on) no longer have a redundant savestate< / li >
< li > Contains mouse input for recording the Zapper and Arkanoid Paddle input< / li >
< / ul >
2009-12-03 17:30:56 +00:00
< p > < / p >
< h2 > Format< / h2 >
< p > FM2 is ASCII plain text. It consists of several key-value pairs followed by an inputlog section.< / p >
< p > The inputlog section can be identified by its starting with a | (pipe). The inputlog section terminates at eof. Newlines may be \r\n or \n< / p >
< p > Key-value pairs consist of a key identifier, followed by a space separator, followed by the value text. Value text is always terminated by a newline, which the value text will not include. The value text is parsed differently depending on the type of the key. The key-value pairs may be in any order, except that the first key must be version.< / p >
< p > Integer keys (also used for Booleans, with a 1 or 0) will have a value that is a simple integer not to exceed 32bits< / p >
2009-12-05 00:05:16 +00:00
< ul >
< li > version (required) - the version of the movie file format; for now it is always 3< / li >
< li > emuVersion (required) - the version of the emulator used to produce the movie< / li >
< li > rerecordCount (optional) - the rerecord count< / li >
< li > palFlag (bool) (optional) - true if the movie uses pal timing< / li >
< li > fourscore (bool) (*note C) - true if a fourscore was used< / li >
2010-03-03 04:08:58 +00:00
< li > FDS (bool) (optional) - true if the movie was recording on a Famicom Disk System (FDS) game< / li >
2009-12-05 00:05:16 +00:00
< li > port0, port1 (*note C) - indicates the types of input devices. Supported values are:
< ul >
< li > SI_GAMEPAD = 1< / li >
< li > SI_ZAPPER = 2 < / li >
< / ul >
< / li >
< li > port2 (required) - indicates the type of the FCExp port device which was attached. Supported values are:
< ul >
< li > SIFC_NONE = 0< / li >
< / ul >
< / li >
< / ul >
2009-12-03 17:30:56 +00:00
< h2 > Header< / h2 >
< p > String keys have values that consist of the remainder of the key-value pair line. As a consequence, string values cannot contain newlines.< / p >
2009-12-05 00:05:16 +00:00
< ul >
< li > romFilename (required) - the name of the file used to record the movie < / li >
< li > comment (optional) - simply a memo.
< ul >
< li > by convention, the first token in the comment value is the subject of the comment.< / li >
< li > by convention, subsequent comments with the same subject will have their ordering preserved and may be used to approximate multiline comments.< / li >
< li > by convention, the author of the movie should be stored in comment(s) with a subject of: author< / li >
< / ul >
2009-12-03 17:30:56 +00:00
< / li >
2009-12-05 00:05:16 +00:00
< li > subtitle (optional) - a message that will be displayed on screen when movie is played back (unless Subtitles are turned off, see Movie options).
< ul >
< li > by convention, subtitles will begin with the word subtitle< / li >
< li > by convention, an integer value will proceed which will indicate the frame that the subtitle will be displayed< / li >
< li > by convention, a string of text will follow which will be the string displayed< / li >
< li > example:
< ul >
< li > subtitle 1000 Level Two< / li >
< li > At frame 1000 the words "Level Two" will be displayed on the screen< / li >
< / ul >
< / li >
< / ul >
< / li >
< / ul >
2009-12-03 17:30:56 +00:00
< p > Hex string keys (used for binary blobs) will have a value that is like 0x0123456789ABCDEF... < / p >
2009-12-05 00:05:16 +00:00
< ul >
< li > romChecksum (required) - the MD5 hash of the ROM which was used to record the movie < / li >
< li > savestate (optional) - a fcs savestate blob, in case a movie was recorded from savestate< / li >
< / ul >
2009-12-03 17:30:56 +00:00
< p > GUID keys have a value which is in the standard GUID format: 452DE2C3-EF43-2FA9-77AC-0677FC51543B< / p >
2009-12-05 00:05:16 +00:00
< ul > < li > GUID (required) a unique identifier for a movie, generated when the movie is created, which is used when loading a savestate to make sure it belongs to the current movie.< / li > < / ul >
2009-12-03 17:30:56 +00:00
< h2 > Inputlog< / h2 >
< p > The inputlog section consists of lines beginning and ending with a | (pipe). The fields are as follows, except as noted in note C.< / p >
< table border = "1" >
< tr >
< td > c< / td >
< td > port0< / td >
< td > port1< / td >
< td > port2< / td >
< / tr >
< / table >
< p > Field c is a variable length decimal integer which is a bitfield corresponding to miscellaneous input states which are valid at the start of the frame. Current values for this are< / p >
2009-12-05 00:05:16 +00:00
< ul > < li > MOVIECMD_RESET = 1< / li > < / ul >
2009-12-03 17:30:56 +00:00
< p > The format of port0, port1, port2 depends on which types of devices were attached.< / p >
< h4 > SI_GAMEPAD< / h4 >
2009-12-05 00:05:16 +00:00
< ul >
< li > the field consists of eight characters which constitute a bitfield.< / li >
< li > any character other than ' ' or '.' means that the button was pressed. By convention, the following mnemonics will be used in a column to remind us of which button corresponds to which column:
< ul > < li > RLDUTSBA (Right,Left,Down,Up,sTart,Select,B,A)< / li > < / ul > < / li >
< / ul >
2009-12-03 17:30:56 +00:00
< h4 > SI_ZAPPER< / h4 >
2009-12-05 00:05:16 +00:00
< ul >
< li > XXX YYY B Q Z< / li >
< li > XXX: %03d, the x position of the mouse< / li >
< li > YYY: %03d, the y position of the mouse< / li >
< li > B: %1d, 1 if the mouse button is pressed; 0 if not< / li >
< li > Q: %1d, an internal value used by the emulator's zapper code (this is most unfortunate..)< / li >
< li > Z: %d, a variable-length decimal integer; an internal value used by the emulator's zapper code (this is even more unfortunate..)< / li >
< / ul >
2009-12-03 17:30:56 +00:00
< h4 > SIFC_NONE< / h4 >
2009-12-05 00:05:16 +00:00
< ul > < li > this field must always be empty< / li > < / ul >
2009-12-03 17:30:56 +00:00
< h3 > Notes< / h3 >
< p > There is no key-value pair that indicates the length of the movie. This must be read by scanning the inputlog and counting the number of lines.< / p >
< p > All movies start from power-on, unless a savestate key-value is present< / p >
< p > If a fourscore is used, then port0 and port1 are irrelevant and ignored< / p >
< p > If fourscore, the input types must all be gamepads
< dd > {player1 player2 player3 player4}< / dd >
< dd >
< table border = "1" >
< tr >
< td > c< / td >
< td > ABSTUDLR< / td >
< td > ABSTUDLR< / td >
< td > ABSTUDLR< / td >
< td > ABSTUDLR< / td >
< td > port2< / td >
< / tr >
< / table >
< / dd >
< / p >
< p > If fourscore is not used, then port0 and port1 are < b > required< / b > < / p >
< h2 > Emulator framerate constants< / h2 >
< p > FCEUX uses these framerate constants:< / p >
2009-12-05 00:05:16 +00:00
< ul >
< li > NTSC: 1008307711 /256/65536 = 60.099822938442230224609375< / li >
< li > PAL : 838977920 /256/65536 = 50.00698089599609375< / li >
< / ul >
2009-12-03 17:30:56 +00:00
< p > < / p >
< / 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" >
2009-12-04 17:01:40 +00:00
Version History< / a > | < a href = "contact.html" > Contact< / a > | < a href = "links.html" > Links< / a >
2009-12-05 00:05:16 +00:00
< 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
2009-12-03 17:30:56 +00:00
< / div >
< / body >
< / html >