fceux/web/help/fm2.html

465 lines
29 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="en">
2012-03-23 20:30:31 +00:00
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="generator" content="HelpNDoc Personal Edition 7.0.0.199">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="favicon.ico"/>
<title>.fm2</title>
<meta name="description" content="" />
<meta name="keywords" content="FCEUX Movie File format">
<!-- Twitter Card data -->
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content=".fm2">
<meta name="twitter:description" content="">
<!-- Open Graph data -->
<meta property="og:title" content=".fm2" />
<meta property="og:type" content="article" />
<meta property="og:description" content="" />
<meta property="og:site_name" content="FCEUX Help" />
<!-- Bootstrap core CSS -->
<link href="vendors/bootstrap-3.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->
<link href="vendors/bootstrap-3.4.1/css/ie10-viewport-bug-workaround.css" rel="stylesheet"/>
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="vendors/html5shiv-3.7.3/html5shiv.min.js"></script>
<script src="vendors/respond-1.4.2/respond.min.js"></script>
<![endif]-->
<!-- JsTree styles -->
<link href="vendors/jstree-3.3.10/themes/default/style.min.css" rel="stylesheet"/>
<!-- Hnd styles -->
<link href="css/layout.min.css" rel="stylesheet" />
<link href="css/effects.min.css" rel="stylesheet" />
<link href="css/theme-light-blue.min.css" rel="stylesheet" />
<link href="css/print.min.css" rel="stylesheet" media="print" />
<style type="text/css">nav { width: 250px} @media screen and (min-width:769px) { body.md-nav-expanded div#main { margin-left: 250px} body.md-nav-expanded header { padding-left: 264px} }</style>
<!-- Content style -->
<link href="css/hnd.content.css" rel="stylesheet" />
2012-03-23 20:30:31 +00:00
</head>
<body class="md-nav-expanded">
<div id="skip-link">
<a href="#main-content" class="element-invisible">Skip to main content</a>
</div>
<header class="headroom">
<button class="hnd-toggle btn btn-default">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
</button>
<h1>FCEUX Help</h1>
</header>
<nav id="panel-left" class="md-nav-expanded">
<!-- Nav tabs -->
<ul class="tab-tabs nav nav-tabs" role="tablist">
<li id="nav-close">
<button class="hnd-toggle btn btn-default">
<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
</button>
</li>
<li role="presentation" class="tab active">
<a href="#contents" id="tab-contents" aria-controls="contents" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-list"></i>
Contents
</a>
</li>
<li role="presentation" class="tab">
<a href="#index" id="tab-index" aria-controls="index" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-asterisk"></i>
Index
</a>
</li>
<li role="presentation" class="tab">
<a href="#search" id="tab-search" aria-controls="search" role="tab" data-toggle="tab">
<i class="glyphicon glyphicon-search"></i>
Search
</a>
</li>
</ul> <!-- /Nav tabs -->
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="contents">
<div id="toc" class="tree-container unselectable"
data-url="_toc.json"
data-openlvl="1"
>
</div>
</div> <!-- /contents-->
<div role="tabpanel" class="tab-pane" id="index">
<div id="keywords" class="tree-container unselectable"
data-url="_keywords.json"
data-openlvl="1"
>
</div>
</div> <!-- /index-->
<div role="tabpanel" class="tab-pane" id="search">
<div class="search-content">
<div class="search-input">
<form id="search-form">
<div class="form-group">
<div class="input-group">
<input type="text" class="form-control" id="input-search" name="input-search" placeholder="Search..." />
<span class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</button>
</span>
</div>
</div>
</form>
</div> <!-- /search-input -->
<div class="search-result">
<div id="search-info"></div>
<div class="tree-container unselectable" id="search-tree"></div>
</div> <!-- /search-result -->
</div> <!-- /search-content -->
</div> <!-- /search-->
</div> <!-- /Tab panes -->
</nav>
<div id="main">
<article>
<div id="topic-content" class="container-fluid"
data-hnd-id="fm2"
data-hnd-context="25"
data-hnd-title=".fm2"
>
<div class="navigation">
<ol class="breadcrumb">
<li><a href="Technicalinformation.html">Technical Information</a></li><li><a href="Movieformats.html">Movie &amp; Savestate formats</a></li>
</ol>
<div class="nav-arrows">
<div class="btn-group btn-group-xs" role="group"><a class="btn btn-default" href="Movieformats.html" title="Movie &amp; Savestate formats" role="button"><span class="glyphicon glyphicon-menu-up" aria-hidden="true"></span></a><a class="btn btn-default" href="Movieformats.html" title="Movie &amp; Savestate formats" role="button"><span class="glyphicon glyphicon-menu-left" aria-hidden="true"></span></a><a class="btn btn-default" href="fcm.html" title=".fcm" role="button"><span class="glyphicon glyphicon-menu-right" aria-hidden="true"></span></a></div>
</div>
</div>
<a id="main-content"></a>
<h2>.fm2</h2>
<div class="main-content">
<p></p>
<p class="rvps2"><span class="rvts17">FCEUX Movie File format</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">FCEUX uses a new movie file format - .fm2.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">This differs from the previous FCE Ultra movie format (.fcm) in the following ways:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">It is text based by default; allowing easy movie editing/splicing</span></li>
<li class="rvps2"><span class="rvts6">An imbedded GUID so FCEUX can tell if a savestate belongs to a movie file</span></li>
<li class="rvps2"><span class="rvts6">Movies recorded from Start (Power-on) no longer have a redundant savestate</span></li>
<li class="rvps2"><span class="rvts6">Contains mouse input for recording the Zapper &amp; Arkanoid Paddle</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Format</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">FM2 consists of two parts: Header and Input Log.</span></p>
<p class="rvps2"><span class="rvts6">The header is always in ASCII plain text format. It consists of several key-value pairs.</span></p>
<p class="rvps2"><span class="rvts6">The input log section can be identified by it starting with a | (pipe).</span></p>
<p class="rvps2"><span class="rvts6">The input log section can be either in ASCII plain text format or in binary format.</span></p>
<p class="rvps2"><span class="rvts6">The input log section terminates at EOF, unless the </span><span class="rvts45">length</span><span class="rvts6"> key is specified in header.</span></p>
<p class="rvps2"><span class="rvts6">Newlines may be \r\n or \n.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Header</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Key-value pairs consist of a key identifier, followed by a space separator, followed by the value text.</span></p>
<p class="rvps2"><span class="rvts6">Value text is always terminated by a newline, which the value text does not include.</span></p>
<p class="rvps2"><span class="rvts6">The value text is parsed differently depending on the type of the key.</span></p>
<p class="rvps2"><span class="rvts6">The key-value pairs may be in any order, except that the first key must be version.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Integer keys (also used for booleans, with a 1 for true and 0 for false) must have a value that can be stored as int32:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- version</span><span class="rvts6"> (required) - the version of the movie file format; for now it is always 3</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- emuVersion</span><span class="rvts6"> (required) - the version of the emulator used to produce the movie</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- rerecordCount</span><span class="rvts6"> (optional) - the rerecord count</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;-</span><span class="rvts45"> palFlag</span><span class="rvts6"> (bool) (optional) - true if the movie uses PAL timing</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;-</span><span class="rvts45"> NewPPU</span><span class="rvts6"> (bool) (optional) - true if the movie uses New PPU</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- FDS</span><span class="rvts6"> (bool) (optional) - true if movie was recorded on a Famicom Disk System (FDS) game</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- fourscore</span><span class="rvts6"> (bool) - true if a fourscore was used. If fourscore is not used, then port0 and port1 are required</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- port0 </span><span class="rvts6">- indicates the type of input device attached to the port 0. Supported values are:</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_NONE = 0</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_GAMEPAD = 1</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_ZAPPER = 2</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- port1</span><span class="rvts6"> - indicates the type of input device attached to the port 1. Supported values are:</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_NONE = 0</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_GAMEPAD = 1</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SI_ZAPPER = 2</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- port2</span><span class="rvts6"> (required) - indicates the type of the FCExp port device which was attached. Supported values are:</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; &nbsp; &nbsp;SIFC_NONE = 0</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- binary</span><span class="rvts6"> (bool) (optional) - true if input log is stored in binary format</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts6">&nbsp;</span><span class="rvts45">- length</span><span class="rvts6"> (optional) - movie size (number of frames in the input log). If this key is specified and the number is &gt;= 0, the input log ends after specified number of records, and any remaining data should not be parsed. This key is used in </span><span class="rvts116">fm3</span><span class="rvts6"> format to allow storing extra data after the end of input log</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">String keys have values that consist of the remainder of the key-value pair line. As a consequence, string values cannot contain newlines.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- romFilename</span><span class="rvts6"> (required) - the name of the file used to record the movie</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- comment </span><span class="rvts6">(optional) - simply a memo</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 36px; list-style-position: outside; list-style-type: circle;">
<li class="rvps2"><span class="rvts6">by convention, the first token in the comment value is the subject of the comment</span></li>
<li class="rvps2"><span class="rvts6">by convention, subsequent comments with the same subject should have their ordering preserved and may be used to approximate multi-line comments</span></li>
<li class="rvps2"><span class="rvts6">by convention, the author of the movie should be stored in comment(s) with a subject of: </span><span class="rvts45">author</span></li>
</ul>
<p class="rvps2"><span class="rvts6">Example:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside;">
<li class="rvps2"><span class="rvts6">comment author adelikat</span></li>
</ul>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- subtitle </span><span class="rvts6">(optional) - a message that will be displayed on screen when movie is played back (unless Subtitles are turned off, see </span><a class="rvts23" href="MovieOptions.html">Movie options</a><span class="rvts6">)</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 36px; list-style-position: outside; list-style-type: circle;">
<li class="rvps2"><span class="rvts6">by convention, subtitles begin with the word "subtitle"</span></li>
<li class="rvps2"><span class="rvts6">by convention, an integer value following the word "subtitle" indicates the frame that the subtitle will be displayed</span></li>
<li class="rvps2"><span class="rvts6">by convention, any remaining text after the integer is considered to be the string displayed</span></li>
</ul>
<p class="rvps2"><span class="rvts6">Example:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside;">
<li class="rvps2"><span class="rvts6">subtitle 1000 Level Two</span></li>
</ul>
<p class="rvps2"><span class="rvts6">At frame 1000 the words "Level Two" will be displayed on the screen</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- guid </span><span class="rvts6">(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</span></p>
<p class="rvps2"><span class="rvts6">GUID keys have a value which is in the standard guide format: 452DE2C3-EF43-2FA9-77AC-0677FC51543B</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts119"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- romChecksum </span><span class="rvts6">(required) - the base64 of the hexified MD5 hash of the ROM which was used to record the movie</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts118"><br/></span></p>
<p class="rvps2"><span class="rvts45">&nbsp;- savestate </span><span class="rvts6">(optional) - a </span><a class="rvts23" href="fcs.html">fcs</a><span class="rvts6"> savestate blob, in case a movie was recorded from savestate &nbsp;</span></p>
<p class="rvps2"><span class="rvts6">Hex string keys (used for binary blobs) have a value that is like 0x0123456789ABCDEF...</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts21">Input log</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The input log section consists of movie records either in the form of text lines or in the form of binary data.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts117">Text format (default format):</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Every frame of the movie is represented by line of text beginning and ending with a | (pipe).</span></p>
<p class="rvps2"><span class="rvts6">The fields in the line are as follows, except when fourscore is used.</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts73">|commands|port0|port1|port2|</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Field </span><span class="rvts45">commands</span><span class="rvts6"> is a variable length decimal integer which is interpreted as a bit field corresponding to miscellaneous input states which are valid at the start of the frame. Current values for this are:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">1 = Soft Reset</span></li>
<li class="rvps2"><span class="rvts6">2 = Hard Reset (Power)</span></li>
<li class="rvps2"><span class="rvts6">4 = FDS Disk Insert</span></li>
<li class="rvps2"><span class="rvts6">8 = FDS Disk Select</span></li>
<li class="rvps2"><span class="rvts6">16 = VS Insert Coin</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The format of port0, port1, port2 depends on which types of devices were attached.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">SI_GAMEPAD:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">the field consists of eight characters which constitute a bit field</span></li>
<li class="rvps2"><span class="rvts6">any character other than ' ' or '.' means that the button was pressed</span></li>
<li class="rvps2"><span class="rvts6">by convention, the following mnemonics are used in a column to remind us of which button corresponds to which column: </span><span class="rvts45">RLDUTSBA</span><span class="rvts6"> (Right, Left, Down, Up, sTart, Select, B, A)</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">SI_ZAPPER:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts45">XXX YYY B Q Z</span></li>
</ul>
<p class="rvps2"><span class="rvts45">XXX: </span><span class="rvts6">%03d, the x position of the mouse</span></p>
<p class="rvps2"><span class="rvts45">YYY: </span><span class="rvts6">%03d, the y position of the mouse</span></p>
<p class="rvps2"><span class="rvts45">B: </span><span class="rvts6">%1d, 1 if the mouse button is pressed; 0 if not</span></p>
<p class="rvps2"><span class="rvts45">Q: </span><span class="rvts6">%1d, an internal value used by the emulator's zapper code</span></p>
<p class="rvps2"><span class="rvts45">Z: </span><span class="rvts6">%d, a variable-length decimal integer; an internal value used by the emulator's zapper code</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">SI_NONE:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">the field must be empty</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">If a </span><span class="rvts45">fourscore</span><span class="rvts6"> is used, then port0 and port1 are irrelevant and ignored.</span></p>
<p class="rvps2"><span class="rvts6">The input types must all be gamepads, and each input log record must be in the following format:</span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts73">|commands|RLDUTSBA|RLDUTSBA|RLDUTSBA|RLDUTSBA|port2|</span></p>
<p class="rvps2"><span class="rvts6">{commands, player1, player2, player3, player4, port2}</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
2020-12-23 18:05:36 +00:00
<p class="rvps2"><span class="rvts117">Binary format:</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">Input log section starts with a | (pipe).</span></p>
<p class="rvps2"><span class="rvts6">Every frame of the movie is represented by a record of a fixed length which can be determined by the devices on port0 and port1.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The first byte of each record stores "commands" bit field.</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">bit 0 = Soft Reset</span></li>
<li class="rvps2"><span class="rvts6">bit 1 = Hard Reset (Power)</span></li>
<li class="rvps2"><span class="rvts6">bit 2 = FDS Disk Insert</span></li>
<li class="rvps2"><span class="rvts6">bit 3 = FDS Disk Select</span></li>
<li class="rvps2"><span class="rvts6">bit 4 = VS Insert Coin</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">The remaining bytes in the record depend on which types of devices are attached to port0 and port1.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">SI_GAMEPAD:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">1 byte added to the size of record</span></li>
<li class="rvps2"><span class="rvts6">bits of the byte represent the state of buttons (bit0 = A, bit1 = B, bit2 = Select, bit3 = sTart, bit4 = Up, bit5 = Down, bit6 = Left, bit7 = Right). If the bit is set, respective button is considered to be pressed, if the bit is clear, the button is not pressed</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">SI_ZAPPER:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">12 bytes added to the size of record</span></li>
<li class="rvps2"><span class="rvts6">1st byte - the x position of the mouse</span></li>
<li class="rvps2"><span class="rvts6">2nd byte - the y position of the mouse</span></li>
<li class="rvps2"><span class="rvts6">3rd byte - 1 if the mouse button is pressed; 0 if not</span></li>
<li class="rvps2"><span class="rvts6">4th byte - an internal value used by the emulator's zapper code</span></li>
<li class="rvps2"><span class="rvts6">bytes 5-12 (uint64) - an internal value used by the emulator's zapper code</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">SI_NONE:</span></p>
<ul style="text-indent: 0px; padding: 0; margin: 0 0 0 24px; list-style-position: outside; list-style-type: disc;">
<li class="rvps2"><span class="rvts6">0 bytes added to the size of record</span></li>
</ul>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">If a </span><span class="rvts45">fourscore</span><span class="rvts6"> is used, then port0 and port1 are irrelevant and ignored. 4 bytes are added to the size of record. The bits of the 1st byte represent the state of buttons of the 1st joypad (bit0 = A, bit1 = B, bit2 = Select, bit3 = sTart, bit4 = Up, bit5 = Down, bit6 = Left, bit7 = Right); bits of the 2nd byte represent the state of buttons of the 2nd joypad, and so on.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<hr style="height: 1px; color : #000000; background-color : #000000; border-width : 0px;">
<p class="rvps2"><span class="rvts60">Notes:</span></p>
<p class="rvps2"><span class="rvts60"><br/></span></p>
<p class="rvps2"><span class="rvts6">A. All movies start from power-on, unless a savestate key-value is present.</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6">B. The emulator uses these framerate constants</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; - NTSC: 1008307711 /256/65536 = 60.099822938442230224609375</span></p>
<p class="rvps2"><span class="rvts6">&nbsp; - PAL : 838977920 &nbsp;/256/65536 = 50.00698089599609375</span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p class="rvps2"><span class="rvts6"><br/></span></p>
<p></p>
<p class="rvps4" style="clear: both;"><span class="rvts18">Created with the Personal Edition of HelpNDoc: </span><a class="rvts19" href="https://www.helpndoc.com/help-authoring-tool">Single source CHM, PDF, DOC and HTML Help creation</a></p>
</div>
<div id="topic_footer"><div id="topic_footer_content">2020</div></div>
</div> <!-- /#topic-content -->
</article>
<footer></footer>
</div> <!-- /#main -->
<div class="mask" data-toggle="sm-nav-expanded"></div>
<!-- Modal -->
<div class="modal fade" id="hndModal" tabindex="-1" role="dialog" aria-labelledby="hndModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="hndModalLabel"></h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary modal-btn-close" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Splitter -->
<div id="hnd-splitter" style="left: 250px"></div>
<!-- Scripts -->
<script src="vendors/jquery-3.5.1/jquery.min.js"></script>
<script src="vendors/bootstrap-3.4.1/js/bootstrap.min.js"></script>
<script src="vendors/bootstrap-3.4.1/js/ie10-viewport-bug-workaround.js"></script>
<script src="vendors/markjs-8.11.1/jquery.mark.min.js"></script>
<script src="vendors/uri-1.19.2/uri.min.js"></script>
<script src="vendors/imageMapResizer-1.0.10/imageMapResizer.min.js"></script>
<script src="vendors/headroom-0.11.0/headroom.min.js"></script>
<script src="vendors/jstree-3.3.10/jstree.min.js"></script>
<script src="vendors/interactjs-1.9.22/interact.min.js"></script>
<!-- HelpNDoc scripts -->
<script src="js/polyfill.object.min.js"></script>
<script src="_translations.js"></script>
<script src="js/hndsd.min.js"></script>
<script src="js/hndse.min.js"></script>
<script src="js/app.min.js"></script>
<!-- Init script -->
<script>
$(function() {
// Create the app
var app = new Hnd.App();
// Update translations
hnd_ut(app);
// Instanciate imageMapResizer
imageMapResize();
// Custom JS
// Boot the app
app.Boot();
});
</script>
</body>
2012-03-23 20:30:31 +00:00
</html>